therion-5.4.1/000077500000000000000000000000001307545355600132065ustar00rootroot00000000000000therion-5.4.1/.gitignore000066400000000000000000000013031307545355600151730ustar00rootroot00000000000000thversion.h thbook/version.tex thmpost.cxx thtex.h thlangdata.h thchencdata.cxx thcsdata.h thmpost.h thcsdata.cxx thtex.cxx thsymbolsetlist.h thsymbolsets.cxx thsymbolsets.h thlangdata.cxx thchencdata.h SYMBOLS.txt thlibrarydata.cxx xtherion/therion.tcl .* !.gitignore *~ *.3d *.a *.err *.exe *.log *.lox *.o *.orig *.pyc *.rej *.shp *.so *.stackdump *.tar.gz *.xhtml *.xvi *.zip core geomag/test/geomag.i geomag/test/geomag.py loch.app/Contents/MacOS/loch samples.doc/ samples/**/*.doc samples/**/*.pdf samples/**/*.html screendump symbols.html therion.res thbook/etc/contents.tex thbook/thbook.pdf thTMPDIR/ xtherion/ver.tcl xtherion/xtherion xtherion/xtherion.tcl xtherion/msgxth.tcl /loch/loch /therion therion-5.4.1/.travis.yml000066400000000000000000000052051307545355600153210ustar00rootroot00000000000000dist: trusty sudo: required language: cpp compiler: - gcc os: - linux - osx before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then echo "deb http://pkg.mxe.cc/repos/apt/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mxeapt.list ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D43A795B73B16ABE9643FE1AFD8FFF16DB45C6AB ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get -qq update ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y texlive-binaries texlive-metapost libwxgtk3.0-dev libvtk6-dev survex imagemagick ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install -y mxe-i686-w64-mingw32.static-binutils mxe-i686-w64-mingw32.static-bzip2 mxe-i686-w64-mingw32.static-expat mxe-i686-w64-mingw32.static-freetype-bootstrap mxe-i686-w64-mingw32.static-gcc mxe-i686-w64-mingw32.static-gettext mxe-i686-w64-mingw32.static-glib mxe-i686-w64-mingw32.static-harfbuzz mxe-i686-w64-mingw32.static-jpeg mxe-i686-w64-mingw32.static-libiconv mxe-i686-w64-mingw32.static-libpng mxe-i686-w64-mingw32.static-tiff mxe-i686-w64-mingw32.static-vtk mxe-i686-w64-mingw32.static-wxwidgets mxe-i686-w64-mingw32.static-xz mxe-i686-w64-mingw32.static-zlib ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew tap homebrew/science ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install freetype wxmac vtk ; fi before_script: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export PATH=/usr/lib/mxe/usr/bin:$PATH ; fi script: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make config-debian ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./therion --print-symbols ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make samples ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make cleanrest ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make config-win32cross ; fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make config-macosx ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make ./therion ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make loch/loch ; fi - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./therion --version ; fi branches: only: - master therion-5.4.1/CHANGES000066400000000000000000001073031307545355600142050ustar00rootroot00000000000000Therion 5.4.1 (2017-04-18): therion: * added fonts-setup layout option * added min-symbol-scale layout option * added support for -scale for point and line symbols (1.0 ≡ medium symbol size) * updated Russian translation [PR#73,74] * bugs fixed: - remove debugging output when reading Survex err files - don't accept stddev <= 0 -------------------------------------------------------------------------------- Therion 5.4.0 (2017-04-03): infrastructure: * github.com/therion repos created * added support for mxe.cc cross-compiler * travis-ci.org integration therion: * include UISv1 grade definitions [PR#6] * new ini file option: tex-fonts-optional * simple CSV database export with shot and equate lists [PR#9,19] * KML export improved (survey title, map comment, folder icons, entrances, survey names...) [PR#13] * added loop error info to .3d model * sync up img.c and img.h with latest Survex versions [PR#16] * update to latest poly2tri code [PR#43] * documentation improvements [PR#29,38,42] * Chinese translation added -- manual setup of fonts in the ini file (pdf-fonts) is necessary (thanks to Zhang Yuan Hai and Duncan Collis) * updated Bulgarian, Czech, English, German, Portuguese, Russian and Slovak translations [PR#9,12,18,34,41,46,55,56,58,60,65,67,68,69,70,72] * new and updated map symbols: - added line rope symbol, updated line handrail in MP [PR#9] - added area flowstone to AUT symbolset [PR#35] - added line fixed-ladder - added polyline_offset macro in MP - fixed AUT ceiling-step and ceiling-meander [PR#47] - changed AUT painted/fixed station to ASF:fixed layout [PR#48] * bugs and issues fixed: - fix missing font declarations when using pdf-fonts with more than 256 chars - added export of CLIP attribute in SHP export - include coordinate system and date-surveyed in the .3d export [PR#9,19] - fix warning "Can't Open Cavern Log File For Input" [PR#9] - fix compiler warnings [PR#10,22,24] - fix altitude colours with centreline [PR#11] - fix survex path detection - ensure text files end with a new line [PR#14] - fix typos in messages and comments [PR#17,23,25,39,40,45] - make "make clean" work fully for debug build [PR#20] - regularise indentation to use spaces [PR#26] - whitespace clean-up [PR#27] - sync divergent docs of therion command line [PR#28] - eliminate second copy of Survex img code [PR#33] - remove accidentally committed files [PR#37] - remove redundant NULL checks [PR#44] - use $(MAKE) instead of make [PR#51] - improve calculation of fractional year [PR#52] - fixing raft-cone point being drawn as raft [PR#54] xtherion: * shortcuts to delete a line point (Ctrl-Shift-D) and zoom (Ctrl-Up/Down) * colouring of lines based on type * station point shown with triangle instead of dot * Line simplification command to reduce number of points without converting to Bezier [PR#8] * apply proper collation when sorting [PR#71] * bugs fixed: - fix long delay processing large log files [PR#2] - fix loading of files with no extension in text editor [PR#30] - fix line point contextual menu [PR#61] - fix xtherion/lang/process.pl regex [PR#62] - include missing translatable texts [PR#63,66] - enable canvas zoom with the mouse wheel [PR#64] - uncomprehensible error message while loading unsupported progressive JPEGs loch: * manual page added [PR#15] * bugs fixed: - fix assertions with wxWidgets 3.0 [PR#1] - remove redundant NULL checks [PR#44] - fix loch "make depend" [PR#32] -------------------------------------------------------------------------------- Therion 5.3.16 (2014-12-28): therion: * scale upper limit changed to 1:10 * geomag data updated upto 2020 * bugs fixed: - black area displayed instead of some patterns in SVG - broken XHTML output when string formatting keywords are used in map-comment etc. - unescaped special characters in map-comment etc. in XHTML - improved error message when therion can't map custom TeX fonts in MetaPost macros to Unicode - cave depth value in XHTML output - invalid compass/backcompass averaging formula xtherion: * elevation orientation in Compiler map structure loch: * VTK 6.0 support * wxWidgets 3.0 support -------------------------------------------------------------------------------- Therion 5.3.15 (2014-05-27): therion: * multiline comments inside (comment/endcomment) block allowed in data and configuration files * new TeX variables \cave[max|min]z = altitude max|min value \thversion = current therion version \currentdate = current date \outcs[code|name] = output CS code and name \northdir = true or grid \magdecl = magnetic declination in degrees \gridconv = grid meridian convergence in degrees * new metapost variables NorthDir = "true" or "grid" MagDecl = magnetic declination in degrees GridConv = grid meridian convergence in degrees * bugs fixed: - invalid colors for station names and wall altitudes xtherion: * resetting symbol options when type is changed can be turned off using xth(gui,me,type_reset_options) variable * you can turn off symbol type translation in dropdown menus using xth(gui,me,type_dropdown_trans) variable * bugs fixed: - area type u type change bug -------------------------------------------------------------------------------- Therion 5.3.14 (2014-02-22): xtherion: * added Undo/Redo toolbar buttons * added option Edit->Hide inactive scraps * added context menu, right click on line and point -------------------------------------------------------------------------------- Therion 5.3.13 (2014-01-22): therion: * bugs fixed: - update survex img parser to v8 (should fix various errors) - several patches from Wookey's debian distribution applied -------------------------------------------------------------------------------- Therion 5.3.12 (2013-12-22): therion: * -enable/disable spay-shots should work for VRML and DXF format (splay shots in separate layer) * added ATTR__shotflag_splay, ATTR__shotflag_duplicate, ATTR__shotflag_approx to metapost code before line survey * warning raised, if equate statement creates new station in some subsurvey * removed transaction from SQL export * bugs fixed: - color map-fg altitude should work for elevation projection - error deleting temporary directory - missing vcomp100.dll in Win32 installation xtherion: * bugs fixed: - BOM handling in UTF-8 files - ver.tcl ends with lf only loch: * bugs fixed: - file open dialog not working properly on Debian linux -------------------------------------------------------------------------------- Therion 5.3.11 (2012-12-22): therion: * added -survey option for map for setting survey associated with map. For example all surveying statistics from this survey will be used, when this map is selected for output. * added sketch-colors option to thconfig file, to reduce size of sketch bitmap images in maps * hide symbol from legend, if it has explicitly empty translation * survey-level works for point station-name labels, if station name is automatically determined (no -text is specified) * symbol-show|hide group text for point label, remark, date and line label * grid-angle - can be used in centerline to specify magnetic grid angle (declination against grid north). * -cs output specification works for export cave-list (including lat-long) * dates are shown using OS locale settings in map export * layout statistics explo/topo-length on/hide/off -- if it is off, team members are sorted alphabetically * KML export format supported for cave-list and continuation-list * bugs fixed: - PLT export in output coordinate system - context point air-draught not working - instrument position in centerline does not work - debug scrap-names crashes if empty scraps - counter not working in centerline data diving - revise not working outside of survey context - wrong length/depth and other statistics calculation for map output - sketch bitmaps inserted multiple times in PDF files xtherion: * bugs fixed: - new file in xtherion works, even if file is already open -------------------------------------------------------------------------------- Therion 5.3.10 (2012-08-13): therion: * added new point types: ice-stalactite, ice-stalagmite, ice-pillar, clay-choke, clay-tree * added new wall subtypes: pit, flowstone, moonmilk, overlying * added new symbol groups: ice, sediments * added -height option for pit/wall:pit * added new layout option: color map-bg transparent * full OSGB grid coverage (e.g. cs OSGB:ST) * Austrian symbol set added (thanks to Georg Pacher) * added New Zealand symbol set (NZSS, thanks to Bruce Mutton) * updated UIS symbol set (thanks to Bruce Mutton) * updated German translation (thanks to Georg Pacher) * updated Italian translation (thanks to Marco Corvi) * added bulgarian translation (thanks to Alexander Yanev) * updated English translation (thanks to Bruce Mutton) * added te reo Maori translation (thanks to Kyle Davis) * added possibility to define own coordinate system in therion.ini (cs-def) * updated survex img library to version 1.1.15 * added option -enable/disable splay-shots to 3d model export (works with .3d and .kml file formats) * bugs fixed: - fixed huge coordinate numbers in extended elevation xvi - xvi with sketches export - unnecessary warningcheck changes eliminated from metapost code - fixed bug with 3d model generation from scraps without outline - fixed bug with missing patterns in symbols.xhtml - fixed bug - direction point not working with line secion - fixed inaccurate clipping of coloured scrap background - fixed placement of surface bitmaps with larger offset - fixed alignment of some point symbols in AUT symbol set - missing white fill below cave passages in transparent PDFs if background colour is white (needed if the map is included into other map with non-white background) - fixed incorrect line width conversion in some patterns - hide white background of scraps when the PDF layer containing them is invisible - constrained Delaunay triangulation engine replaced by poly2tri - passage outline scanning algorithm improved - "nosurvey" shots allowed between unfixed stations - added missing area flowstone, moonmilk and bedrock into legend - fixed xvi export of extended elevation - fixed symbol-hide/show point remark bug - fixed wall:debris bug in AUT symbol set (thanks to Georg Pacher) - fixed layout color map-bg transparent bug - LRUD area dimensions is drawn for all shots before these shots are drawn (centerline is compact when map is exported from centerline only) xtherion: * bugs fixed: - loch: * VTK file export changed to binary type (problem with coordinate systems) * added checkbox that enables/disables surface lighting (Scene->Surface) * bugs fixed: - vthreshold should work now for LRUD modelling -------------------------------------------------------------------------------- Therion 5.3 (2010-02-17): therion: * added language selector for strings * -filter (on)|off option added to continuation export to support export of all continuations * -surveys (on)|off option added to cave-list export to allow export of raw list of caves * new easy setup for OpenType and TrueType fonts (requires lcdf-typetools) (new otf2pfb and pdf-fonts options in therion.ini) * basic support for right-to-left scripts in labels and legend * PDF files now contain unicode mapping information to allow searching and copying texts consisting of accented and non-latin characters * georeferencing data added to pdf maps * new layout option: symbol-color * new symbol groups: water, speleothems, passage-fills, equipment * new flags for stations: arch and overhang to mark these surface karst features * support for splay shots without station names (using "-" or "." as station name) * added greek translation (thanks to Stelios Zacharias) * added albanian translation (thanks to Fatos Katallozi) * updated german translation (thanks to Roger Schuster; Georg Pacher's additions to be implemented soon) * sketches displayed in map layer in pdf and svg, not among surface bitmaps (T#8996) * PROJ.4 library updated to 4.7.0 * geomag data updated until 2015 * bugs fixed: - BCRA3 and BCRA5 survey grades fixed - missing altitudes in cave list - atlas page exclusion - map header positioning using real numbers - attribute export to metapost - fixed russian translation (B#26399) - transparency in metapost reset when followed by clipped area - back readings supported in data roles+instruments - missing LRUD data in PLT export (B#25532) - segfault on line with single point - "-flip none" not working for scrap - lat/long out of range - map-header x y off behaves as if map-header x y nw (B#25537) - incorrect boundary of background sketches in pdf and svg maps xtherion: * script for creation of OziExplorer MAP files for georeferenced maps (Help->Calibrate bitmap) * added import functions for PocketTopo export - centerline in text editor: File->Import->PocketTopo therion export - sketches in map editor: Backgroud Images->Insert->PocketTopo therion export * bugs fixed: - increasing of station numbers with leading zeros or trailing letters loch: * added File->Import function to allow merging of e.g. 3d files with DTM in loch format * added Tools->Options->Measurement system setup * splay and duplicate shots are hidden by default * entrances, stations and fixed stations and their labels can be displayed on screen (added toolbar buttons and Scene setup->Stations control panel) -------------------------------------------------------------------------------- Therion 5.2 (2008-08-07): therion: * statistics of explored but not yet surveyed passages. Just specify `-explored ' to point continuation or add `explored ' to station flags and this length will be used in survey/cave statistics. * new handling of user defined symbols (including legend) * improved station flags handling. Added new flags for stations: sink, spring, doline, dig, air-draught(:winter|summer). Also `not' is supported before flag. User defined attributes may be added to stations using flag `attr' followed by attribute name and value. * station flags can be turned on|off using layout: symbol-show|hide point flag:entrance|continuation|sink|spring|doline|dig... * added `splay' and `approx[imate]' survey shot flag * grid labeling using coordinates - layout option grid-coords off|border|all * ability to color labels by scrap color using `color labels on|off' in layout * user can change translation of therion texts at runtime using `text' option in configuration or initialization files * when layouts are copied one into another, map-comments are concatenated instead of replaced * added russian translations + encodings (thanks to Vasily Vl. Suhachev) * updated french translations (thanks to Gilbert Fernandes) * attributes to metapost are exported as strings only * bugs fixed: - symbol-show|hide line moonmilk works - declination output fixed (half year shift removed) - invalid LRUD dimensions in PDF map output - installation script - page grid origin not affected by rotation/meridian convergence - scale works with all point labels xtherion: * ERROR/WARNING state of compilation * changed increased default sidebar width + default sidebar width configuration option in xtherion.ini file * single .xtherion.dat file containing survey and map structures is created after compilation * bugs fixed: - "end of line" characters translation - toolbar icon decriptions added to localization files loch: * export of cave 3D model in VTK format using File->Export * bugs fixed: - wxWidgets 2.8.0 compilation thanks to Olly Betts - walls altitude coloring under Linux -------------------------------------------------------------------------------- Therion 0.5.1 (2007-08-29): therion: * added configuration for debian based linux systems: make config-debian * new samples directory * new subtypes for air-draught symbol: winter and summer * new area types: flowstone, moonmilk * ability to display overlying maps in offset * new point and line type: map-connection (used to indicate connection between map parts - extended elevations, maps in offset) * improved default centerline symbols * LRUD envelopes of maps exported from centerline * point -extend option changed to -from * user defined types of points/lines/areas (using u type and custom subtype string e.g. u:electric-cable) * scraps without calibration stations are allowed * coordinate system specification allowed for scraps * areas exported to SHP files * export of simple DXF maps * updated Italian translation (thanks to Marco Corvi) * bugs fixed: - top level objects selection - generation of extended elevation - map coloring - creating surveys from .3d files - subpixel inaccuracy with bitmap morphing - entering angles/lat-long in degree:minutes format - shapefile export fixes xtherion: * DXF/SVG import in map editor (File->Import) * symbol themes and translations comboboxes * autocompletion in symbol type comboboxes * bugs fixed: - translations of type:subtype works loch: * first Mac OS X version works * bugs fixed: - surface texture mapping under Linux -------------------------------------------------------------------------------- Therion 0.5.0 (2007-02-02): therion: * geodetic coordinate systems support -- CS specification in layout, centerline, surface, import and configuration file. Coordinate systems used all around the world are supported (EPSG and ESRI standards). * added GEOMAG model for automatic calculation of magnetic declination according to cave coordinates and survey date * multiple images (PDF, PNG, JPEG) in PDF map supported (e.g. plan and xelevation in single PDF) using new layout option map-image * new improved vector morphing algorithm * morphing of survey sketches now supported. New -sketch option for scrap + sketches switch in layout. Allows export of morphed survey sketches in PDF and XVI. ImageMagick package (convert and identify executables) are needed to use these features. * -attr option for specification of user defined attributes, valid for all objects. Attributes are exported to metapost code using ATTR_* variables. * shapefile map export format * Google Earth (.kml) map (scrap outlines) and model (centerline) export * -enc|-encoding option allowed for map and model export * top level survey command not needed any more * survey: new -namespace switch, enables using datasets with unique station names * new area type: bedrock * subtype specification is now possible using ":" separator (e.g. border:invisible) * added "system" command in configuration files to execute system commands during therion compilation * new layout option: north (true)|grid * -calibrate option for import * source/endsource construct allowed in configuration files * input allowed within multiline commands * improved ceiling and floor meander symbols * background centerline map exported only when no scraps or maps exist * support for 1.1 survex .3d file format * added German translation of symbols (thanks to Roger Schuster), updated Italian translation (thanks to Marco Corvi). * default Linux installation is done into "/usr/local" instead of "/usr" directory * bugs fixed: - automatic calculation of atlas paper size when only size is specified - extended elevation generation ("break" removed, only "ignore" works) - empty map when exported with -layout-color map-fg map xtherion: * compiler preview toolbox (experimental, acrobat reader supported on Win32, xpdf on Linux (original idea of Marco Corvi)) * sketch control (insert, remove) in scrap toolbox * 3D viewer removed from xtherion * does not connect to Internet any more to check new version available * remembers last working directory on Windows * improved scrap scaling - "Scale" button + scale preview arrow in scrap control * scrap selection selects current scrap first * bugs fixed: - hang when area inserted at the end of file - deleting contents of configuration files should not happen any more - fixed zooming of transparent pictures loch: * bugs fixed: - initial size on multiple display machines - crash when file with texture is opened as loch argument (or doubleclick on Win) -------------------------------------------------------------------------------- Therion 0.4.0 (2006-10-02): therion: * loch - new 3D viewer and default 3D export format * VRML model export improved (added surface texture) * export model: -wall-source (all)|maps|centerline -- specify the source of passage walls * layout: survey-level -- show up to N surveys with station names (default N=0, survey-level all is also accepted). * 3d file import improved -- multiple imports of the same centerline allowed * if no map is selected with export, also centerline is exported * symbol sets overview using --print-symbols option. Output in XHTML format (file symbols.xhtml). * fixed bug with autojoin and multiple projection output xtherion: * images outside .th2 file path accepted, relative path is still created using ".." directory reference * area border lines are highlighted, when selected in listbox * backup of configuration files is created after OK compilation * added IT translation -------------------------------------------------------------------------------- Therion 0.3.10 (2006-04-05): therion: * decimal point in low passage heights * fixed bugs: loop closure errors log, symbol-hide group cave-centreline * SVG export in XHTML format * flowstone and waterflow symbols joined in legend, if used as line and point together * improved loop closure method selection - if there was an error when processed using survex - therion is used for loop closure * when scrap size exceed metapost limits - more reasonable errors are generated + limit for centerline scraps is larger * layout: you can change overlap or size and page setup is automatically recalculated * layout: color map-fg scrap * layout: debug station-names xtherion: * added toolbar (thanks to dzach) * added text editor template (in xtherion.ini file) -------------------------------------------------------------------------------- Therion 0.3.9 (2005-08-30): therion: * units (metric)|imperial in layout and initialization file * new therion.ini switch: loop-closure therion|survex By default, survex is used if present, otherwise therion. * fixed bugs - error log when disk full, vtreshold -> vthreshold * map export to .3d files * scraps in one .th2 file that have common end line points are automatically joined * scrap names in map output, via layout: debug scrap-names xtherion: * fixed bugs - view is not moved when line is split, file is not changed when image insertion is canceled -------------------------------------------------------------------------------- Therion 0.3.8 (2005-05-10): therion: * SVG export added (features not yet supported: map header, font embedding, layers, map transparency -- this requires SVG 1.2 features) * DXF model export added * export format automatically determined from file extension * layout: map-header-bg on|(off) - when on, background of map header is filled with background color * .ini files installed into /etc directory, .ini.new files always installed xtherion: * new items in xtherion.ini file * text editor - indent mode now similar to ordinary text editors -------------------------------------------------------------------------------- Therion 0.3.7 (2005-03-16): therion: * new (more intuitive) extended elevation arrangement * new import options: filter, surveys * new surface option: grid-flip * new centerline option: extend * new point type: dimensions * new scrap option: flip * new scrap/centerline option: station-names * reduced `extend' point option * all altitudes are exported as a difference against grid Z origin * XVI (xtherion vector image) map export * UD data from centerline used in 3D model generated from scraps * plt export with LRUD data * `/' supported as survey name character * Unicode characters support in layout TeX code * fixed bugs: plumbed shots; join; statistics of centerline only maps xtherion: * limited i18n support * XVI support (automatic insertion of survey stations, LRUD data) * fixed bug with gamma correction -------------------------------------------------------------------------------- Therion 0.3.6 (2005-01-31): therion: * LRUD passage dimensions support * centreline processed in other programs (*.3d, *.plt) may be imported * transparent solid surface in 3D model * map colouring support * map grid support * if station subtype is not specified, Therion reads it from centreline, if it's specified there * MetaPost symbols completed and improved (error handling, division by zero fixed) * scrap filled and clipped correctly even if scrap border intersects itself * centerline, bounding box and surface supported in 3DMF and VRML export * Spanish translation added * input language changes: - centreline command: mark, walls, vtreshold; + new role pics + new data item ignoreall + new data type dimensions (station, up/ceiling, down/floor, left, right) + LRUD dimensions may specified as pair [ ] - point command: snow - line command: ceiling/floor-meander, border:presumed + line gradient and water-flow not clipped by default - area command: blocks, snow, ice, clay, pebbles - scrap command: -3d changed to -walls option - equate command: may be used outside of centreline - import command added * configuration file changes: - layout command: grid, grid-size, code/endcode, color map-fg , color-legend xtherion: * new items in xtherion.ini * file timestamps are checked while saving * auto save feature * lot of bugfixes * Map editor: new shortcuts (ctrl-a, ctrl-r, page up/down, shift page up/down) * Map editor: clicking twice on the same point ends the point insertion mode * Map editor: station names are automatically increased (or decreased :) in extended elevation) -------------------------------------------------------------------------------- Therion 0.3.5 (2004-11-25): therion: * map rotation in 2D output supported * bug fixed: -scale option works for point labels * input language changes: - centreline command: percent[age] clino units support * configuration file changes: - layout command: rotate xtherion: * Map editor: point, line and area symbol are never inserted outside of a scrap -------------------------------------------------------------------------------- Therion 0.3.4 (2004-10-22): therion: * MetaPost and TeX supplied in Therion for Windows installer work even if there is other TeX(Live) installation present in the system (see the tex-env initialization file option) * if there are no maps defined and map is exported, all scraps in given projection are exported * input language changes: - centreline command: group/endgroup * initialization file: - new option: tex-env * fixed bug in atlas export introduced in 0.3.3 * fixed minor MetaPost bugs xtherion: * Compiler: hyperlinked error messages * Map editor: larger tick at the line symbol beginning * Map editor: new scrap is inserted in the beginning of the file * Map editor: fixed bug when deleting last line point * Map editor: line symbol type change resets rotations and lengths set-up in the line points -------------------------------------------------------------------------------- Therion 0.3.3 (2004-09-10): therion: * surface (topographical) map supported in 2D maps * surface grid supported in 3D models (therion format) * typesetting of legend symbols in multiple columns fixed * input language changes: - new command surface - point, line and area commands have new option: context - line command: survey has new subtypes: cave, surface - line command has new option: adjust - map command: ability to draw centreline from specified survey without drawing a scrap; new option: projection * configuration file changes: - layout command has new options: legend-width, legend-columns, surface, surface-opacity - export model has new options: enable, disable xtherion: * Model viewer: mouse wheel supported -------------------------------------------------------------------------------- Therion 0.3.2 (2004-07-22): therion: * configuration file changes: - layout command: scale 1 50 up to 1 100000 allowed and supported * Therion constructs accented characters if the character is not present in the font. It used to omit the accent and display the base character only * error message `invalid command context' changed to `missing xxx command before yyy command' * French translation added xtherion: * line split bug fixed * automatically checks for updates * 3D viewer: reload (Ctrl+R) * 3D viewer: bounding box computation fixed -------------------------------------------------------------------------------- Therion 0.3.1 (2004-04-23): therion: * input language changes: - scrap command has new option: 3d * windows version: accepts slashes as directory separators in the export command * Czech translation added xtherion: * Map editor: fixed bug with empty lines displayed as text * Map editor: doesn't allow to insert a background image if the *.th2 file hasn't been saved -------------------------------------------------------------------------------- Therion 0.3.0 (2004-04-16): therion: * Therion exports 3D model * loop closure algorithms implemented in Therion * input language changes: - centreline command: fix doesn't accept covariances specification * configuration file changes: - layout command: map-header improved - export command: new formats for 3D model export added -- vrml, 3dmf, therion (default) * initialization file changes: - removed item: path-cavern * log file contains both loop errors and scrap distortions at the end * completely new Win32 installation with TeX and Tcl/Tk included xtherion: * data file may be specified as an argument from the command line * basic 3D model viewer added * Map editor: only the visible part of background images is zoomed (less memory consumption and speed improvement) -------------------------------------------------------------------------------- Therion 0.2.19 (2004-03-01): therion: * input language changes: - place option of point, line, area commands: none renamed to default - area command: place bottom is default - line command: if contour has no gradient specified, visualization is symbol-set dependent (no gradient tick in UIS, tick in the middle in SKBB) - line command: pit may be spelled as pitch - line command has new type: gradient - survey command has new option: person-rename * configuration file changes: - layout command has new option: debug - select command: new rules for selection if there is no map selected * scrap transformation improved, distortion logged in the log file * debugging map mode shows scrap distortions * bug fixed in PLT export xtherion: * Map editor: status bar displays command preview * Map editor: new Area control * Map editor: `Move to' in File commands added * Map editor: name of the edited scrap displayed in Title bar * Map editor: edited line is highlighted * Map editor: selected area is highlighted * Map editor: orientation tick at the beginning of line symbols * Help/Control dialog with key and mouse shortcuts * input (keyboard) encoding menu -------------------------------------------------------------------------------- Therion 0.2.18 (2004-02-12): therion: * Therion supports translations of texts in PDF map/atlas output * Therion exports centreline to SQL database * input language changes: - line command has new type: water-flow - centerline command: discovery-date/team renamed to explo-date/team - layout command has new options: language, colo[u]r, symbol-show, map-comment, map-header, scale-bar, statistics - -author and -copyright options apply only to centreline and scrap, -title to survey, centreline, map and scrap - it's possible to leave date field unspecified `-' * configuration file changes: - export command has new type: database * initialization file changes: - new items: language, encoding-sql - encoding_default renamed to encoding-default * air-draught ticks set according to -scale option -------------------------------------------------------------------------------- Therion 0.2.17 (2003-12-04): therion: * input language changes: - layout command has new options: base-scale, symbol-set, symbol-assign, symbol-hide - size option for point and line symbols accepts following values: tiny (xs), small (s), normal (m), large (l), huge (xl) * support for run-time loading of map symbols * MetaPost processing optimizations -------------------------------------------------------------------------------- Therion 0.2.16 (2003-11-24): therion: * input language changes: - centerline command has new team roles: instruments (insts), assistant (dog) - centerline command has new data readings: up/ceiling, down/floor, left, right, ignore - centerline may be spelled as centreline - deg:min:sec syntax allowed for degree values - point, line and area commands have new option: visibility on/off * new rules for displaying map previews * new initialization file items: tmp-path, tmp-remove * error if no source files are specified * if error occurs under Win32, Therion waits until RETURN is pressed xtherion: * Help/BAC Calculator dialog added -------------------------------------------------------------------------------- Therion 0.2.15: therion: * input language changes: - layout command has new option: code - join command has new option: count * therion checks validity of UTF-8 encoded input files xtherion: * bug fixed -- compiler does not add empty lines to config files -------------------------------------------------------------------------------- Therion 0.2.14 (2003-07-16): therion: * input language changes: - layout command has new option: layers on/off * initialization file syntax changes: cavern-path, pdftex-path, mpost-path, source-path * fonts setup for PDF output * updated documentation * Therion reads (definitely) following environment variable: - THERION -- search paths for [x]therion.ini file -------------------------------------------------------------------------------- Therion 0.2.13 (2003-06-16): therion: * thpdf, theps2pdf and 3dtops external programs integrated into Therion * MetaPost and TeX macros compiled into Therion * compilation: just "make" is enough; works also on win32 systems * input language changes: - centerline command has new options: discovery-date, discovery-team - point command: type anostomosen renamed to anastomosis - layout command has new option: transparency on/off - layout command has changed option: opacity 0.0-100.0 - layout command has changed option: grid-size is measured in real units * Therion reads following environment variables: - THINIT -- search paths for [x]therion.ini file - THERION -- search paths for configuration and source files * PDF output: support for Optional Content Groups (Layers) in Acrobat 6 xtherion: * Text editor: text undo/redo works with tcltk8.4.3 * Map editor: line symbols may be split therion-5.4.1/CONTRIBUTING.md000066400000000000000000000007611307545355600154430ustar00rootroot00000000000000## Pull requests Please follow these rules when submitting pull requests (PR): * make PRs as atomic as possible (don't combine unrelated changes or features into one PR) * the PR should include all necessary documentation updates (summary of the changes in the file [CHANGES](https://github.com/therion/therion/blob/master/CHANGES), all the details in the [thbook](https://github.com/therion/therion/tree/master/thbook)). Please try to be consistent with the style of existing documentation. therion-5.4.1/COPYING000066400000000000000000000431311307545355600142430ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. therion-5.4.1/Makefile000066400000000000000000001502471307545355600146570ustar00rootroot00000000000000# common therion objects export OUTDIR = . CMNOBJECTS = thdate.o extern/shpopen.o extern/dbfopen.o \ thexception.o thbuffer.o thmbuffer.o thlogfile.o thtmpdir.o thlocale.o \ thparse.o thcmdline.o thconfig.o thinput.o thchenc.o thdatabase.o \ thdataobject.o thdatareader.o thsurvey.o thendsurvey.o thdata.o \ thperson.o thtf.o thtfangle.o thtflength.o thtfpwf.o \ thdataleg.o thobjectname.o thinfnan.o thlayout.o thcomment.o \ thinit.o thdb1d.o thsvxctrl.o thdatastation.o thobjectid.o \ thobjectsrc.o thgrade.o thlibrary.o thgeomag.o thbezier.o \ thexport.o thexporter.o thselector.o extern/img.o \ thexpmodel.o thdb2d00.o thscrapis.o thcs.o thcsdata.o thexptable.o \ thdb2d.o thscrap.o thendscrap.o th2ddataobject.o thdb2dprj.o \ thdb2dpt.o thdb2dlp.o thdb2dab.o thdb2dji.o thdb2dmi.o thdb2dcp.o \ thdb2dxm.o thdb2dxs.o thscraplo.o thscraplp.o thscrapen.o \ thpoint.o thline.o tharea.o thlegenddata.o thmpost.o thsymbolsets.o \ thjoin.o thmap.o thexpmap.o thlayoutln.o thlayoutclr.o thexpsys.o thexpuni.o \ thconvert.o thpdf.o thpdfdbg.o thpdfdata.o thtexfonts.o \ thsymbolset.o thlang.o thmapstat.o thexpdb.o thpic.o thsketch.o thproj.o \ extern/lxMath.o extern/lxFile.o thdb3d.o thsurface.o thimport.o thsvg.o thepsparse.o \ thtrans.o thwarpp.o thwarppt.o thwarppme.o thwarp.o thexpshp.o thattr.o thtex.o \ extern/poly2tri/common/shapes.o extern/poly2tri/sweep/advancing_front.o extern/poly2tri/sweep/sweep.o extern/poly2tri/sweep/cdt.o extern/poly2tri/sweep/sweep_context.o \ therion.o extern/proj4/libproj.a CROSS = EXT = # PLATFORM CONFIG # PLATFORM LINUX ##CXX = c++ ##CC = gcc ##POBJECTS = ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHLINUX ##CCPFLAGS = -DTHLINUX ##LDPFLAGS = -s ##export THPLATFORM = LINUX ##OUTDIR = $(abspath $(PWD)/../therion.bin) ##THXTHMKCMD = $(OUTDIR)/therion # PLATFORM DEBIAN CXX = c++ CC = gcc POBJECTS = LOCHEXE = loch/loch CXXPFLAGS = -DTHLINUX CCPFLAGS = -DTHLINUX LDPFLAGS = -s export THPLATFORM = LINUX THXTHMKCMD = ./therion # PLATFORM WIN32 ##CXX = c++ ##CC = gcc ##POBJECTS = extern/getopt.o extern/getopt1.o therion.res extern/getline.o ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHWIN32 ##CCPFLAGS = -DTHWIN32 ##LDPFLAGS = -static-libgcc -static -s ##export THPLATFORM = WIN32 ##OUTDIR = $(abspath $(PWD)/../therion.bin) ##THXTHMKCMD = $(OUTDIR)/therion # PLATFORM WIN32CROSS ##CROSS = i686-w64-mingw32.static- ##EXT = .exe ##CXX = $(CROSS)c++ ##export CC = $(CROSS)gcc ##export AR = $(CROSS)ar ##POBJECTS = extern/getopt.o extern/getopt1.o therion.res extern/getline.o ##LOCHEXE = loch/loch ##CXXPFLAGS = -DTHWIN32 ##CCPFLAGS = -DTHWIN32 ##LDPFLAGS = -static-libgcc -static -s ##export THPLATFORM = WIN32 ##THXTHMKCMD = therion ##OUTDIR = $(abspath $(PWD)/../therion.bin) # PLATFORM MACOSX ##CXX = c++ ##CC = cc ##LOCHEXE = loch/loch ##POBJECTS = extern/getopt.o extern/getopt1.o extern/getline.o ##CXXPFLAGS = -DTHMACOSX ##CCPFLAGS = -DTHMACOSX ##LDPFLAGS = ##export THPLATFORM = MACOSX ##THXTHMKCMD = ./therion # PLATFORM ENDCONFIG # BUILD CONFIG # BUILD OZONE ##CCBFLAGS = -O3 ##CXXBFLAGS = -O3 ##LDBFLAGS = $(LDPFLAGS) # BUILD OXYGEN CCBFLAGS = -O2 CXXBFLAGS = -O2 LDBFLAGS = $(LDPFLAGS) # BUILD RELEASE ##CCBFLAGS = ##CXXBFLAGS = ##LDBFLAGS = $(LDPFLAGS) # BUILD DEBUG ##CCBFLAGS = -ggdb ##CXXBFLAGS = -ggdb -DTHDEBUG ##LDBFLAGS = # BUILD ENDCONFIG # compiler settings CXXFLAGS = -Wall $(CXXPFLAGS) $(CXXBFLAGS) CCFLAGS = -DIMG_API_VERSION=1 -Wall $(CCPFLAGS) $(CCBFLAGS) OBJECTS = $(addprefix $(OUTDIR)/,$(POBJECTS)) $(addprefix $(OUTDIR)/,$(CMNOBJECTS)) # linker settings LIBS = LDFLAGS = $(LDBFLAGS) $(OUTDIR)/%.o : %.cxx $(CXX) -c $(CXXFLAGS) -o $@ $< $(OUTDIR)/%.o : %.cc $(CXX) -c $(CXXFLAGS) -o $@ $< $(OUTDIR)/%.o : %.c $(CC) -c $(CCFLAGS) -o $@ $< all: version outdirs $(OUTDIR)/therion doc xtherion/xtherion $(LOCHEXE) outdirs: mkdir -p $(OUTDIR)/extern/proj4 mkdir -p $(OUTDIR)/extern/poly2tri/sweep/ mkdir -p $(OUTDIR)/extern/poly2tri/common/ mkdir -p $(OUTDIR)/loch mkdir -p $(OUTDIR)/xtherion mkdir -p $(OUTDIR)/thbook version: python set_version.py $(OUTDIR)/extern/proj4/libproj.a: extern/proj4/*.c extern/proj4/*.h $(MAKE) -C ./extern/proj4 $(OUTDIR)/therion: version $(OBJECTS) $(CXX) -Wall -o $(OUTDIR)/therion$(EXT) $(OBJECTS) $(LDFLAGS) $(LIBS) ifneq ($(THPLATFORM),WIN32) $(MAKE) library $(MAKE) $(OUTDIR)/thlibrary.o $(CXX) -Wall -o $(OUTDIR)/therion$(EXT) $(OBJECTS) $(LDFLAGS) $(LIBS) endif $(OUTDIR)/therion.res: therion.rc $(CROSS)windres -i therion.rc -J rc -o $(OUTDIR)/therion.res -O coff init: ./therion --print-init-file > therion.ini install: all tclsh makeinstall.tcl $(THPLATFORM) minor-release: perl makerelease.pl archive: config-debian unixify perl makearchive2.pl release: clean perl makearchive.pl binary: all doc perl makebinary.pl $(THPLATFORM) depend: perl makedepend.pl > Makefile.dep perl maketest.pl Makefile.dep perl makefile.pl mv Makefile.dep Makefile $(CXX) -MM $(CXXFLAGS) *.cxx >> Makefile perl makedepend2.pl library: $(THXTHMKCMD) --print-library-src thlibrarydata.thcfg > thlibrarydata.log $(THXTHMKCMD) --print-xtherion-src > xtherion/therion.tcl perl makelibrary.pl thlibrarydata.log > thlibrarydata.tmp perl maketest.pl thlibrarydata.tmp perl makefile.pl mv thlibrarydata.tmp thlibrarydata.cxx xtherion/xtherion: version xtherion/*.tcl $(MAKE) -C ./xtherion loch/loch: version loch/*.h loch/*.cxx loch/*.c $(MAKE) -C ./loch doc: $(OUTDIR)/thbook/thbook.pdf thbook: version $(OUTDIR)/thbook/thbook.pdf samples: $(OUTDIR)/samples.doc/index.tex $(OUTDIR)/samples.doc/index.tex: $(MAKE) -C samples touch thbook/version.tex $(MAKE) -C thbook $(OUTDIR)/thbook/thbook.pdf: thbook/*.tex $(MAKE) -C thbook clean: perl makefile.pl rm -q thlibrarydata.cxx ./xtherion/therion.tcl perl makefile.pl rmdir -q samples.doc $(MAKE) -C ./samples clean $(MAKE) cleanrest cleanrest: $(MAKE) -C ./xtherion clean $(MAKE) -C ./loch clean $(MAKE) -C ./extern/proj4 clean perl makefile.pl rm -q thmpost.cxx thtex.h thlangdata.h thchencdata.cxx thcsdata.h thmpost.h thcsdata.cxx thtex.cxx thsymbolsetlist.h thsymbolsets.cxx thsymbolsets.h thlangdata.cxx thchencdata.h perl makefile.pl rm -q therion ./xtherion/xtherion ./xtherion/xtherion.tcl therion.exe *~ *.log *.o thchencdata/*~ .xtherion.dat ./xtherion/ver.tcl thversion.h thbook/version.tex perl makefile.pl rm -q xtherion/*~ .xth_thconfig_xth xtherion/screendump thlang/*~ perl makefile.pl rm -q extern/*.o extern/*~ extern/poly2tri/common/*.o extern/poly2tri/sweep/*.o samples/*~ samples/*.log perl makefile.pl rm -q symbols.html therion.res perl makefile.pl rm -q tri/*.o tri/*~ perl makefile.pl rm -q tex/*~ perl makefile.pl rm -q us.stackdump loch/us.stackdump samples/us.stackdump xtherion/us.stackdump perl makefile.pl rm -q mpost/*~ examples/*~ examples/therion.log perl makefile.pl rm -q core symbols.xhtml cave.kml perl makefile.pl rm -q data.3d data.svx data.pos data.pts data.err data.plt perl makefile.pl rm -q cave.3d cave.lox cave.thm cave.pdf cave.sql cave.xhtml therion.tcl cave_a.pdf cave_m.pdf cave.vrml cave.wrl cave.3dmf cave.svg cave.tlx perl makefile.pl rm -q ./thbook/*~ ./thbook/thbook.log ./thbook/thbook.pdf ./lib/*~ ./mpost/*~ ./tex/*~ perl makefile.pl rmdir -q doc thTMPDIR samples.doc symbols cave.shp tests/.doc perl makefile.pl rmdir -q doc symbols cave.shp tests/.doc perl makefile.pl rmdir -q thTMPDIR samples/*/thTMPDIR samples/*/*/thTMPDIR thmpost.h: mpost/*.mp $(MAKE) -C ./mpost thmpost.cxx: mpost/*.mp $(MAKE) -C ./mpost thlibrarydata.cxx: perl makefile.pl cp thlibrarydata.src thlibrarydata.cxx thsymbolsetlist.h: thsymbolsetlist.pl mpost/thTrans.mp perl thsymbolsetlist.pl thtex.h: tex/*.tex $(MAKE) -C ./tex thtex.cxx: tex/*.tex $(MAKE) -C ./tex thchencdata.h: thchencdata/*.TXT $(MAKE) -C ./thchencdata thcsdata.h: thcsdata.tcl tclsh thcsdata.tcl update: $(MAKE) -C ./thlang update unixify: clean tclsh makeunixify.tcl thlangdata.h: thlang/texts.txt $(MAKE) -C ./thlang config-debug: perl makeconfig.pl BUILD DEBUG $(MAKE) -C ./loch config-debug config-release: perl makeconfig.pl BUILD RELEASE $(MAKE) -C ./loch config-release config-oxygen: perl makeconfig.pl BUILD OXYGEN $(MAKE) -C ./loch config-oxygen config-ozone: perl makeconfig.pl BUILD OZONE $(MAKE) -C ./loch config-ozone config-debian: perl makeconfig.pl PLATFORM DEBIAN $(MAKE) -C ./loch config-debian config-linux: perl makeconfig.pl PLATFORM LINUX $(MAKE) -C ./loch config-linux config-win32: perl makeconfig.pl PLATFORM WIN32 $(MAKE) -C ./loch config-win32 config-win32cross: perl makeconfig.pl PLATFORM WIN32CROSS $(MAKE) -C ./loch config-win32cross config-macosx: perl makeconfig.pl PLATFORM MACOSX $(MAKE) -C ./loch config-macosx # external sources $(OUTDIR)/extern/lxMath.o: loch/lxMath.h loch/lxMath.cxx $(CXX) -c $(CXXFLAGS) -o $(OUTDIR)/extern/lxMath.o loch/lxMath.cxx $(OUTDIR)/extern/lxFile.o: loch/lxFile.h loch/lxFile.cxx $(CXX) -c $(CXXFLAGS) -o $(OUTDIR)/extern/lxFile.o loch/lxFile.cxx extern/getopt.o: extern/getopt.c extern/getopt.h extern/getopt1.o: extern/getopt1.c extern/img.o: extern/img.c extern/img.h extern/poly2tri/common/shapes.o: extern/poly2tri/common/shapes.cc extern/poly2tri/common/shapes.h extern/poly2tri/sweep/advancing_front.o: extern/poly2tri/sweep/advancing_front.cc extern/poly2tri/sweep/sweep.o: extern/poly2tri/sweep/sweep.cc extern/poly2tri/sweep/cdt.o: extern/poly2tri/sweep/cdt.cc extern/poly2tri/sweep/sweep_context.o: extern/poly2tri/sweep/sweep_context.cc # DEPENDENCIES $(OUTDIR)/th2ddataobject.o: th2ddataobject.cxx th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thsymbolset.h thsymbolsetlist.h $(OUTDIR)/tharea.o: tharea.cxx tharea.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlang.h thlangdata.h thline.h $(OUTDIR)/thattr.o: thattr.cxx thattr.h thmbuffer.h thchenc.h thchencdata.h \ thparse.h thbuffer.h extern/shapefil.h thexception.h therion.h $(OUTDIR)/thbezier.o: thbezier.cxx thbezier.h $(OUTDIR)/thbuffer.o: thbuffer.cxx thbuffer.h $(OUTDIR)/thchenc.o: thchenc.cxx thchenc.h thchencdata.h thparse.h thbuffer.h \ thmbuffer.h thchencdata.cxx therion.h thexception.h $(OUTDIR)/thchencdata.o: thchencdata.cxx $(OUTDIR)/thcmdline.o: thcmdline.cxx thcmdline.h therion.h thlogfile.h thbuffer.h \ thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h thexport.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thselector.h thtmpdir.h \ extern/getopt.h $(OUTDIR)/thcomment.o: thcomment.cxx thcomment.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thdata.h thtfangle.h \ thtf.h thtflength.h thtfpwf.h thexception.h $(OUTDIR)/thconfig.o: thconfig.cxx thconfig.h thbuffer.h thmbuffer.h thinput.h \ thparse.h thexporter.h thexport.h thobjectsrc.h thlayout.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thobjectname.h therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h \ thselector.h thlang.h thlangdata.h thexception.h thdatareader.h \ thcsdata.h thproj.h thlogfile.h thinit.h thgeomag.h thgeomagdata.h \ thcomment.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thsketch.h thpic.h thcs.h $(OUTDIR)/thconvert.o: thconvert.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h thtexfonts.h $(OUTDIR)/thcs.o: thcs.cxx thcs.h thcsdata.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h extern/proj4/proj_api.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h \ thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h $(OUTDIR)/thcsdata.o: thcsdata.cxx thcsdata.h thparse.h thbuffer.h thmbuffer.h $(OUTDIR)/thdata.o: thdata.cxx thdata.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdataobject.h thdatabase.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thexception.h thsurvey.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thgrade.h thcsdata.h thdatareader.h \ thinput.h $(OUTDIR)/thdatabase.o: thdatabase.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsurvey.h thtfpwf.h thendsurvey.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thcmdline.h \ thdatastation.h thlookup.h thlocale.h thgrade.h thcomment.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thscrap.h thsketch.h thpic.h thtrans.h \ th2ddataobject.h thpoint.h thline.h tharea.h thjoin.h thmap.h thimport.h \ thsurface.h thendscrap.h $(OUTDIR)/thdataleg.o: thdataleg.cxx thdataleg.h thparse.h thbuffer.h thmbuffer.h \ thobjectname.h therion.h thobjectsrc.h thinfnan.h thcs.h thcsdata.h $(OUTDIR)/thdataobject.o: thdataobject.cxx thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h thsurvey.h thtfpwf.h \ thconfig.h thinput.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thselector.h thcsdata.h thdata.h \ thtfangle.h thtf.h thtflength.h thproj.h thcs.h $(OUTDIR)/thdatareader.o: thdatareader.cxx thdatareader.h thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thinput.h \ thexception.h $(OUTDIR)/thdatastation.o: thdatastation.cxx thdatastation.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h $(OUTDIR)/thdate.o: thdate.cxx thdate.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h $(OUTDIR)/thdb1d.o: thdb1d.cxx thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thsurvey.h \ thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thtfpwf.h thsvxctrl.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thpoint.h \ th2ddataobject.h thlogfile.h thsurface.h thlocale.h thinit.h thinput.h \ thconfig.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thselector.h thtrans.h thcs.h thcsdata.h $(OUTDIR)/thdb2d.o: thdb2d.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h thbuffer.h \ thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thdb1d.h thobjectid.h thdataleg.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thexception.h \ thdatabase.h thdataobject.h thtfangle.h thtf.h tharea.h th2ddataobject.h \ thmap.h thjoin.h thpoint.h thline.h thscrap.h thsketch.h thpic.h \ thtrans.h thsurvey.h thtfpwf.h thlogfile.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thexpmap.h thexport.h thlang.h thlangdata.h \ thconfig.h thinput.h thexporter.h thselector.h thtmpdir.h thinit.h $(OUTDIR)/thdb2d00.o: thdb2d00.cxx thdb2d.h thinfnan.h thdb2dprj.h thparse.h \ thbuffer.h thmbuffer.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thobjectname.h therion.h thobjectsrc.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thdb1d.h thobjectid.h \ thdataleg.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thexception.h thdatabase.h thdataobject.h thtfangle.h thtf.h tharea.h \ th2ddataobject.h thmap.h thjoin.h thpoint.h thline.h thscrap.h \ thsketch.h thpic.h thtrans.h thsurvey.h thtfpwf.h thlogfile.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thconfig.h thinput.h \ thexporter.h thexport.h thselector.h $(OUTDIR)/thdb2dab.o: thdb2dab.cxx thdb2dab.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h $(OUTDIR)/thdb2dcp.o: thdb2dcp.cxx thdb2dcp.h thdb2dpt.h $(OUTDIR)/thdb2dji.o: thdb2dji.cxx thdb2dji.h thobjectname.h thmbuffer.h therion.h \ thdatabase.h thdataobject.h thperson.h thparse.h thbuffer.h thdate.h \ thdataleg.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thdb2dlp.o: thdb2dlp.cxx thdb2dlp.h thdb2dpt.h thline.h th2ddataobject.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexpmap.h thexport.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h $(OUTDIR)/thdb2dmi.o: thdb2dmi.cxx thdb2dmi.h thobjectname.h thmbuffer.h therion.h \ thobjectsrc.h thparse.h thbuffer.h thexception.h $(OUTDIR)/thdb2dprj.o: thdb2dprj.cxx thdb2dprj.h thparse.h thbuffer.h thmbuffer.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thinfnan.h $(OUTDIR)/thdb2dpt.o: thdb2dpt.cxx thdb2dpt.h thexpmap.h thexport.h thparse.h \ thbuffer.h thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h \ thdatabase.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h \ therion.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h $(OUTDIR)/thdb2dxm.o: thdb2dxm.cxx thdb2dxm.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h $(OUTDIR)/thdb2dxs.o: thdb2dxs.cxx thdb2dxs.h thdb2dmi.h thobjectname.h thmbuffer.h \ therion.h thobjectsrc.h thparse.h thbuffer.h $(OUTDIR)/thdb3d.o: thdb3d.cxx thdb3d.h loch/lxMath.h $(OUTDIR)/thendscrap.o: thendscrap.cxx thendscrap.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thendsurvey.o: thendsurvey.cxx thendsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thepsparse.o: thepsparse.cxx thepsparse.h thpdfdbg.h thexception.h \ therion.h thbuffer.h thpdfdata.h thtexfonts.h thconvert.h $(OUTDIR)/therion.o: therion.cxx therion.h thlogfile.h thbuffer.h thtmpdir.h \ thcmdline.h thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h \ thexport.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thselector.h thdatareader.h \ thexception.h thlibrary.h thinit.h thgrade.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thpoint.h th2ddataobject.h thline.h tharea.h \ thversion.h thtexfonts.h thlang.h thlangdata.h thbezier.h $(OUTDIR)/thexception.o: thexception.cxx thexception.h therion.h thbuffer.h $(OUTDIR)/thexpdb.o: thexpdb.cxx thexpdb.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thexception.h \ thscrap.h thsketch.h thpic.h thtrans.h thmap.h thdata.h thtfangle.h \ thtf.h thtflength.h thtfpwf.h thinit.h thinput.h thsurvey.h $(OUTDIR)/thexpmap.o: thexpmap.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thexporter.h thexception.h thtmpdir.h thscrap.h thsketch.h \ thpic.h thtrans.h thpoint.h th2ddataobject.h thline.h tharea.h thmap.h \ thconfig.h thinput.h thselector.h thinit.h thlogfile.h thconvert.h \ thpdf.h thpdfdata.h thepsparse.h thmpost.h thtex.h thcmdline.h \ thtexfonts.h thsurvey.h thtfpwf.h thcsdata.h thproj.h thsurface.h \ thtflength.h thtf.h thsvg.h extern/img.h thcs.h $(OUTDIR)/thexpmodel.o: thexpmodel.cxx thexpmodel.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thsurvey.h \ thtfpwf.h thexception.h thdata.h thtfangle.h thtf.h thtflength.h \ extern/img.h thscrap.h thsketch.h thpic.h thtrans.h thsurface.h \ loch/lxFile.h thconfig.h thinput.h thexporter.h thselector.h thcsdata.h \ thproj.h thcs.h thtexfonts.h thlang.h thlangdata.h $(OUTDIR)/thexport.o: thexport.cxx thexport.h thparse.h thbuffer.h thmbuffer.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thexception.h thconfig.h \ thinput.h thexporter.h thselector.h thcs.h thcsdata.h $(OUTDIR)/thexporter.o: thexporter.cxx thexporter.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thexception.h \ thconfig.h thinput.h thselector.h thexpmodel.h thsurvey.h thtfpwf.h \ thexpmap.h thlang.h thlangdata.h thexpdb.h thexpsys.h thexptable.h $(OUTDIR)/thexpshp.o: thexpshp.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thexporter.h thexception.h thmap.h thsketch.h thpic.h \ thconfig.h thinput.h thselector.h thtmpdir.h thinit.h thlogfile.h \ thcmdline.h thsurvey.h thtfpwf.h thsurface.h thtflength.h thtf.h \ extern/shapefil.h thexpmodel.h thcsdata.h thcs.h thexpshp.h thscrap.h \ thtrans.h thpoint.h th2ddataobject.h thline.h tharea.h $(OUTDIR)/thexpsys.o: thexpsys.cxx thexpsys.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thexception.h $(OUTDIR)/thexptable.o: thexptable.cxx thexptable.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thexception.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thexporter.h thinit.h \ thinput.h thsurvey.h thscrap.h thsketch.h thpic.h thtrans.h thpoint.h \ th2ddataobject.h thcsdata.h thproj.h thconfig.h thselector.h thcs.h \ thtexfonts.h thlang.h thlangdata.h $(OUTDIR)/thexpuni.o: thexpuni.cxx thexpmap.h thexport.h thparse.h thbuffer.h \ thmbuffer.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h \ thdb1d.h thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thexporter.h thexception.h thmap.h thsketch.h thpic.h \ thconfig.h thinput.h thselector.h thtmpdir.h thcsdata.h thinit.h \ thlogfile.h thcmdline.h thsurvey.h thtfpwf.h thsurface.h thtflength.h \ thtf.h extern/shapefil.h thexpmodel.h thexpuni.h thscrap.h thtrans.h \ thpoint.h th2ddataobject.h thline.h tharea.h thproj.h thcs.h \ thtexfonts.h $(OUTDIR)/thgeomag.o: thgeomag.cxx thgeomagdata.h $(OUTDIR)/thgrade.o: thgrade.cxx thgrade.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thexception.h $(OUTDIR)/thimport.o: thimport.cxx thimport.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thexception.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thsurvey.h \ thendsurvey.h extern/img.h $(OUTDIR)/thinfnan.o: thinfnan.cxx thinfnan.h $(OUTDIR)/thinit.o: thinit.cxx thinit.h thbuffer.h thmbuffer.h thinput.h thparse.h \ thchenc.h thchencdata.h therion.h thconfig.h thexporter.h thexport.h \ thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsymbolset.h thsymbolsetlist.h \ thlocale.h thselector.h thexception.h thtexfonts.h thlang.h thlangdata.h \ thtmpdir.h thcs.h thcsdata.h $(OUTDIR)/thinput.o: thinput.cxx thinput.h thbuffer.h thmbuffer.h thparse.h \ thchenc.h thchencdata.h therion.h thexception.h $(OUTDIR)/thjoin.o: thjoin.cxx thjoin.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thlang.o: thlang.cxx thlang.h thlangdata.h thparse.h thbuffer.h \ thmbuffer.h thlangdata.cxx thinit.h thinput.h thconfig.h thexporter.h \ thexport.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h therion.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thselector.h thexception.h $(OUTDIR)/thlangdata.o: thlangdata.cxx $(OUTDIR)/thlayout.o: thlayout.cxx thlayout.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thexception.h thdata.h thtfangle.h thtf.h \ thtflength.h thtfpwf.h thpdfdata.h thepsparse.h thlang.h thlangdata.h \ thcsdata.h thconfig.h thinput.h thexporter.h thexport.h thselector.h $(OUTDIR)/thlayoutclr.o: thlayoutclr.cxx thlayoutclr.h thparse.h thbuffer.h \ thmbuffer.h thdatabase.h thdataobject.h thperson.h thdate.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thlayoutln.o: thlayoutln.cxx thlayoutln.h thlayoutclr.h thlayout.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h \ thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h \ thdb2dxm.h thscraplo.h thscrapen.h thscraplp.h thsymbolset.h \ thsymbolsetlist.h thlocale.h $(OUTDIR)/thlegenddata.o: thlegenddata.cxx thlegenddata.h $(OUTDIR)/thlibrary.o: thlibrary.cxx thlibrary.h thlibrarydata.cxx thdatabase.h \ thdataobject.h thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h \ thdataleg.h thobjectname.h therion.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h \ thlangdata.h thgrade.h thdata.h thtfangle.h thtf.h thtflength.h \ thtfpwf.h $(OUTDIR)/thlibrarydata.o: thlibrarydata.cxx thdatabase.h thdataobject.h thperson.h \ thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlang.h thlangdata.h thgrade.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h $(OUTDIR)/thline.o: thline.cxx thline.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlang.h thlangdata.h thtflength.h thtf.h \ thtexfonts.h thscrap.h thsketch.h thpic.h thtrans.h $(OUTDIR)/thlocale.o: thlocale.cxx thlocale.h thparse.h thbuffer.h thmbuffer.h \ thexception.h therion.h thlang.h thlangdata.h thinit.h thinput.h $(OUTDIR)/thlogfile.o: thlogfile.cxx thlogfile.h thbuffer.h therion.h $(OUTDIR)/thlookup.o: thlookup.cxx thlookup.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thlocale.h \ thexception.h thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h \ thpdfdata.h thepsparse.h thsymbolset.h thsymbolsetlist.h thlang.h \ thlangdata.h thcsdata.h thconfig.h thinput.h thexporter.h thexport.h \ thlayout.h thselector.h $(OUTDIR)/thmap.o: thmap.cxx thmap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thexception.h thscrap.h thsketch.h \ thpic.h thtrans.h thtflength.h thtf.h $(OUTDIR)/thmapstat.o: thmapstat.cxx thmapstat.h thdate.h thperson.h thlegenddata.h \ thscrap.h thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h thtrans.h \ thdata.h thtfangle.h thtf.h thtflength.h thtfpwf.h thmap.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thlang.h thlangdata.h \ thversion.h thtexfonts.h thsurvey.h thconfig.h thinput.h thexporter.h \ thexport.h thselector.h thcs.h thcsdata.h $(OUTDIR)/thmbuffer.o: thmbuffer.cxx thmbuffer.h $(OUTDIR)/thmpost.o: thmpost.cxx thmpost.h $(OUTDIR)/thobjectid.o: thobjectid.cxx thobjectid.h $(OUTDIR)/thobjectname.o: thobjectname.cxx thobjectname.h thmbuffer.h therion.h \ thexception.h thbuffer.h thparse.h thdatabase.h thdataobject.h \ thperson.h thdate.h thdataleg.h thobjectsrc.h thinfnan.h thdb1d.h \ thobjectid.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsurvey.h thtfpwf.h $(OUTDIR)/thobjectsrc.o: thobjectsrc.cxx thobjectsrc.h $(OUTDIR)/thparse.o: thparse.cxx thparse.h thbuffer.h thmbuffer.h therion.h \ thlang.h thlangdata.h thtexfonts.h thinfnan.h thdatabase.h \ thdataobject.h thperson.h thdate.h thdataleg.h thobjectname.h \ thobjectsrc.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thlegenddata.h \ thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h \ thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h \ thscraplp.h thtflength.h thtf.h thexception.h $(OUTDIR)/thpdf.o: thpdf.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h thtexfonts.h thlang.h thlangdata.h thparse.h \ thmbuffer.h thversion.h thchenc.h thchencdata.h $(OUTDIR)/thpdfdata.o: thpdfdata.cxx thpdfdata.h thepsparse.h thlang.h thlangdata.h \ thparse.h thbuffer.h thmbuffer.h $(OUTDIR)/thpdfdbg.o: thpdfdbg.cxx thpdfdbg.h thexception.h therion.h thbuffer.h \ thpdfdata.h thepsparse.h $(OUTDIR)/thperson.o: thperson.cxx thperson.h thdatabase.h thdataobject.h thparse.h \ thbuffer.h thmbuffer.h thdate.h thdataleg.h thobjectname.h therion.h \ thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h thdb2dmi.h \ thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h thlayoutclr.h \ thscrapen.h thscraplp.h thexception.h $(OUTDIR)/thpic.o: thpic.cxx thpic.h thbuffer.h thdatabase.h thdataobject.h \ thperson.h thparse.h thmbuffer.h thdate.h thdataleg.h thobjectname.h \ therion.h thobjectsrc.h thinfnan.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thinit.h thinput.h thtmpdir.h \ thexception.h $(OUTDIR)/thpoint.o: thpoint.cxx thpoint.h th2ddataobject.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thexception.h thexpmap.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thlang.h thlangdata.h thtflength.h thtf.h \ thtexfonts.h thscrap.h thsketch.h thpic.h thtrans.h $(OUTDIR)/thproj.o: thproj.cxx thexception.h therion.h thbuffer.h \ extern/proj4/proj_api.h $(OUTDIR)/thscrap.o: thscrap.cxx thscrap.h thdataobject.h thdatabase.h thmbuffer.h \ thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h thparse.h \ thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h thtrans.h \ thexception.h thtflength.h thtf.h th2ddataobject.h thline.h thpoint.h \ thscrapis.h thsurvey.h thtfpwf.h thsymbolset.h thsymbolsetlist.h \ thcsdata.h $(OUTDIR)/thscrapen.o: thscrapen.cxx thscrapen.h $(OUTDIR)/thscrapis.o: thscrapis.cxx thscrapis.h thdb3d.h loch/lxMath.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thsketch.h thpic.h \ thtrans.h thpoint.h th2ddataobject.h thline.h thconfig.h thinput.h \ thexporter.h thexport.h thlayout.h thsymbolset.h thsymbolsetlist.h \ thlocale.h thselector.h extern/poly2tri/poly2tri.h \ extern/poly2tri/common/shapes.h extern/poly2tri/sweep/cdt.h \ extern/poly2tri/sweep/advancing_front.h \ extern/poly2tri/sweep/../common/shapes.h \ extern/poly2tri/sweep/sweep_context.h extern/poly2tri/sweep/sweep.h \ thsurvey.h thtfpwf.h $(OUTDIR)/thscraplo.o: thscraplo.cxx thscraplo.h $(OUTDIR)/thscraplp.o: thscraplp.cxx thscraplp.h thdb1d.h thobjectid.h thinfnan.h \ thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h therion.h \ thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h \ thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thsketch.h thpic.h thtrans.h \ thexpmap.h thexport.h thlayout.h thsymbolset.h thsymbolsetlist.h \ thlocale.h thlang.h thlangdata.h $(OUTDIR)/thselector.o: thselector.cxx thselector.h thexception.h therion.h \ thbuffer.h thconfig.h thmbuffer.h thinput.h thparse.h thexporter.h \ thexport.h thobjectsrc.h thlayout.h thdataobject.h thdatabase.h thdb1d.h \ thobjectid.h thinfnan.h thdataleg.h thobjectname.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thsurvey.h thtfpwf.h \ th2ddataobject.h thscrap.h thsketch.h thpic.h thtrans.h thmap.h $(OUTDIR)/thsketch.o: thsketch.cxx therion.h thsketch.h thpic.h thscrap.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtrans.h \ thwarpp.h thwarp.h thwarppme.h thwarppdef.h thwarppt.h thconfig.h \ thinput.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thselector.h $(OUTDIR)/thsurface.o: thsurface.cxx thsurface.h thdb3d.h loch/lxMath.h \ thdataobject.h thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thobjectname.h therion.h thobjectsrc.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtflength.h thtf.h \ thexception.h thcsdata.h thdatareader.h thinput.h $(OUTDIR)/thsurvey.o: thsurvey.cxx thsurvey.h thdataobject.h thdatabase.h \ thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thinfnan.h thdataleg.h \ thparse.h thobjectname.h therion.h thobjectsrc.h thdb3d.h loch/lxMath.h \ thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h \ thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtfpwf.h \ thexception.h thtfangle.h thtf.h thdata.h thtflength.h $(OUTDIR)/thsvg.o: thsvg.cxx thepsparse.h thpdfdbg.h thexception.h therion.h \ thbuffer.h thpdfdata.h thversion.h thlegenddata.h thtexfonts.h $(OUTDIR)/thsvxctrl.o: thsvxctrl.cxx thsvxctrl.h thdataleg.h thparse.h thbuffer.h \ thmbuffer.h thobjectname.h therion.h thobjectsrc.h thinfnan.h \ thdatabase.h thdataobject.h thperson.h thdate.h thdb1d.h thobjectid.h \ thdb3d.h loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h \ thdb2dprj.h thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h \ thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h \ thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtmpdir.h thdata.h \ thtfangle.h thtf.h thtflength.h thtfpwf.h thexception.h thinit.h \ thinput.h thconfig.h thexporter.h thexport.h thlayout.h thsymbolset.h \ thsymbolsetlist.h thlocale.h thselector.h thsurvey.h thcs.h thcsdata.h \ thlogfile.h extern/img.h $(OUTDIR)/thsymbolset.o: thsymbolset.cxx thsymbolset.h thsymbolsetlist.h \ thlayoutclr.h thparse.h thbuffer.h thmbuffer.h thpoint.h \ th2ddataobject.h thdataobject.h thdatabase.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thobjectname.h therion.h thobjectsrc.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thscrapen.h thscraplp.h thline.h tharea.h \ thexception.h thpdfdata.h thepsparse.h thlayout.h thlocale.h \ thtexfonts.h thlang.h thlangdata.h thtmpdir.h thcmdline.h thmpost.h \ thinit.h thinput.h thsymbolsets.h thlogfile.h $(OUTDIR)/thsymbolsets.o: thsymbolsets.cxx thsymbolsets.h thsymbolsetlist.h $(OUTDIR)/thtex.o: thtex.cxx thtex.h $(OUTDIR)/thtexenc.o: thtexenc.cxx $(OUTDIR)/thtexfonts.o: thtexfonts.cxx thtexfonts.h thtexenc.cxx thpdfdbg.h \ thexception.h therion.h thbuffer.h thinit.h thmbuffer.h thinput.h \ thparse.h thpdfdata.h thepsparse.h $(OUTDIR)/thtf.o: thtf.cxx thtf.h thexception.h therion.h thbuffer.h thparse.h \ thmbuffer.h $(OUTDIR)/thtfangle.o: thtfangle.cxx thparse.h thbuffer.h thmbuffer.h thtfangle.h \ thtf.h thexception.h therion.h thinfnan.h $(OUTDIR)/thtflength.o: thtflength.cxx thtflength.h thtf.h thparse.h thbuffer.h \ thmbuffer.h thexception.h therion.h $(OUTDIR)/thtfpwf.o: thtfpwf.cxx thtfpwf.h thexception.h therion.h thbuffer.h \ thinfnan.h thparse.h thmbuffer.h $(OUTDIR)/thtmpdir.o: thtmpdir.cxx thtmpdir.h thbuffer.h therion.h thinit.h \ thmbuffer.h thinput.h thparse.h $(OUTDIR)/thtrans.o: thtrans.cxx thtrans.h thinfnan.h thdatabase.h thdataobject.h \ thperson.h thparse.h thbuffer.h thmbuffer.h thdate.h thdataleg.h \ thobjectname.h therion.h thobjectsrc.h thdb1d.h thobjectid.h thdb3d.h \ loch/lxMath.h thattr.h thchenc.h thchencdata.h thdb2d.h thdb2dprj.h \ thmapstat.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h $(OUTDIR)/thwarp.o: thwarp.cxx thwarp.h thpic.h thsketch.h thdb1d.h thobjectid.h \ thinfnan.h thdataleg.h thparse.h thbuffer.h thmbuffer.h thobjectname.h \ therion.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h thchenc.h \ thchencdata.h thscrap.h thdataobject.h thdatabase.h thdb2d.h thdb2dprj.h \ thmapstat.h thdate.h thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h \ thdb2dab.h thdb2dji.h thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h \ thscraplo.h thlayoutln.h thlayoutclr.h thscrapen.h thscraplp.h thtrans.h \ th2ddataobject.h thpoint.h thconfig.h thinput.h thexporter.h thexport.h \ thlayout.h thsymbolset.h thsymbolsetlist.h thlocale.h thselector.h $(OUTDIR)/thwarpp.o: thwarpp.cxx thwarpp.h thwarp.h thpic.h thsketch.h thwarppme.h \ thwarppdef.h therion.h thtrans.h thinfnan.h thwarppt.h thdataobject.h \ thdatabase.h thmbuffer.h thbuffer.h thdb1d.h thobjectid.h thdataleg.h \ thparse.h thobjectname.h thobjectsrc.h thdb3d.h loch/lxMath.h thattr.h \ thchenc.h thchencdata.h thdb2d.h thdb2dprj.h thmapstat.h thdate.h \ thperson.h thlegenddata.h thdb2dpt.h thdb2dlp.h thdb2dab.h thdb2dji.h \ thdb2dmi.h thdb2dcp.h thdb2dxs.h thdb2dxm.h thscraplo.h thlayoutln.h \ thlayoutclr.h thscrapen.h thscraplp.h thscrap.h th2ddataobject.h \ thpoint.h thconfig.h thinput.h thexporter.h thexport.h thlayout.h \ thsymbolset.h thsymbolsetlist.h thlocale.h thselector.h $(OUTDIR)/thwarppme.o: thwarppme.cxx thinfnan.h thwarppme.h thwarppdef.h therion.h \ thtrans.h $(OUTDIR)/thwarppt.o: thwarppt.cxx thwarppt.h thtrans.h thinfnan.h thwarppme.h \ thwarppdef.h therion.h therion-5.4.1/README000066400000000000000000000016101307545355600140640ustar00rootroot00000000000000This is Therion, cave surveying software. It produces complete, always up-to-date cave maps. The map is automatically updated after loop closure, blunder fix or map symbol set change. It's particularly well suitable for documenting large and complicated cave systems. Therion creates realistic 3D models from 2D maps without quantity of additional information. LRUD dimensions are also supported. Documentation is in the Therion Book (file thbook.pdf), which can either be downloaded from the internet or compiled in the `thbook' directory using pdfTeX. Installation (compilation) is described in the Appendix of the Therion Book. There is also much excellent documentation contributed by users on the wiki at: https://therion.speleo.sk/wiki/doku.php Web page: https://therion.speleo.sk Copyright (c) 1999-2014 Stacho Mudrak, Martin Budaj Distributed free under the GNU General Public License therion-5.4.1/SVG.problems000066400000000000000000000004501307545355600154110ustar00rootroot00000000000000Adobe viewer 3 on Linux: * ignores fractional part of numbers when LC_NUMERIC=sk_SK or others with comma as decimal separator (zero width lines, singular matrices) Sodipodi on Linux: * doesn't inherit linecap &c. from the parent group Batik 1.6 on Linux: * fails to load large files therion-5.4.1/TODO.M000066400000000000000000000105511307545355600140730ustar00rootroot00000000000000------------------- nastavitelny okraj vyplne pod legendou (0 pre map-image!) metapost: warningy len v debug mode; interaktivny mod pre -d (s vysvetlenim v thbooku, ktore premenne pouzit) do thbooku vysvetlenie o debugovani MP (mail muttonovi 15.1.09 zvacsovanie fontov v suradniciach pri reze grid vpravo pretrca cez mapu (postupne skladanie) v atlase nie je moznost pouzit mierku a sever pred vlozenim map (formdef vkladat uz v data.tex) rozmery zrkadla sadzby zmenit len pre mapy, nie pre uvod a legendu mapy vseobecne: * pri farebnych labeloch stmavit odtien farby thpdf: * zoznam scrapov na danej strane v atlase -> z toho registre * register pouzitych nazvov - z blokov - z vrstiev * zhrnutie udajov o listoch na konci * k vrstve: meno vo vertikalnom smere alebo udaj o vyske * zanorene OCG * cisla stran a odkazov cez utf2tex * skontrolovat ci nezapisujem nadbytocne xobjecty kvoli vrstvam * podmienene nacitavanie scrapov v TeXu * dvojstrankovy mod (Title vzdy na pravej strane), vtedy akceptovat: * vkladanie prazdnych stran (lepsie: atribut prava/lava pre stranu) * exclude pages a vkladanie prazdnych stran: mena namiesto cisel stran (?) * zrusit OwnPages option (jedine spolu s predch. -- problem s funkciou find_excluded_pages) -- namiesto cisla strany makro \getpage{.} zvacsi argument o hodnotu \the\pageno na 1. strane s mapou * 2. sokolie oko * vrstvy pod aktualnou: odlisit hlbku odtienmi sedej (?) * mody pre preview (ziadne, linkovane, vsetky) * vrstva `pri' pre atlas * co s posunom stran v rychlom mode thsvg: * pattern coloring using symbol-color - delete setgray and setrgbcolor when converting pattern body - extend structures to include pattcolor - use "inherit" color * uxivatelsky prefix pre ids * fonty - orezavacie cesty + vkladanie? * layers cez javascript * (priehladnost -> SVG 1.2) thconvert: * (dorobit) CONCAT + konverzia rozdelenych textovych riadkov * optimalizacia zmien fontov + gsave & al. thepsparse: * grid do 2d struktur thtexfonts: * upravit citanie glyphlistu aby podporovalo viac unicode hodnot * prepinanie fontov v makrach definovanych uzivatelom v TeXu a MP (equipment, continuation) aj pre cisla stran v atlase (tie cez utf2tex) * optimalizacia zmien fontov (delenie slov!) * doplnit kvazi HTML znackovanie vstupnych retazcov tex: * sipka na sever je zbytocna pri priecnom a rozvinutom reze. V ich pripade by tam mal byt nejaky identifikator projekcie * northarrow do atlasu? mpost: * konfigurovatelna velkost textu v mierke a velkost sipky na sever * point stalctites,stalagmites, via-ferrata * gradientny prechod pre areas * poriesit odsadenie bodovych znaciek a najma labelov * dorobit aby fungovalo predefinovanie u,v,w - pri presumed wall, patternoch * initialize(Scale) nepomaha na lejble v legende -- prepisovanie mptexpre.tex? * color map-bg do legendboxov (hadam fg; co ak je fg farbene rozne?) thbook: * varovania texu a metapostu * obrazky mapovych znaciek ----- prezitky dob minulych ----- * mod pre _velke_ mapy (>10MB): scrapy vysadzat do samostatneho suboru a z dalsieho na ne odkazovat pomocou Reference XObject forms -> nefunguje v AR5 --------------------------------- hotovo: * point snow * line rope * area snow, ice, clay * opr. area debris, sand, line debris; dopln. ostatne nedef, equipment, sipka na sever * ramik a stvorcova siet (kriziky): vylepsit alebo cez MetaPost (do uvahy aj convergence) * vypnit miesto pod legendou bg farbou * text vo farbe scrapov * suradnice ku gridu * labels ku kladu listov * velkost gridu (suradnic) urcit pred zvacsenim plochy podla page-gridu * --print-symbols: nepodchyti vsetky patterny (nie vsetky znacky v LEGENDLISTE? -- chybaju v ALL_PATTERNS) * systemove farbenie znaciek * fixed bug with missing patterns in symbols.xhtml * fixed inaccurate clipping of coloured scrap background * fixed placement of surface bitmaps with larger offset * added white fill below cave passages in transparent PDFs if background colour is white (needed if the map is included into other map with non-white background) * fixed alignment of some point symbols in AUT symbol set * new layout option 'color map-bg transparent' to omit page background * fixed incorrect line width conversion in some patterns * hide white background of scraps when the PDF layer containing them is invisible therion-5.4.1/TODO.MS000066400000000000000000000072641307545355600142250ustar00rootroot00000000000000extend left/right a backreadings problem suradnice v cave-liste su v semilogaritmickom tvare bug s izbicou a pevnymi bodmi xth calibrate bitmap: zlucit filtre img/pdf Makefile: make library pri zmene prekladov (neaktualne therion.tcl!) Pacher: * obrovske patterny * interim bboxmargin:=0 bez skupiny pri l_wall_ice podpora NFSS pri --print-symbols (ENC_NEW.write_enc_files(); + skopirovat fonty) do sql: ostatne flagy; commenty pre stations (mutton) ATTR__scale pre vsetky znacky v MP pri kresleni s xvi na pozadi: ak nad mer. bod v xvi vkladam dva mer. body, druhy ma nespravne meno neumoznit shift 0 0 pre mapy kontrola nulovych segmentov na ciare pre MP stopy/palce pomocou '/" pri ctrl-p aktivovat point dialog a po vlozeni bodu aplikovt zmeny grades pre polygon aj fixne body meno obrazku do uvodzoviek: -sketch [Sketches/Greenlink Plan J2 sketch 210707.jpg] 0 -784 sketche do samostatneho layera map-comments v spravnom poradi konvertor: serie precislovat na jednoduche nazvy bodov HEEB: + chybajuci podorys vo vtacej2 premenovat subor na pth (?) pri manipulacii s fix bodmi (pridanie; najprv fix potom pripojenie na koncovy pri merani od konca) thexport len "FIX\r\n" / chyba spojnica k priecnemu rezu / v priecnom reze chybaju shoty a mer. bod / preco sa vo vsetkych nacrtkoch opakuje bod 0 (fix?) / thexport dodrziavat uhlove jednotky, / dat tam trip comment, / opakovat 3 merania polygonu, / problem s pripojenim roznych dist neprebera sa attr do survey ... - entrance ... ak je continuation s explored udajmi, nezobrazit otaznik ale dlzku xtherion ma do scrapu doplnit autora + rok! (pokial tam nie je) pridat margin option pre uvodne strany atlasu, potom dat pagesetup do 1) data.tex za opacity a scale s normalnym okrajom 2) do th_pagedef s overlapom 3) do legendy s normalnym altitude scaling ak je label prazdny retazec, zhuci mp? nejde naraz zadat mapy elev. v dvoch projekciach LOG-subor: X m surveyed (of which Y approximate) + about Z unsurveyed but explored (see the continuation-list and survey-list for details) do xtherionu info o tom ktory ini precital, + warning ak nerozparsoval ini xtherion linux -- delete nezmaze oznaceny blok textu, len znak na kurzore label k line section preco nepouzivame if else v Makefile namiesto komentovania casti? pri centerline so zadanou deklinaciou alebo data nosurvey nepozadovat datum na vypocet automatickej deklinacie obvod scrapu a rozdelena stena spajanie ciar ***************************************************************************** georeferencovanie bitmap aj pomocou jgw/pgw: A world file file is a plain ASCII text file consisting of six values separated by newlines. The format is: pixel X size rotation about the Y axis (usually 0.0) rotation about the X axis (usually 0.0) negative pixel Y size X coordinate of upper left pixel center Y coordinate of upper left pixel center ************************************************ loch pada pri exporte X Error of failed request: GLXBadContext Major opcode of failed request: 144 (GLX) Minor opcode of failed request: 5 (X_GLXMakeCurrent) Serial number of failed request: 70567 Current serial number in output stream: 70567 The program 'loch' received an X Window System error. This probably reflects a bug in the program. The error was 'GLXBadContext'. (Details: serial 23 error_code 155 request_code 144 minor_code 5) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) therion-5.4.1/TODO.S000066400000000000000000000215451307545355600141060ustar00rootroot00000000000000HOT LIST: + survey level for station-name labels + hyperlink + KML description and name + bugfix + symbol show/hide group texts + do KML povrchove flagy sink/spring etc... + zobrazovat povrchove flagy v lochu + strike and dip + alphabetical team sorting + symbol hide/show user defined symbols + CCNP symbol set + team instrument bug + pridat strike & dip + fills orientation + pridat l:steps, l:rope, l:handrail + pridat do TeXu \northsouthrange a \eastwestrange + skontrolovat v xtherione stavovy riadok - kde je tam list + pridat ignore offsets + pridat topofil from-count/to-count/count(er) standardne namiesto dlzky + pridat inclination ako percetage + pridat ignoreall aj ked multiline + color map-fg survey-date, explo-date -pridat layout object lookup -criteria: altitude, depth, map, survey, eplo-date, topo-date - -type continuous / discrete ([x y] [- x] [x -] [- -]) - -title text -data: value color (.,-) label + loch na debiane!!! -> checkovat opengl status + moznost vypnut off-screen, ak je problem tam + pozriet co by stalo data dimensions/passage + getline a macosx -> vyhodit ho z makefile, podla maximilianovho mailu + urobit dmg podla survexu + warning ked chces zmenit popis nejakej group + pridat strukturu na triangulation line - vypocitat typ: AB,BCDE,ABCDE,BCDEF,ABCDEF + do trojuholnika pridat pointer na t-line + info ci normal/reverse + vypocitat intersection-point-up/down alebo central-point-up/down,up,down + vypocitat potrebne body (ABCDEF) + vytriangulovat + vytvorit thcs.h & thcs.cxx: - vrati int cs podla mena alebo unknown - vrati meno podla int - vrati pointer na strukturu podla int - pridat custom CS alebo throwne exception + interpolovane LRUD na zaklade shotov + vylucit z interpolacie tie shoty, ktore nemaju oba body explicitne zadane (cez stations uid) + layout pri exporte XHTML + priradenie farieb mapam + priame proj4 retazce do CS + calibracia surface v lochu + survey selection v loch-u + loch entrance/fix/station/label off-screen rendering + splayshoty previest na LRUD + jazyky parsovat na vystupe - odskusat + chybaju meracske body v legende + thbook: units up|down|left|right|dimensions + thbook: splay shots using "-" or "." as station name + thbook: in therion.ini otf2pfb on|off + thbook: in therion.ini pdf-fonts + thbook: -filter (on|off) + thbook: more join description + thbook: flags arch & overhang + thbook: export cave-list -surveys (on)|off + thbook: symbol-colour + thbook: new symbol groups + include maps with previews + loch surface handling + add options menu to xtherion + support iso date format YYYY-MM-DD + add lookup tables to configuration files + check label size switch and tex export + add grid-range to layout + fix bug with default layout size/page-setup etc... + KML table export + samples.doc: add coordinates of stations to cave list + create cave penetration distance calculation code + label + sort caves in export according to source position! + add shot type (leg flag) to attribute export + layout: default text orientation switch + automatic label flip if they are up-side down according to given orientation + attributes sample + show/hide U symbols + add cave structure to continuation-list + add -source on|(off) to table export + user defined attributes to shots + scrap morphing algorithm setup to configuration file + 3D generation algorithm - do not remove join points + 3D generation algorithm - take xelevation data into account + scrap name with "_" exported with "." when debug scrap-names + fix hash export in AutoCAD DXF file format + fix usage of extra morphing points (sometimes are ignored) + support cross sections (LRUD) in XVI + allow (direction + distance) instead of LRUD + polyline to bezier conversion mode + more complex attribute export + link same continuations within different projections + symbol show/hide of user defined symbols (using subtypes) + add shot/stations flags to attributes when exported in metapost + add -survey-lines on|off|auto option to scrap - auto by default - if there is some line survey, it will be off + add rotation of 3D surface into surface calibration + negative values to point-dimensions + add selections/unselections to export queue + redo database export + add gradient to area + add line moonmilk and flowstone areas surrounded by line flowstone or moonmilk + solve transparency of sketches + add more layers to DXF export (lines, points, areas?) with some symbols + add legends to SVG export + import of 3D and PLT via lxFile + LRUD envelope generation by lxFile + LRUD walls into 3D shapefiles + associate line section with section scrap + solve section names and sections far from passage + add links to NWES page numbers in atlas + point camera + point picture/hyperlink + not to use -walls off when PLT file is exported + NOT_LRUD flag to lox shots, when there exists shot point in some scrap with outline + warning if reading/backreading difference is big + no joins where starting/ending points are identical + new centerline station flags: spring, sink, lake, doline + special symbols centerline features: entrance, spring, sink, lake, doline + new surface symbols: line dripline line cliff line landform line surface-contour (-altitude??) + individual coloring of previews + map coloring - add user defined color tables into configuration files - chapter|explo-date|topo-date colormodes - saturation as color parameter - use grid settings in altitudes + add bookmarks to PDF files (maps?) + add user define map headers into layout (meta language simmilar to HTML) + 3d: fix bug with internal hole, where no part of it is wall + point rock or block + line rope anchor on/off/auto (point option) line-adjust on/off/auto + line fixed-ladder, rope-ladder, via-ferrata + depth-bar [position| off ] - support for multiple depth-bars + grid-bar [position|off] [position|off] - support for multiple grid bars s_depthbar() - divide into pieces (to fit into figure size) s_gridbar() - divide into pieces (to fit into figure size) + add centerline flags for sink, spring and doline and map these flags to metapost symbols in export + add statistics survey + add survey name under scrap name when debug scrap-names + therion --protractor + MacOS X installator (e.g. http://s.sudre.free.fr/Software/Iceberg.html) + single temporary directory, change name if process file exists + remove temp-dir warning xtherion: + vtopo import + generate error if therion is not found + search & replace toolbar to compiler + moving split bar in compiler window + commands for tabbing/commenting out blocks of texts + rightclick on map-item with changes of types and subtypes + multiselection for properties changing + fix file saving when drive/device have been unplugged + fix: the scrollbar does not appear automatically in compilation window after a compile. We must resize the window or go back in image window (and go back in compile window) to make it appear + save/load xtherion startup script to $HOME/.xtherion + edit line -> to bezier / to polyline option + simple line digitizer + add map editor import filter + SVG import into map editor (using tcldom) + do not save empty lines/areas/scraps + Ctrl+F binding in text/map editor - switch focus to Find control panel and maximize it + add "Filter" and "Unfilter" button for search & select + add filter menus + warn if symbols are outside of scraps + autoincrease scrap names (not scrapN) + area indicator to map editor (type and rotation) + fix MacOS X key bindings + disable "new file" and "open" when one file is opened in map editor + multiplatform init files + shortcuts and macros for common actions + right click on line + undo/redo buttons + context sensitive controls for most commonly used options (subtype, text, name, visibility, align, scale, ...) + rebuild compiler (no more cp text editor) WOULD BE NICE LIST: therion: + navigation pane labeling + redo database export + morphing: add additional features (line extra, point extra:point|distance) + export rigging list + -text option to point anchor + add morphing features browsing code + add fast mode for xtherion - just to generate survey and map structures + surface selection according to coverage 2D: all surfaces that covers current map sorted by size and coverage 3D: make a surface selection and clipping + export all information database + add support for output units (date format, feets etc...) + preview beside + add support for multiple metapost files (more than 4096 scraps) + add -map-level scrap to select -> each scrap will be a separate map + multiple selections in thconfig file + error when 2 simmilar points in scrap xtherion: + add endscrap name to the scrap + add join toolbar simmilar to area + select and move several points together + select and move several objects betweens scraps together + add encoding control of configuration file + solve splitting of curves with id + let xtherion compilation run without configuration file (only with opened files) therion-5.4.1/TODO.SM000066400000000000000000000006071307545355600142170ustar00rootroot00000000000000+ global variables that define density and randomness of area fills + hierarchicky outline + pridat ,,,, do utf2tex + do thbook-u Having done this you will probably want to install what you have built. This should be done as root: $ su password: ****** # make install On the mac the process is slightly different: $ sudo make install password: ****** therion-5.4.1/abisso2th.py000077500000000000000000000017321307545355600154640ustar00rootroot00000000000000#!/usr/bin/python # # copyright 2009 Martin Budaj import sys,os if len(sys.argv) < 2: print "usage: ss2th " sys.exit() file_in = open(sys.argv[1]); file_out = open(os.path.splitext(sys.argv[1])[0]+'.th', 'w') f_prev = 0 m = 2 print >>file_out, 'centreline' for i,l in enumerate(file_in): if i < 8: continue toks = l.split() if i < 18 and float(toks[0]) < 0 and sum(abs(float(x)) for x in toks[1:4]): print >>file_out, ' fix ', for j in range(4): print >>file_out, toks[j], print >>file_out if i == 18: print >>file_out, ' units clino compass deg' print >>file_out, ' calibrate tape 0 0.01' print >>file_out, ' data normal from to compass clino length' if len(toks) < 9: continue l,s,a,f,t = [float(x) for x in toks[0:5]] if l == s == f == a == t == 0: continue t = m if t==0 else t f = t_prev if f == 0 else f t_prev = t m += 1 print >>file_out, '%8d%8d%8s%8s%8s' % (f,t,a,s,l) print >>file_out, 'endcentreline' therion-5.4.1/cclass.pl000077500000000000000000000143741307545355600150270ustar00rootroot00000000000000#!/usr/bin/perl $myname = "cclass.pl"; $nargin = $#ARGV + 1; die "$myname: missing class name\n" if ($nargin < 1); if ($nargin < 2) { $father = "dataobject"; } else { $father = $ARGV[1]; } $class = $ARGV[0]; $thclass = "th$class"; $thfather = "th$father"; $CLASS = uc($class); $FATHER = uc($father); die "$myname: $thclass.h already exists\n" if (open(TST,"$thclass.h")); die "$myname: $thclass.cxx already exists\n" if (open(TST,"$thclass.cxx")); die "$myname: $thfather.h does not exist\n" unless (open(TST,"$thfather.h")); $level = 0; while () { if (/TT\_$FATHER\_UNKNOWN\s*\=\s*(\d+)/) { $level = $1; } } die "$myname: uknown level\n" if ($level == 0); close(TST); $level += 1000; $levelp = $level + 1; print "class $thclass : public class $thfather at level $level\n"; print "writing $thclass.h ... "; open(OUT,">$thclass.h"); print OUT <$thclass.cxx"); print OUT <opt = 0; } $thclass\::~$thclass() { } int $thclass\::get_class_id() { return TT_$CLASS\_CMD; } bool $thclass\::is(int class_id) { if (class_id == TT_$CLASS\_CMD) return true; else return $thfather\::is(class_id); } int $thclass\::get_cmd_nargs() { // replace by real number of arguments return 0; } const char * $thclass\::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * $thclass\::get_cmd_name() { // insert command name here return \"$class\"; } thcmd_option_desc $thclass\::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_$class\_opt); if (id == TT_$CLASS\_UNKNOWN) return $thfather\::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void $thclass\::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case TT_$CLASS\_OPTION: this->opt = sscanf("%d", *args); break; // if not found, try to set fathers properties default: $thfather\::set(cod, args, argenc, indataline); } } void $thclass\::self_delete() { delete this; } void $thclass\::self_print_properties(FILE * outf) { $thfather\::self_print_properties(outf); fprintf(outf,"$thclass:\\n"); // insert intended print of object properties here } ENDBODY close(OUT); print "done\n"; therion-5.4.1/extern/000077500000000000000000000000001307545355600145135ustar00rootroot00000000000000therion-5.4.1/extern/dbfopen.c000066400000000000000000001455151307545355600163070ustar00rootroot00000000000000/****************************************************************************** * $Id: dbfopen.c,v 1.48 2003/03/10 14:51:27 warmerda Exp $ * * Project: Shapelib * Purpose: Implementation of .dbf access API documented in dbf_api.html. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: dbfopen.c,v $ * Revision 1.48 2003/03/10 14:51:27 warmerda * DBFWrite* calls now return FALSE if they have to truncate * * Revision 1.47 2002/11/20 03:32:22 warmerda * Ensure field name in DBFGetFieldIndex() is properly terminated. * * Revision 1.46 2002/10/09 13:10:21 warmerda * Added check that width is positive. * * Revision 1.45 2002/09/29 00:00:08 warmerda * added FTLogical and logical attribute read/write calls * * Revision 1.44 2002/05/07 13:46:11 warmerda * Added DBFWriteAttributeDirectly(). * * Revision 1.43 2002/02/13 19:39:21 warmerda * Fix casting issues in DBFCloneEmpty(). * * Revision 1.42 2002/01/15 14:36:07 warmerda * updated email address * * Revision 1.41 2002/01/15 14:31:49 warmerda * compute rather than copying nHeaderLength in DBFCloneEmpty() * * Revision 1.40 2002/01/09 04:32:35 warmerda * fixed to read correct amount of header * * Revision 1.39 2001/12/11 22:41:03 warmerda * improve io related error checking when reading header * * Revision 1.38 2001/11/28 16:07:31 warmerda * Cleanup to avoid compiler warnings as suggested by Richard Hash. * * Revision 1.37 2001/07/04 05:18:09 warmerda * do last fix properly * * Revision 1.36 2001/07/04 05:16:09 warmerda * fixed fieldname comparison in DBFGetFieldIndex * * Revision 1.35 2001/06/22 02:10:06 warmerda * fixed NULL shape support with help from Jim Matthews * * Revision 1.33 2001/05/31 19:20:13 warmerda * added DBFGetFieldIndex() * * Revision 1.32 2001/05/31 18:15:40 warmerda * Added support for NULL fields in DBF files * * Revision 1.31 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.30 2000/12/05 14:43:38 warmerda * DBReadAttribute() white space trimming bug fix * * Revision 1.29 2000/10/05 14:36:44 warmerda * fix bug with writing very wide numeric fields * * Revision 1.28 2000/09/25 14:18:07 warmerda * Added some casts of strlen() return result to fix warnings on some * systems, as submitted by Daniel. * * Revision 1.27 2000/09/25 14:15:51 warmerda * added DBFGetNativeFieldType() * * Revision 1.26 2000/07/07 13:39:45 warmerda * removed unused variables, and added system include files * * Revision 1.25 2000/05/29 18:19:13 warmerda * avoid use of uchar, and adding casting fix * * Revision 1.24 2000/05/23 13:38:27 warmerda * Added error checks on return results of fread() and fseek(). * * Revision 1.23 2000/05/23 13:25:49 warmerda * Avoid crashing if field or record are out of range in dbfread*attribute(). * * Revision 1.22 1999/12/15 13:47:24 warmerda * Added stdlib.h to ensure that atof() is prototyped. * * Revision 1.21 1999/12/13 17:25:46 warmerda * Added support for upper case .DBF extention. * * Revision 1.20 1999/11/30 16:32:11 warmerda * Use atof() instead of sscanf(). * * Revision 1.19 1999/11/05 14:12:04 warmerda * updated license terms * * Revision 1.18 1999/07/27 00:53:28 warmerda * ensure that whole old field value clear on write of string * * Revision 1.1 1999/07/05 18:58:07 warmerda * New * * Revision 1.17 1999/06/11 19:14:12 warmerda * Fixed some memory leaks. * * Revision 1.16 1999/06/11 19:04:11 warmerda * Remoted some unused variables. * * Revision 1.15 1999/05/11 03:19:28 warmerda * added new Tuple api, and improved extension handling - add from candrsn * * Revision 1.14 1999/05/04 15:01:48 warmerda * Added 'F' support. * * Revision 1.13 1999/03/23 17:38:59 warmerda * DBFAddField() now actually does return the new field number, or -1 if * it fails. * * Revision 1.12 1999/03/06 02:54:46 warmerda * Added logic to convert shapefile name to dbf filename in DBFOpen() * for convenience. * * Revision 1.11 1998/12/31 15:30:34 warmerda * Improved the interchangability of numeric and string attributes. Add * white space trimming option for attributes. * * Revision 1.10 1998/12/03 16:36:44 warmerda * Use r+b instead of rb+ for binary access. * * Revision 1.9 1998/12/03 15:34:23 warmerda * Updated copyright message. * * Revision 1.8 1997/12/04 15:40:15 warmerda * Added newline character after field definitions. * * Revision 1.7 1997/03/06 14:02:10 warmerda * Ensure bUpdated is initialized. * * Revision 1.6 1996/02/12 04:54:41 warmerda * Ensure that DBFWriteAttribute() returns TRUE if it succeeds. * * Revision 1.5 1995/10/21 03:15:12 warmerda * Changed to use binary file access, and ensure that the * field name field is zero filled, and limited to 10 chars. * * Revision 1.4 1995/08/24 18:10:42 warmerda * Added use of SfRealloc() to avoid pre-ANSI realloc() functions such * as on the Sun. * * Revision 1.3 1995/08/04 03:15:16 warmerda * Fixed up header. * * Revision 1.2 1995/08/04 03:14:43 warmerda * Added header. */ /* * static char rcsid[] = * "$Id: dbfopen.c,v 1.48 2003/03/10 14:51:27 warmerda Exp $"; */ #include "shapefil.h" #include #include #include #include #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif static int nStringFieldLen = 0; static char * pszStringField = NULL; /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* DBFWriteHeader() */ /* */ /* This is called to write out the file header, and field */ /* descriptions before writing any actual data records. This */ /* also computes all the DBFDataSet field offset/size/decimals */ /* and so forth values. */ /************************************************************************/ static void DBFWriteHeader(DBFHandle psDBF) { unsigned char abyHeader[XBASE_FLDHDR_SZ]; int i; if( !psDBF->bNoHeader ) return; psDBF->bNoHeader = FALSE; /* -------------------------------------------------------------------- */ /* Initialize the file header information. */ /* -------------------------------------------------------------------- */ for( i = 0; i < XBASE_FLDHDR_SZ; i++ ) abyHeader[i] = 0; abyHeader[0] = 0x03; /* memo field? - just copying */ /* date updated on close, record count preset at zero */ abyHeader[8] = psDBF->nHeaderLength % 256; abyHeader[9] = psDBF->nHeaderLength / 256; abyHeader[10] = psDBF->nRecordLength % 256; abyHeader[11] = psDBF->nRecordLength / 256; /* -------------------------------------------------------------------- */ /* Write the initial 32 byte file header, and all the field */ /* descriptions. */ /* -------------------------------------------------------------------- */ fseek( psDBF->fp, 0, 0 ); fwrite( abyHeader, XBASE_FLDHDR_SZ, 1, psDBF->fp ); fwrite( psDBF->pszHeader, XBASE_FLDHDR_SZ, psDBF->nFields, psDBF->fp ); /* -------------------------------------------------------------------- */ /* Write out the newline character if there is room for it. */ /* -------------------------------------------------------------------- */ if( psDBF->nHeaderLength > 32*psDBF->nFields + 32 ) { char cNewline; cNewline = 0x0d; fwrite( &cNewline, 1, 1, psDBF->fp ); } } /************************************************************************/ /* DBFFlushRecord() */ /* */ /* Write out the current record if there is one. */ /************************************************************************/ static void DBFFlushRecord( DBFHandle psDBF ) { int nRecordOffset; if( psDBF->bCurrentRecordModified && psDBF->nCurrentRecord > -1 ) { psDBF->bCurrentRecordModified = FALSE; nRecordOffset = psDBF->nRecordLength * psDBF->nCurrentRecord + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fwrite( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); } } /************************************************************************/ /* DBFOpen() */ /* */ /* Open a .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFOpen( const char * pszFilename, const char * pszAccess ) { DBFHandle psDBF; unsigned char *pabyBuf; int nFields, nHeadLen, nRecLen, iField, i; char *pszBasename, *pszFullname; /* -------------------------------------------------------------------- */ /* We only allow the access strings "rb" and "r+". */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"r") != 0 && strcmp(pszAccess,"r+") != 0 && strcmp(pszAccess,"rb") != 0 && strcmp(pszAccess,"rb+") != 0 && strcmp(pszAccess,"r+b") != 0 ) return( NULL ); if( strcmp(pszAccess,"r") == 0 ) pszAccess = "rb"; if( strcmp(pszAccess,"r+") == 0 ) pszAccess = "rb+"; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); psDBF = (DBFHandle) calloc( 1, sizeof(DBFInfo) ); psDBF->fp = fopen( pszFullname, pszAccess ); if( psDBF->fp == NULL ) { sprintf( pszFullname, "%s.DBF", pszBasename ); psDBF->fp = fopen(pszFullname, pszAccess ); } free( pszBasename ); free( pszFullname ); if( psDBF->fp == NULL ) { free( psDBF ); return( NULL ); } psDBF->bNoHeader = FALSE; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; /* -------------------------------------------------------------------- */ /* Read Table Header info */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) malloc(500); if( fread( pabyBuf, 32, 1, psDBF->fp ) != 1 ) { fclose( psDBF->fp ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->nRecords = pabyBuf[4] + pabyBuf[5]*256 + pabyBuf[6]*256*256 + pabyBuf[7]*256*256*256; psDBF->nHeaderLength = nHeadLen = pabyBuf[8] + pabyBuf[9]*256; psDBF->nRecordLength = nRecLen = pabyBuf[10] + pabyBuf[11]*256; psDBF->nFields = nFields = (nHeadLen - 32) / 32; psDBF->pszCurrentRecord = (char *) malloc(nRecLen); /* -------------------------------------------------------------------- */ /* Read in Field Definitions */ /* -------------------------------------------------------------------- */ pabyBuf = (unsigned char *) SfRealloc(pabyBuf,nHeadLen); psDBF->pszHeader = (char *) pabyBuf; fseek( psDBF->fp, 32, 0 ); if( fread( pabyBuf, nHeadLen-32, 1, psDBF->fp ) != 1 ) { fclose( psDBF->fp ); free( pabyBuf ); free( psDBF ); return NULL; } psDBF->panFieldOffset = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldSize = (int *) malloc(sizeof(int) * nFields); psDBF->panFieldDecimals = (int *) malloc(sizeof(int) * nFields); psDBF->pachFieldType = (char *) malloc(sizeof(char) * nFields); for( iField = 0; iField < nFields; iField++ ) { unsigned char *pabyFInfo; pabyFInfo = pabyBuf+iField*32; if( pabyFInfo[11] == 'N' || pabyFInfo[11] == 'F' ) { psDBF->panFieldSize[iField] = pabyFInfo[16]; psDBF->panFieldDecimals[iField] = pabyFInfo[17]; } else { psDBF->panFieldSize[iField] = pabyFInfo[16] + pabyFInfo[17]*256; psDBF->panFieldDecimals[iField] = 0; } psDBF->pachFieldType[iField] = (char) pabyFInfo[11]; if( iField == 0 ) psDBF->panFieldOffset[iField] = 1; else psDBF->panFieldOffset[iField] = psDBF->panFieldOffset[iField-1] + psDBF->panFieldSize[iField-1]; } return( psDBF ); } /************************************************************************/ /* DBFClose() */ /************************************************************************/ void SHPAPI_CALL DBFClose(DBFHandle psDBF) { /* -------------------------------------------------------------------- */ /* Write out header if not already written. */ /* -------------------------------------------------------------------- */ if( psDBF->bNoHeader ) DBFWriteHeader( psDBF ); DBFFlushRecord( psDBF ); /* -------------------------------------------------------------------- */ /* Update last access date, and number of records if we have */ /* write access. */ /* -------------------------------------------------------------------- */ if( psDBF->bUpdated ) { unsigned char abyFileHeader[32]; fseek( psDBF->fp, 0, 0 ); fread( abyFileHeader, 32, 1, psDBF->fp ); abyFileHeader[1] = 95; /* YY */ abyFileHeader[2] = 7; /* MM */ abyFileHeader[3] = 26; /* DD */ abyFileHeader[4] = psDBF->nRecords % 256; abyFileHeader[5] = (psDBF->nRecords/256) % 256; abyFileHeader[6] = (psDBF->nRecords/(256*256)) % 256; abyFileHeader[7] = (psDBF->nRecords/(256*256*256)) % 256; fseek( psDBF->fp, 0, 0 ); fwrite( abyFileHeader, 32, 1, psDBF->fp ); } /* -------------------------------------------------------------------- */ /* Close, and free resources. */ /* -------------------------------------------------------------------- */ fclose( psDBF->fp ); if( psDBF->panFieldOffset != NULL ) { free( psDBF->panFieldOffset ); free( psDBF->panFieldSize ); free( psDBF->panFieldDecimals ); free( psDBF->pachFieldType ); } free( psDBF->pszHeader ); free( psDBF->pszCurrentRecord ); free( psDBF ); if( pszStringField != NULL ) { free( pszStringField ); pszStringField = NULL; nStringFieldLen = 0; } } /************************************************************************/ /* DBFCreate() */ /* */ /* Create a new .dbf file. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCreate( const char * pszFilename ) { DBFHandle psDBF; FILE *fp; char *pszFullname, *pszBasename; int i; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszFilename)+5); strcpy( pszBasename, pszFilename ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.dbf", pszBasename ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Create the file. */ /* -------------------------------------------------------------------- */ fp = fopen( pszFullname, "wb" ); if( fp == NULL ) return( NULL ); fputc( 0, fp ); fclose( fp ); fp = fopen( pszFullname, "rb+" ); if( fp == NULL ) return( NULL ); free( pszFullname ); /* -------------------------------------------------------------------- */ /* Create the info structure. */ /* -------------------------------------------------------------------- */ psDBF = (DBFHandle) malloc(sizeof(DBFInfo)); psDBF->fp = fp; psDBF->nRecords = 0; psDBF->nFields = 0; psDBF->nRecordLength = 1; psDBF->nHeaderLength = 33; psDBF->panFieldOffset = NULL; psDBF->panFieldSize = NULL; psDBF->panFieldDecimals = NULL; psDBF->pachFieldType = NULL; psDBF->pszHeader = NULL; psDBF->nCurrentRecord = -1; psDBF->bCurrentRecordModified = FALSE; psDBF->pszCurrentRecord = NULL; psDBF->bNoHeader = TRUE; return( psDBF ); } /************************************************************************/ /* DBFAddField() */ /* */ /* Add a field to a newly created .dbf file before any records */ /* are written. */ /************************************************************************/ int SHPAPI_CALL DBFAddField(DBFHandle psDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ) { char *pszFInfo; int i; /* -------------------------------------------------------------------- */ /* Do some checking to ensure we can add records to this file. */ /* -------------------------------------------------------------------- */ if( psDBF->nRecords > 0 ) return( -1 ); if( !psDBF->bNoHeader ) return( -1 ); if( eType != FTDouble && nDecimals != 0 ) return( -1 ); if( nWidth < 1 ) return -1; /* -------------------------------------------------------------------- */ /* SfRealloc all the arrays larger to hold the additional field */ /* information. */ /* -------------------------------------------------------------------- */ psDBF->nFields++; psDBF->panFieldOffset = (int *) SfRealloc( psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); psDBF->panFieldSize = (int *) SfRealloc( psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); psDBF->panFieldDecimals = (int *) SfRealloc( psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); psDBF->pachFieldType = (char *) SfRealloc( psDBF->pachFieldType, sizeof(char) * psDBF->nFields ); /* -------------------------------------------------------------------- */ /* Assign the new field information fields. */ /* -------------------------------------------------------------------- */ psDBF->panFieldOffset[psDBF->nFields-1] = psDBF->nRecordLength; psDBF->nRecordLength += nWidth; psDBF->panFieldSize[psDBF->nFields-1] = nWidth; psDBF->panFieldDecimals[psDBF->nFields-1] = nDecimals; if( eType == FTLogical ) psDBF->pachFieldType[psDBF->nFields-1] = 'L'; else if( eType == FTString ) psDBF->pachFieldType[psDBF->nFields-1] = 'C'; else psDBF->pachFieldType[psDBF->nFields-1] = 'N'; /* -------------------------------------------------------------------- */ /* Extend the required header information. */ /* -------------------------------------------------------------------- */ psDBF->nHeaderLength += 32; psDBF->bUpdated = FALSE; psDBF->pszHeader = (char *) SfRealloc(psDBF->pszHeader,psDBF->nFields*32); pszFInfo = psDBF->pszHeader + 32 * (psDBF->nFields-1); for( i = 0; i < 32; i++ ) pszFInfo[i] = '\0'; if( (int) strlen(pszFieldName) < 10 ) strncpy( pszFInfo, pszFieldName, strlen(pszFieldName)); else strncpy( pszFInfo, pszFieldName, 10); pszFInfo[11] = psDBF->pachFieldType[psDBF->nFields-1]; if( eType == FTString ) { pszFInfo[16] = nWidth % 256; pszFInfo[17] = nWidth / 256; } else { pszFInfo[16] = nWidth; pszFInfo[17] = nDecimals; } /* -------------------------------------------------------------------- */ /* Make the current record buffer appropriately larger. */ /* -------------------------------------------------------------------- */ psDBF->pszCurrentRecord = (char *) SfRealloc(psDBF->pszCurrentRecord, psDBF->nRecordLength); return( psDBF->nFields-1 ); } /************************************************************************/ /* DBFReadAttribute() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ static void *DBFReadAttribute(DBFHandle psDBF, int hEntity, int iField, char chReqType ) { int nRecordOffset; unsigned char *pabyRec; void *pReturnField = NULL; static double dDoubleField; /* -------------------------------------------------------------------- */ /* Verify selection. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( iField < 0 || iField >= psDBF->nFields ) return( NULL ); /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; if( fseek( psDBF->fp, nRecordOffset, 0 ) != 0 ) { fprintf( stderr, "fseek(%d) failed on DBF file.\n", nRecordOffset ); return NULL; } if( fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ) != 1 ) { fprintf( stderr, "fread(%d) failed on DBF file.\n", psDBF->nRecordLength ); return NULL; } psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Ensure our field buffer is large enough to hold this buffer. */ /* -------------------------------------------------------------------- */ if( psDBF->panFieldSize[iField]+1 > nStringFieldLen ) { nStringFieldLen = psDBF->panFieldSize[iField]*2 + 10; pszStringField = (char *) SfRealloc(pszStringField,nStringFieldLen); } /* -------------------------------------------------------------------- */ /* Extract the requested field. */ /* -------------------------------------------------------------------- */ strncpy( pszStringField, ((const char *) pabyRec) + psDBF->panFieldOffset[iField], psDBF->panFieldSize[iField] ); pszStringField[psDBF->panFieldSize[iField]] = '\0'; pReturnField = pszStringField; /* -------------------------------------------------------------------- */ /* Decode the field. */ /* -------------------------------------------------------------------- */ if( chReqType == 'N' ) { dDoubleField = atof(pszStringField); pReturnField = &dDoubleField; } /* -------------------------------------------------------------------- */ /* Should we trim white space off the string attribute value? */ /* -------------------------------------------------------------------- */ #ifdef TRIM_DBF_WHITESPACE else { char *pchSrc, *pchDst; pchDst = pchSrc = pszStringField; while( *pchSrc == ' ' ) pchSrc++; while( *pchSrc != '\0' ) *(pchDst++) = *(pchSrc++); *pchDst = '\0'; while( pchDst != pszStringField && *(--pchDst) == ' ' ) *pchDst = '\0'; } #endif return( pReturnField ); } /************************************************************************/ /* DBFReadIntAttribute() */ /* */ /* Read an integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0; else return( (int) *pdValue ); } /************************************************************************/ /* DBFReadDoubleAttribute() */ /* */ /* Read a double attribute. */ /************************************************************************/ double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle psDBF, int iRecord, int iField ) { double *pdValue; pdValue = (double *) DBFReadAttribute( psDBF, iRecord, iField, 'N' ); if( pdValue == NULL ) return 0.0; else return( *pdValue ); } /************************************************************************/ /* DBFReadStringAttribute() */ /* */ /* Read a string attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'C' ) ); } /************************************************************************/ /* DBFReadLogicalAttribute() */ /* */ /* Read a logical attribute. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( (const char *) DBFReadAttribute( psDBF, iRecord, iField, 'L' ) ); } /************************************************************************/ /* DBFIsAttributeNULL() */ /* */ /* Return TRUE if value for field is NULL. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle psDBF, int iRecord, int iField ) { const char *pszValue; pszValue = DBFReadStringAttribute( psDBF, iRecord, iField ); switch(psDBF->pachFieldType[iField]) { case 'N': case 'F': /* NULL numeric fields have value "****************" */ return pszValue[0] == '*'; case 'D': /* NULL date fields have value "00000000" */ return strncmp(pszValue,"00000000",8) == 0; case 'L': /* NULL boolean fields have value "?" */ return pszValue[0] == '?'; default: /* empty string fields are considered NULL */ return strlen(pszValue) == 0; } } /************************************************************************/ /* DBFGetFieldCount() */ /* */ /* Return the number of fields in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ) { return( psDBF->nFields ); } /************************************************************************/ /* DBFGetRecordCount() */ /* */ /* Return the number of records in this table. */ /************************************************************************/ int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ) { return( psDBF->nRecords ); } /************************************************************************/ /* DBFGetFieldInfo() */ /* */ /* Return any requested information about the field. */ /************************************************************************/ DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ) { if( iField < 0 || iField >= psDBF->nFields ) return( FTInvalid ); if( pnWidth != NULL ) *pnWidth = psDBF->panFieldSize[iField]; if( pnDecimals != NULL ) *pnDecimals = psDBF->panFieldDecimals[iField]; if( pszFieldName != NULL ) { int i; strncpy( pszFieldName, (char *) psDBF->pszHeader+iField*32, 11 ); pszFieldName[11] = '\0'; for( i = 10; i > 0 && pszFieldName[i] == ' '; i-- ) pszFieldName[i] = '\0'; } if ( psDBF->pachFieldType[iField] == 'L' ) return( FTLogical); else if( psDBF->pachFieldType[iField] == 'N' || psDBF->pachFieldType[iField] == 'F' || psDBF->pachFieldType[iField] == 'D' ) { if( psDBF->panFieldDecimals[iField] > 0 ) return( FTDouble ); else return( FTInteger ); } else { return( FTString ); } } /************************************************************************/ /* DBFWriteAttribute() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ static int DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int nRecordOffset, i, j, nRetResult = TRUE; unsigned char *pabyRec; char szSField[400], szFormat[20]; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Translate NULL value to valid DBF file representation. */ /* */ /* Contributed by Jim Matthews. */ /* -------------------------------------------------------------------- */ if( pValue == NULL ) { switch(psDBF->pachFieldType[iField]) { case 'N': case 'F': /* NULL numeric fields have value "****************" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '*', psDBF->panFieldSize[iField] ); break; case 'D': /* NULL date fields have value "00000000" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '0', psDBF->panFieldSize[iField] ); break; case 'L': /* NULL boolean fields have value "?" */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '?', psDBF->panFieldSize[iField] ); break; default: /* empty string fields are considered NULL */ memset( (char *) (pabyRec+psDBF->panFieldOffset[iField]), '\0', psDBF->panFieldSize[iField] ); break; } return TRUE; } /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ switch( psDBF->pachFieldType[iField] ) { case 'D': case 'N': case 'F': if( psDBF->panFieldDecimals[iField] == 0 ) { int nWidth = psDBF->panFieldSize[iField]; if( sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%dd", nWidth ); sprintf(szSField, szFormat, (int) *((double *) pValue) ); if( (int)strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } else { int nWidth = psDBF->panFieldSize[iField]; if( sizeof(szSField)-2 < nWidth ) nWidth = sizeof(szSField)-2; sprintf( szFormat, "%%%d.%df", nWidth, psDBF->panFieldDecimals[iField] ); sprintf(szSField, szFormat, *((double *) pValue) ); if( (int) strlen(szSField) > psDBF->panFieldSize[iField] ) { szSField[psDBF->panFieldSize[iField]] = '\0'; nRetResult = FALSE; } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), szSField, strlen(szSField) ); } break; case 'L': if (psDBF->panFieldSize[iField] >= 1 && (*(char*)pValue == 'F' || *(char*)pValue == 'T')) *(pabyRec+psDBF->panFieldOffset[iField]) = *(char*)pValue; break; default: if( (int) strlen((char *) pValue) > psDBF->panFieldSize[iField] ) { j = psDBF->panFieldSize[iField]; nRetResult = FALSE; } else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); break; } return( nRetResult ); } /************************************************************************/ /* DBFWriteAttributeDirectly() */ /* */ /* Write an attribute record to the file, but without any */ /* reformatting based on type. The provided buffer is written */ /* as is to the field position in the record. */ /************************************************************************/ int DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ) { int nRecordOffset, i, j; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; /* -------------------------------------------------------------------- */ /* Assign all the record fields. */ /* -------------------------------------------------------------------- */ if( (int)strlen((char *) pValue) > psDBF->panFieldSize[iField] ) j = psDBF->panFieldSize[iField]; else { memset( pabyRec+psDBF->panFieldOffset[iField], ' ', psDBF->panFieldSize[iField] ); j = strlen((char *) pValue); } strncpy((char *) (pabyRec+psDBF->panFieldOffset[iField]), (char *) pValue, j ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFWriteDoubleAttribute() */ /* */ /* Write a double attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle psDBF, int iRecord, int iField, double dValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteIntegerAttribute() */ /* */ /* Write a integer attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle psDBF, int iRecord, int iField, int nValue ) { double dValue = nValue; return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) &dValue ) ); } /************************************************************************/ /* DBFWriteStringAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle psDBF, int iRecord, int iField, const char * pszValue ) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) pszValue ) ); } /************************************************************************/ /* DBFWriteNULLAttribute() */ /* */ /* Write a string attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle psDBF, int iRecord, int iField ) { return( DBFWriteAttribute( psDBF, iRecord, iField, NULL ) ); } /************************************************************************/ /* DBFWriteLogicalAttribute() */ /* */ /* Write a logical attribute. */ /************************************************************************/ int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle psDBF, int iRecord, int iField, const char lValue) { return( DBFWriteAttribute( psDBF, iRecord, iField, (void *) (&lValue) ) ); } /************************************************************************/ /* DBFWriteTuple() */ /* */ /* Write an attribute record to the file. */ /************************************************************************/ int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ) { int nRecordOffset, i; unsigned char *pabyRec; /* -------------------------------------------------------------------- */ /* Is this a valid record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity > psDBF->nRecords ) return( FALSE ); if( psDBF->bNoHeader ) DBFWriteHeader(psDBF); /* -------------------------------------------------------------------- */ /* Is this a brand new record? */ /* -------------------------------------------------------------------- */ if( hEntity == psDBF->nRecords ) { DBFFlushRecord( psDBF ); psDBF->nRecords++; for( i = 0; i < psDBF->nRecordLength; i++ ) psDBF->pszCurrentRecord[i] = ' '; psDBF->nCurrentRecord = hEntity; } /* -------------------------------------------------------------------- */ /* Is this an existing record, but different than the last one */ /* we accessed? */ /* -------------------------------------------------------------------- */ if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; memcpy ( pabyRec, pRawTuple, psDBF->nRecordLength ); psDBF->bCurrentRecordModified = TRUE; psDBF->bUpdated = TRUE; return( TRUE ); } /************************************************************************/ /* DBFReadTuple() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ) { int nRecordOffset; unsigned char *pabyRec; static char *pReturnTuple = NULL; static int nTupleLen = 0; /* -------------------------------------------------------------------- */ /* Have we read the record? */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psDBF->nRecords ) return( NULL ); if( psDBF->nCurrentRecord != hEntity ) { DBFFlushRecord( psDBF ); nRecordOffset = psDBF->nRecordLength * hEntity + psDBF->nHeaderLength; fseek( psDBF->fp, nRecordOffset, 0 ); fread( psDBF->pszCurrentRecord, psDBF->nRecordLength, 1, psDBF->fp ); psDBF->nCurrentRecord = hEntity; } pabyRec = (unsigned char *) psDBF->pszCurrentRecord; if ( nTupleLen < psDBF->nRecordLength) { nTupleLen = psDBF->nRecordLength; pReturnTuple = (char *) SfRealloc(pReturnTuple, psDBF->nRecordLength); } memcpy ( pReturnTuple, pabyRec, psDBF->nRecordLength ); return( pReturnTuple ); } /************************************************************************/ /* DBFCloneEmpty() */ /* */ /* Read one of the attribute fields of a record. */ /************************************************************************/ DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ) { DBFHandle newDBF; newDBF = DBFCreate ( pszFilename ); if ( newDBF == NULL ) return ( NULL ); newDBF->pszHeader = (char *) malloc ( 32 * psDBF->nFields ); memcpy ( newDBF->pszHeader, psDBF->pszHeader, 32 * psDBF->nFields ); newDBF->nFields = psDBF->nFields; newDBF->nRecordLength = psDBF->nRecordLength; newDBF->nHeaderLength = 32 * (psDBF->nFields+1); newDBF->panFieldOffset = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldOffset, psDBF->panFieldOffset, sizeof(int) * psDBF->nFields ); newDBF->panFieldSize = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldSize, psDBF->panFieldSize, sizeof(int) * psDBF->nFields ); newDBF->panFieldDecimals = (int *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->panFieldDecimals, psDBF->panFieldDecimals, sizeof(int) * psDBF->nFields ); newDBF->pachFieldType = (char *) malloc ( sizeof(int) * psDBF->nFields ); memcpy ( newDBF->pachFieldType, psDBF->pachFieldType, sizeof(int) * psDBF->nFields ); newDBF->bNoHeader = TRUE; newDBF->bUpdated = TRUE; DBFWriteHeader ( newDBF ); DBFClose ( newDBF ); newDBF = DBFOpen ( pszFilename, "rb+" ); return ( newDBF ); } /************************************************************************/ /* DBFGetNativeFieldType() */ /* */ /* Return the DBase field type for the specified field. */ /* */ /* Value can be one of: 'C' (String), 'D' (Date), 'F' (Float), */ /* 'N' (Numeric, with or without decimal), */ /* 'L' (Logical), */ /* 'M' (Memo: 10 digits .DBT block ptr) */ /************************************************************************/ char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle psDBF, int iField ) { if( iField >=0 && iField < psDBF->nFields ) return psDBF->pachFieldType[iField]; return ' '; } /************************************************************************/ /* str_to_upper() */ /************************************************************************/ static void str_to_upper (char *string) { int len; short i = -1; len = strlen (string); while (++i < len) if (isalpha(string[i]) && islower(string[i])) string[i] = toupper ((int)string[i]); } /************************************************************************/ /* DBFGetFieldIndex() */ /* */ /* Get the index number for a field in a .dbf file. */ /* */ /* Contributed by Jim Matthews. */ /************************************************************************/ int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName) { char name[12], name1[12], name2[12]; int i; strncpy(name1, pszFieldName,11); name1[11] = '\0'; str_to_upper(name1); for( i = 0; i < DBFGetFieldCount(psDBF); i++ ) { DBFGetFieldInfo( psDBF, i, name, NULL, NULL ); strncpy(name2,name,11); str_to_upper(name2); if(!strncmp(name1,name2,10)) return(i); } return(-1); } therion-5.4.1/extern/getline.c000066400000000000000000000071351307545355600163140ustar00rootroot00000000000000/* getline.c -- Replacement for GNU C library function getline Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ #if HAVE_CONFIG_H # include #endif /* The `getdelim' function is only declared if the following symbol is defined. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #if defined __GNU_LIBRARY__ && HAVE_GETDELIM int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getdelim (lineptr, n, '\n', stream); } #else /* ! have getdelim */ # define NDEBUG # include # include /* Always add at least this many bytes when extending the buffer. */ # define MIN_CHUNK 64 /* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as necessary. Return the number of characters read (not including the null terminator), or -1 on error or EOF. */ int getstr (lineptr, n, stream, terminator, offset) char **lineptr; size_t *n; FILE *stream; char terminator; size_t offset; { int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ char *read_pos; /* Where we're reading into *LINEPTR. */ int ret; if (!lineptr || !n || !stream) return -1; if (!*lineptr) { *n = MIN_CHUNK; *lineptr = malloc (*n); if (!*lineptr) return -1; } nchars_avail = *n - offset; read_pos = *lineptr + offset; for (;;) { register int c = getc (stream); /* We always want at least one char left in the buffer, since we always (unless we get an error while reading the first char) NUL-terminate the line buffer. */ assert(*n - nchars_avail == read_pos - *lineptr); if (nchars_avail < 2) { if (*n > MIN_CHUNK) *n *= 2; else *n += MIN_CHUNK; nchars_avail = *n + *lineptr - read_pos; *lineptr = realloc (*lineptr, *n); if (!*lineptr) return -1; read_pos = *n - nchars_avail + *lineptr; assert(*n - nchars_avail == read_pos - *lineptr); } if (c == EOF || ferror (stream)) { /* Return partial line, if any. */ if (read_pos == *lineptr) return -1; else break; } *read_pos++ = c; nchars_avail--; if (c == terminator) /* Return the line. */ break; } /* Done - NUL terminate and return the number of chars read. */ *read_pos = '\0'; ret = read_pos - (*lineptr + offset); return ret; } #ifndef __APPLE__ int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getstr (lineptr, n, stream, '\n', 0); } int getdelim (lineptr, n, delimiter, stream) char **lineptr; size_t *n; int delimiter; FILE *stream; { return getstr (lineptr, n, stream, delimiter, 0); } #endif #endif therion-5.4.1/extern/getline.h000066400000000000000000000017771307545355600163270ustar00rootroot00000000000000/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GETLINE_H_ # define GETLINE_H_ 1 #ifdef __cplusplus extern "C" { #endif # include int getline (char **_lineptr, size_t *_n, FILE *_stream); int getdelim (char **_lineptr, size_t *_n, int _delimiter, FILE *_stream); #ifdef __cplusplus } #endif #endif /* not GETLINE_H_ */ therion-5.4.1/extern/getopt.c000066400000000000000000000730151307545355600161670ustar00rootroot00000000000000/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu before changing it! Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO #define _NO_PROTO #endif #ifndef __GNU_LIBRARY__ #define __GNU_LIBRARY__ 1 #endif #ifdef HAVE_CONFIG_H #include #endif #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ #include #ifndef THMSVC #include #endif #endif /* GNU C library. */ #ifdef VMS #include #if HAVE_STRING_H - 0 #include #endif #endif #if defined (WIN32) && !defined (__CYGWIN32__) /* It's not Unix, really. See? Capital letters. */ #include #define getpid() GetCurrentProcessId() #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ #ifdef HAVE_LIBINTL_H # include # define _(msgid) gettext (msgid) #else # define _(msgid) (msgid) #endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ #include #define my_index strchr #else /* Avoid depending on library functions or files whose names are inconsistent. */ char *getenv (); static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ #if !defined (__STDC__) || !__STDC__ /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); #endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; extern pid_t __libc_pid; /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ static void __attribute__ ((unused)) store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } text_set_element (__libc_subinit, store_args_and_env); # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined (__STDC__) && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #ifdef _LIBC /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len); memset (&new_str[nonoption_flags_max_len], '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined (__STDC__) && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #ifdef _LIBC if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else { memcpy (__getopt_nonoption_flags, orig_str, len); memset (&__getopt_nonoption_flags[len], '\0', nonoption_flags_max_len - len); } } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #ifdef _LIBC #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) { if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); } nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ therion-5.4.1/extern/getopt.h000066400000000000000000000110461307545355600161700ustar00rootroot00000000000000/* Declarations for getopt. Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifndef __GNU_LIBRARY__ #define __GNU_LIBRARY__ 1 #endif #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); #endif /* __GNU_LIBRARY__ */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* _GETOPT_H */ therion-5.4.1/extern/getopt1.c000066400000000000000000000107041307545355600162440ustar00rootroot00000000000000/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ therion-5.4.1/extern/img.c000066400000000000000000002131601307545355600154360ustar00rootroot00000000000000/* img.c * Routines for reading and writing Survex ".3d" image files * Copyright (C) 1993-2004,2005,2006,2010,2011,2013,2014 Olly Betts * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include "img.h" #define TIMENA "?" #ifdef IMG_HOSTED # define INT32_T int32_t # include "debug.h" # include "filelist.h" # include "filename.h" # include "message.h" # include "useful.h" # define TIMEFMT msg(/*%a,%Y.%m.%d %H:%M:%S %Z*/107) #else # ifdef HAVE_STDINT_H # include # define INT32_T int32_t # else # include # if INT_MAX >= 2147483647 # define INT32_T int # else # define INT32_T long # endif # endif # define TIMEFMT "%a,%Y.%m.%d %H:%M:%S %Z" # define EXT_SVX_3D "3d" # define EXT_SVX_POS "pos" # define FNM_SEP_EXT '.' # define METRES_PER_FOOT 0.3048 /* exact value */ # define xosmalloc(L) malloc((L)) # define xosrealloc(L,S) realloc((L),(S)) # define osfree(P) free((P)) # define osnew(T) (T*)malloc(sizeof(T)) /* in IMG_HOSTED mode, this tests if a filename refers to a directory */ # define fDirectory(X) 0 /* open file FNM with mode MODE, maybe using path PTH and/or extension EXT */ /* path isn't used in img.c, but EXT is */ # define fopenWithPthAndExt(PTH,FNM,EXT,MODE,X) \ ((*(X) = NULL), fopen(FNM,MODE)) # ifndef PUTC # define PUTC(C, FH) putc(C, FH) # endif # ifndef GETC # define GETC(FH) getc(FH) # endif # define fputsnl(S, FH) (fputs((S), (FH)) == EOF ? EOF : putc('\n', (FH))) # define SVX_ASSERT(X) #ifdef __cplusplus # include using std::max; using std::min; #else /* Return max/min of two numbers. */ /* May be defined already (e.g. by Borland C in stdlib.h) */ /* NB Bad news if X or Y has side-effects... */ # ifndef max # define max(X, Y) ((X) > (Y) ? (X) : (Y)) # endif # ifndef min # define min(X, Y) ((X) < (Y) ? (X) : (Y)) # endif #endif static INT32_T get32(FILE *fh) { INT32_T w = GETC(fh); w |= (INT32_T)GETC(fh) << 8l; w |= (INT32_T)GETC(fh) << 16l; w |= (INT32_T)GETC(fh) << 24l; return w; } static void put32(long w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); PUTC((char)(w >> 16l), fh); PUTC((char)(w >> 24l), fh); } static short get16(FILE *fh) { short w = GETC(fh); w |= (short)GETC(fh) << 8l; return w; } static void put16(short w, FILE *fh) { PUTC((char)(w), fh); PUTC((char)(w >> 8l), fh); } static char * baseleaf_from_fnm(const char *fnm) { const char *p; const char *q; char * res; size_t len; p = fnm; q = strrchr(p, '/'); if (q) p = q + 1; q = strrchr(p, '\\'); if (q) p = q + 1; q = strrchr(p, FNM_SEP_EXT); if (q) len = (const char *)q - p; else len = strlen(p); res = (char *)xosmalloc(len + 1); if (!res) return NULL; memcpy(res, p, len); res[len] = '\0'; return res; } #endif static char * my_strdup(const char *str); static time_t mktime_with_tz(struct tm * tm, const char * tz) { time_t r; char * old_tz = getenv("TZ"); #ifdef _MSC_VER if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (_putenv_s("TZ", tz) != 0) { osfree(old_tz); return (time_t)-1; } #elif defined HAVE_SETENV if (old_tz) { old_tz = my_strdup(old_tz); if (!old_tz) return (time_t)-1; } if (setenv("TZ", tz, 1) < 0) { osfree(old_tz); return (time_t)-1; } #else char * p; if (old_tz) { size_t len = strlen(old_tz) + 1; p = (char *)xosmalloc(len + 3); if (!p) return (time_t)-1; memcpy(p, "TZ=", 3); memcpy(p + 3, tz, len); old_tz = p; } p = (char *)xosmalloc(strlen(tz) + 4); if (!p) { osfree(old_tz); return (time_t)-1; } memcpy(p, "TZ=", 3); strcpy(p + 3, tz); if (putenv(p) != 0) { osfree(p); osfree(old_tz); return (time_t)-1; } #define CLEANUP() osfree(p) #endif tzset(); r = mktime(tm); if (old_tz) { #ifdef _MSC_VER _putenv_s("TZ", old_tz); #elif !defined HAVE_SETENV putenv(old_tz); #else setenv("TZ", old_tz, 1); #endif osfree(old_tz); } else { #ifdef _MSC_VER _putenv_s("TZ", ""); #elif !defined HAVE_UNSETENV putenv((char*)"TZ"); #else unsetenv("TZ"); #endif } #ifdef CLEANUP CLEANUP(); #undef CLEANUP #endif return r; } static unsigned short getu16(FILE *fh) { return (unsigned short)get16(fh); } #include #if !defined HAVE_LROUND && !defined HAVE_DECL_LROUND /* The autoconf tests are not in use, but C99 and C++11 both added lround(), * so set HAVE_LROUND and HAVE_DECL_LROUND conservatively based on the language * standard version the compiler claims to support. */ # if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) || \ (defined __cplusplus && __cplusplus >= 201103L) # define HAVE_LROUND 1 # define HAVE_DECL_LROUND 1 # endif #endif #ifdef HAVE_LROUND # if defined HAVE_DECL_LROUND && !HAVE_DECL_LROUND /* On older systems, the prototype may be missing. */ extern long lround(double); # endif # define my_lround lround #else static long my_lround(double x) { return (x >= 0.0) ? (long)(x + 0.5) : -(long)(0.5 - x); } #endif /* portable case insensitive string compare */ #if defined(strcasecmp) || defined(HAVE_STRCASECMP) # define my_strcasecmp strcasecmp #else static int my_strcasecmp(const char *s1, const char *s2) { unsigned char c1, c2; do { c1 = *s1++; c2 = *s2++; } while (c1 && toupper(c1) == toupper(c2)); /* now calculate real difference */ return c1 - c2; } #endif unsigned int img_output_version = IMG_VERSION_MAX; static img_errcode img_errno = IMG_NONE; #define FILEID "Survex 3D Image File" #define EXT_PLT "plt" #define EXT_PLF "plf" /* Attempt to string paste to ensure we are passed a literal string */ #define LITLEN(S) (sizeof(S"") - 1) /* Fake "version numbers" for non-3d formats we can read. */ #define VERSION_CMAP_SHOT -4 #define VERSION_CMAP_STATION -3 #define VERSION_COMPASS_PLT -2 #define VERSION_SURVEX_POS -1 static char * my_strdup(const char *str) { char *p; size_t len = strlen(str) + 1; p = (char *)xosmalloc(len); if (p) memcpy(p, str, len); return p; } #define getline_alloc(FH) getline_alloc_len(FH, NULL) static char * getline_alloc_len(FILE *fh, size_t * p_len) { int ch; size_t i = 0; size_t len = 16; char *buf = (char *)xosmalloc(len); if (!buf) return NULL; ch = GETC(fh); while (ch != '\n' && ch != '\r' && ch != EOF) { buf[i++] = ch; if (i == len - 1) { char *p; len += len; p = (char *)xosrealloc(buf, len); if (!p) { osfree(buf); return NULL; } buf = p; } ch = GETC(fh); } if (ch == '\n' || ch == '\r') { int otherone = ch ^ ('\n' ^ '\r'); ch = GETC(fh); /* if it's not the other eol character, put it back */ if (ch != otherone) ungetc(ch, fh); } buf[i] = '\0'; if (p_len) *p_len = i; return buf; } img_errcode img_error(void) { return img_errno; } static int check_label_space(img *pimg, size_t len) { if (len > pimg->buf_len) { char *b = (char *)xosrealloc(pimg->label_buf, len); if (!b) return 0; pimg->label = (pimg->label - pimg->label_buf) + b; pimg->label_buf = b; pimg->buf_len = len; } return 1; } #define has_ext(F,L,E) ((L) > LITLEN(E) + 1 &&\ (F)[(L) - LITLEN(E) - 1] == FNM_SEP_EXT &&\ my_strcasecmp((F) + (L) - LITLEN(E), E) == 0) img * img_open_survey(const char *fnm, const char *survey) { img *pimg; size_t len; char buf[LITLEN(FILEID) + 9]; int ch; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopenWithPthAndExt("", fnm, EXT_SVX_3D, "rb", &(pimg->filename_opened)); if (pimg->fh == NULL) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_FILENOTFOUND; return NULL; } pimg->fRead = 1; /* reading from this file */ img_errno = IMG_NONE; pimg->flags = 0; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't * entered a survey yet */ /* for VERSION_CMAP_SHOT, we store the last station here * to detect whether we MOVE or LINE */ pimg->label_len = 0; pimg->label_buf[0] = '\0'; pimg->survey = NULL; pimg->survey_len = 0; pimg->separator = '.'; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif pimg->is_extended_elevation = 0; pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->title = pimg->datestamp = pimg->cs = NULL; pimg->datestamp_numeric = (time_t)-1; if (survey) { len = strlen(survey); if (len) { if (survey[len - 1] == '.') len--; if (len) { char *p; pimg->survey = (char *)xosmalloc(len + 2); if (!pimg->survey) { img_errno = IMG_OUTOFMEMORY; goto error; } memcpy(pimg->survey, survey, len); /* Set title to leaf survey name */ pimg->survey[len] = '\0'; p = strchr(pimg->survey, '.'); if (p) p++; else p = pimg->survey; pimg->title = my_strdup(p); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->survey[len] = '.'; pimg->survey[len + 1] = '\0'; } } pimg->survey_len = len; } /* [VERSION_COMPASS_PLT, VERSION_CMAP_STATION, VERSION_CMAP_SHOT] pending * IMG_LINE or IMG_MOVE - both have 4 added. * [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; len = strlen(fnm); if (has_ext(fnm, len, EXT_SVX_POS)) { pos_file: pimg->version = VERSION_SURVEX_POS; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } pimg->start = 0; return pimg; } if (has_ext(fnm, len, EXT_PLT) || has_ext(fnm, len, EXT_PLF)) { long fpos; plt_file: pimg->version = VERSION_COMPASS_PLT; /* Spaces aren't legal in Compass station names, but dots are, so * use space as the level separator */ pimg->separator = ' '; pimg->start = 0; if (!pimg->survey) pimg->title = baseleaf_from_fnm(fnm); pimg->datestamp = my_strdup(TIMENA); if (!pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; goto error; } while (1) { ch = GETC(pimg->fh); switch (ch) { case '\x1a': fseek(pimg->fh, -1, SEEK_CUR); /* FALL THRU */ case EOF: pimg->start = ftell(pimg->fh); return pimg; case 'N': { char *line, *q; fpos = ftell(pimg->fh) - 1; if (!pimg->survey) { /* FIXME : if there's only one survey in the file, it'd be nice * to use its description as the title here... */ ungetc('N', pimg->fh); pimg->start = fpos; return pimg; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } len = 0; while (line[len] > 32) ++len; if (pimg->survey_len != len || memcmp(line, pimg->survey, len) != 0) { osfree(line); continue; } q = strchr(line + len, 'C'); if (q && q[1]) { osfree(pimg->title); pimg->title = my_strdup(q + 1); } else if (!pimg->title) { pimg->title = my_strdup(pimg->label); } osfree(line); if (!pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } if (!pimg->start) pimg->start = fpos; fseek(pimg->fh, pimg->start, SEEK_SET); return pimg; } case 'M': case 'D': pimg->start = ftell(pimg->fh) - 1; break; } while (ch != '\n' && ch != '\r') { ch = GETC(pimg->fh); } } } /* Although these are often referred to as "CMAP .XYZ files", it seems * that actually, the extension .XYZ isn't used, rather .SHT (shot * variant, produced by CMAP v16 and later), .UNA (unadjusted) and * .ADJ (adjusted) extensions are. Since img has long checked for * .XYZ, we continue to do so in case anyone is relying on it. */ if (has_ext(fnm, len, "sht") || has_ext(fnm, len, "adj") || has_ext(fnm, len, "una") || has_ext(fnm, len, "xyz")) { char *line; xyz_file: /* Spaces aren't legal in CMAP station names, but dots are, so * use space as the level separator. */ pimg->separator = ' '; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } /* There doesn't seem to be a spec for what happens after 1999 with cmap * files, so this code allows for: * * 21xx -> xx (up to 2150) * * 21xx -> 1xx (up to 2199) * * full year being specified instead of 2 digits */ len = strlen(line); if (len > 59) { /* Don't just truncate at column 59, allow for a > 2 digit year. */ char * p = strstr(line + len, "Page"); if (p) { while (p > line && p[-1] == ' ') --p; *p = '\0'; len = p - line; } else { line[59] = '\0'; } } if (len > 45) { /* YY/MM/DD HH:MM */ struct tm tm; unsigned long v; char * p; pimg->datestamp = my_strdup(line + 45); p = pimg->datestamp; v = strtoul(p, &p, 10); if (v <= 50) { /* In the absence of a spec for cmap files, assume <= 50 means 21st * century. */ v += 2000; } else if (v < 200) { /* Map 100-199 to 21st century. */ v += 1900; } if (v == ULONG_MAX || *p++ != '/') goto bad_cmap_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '/') goto bad_cmap_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_cmap_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_cmap_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60) goto bad_cmap_date; tm.tm_min = v; if (*p == ':') { v = strtoul(p + 1, &p, 10); if (v > 60) goto bad_cmap_date; tm.tm_sec = v; } else { tm.tm_sec = 0; } tm.tm_isdst = 0; /* We have no indication of what timezone this timestamp is in. It's * probably local time for whoever processed the data, so just assume * UTC, which is at least fairly central in the possibilities. */ pimg->datestamp_numeric = mktime_with_tz(&tm, ""); } else { pimg->datestamp = my_strdup(TIMENA); } bad_cmap_date: if (strncmp(line, " Cave Survey Data Processed by CMAP ", LITLEN(" Cave Survey Data Processed by CMAP ")) == 0) { len = 0; } else { if (len > 45) { line[45] = '\0'; len = 45; } while (len > 2 && line[len - 1] == ' ') --len; if (len > 2) { line[len] = '\0'; pimg->title = my_strdup(line + 2); } } if (len <= 2) pimg->title = baseleaf_from_fnm(fnm); osfree(line); if (!pimg->datestamp || !pimg->title) { img_errno = IMG_OUTOFMEMORY; goto error; } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || (line[1] != 'S' && line[1] != 'O')) { img_errno = IMG_BADFORMAT; goto error; } if (line[1] == 'S') { pimg->version = VERSION_CMAP_STATION; } else { pimg->version = VERSION_CMAP_SHOT; } osfree(line); line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; goto error; } if (line[0] != ' ' || line[1] != '-') { img_errno = IMG_BADFORMAT; goto error; } osfree(line); pimg->start = ftell(pimg->fh); return pimg; } if (fread(buf, LITLEN(FILEID) + 1, 1, pimg->fh) != 1 || memcmp(buf, FILEID"\n", LITLEN(FILEID) + 1) != 0) { if (fread(buf + LITLEN(FILEID) + 1, 8, 1, pimg->fh) == 1 && memcmp(buf, FILEID"\r\nv0.01\r\n", LITLEN(FILEID) + 9) == 0) { /* v0 3d file with DOS EOLs */ pimg->version = 0; goto v03d; } rewind(pimg->fh); if (buf[1] == ' ') { if (buf[0] == ' ') { /* Looks like a CMAP .xyz file ... */ goto xyz_file; } else if (strchr("ZSNF", buf[0])) { /* Looks like a Compass .plt file ... */ /* Almost certainly it'll start "Z " */ goto plt_file; } } if (buf[0] == '(') { /* Looks like a Survex .pos file ... */ goto pos_file; } img_errno = IMG_BADFORMAT; goto error; } /* check file format version */ ch = GETC(pimg->fh); pimg->version = 0; if (tolower(ch) == 'b') { /* binary file iff B/b prefix */ pimg->version = 1; ch = GETC(pimg->fh); } if (ch != 'v') { img_errno = IMG_BADFORMAT; goto error; } ch = GETC(pimg->fh); if (ch == '0') { if (fread(buf, 4, 1, pimg->fh) != 1 || memcmp(buf, ".01\n", 4) != 0) { img_errno = IMG_BADFORMAT; goto error; } /* nothing special to do */ } else if (pimg->version == 0) { if (ch < '2' || ch > '0' + IMG_VERSION_MAX || GETC(pimg->fh) != '\n') { img_errno = IMG_TOONEW; goto error; } pimg->version = ch - '0'; } else { img_errno = IMG_BADFORMAT; goto error; } v03d: { size_t title_len; char * title = getline_alloc_len(pimg->fh, &title_len); if (pimg->version == 8 && title) { /* We sneak in an extra field after a zero byte here, containing the * specified coordinate system (if any). Older readers will just * not see it (which is fine), and this trick avoids us having to * bump the 3d format version. */ size_t real_len = strlen(title); if (real_len != title_len) { pimg->cs = my_strdup(title + real_len + 1); } } if (!pimg->title) { pimg->title = title; } else { osfree(title); } } pimg->datestamp = getline_alloc(pimg->fh); if (!pimg->title || !pimg->datestamp) { img_errno = IMG_OUTOFMEMORY; error: osfree(pimg->title); osfree(pimg->cs); osfree(pimg->datestamp); osfree(pimg->filename_opened); fclose(pimg->fh); osfree(pimg); return NULL; } if (pimg->version >= 8) { int flags = GETC(pimg->fh); if (flags & img_FFLAG_EXTENDED) pimg->is_extended_elevation = 1; } else { len = strlen(pimg->title); if (len > 11 && strcmp(pimg->title + len - 11, " (extended)") == 0) { pimg->title[len - 11] = '\0'; pimg->is_extended_elevation = 1; } } if (pimg->datestamp[0] == '@') { unsigned long v; char * p; errno = 0; v = strtoul(pimg->datestamp + 1, &p, 10); if (errno == 0 && *p == '\0') pimg->datestamp_numeric = v; /* FIXME: We're assuming here that the C time_t epoch is 1970, which is * true for Unix-like systems, Mac OS X and Windows, but isn't guaranteed * by ISO C. */ } else { /* %a,%Y.%m.%d %H:%M:%S %Z */ struct tm tm; unsigned long v; char * p = pimg->datestamp; while (isalpha((unsigned char)*p)) ++p; if (*p == ',') ++p; while (isspace((unsigned char)*p)) ++p; v = strtoul(p, &p, 10); if (v == ULONG_MAX || *p++ != '.') goto bad_3d_date; tm.tm_year = v - 1900; v = strtoul(p, &p, 10); if (v < 1 || v > 12 || *p++ != '.') goto bad_3d_date; tm.tm_mon = v - 1; v = strtoul(p, &p, 10); if (v < 1 || v > 31 || *p++ != ' ') goto bad_3d_date; tm.tm_mday = v; v = strtoul(p, &p, 10); if (v >= 24 || *p++ != ':') goto bad_3d_date; tm.tm_hour = v; v = strtoul(p, &p, 10); if (v >= 60 || *p++ != ':') goto bad_3d_date; tm.tm_min = v; v = strtoul(p, &p, 10); if (v > 60) goto bad_3d_date; tm.tm_sec = v; tm.tm_isdst = 0; while (isspace((unsigned char)*p)) ++p; /* p now points to the timezone string. * * However, it's likely to be a string like "BST", and such strings can * be ambiguous (BST could be UTC+1 or UTC+6), so it is impossible to * reliably convert in all cases. Just pass what we have to tzset() - if * it doesn't handle it, UTC will be used. */ pimg->datestamp_numeric = mktime_with_tz(&tm, p); } bad_3d_date: pimg->start = ftell(pimg->fh); return pimg; } int img_rewind(img *pimg) { if (!pimg->fRead) { img_errno = IMG_WRITEERROR; return 0; } if (fseek(pimg->fh, pimg->start, SEEK_SET) != 0) { img_errno = IMG_READERROR; return 0; } clearerr(pimg->fh); /* [VERSION_SURVEX_POS] already skipped heading line, or there wasn't one * [version 0] not in the middle of a 'LINE' command * [version >= 3] not in the middle of turning a LINE into a MOVE */ pimg->pending = 0; img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ /* for VERSION_COMPASS_PLT, 0 value indicates we haven't entered a survey * yet */ /* for VERSION_CMAP_SHOT, we store the last station here to detect whether * we MOVE or LINE */ pimg->label_len = 0; pimg->style = img_STYLE_UNKNOWN; return 1; } img * img_open_write_cs(const char *fnm, const char *title, const char * cs, int flags) { time_t tm; img *pimg; if (fDirectory(fnm)) { img_errno = IMG_DIRECTORY; return NULL; } pimg = osnew(img); if (pimg == NULL) { img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->buf_len = 257; pimg->label_buf = (char *)xosmalloc(pimg->buf_len); if (!pimg->label_buf) { osfree(pimg); img_errno = IMG_OUTOFMEMORY; return NULL; } pimg->fh = fopen(fnm, "wb"); if (!pimg->fh) { osfree(pimg->label_buf); osfree(pimg); img_errno = IMG_CANTOPENOUT; return NULL; } pimg->filename_opened = NULL; /* Output image file header */ fputs("Survex 3D Image File\n", pimg->fh); /* file identifier string */ if (img_output_version < 2) { pimg->version = 1; fputs("Bv0.01\n", pimg->fh); /* binary file format version number */ } else { pimg->version = (img_output_version > IMG_VERSION_MAX) ? IMG_VERSION_MAX : img_output_version; fprintf(pimg->fh, "v%d\n", pimg->version); /* file format version no. */ } fputs(title, pimg->fh); if (pimg->version < 8 && (flags & img_FFLAG_EXTENDED)) { /* Older format versions append " (extended)" to the title to mark * extended elevations. */ size_t len = strlen(title); if (len < 11 || strcmp(title + len - 11, " (extended)") != 0) fputs(" (extended)", pimg->fh); } if (pimg->version == 8 && cs && *cs) { /* We sneak in an extra field after a zero byte here, containing the * specified coordinate system (if any). Older readers will just not * see it (which is fine), and this trick avoids us having to bump the * 3d format version. */ PUTC('\0', pimg->fh); fputs(cs, pimg->fh); } PUTC('\n', pimg->fh); tm = time(NULL); if (tm == (time_t)-1) { fputsnl(TIMENA, pimg->fh); } else if (pimg->version <= 7) { char date[256]; /* output current date and time in format specified */ strftime(date, 256, TIMEFMT, localtime(&tm)); fputsnl(date, pimg->fh); } else { fprintf(pimg->fh, "@%ld\n", (long)tm); } if (pimg->version >= 8) { /* Clear bit one in case anyone has been passing true for fBinary. */ flags &=~ 1; PUTC(flags, pimg->fh); } #if 0 if (img_output_version >= 5) { static const unsigned char codelengths[32] = { 4, 8, 8, 16, 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 }; fwrite(codelengths, 32, 1, pimg->fh); } #endif pimg->fRead = 0; /* writing to this file */ img_errno = IMG_NONE; /* for version >= 3 we use label_buf to store the prefix for reuse */ pimg->label_buf[0] = '\0'; pimg->label_len = 0; #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; pimg->olddate1 = pimg->olddate2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; pimg->olddays1 = pimg->olddays2 = -1; #endif pimg->style = pimg->oldstyle = img_STYLE_UNKNOWN; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; pimg->n_legs = 0; pimg->length = 0.0; pimg->E = pimg->H = pimg->V = 0.0; /* Don't check for write errors now - let img_close() report them... */ return pimg; } static void read_xyz_station_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 6, 9); num[9] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 15, 9); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void read_xyz_shot_coords(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 40, 10); num[10] = '\0'; pt->x = atof(num) / METRES_PER_FOOT; memcpy(num, line + 50, 10); pt->y = atof(num) / METRES_PER_FOOT; memcpy(num, line + 60, 9); num[9] = '\0'; pt->z = atof(num) / METRES_PER_FOOT; } static void subtract_xyz_shot_deltas(img_point *pt, const char *line) { char num[12]; memcpy(num, line + 15, 9); num[9] = '\0'; pt->x -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 24, 8); num[8] = '\0'; pt->y -= atof(num) / METRES_PER_FOOT; memcpy(num, line + 32, 8); pt->z -= atof(num) / METRES_PER_FOOT; } static int read_coord(FILE *fh, img_point *pt) { SVX_ASSERT(fh); SVX_ASSERT(pt); pt->x = get32(fh) / 100.0; pt->y = get32(fh) / 100.0; pt->z = get32(fh) / 100.0; if (ferror(fh) || feof(fh)) { img_errno = feof(fh) ? IMG_BADFORMAT : IMG_READERROR; return 0; } return 1; } static int skip_coord(FILE *fh) { return (fseek(fh, 12, SEEK_CUR) == 0); } static int read_v3label(img *pimg) { char *q; long len = GETC(pimg->fh); if (len == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (len == 0xfe) { len += get16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } else if (len == 0xff) { len = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh) || len < 0xfe + 0xffff) { img_errno = IMG_BADFORMAT; return img_BAD; } } if (!check_label_space(pimg, pimg->label_len + len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } q = pimg->label_buf + pimg->label_len; pimg->label_len += len; if (len && fread(q, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[len] = '\0'; return 0; } static int read_v8label(img *pimg, int common_flag, size_t common_val) { char *q; size_t del, add; if (common_flag) { if (common_val == 0) return 0; add = del = common_val; } else { int ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0x00) { del = ch >> 4; add = ch & 0x0f; } else { ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { del = ch; } else { del = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } ch = GETC(pimg->fh); if (ch == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (ch != 0xff) { add = ch; } else { add = get32(pimg->fh); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } } } if (add > del && !check_label_space(pimg, pimg->label_len + add - del + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } if (del > pimg->label_len) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= del; q = pimg->label_buf + pimg->label_len; pimg->label_len += add; if (add && fread(q, add, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q[add] = '\0'; return 0; } static int img_read_item_new(img *pimg, img_point *p); static int img_read_item_v3to7(img *pimg, img_point *p); static int img_read_item_ancient(img *pimg, img_point *p); static int img_read_item_ascii_wrapper(img *pimg, img_point *p); static int img_read_item_ascii(img *pimg, img_point *p); int img_read_item(img *pimg, img_point *p) { pimg->flags = 0; if (pimg->version >= 8) { return img_read_item_new(pimg, p); } else if (pimg->version >= 3) { return img_read_item_v3to7(pimg, p); } else if (pimg->version >= 1) { return img_read_item_ancient(pimg, p); } else { return img_read_item_ascii_wrapper(pimg, p); } } static int img_read_item_new(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending >= 0x40) { if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (opt >> 6 == 0) { if (opt <= 4) { if (opt == 0 && pimg->style == 0) return img_STOP; /* end of data marker */ /* STYLE */ pimg->style = opt; goto again3; } if (opt >= 0x10) { switch (opt) { case 0x10: { /* No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x11: { /* Single date */ int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif break; } case 0x12: { /* Date range (short) */ int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x13: { /* Date range (long) */ int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x1f: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; return img_ERROR_INFO; case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } goto again3; } if (opt != 15) { /* 1-14 and 16-31 reserved */ img_errno = IMG_BADFORMAT; return img_BAD; } result = img_MOVE; } else if (opt >= 0x80) { if (read_v8label(pimg, 0, 0) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x7f; } else if ((opt >> 6) == 1) { if (read_v8label(pimg, opt & 0x20, 0) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x1f; } else { img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_v3to7(img *pimg, img_point *p) { int result; int opt; pimg->l = pimg->r = pimg->u = pimg->d = -1.0; if (pimg->pending == 256) { pimg->pending = 0; return img_XSECT_END; } if (pimg->pending >= 0x80) { *p = pimg->mv; pimg->flags = (int)(pimg->pending) & 0x3f; pimg->pending = 0; return img_LINE; } again3: /* label to goto if we get a prefix, date, or lrud */ pimg->label = pimg->label_buf; opt = GETC(pimg->fh); if (opt == EOF) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } switch (opt >> 6) { case 0: if (opt == 0) { if (!pimg->label_len) return img_STOP; /* end of data marker */ pimg->label_len = 0; goto again3; } if (opt < 15) { /* 1-14 mean trim that many levels from current prefix */ int c; if (pimg->label_len <= 17) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } /* extra - 1 because label_len points to one past the end */ c = pimg->label_len - 17 - 1; while (pimg->label_buf[c] != '.' || --opt > 0) { if (--c < 0) { /* zero prefix using "0" */ img_errno = IMG_BADFORMAT; return img_BAD; } } c++; pimg->label_len = c; goto again3; } if (opt == 15) { result = img_MOVE; break; } if (opt >= 0x20) { switch (opt) { case 0x20: /* Single date */ if (pimg->version < 7) { int date1 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = date1; #else /* IMG_API_VERSION == 1 */ if (date1 != 0) { pimg->days2 = pimg->days1 = (date1 / 86400) + 25567; } else { pimg->days2 = pimg->days1 = -1; } #endif } else { int days1 = (int)getu16(pimg->fh); #if IMG_API_VERSION == 0 pimg->date2 = pimg->date1 = (days1 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days2 = pimg->days1 = days1; #endif } break; case 0x21: /* Date range (short for v7+) */ if (pimg->version < 7) { INT32_T date1 = get32(pimg->fh); INT32_T date2 = get32(pimg->fh); #if IMG_API_VERSION == 0 pimg->date1 = date1; pimg->date2 = date2; #else /* IMG_API_VERSION == 1 */ pimg->days1 = (date1 / 86400) + 25567; pimg->days2 = (date2 / 86400) + 25567; #endif } else { int days1 = (int)getu16(pimg->fh); int days2 = days1 + GETC(pimg->fh) + 1; #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif } break; case 0x22: /* Error info */ pimg->n_legs = get32(pimg->fh); pimg->length = get32(pimg->fh) / 100.0; pimg->E = get32(pimg->fh) / 100.0; pimg->H = get32(pimg->fh) / 100.0; pimg->V = get32(pimg->fh) / 100.0; if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } return img_ERROR_INFO; case 0x23: { /* v7+: Date range (long) */ if (pimg->version < 7) { img_errno = IMG_BADFORMAT; return img_BAD; } int days1 = (int)getu16(pimg->fh); int days2 = (int)getu16(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } #if IMG_API_VERSION == 0 pimg->date1 = (days1 - 25567) * 86400; pimg->date2 = (days2 - 25567) * 86400; #else /* IMG_API_VERSION == 1 */ pimg->days1 = days1; pimg->days2 = days2; #endif break; } case 0x24: { /* v7+: No date info */ #if IMG_API_VERSION == 0 pimg->date1 = pimg->date2 = 0; #else /* IMG_API_VERSION == 1 */ pimg->days1 = pimg->days2 = -1; #endif break; } case 0x30: case 0x31: /* LRUD */ case 0x32: case 0x33: /* Big LRUD! */ if (read_v3label(pimg) == img_BAD) return img_BAD; pimg->flags = (int)opt & 0x01; if (opt < 0x32) { pimg->l = get16(pimg->fh) / 100.0; pimg->r = get16(pimg->fh) / 100.0; pimg->u = get16(pimg->fh) / 100.0; pimg->d = get16(pimg->fh) / 100.0; } else { pimg->l = get32(pimg->fh) / 100.0; pimg->r = get32(pimg->fh) / 100.0; pimg->u = get32(pimg->fh) / 100.0; pimg->d = get32(pimg->fh) / 100.0; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { return img_XSECT_END; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } /* If this is the last cross-section in this passage, set * pending so we return img_XSECT_END next time. */ if (pimg->flags & 0x01) { pimg->pending = 256; pimg->flags &= ~0x01; } return img_XSECT; default: /* 0x25 - 0x2f and 0x34 - 0x3f are currently unallocated. */ img_errno = IMG_BADFORMAT; return img_BAD; } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } goto again3; } /* 16-31 mean remove (n - 15) characters from the prefix */ /* zero prefix using 0 */ if (pimg->label_len <= (size_t)(opt - 15)) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->label_len -= (opt - 15); goto again3; case 1: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LABEL; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l + 1) != 0) { if (!skip_coord(pimg->fh)) return img_BAD; pimg->pending = 0; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } pimg->flags = (int)opt & 0x3f; break; case 2: if (read_v3label(pimg) == img_BAD) return img_BAD; result = img_LINE; if (pimg->survey_len) { size_t l = pimg->survey_len; const char *s = pimg->label_buf; if (strncmp(pimg->survey, s, l) != 0 || !(s[l] == '.' || s[l] == '\0')) { if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = 15; goto again3; } pimg->label += l; /* skip the dot if there */ if (*pimg->label) pimg->label++; } if (pimg->pending) { *p = pimg->mv; if (!read_coord(pimg->fh, &(pimg->mv))) return img_BAD; pimg->pending = opt; return img_MOVE; } pimg->flags = (int)opt & 0x3f; break; default: img_errno = IMG_BADFORMAT; return img_BAD; } if (!read_coord(pimg->fh, p)) return img_BAD; pimg->pending = 0; return result; } static int img_read_item_ancient(img *pimg, img_point *p) { int result; static long opt_lookahead = 0; static img_point pt = { 0.0, 0.0, 0.0 }; long opt; again: /* label to goto if we get a cross */ pimg->label = pimg->label_buf; pimg->label[0] = '\0'; if (pimg->version == 1) { if (opt_lookahead) { opt = opt_lookahead; opt_lookahead = 0; } else { opt = get32(pimg->fh); } } else { opt = GETC(pimg->fh); } if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } switch (opt) { case -1: case 0: return img_STOP; /* end of data marker */ case 1: /* skip coordinates */ if (!skip_coord(pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto again; case 2: case 3: { size_t len; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } if (pimg->label[0] == '\\') pimg->label++; len = strlen(pimg->label); if (len == 0 || pimg->label[len - 1] != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 1) goto again; pimg->label[len - 1] = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ if (opt == 2) goto done; break; } case 6: case 7: { long len; result = img_LABEL; if (opt == 7) pimg->flags = GETC(pimg->fh); else pimg->flags = img_SFLAG_UNDERGROUND; /* no flags given... */ len = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } /* Ignore empty labels in some .3d files (caused by a bug) */ if (len == 0) goto again; if (!check_label_space(pimg, len + 1)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } if (fread(pimg->label_buf, len, 1, pimg->fh) != 1) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } pimg->label_buf[len] = '\0'; break; } case 4: result = img_MOVE; break; case 5: result = img_LINE; break; default: switch ((int)opt & 0xc0) { case 0x80: pimg->flags = (int)opt & 0x3f; result = img_LINE; break; case 0x40: { char *q; pimg->flags = (int)opt & 0x3f; result = img_LABEL; if (!fgets(pimg->label_buf, pimg->buf_len, pimg->fh)) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } q = pimg->label_buf + strlen(pimg->label_buf) - 1; /* Ignore empty-labels in some .3d files (caused by a bug) */ if (q == pimg->label_buf) goto again; if (*q != '\n') { img_errno = IMG_BADFORMAT; return img_BAD; } *q = '\0'; break; } default: img_errno = IMG_BADFORMAT; return img_BAD; } break; } if (!read_coord(pimg->fh, &pt)) return img_BAD; if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto again; pimg->label += pimg->survey_len + 1; } done: *p = pt; if (result == img_MOVE && pimg->version == 1) { /* peek at next code and see if it's an old-style label */ opt_lookahead = get32(pimg->fh); if (feof(pimg->fh)) { img_errno = IMG_BADFORMAT; return img_BAD; } if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (opt_lookahead == 2) return img_read_item_ancient(pimg, p); } return result; } static int img_read_item_ascii_wrapper(img *pimg, img_point *p) { /* We need to set the default locale for fscanf() to work on * numbers with "." as decimal point. */ int result; char * current_locale = my_strdup(setlocale(LC_NUMERIC, NULL)); setlocale(LC_NUMERIC, "C"); result = img_read_item_ascii(pimg, p); setlocale(LC_NUMERIC, current_locale); free(current_locale); return result; } /* Handle all ASCII formats. */ static int img_read_item_ascii(img *pimg, img_point *p) { int result; pimg->label = pimg->label_buf; if (pimg->version == 0) { ascii_again: pimg->label[0] = '\0'; if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { pimg->pending = 0; result = img_LINE; } else { char cmd[7]; /* Stop if nothing found */ if (fscanf(pimg->fh, "%6s", cmd) < 1) return img_STOP; if (strcmp(cmd, "move") == 0) result = img_MOVE; else if (strcmp(cmd, "draw") == 0) result = img_LINE; else if (strcmp(cmd, "line") == 0) { /* set flag to indicate to process second triplet as LINE */ pimg->pending = 1; result = img_MOVE; } else if (strcmp(cmd, "cross") == 0) { if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = feof(pimg->fh) ? IMG_BADFORMAT : IMG_READERROR; return img_BAD; } goto ascii_again; } else if (strcmp(cmd, "name") == 0) { size_t off = 0; int ch = GETC(pimg->fh); if (ch == ' ') ch = GETC(pimg->fh); while (ch != ' ') { if (ch == '\n' || ch == EOF) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (off == pimg->buf_len) { if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label_buf[off++] = ch; ch = GETC(pimg->fh); } pimg->label_buf[off] = '\0'; pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ result = img_LABEL; } else { img_errno = IMG_BADFORMAT; return img_BAD; /* unknown keyword */ } } if (fscanf(pimg->fh, "%lf%lf%lf", &p->x, &p->y, &p->z) < 3) { img_errno = ferror(pimg->fh) ? IMG_READERROR : IMG_BADFORMAT; return img_BAD; } if (result == img_LABEL && pimg->survey_len) { if (strncmp(pimg->label, pimg->survey, pimg->survey_len + 1) != 0) goto ascii_again; pimg->label += pimg->survey_len + 1; } return result; } else if (pimg->version == VERSION_SURVEX_POS) { /* Survex .pos file */ int ch; size_t off; pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ againpos: while (fscanf(pimg->fh, "(%lf,%lf,%lf )", &p->x, &p->y, &p->z) != 3) { if (ferror(pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } if (feof(pimg->fh)) return img_STOP; if (pimg->pending) { img_errno = IMG_BADFORMAT; return img_BAD; } pimg->pending = 1; /* ignore rest of line */ do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); } pimg->label_buf[0] = '\0'; do { ch = GETC(pimg->fh); } while (ch == ' ' || ch == '\t'); if (ch == '\n' || ch == EOF) { /* If there's no label, set img_SFLAG_ANON. */ pimg->flags |= img_SFLAG_ANON; return img_LABEL; } pimg->label_buf[0] = ch; off = 1; while (!feof(pimg->fh)) { if (!fgets(pimg->label_buf + off, pimg->buf_len - off, pimg->fh)) { img_errno = IMG_READERROR; return img_BAD; } off += strlen(pimg->label_buf + off); if (off && pimg->label_buf[off - 1] == '\n') { pimg->label_buf[off - 1] = '\0'; break; } if (!check_label_space(pimg, pimg->buf_len * 2)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } pimg->label = pimg->label_buf; if (pimg->label[0] == '\\') pimg->label++; if (pimg->survey_len) { size_t l = pimg->survey_len + 1; if (strncmp(pimg->survey, pimg->label, l) != 0) goto againpos; pimg->label += l; } return img_LABEL; } else if (pimg->version == VERSION_COMPASS_PLT) { /* Compass .plt file */ if (pimg->pending > 0) { /* -1 signals we've entered the first survey we want to * read, and need to fudge lots if the first action is 'D'... */ /* pending MOVE or LINE */ int r = pimg->pending - 4; pimg->pending = 0; pimg->flags = 0; pimg->label[pimg->label_len] = '\0'; return r; } while (1) { char *line; char *q; size_t len = 0; int ch = GETC(pimg->fh); switch (ch) { case '\x1a': case EOF: /* Don't insist on ^Z at end of file */ return img_STOP; case 'X': case 'F': case 'S': /* bounding boX (marks end of survey), Feature survey, or * new Section - skip to next survey */ if (pimg->survey) return img_STOP; skip_to_N: while (1) { do { ch = GETC(pimg->fh); } while (ch != '\n' && ch != '\r' && ch != EOF); while (ch == '\n' || ch == '\r') ch = GETC(pimg->fh); if (ch == 'N') break; if (ch == '\x1a' || ch == EOF) return img_STOP; } /* FALLTHRU */ case 'N': line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } while (line[len] > 32) ++len; if (pimg->label_len == 0) pimg->pending = -1; if (!check_label_space(pimg, len + 1)) { osfree(line); img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label_len = len; pimg->label = pimg->label_buf; memcpy(pimg->label, line, len); pimg->label[len] = '\0'; osfree(line); break; case 'M': case 'D': { /* Move or Draw */ long fpos = -1; if (pimg->survey && pimg->label_len == 0) { /* We're only holding onto this line in case the first line * of the 'N' is a 'D', so skip it for now... */ goto skip_to_N; } if (ch == 'D' && pimg->pending == -1) { if (pimg->survey) { fpos = ftell(pimg->fh) - 1; fseek(pimg->fh, pimg->start, SEEK_SET); ch = GETC(pimg->fh); pimg->pending = 0; } else { /* If a file actually has a 'D' before any 'M', then * pretend the 'D' is an 'M' - one of the examples * in the docs was like this! */ ch = 'M'; } } line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } /* Compass stores coordinates as North, East, Up = (y,x,z)! */ if (sscanf(line, "%lf%lf%lf", &p->y, &p->x, &p->z) != 3) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } p->x *= METRES_PER_FOOT; p->y *= METRES_PER_FOOT; p->z *= METRES_PER_FOOT; q = strchr(line, 'S'); if (!q) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } ++q; len = 0; while (q[len] > ' ') ++len; q[len] = '\0'; len += 2; /* ' ' and '\0' */ if (!check_label_space(pimg, pimg->label_len + len)) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } pimg->label = pimg->label_buf; if (pimg->label_len) { pimg->label[pimg->label_len] = ' '; memcpy(pimg->label + pimg->label_len + 1, q, len - 1); } else { memcpy(pimg->label, q, len - 1); } q += len - 1; /* Now read LRUD. Technically, this is optional but virtually * all PLT files have it (with dummy negative values if no LRUD * was measured) and some versions of Compass can't read PLT * files without it! */ while (*q && *q <= ' ') q++; if (*q == 'P') { if (sscanf(q + 1, "%lf%lf%lf%lf", &pimg->l, &pimg->r, &pimg->u, &pimg->d) != 4) { osfree(line); if (ferror(pimg->fh)) { img_errno = IMG_READERROR; } else { img_errno = IMG_BADFORMAT; } return img_BAD; } pimg->l *= METRES_PER_FOOT; pimg->r *= METRES_PER_FOOT; pimg->u *= METRES_PER_FOOT; pimg->d *= METRES_PER_FOOT; } else { pimg->l = pimg->r = pimg->u = pimg->d = -1; } osfree(line); pimg->flags = img_SFLAG_UNDERGROUND; /* default flags */ if (fpos != -1) { fseek(pimg->fh, fpos, SEEK_SET); } else { pimg->pending = (ch == 'M' ? img_MOVE : img_LINE) + 4; } return img_LABEL; } default: img_errno = IMG_BADFORMAT; return img_BAD; } } } else { /* CMAP .xyz file */ char *line = NULL; char *q; size_t len; if (pimg->pending) { /* pending MOVE or LINE or LABEL or STOP */ int r = pimg->pending - 4; /* Set label to empty - don't use "" as we adjust label relative * to label_buf when label_buf is reallocated. */ pimg->label = pimg->label_buf + strlen(pimg->label_buf); pimg->flags = 0; if (r == img_LABEL) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); subtract_xyz_shot_deltas(p, pimg->label_buf + 16); pimg->pending = img_STOP + 4; return img_MOVE; } pimg->pending = 0; if (r == img_STOP) { /* nasty magic */ read_xyz_shot_coords(p, pimg->label_buf + 16); return img_LINE; } return r; } pimg->label = pimg->label_buf; do { osfree(line); if (feof(pimg->fh)) return img_STOP; line = getline_alloc(pimg->fh); if (!line) { img_errno = IMG_OUTOFMEMORY; return img_BAD; } } while (line[0] == ' ' || line[0] == '\0'); if (line[0] == '\x1a') return img_STOP; len = strlen(line); if (pimg->version == VERSION_CMAP_STATION) { /* station variant */ if (len < 37) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(pimg->label, line, 6); q = (char *)memchr(pimg->label, ' ', 6); if (!q) q = pimg->label + 6; *q = '\0'; read_xyz_station_coords(p, line); /* FIXME: look at prev for lines (line + 32, 5) */ /* FIXME: duplicate stations... */ return img_LABEL; } else { /* Shot variant (VERSION_CMAP_SHOT) */ char old[8], new_[8]; if (len < 61) { osfree(line); img_errno = IMG_BADFORMAT; return img_BAD; } memcpy(old, line, 7); q = (char *)memchr(old, ' ', 7); if (!q) q = old + 7; *q = '\0'; memcpy(new_, line + 7, 7); q = (char *)memchr(new_, ' ', 7); if (!q) q = new_ + 7; *q = '\0'; pimg->flags = img_SFLAG_UNDERGROUND; if (strcmp(old, new_) == 0) { pimg->pending = img_MOVE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } if (strcmp(old, pimg->label) == 0) { pimg->pending = img_LINE + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); osfree(line); return img_LABEL; } pimg->pending = img_LABEL + 4; read_xyz_shot_coords(p, line); strcpy(pimg->label, new_); memcpy(pimg->label + 16, line, 70); osfree(line); return img_LABEL; } } } static void write_coord(FILE *fh, double x, double y, double z) { SVX_ASSERT(fh); /* Output in cm */ static INT32_T X_, Y_, Z_; INT32_T X = my_lround(x * 100.0); INT32_T Y = my_lround(y * 100.0); INT32_T Z = my_lround(z * 100.0); X_ -= X; Y_ -= Y; Z_ -= Z; put32(X, fh); put32(Y, fh); put32(Z, fh); X_ = X; Y_ = Y; Z_ = Z; } static int write_v3label(img *pimg, int opt, const char *s) { size_t len, n, dot; /* find length of common prefix */ dot = 0; for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { if (s[len] == '.') dot = len + 1; } SVX_ASSERT(len <= pimg->label_len); n = pimg->label_len - len; if (len == 0) { if (pimg->label_len) PUTC(0, pimg->fh); } else if (n <= 16) { if (n) PUTC(n + 15, pimg->fh); } else if (dot == 0) { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } else { const char *p = pimg->label_buf + dot; n = 1; for (len = pimg->label_len - dot - 17; len; len--) { if (*p++ == '.') n++; } if (n <= 14) { PUTC(n, pimg->fh); len = dot; } else { if (pimg->label_len) PUTC(0, pimg->fh); len = 0; } } n = strlen(s + len); PUTC(opt, pimg->fh); if (n < 0xfe) { PUTC(n, pimg->fh); } else if (n < 0xffff + 0xfe) { PUTC(0xfe, pimg->fh); put16((short)(n - 0xfe), pimg->fh); } else { PUTC(0xff, pimg->fh); put32(n, pimg->fh); } fwrite(s + len, n, 1, pimg->fh); n += len; pimg->label_len = n; if (!check_label_space(pimg, n + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, n - len + 1); return !ferror(pimg->fh); } static int write_v8label(img *pimg, int opt, int common_flag, size_t common_val, const char *s) { size_t len, del, add; /* find length of common prefix */ for (len = 0; s[len] == pimg->label_buf[len] && s[len] != '\0'; len++) { } SVX_ASSERT(len <= pimg->label_len); del = pimg->label_len - len; add = strlen(s + len); if (add == common_val && del == common_val) { PUTC(opt | common_flag, pimg->fh); } else { PUTC(opt, pimg->fh); if (del <= 15 && add <= 15 && (del || add)) { PUTC((del << 4) | add, pimg->fh); } else { PUTC(0x00, pimg->fh); if (del < 0xff) { PUTC(del, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(del, pimg->fh); } if (add < 0xff) { PUTC(add, pimg->fh); } else { PUTC(0xff, pimg->fh); put32(add, pimg->fh); } } } if (add) fwrite(s + len, add, 1, pimg->fh); pimg->label_len = len + add; if (add > del && !check_label_space(pimg, pimg->label_len + 1)) return 0; /* FIXME: distinguish out of memory... */ memcpy(pimg->label_buf + len, s + len, add + 1); return !ferror(pimg->fh); } static void img_write_item_date_new(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (unset) { PUTC(0x10, pimg->fh); } else { PUTC(0x11, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x12, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x13, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_date(img *pimg) { int same, unset; /* Only write dates when they've changed. */ #if IMG_API_VERSION == 0 if (pimg->date1 == pimg->olddate1 && pimg->date2 == pimg->olddate2) return; same = (pimg->date1 == pimg->date2); unset = (pimg->date1 == 0); #else /* IMG_API_VERSION == 1 */ if (pimg->days1 == pimg->olddays1 && pimg->days2 == pimg->olddays2) return; same = (pimg->days1 == pimg->days2); unset = (pimg->days1 == -1); #endif if (same) { if (img_output_version < 7) { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); #endif } else { if (unset) { PUTC(0x24, pimg->fh); } else { PUTC(0x20, pimg->fh); #if IMG_API_VERSION == 0 put16(pimg->date1 / 86400 + 25567, pimg->fh); #else /* IMG_API_VERSION == 1 */ put16(pimg->days1, pimg->fh); #endif } } } else { if (img_output_version < 7) { PUTC(0x21, pimg->fh); #if IMG_API_VERSION == 0 put32(pimg->date1, pimg->fh); put32(pimg->date2, pimg->fh); #else /* IMG_API_VERSION == 1 */ put32((pimg->days1 - 25567) * 86400, pimg->fh); put32((pimg->days2 - 25567) * 86400, pimg->fh); #endif } else { #if IMG_API_VERSION == 0 int diff = (pimg->date2 - pimg->date1) / 86400; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->date1 / 86400 + 25567, pimg->fh); put16(pimg->date2 / 86400 + 25567, pimg->fh); } #else /* IMG_API_VERSION == 1 */ int diff = pimg->days2 - pimg->days1; if (diff > 0 && diff <= 256) { PUTC(0x21, pimg->fh); put16(pimg->days1, pimg->fh); PUTC(diff - 1, pimg->fh); } else { PUTC(0x23, pimg->fh); put16(pimg->days1, pimg->fh); put16(pimg->days2, pimg->fh); } #endif } } #if IMG_API_VERSION == 0 pimg->olddate1 = pimg->date1; pimg->olddate2 = pimg->date2; #else /* IMG_API_VERSION == 1 */ pimg->olddays1 = pimg->days1; pimg->olddays2 = pimg->days2; #endif } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z); static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z); void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z) { if (!pimg) return; if (pimg->version >= 8) { img_write_item_new(pimg, code, flags, s, x, y, z); } else if (pimg->version >= 3) { img_write_item_v3to7(pimg, code, flags, s, x, y, z); } else { img_write_item_ancient(pimg, code, flags, s, x, y, z); } } static void img_write_item_new(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v8label(pimg, 0x80 | flags, 0, -1, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; img_write_item_date_new(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v8label(pimg, 0x30 | flags, 0, -1, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: img_write_item_date_new(pimg); if (pimg->style != pimg->oldstyle) { switch (pimg->style) { case img_STYLE_NORMAL: case img_STYLE_DIVING: case img_STYLE_CARTESIAN: case img_STYLE_CYLPOLAR: case img_STYLE_NOSURVEY: PUTC(pimg->style, pimg->fh); break; } pimg->oldstyle = pimg->style; } write_v8label(pimg, 0x40 | flags, 0x20, 0x00, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_v3to7(img *pimg, int code, int flags, const char *s, double x, double y, double z) { switch (code) { case img_LABEL: write_v3label(pimg, 0x40 | flags, s); break; case img_XSECT: { INT32_T l, r, u, d, max_dim; /* Need at least version 5 for img_XSECT. */ if (pimg->version < 5) return; img_write_item_date(pimg); l = (INT32_T)my_lround(pimg->l * 100.0); r = (INT32_T)my_lround(pimg->r * 100.0); u = (INT32_T)my_lround(pimg->u * 100.0); d = (INT32_T)my_lround(pimg->d * 100.0); if (l < 0) l = -1; if (r < 0) r = -1; if (u < 0) u = -1; if (d < 0) d = -1; max_dim = max(max(l, r), max(u, d)); flags = (flags & img_XFLAG_END) ? 1 : 0; if (max_dim >= 32768) flags |= 2; write_v3label(pimg, 0x30 | flags, s); if (flags & 2) { /* Big passage! Need to use 4 bytes. */ put32(l, pimg->fh); put32(r, pimg->fh); put32(u, pimg->fh); put32(d, pimg->fh); } else { put16(l, pimg->fh); put16(r, pimg->fh); put16(u, pimg->fh); put16(d, pimg->fh); } return; } case img_MOVE: PUTC(15, pimg->fh); break; case img_LINE: if (pimg->version >= 4) { img_write_item_date(pimg); } write_v3label(pimg, 0x80 | flags, s ? s : ""); break; default: /* ignore for now */ return; } write_coord(pimg->fh, x, y, z); } static void img_write_item_ancient(img *pimg, int code, int flags, const char *s, double x, double y, double z) { size_t len; INT32_T opt = 0; SVX_ASSERT(pimg->version > 0); switch (code) { case img_LABEL: if (pimg->version == 1) { /* put a move before each label */ img_write_item_ancient(pimg, img_MOVE, 0, NULL, x, y, z); put32(2, pimg->fh); fputsnl(s, pimg->fh); return; } len = strlen(s); if (len > 255 || strchr(s, '\n')) { /* long label - not in early incarnations of v2 format, but few * 3d files will need these, so better not to force incompatibility * with a new version I think... */ PUTC(7, pimg->fh); PUTC(flags, pimg->fh); put32(len, pimg->fh); fputs(s, pimg->fh); } else { PUTC(0x40 | (flags & 0x3f), pimg->fh); fputsnl(s, pimg->fh); } opt = 0; break; case img_MOVE: opt = 4; break; case img_LINE: if (pimg->version > 1) { opt = 0x80 | (flags & 0x3f); break; } opt = 5; break; default: /* ignore for now */ return; } if (pimg->version == 1) { put32(opt, pimg->fh); } else { if (opt) PUTC(opt, pimg->fh); } write_coord(pimg->fh, x, y, z); } /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V) { PUTC((pimg->version >= 8 ? 0x1f : 0x22), pimg->fh); put32(n_legs, pimg->fh); put32((INT32_T)my_lround(length * 100.0), pimg->fh); put32((INT32_T)my_lround(E * 100.0), pimg->fh); put32((INT32_T)my_lround(H * 100.0), pimg->fh); put32((INT32_T)my_lround(V * 100.0), pimg->fh); } int img_close(img *pimg) { int result = 1; if (pimg) { if (pimg->fh) { if (pimg->fRead) { osfree(pimg->survey); osfree(pimg->title); osfree(pimg->cs); osfree(pimg->datestamp); } else { /* write end of data marker */ switch (pimg->version) { case 1: put32((INT32_T)-1, pimg->fh); break; default: if (pimg->version <= 7 ? (pimg->label_len != 0) : (pimg->style != img_STYLE_NORMAL)) { PUTC(0, pimg->fh); } /* FALL THROUGH */ case 2: PUTC(0, pimg->fh); break; } } if (ferror(pimg->fh)) result = 0; if (fclose(pimg->fh)) result = 0; if (!result) img_errno = pimg->fRead ? IMG_READERROR : IMG_WRITEERROR; } osfree(pimg->label_buf); osfree(pimg->filename_opened); osfree(pimg); } return result; } therion-5.4.1/extern/img.h000066400000000000000000000230441307545355600154430ustar00rootroot00000000000000/* img.h * Header file for routines to read and write Survex ".3d" image files * Copyright (C) Olly Betts 1993,1994,1997,2001,2002,2003,2004,2005,2006,2010,2011,2012,2013,2014,2016 * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMG_H # define IMG_H /* Define IMG_API_VERSION if you want more recent versions of the img API. * * 0 (default) The old API. date1 and date2 give the survey date as time_t. * Set to 0 for "unknown". * 1 days1 and days2 give survey dates as days since 1st Jan 1900. * Set to -1 for "unknown". */ #define IMG_API_VERSION 1 #ifndef IMG_API_VERSION # define IMG_API_VERSION 0 #elif IMG_API_VERSION > 1 # error IMG_API_VERSION > 1 too new #endif #ifdef __cplusplus extern "C" { #endif #include #include /* for time_t */ # define img_BAD -2 # define img_STOP -1 # define img_MOVE 0 # define img_LINE 1 /* NB: img_CROSS is never output and ignored on input. * Put crosses where labels are. */ /* # define img_CROSS 2 */ # define img_LABEL 3 # define img_XSECT 4 # define img_XSECT_END 5 /* Loop closure information for the *preceeding* traverse (img_MOVE + one or * more img_LINEs). */ # define img_ERROR_INFO 6 /* Leg flags */ # define img_FLAG_SURFACE 0x01 # define img_FLAG_DUPLICATE 0x02 # define img_FLAG_SPLAY 0x04 /* Station flags */ # define img_SFLAG_SURFACE 0x01 # define img_SFLAG_UNDERGROUND 0x02 # define img_SFLAG_ENTRANCE 0x04 # define img_SFLAG_EXPORTED 0x08 # define img_SFLAG_FIXED 0x10 # define img_SFLAG_ANON 0x20 # define img_SFLAG_WALL 0x40 /* File-wide flags */ # define img_FFLAG_EXTENDED 0x80 /* When writing img_XSECT, img_XFLAG_END in pimg->flags means this is the last * img_XSECT in this tube: */ # define img_XFLAG_END 0x01 # define img_STYLE_UNKNOWN -1 # define img_STYLE_NORMAL 0 # define img_STYLE_DIVING 1 # define img_STYLE_CARTESIAN 2 # define img_STYLE_CYLPOLAR 3 # define img_STYLE_NOSURVEY 4 /* 3D coordinates (in metres) */ typedef struct { double x, y, z; } img_point; typedef struct { /* Members you can access when reading (don't touch when writing): */ char *label; int flags; char *title; /* If the coordinate system was specified, this contains a PROJ4 string * describing it. If not, this member will be NULL. */ char *cs; /* Older .3d format versions stored a human readable datestamp string. * Format versions >= 8 versions store a string consisting of "@" followed * by the number of seconds since midnight UTC on 1/1/1970. Some foreign * formats contain a human readable string, others no date information * (which results in "?" being returned). */ char *datestamp; /* The datestamp as a time_t (or (time_t)-1 if not available). * * For 3d format versions >= 8, this is a reliable value and in UTC. Older * 3d format versions store a human readable time, which img will attempt * to decode, but it may fail, particularly with handling timezones. Even * if it does work, beware that times in local time where DST applies are * inherently ambiguous around when the clocks go back. * * CMAP XYZ files contain a timestamp. It's probably in localtime (but * without any timezone information) and the example files are all pre-2000 * and have two digit years. We do our best to turn these into a useful * time_t value. */ time_t datestamp_numeric; char separator; /* character used to separate survey levels ('.' usually) */ /* Members that can be set when writing: */ #if IMG_API_VERSION == 0 time_t date1, date2; #else /* IMG_API_VERSION == 1 */ int days1, days2; #endif double l, r, u, d; /* Error information - valid when img_ERROR_INFO is returned: */ int n_legs; double length; double E, H, V; /* The filename actually opened (e.g. may have ".3d" added): */ char * filename_opened; /* Non-zero if reading an extended elevation: */ int is_extended_elevation; /* Members that can be set when writing: */ /* The style of the data - one of the img_STYLE_* constants above */ int style; /* All other members are for internal use only: */ FILE *fh; /* file handle of image file */ char *label_buf; size_t buf_len; size_t label_len; int fRead; /* 1 for reading, 0 for writing */ long start; /* version of file format: * -4 => CMAP .xyz file, shot format * -3 => CMAP .xyz file, station format * -2 => Compass .plt file * -1 => .pos file * 0 => 0.01 ascii * 1 => 0.01 binary, * 2 => byte actions and flags * 3 => prefixes for legs; compressed prefixes * 4 => survey date * 5 => LRUD info * 6 => error info * 7 => more compact dates with wider range * 8 => lots of changes */ int version; char *survey; size_t survey_len; int pending; /* for old style text format files and survey filtering */ img_point mv; #if IMG_API_VERSION == 0 time_t olddate1, olddate2; #else /* IMG_API_VERSION == 1 */ int olddays1, olddays2; #endif int oldstyle; } img; /* Which version of the file format to output (defaults to newest) */ extern unsigned int img_output_version; /* Minimum supported value for img_output_version: */ #define IMG_VERSION_MIN 1 /* Maximum supported value for img_output_version: */ #define IMG_VERSION_MAX 8 /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL */ #define img_open(F) img_open_survey((F), NULL) /* Open a .3d file for reading * fnm is the filename * Returns pointer to an img struct or NULL * survey points to a survey name to restrict reading to (or NULL for all * survey data in the file) */ img *img_open_survey(const char *fnm, const char *survey); /* Open a .3d file for output * fnm is the filename * title is the title * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. (The third parameter used to be * 'fBinary', but has been ignored for many years, so the parameter has * been repurposed for flags - for this reason, img.c deliberately ignores bit * 1 being set, but callers should be written/updated not to set it). * * Returns pointer to an img struct or NULL for error (check img_error() * for details) */ #define img_open_write(F, T, S) img_open_write_cs(F, T, NULL, S) /* Open a .3d file for output in a specified coordinate system * fnm is the filename * title is the title * cs is a PROJ4 string describing the coordinate system (or NULL) * flags contains a bitwise-or of any file-wide flags - currently only one * is available: img_FFLAG_EXTENDED. * * Returns pointer to an img struct or NULL for error (check img_error() * for details) */ img *img_open_write_cs(const char *fnm, const char *title, const char * cs, int flags); /* Read an item from a .3d file * pimg is a pointer to an img struct returned by img_open() * coordinates are returned in p * flags and label name are returned in fields in pimg * Returns img_XXXX as #define-d above */ int img_read_item(img *pimg, img_point *p); /* Write a item to a .3d file * pimg is a pointer to an img struct returned by img_open_write() * code is one of the img_XXXX #define-d above * flags is the leg, station, or xsect flags * (meaningful for img_LINE, img_LABEL, and img_XSECT respectively) * s is the label (only meaningful for img_LABEL) * x, y, z are the coordinates */ void img_write_item(img *pimg, int code, int flags, const char *s, double x, double y, double z); /* Write error information for the current traverse * n_legs is the number of legs in the traverse * length is the traverse length (in m) * E is the ratio of the observed misclosure to the theoretical one * H is the ratio of the observed horizontal misclosure to the theoretical one * V is the ratio of the observed vertical misclosure to the theoretical one */ void img_write_errors(img *pimg, int n_legs, double length, double E, double H, double V); /* rewind a .3d file opened for reading so the data can be read in * several passes * pimg is a pointer to an img struct returned by img_open() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_rewind(img *pimg); /* Close a .3d file * pimg is a pointer to an img struct returned by img_open() or * img_open_write() * Returns: non-zero for success, zero for error (check img_error() for * details) */ int img_close(img *pimg); /* Codes returned by img_error */ typedef enum { IMG_NONE = 0, IMG_FILENOTFOUND, IMG_OUTOFMEMORY, IMG_CANTOPENOUT, IMG_BADFORMAT, IMG_DIRECTORY, IMG_READERROR, IMG_WRITEERROR, IMG_TOONEW } img_errcode; /* Read the error code * If img_open(), img_open_survey() or img_open_write() returns NULL, or * img_rewind() or img_close() returns 0, or img_read_item() returns img_BAD * then you can call this function to discover why. */ img_errcode img_error(void); #ifdef __cplusplus } #endif #endif therion-5.4.1/extern/poly2tri/000077500000000000000000000000001307545355600162775ustar00rootroot00000000000000therion-5.4.1/extern/poly2tri/common/000077500000000000000000000000001307545355600175675ustar00rootroot00000000000000therion-5.4.1/extern/poly2tri/common/shapes.cc000066400000000000000000000217241307545355600213670ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "shapes.h" #include namespace p2t { Triangle::Triangle(Point& a, Point& b, Point& c) { points_[0] = &a; points_[1] = &b; points_[2] = &c; neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; constrained_edge[0] = constrained_edge[1] = constrained_edge[2] = false; delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; interior_ = false; } // Update neighbor pointers void Triangle::MarkNeighbor(Point* p1, Point* p2, Triangle* t) { if ((p1 == points_[2] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[2])) neighbors_[0] = t; else if ((p1 == points_[0] && p2 == points_[2]) || (p1 == points_[2] && p2 == points_[0])) neighbors_[1] = t; else if ((p1 == points_[0] && p2 == points_[1]) || (p1 == points_[1] && p2 == points_[0])) neighbors_[2] = t; else assert(0); } // Exhaustive search to update neighbor pointers void Triangle::MarkNeighbor(Triangle& t) { if (t.Contains(points_[1], points_[2])) { neighbors_[0] = &t; t.MarkNeighbor(points_[1], points_[2], this); } else if (t.Contains(points_[0], points_[2])) { neighbors_[1] = &t; t.MarkNeighbor(points_[0], points_[2], this); } else if (t.Contains(points_[0], points_[1])) { neighbors_[2] = &t; t.MarkNeighbor(points_[0], points_[1], this); } } /** * Clears all references to all other triangles and points */ void Triangle::Clear() { Triangle *t; for( int i=0; i<3; i++ ) { t = neighbors_[i]; if( t != NULL ) { t->ClearNeighbor( this ); } } ClearNeighbors(); points_[0]=points_[1]=points_[2] = NULL; } void Triangle::ClearNeighbor(const Triangle *triangle ) { if( neighbors_[0] == triangle ) { neighbors_[0] = NULL; } else if( neighbors_[1] == triangle ) { neighbors_[1] = NULL; } else { neighbors_[2] = NULL; } } void Triangle::ClearNeighbors() { neighbors_[0] = NULL; neighbors_[1] = NULL; neighbors_[2] = NULL; } void Triangle::ClearDelunayEdges() { delaunay_edge[0] = delaunay_edge[1] = delaunay_edge[2] = false; } Point* Triangle::OppositePoint(Triangle& t, const Point& p) { Point *cw = t.PointCW(p); return PointCW(*cw); } // Legalized triangle by rotating clockwise around point(0) void Triangle::Legalize(Point& point) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &point; } // Legalize triagnle by rotating clockwise around oPoint void Triangle::Legalize(Point& opoint, Point& npoint) { if (&opoint == points_[0]) { points_[1] = points_[0]; points_[0] = points_[2]; points_[2] = &npoint; } else if (&opoint == points_[1]) { points_[2] = points_[1]; points_[1] = points_[0]; points_[0] = &npoint; } else if (&opoint == points_[2]) { points_[0] = points_[2]; points_[2] = points_[1]; points_[1] = &npoint; } else { assert(0); } } int Triangle::Index(const Point* p) { if (p == points_[0]) { return 0; } else if (p == points_[1]) { return 1; } else if (p == points_[2]) { return 2; } assert(0); return -1; } int Triangle::EdgeIndex(const Point* p1, const Point* p2) { if (points_[0] == p1) { if (points_[1] == p2) { return 2; } else if (points_[2] == p2) { return 1; } } else if (points_[1] == p1) { if (points_[2] == p2) { return 0; } else if (points_[0] == p2) { return 2; } } else if (points_[2] == p1) { if (points_[0] == p2) { return 1; } else if (points_[1] == p2) { return 0; } } return -1; } void Triangle::MarkConstrainedEdge(int index) { constrained_edge[index] = true; } void Triangle::MarkConstrainedEdge(Edge& edge) { MarkConstrainedEdge(edge.p, edge.q); } // Mark edge as constrained void Triangle::MarkConstrainedEdge(Point* p, Point* q) { if ((q == points_[0] && p == points_[1]) || (q == points_[1] && p == points_[0])) { constrained_edge[2] = true; } else if ((q == points_[0] && p == points_[2]) || (q == points_[2] && p == points_[0])) { constrained_edge[1] = true; } else if ((q == points_[1] && p == points_[2]) || (q == points_[2] && p == points_[1])) { constrained_edge[0] = true; } } // The point counter-clockwise to given point Point* Triangle::PointCW(const Point& point) { if (&point == points_[0]) { return points_[2]; } else if (&point == points_[1]) { return points_[0]; } else if (&point == points_[2]) { return points_[1]; } assert(0); return NULL; } // The point counter-clockwise to given point Point* Triangle::PointCCW(const Point& point) { if (&point == points_[0]) { return points_[1]; } else if (&point == points_[1]) { return points_[2]; } else if (&point == points_[2]) { return points_[0]; } assert(0); return NULL; } // The neighbor clockwise to given point Triangle* Triangle::NeighborCW(const Point& point) { if (&point == points_[0]) { return neighbors_[1]; } else if (&point == points_[1]) { return neighbors_[2]; } return neighbors_[0]; } // The neighbor counter-clockwise to given point Triangle* Triangle::NeighborCCW(const Point& point) { if (&point == points_[0]) { return neighbors_[2]; } else if (&point == points_[1]) { return neighbors_[0]; } return neighbors_[1]; } bool Triangle::GetConstrainedEdgeCCW(const Point& p) { if (&p == points_[0]) { return constrained_edge[2]; } else if (&p == points_[1]) { return constrained_edge[0]; } return constrained_edge[1]; } bool Triangle::GetConstrainedEdgeCW(const Point& p) { if (&p == points_[0]) { return constrained_edge[1]; } else if (&p == points_[1]) { return constrained_edge[2]; } return constrained_edge[0]; } void Triangle::SetConstrainedEdgeCCW(const Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[2] = ce; } else if (&p == points_[1]) { constrained_edge[0] = ce; } else { constrained_edge[1] = ce; } } void Triangle::SetConstrainedEdgeCW(const Point& p, bool ce) { if (&p == points_[0]) { constrained_edge[1] = ce; } else if (&p == points_[1]) { constrained_edge[2] = ce; } else { constrained_edge[0] = ce; } } bool Triangle::GetDelunayEdgeCCW(const Point& p) { if (&p == points_[0]) { return delaunay_edge[2]; } else if (&p == points_[1]) { return delaunay_edge[0]; } return delaunay_edge[1]; } bool Triangle::GetDelunayEdgeCW(const Point& p) { if (&p == points_[0]) { return delaunay_edge[1]; } else if (&p == points_[1]) { return delaunay_edge[2]; } return delaunay_edge[0]; } void Triangle::SetDelunayEdgeCCW(const Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[2] = e; } else if (&p == points_[1]) { delaunay_edge[0] = e; } else { delaunay_edge[1] = e; } } void Triangle::SetDelunayEdgeCW(const Point& p, bool e) { if (&p == points_[0]) { delaunay_edge[1] = e; } else if (&p == points_[1]) { delaunay_edge[2] = e; } else { delaunay_edge[0] = e; } } // The neighbor across to given point Triangle& Triangle::NeighborAcross(const Point& opoint) { if (&opoint == points_[0]) { return *neighbors_[0]; } else if (&opoint == points_[1]) { return *neighbors_[1]; } return *neighbors_[2]; } void Triangle::DebugPrint() { using namespace std; cout << points_[0]->x << "," << points_[0]->y << " "; cout << points_[1]->x << "," << points_[1]->y << " "; cout << points_[2]->x << "," << points_[2]->y << endl; } }therion-5.4.1/extern/poly2tri/common/shapes.h000066400000000000000000000165761307545355600212420ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // Include guard #ifndef SHAPES_H #define SHAPES_H #include #include #include #include namespace p2t { struct Edge; struct Point { double x, y; /// Default constructor does nothing (for performance). Point() { x = 0.0; y = 0.0; } /// The edges this point constitutes an upper ending point std::vector edge_list; /// Construct using coordinates. Point(double x, double y) : x(x), y(y) {} /// Set this point to all zeros. void set_zero() { x = 0.0; y = 0.0; } /// Set this point to some specified coordinates. void set(double x_, double y_) { x = x_; y = y_; } /// Negate this point. Point operator -() const { Point v; v.set(-x, -y); return v; } /// Add a point to this point. void operator +=(const Point& v) { x += v.x; y += v.y; } /// Subtract a point from this point. void operator -=(const Point& v) { x -= v.x; y -= v.y; } /// Multiply this point by a scalar. void operator *=(double a) { x *= a; y *= a; } /// Get the length of this point (the norm). double Length() const { return sqrt(x * x + y * y); } /// Convert this point into a unit point. Returns the Length. double Normalize() { const double len = Length(); x /= len; y /= len; return len; } }; // Represents a simple polygon's edge struct Edge { Point* p, *q; /// Constructor Edge(Point& p1, Point& p2) : p(&p1), q(&p2) { if (p1.y > p2.y) { q = &p1; p = &p2; } else if (p1.y == p2.y) { if (p1.x > p2.x) { q = &p1; p = &p2; } else if (p1.x == p2.x) { // Repeat points assert(false); } } q->edge_list.push_back(this); } }; // Triangle-based data structures are know to have better performance than quad-edge structures // See: J. Shewchuk, "Triangle: Engineering a 2D Quality Mesh Generator and Delaunay Triangulator" // "Triangulations in CGAL" class Triangle { public: /// Constructor Triangle(Point& a, Point& b, Point& c); /// Flags to determine if an edge is a Constrained edge bool constrained_edge[3]; /// Flags to determine if an edge is a Delauney edge bool delaunay_edge[3]; Point* GetPoint(int index); Point* PointCW(const Point& point); Point* PointCCW(const Point& point); Point* OppositePoint(Triangle& t, const Point& p); Triangle* GetNeighbor(int index); void MarkNeighbor(Point* p1, Point* p2, Triangle* t); void MarkNeighbor(Triangle& t); void MarkConstrainedEdge(int index); void MarkConstrainedEdge(Edge& edge); void MarkConstrainedEdge(Point* p, Point* q); int Index(const Point* p); int EdgeIndex(const Point* p1, const Point* p2); Triangle* NeighborCW(const Point& point); Triangle* NeighborCCW(const Point& point); bool GetConstrainedEdgeCCW(const Point& p); bool GetConstrainedEdgeCW(const Point& p); void SetConstrainedEdgeCCW(const Point& p, bool ce); void SetConstrainedEdgeCW(const Point& p, bool ce); bool GetDelunayEdgeCCW(const Point& p); bool GetDelunayEdgeCW(const Point& p); void SetDelunayEdgeCCW(const Point& p, bool e); void SetDelunayEdgeCW(const Point& p, bool e); bool Contains(const Point* p); bool Contains(const Edge& e); bool Contains(const Point* p, const Point* q); void Legalize(Point& point); void Legalize(Point& opoint, Point& npoint); /** * Clears all references to all other triangles and points */ void Clear(); void ClearNeighbor(const Triangle *triangle); void ClearNeighbors(); void ClearDelunayEdges(); inline bool IsInterior(); inline void IsInterior(bool b); Triangle& NeighborAcross(const Point& opoint); void DebugPrint(); private: /// Triangle points Point* points_[3]; /// Neighbor list Triangle* neighbors_[3]; /// Has this triangle been marked as an interior triangle? bool interior_; }; inline bool cmp(const Point* a, const Point* b) { if (a->y < b->y) { return true; } else if (a->y == b->y) { // Make sure q is point with greater x value if (a->x < b->x) { return true; } } return false; } /// Add two points_ component-wise. inline Point operator +(const Point& a, const Point& b) { return Point(a.x + b.x, a.y + b.y); } /// Subtract two points_ component-wise. inline Point operator -(const Point& a, const Point& b) { return Point(a.x - b.x, a.y - b.y); } /// Multiply point by scalar inline Point operator *(double s, const Point& a) { return Point(s * a.x, s * a.y); } inline bool operator ==(const Point& a, const Point& b) { return a.x == b.x && a.y == b.y; } inline bool operator !=(const Point& a, const Point& b) { return !(a.x == b.x) && !(a.y == b.y); } /// Peform the dot product on two vectors. inline double Dot(const Point& a, const Point& b) { return a.x * b.x + a.y * b.y; } /// Perform the cross product on two vectors. In 2D this produces a scalar. inline double Cross(const Point& a, const Point& b) { return a.x * b.y - a.y * b.x; } /// Perform the cross product on a point and a scalar. In 2D this produces /// a point. inline Point Cross(const Point& a, double s) { return Point(s * a.y, -s * a.x); } /// Perform the cross product on a scalar and a point. In 2D this produces /// a point. inline Point Cross(double s, const Point& a) { return Point(-s * a.y, s * a.x); } inline Point* Triangle::GetPoint(int index) { return points_[index]; } inline Triangle* Triangle::GetNeighbor(int index) { return neighbors_[index]; } inline bool Triangle::Contains(const Point* p) { return p == points_[0] || p == points_[1] || p == points_[2]; } inline bool Triangle::Contains(const Edge& e) { return Contains(e.p) && Contains(e.q); } inline bool Triangle::Contains(const Point* p, const Point* q) { return Contains(p) && Contains(q); } inline bool Triangle::IsInterior() { return interior_; } inline void Triangle::IsInterior(bool b) { interior_ = b; } } #endiftherion-5.4.1/extern/poly2tri/common/utils.h000066400000000000000000000070021307545355600210770ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTILS_H #define UTILS_H // Otherwise #defines like M_PI are undeclared under Visual Studio #define _USE_MATH_DEFINES #include #include // C99 removes M_PI from math.h #ifndef M_PI #define M_PI 3.14159265358979323846264338327 #endif namespace p2t { const double PI_3div4 = 3 * M_PI / 4; const double PI_div2 = 1.57079632679489661923; const double EPSILON = 1e-12; enum Orientation { CW, CCW, COLLINEAR }; /** * Forumla to calculate signed area
* Positive if CCW
* Negative if CW
* 0 if collinear
*
 * A[P1,P2,P3]  =  (x1*y2 - y1*x2) + (x2*y3 - y2*x3) + (x3*y1 - y3*x1)
 *              =  (x1-x3)*(y2-y3) - (y1-y3)*(x2-x3)
 * 
*/ Orientation Orient2d(const Point& pa, const Point& pb, const Point& pc) { double detleft = (pa.x - pc.x) * (pb.y - pc.y); double detright = (pa.y - pc.y) * (pb.x - pc.x); double val = detleft - detright; if (val > -EPSILON && val < EPSILON) { return COLLINEAR; } else if (val > 0) { return CCW; } return CW; } /* bool InScanArea(Point& pa, Point& pb, Point& pc, Point& pd) { double pdx = pd.x; double pdy = pd.y; double adx = pa.x - pdx; double ady = pa.y - pdy; double bdx = pb.x - pdx; double bdy = pb.y - pdy; double adxbdy = adx * bdy; double bdxady = bdx * ady; double oabd = adxbdy - bdxady; if (oabd <= EPSILON) { return false; } double cdx = pc.x - pdx; double cdy = pc.y - pdy; double cdxady = cdx * ady; double adxcdy = adx * cdy; double ocad = cdxady - adxcdy; if (ocad <= EPSILON) { return false; } return true; } */ bool InScanArea(const Point& pa, const Point& pb, const Point& pc, const Point& pd) { double oadb = (pa.x - pb.x)*(pd.y - pb.y) - (pd.x - pb.x)*(pa.y - pb.y); if (oadb >= -EPSILON) { return false; } double oadc = (pa.x - pc.x)*(pd.y - pc.y) - (pd.x - pc.x)*(pa.y - pc.y); if (oadc <= EPSILON) { return false; } return true; } } #endif therion-5.4.1/extern/poly2tri/poly2tri.h000066400000000000000000000032661307545355600202430ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef POLY2TRI_H #define POLY2TRI_H #include "common/shapes.h" #include "sweep/cdt.h" #endiftherion-5.4.1/extern/poly2tri/sweep/000077500000000000000000000000001307545355600174225ustar00rootroot00000000000000therion-5.4.1/extern/poly2tri/sweep/advancing_front.cc000066400000000000000000000061361307545355600231010ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "advancing_front.h" namespace p2t { AdvancingFront::AdvancingFront(Node& head, Node& tail) { head_ = &head; tail_ = &tail; search_node_ = &head; } Node* AdvancingFront::LocateNode(double x) { Node* node = search_node_; if (x < node->value) { while ((node = node->prev) != NULL) { if (x >= node->value) { search_node_ = node; return node; } } } else { while ((node = node->next) != NULL) { if (x < node->value) { search_node_ = node->prev; return node->prev; } } } return NULL; } Node* AdvancingFront::FindSearchNode(double x) { (void)x; // suppress compiler warnings "unused parameter 'x'" // TODO: implement BST index return search_node_; } Node* AdvancingFront::LocatePoint(const Point* point) { const double px = point->x; Node* node = FindSearchNode(px); const double nx = node->point->x; if (px == nx) { if (point != node->point) { // We might have two nodes with same x value for a short time if (point == node->prev->point) { node = node->prev; } else if (point == node->next->point) { node = node->next; } else { assert(0); } } } else if (px < nx) { while ((node = node->prev) != NULL) { if (point == node->point) { break; } } } else { while ((node = node->next) != NULL) { if (point == node->point) break; } } if(node) search_node_ = node; return node; } AdvancingFront::~AdvancingFront() { } }therion-5.4.1/extern/poly2tri/sweep/advancing_front.h000066400000000000000000000055411307545355600227420ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef ADVANCED_FRONT_H #define ADVANCED_FRONT_H #include "../common/shapes.h" namespace p2t { struct Node; // Advancing front node struct Node { Point* point; Triangle* triangle; Node* next; Node* prev; double value; Node(Point& p) : point(&p), triangle(NULL), next(NULL), prev(NULL), value(p.x) { } Node(Point& p, Triangle& t) : point(&p), triangle(&t), next(NULL), prev(NULL), value(p.x) { } }; // Advancing front class AdvancingFront { public: AdvancingFront(Node& head, Node& tail); // Destructor ~AdvancingFront(); Node* head(); void set_head(Node* node); Node* tail(); void set_tail(Node* node); Node* search(); void set_search(Node* node); /// Locate insertion point along advancing front Node* LocateNode(double x); Node* LocatePoint(const Point* point); private: Node* head_, *tail_, *search_node_; Node* FindSearchNode(double x); }; inline Node* AdvancingFront::head() { return head_; } inline void AdvancingFront::set_head(Node* node) { head_ = node; } inline Node* AdvancingFront::tail() { return tail_; } inline void AdvancingFront::set_tail(Node* node) { tail_ = node; } inline Node* AdvancingFront::search() { return search_node_; } inline void AdvancingFront::set_search(Node* node) { search_node_ = node; } } #endiftherion-5.4.1/extern/poly2tri/sweep/cdt.cc000066400000000000000000000043111307545355600205020ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "cdt.h" namespace p2t { CDT::CDT(const std::vector& polyline) { sweep_context_ = new SweepContext(polyline); sweep_ = new Sweep; } void CDT::AddHole(const std::vector& polyline) { sweep_context_->AddHole(polyline); } void CDT::AddPoint(Point* point) { sweep_context_->AddPoint(point); } void CDT::Triangulate() { sweep_->Triangulate(*sweep_context_); } std::vector CDT::GetTriangles() { return sweep_context_->GetTriangles(); } std::list CDT::GetMap() { return sweep_context_->GetMap(); } CDT::~CDT() { delete sweep_context_; delete sweep_; } }therion-5.4.1/extern/poly2tri/sweep/cdt.h000066400000000000000000000050431307545355600203470ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef CDT_H #define CDT_H #include "advancing_front.h" #include "sweep_context.h" #include "sweep.h" /** * * @author Mason Green * */ namespace p2t { class CDT { public: /** * Constructor - add polyline with non repeating points * * @param polyline */ CDT(const std::vector& polyline); /** * Destructor - clean up memory */ ~CDT(); /** * Add a hole * * @param polyline */ void AddHole(const std::vector& polyline); /** * Add a steiner point * * @param point */ void AddPoint(Point* point); /** * Triangulate - do this AFTER you've added the polyline, holes, and Steiner points */ void Triangulate(); /** * Get CDT triangles */ std::vector GetTriangles(); /** * Get triangle map */ std::list GetMap(); private: /** * Internals */ SweepContext* sweep_context_; Sweep* sweep_; }; } #endiftherion-5.4.1/extern/poly2tri/sweep/sweep.cc000066400000000000000000000562211307545355600210620ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include "sweep.h" #include "sweep_context.h" #include "advancing_front.h" #include "../common/utils.h" namespace p2t { // Triangulate simple polygon with holes void Sweep::Triangulate(SweepContext& tcx) { tcx.InitTriangulation(); tcx.CreateAdvancingFront(nodes_); // Sweep points; build mesh SweepPoints(tcx); // Clean up FinalizationPolygon(tcx); } void Sweep::SweepPoints(SweepContext& tcx) { for (size_t i = 1; i < tcx.point_count(); i++) { Point& point = *tcx.GetPoint(i); Node* node = &PointEvent(tcx, point); for (unsigned int i = 0; i < point.edge_list.size(); i++) { EdgeEvent(tcx, point.edge_list[i], node); } } } void Sweep::FinalizationPolygon(SweepContext& tcx) { // Get an Internal triangle to start with Triangle* t = tcx.front()->head()->next->triangle; Point* p = tcx.front()->head()->next->point; while (!t->GetConstrainedEdgeCW(*p)) { t = t->NeighborCCW(*p); } // Collect interior triangles constrained by edges tcx.MeshClean(*t); } Node& Sweep::PointEvent(SweepContext& tcx, Point& point) { Node& node = tcx.LocateNode(point); Node& new_node = NewFrontTriangle(tcx, point, node); // Only need to check +epsilon since point never have smaller // x value than node due to how we fetch nodes from the front if (point.x <= node.point->x + EPSILON) { Fill(tcx, node); } //tcx.AddNode(new_node); FillAdvancingFront(tcx, new_node); return new_node; } void Sweep::EdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { tcx.edge_event.constrained_edge = edge; tcx.edge_event.right = (edge->p->x > edge->q->x); if (IsEdgeSideOfTriangle(*node->triangle, *edge->p, *edge->q)) { return; } // For now we will do all needed filling // TODO: integrate with flip process might give some better performance // but for now this avoid the issue with cases that needs both flips and fills FillEdgeEvent(tcx, edge, node); EdgeEvent(tcx, *edge->p, *edge->q, node->triangle, *edge->q); } void Sweep::EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point) { if (IsEdgeSideOfTriangle(*triangle, ep, eq)) { return; } Point* p1 = triangle->PointCCW(point); Orientation o1 = Orient2d(eq, *p1, ep); if (o1 == COLLINEAR) { if( triangle->Contains(&eq, p1)) { triangle->MarkConstrainedEdge(&eq, p1 ); // We are modifying the constraint maybe it would be better to // not change the given constraint and just keep a variable for the new constraint tcx.edge_event.constrained_edge->q = p1; triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p1, triangle, *p1 ); } else { std::runtime_error("EdgeEvent - collinear points not supported"); assert(0); } return; } Point* p2 = triangle->PointCW(point); Orientation o2 = Orient2d(eq, *p2, ep); if (o2 == COLLINEAR) { if( triangle->Contains(&eq, p2)) { triangle->MarkConstrainedEdge(&eq, p2 ); // We are modifying the constraint maybe it would be better to // not change the given constraint and just keep a variable for the new constraint tcx.edge_event.constrained_edge->q = p2; triangle = &triangle->NeighborAcross(point); EdgeEvent( tcx, ep, *p2, triangle, *p2 ); } else { std::runtime_error("EdgeEvent - collinear points not supported"); assert(0); } return; } if (o1 == o2) { // Need to decide if we are rotating CW or CCW to get to a triangle // that will cross edge if (o1 == CW) { triangle = triangle->NeighborCCW(point); } else{ triangle = triangle->NeighborCW(point); } EdgeEvent(tcx, ep, eq, triangle, point); } else { // This triangle crosses constraint so lets flippin start! FlipEdgeEvent(tcx, ep, eq, triangle, point); } } bool Sweep::IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq) { const int index = triangle.EdgeIndex(&ep, &eq); if (index != -1) { triangle.MarkConstrainedEdge(index); Triangle* t = triangle.GetNeighbor(index); if (t) { t->MarkConstrainedEdge(&ep, &eq); } return true; } return false; } Node& Sweep::NewFrontTriangle(SweepContext& tcx, Point& point, Node& node) { Triangle* triangle = new Triangle(point, *node.point, *node.next->point); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); Node* new_node = new Node(point); nodes_.push_back(new_node); new_node->next = node.next; new_node->prev = &node; node.next->prev = new_node; node.next = new_node; if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } return *new_node; } void Sweep::Fill(SweepContext& tcx, Node& node) { Triangle* triangle = new Triangle(*node.prev->point, *node.point, *node.next->point); // TODO: should copy the constrained_edge value from neighbor triangles // for now constrained_edge values are copied during the legalize triangle->MarkNeighbor(*node.prev->triangle); triangle->MarkNeighbor(*node.triangle); tcx.AddToMap(triangle); // Update the advancing front node.prev->next = node.next; node.next->prev = node.prev; // If it was legalized the triangle has already been mapped if (!Legalize(tcx, *triangle)) { tcx.MapTriangleToNodes(*triangle); } } void Sweep::FillAdvancingFront(SweepContext& tcx, Node& n) { // Fill right holes Node* node = n.next; while (node->next) { // if HoleAngle exceeds 90 degrees then break. if (LargeHole_DontFill(node)) break; Fill(tcx, *node); node = node->next; } // Fill left holes node = n.prev; while (node->prev) { // if HoleAngle exceeds 90 degrees then break. if (LargeHole_DontFill(node)) break; Fill(tcx, *node); node = node->prev; } // Fill right basins if (n.next && n.next->next) { const double angle = BasinAngle(n); if (angle < PI_3div4) { FillBasin(tcx, n); } } } // True if HoleAngle exceeds 90 degrees. bool Sweep::LargeHole_DontFill(const Node* node) const { const Node* nextNode = node->next; const Node* prevNode = node->prev; if (!AngleExceeds90Degrees(node->point, nextNode->point, prevNode->point)) return false; // Check additional points on front. const Node* next2Node = nextNode->next; // "..Plus.." because only want angles on same side as point being added. if ((next2Node != NULL) && !AngleExceedsPlus90DegreesOrIsNegative(node->point, next2Node->point, prevNode->point)) return false; const Node* prev2Node = prevNode->prev; // "..Plus.." because only want angles on same side as point being added. if ((prev2Node != NULL) && !AngleExceedsPlus90DegreesOrIsNegative(node->point, nextNode->point, prev2Node->point)) return false; return true; } bool Sweep::AngleExceeds90Degrees(const Point* origin, const Point* pa, const Point* pb) const { const double angle = Angle(origin, pa, pb); return ((angle > PI_div2) || (angle < -PI_div2)); } bool Sweep::AngleExceedsPlus90DegreesOrIsNegative(const Point* origin, const Point* pa, const Point* pb) const { const double angle = Angle(origin, pa, pb); return (angle > PI_div2) || (angle < 0); } double Sweep::Angle(const Point* origin, const Point* pa, const Point* pb) const { /* Complex plane * ab = cosA +i*sinA * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) * atan2(y,x) computes the principal value of the argument function * applied to the complex number x+iy * Where x = ax*bx + ay*by * y = ax*by - ay*bx */ const double px = origin->x; const double py = origin->y; const double ax = pa->x- px; const double ay = pa->y - py; const double bx = pb->x - px; const double by = pb->y - py; const double x = ax * by - ay * bx; const double y = ax * bx + ay * by; return atan2(x, y); } double Sweep::BasinAngle(const Node& node) const { const double ax = node.point->x - node.next->next->point->x; const double ay = node.point->y - node.next->next->point->y; return atan2(ay, ax); } double Sweep::HoleAngle(const Node& node) const { /* Complex plane * ab = cosA +i*sinA * ab = (ax + ay*i)(bx + by*i) = (ax*bx + ay*by) + i(ax*by-ay*bx) * atan2(y,x) computes the principal value of the argument function * applied to the complex number x+iy * Where x = ax*bx + ay*by * y = ax*by - ay*bx */ const double ax = node.next->point->x - node.point->x; const double ay = node.next->point->y - node.point->y; const double bx = node.prev->point->x - node.point->x; const double by = node.prev->point->y - node.point->y; return atan2(ax * by - ay * bx, ax * bx + ay * by); } bool Sweep::Legalize(SweepContext& tcx, Triangle& t) { // To legalize a triangle we start by finding if any of the three edges // violate the Delaunay condition for (int i = 0; i < 3; i++) { if (t.delaunay_edge[i]) continue; Triangle* ot = t.GetNeighbor(i); if (ot) { Point* p = t.GetPoint(i); Point* op = ot->OppositePoint(t, *p); int oi = ot->Index(op); // If this is a Constrained Edge or a Delaunay Edge(only during recursive legalization) // then we should not try to legalize if (ot->constrained_edge[oi] || ot->delaunay_edge[oi]) { t.constrained_edge[i] = ot->constrained_edge[oi]; continue; } bool inside = Incircle(*p, *t.PointCCW(*p), *t.PointCW(*p), *op); if (inside) { // Lets mark this shared edge as Delaunay t.delaunay_edge[i] = true; ot->delaunay_edge[oi] = true; // Lets rotate shared edge one vertex CW to legalize it RotateTrianglePair(t, *p, *ot, *op); // We now got one valid Delaunay Edge shared by two triangles // This gives us 4 new edges to check for Delaunay // Make sure that triangle to node mapping is done only one time for a specific triangle bool not_legalized = !Legalize(tcx, t); if (not_legalized) { tcx.MapTriangleToNodes(t); } not_legalized = !Legalize(tcx, *ot); if (not_legalized) tcx.MapTriangleToNodes(*ot); // Reset the Delaunay edges, since they only are valid Delaunay edges // until we add a new triangle or point. // XXX: need to think about this. Can these edges be tried after we // return to previous recursive level? t.delaunay_edge[i] = false; ot->delaunay_edge[oi] = false; // If triangle have been legalized no need to check the other edges since // the recursive legalization will handles those so we can end here. return true; } } } return false; } bool Sweep::Incircle(const Point& pa, const Point& pb, const Point& pc, const Point& pd) const { const double adx = pa.x - pd.x; const double ady = pa.y - pd.y; const double bdx = pb.x - pd.x; const double bdy = pb.y - pd.y; const double adxbdy = adx * bdy; const double bdxady = bdx * ady; const double oabd = adxbdy - bdxady; if (oabd <= 0) return false; const double cdx = pc.x - pd.x; const double cdy = pc.y - pd.y; const double cdxady = cdx * ady; const double adxcdy = adx * cdy; const double ocad = cdxady - adxcdy; if (ocad <= 0) return false; const double bdxcdy = bdx * cdy; const double cdxbdy = cdx * bdy; const double alift = adx * adx + ady * ady; const double blift = bdx * bdx + bdy * bdy; const double clift = cdx * cdx + cdy * cdy; const double det = alift * (bdxcdy - cdxbdy) + blift * ocad + clift * oabd; return det > 0; } void Sweep::RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op) const { Triangle* n1, *n2, *n3, *n4; n1 = t.NeighborCCW(p); n2 = t.NeighborCW(p); n3 = ot.NeighborCCW(op); n4 = ot.NeighborCW(op); bool ce1, ce2, ce3, ce4; ce1 = t.GetConstrainedEdgeCCW(p); ce2 = t.GetConstrainedEdgeCW(p); ce3 = ot.GetConstrainedEdgeCCW(op); ce4 = ot.GetConstrainedEdgeCW(op); bool de1, de2, de3, de4; de1 = t.GetDelunayEdgeCCW(p); de2 = t.GetDelunayEdgeCW(p); de3 = ot.GetDelunayEdgeCCW(op); de4 = ot.GetDelunayEdgeCW(op); t.Legalize(p, op); ot.Legalize(op, p); // Remap delaunay_edge ot.SetDelunayEdgeCCW(p, de1); t.SetDelunayEdgeCW(p, de2); t.SetDelunayEdgeCCW(op, de3); ot.SetDelunayEdgeCW(op, de4); // Remap constrained_edge ot.SetConstrainedEdgeCCW(p, ce1); t.SetConstrainedEdgeCW(p, ce2); t.SetConstrainedEdgeCCW(op, ce3); ot.SetConstrainedEdgeCW(op, ce4); // Remap neighbors // XXX: might optimize the markNeighbor by keeping track of // what side should be assigned to what neighbor after the // rotation. Now mark neighbor does lots of testing to find // the right side. t.ClearNeighbors(); ot.ClearNeighbors(); if (n1) ot.MarkNeighbor(*n1); if (n2) t.MarkNeighbor(*n2); if (n3) t.MarkNeighbor(*n3); if (n4) ot.MarkNeighbor(*n4); t.MarkNeighbor(ot); } void Sweep::FillBasin(SweepContext& tcx, Node& node) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { tcx.basin.left_node = node.next->next; } else { tcx.basin.left_node = node.next; } // Find the bottom and right node tcx.basin.bottom_node = tcx.basin.left_node; while (tcx.basin.bottom_node->next && tcx.basin.bottom_node->point->y >= tcx.basin.bottom_node->next->point->y) { tcx.basin.bottom_node = tcx.basin.bottom_node->next; } if (tcx.basin.bottom_node == tcx.basin.left_node) { // No valid basin return; } tcx.basin.right_node = tcx.basin.bottom_node; while (tcx.basin.right_node->next && tcx.basin.right_node->point->y < tcx.basin.right_node->next->point->y) { tcx.basin.right_node = tcx.basin.right_node->next; } if (tcx.basin.right_node == tcx.basin.bottom_node) { // No valid basins return; } tcx.basin.width = tcx.basin.right_node->point->x - tcx.basin.left_node->point->x; tcx.basin.left_highest = tcx.basin.left_node->point->y > tcx.basin.right_node->point->y; FillBasinReq(tcx, tcx.basin.bottom_node); } void Sweep::FillBasinReq(SweepContext& tcx, Node* node) { // if shallow stop filling if (IsShallow(tcx, *node)) { return; } Fill(tcx, *node); if (node->prev == tcx.basin.left_node && node->next == tcx.basin.right_node) { return; } else if (node->prev == tcx.basin.left_node) { Orientation o = Orient2d(*node->point, *node->next->point, *node->next->next->point); if (o == CW) { return; } node = node->next; } else if (node->next == tcx.basin.right_node) { Orientation o = Orient2d(*node->point, *node->prev->point, *node->prev->prev->point); if (o == CCW) { return; } node = node->prev; } else { // Continue with the neighbor node with lowest Y value if (node->prev->point->y < node->next->point->y) { node = node->prev; } else { node = node->next; } } FillBasinReq(tcx, node); } bool Sweep::IsShallow(SweepContext& tcx, Node& node) { double height; if (tcx.basin.left_highest) { height = tcx.basin.left_node->point->y - node.point->y; } else { height = tcx.basin.right_node->point->y - node.point->y; } // if shallow stop filling if (tcx.basin.width > height) { return true; } return false; } void Sweep::FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { if (tcx.edge_event.right) { FillRightAboveEdgeEvent(tcx, edge, node); } else { FillLeftAboveEdgeEvent(tcx, edge, node); } } void Sweep::FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->next->point->x < edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->next->point, *edge->p) == CCW) { FillRightBelowEdgeEvent(tcx, edge, *node); } else { node = node->next; } } } void Sweep::FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x < edge->p->x) { if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, node); } else{ // Convex FillRightConvexEdgeEvent(tcx, edge, node); // Retry this one FillRightBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.next); if (node.next->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.next->point, *edge->p) == CCW) { // Below if (Orient2d(*node.point, *node.next->point, *node.next->next->point) == CCW) { // Next is concave FillRightConcaveEdgeEvent(tcx, edge, node); } else { // Next is convex } } } } void Sweep::FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.next->point, *node.next->next->point, *node.next->next->next->point) == CCW) { // Concave FillRightConcaveEdgeEvent(tcx, edge, *node.next); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.next->next->point, *edge->p) == CCW) { // Below FillRightConvexEdgeEvent(tcx, edge, *node.next); } else{ // Above } } } void Sweep::FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node) { while (node->prev->point->x > edge->p->x) { // Check if next node is below the edge if (Orient2d(*edge->q, *node->prev->point, *edge->p) == CW) { FillLeftBelowEdgeEvent(tcx, edge, *node); } else { node = node->prev; } } } void Sweep::FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { if (node.point->x > edge->p->x) { if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else { // Convex FillLeftConvexEdgeEvent(tcx, edge, node); // Retry this one FillLeftBelowEdgeEvent(tcx, edge, node); } } } void Sweep::FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { // Next concave or convex? if (Orient2d(*node.prev->point, *node.prev->prev->point, *node.prev->prev->prev->point) == CW) { // Concave FillLeftConcaveEdgeEvent(tcx, edge, *node.prev); } else{ // Convex // Next above or below edge? if (Orient2d(*edge->q, *node.prev->prev->point, *edge->p) == CW) { // Below FillLeftConvexEdgeEvent(tcx, edge, *node.prev); } else{ // Above } } } void Sweep::FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node) { Fill(tcx, *node.prev); if (node.prev->point != edge->p) { // Next above or below edge? if (Orient2d(*edge->q, *node.prev->point, *edge->p) == CW) { // Below if (Orient2d(*node.point, *node.prev->point, *node.prev->prev->point) == CW) { // Next is concave FillLeftConcaveEdgeEvent(tcx, edge, node); } else{ // Next is convex } } } } void Sweep::FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p) { Triangle& ot = t->NeighborAcross(p); Point& op = *ot.OppositePoint(*t, p); if (InScanArea(p, *t->PointCCW(p), *t->PointCW(p), op)) { // Lets rotate shared edge one vertex CW RotateTrianglePair(*t, p, ot, op); tcx.MapTriangleToNodes(*t); tcx.MapTriangleToNodes(ot); if (p == eq && op == ep) { if (eq == *tcx.edge_event.constrained_edge->q && ep == *tcx.edge_event.constrained_edge->p) { t->MarkConstrainedEdge(&ep, &eq); ot.MarkConstrainedEdge(&ep, &eq); Legalize(tcx, *t); Legalize(tcx, ot); } else { // XXX: I think one of the triangles should be legalized here? } } else { Orientation o = Orient2d(eq, op, ep); t = &NextFlipTriangle(tcx, (int)o, *t, ot, p, op); FlipEdgeEvent(tcx, ep, eq, t, p); } } else { Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, *t, ot, newP); EdgeEvent(tcx, ep, eq, t, p); } } Triangle& Sweep::NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op) { if (o == CCW) { // ot is not crossing edge after flip int edge_index = ot.EdgeIndex(&p, &op); ot.delaunay_edge[edge_index] = true; Legalize(tcx, ot); ot.ClearDelunayEdges(); return t; } // t is not crossing edge after flip int edge_index = t.EdgeIndex(&p, &op); t.delaunay_edge[edge_index] = true; Legalize(tcx, t); t.ClearDelunayEdges(); return ot; } Point& Sweep::NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op) { Orientation o2d = Orient2d(eq, op, ep); if (o2d == CW) { // Right return *ot.PointCCW(op); } else if (o2d == CCW) { // Left return *ot.PointCW(op); } throw std::runtime_error("[Unsupported] Opposing point on constrained edge"); } void Sweep::FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p) { Triangle& ot = t.NeighborAcross(p); Point& op = *ot.OppositePoint(t, p); if (InScanArea(eq, *flip_triangle.PointCCW(eq), *flip_triangle.PointCW(eq), op)) { // flip with new edge op->eq FlipEdgeEvent(tcx, eq, op, &ot, op); // TODO: Actually I just figured out that it should be possible to // improve this by getting the next ot and op before the the above // flip and continue the flipScanEdgeEvent here // set new ot and op here and loop back to inScanArea test // also need to set a new flip_triangle first // Turns out at first glance that this is somewhat complicated // so it will have to wait. } else{ Point& newP = NextFlipPoint(ep, eq, ot, op); FlipScanEdgeEvent(tcx, ep, eq, flip_triangle, ot, newP); } } Sweep::~Sweep() { // Clean up memory for(size_t i = 0; i < nodes_.size(); i++) { delete nodes_[i]; } } } therion-5.4.1/extern/poly2tri/sweep/sweep.h000066400000000000000000000210611307545355600207160ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** * Sweep-line, Constrained Delauney Triangulation (CDT) See: Domiter, V. and * Zalik, B.(2008)'Sweep-line algorithm for constrained Delaunay triangulation', * International Journal of Geographical Information Science * * "FlipScan" Constrained Edge Algorithm invented by Thomas ?hl?n, thahlen@gmail.com */ #ifndef SWEEP_H #define SWEEP_H #include namespace p2t { class SweepContext; struct Node; struct Point; struct Edge; class Triangle; class Sweep { public: /** * Triangulate * * @param tcx */ void Triangulate(SweepContext& tcx); /** * Destructor - clean up memory */ ~Sweep(); private: /** * Start sweeping the Y-sorted point set from bottom to top * * @param tcx */ void SweepPoints(SweepContext& tcx); /** * Find closes node to the left of the new point and * create a new triangle. If needed new holes and basins * will be filled to. * * @param tcx * @param point * @return */ Node& PointEvent(SweepContext& tcx, Point& point); /** * * * @param tcx * @param edge * @param node */ void EdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void EdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* triangle, Point& point); /** * Creates a new front triangle and legalize it * * @param tcx * @param point * @param node * @return */ Node& NewFrontTriangle(SweepContext& tcx, Point& point, Node& node); /** * Adds a triangle to the advancing front to fill a hole. * @param tcx * @param node - middle node, that is the bottom of the hole */ void Fill(SweepContext& tcx, Node& node); /** * Returns true if triangle was legalized */ bool Legalize(SweepContext& tcx, Triangle& t); /** * Requirement:
* 1. a,b and c form a triangle.
* 2. a and d is know to be on opposite side of bc
*
   *                a
   *                +
   *               / \
   *              /   \
   *            b/     \c
   *            +-------+
   *           /    d    \
   *          /           \
   * 
* Fact: d has to be in area B to have a chance to be inside the circle formed by * a,b and c
* d is outside B if orient2d(a,b,d) or orient2d(c,a,d) is CW
* This preknowledge gives us a way to optimize the incircle test * @param a - triangle point, opposite d * @param b - triangle point * @param c - triangle point * @param d - point opposite a * @return true if d is inside circle, false if on circle edge */ bool Incircle(const Point& pa, const Point& pb, const Point& pc, const Point& pd) const; /** * Rotates a triangle pair one vertex CW *
   *       n2                    n2
   *  P +-----+             P +-----+
   *    | t  /|               |\  t |
   *    |   / |               | \   |
   *  n1|  /  |n3           n1|  \  |n3
   *    | /   |    after CW   |   \ |
   *    |/ oT |               | oT \|
   *    +-----+ oP            +-----+
   *       n4                    n4
   * 
*/ void RotateTrianglePair(Triangle& t, Point& p, Triangle& ot, Point& op) const; /** * Fills holes in the Advancing Front * * * @param tcx * @param n */ void FillAdvancingFront(SweepContext& tcx, Node& n); // Decision-making about when to Fill hole. // Contributed by ToolmakerSteve2 bool LargeHole_DontFill(const Node* node) const; bool AngleExceeds90Degrees(const Point* origin, const Point* pa, const Point* pb) const; bool AngleExceedsPlus90DegreesOrIsNegative(const Point* origin, const Point* pa, const Point* pb) const; double Angle(const Point* origin, const Point* pa, const Point* pb) const; /** * * @param node - middle node * @return the angle between 3 front nodes */ double HoleAngle(const Node& node) const; /** * The basin angle is decided against the horizontal line [1,0] */ double BasinAngle(const Node& node) const; /** * Fills a basin that has formed on the Advancing Front to the right * of given node.
* First we decide a left,bottom and right node that forms the * boundaries of the basin. Then we do a reqursive fill. * * @param tcx * @param node - starting node, this or next node will be left node */ void FillBasin(SweepContext& tcx, Node& node); /** * Recursive algorithm to fill a Basin with triangles * * @param tcx * @param node - bottom_node * @param cnt - counter used to alternate on even and odd numbers */ void FillBasinReq(SweepContext& tcx, Node* node); bool IsShallow(SweepContext& tcx, Node& node); bool IsEdgeSideOfTriangle(Triangle& triangle, Point& ep, Point& eq); void FillEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillRightBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillRightConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftAboveEdgeEvent(SweepContext& tcx, Edge* edge, Node* node); void FillLeftBelowEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConcaveEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FillLeftConvexEdgeEvent(SweepContext& tcx, Edge* edge, Node& node); void FlipEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle* t, Point& p); /** * After a flip we have two triangles and know that only one will still be * intersecting the edge. So decide which to contiune with and legalize the other * * @param tcx * @param o - should be the result of an orient2d( eq, op, ep ) * @param t - triangle 1 * @param ot - triangle 2 * @param p - a point shared by both triangles * @param op - another point shared by both triangles * @return returns the triangle still intersecting the edge */ Triangle& NextFlipTriangle(SweepContext& tcx, int o, Triangle& t, Triangle& ot, Point& p, Point& op); /** * When we need to traverse from one triangle to the next we need * the point in current triangle that is the opposite point to the next * triangle. * * @param ep * @param eq * @param ot * @param op * @return */ Point& NextFlipPoint(Point& ep, Point& eq, Triangle& ot, Point& op); /** * Scan part of the FlipScan algorithm
* When a triangle pair isn't flippable we will scan for the next * point that is inside the flip triangle scan area. When found * we generate a new flipEdgeEvent * * @param tcx * @param ep - last point on the edge we are traversing * @param eq - first point on the edge we are traversing * @param flipTriangle - the current triangle sharing the point eq with edge * @param t * @param p */ void FlipScanEdgeEvent(SweepContext& tcx, Point& ep, Point& eq, Triangle& flip_triangle, Triangle& t, Point& p); void FinalizationPolygon(SweepContext& tcx); std::vector nodes_; }; } #endiftherion-5.4.1/extern/poly2tri/sweep/sweep_context.cc000066400000000000000000000125261307545355600226260ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sweep_context.h" #include #include "advancing_front.h" namespace p2t { SweepContext::SweepContext(const std::vector& polyline) : points_(polyline), front_(0), head_(0), tail_(0), af_head_(0), af_middle_(0), af_tail_(0) { InitEdges(points_); } void SweepContext::AddHole(const std::vector& polyline) { InitEdges(polyline); for(unsigned int i = 0; i < polyline.size(); i++) { points_.push_back(polyline[i]); } } void SweepContext::AddPoint(Point* point) { points_.push_back(point); } std::vector &SweepContext::GetTriangles() { return triangles_; } std::list &SweepContext::GetMap() { return map_; } void SweepContext::InitTriangulation() { double xmax(points_[0]->x), xmin(points_[0]->x); double ymax(points_[0]->y), ymin(points_[0]->y); // Calculate bounds. for (unsigned int i = 0; i < points_.size(); i++) { Point& p = *points_[i]; if (p.x > xmax) xmax = p.x; if (p.x < xmin) xmin = p.x; if (p.y > ymax) ymax = p.y; if (p.y < ymin) ymin = p.y; } double dx = kAlpha * (xmax - xmin); double dy = kAlpha * (ymax - ymin); head_ = new Point(xmax + dx, ymin - dy); tail_ = new Point(xmin - dx, ymin - dy); // Sort points along y-axis std::sort(points_.begin(), points_.end(), cmp); } void SweepContext::InitEdges(const std::vector& polyline) { size_t num_points = polyline.size(); for (size_t i = 0; i < num_points; i++) { size_t j = i < num_points - 1 ? i + 1 : 0; edge_list.push_back(new Edge(*polyline[i], *polyline[j])); } } Point* SweepContext::GetPoint(size_t index) { return points_[index]; } void SweepContext::AddToMap(Triangle* triangle) { map_.push_back(triangle); } Node& SweepContext::LocateNode(const Point& point) { // TODO implement search tree return *front_->LocateNode(point.x); } void SweepContext::CreateAdvancingFront(const std::vector& nodes) { (void) nodes; // Initial triangle Triangle* triangle = new Triangle(*points_[0], *tail_, *head_); map_.push_back(triangle); af_head_ = new Node(*triangle->GetPoint(1), *triangle); af_middle_ = new Node(*triangle->GetPoint(0), *triangle); af_tail_ = new Node(*triangle->GetPoint(2)); front_ = new AdvancingFront(*af_head_, *af_tail_); // TODO: More intuitive if head is middles next and not previous? // so swap head and tail af_head_->next = af_middle_; af_middle_->next = af_tail_; af_middle_->prev = af_head_; af_tail_->prev = af_middle_; } void SweepContext::RemoveNode(Node* node) { delete node; } void SweepContext::MapTriangleToNodes(Triangle& t) { for (int i = 0; i < 3; i++) { if (!t.GetNeighbor(i)) { Node* n = front_->LocatePoint(t.PointCW(*t.GetPoint(i))); if (n) n->triangle = &t; } } } void SweepContext::RemoveFromMap(Triangle* triangle) { map_.remove(triangle); } void SweepContext::MeshClean(Triangle& triangle) { std::vector triangles; triangles.push_back(&triangle); while(!triangles.empty()){ Triangle *t = triangles.back(); triangles.pop_back(); if (t != NULL && !t->IsInterior()) { t->IsInterior(true); triangles_.push_back(t); for (int i = 0; i < 3; i++) { if (!t->constrained_edge[i]) triangles.push_back(t->GetNeighbor(i)); } } } } SweepContext::~SweepContext() { // Clean up memory delete head_; delete tail_; delete front_; delete af_head_; delete af_middle_; delete af_tail_; typedef std::list type_list; for(type_list::iterator iter = map_.begin(); iter != map_.end(); ++iter) { Triangle* ptr = *iter; delete ptr; } for(unsigned int i = 0; i < edge_list.size(); i++) { delete edge_list[i]; } } } therion-5.4.1/extern/poly2tri/sweep/sweep_context.h000066400000000000000000000101201307545355600224540ustar00rootroot00000000000000/* * Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors * http://code.google.com/p/poly2tri/ * * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * Neither the name of Poly2Tri nor the names of its contributors may be * used to endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SWEEP_CONTEXT_H #define SWEEP_CONTEXT_H #include #include #include namespace p2t { // Inital triangle factor, seed triangle will extend 30% of // PointSet width to both left and right. const double kAlpha = 0.3; struct Point; class Triangle; struct Node; struct Edge; class AdvancingFront; class SweepContext { public: /// Constructor SweepContext(const std::vector& polyline); /// Destructor ~SweepContext(); void set_head(Point* p1); Point* head() const; void set_tail(Point* p1); Point* tail() const; size_t point_count() const; Node& LocateNode(const Point& point); void RemoveNode(Node* node); void CreateAdvancingFront(const std::vector& nodes); /// Try to map a node to all sides of this triangle that don't have a neighbor void MapTriangleToNodes(Triangle& t); void AddToMap(Triangle* triangle); Point* GetPoint(size_t index); Point* GetPoints(); void RemoveFromMap(Triangle* triangle); void AddHole(const std::vector& polyline); void AddPoint(Point* point); AdvancingFront* front() const; void MeshClean(Triangle& triangle); std::vector &GetTriangles(); std::list &GetMap(); std::vector edge_list; struct Basin { Node* left_node; Node* bottom_node; Node* right_node; double width; bool left_highest; Basin() : left_node(NULL), bottom_node(NULL), right_node(NULL), width(0.0), left_highest(false) { } void Clear() { left_node = NULL; bottom_node = NULL; right_node = NULL; width = 0.0; left_highest = false; } }; struct EdgeEvent { Edge* constrained_edge; bool right; EdgeEvent() : constrained_edge(NULL), right(false) { } }; Basin basin; EdgeEvent edge_event; private: friend class Sweep; std::vector triangles_; std::list map_; std::vector points_; // Advancing front AdvancingFront* front_; // head point used with advancing front Point* head_; // tail point used with advancing front Point* tail_; Node *af_head_, *af_middle_, *af_tail_; void InitTriangulation(); void InitEdges(const std::vector& polyline); }; inline AdvancingFront* SweepContext::front() const { return front_; } inline size_t SweepContext::point_count() const { return points_.size(); } inline void SweepContext::set_head(Point* p1) { head_ = p1; } inline Point* SweepContext::head() const { return head_; } inline void SweepContext::set_tail(Point* p1) { tail_ = p1; } inline Point* SweepContext::tail() const { return tail_; } } #endif therion-5.4.1/extern/proj4/000077500000000000000000000000001307545355600155515ustar00rootroot00000000000000therion-5.4.1/extern/proj4/Makefile000066400000000000000000000011561307545355600172140ustar00rootroot00000000000000AR ?= ar CC ?= cc OUTDIR ?= . ifneq ($(OUTDIR),.) LOUTDIR = $(OUTDIR)/extern/proj4 else LOUTDIR = . endif OBJECTS = $(addprefix $(LOUTDIR)/,$(addsuffix .o,$(basename $(shell ls *.c)))) $(LOUTDIR)/%.o : %.c $(CC) -c $(CCFLAGS) -I. -o $@ $< all: $(LOUTDIR)/libproj.a $(LOUTDIR)/libproj.a: $(OBJECTS) $(AR) cr $(LOUTDIR)/libproj.a $(LOUTDIR)/*.o remove: rm -f proj.c gen_cheb.c p_series.c jniproj.c cs2cs.c \ cs2cs.c gen_cheb.c p_series.c nad2nad.c nad2bin.c \ geod.c geod_set.c geod_for.c geod_inv.c geodesic.h clean: perl ../../makefile.pl rm *.o perl ../../makefile.pl rm *~ perl ../../makefile.pl rm *.a therion-5.4.1/extern/proj4/PJ_aea.c000066400000000000000000000116711307545355600170420ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aea (Albers Equal Area) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double ec; \ double n; \ double c; \ double dd; \ double n2; \ double rho0; \ double rho; \ double phi1; \ double phi2; \ double *en; \ int ellips; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aea.c 1504 2009-01-06 02:11:57Z warmerdam $"); # define EPS10 1.e-10 # define TOL7 1.e-7 PROJ_HEAD(aea, "Albers Equal Area") "\n\tConic Sph&Ell\n\tlat_1= lat_2="; PROJ_HEAD(leac, "Lambert Equal Area Conic") "\n\tConic, Sph&Ell\n\tlat_1= south"; /* determine latitude angle phi-1 */ # define N_ITER 15 # define EPSILON 1.0e-7 # define TOL 1.0e-10 static double phi1_(double qs, double Te, double Tone_es) { int i; double Phi, sinpi, cospi, con, com, dphi; Phi = asin (.5 * qs); if (Te < EPSILON) return( Phi ); i = N_ITER; do { sinpi = sin (Phi); cospi = cos (Phi); con = Te * sinpi; com = 1. - con * con; dphi = .5 * com * com / cospi * (qs / Tone_es - sinpi / com + .5 / Te * log ((1. - con) / (1. + con))); Phi += dphi; } while (fabs(dphi) > TOL && --i); return( i ? Phi : HUGE_VAL ); } FORWARD(e_forward); /* ellipsoid & spheroid */ if ((P->rho = P->c - (P->ellips ? P->n * pj_qsfn(sin(lp.phi), P->e, P->one_es) : P->n2 * sin(lp.phi))) < 0.) F_ERROR P->rho = P->dd * sqrt(P->rho); xy.x = P->rho * sin( lp.lam *= P->n ); xy.y = P->rho0 - P->rho * cos(lp.lam); return (xy); } INVERSE(e_inverse) /* ellipsoid & spheroid */; if( (P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { if (P->n < 0.) { P->rho = -P->rho; xy.x = -xy.x; xy.y = -xy.y; } lp.phi = P->rho / P->dd; if (P->ellips) { lp.phi = (P->c - lp.phi * lp.phi) / P->n; if (fabs(P->ec - fabs(lp.phi)) > TOL7) { if ((lp.phi = phi1_(lp.phi, P->e, P->one_es)) == HUGE_VAL) I_ERROR } else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; } else if (fabs(lp.phi = (P->c - lp.phi * lp.phi) / P->n2) <= 1.) lp.phi = asin(lp.phi); else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static PJ * setup(PJ *P) { double cosphi, sinphi; int secant; if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es > 0.))) { double ml1, m1; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_qsfn(sinphi, P->e, P->one_es); if (secant) { /* secant cone */ double ml2, m2; sinphi = sin(P->phi2); cosphi = cos(P->phi2); m2 = pj_msfn(sinphi, cosphi, P->es); ml2 = pj_qsfn(sinphi, P->e, P->one_es); P->n = (m1 * m1 - m2 * m2) / (ml2 - ml1); } P->ec = 1. - .5 * P->one_es * log((1. - P->e) / (1. + P->e)) / P->e; P->c = m1 * m1 + P->n * ml1; P->dd = 1. / P->n; P->rho0 = P->dd * sqrt(P->c - P->n * pj_qsfn(sin(P->phi0), P->e, P->one_es)); } else { if (secant) P->n = .5 * (P->n + sin(P->phi2)); P->n2 = P->n + P->n; P->c = cosphi * cosphi + P->n2 * sinphi; P->dd = 1. / P->n; P->rho0 = P->dd * sqrt(P->c - P->n2 * sin(P->phi0)); } P->inv = e_inverse; P->fwd = e_forward; return P; } ENTRY1(aea,en) P->phi1 = pj_param(P->params, "rlat_1").f; P->phi2 = pj_param(P->params, "rlat_2").f; ENDENTRY(setup(P)) ENTRY1(leac,en) P->phi2 = pj_param(P->params, "rlat_1").f; P->phi1 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_aeqd.c000066400000000000000000000165511307545355600172300ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aeqd (Azimuthal Equidistant) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ double *en; \ double M1; \ double N1; \ double Mp; \ double He; \ double G; \ int mode; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aeqd.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(aeqd, "Azimuthal Equidistant") "\n\tAzi, Sph&Ell\n\tlat_0 guam"; #define EPS10 1.e-10 #define TOL 1.e-14 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(e_guam_fwd); /* Guam elliptical */ double cosphi, sinphi, t; cosphi = cos(lp.phi); sinphi = sin(lp.phi); t = 1. / sqrt(1. - P->es * sinphi * sinphi); xy.x = lp.lam * cosphi * t; xy.y = pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->M1 + .5 * lp.lam * lp.lam * cosphi * sinphi * t; return (xy); } FORWARD(e_forward); /* elliptical */ double coslam, cosphi, sinphi, rho, s, H, H2, c, Az, t, ct, st, cA, sA; coslam = cos(lp.lam); cosphi = cos(lp.phi); sinphi = sin(lp.phi); switch (P->mode) { case N_POLE: coslam = - coslam; case S_POLE: xy.x = (rho = fabs(P->Mp - pj_mlfn(lp.phi, sinphi, cosphi, P->en))) * sin(lp.lam); xy.y = rho * coslam; break; case EQUIT: case OBLIQ: if (fabs(lp.lam) < EPS10 && fabs(lp.phi - P->phi0) < EPS10) { xy.x = xy.y = 0.; break; } t = atan2(P->one_es * sinphi + P->es * P->N1 * P->sinph0 * sqrt(1. - P->es * sinphi * sinphi), cosphi); ct = cos(t); st = sin(t); Az = atan2(sin(lp.lam) * ct, P->cosph0 * st - P->sinph0 * coslam * ct); cA = cos(Az); sA = sin(Az); s = aasin( fabs(sA) < TOL ? (P->cosph0 * st - P->sinph0 * coslam * ct) / cA : sin(lp.lam) * ct / sA ); H = P->He * cA; H2 = H * H; c = P->N1 * s * (1. + s * s * (- H2 * (1. - H2)/6. + s * ( P->G * H * (1. - 2. * H2 * H2) / 8. + s * ((H2 * (4. - 7. * H2) - 3. * P->G * P->G * (1. - 7. * H2)) / 120. - s * P->G * H / 48.)))); xy.x = c * sA; xy.y = c * cA; break; } return (xy); } FORWARD(s_forward); /* spherical */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = cosphi * coslam; goto oblcon; case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; oblcon: if (fabs(fabs(xy.y) - 1.) < TOL) if (xy.y < 0.) F_ERROR else xy.x = xy.y = 0.; else { xy.y = acos(xy.y); xy.y /= sin(xy.y); xy.x = xy.y * cosphi * sin(lp.lam); xy.y *= (P->mode == EQUIT) ? sinphi : P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; } break; case N_POLE: lp.phi = -lp.phi; coslam = -coslam; case S_POLE: if (fabs(lp.phi - HALFPI) < EPS10) F_ERROR; xy.x = (xy.y = (HALFPI + lp.phi)) * sin(lp.lam); xy.y *= coslam; break; } return (xy); } INVERSE(e_guam_inv); /* Guam elliptical */ double x2, t; int i; x2 = 0.5 * xy.x * xy.x; lp.phi = P->phi0; for (i = 0; i < 3; ++i) { t = P->e * sin(lp.phi); lp.phi = pj_inv_mlfn(P->M1 + xy.y - x2 * tan(lp.phi) * (t = sqrt(1. - t * t)), P->es, P->en); } lp.lam = xy.x * t / cos(lp.phi); return (lp); } INVERSE(e_inverse); /* elliptical */ double c, Az, cosAz, A, B, D, E, F, psi, t; if ((c = hypot(xy.x, xy.y)) < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (P->mode == OBLIQ || P->mode == EQUIT) { cosAz = cos(Az = atan2(xy.x, xy.y)); t = P->cosph0 * cosAz; B = P->es * t / P->one_es; A = - B * t; B *= 3. * (1. - A) * P->sinph0; D = c / P->N1; E = D * (1. - D * D * (A * (1. + A) / 6. + B * (1. + 3.*A) * D / 24.)); F = 1. - E * E * (A / 2. + B * E / 6.); psi = aasin(P->sinph0 * cos(E) + t * sin(E)); lp.lam = aasin(sin(Az) * sin(E) / cos(psi)); if ((t = fabs(psi)) < EPS10) lp.phi = 0.; else if (fabs(t - HALFPI) < 0.) lp.phi = HALFPI; else lp.phi = atan((1. - P->es * F * P->sinph0 / sin(psi)) * tan(psi) / P->one_es); } else { /* Polar */ lp.phi = pj_inv_mlfn(P->mode == N_POLE ? P->Mp - c : P->Mp + c, P->es, P->en); lp.lam = atan2(xy.x, P->mode == N_POLE ? -xy.y : xy.y); } return (lp); } INVERSE(s_inverse); /* spherical */ double cosc, c_rh, sinc; if ((c_rh = hypot(xy.x, xy.y)) > PI) { if (c_rh - EPS10 > PI) I_ERROR; c_rh = PI; } else if (c_rh < EPS10) { lp.phi = P->phi0; lp.lam = 0.; return (lp); } if (P->mode == OBLIQ || P->mode == EQUIT) { sinc = sin(c_rh); cosc = cos(c_rh); if (P->mode == EQUIT) { lp.phi = aasin(xy.y * sinc / c_rh); xy.x *= sinc; xy.y = cosc * c_rh; } else { lp.phi = aasin(cosc * P->sinph0 + xy.y * sinc * P->cosph0 / c_rh); xy.y = (cosc - P->sinph0 * sin(lp.phi)) * c_rh; xy.x *= sinc * P->cosph0; } lp.lam = xy.y == 0. ? 0. : atan2(xy.x, xy.y); } else if (P->mode == N_POLE) { lp.phi = HALFPI - c_rh; lp.lam = atan2(xy.x, -xy.y); } else { lp.phi = c_rh - HALFPI; lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(aeqd, en) P->phi0 = pj_param(P->params, "rlat_0").f; if (fabs(fabs(P->phi0) - HALFPI) < EPS10) { P->mode = P->phi0 < 0. ? S_POLE : N_POLE; P->sinph0 = P->phi0 < 0. ? -1. : 1.; P->cosph0 = 0.; } else if (fabs(P->phi0) < EPS10) { P->mode = EQUIT; P->sinph0 = 0.; P->cosph0 = 1.; } else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } if (! P->es) { P->inv = s_inverse; P->fwd = s_forward; } else { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (pj_param(P->params, "bguam").i) { P->M1 = pj_mlfn(P->phi0, P->sinph0, P->cosph0, P->en); P->inv = e_guam_inv; P->fwd = e_guam_fwd; } else { switch (P->mode) { case N_POLE: P->Mp = pj_mlfn(HALFPI, 1., 0., P->en); break; case S_POLE: P->Mp = pj_mlfn(-HALFPI, -1., 0., P->en); break; case EQUIT: case OBLIQ: P->inv = e_inverse; P->fwd = e_forward; P->N1 = 1. / sqrt(1. - P->es * P->sinph0 * P->sinph0); P->G = P->sinph0 * (P->He = P->e / sqrt(P->one_es)); P->He *= P->cosph0; break; } P->inv = e_inverse; P->fwd = e_forward; } } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_airy.c000066400000000000000000000070551307545355600172610ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the airy (Airy) projection. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double p_halfpi; \ double sinph0; \ double cosph0; \ double Cb; \ int mode; \ int no_cut; /* do not cut at hemisphere limit */ #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_airy.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(airy, "Airy") "\n\tMisc Sph, no inv.\n\tno_cut lat_b="; # define EPS 1.e-10 # define N_POLE 0 # define S_POLE 1 # define EQUIT 2 # define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double sinlam, coslam, cosphi, sinphi, t, s, Krho, cosz; sinlam = sin(lp.lam); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: case OBLIQ: sinphi = sin(lp.phi); cosphi = cos(lp.phi); cosz = cosphi * coslam; if (P->mode == OBLIQ) cosz = P->sinph0 * sinphi + P->cosph0 * cosz; if (!P->no_cut && cosz < -EPS) F_ERROR; if (fabs(s = 1. - cosz) > EPS) { t = 0.5 * (1. + cosz); Krho = -log(t)/s - P->Cb / t; } else Krho = 0.5 - P->Cb; xy.x = Krho * cosphi * sinlam; if (P->mode == OBLIQ) xy.y = Krho * (P->cosph0 * sinphi - P->sinph0 * cosphi * coslam); else xy.y = Krho * sinphi; break; case S_POLE: case N_POLE: lp.phi = fabs(P->p_halfpi - lp.phi); if (!P->no_cut && (lp.phi - EPS) > HALFPI) F_ERROR; if ((lp.phi *= 0.5) > EPS) { t = tan(lp.phi); Krho = -2.*(log(cos(lp.phi)) / t + t * P->Cb); xy.x = Krho * sinlam; xy.y = Krho * coslam; if (P->mode == N_POLE) xy.y = -xy.y; } else xy.x = xy.y = 0.; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(airy) double beta; P->no_cut = pj_param(P->params, "bno_cut").i; beta = 0.5 * (HALFPI - pj_param(P->params, "rlat_b").f); if (fabs(beta) < EPS) P->Cb = -0.5; else { P->Cb = 1./tan(beta); P->Cb *= P->Cb * log(cos(beta)); } if (fabs(fabs(P->phi0) - HALFPI) < EPS) if (P->phi0 < 0.) { P->p_halfpi = -HALFPI; P->mode = S_POLE; } else { P->p_halfpi = HALFPI; P->mode = N_POLE; } else { if (fabs(P->phi0) < EPS) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } } P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_aitoff.c000066400000000000000000000051131307545355600175560ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the aitoff (Aitoff) and wintri (Winkel Tripel) * projections. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double cosphi1; \ int mode; #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_aitoff.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(aitoff, "Aitoff") "\n\tMisc Sph"; PROJ_HEAD(wintri, "Winkel Tripel") "\n\tMisc Sph\n\tlat_1"; FORWARD(s_forward); /* spheroid */ double c, d; if((d = acos(cos(lp.phi) * cos(c = 0.5 * lp.lam)))) {/* basic Aitoff */ xy.x = 2. * d * cos(lp.phi) * sin(c) * (xy.y = 1. / sin(d)); xy.y *= d * sin(lp.phi); } else xy.x = xy.y = 0.; if (P->mode) { /* Winkel Tripel */ xy.x = (xy.x + lp.lam * P->cosphi1) * 0.5; xy.y = (xy.y + lp.phi) * 0.5; } return (xy); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->inv = 0; P->fwd = s_forward; P->es = 0.; return P; } ENTRY0(aitoff) P->mode = 0; ENDENTRY(setup(P)) ENTRY0(wintri) P->mode = 1; if (pj_param(P->params, "tlat_1").i) { if ((P->cosphi1 = cos(pj_param(P->params, "rlat_1").f)) == 0.) E_ERROR(-22) } else /* 50d28' or acos(2/pi) */ P->cosphi1 = 0.636619772367581343; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_august.c000066400000000000000000000010501307545355600176120ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(august, "August Epicycloidal") "\n\tMisc Sph, no inv."; #define M 1.333333333333333 FORWARD(s_forward); /* spheroid */ double t, c1, c, x1, x12, y1, y12; t = tan(.5 * lp.phi); c1 = sqrt(1. - t * t); c = 1. + c1 * cos(lp.lam *= .5); x1 = sin(lp.lam) * c1 / c; y1 = t / c; xy.x = M * x1 * (3. + (x12 = x1 * x1) - 3. * (y12 = y1 * y1)); xy.y = M * y1 * (3. + 3. * x12 - y12); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(august) P->inv = 0; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_bacon.c000066400000000000000000000017541307545355600173770ustar00rootroot00000000000000# define HLFPI2 2.46740110027233965467 # define EPS 1e-10 #define PROJ_PARMS__ \ int bacn; \ int ortl; #define PJ_LIB__ #include PROJ_HEAD(apian, "Apian Globular I") "\n\tMisc Sph, no inv."; PROJ_HEAD(ortel, "Ortelius Oval") "\n\tMisc Sph, no inv."; PROJ_HEAD(bacon, "Bacon Globular") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* spheroid */ double ax, f; xy.y = P->bacn ? HALFPI * sin(lp.phi) : lp.phi; if ((ax = fabs(lp.lam)) >= EPS) { if (P->ortl && ax >= HALFPI) xy.x = sqrt(HLFPI2 - lp.phi * lp.phi + EPS) + ax - HALFPI; else { f = 0.5 * (HLFPI2 / ax + ax); xy.x = ax - f + sqrt(f * f - xy.y * xy.y); } if (lp.lam < 0.) xy.x = - xy.x; } else xy.x = 0.; return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(bacon) P->bacn = 1; P->ortl = 0; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) ENTRY0(apian) P->bacn = P->ortl = 0; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) ENTRY0(ortel) P->bacn = 0; P->ortl = 1; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_bipc.c000066400000000000000000000062031307545355600172240ustar00rootroot00000000000000#define PROJ_PARMS__ \ int noskew; #define PJ_LIB__ # include PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") "\n\tConic Sph."; # define EPS 1e-10 # define EPS10 1e-10 # define ONEEPS 1.000000001 # define NITER 10 # define lamB -.34894976726250681539 # define n .63055844881274687180 # define F 1.89724742567461030582 # define Azab .81650043674686363166 # define Azba 1.82261843856185925133 # define T 1.27246578267089012270 # define rhoc 1.20709121521568721927 # define cAzc .69691523038678375519 # define sAzc .71715351331143607555 # define C45 .70710678118654752469 # define S45 .70710678118654752410 # define C20 .93969262078590838411 # define S20 -.34202014332566873287 # define R110 1.91986217719376253360 # define R104 1.81514242207410275904 FORWARD(s_forward); /* spheroid */ double cphi, sphi, tphi, t, al, Az, z, Av, cdlam, sdlam, r; int tag; cphi = cos(lp.phi); sphi = sin(lp.phi); cdlam = cos(sdlam = lamB - lp.lam); sdlam = sin(sdlam); if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { Az = lp.phi < 0. ? PI : 0.; tphi = HUGE_VAL; } else { tphi = sphi / cphi; Az = atan2(sdlam , C45 * (tphi - cdlam)); } if( (tag = (Az > Azba)) ) { cdlam = cos(sdlam = lp.lam + R110); sdlam = sin(sdlam); z = S20 * sphi + C20 * cphi * cdlam; if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) F_ERROR else z = z < 0. ? -1. : 1.; } else z = acos(z); if (tphi != HUGE_VAL) Az = atan2(sdlam, (C20 * tphi - S20 * cdlam)); Av = Azab; xy.y = rhoc; } else { z = S45 * (sphi + cphi * cdlam); if (fabs(z) > 1.) { if (fabs(z) > ONEEPS) F_ERROR else z = z < 0. ? -1. : 1.; } else z = acos(z); Av = Azba; xy.y = -rhoc; } if (z < 0.) F_ERROR; r = F * (t = pow(tan(.5 * z), n)); if ((al = .5 * (R104 - z)) < 0.) F_ERROR; al = (t + pow(al, n)) / T; if (fabs(al) > 1.) { if (fabs(al) > ONEEPS) F_ERROR else al = al < 0. ? -1. : 1.; } else al = acos(al); if (fabs(t = n * (Av - Az)) < al) r /= cos(al + (tag ? t : -t)); xy.x = r * sin(t); xy.y += (tag ? -r : r) * cos(t); if (P->noskew) { t = xy.x; xy.x = -xy.x * cAzc - xy.y * sAzc; xy.y = -xy.y * cAzc + t * sAzc; } return (xy); } INVERSE(s_inverse); /* spheroid */ double t, r, rp, rl, al, z, fAz, Az, s, c, Av; int neg, i; if (P->noskew) { t = xy.x; xy.x = -xy.x * cAzc + xy.y * sAzc; xy.y = -xy.y * cAzc - t * sAzc; } if( (neg = (xy.x < 0.)) ) { xy.y = rhoc - xy.y; s = S20; c = C20; Av = Azab; } else { xy.y += rhoc; s = S45; c = C45; Av = Azba; } rl = rp = r = hypot(xy.x, xy.y); fAz = fabs(Az = atan2(xy.x, xy.y)); for (i = NITER; i ; --i) { z = 2. * atan(pow(r / F,1 / n)); al = acos((pow(tan(.5 * z), n) + pow(tan(.5 * (R104 - z)), n)) / T); if (fAz < al) r = rp * cos(al + (neg ? Az : -Az)); if (fabs(rl - r) < EPS) break; rl = r; } if (! i) I_ERROR; Az = Av - Az / n; lp.phi = asin(s * cos(z) + c * sin(z) * cos(Az)); lp.lam = atan2(sin(Az), c / tan(z) - s * cos(Az)); if (neg) lp.lam -= R110; else lp.lam = lamB - lp.lam; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(bipc) P->noskew = pj_param(P->params, "bns").i; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_boggs.c000066400000000000000000000014351307545355600174120ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(boggs, "Boggs Eumorphic") "\n\tPCyl., no inv., Sph."; # define NITER 20 # define EPS 1e-7 # define ONETOL 1.000001 # define FXC 2.00276 # define FXC2 1.11072 # define FYC 0.49931 # define FYC2 1.41421356237309504880 FORWARD(s_forward); /* spheroid */ double theta, th1, c; int i; theta = lp.phi; if (fabs(fabs(lp.phi) - HALFPI) < EPS) xy.x = 0.; else { c = sin(theta) * PI; for (i = NITER; i; --i) { theta -= th1 = (theta + sin(theta) - c) / (1. + cos(theta)); if (fabs(th1) < EPS) break; } theta *= 0.5; xy.x = FXC * lp.lam / (1. / cos(lp.phi) + FXC2 / cos(theta)); } xy.y = FYC * (lp.phi + FYC2 * sin(theta)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(boggs) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_bonne.c000066400000000000000000000036611307545355600174150ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phi1; \ double cphi1; \ double am1; \ double m1; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") "\n\tConic Sph&Ell\n\tlat_1="; #define EPS10 1e-10 FORWARD(e_forward); /* ellipsoid */ double rh, E, c; rh = P->am1 + P->m1 - pj_mlfn(lp.phi, E = sin(lp.phi), c = cos(lp.phi), P->en); E = c * lp.lam / (rh * sqrt(1. - P->es * E * E)); xy.x = rh * sin(E); xy.y = P->am1 - rh * cos(E); return (xy); } FORWARD(s_forward); /* spheroid */ double E, rh; rh = P->cphi1 + P->phi1 - lp.phi; if (fabs(rh) > EPS10) { xy.x = rh * sin(E = lp.lam * cos(lp.phi) / rh); xy.y = P->cphi1 - rh * cos(E); } else xy.x = xy.y = 0.; return (xy); } INVERSE(s_inverse); /* spheroid */ double rh; rh = hypot(xy.x, xy.y = P->cphi1 - xy.y); lp.phi = P->cphi1 + P->phi1 - rh; if (fabs(lp.phi) > HALFPI) I_ERROR; if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) lp.lam = 0.; else lp.lam = rh * atan2(xy.x, xy.y) / cos(lp.phi); return (lp); } INVERSE(e_inverse); /* ellipsoid */ double s, rh; rh = hypot(xy.x, xy.y = P->am1 - xy.y); lp.phi = pj_inv_mlfn(P->am1 + P->m1 - rh, P->es, P->en); if ((s = fabs(lp.phi)) < HALFPI) { s = sin(lp.phi); lp.lam = rh * atan2(xy.x, xy.y) * sqrt(1. - P->es * s * s) / cos(lp.phi); } else if (fabs(s - HALFPI) <= EPS10) lp.lam = 0.; else I_ERROR; return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(bonne, en) double c; P->phi1 = pj_param(P->params, "rlat_1").f; if (fabs(P->phi1) < EPS10) E_ERROR(-23); if (P->es) { P->en = pj_enfn(P->es); P->m1 = pj_mlfn(P->phi1, P->am1 = sin(P->phi1), c = cos(P->phi1), P->en); P->am1 = c / (sqrt(1. - P->es * P->am1 * P->am1) * P->am1); P->inv = e_inverse; P->fwd = e_forward; } else { if (fabs(P->phi1) + EPS10 >= HALFPI) P->cphi1 = 0.; else P->cphi1 = 1. / tan(P->phi1); P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_cass.c000066400000000000000000000037571307545355600172530ustar00rootroot00000000000000#define PROJ_PARMS__ \ double m0; \ double n; \ double t; \ double a1; \ double c; \ double r; \ double dd; \ double d2; \ double a2; \ double tn; \ double *en; #define PJ_LIB__ # include PROJ_HEAD(cass, "Cassini") "\n\tCyl, Sph&Ell"; # define EPS10 1e-10 # define C1 .16666666666666666666 # define C2 .00833333333333333333 # define C3 .04166666666666666666 # define C4 .33333333333333333333 # define C5 .06666666666666666666 FORWARD(e_forward); /* ellipsoid */ xy.y = pj_mlfn(lp.phi, P->n = sin(lp.phi), P->c = cos(lp.phi), P->en); P->n = 1./sqrt(1. - P->es * P->n * P->n); P->tn = tan(lp.phi); P->t = P->tn * P->tn; P->a1 = lp.lam * P->c; P->c *= P->es * P->c / (1 - P->es); P->a2 = P->a1 * P->a1; xy.x = P->n * P->a1 * (1. - P->a2 * P->t * (C1 - (8. - P->t + 8. * P->c) * P->a2 * C2)); xy.y -= P->m0 - P->n * P->tn * P->a2 * (.5 + (5. - P->t + 6. * P->c) * P->a2 * C3); return (xy); } FORWARD(s_forward); /* spheroid */ xy.x = asin(cos(lp.phi) * sin(lp.lam)); xy.y = atan2(tan(lp.phi) , cos(lp.lam)) - P->phi0; return (xy); } INVERSE(e_inverse); /* ellipsoid */ double ph1; ph1 = pj_inv_mlfn(P->m0 + xy.y, P->es, P->en); P->tn = tan(ph1); P->t = P->tn * P->tn; P->n = sin(ph1); P->r = 1. / (1. - P->es * P->n * P->n); P->n = sqrt(P->r); P->r *= (1. - P->es) * P->n; P->dd = xy.x / P->n; P->d2 = P->dd * P->dd; lp.phi = ph1 - (P->n * P->tn / P->r) * P->d2 * (.5 - (1. + 3. * P->t) * P->d2 * C3); lp.lam = P->dd * (1. + P->t * P->d2 * (-C4 + (1. + 3. * P->t) * P->d2 * C5)) / cos(ph1); return (lp); } INVERSE(s_inverse); /* spheroid */ lp.phi = asin(sin(P->dd = xy.y + P->phi0) * cos(xy.x)); lp.lam = atan2(tan(xy.x), cos(P->dd)); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(cass, en) if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->m0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->inv = e_inverse; P->fwd = e_forward; } else { P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_cc.c000066400000000000000000000007431307545355600166770ustar00rootroot00000000000000#define PROJ_PARMS__ \ double ap; #define PJ_LIB__ #include PROJ_HEAD(cc, "Central Cylindrical") "\n\tCyl, Sph"; #define EPS10 1.e-10 FORWARD(s_forward); /* spheroid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = lp.lam; xy.y = tan(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = atan(xy.y); lp.lam = xy.x; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(cc) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_cea.c000066400000000000000000000024511307545355600170400ustar00rootroot00000000000000#define PROJ_PARMS__ \ double qp; \ double *apa; #define PJ_LIB__ # include PROJ_HEAD(cea, "Equal Area Cylindrical") "\n\tCyl, Sph&Ell\n\tlat_ts="; # define EPS 1e-10 FORWARD(e_forward); /* spheroid */ xy.x = P->k0 * lp.lam; xy.y = .5 * pj_qsfn(sin(lp.phi), P->e, P->one_es) / P->k0; return (xy); } FORWARD(s_forward); /* spheroid */ xy.x = P->k0 * lp.lam; xy.y = sin(lp.phi) / P->k0; return (xy); } INVERSE(e_inverse); /* spheroid */ lp.phi = pj_authlat(asin( 2. * xy.y * P->k0 / P->qp), P->apa); lp.lam = xy.x / P->k0; return (lp); } INVERSE(s_inverse); /* spheroid */ double t; if ((t = fabs(xy.y *= P->k0)) - EPS <= 1.) { if (t >= 1.) lp.phi = xy.y < 0. ? -HALFPI : HALFPI; else lp.phi = asin(xy.y); lp.lam = xy.x / P->k0; } else I_ERROR; return (lp); } FREEUP; if (P) { if (P->apa) pj_dalloc(P->apa); pj_dalloc(P); } } ENTRY1(cea, apa) double t; if (pj_param(P->params, "tlat_ts").i && (P->k0 = cos(t = pj_param(P->params, "rlat_ts").f)) < 0.) E_ERROR(-24) else t = 0.; if (P->es) { t = sin(t); P->k0 /= sqrt(1. - P->es * t * t); P->e = sqrt(P->es); if (!(P->apa = pj_authset(P->es))) E_ERROR_0; P->qp = pj_qsfn(1., P->e, P->one_es); P->inv = e_inverse; P->fwd = e_forward; } else { P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_chamb.c000066400000000000000000000063341307545355600173660ustar00rootroot00000000000000typedef struct { double r, Az; } VECT; #define PROJ_PARMS__ \ struct { /* control point data */ \ double phi, lam; \ double cosphi, sinphi; \ VECT v; \ XY p; \ double Az; \ } c[3]; \ XY p; \ double beta_0, beta_1, beta_2; #define PJ_LIB__ #include PROJ_HEAD(chamb, "Chamberlin Trimetric") "\n\tMisc Sph, no inv." "\n\tlat_1= lon_1= lat_2= lon_2= lat_3= lon_3="; #include #define THIRD 0.333333333333333333 #define TOL 1e-9 static VECT /* distance and azimuth from point 1 to point 2 */ vect(double dphi, double c1, double s1, double c2, double s2, double dlam) { VECT v; double cdl, dp, dl; cdl = cos(dlam); if (fabs(dphi) > 1. || fabs(dlam) > 1.) v.r = aacos(s1 * s2 + c1 * c2 * cdl); else { /* more accurate for smaller distances */ dp = sin(.5 * dphi); dl = sin(.5 * dlam); v.r = 2. * aasin(sqrt(dp * dp + c1 * c2 * dl * dl)); } if (fabs(v.r) > TOL) v.Az = atan2(c2 * sin(dlam), c1 * s2 - s1 * c2 * cdl); else v.r = v.Az = 0.; return v; } static double /* law of cosines */ lc(double b,double c,double a) { return aacos(.5 * (b * b + c * c - a * a) / (b * c)); } FORWARD(s_forward); /* spheroid */ double sinphi, cosphi, a; VECT v[3]; int i, j; sinphi = sin(lp.phi); cosphi = cos(lp.phi); for (i = 0; i < 3; ++i) { /* dist/azimiths from control */ v[i] = vect(lp.phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, cosphi, sinphi, lp.lam - P->c[i].lam); if ( ! v[i].r) break; v[i].Az = adjlon(v[i].Az - P->c[i].v.Az); } if (i < 3) /* current point at control point */ xy = P->c[i].p; else { /* point mean of intersepts */ xy = P->p; for (i = 0; i < 3; ++i) { j = i == 2 ? 0 : i + 1; a = lc(P->c[i].v.r, v[i].r, v[j].r); if (v[i].Az < 0.) a = -a; if (! i) { /* coord comp unique to each arc */ xy.x += v[i].r * cos(a); xy.y -= v[i].r * sin(a); } else if (i == 1) { a = P->beta_1 - a; xy.x -= v[i].r * cos(a); xy.y -= v[i].r * sin(a); } else { a = P->beta_2 - a; xy.x += v[i].r * cos(a); xy.y += v[i].r * sin(a); } } xy.x *= THIRD; /* mean of arc intercepts */ xy.y *= THIRD; } return xy; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(chamb) int i, j; char line[10]; for (i = 0; i < 3; ++i) { /* get control point locations */ (void)sprintf(line, "rlat_%d", i+1); P->c[i].phi = pj_param(P->params, line).f; (void)sprintf(line, "rlon_%d", i+1); P->c[i].lam = pj_param(P->params, line).f; P->c[i].lam = adjlon(P->c[i].lam - P->lam0); P->c[i].cosphi = cos(P->c[i].phi); P->c[i].sinphi = sin(P->c[i].phi); } for (i = 0; i < 3; ++i) { /* inter ctl pt. distances and azimuths */ j = i == 2 ? 0 : i + 1; P->c[i].v = vect(P->c[j].phi - P->c[i].phi, P->c[i].cosphi, P->c[i].sinphi, P->c[j].cosphi, P->c[j].sinphi, P->c[j].lam - P->c[i].lam); if (! P->c[i].v.r) E_ERROR(-25); /* co-linearity problem ignored for now */ } P->beta_0 = lc(P->c[0].v.r, P->c[2].v.r, P->c[1].v.r); P->beta_1 = lc(P->c[0].v.r, P->c[1].v.r, P->c[2].v.r); P->beta_2 = PI - P->beta_0; P->p.y = 2. * (P->c[0].p.y = P->c[1].p.y = P->c[2].v.r * sin(P->beta_0)); P->c[2].p.y = 0.; P->c[0].p.x = - (P->c[1].p.x = 0.5 * P->c[0].v.r); P->p.x = P->c[2].p.x = P->c[0].p.x + P->c[2].v.r * cos(P->beta_0); P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_collg.c000066400000000000000000000014601307545355600174070ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(collg, "Collignon") "\n\tPCyl, Sph."; #define FXC 1.12837916709551257390 #define FYC 1.77245385090551602729 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ if ((xy.y = 1. - sin(lp.phi)) <= 0.) xy.y = 0.; else xy.y = sqrt(xy.y); xy.x = FXC * lp.lam * xy.y; xy.y = FYC * (1. - xy.y); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FYC - 1.; if (fabs(lp.phi = 1. - lp.phi * lp.phi) < 1.) lp.phi = asin(lp.phi); else if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; if ((lp.lam = 1. - sin(lp.phi)) <= 0.) lp.lam = 0.; else lp.lam = xy.x / (FXC * sqrt(lp.lam)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(collg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_crast.c000066400000000000000000000012651307545355600174260ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") "\n\tPCyl., Sph."; #define XM 0.97720502380583984317 #define RXM 1.02332670794648848847 #define YM 3.06998012383946546542 #define RYM 0.32573500793527994772 #define THIRD 0.333333333333333333 FORWARD(s_forward); /* spheroid */ lp.phi *= THIRD; xy.x = XM * lp.lam * (2. * cos(lp.phi + lp.phi) - 1.); xy.y = YM * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = 3. * asin(xy.y * RYM); lp.lam = xy.x * RXM / (2. * cos((lp.phi + lp.phi) * THIRD) - 1); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(crast) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_denoy.c000066400000000000000000000010351307545355600174230ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") "\n\tPCyl., no inv., Sph."; #define C0 0.95 #define C1 -.08333333333333333333 #define C3 .00166666666666666666 #define D1 0.9 #define D5 0.03 FORWARD(s_forward); /* spheroid */ xy.y = lp.phi; xy.x = lp.lam; lp.lam = fabs(lp.lam); xy.x *= cos((C0 + lp.lam * (C1 + lp.lam * lp.lam * C3)) * (lp.phi * (D1 + D5 * lp.phi * lp.phi * lp.phi * lp.phi))); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(denoy) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eck1.c000066400000000000000000000007671307545355600171430ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(eck1, "Eckert I") "\n\tPCyl., Sph."; #define FC .92131773192356127802 #define RP .31830988618379067154 FORWARD(s_forward); /* spheroid */ xy.x = FC * lp.lam * (1. - RP * fabs(lp.phi)); xy.y = FC * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FC; lp.lam = xy.x / (FC * (1. - RP * fabs(lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck1) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eck2.c000066400000000000000000000015071307545355600171350ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(eck2, "Eckert II") "\n\tPCyl. Sph."; #define FXC 0.46065886596178063902 #define FYC 1.44720250911653531871 #define C13 0.33333333333333333333 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ xy.x = FXC * lp.lam * (xy.y = sqrt(4. - 3. * sin(fabs(lp.phi)))); xy.y = FYC * (2. - xy.y); if ( lp.phi < 0.) xy.y = -xy.y; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x / (FXC * ( lp.phi = 2. - fabs(xy.y) / FYC) ); lp.phi = (4. - lp.phi * lp.phi) * C13; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); if (xy.y < 0) lp.phi = -lp.phi; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck2); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eck3.c000066400000000000000000000023101307545355600171270ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x, C_y, A, B; #define PJ_LIB__ #include PROJ_HEAD(eck3, "Eckert III") "\n\tPCyl, Sph."; PROJ_HEAD(putp1, "Putnins P1") "\n\tPCyl, Sph."; PROJ_HEAD(wag6, "Wagner VI") "\n\tPCyl, Sph."; PROJ_HEAD(kav7, "Kavraisky VII") "\n\tPCyl, Sph."; FORWARD(s_forward); /* spheroid */ xy.y = P->C_y * lp.phi; xy.x = P->C_x * lp.lam * (P->A + asqrt(1. - P->B * lp.phi * lp.phi)); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / P->C_y; lp.lam = xy.x / (P->C_x * (P->A + asqrt(1. - P->B * lp.phi * lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(eck3) P->C_x = .42223820031577120149; P->C_y = .84447640063154240298; P->A = 1.; P->B = 0.4052847345693510857755; ENDENTRY(setup(P)) ENTRY0(kav7) P->C_x = 0.2632401569273184856851; P->C_x = 0.8660254037844; P->C_y = 1.; P->A = 0.; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) ENTRY0(wag6); P->C_x = P->C_y = 0.94745; P->A = 0.; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) ENTRY0(putp1); P->C_x = 1.89490; P->C_y = 0.94745; P->A = -0.5; P->B = 0.30396355092701331433; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_eck4.c000066400000000000000000000021371307545355600171370ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(eck4, "Eckert IV") "\n\tPCyl, Sph."; #define C_x .42223820031577120149 #define C_y 1.32650042817700232218 #define RC_y .75386330736002178205 #define C_p 3.57079632679489661922 #define RC_p .28004957675577868795 #define EPS 1e-7 #define NITER 6 FORWARD(s_forward); /* spheroid */ double p, V, s, c; int i; p = C_p * sin(lp.phi); V = lp.phi * lp.phi; lp.phi *= 0.895168 + V * ( 0.0218849 + V * 0.00826809 ); for (i = NITER; i ; --i) { c = cos(lp.phi); s = sin(lp.phi); lp.phi -= V = (lp.phi + s * (c + 2.) - p) / (1. + c * (c + 2.) - s * s); if (fabs(V) < EPS) break; } if (!i) { xy.x = C_x * lp.lam; xy.y = lp.phi < 0. ? -C_y : C_y; } else { xy.x = C_x * lp.lam * (1. + cos(lp.phi)); xy.y = C_y * sin(lp.phi); } return (xy); } INVERSE(s_inverse); /* spheroid */ double c; lp.phi = aasin(xy.y / C_y); lp.lam = xy.x / (C_x * (1. + (c = cos(lp.phi)))); lp.phi = aasin((lp.phi + sin(lp.phi) * (c + 2.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck4); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eck5.c000066400000000000000000000010531307545355600171340ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(eck5, "Eckert V") "\n\tPCyl, Sph."; #define XF 0.44101277172455148219 #define RXF 2.26750802723822639137 #define YF 0.88202554344910296438 #define RYF 1.13375401361911319568 FORWARD(s_forward); /* spheroid */ xy.x = XF * (1. + cos(lp.phi)) * lp.lam; xy.y = YF * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = RXF * xy.x / (1. + cos( lp.phi = RYF * xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eck5); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eqc.c000066400000000000000000000010541307545355600170560ustar00rootroot00000000000000#define PROJ_PARMS__ \ double rc; #define PJ_LIB__ # include PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") "\n\tCyl, Sph\n\tlat_ts=[, lat_0=0]"; FORWARD(s_forward); /* spheroid */ xy.x = P->rc * lp.lam; xy.y = lp.phi - P->phi0; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x / P->rc; lp.phi = xy.y + P->phi0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(eqc) if ((P->rc = cos(pj_param(P->params, "rlat_ts").f)) <= 0.) E_ERROR(-24); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_eqdc.c000066400000000000000000000042571307545355600172320ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phi1; \ double phi2; \ double n; \ double rho; \ double rho0; \ double c; \ double *en; \ int ellips; #define PJ_LIB__ #include PROJ_HEAD(eqdc, "Equidistant Conic") "\n\tConic, Sph&Ell\n\tlat_1= lat_2="; # define EPS10 1.e-10 FORWARD(e_forward); /* sphere & ellipsoid */ P->rho = P->c - (P->ellips ? pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) : lp.phi); xy.x = P->rho * sin( lp.lam *= P->n ); xy.y = P->rho0 - P->rho * cos(lp.lam); return (xy); } INVERSE(e_inverse); /* sphere & ellipsoid */ if ((P->rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0 ) { if (P->n < 0.) { P->rho = -P->rho; xy.x = -xy.x; xy.y = -xy.y; } lp.phi = P->c - P->rho; if (P->ellips) lp.phi = pj_inv_mlfn(lp.phi, P->es, P->en); lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } SPECIAL(fac) { double sinphi, cosphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); fac->code |= IS_ANAL_HK; fac->h = 1.; fac->k = P->n * (P->c - (P->ellips ? pj_mlfn(lp.phi, sinphi, cosphi, P->en) : lp.phi)) / pj_msfn(sinphi, cosphi, P->es); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(eqdc, en) double cosphi, sinphi; int secant; P->phi1 = pj_param(P->params, "rlat_1").f; P->phi2 = pj_param(P->params, "rlat_2").f; if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es > 0.)) ) { double ml1, m1; m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_mlfn(P->phi1, sinphi, cosphi, P->en); if (secant) { /* secant cone */ sinphi = sin(P->phi2); cosphi = cos(P->phi2); P->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (pj_mlfn(P->phi2, sinphi, cosphi, P->en) - ml1); } P->c = ml1 + m1 / P->n; P->rho0 = P->c - pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); } else { if (secant) P->n = (cosphi - cos(P->phi2)) / (P->phi2 - P->phi1); P->c = P->phi1 + cos(P->phi1) / P->n; P->rho0 = P->c - P->phi0; } P->inv = e_inverse; P->fwd = e_forward; P->spc = fac; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_fahey.c000066400000000000000000000010331307545355600173770ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(fahey, "Fahey") "\n\tPcyl, Sph."; #define TOL 1e-6 FORWARD(s_forward); /* spheroid */ xy.y = 1.819152 * ( xy.x = tan(0.5 * lp.phi) ); xy.x = 0.819152 * lp.lam * asqrt(1 - xy.x * xy.x); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = 2. * atan(xy.y /= 1.819152); lp.lam = fabs(xy.y = 1. - xy.y * xy.y) < TOL ? 0. : xy.x / (0.819152 * sqrt(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(fahey) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_fouc_s.c000066400000000000000000000017251307545355600175710ustar00rootroot00000000000000#define PROJ_PARMS__ \ double n, n1; #define PJ_LIB__ #include PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double t; t = cos(lp.phi); xy.x = lp.lam * t / (P->n + P->n1 * t); xy.y = P->n * lp.phi + P->n1 * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double V; int i; if (P->n) { lp.phi = xy.y; for (i = MAX_ITER; i ; --i) { lp.phi -= V = (P->n * lp.phi + P->n1 * sin(lp.phi) - xy.y ) / (P->n + P->n1 * cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = xy.y < 0. ? -HALFPI : HALFPI; } else lp.phi = aasin(xy.y); V = cos(lp.phi); lp.lam = xy.x * (P->n + P->n1 * V) / V; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(fouc_s) P->n = pj_param(P->params, "dn").f; if (P->n < 0. || P->n > 1.) E_ERROR(-99) P->n1 = 1. - P->n; P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_gall.c000066400000000000000000000010531307545355600172240ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(gall, "Gall (Gall Stereographic)") "\n\tCyl, Sph"; #define YF 1.70710678118654752440 #define XF 0.70710678118654752440 #define RYF 0.58578643762690495119 #define RXF 1.41421356237309504880 FORWARD(s_forward); /* spheroid */ xy.x = XF * lp.lam; xy.y = YF * tan(.5 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = RXF * xy.x; lp.phi = 2. * atan(xy.y * RYF); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gall) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_geos.c000066400000000000000000000115011307545355600172410ustar00rootroot00000000000000/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2004 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: PJ_geos.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** See also (section 4.4.3.2): ** http://www.eumetsat.int/en/area4/msg/news/us_doc/cgms_03_26.pdf ** ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double h; \ double radius_p; \ double radius_p2; \ double radius_p_inv2; \ double radius_g; \ double radius_g_1; \ double C; #define PJ_LIB__ #include PROJ_HEAD(geos, "Geostationary Satellite View") "\n\tAzi, Sph&Ell\n\th="; FORWARD(s_forward); /* spheroid */ double Vx, Vy, Vz, tmp; /* Calculation of the three components of the vector from satellite to ** position on earth surface (lon,lat).*/ tmp = cos(lp.phi); Vx = cos (lp.lam) * tmp; Vy = sin (lp.lam) * tmp; Vz = sin (lp.phi); /* Check visibility.*/ if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz) < 0.) F_ERROR; /* Calculation based on view angles from satellite.*/ tmp = P->radius_g - Vx; xy.x = P->radius_g_1 * atan(Vy / tmp); xy.y = P->radius_g_1 * atan(Vz / hypot(Vy, tmp)); return (xy); } FORWARD(e_forward); /* ellipsoid */ double r, Vx, Vy, Vz, tmp; /* Calculation of geocentric latitude. */ lp.phi = atan (P->radius_p2 * tan (lp.phi)); /* Calculation of the three components of the vector from satellite to ** position on earth surface (lon,lat).*/ r = (P->radius_p) / hypot(P->radius_p * cos (lp.phi), sin (lp.phi)); Vx = r * cos (lp.lam) * cos (lp.phi); Vy = r * sin (lp.lam) * cos (lp.phi); Vz = r * sin (lp.phi); /* Check visibility. */ if (((P->radius_g - Vx) * Vx - Vy * Vy - Vz * Vz * P->radius_p_inv2) < 0.) F_ERROR; /* Calculation based on view angles from satellite. */ tmp = P->radius_g - Vx; xy.x = P->radius_g_1 * atan (Vy / tmp); xy.y = P->radius_g_1 * atan (Vz / hypot (Vy, tmp)); return (xy); } INVERSE(s_inverse); /* spheroid */ double Vx, Vy, Vz, a, b, c, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; Vy = tan (xy.x / (P->radius_g - 1.0)); Vz = tan (xy.y / (P->radius_g - 1.0)) * sqrt (1.0 + Vy * Vy); /* Calculation of terms in cubic equation and determinant.*/ a = Vy * Vy + Vz * Vz + Vx * Vx; b = 2 * P->radius_g * Vx; if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; /* Calculation of three components of vector from satellite to position.*/ k = (-b - sqrt(det)) / (2 * a); Vx = P->radius_g + k * Vx; Vy *= k; Vz *= k; /* Calculation of longitude and latitude.*/ lp.lam = atan2 (Vy, Vx); lp.phi = atan (Vz * cos (lp.lam) / Vx); return (lp); } INVERSE(e_inverse); /* ellipsoid */ double Vx, Vy, Vz, a, b, c, det, k; /* Setting three components of vector from satellite to position.*/ Vx = -1.0; Vy = tan (xy.x / P->radius_g_1); Vz = tan (xy.y / P->radius_g_1) * hypot(1.0, Vy); /* Calculation of terms in cubic equation and determinant.*/ a = Vz / P->radius_p; a = Vy * Vy + a * a + Vx * Vx; b = 2 * P->radius_g * Vx; if ((det = (b * b) - 4 * a * P->C) < 0.) I_ERROR; /* Calculation of three components of vector from satellite to position.*/ k = (-b - sqrt(det)) / (2. * a); Vx = P->radius_g + k * Vx; Vy *= k; Vz *= k; /* Calculation of longitude and latitude.*/ lp.lam = atan2 (Vy, Vx); lp.phi = atan (Vz * cos (lp.lam) / Vx); lp.phi = atan (P->radius_p_inv2 * tan (lp.phi)); return (lp); } FREEUP; if (P) free(P); } ENTRY0(geos) if ((P->h = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); if (P->phi0) E_ERROR(-46); P->radius_g = 1. + (P->radius_g_1 = P->h / P->a); P->C = P->radius_g * P->radius_g - 1.0; if (P->es) { P->radius_p = sqrt (P->one_es); P->radius_p2 = P->one_es; P->radius_p_inv2 = P->rone_es; P->inv = e_inverse; P->fwd = e_forward; } else { P->radius_p = P->radius_p2 = P->radius_p_inv2 = 1.0; P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_gins8.c000066400000000000000000000007471307545355600173460ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") "\n\tPCyl, Sph., no inv."; #define Cl 0.000952426 #define Cp 0.162388 #define C12 0.08333333333333333 FORWARD(s_forward); /* spheroid */ double t = lp.phi * lp.phi; xy.y = lp.phi * (1. + t * C12); xy.x = lp.lam * (1. - Cp * t); t = lp.lam * lp.lam; xy.x *= (0.87 - Cl * t * t); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gins8) P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_gn_sinu.c000066400000000000000000000045741307545355600177620ustar00rootroot00000000000000#define PROJ_PARMS__ \ double *en; \ double m, n, C_x, C_y; #define PJ_LIB__ #include PROJ_HEAD(gn_sinu, "General Sinusoidal Series") "\n\tPCyl, Sph.\n\tm= n="; PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") "\n\tPCyl, Sph&Ell"; PROJ_HEAD(eck6, "Eckert VI") "\n\tPCyl, Sph."; PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") "\n\tPCyl, Sph."; #define EPS10 1e-10 #define MAX_ITER 8 #define LOOP_TOL 1e-7 /* Ellipsoidal Sinusoidal only */ FORWARD(e_forward); /* ellipsoid */ double s, c; xy.y = pj_mlfn(lp.phi, s = sin(lp.phi), c = cos(lp.phi), P->en); xy.x = lp.lam * c / sqrt(1. - P->es * s * s); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double s; if ((s = fabs(lp.phi = pj_inv_mlfn(xy.y, P->es, P->en))) < HALFPI) { s = sin(lp.phi); lp.lam = xy.x * sqrt(1. - P->es * s * s) / cos(lp.phi); } else if ((s - EPS10) < HALFPI) lp.lam = 0.; else I_ERROR; return (lp); } /* General spherical sinusoidals */ FORWARD(s_forward); /* sphere */ if (!P->m) lp.phi = P->n != 1. ? aasin(P->n * sin(lp.phi)): lp.phi; else { double k, V; int i; k = P->n * sin(lp.phi); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (P->m * lp.phi + sin(lp.phi) - k) / (P->m + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) F_ERROR } xy.x = P->C_x * lp.lam * (P->m + cos(lp.phi)); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* sphere */ double s; xy.y /= P->C_y; lp.phi = P->m ? aasin((P->m * xy.y + sin(xy.y)) / P->n) : ( P->n != 1. ? aasin(sin(xy.y) / P->n) : xy.y ); lp.lam = xy.x / (P->C_x * (P->m + cos(xy.y))); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static void /* for spheres, only */ setup(PJ *P) { P->es = 0; P->C_x = (P->C_y = sqrt((P->m + 1.) / P->n))/(P->m + 1.); P->inv = s_inverse; P->fwd = s_forward; } ENTRY1(sinu, en) if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (P->es) { P->inv = e_inverse; P->fwd = e_forward; } else { P->n = 1.; P->m = 0.; setup(P); } ENDENTRY(P) ENTRY1(eck6, en) P->m = 1.; P->n = 2.570796326794896619231321691; setup(P); ENDENTRY(P) ENTRY1(mbtfps, en) P->m = 0.5; P->n = 1.785398163397448309615660845; setup(P); ENDENTRY(P) ENTRY1(gn_sinu, en) if (pj_param(P->params, "tn").i && pj_param(P->params, "tm").i) { P->n = pj_param(P->params, "dn").f; P->m = pj_param(P->params, "dm").f; } else E_ERROR(-99) setup(P); ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_gnom.c000066400000000000000000000041571307545355600172550ustar00rootroot00000000000000#define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(gnom, "Gnomonic") "\n\tAzi, Sph."; #define EPS10 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = cosphi * coslam; break; case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; break; case S_POLE: xy.y = - sinphi; break; case N_POLE: xy.y = sinphi; break; } if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = 1. / xy.y) * cosphi * sin(lp.lam); switch (P->mode) { case EQUIT: xy.y *= sinphi; break; case OBLIQ: xy.y *= P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; case S_POLE: xy.y *= cosphi * coslam; break; } return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosz, sinz; rh = hypot(xy.x, xy.y); sinz = sin(lp.phi = atan(rh)); cosz = sqrt(1. - sinz * sinz); if (fabs(rh) <= EPS10) { lp.phi = P->phi0; lp.lam = 0.; } else { switch (P->mode) { case OBLIQ: lp.phi = cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh; if (fabs(lp.phi) >= 1.) lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; xy.x *= sinz * P->cosph0; break; case EQUIT: lp.phi = xy.y * sinz / rh; if (fabs(lp.phi) >= 1.) lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); xy.y = cosz * rh; xy.x *= sinz; break; case S_POLE: lp.phi -= HALFPI; break; case N_POLE: lp.phi = HALFPI - lp.phi; xy.y = -xy.y; break; } lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gnom) if (fabs(fabs(P->phi0) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) < EPS10) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_goode.c000066400000000000000000000020401307545355600173770ustar00rootroot00000000000000#define PROJ_PARMS__ \ struct PJconsts *sinu; \ struct PJconsts *moll; #define PJ_LIB__ #include PROJ_HEAD(goode, "Goode Homolosine") "\n\tPCyl, Sph."; C_NAMESPACE PJ *pj_sinu(PJ *), *pj_moll(PJ *); #define Y_COR 0.05280 #define PHI_LIM .71093078197902358062 FORWARD(s_forward); /* spheroid */ if (fabs(lp.phi) <= PHI_LIM) xy = P->sinu->fwd(lp, P->sinu); else { xy = P->moll->fwd(lp, P->moll); xy.y -= lp.phi >= 0.0 ? Y_COR : -Y_COR; } return (xy); } INVERSE(s_inverse); /* spheroid */ if (fabs(xy.y) <= PHI_LIM) lp = P->sinu->inv(xy, P->sinu); else { xy.y += xy.y >= 0.0 ? Y_COR : -Y_COR; lp = P->moll->inv(xy, P->moll); } return (lp); } FREEUP; if (P) { if (P->sinu) (*(P->sinu->pfree))(P->sinu); if (P->moll) (*(P->moll->pfree))(P->moll); pj_dalloc(P); } } ENTRY2(goode, sinu, moll) P->es = 0.; if (!(P->sinu = pj_sinu(0)) || !(P->moll = pj_moll(0))) E_ERROR_0; if (!(P->sinu = pj_sinu(P->sinu)) || !(P->moll = pj_moll(P->moll))) E_ERROR_0; P->fwd = s_forward; P->inv = s_inverse; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_gstmerc.c000066400000000000000000000043431307545355600177560ustar00rootroot00000000000000#define PROJ_PARMS__ \ double lamc;\ double phic;\ double c;\ double n1;\ double n2;\ double XS;\ double YS; #define PJ_LIB__ # include PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") "\n\tCyl, Sph&Ell\n\tlat_0= lon_0= k_0="; FORWARD(s_forward); /* spheroid */ double L, Ls, sinLs1, Ls1; L= P->n1*lp.lam; Ls= P->c+P->n1*log(pj_tsfn(-1.0*lp.phi,-1.0*sin(lp.phi),P->e)); sinLs1= sin(L)/cosh(Ls); Ls1= log(pj_tsfn(-1.0*asin(sinLs1),0.0,0.0)); xy.x= (P->XS + P->n2*Ls1)*P->ra; xy.y= (P->YS + P->n2*atan(sinh(Ls)/cos(L)))*P->ra; /*fprintf(stderr,"fwd:\nL =%16.13f\nLs =%16.13f\nLs1 =%16.13f\nLP(%16.13f,%16.13f)=XY(%16.4f,%16.4f)\n",L,Ls,Ls1,lp.lam+P->lam0,lp.phi,(xy.x*P->a + P->x0)*P->to_meter,(xy.y*P->a + P->y0)*P->to_meter);*/ return (xy); } INVERSE(s_inverse); /* spheroid */ double L, LC, sinC; L= atan(sinh((xy.x*P->a - P->XS)/P->n2)/cos((xy.y*P->a - P->YS)/P->n2)); sinC= sin((xy.y*P->a - P->YS)/P->n2)/cosh((xy.x*P->a - P->XS)/P->n2); LC= log(pj_tsfn(-1.0*asin(sinC),0.0,0.0)); lp.lam= L/P->n1; lp.phi= -1.0*pj_phi2(exp((LC-P->c)/P->n1),P->e); /*fprintf(stderr,"inv:\nL =%16.13f\nsinC =%16.13f\nLC =%16.13f\nXY(%16.4f,%16.4f)=LP(%16.13f,%16.13f)\n",L,sinC,LC,((xy.x/P->ra)+P->x0)/P->to_meter,((xy.y/P->ra)+P->y0)/P->to_meter,lp.lam+P->lam0,lp.phi);*/ return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(gstmerc) P->lamc= P->lam0; P->n1= sqrt(1.0+P->es*pow(cos(P->phi0),4.0)/(1.0-P->es)); P->phic= asin(sin(P->phi0)/P->n1); P->c= log(pj_tsfn(-1.0*P->phic,0.0,0.0)) -P->n1*log(pj_tsfn(-1.0*P->phi0,-1.0*sin(P->phi0),P->e)); P->n2= P->k0*P->a*sqrt(1.0-P->es)/(1.0-P->es*sin(P->phi0)*sin(P->phi0)); P->XS= 0;/* -P->x0 */ P->YS= -1.0*P->n2*P->phic;/* -P->y0 */ P->inv= s_inverse; P->fwd= s_forward; /*fprintf(stderr,"a (m) =%16.4f\ne =%16.13f\nl0(rad)=%16.13f\np0(rad)=%16.13f\nk0 =%16.4f\nX0 (m)=%16.4f\nY0 (m)=%16.4f\n\nlC(rad)=%16.13f\npC(rad)=%16.13f\nc =%16.13f\nn1 =%16.13f\nn2 (m) =%16.4f\nXS (m) =%16.4f\nYS (m) =%16.4f\n", P->a, P->e, P->lam0, P->phi0, P->k0, P->x0, P->y0, P->lamc, P->phic, P->c, P->n1, P->n2, P->XS +P->x0, P->YS + P->y0);*/ ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_hammer.c000066400000000000000000000014001307545355600175520ustar00rootroot00000000000000#define PROJ_PARMS__ \ double w; \ double m, rm; #define PJ_LIB__ # include PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") "\n\tMisc Sph, no inv.\n\tW= M="; FORWARD(s_forward); /* spheroid */ double cosphi, d; d = sqrt(2./(1. + (cosphi = cos(lp.phi)) * cos(lp.lam *= P->w))); xy.x = P->m * d * cosphi * sin(lp.lam); xy.y = P->rm * d * sin(lp.phi); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(hammer) if (pj_param(P->params, "tW").i) { if ((P->w = fabs(pj_param(P->params, "dW").f)) <= 0.) E_ERROR(-27); } else P->w = .5; if (pj_param(P->params, "tM").i) { if ((P->m = fabs(pj_param(P->params, "dM").f)) <= 0.) E_ERROR(-27); } else P->m = 1.; P->rm = 1. / P->m; P->m /= P->w; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_hatano.c000066400000000000000000000025111307545355600175570ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") "\n\tPCyl, Sph."; #define NITER 20 #define EPS 1e-7 #define ONETOL 1.000001 #define CN 2.67595 #define CS 2.43763 #define RCN 0.37369906014686373063 #define RCS 0.41023453108141924738 #define FYCN 1.75859 #define FYCS 1.93052 #define RYCN 0.56863737426006061674 #define RYCS 0.51799515156538134803 #define FXC 0.85 #define RXC 1.17647058823529411764 FORWARD(s_forward); /* spheroid */ double th1, c; int i; c = sin(lp.phi) * (lp.phi < 0. ? CS : CN); for (i = NITER; i; --i) { lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi)); if (fabs(th1) < EPS) break; } xy.x = FXC * lp.lam * cos(lp.phi *= .5); xy.y = sin(lp.phi) * (lp.phi < 0. ? FYCS : FYCN); return (xy); } INVERSE(s_inverse); /* spheroid */ double th; th = xy.y * ( xy.y < 0. ? RYCS : RYCN); if (fabs(th) > 1.) if (fabs(th) > ONETOL) I_ERROR else th = th > 0. ? HALFPI : - HALFPI; else th = asin(th); lp.lam = RXC * xy.x / cos(th); th += th; lp.phi = (th + sin(th)) * (xy.y < 0. ? RCS : RCN); if (fabs(lp.phi) > 1.) if (fabs(lp.phi) > ONETOL) I_ERROR else lp.phi = lp.phi > 0. ? HALFPI : - HALFPI; else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(hatano) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_imw_p.c000066400000000000000000000072131307545355600174240ustar00rootroot00000000000000#define PROJ_PARMS__ \ double P, Pp, Q, Qp, R_1, R_2, sphi_1, sphi_2, C2; \ double phi_1, phi_2, lam_1; \ double *en; \ int mode; /* = 0, phi_1 and phi_2 != 0, = 1, phi_1 = 0, = -1 phi_2 = 0 */ #define PJ_LIB__ #include PROJ_HEAD(imw_p, "International Map of the World Polyconic") "\n\tMod. Polyconic, Ell\n\tlat_1= and lat_2= [lon_1=]"; #define TOL 1e-10 #define EPS 1e-10 static int phi12(PJ *P, double *del, double *sig) { int err = 0; if (!pj_param(P->params, "tlat_1").i || !pj_param(P->params, "tlat_2").i) { err = -41; } else { P->phi_1 = pj_param(P->params, "rlat_1").f; P->phi_2 = pj_param(P->params, "rlat_2").f; *del = 0.5 * (P->phi_2 - P->phi_1); *sig = 0.5 * (P->phi_2 + P->phi_1); err = (fabs(*del) < EPS || fabs(*sig) < EPS) ? -42 : 0; } return err; } static XY loc_for(LP lp, PJ *P, double *yc) { XY xy; if (! lp.phi) { xy.x = lp.lam; xy.y = 0.; } else { double xa, ya, xb, yb, xc, D, B, m, sp, t, R, C; sp = sin(lp.phi); m = pj_mlfn(lp.phi, sp, cos(lp.phi), P->en); xa = P->Pp + P->Qp * m; ya = P->P + P->Q * m; R = 1. / (tan(lp.phi) * sqrt(1. - P->es * sp * sp)); C = sqrt(R * R - xa * xa); if (lp.phi < 0.) C = - C; C += ya - R; if (P->mode < 0) { xb = lp.lam; yb = P->C2; } else { t = lp.lam * P->sphi_2; xb = P->R_2 * sin(t); yb = P->C2 + P->R_2 * (1. - cos(t)); } if (P->mode > 0) { xc = lp.lam; *yc = 0.; } else { t = lp.lam * P->sphi_1; xc = P->R_1 * sin(t); *yc = P->R_1 * (1. - cos(t)); } D = (xb - xc)/(yb - *yc); B = xc + D * (C + R - *yc); xy.x = D * sqrt(R * R * (1 + D * D) - B * B); if (lp.phi > 0) xy.x = - xy.x; xy.x = (B + xy.x) / (1. + D * D); xy.y = sqrt(R * R - xy.x * xy.x); if (lp.phi > 0) xy.y = - xy.y; xy.y += C + R; } return (xy); } FORWARD(e_forward); /* ellipsoid */ double yc; xy = loc_for(lp, P, &yc); return (xy); } INVERSE(e_inverse); /* ellipsoid */ XY t; double yc; lp.phi = P->phi_2; lp.lam = xy.x / cos(lp.phi); do { t = loc_for(lp, P, &yc); lp.phi = ((lp.phi - P->phi_1) * (xy.y - yc) / (t.y - yc)) + P->phi_1; lp.lam = lp.lam * xy.x / t.x; } while (fabs(t.x - xy.x) > TOL || fabs(t.y - xy.y) > TOL); return (lp); } static void xy(PJ *P, double phi, double *x, double *y, double *sp, double *R) { double F; *sp = sin(phi); *R = 1./(tan(phi) * sqrt(1. - P->es * *sp * *sp )); F = P->lam_1 * *sp; *y = *R * (1 - cos(F)); *x = *R * sin(F); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(imw_p, en) double del, sig, s, t, x1, x2, T2, y1, m1, m2, y2; int i; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if( (i = phi12(P, &del, &sig)) != 0) E_ERROR(i); if (P->phi_2 < P->phi_1) { /* make sure P->phi_1 most southerly */ del = P->phi_1; P->phi_1 = P->phi_2; P->phi_2 = del; } if (pj_param(P->params, "tlon_1").i) P->lam_1 = pj_param(P->params, "rlon_1").f; else { /* use predefined based upon latitude */ sig = fabs(sig * RAD_TO_DEG); if (sig <= 60) sig = 2.; else if (sig <= 76) sig = 4.; else sig = 8.; P->lam_1 = sig * DEG_TO_RAD; } P->mode = 0; if (P->phi_1) xy(P, P->phi_1, &x1, &y1, &P->sphi_1, &P->R_1); else { P->mode = 1; y1 = 0.; x1 = P->lam_1; } if (P->phi_2) xy(P, P->phi_2, &x2, &T2, &P->sphi_2, &P->R_2); else { P->mode = -1; T2 = 0.; x2 = P->lam_1; } m1 = pj_mlfn(P->phi_1, P->sphi_1, cos(P->phi_1), P->en); m2 = pj_mlfn(P->phi_2, P->sphi_2, cos(P->phi_2), P->en); t = m2 - m1; s = x2 - x1; y2 = sqrt(t * t - s * s) + y1; P->C2 = y2 - T2; t = 1. / t; P->P = (m2 * y1 - m1 * y2) * t; P->Q = (y2 - y1) * t; P->Pp = (m2 * x1 - m1 * x2) * t; P->Qp = (x2 - x1) * t; P->fwd = e_forward; P->inv = e_inverse; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_krovak.c000066400000000000000000000166641307545355600176200ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the krovak (Krovak) projection. * Definition: http://www.ihsenergy.com/epsg/guid7.html#1.4.3 * Author: Thomas Flemming, tf@ttqv.com * ****************************************************************************** * Copyright (c) 2001, Thomas Flemming, tf@ttqv.com * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. *****************************************************************************/ #define PROJ_PARMS__ \ double C_x; #define PJ_LIB__ #include #include #include PJ_CVSID("$Id: PJ_krovak.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(krovak, "Krovak") "\n\tPCyl., Ellps."; /** NOTES: According to EPSG the full Krovak projection method should have the following parameters. Within PROJ.4 the azimuth, and pseudo standard parallel are hardcoded in the algorithm and can't be altered from outside. The others all have defaults to match the common usage with Krovak projection. lat_0 = latitude of centre of the projection lon_0 = longitude of centre of the projection ** = azimuth (true) of the centre line passing through the centre of the projection ** = latitude of pseudo standard parallel k = scale factor on the pseudo standard parallel x_0 = False Easting of the centre of the projection at the apex of the cone y_0 = False Northing of the centre of the projection at the apex of the cone **/ FORWARD(e_forward); /* ellipsoid */ /* calculate xy from lat/lon */ char errmess[255]; char tmp[16]; /* Constants, identical to inverse transform function */ double s45, s90, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; double gfi, u, fi0, lon17, lamdd, deltav, s, d, eps, ro; s45 = 0.785398163397448; /* 45 */ s90 = 2 * s45; fi0 = P->phi0; /* Latitude of projection centre 49 30' */ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must be set to 1 here. Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, e2=0.006674372230614; */ a = 1; /* 6377397.155; */ /* e2 = P->es;*/ /* 0.006674372230614; */ e2 = 0.006674372230614; e = sqrt(e2); alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ u0 = asin(sin(fi0) / alfa); g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; k1 = P->k0; n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 30'00" N */ n = sin(s0); ro0 = k1 * n0 / tan(s0); ad = s90 - uq; /* Transformation */ gfi =pow ( ((1. + e * sin(lp.phi)) / (1. - e * sin(lp.phi))) , (alfa * e / 2.)); u= 2. * (atan(k * pow( tan(lp.phi / 2. + s45), alfa) / gfi)-s45); deltav = - lp.lam * alfa; s = asin(cos(ad) * sin(u) + sin(ad) * cos(u) * cos(deltav)); d = asin(cos(u) * sin(deltav) / cos(s)); eps = n * d; ro = ro0 * pow(tan(s0 / 2. + s45) , n) / pow(tan(s / 2. + s45) , n) ; /* x and y are reverted! */ xy.y = ro * cos(eps) / a; xy.x = ro * sin(eps) / a; if( !pj_param(P -> params, "tczech").i ) { xy.y *= -1.0; xy.x *= -1.0; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ /* calculate lat/lon from xy */ /* Constants, identisch wie in der Umkehrfunktion */ double s45, s90, fi0, e2, e, alfa, uq, u0, g, k, k1, n0, ro0, ad, a, s0, n; double u, l24, lamdd, deltav, s, d, eps, ro, fi1, xy0, lon17; int ok; s45 = 0.785398163397448; /* 45 */ s90 = 2 * s45; fi0 = P->phi0; /* Latitude of projection centre 49 30' */ /* Ellipsoid is used as Parameter in for.c and inv.c, therefore a must be set to 1 here. Ellipsoid Bessel 1841 a = 6377397.155m 1/f = 299.1528128, e2=0.006674372230614; */ a = 1; /* 6377397.155; */ /* e2 = P->es; */ /* 0.006674372230614; */ e2 = 0.006674372230614; e = sqrt(e2); alfa = sqrt(1. + (e2 * pow(cos(fi0), 4)) / (1. - e2)); uq = 1.04216856380474; /* DU(2, 59, 42, 42.69689) */ u0 = asin(sin(fi0) / alfa); g = pow( (1. + e * sin(fi0)) / (1. - e * sin(fi0)) , alfa * e / 2. ); k = tan( u0 / 2. + s45) / pow (tan(fi0 / 2. + s45) , alfa) * g; k1 = P->k0; n0 = a * sqrt(1. - e2) / (1. - e2 * pow(sin(fi0), 2)); s0 = 1.37008346281555; /* Latitude of pseudo standard parallel 78 30'00" N */ n = sin(s0); ro0 = k1 * n0 / tan(s0); ad = s90 - uq; /* Transformation */ /* revert y, x*/ xy0=xy.x; xy.x=xy.y; xy.y=xy0; if( !pj_param(P -> params, "tczech").i ) { xy.x *= -1.0; xy.y *= -1.0; } ro = sqrt(xy.x * xy.x + xy.y * xy.y); eps = atan2(xy.y, xy.x); d = eps / sin(s0); s = 2. * (atan( pow(ro0 / ro, 1. / n) * tan(s0 / 2. + s45)) - s45); u = asin(cos(ad) * sin(s) - sin(ad) * cos(s) * cos(d)); deltav = asin(cos(s) * sin(d) / cos(u)); lp.lam = P->lam0 - deltav / alfa; /* ITERATION FOR lp.phi */ fi1 = u; ok = 0; do { lp.phi = 2. * ( atan( pow( k, -1. / alfa) * pow( tan(u / 2. + s45) , 1. / alfa) * pow( (1. + e * sin(fi1)) / (1. - e * sin(fi1)) , e / 2.) ) - s45); if (fabs(fi1 - lp.phi) < 0.000000000000001) ok=1; fi1 = lp.phi; } while (ok==0); lp.lam -= P->lam0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(krovak) double ts; /* read some Parameters, * here Latitude Truescale */ ts = pj_param(P->params, "rlat_ts").f; P->C_x = ts; /* we want Bessel as fixed ellipsoid */ P->a = 6377397.155; P->e = sqrt(P->es = 0.006674372230614); /* if latitude of projection center is not set, use 49d30'N */ if (!pj_param(P->params, "tlat_0").i) P->phi0 = 0.863937979737193; /* if center long is not set use 42d30'E of Ferro - 17d40' for Ferro */ /* that will correspond to using longitudes relative to greenwich */ /* as input and output, instead of lat/long relative to Ferro */ if (!pj_param(P->params, "tlon_0").i) P->lam0 = 0.7417649320975901 - 0.308341501185665; /* if scale not set default to 0.9999 */ if (!pj_param(P->params, "tk").i) P->k0 = 0.9999; /* always the same */ P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_labrd.c000066400000000000000000000061501307545355600173740ustar00rootroot00000000000000#define PROJ_PARMS__ \ double Az, kRg, p0s, A, C, Ca, Cb, Cc, Cd; \ int rot; #define PJ_LIB__ #include PROJ_HEAD(labrd, "Laborde") "\n\tCyl, Sph\n\tSpecial for Madagascar"; #define EPS 1.e-10 FORWARD(e_forward); double V1, V2, ps, sinps, cosps, sinps2, cosps2, I1, I2, I3, I4, I5, I6, x2, y2, t; V1 = P->A * log( tan(FORTPI + .5 * lp.phi) ); t = P->e * sin(lp.phi); V2 = .5 * P->e * P->A * log ((1. + t)/(1. - t)); ps = 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); I1 = ps - P->p0s; cosps = cos(ps); cosps2 = cosps * cosps; sinps = sin(ps); sinps2 = sinps * sinps; I4 = P->A * cosps; I2 = .5 * P->A * I4 * sinps; I3 = I2 * P->A * P->A * (5. * cosps2 - sinps2) / 12.; I6 = I4 * P->A * P->A; I5 = I6 * (cosps2 - sinps2) / 6.; I6 *= P->A * P->A * (5. * cosps2 * cosps2 + sinps2 * (sinps2 - 18. * cosps2)) / 120.; t = lp.lam * lp.lam; xy.x = P->kRg * lp.lam * (I4 + t * (I5 + t * I6)); xy.y = P->kRg * (I1 + t * (I2 + t * I3)); x2 = xy.x * xy.x; y2 = xy.y * xy.y; V1 = 3. * xy.x * y2 - xy.x * x2; V2 = xy.y * y2 - 3. * x2 * xy.y; xy.x += P->Ca * V1 + P->Cb * V2; xy.y += P->Ca * V2 - P->Cb * V1; return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double x2, y2, V1, V2, V3, V4, t, t2, ps, pe, tpe, s, I7, I8, I9, I10, I11, d, Re; int i; x2 = xy.x * xy.x; y2 = xy.y * xy.y; V1 = 3. * xy.x * y2 - xy.x * x2; V2 = xy.y * y2 - 3. * x2 * xy.y; V3 = xy.x * (5. * y2 * y2 + x2 * (-10. * y2 + x2 )); V4 = xy.y * (5. * x2 * x2 + y2 * (-10. * x2 + y2 )); xy.x += - P->Ca * V1 - P->Cb * V2 + P->Cc * V3 + P->Cd * V4; xy.y += P->Cb * V1 - P->Ca * V2 - P->Cd * V3 + P->Cc * V4; ps = P->p0s + xy.y / P->kRg; pe = ps + P->phi0 - P->p0s; for ( i = 20; i; --i) { V1 = P->A * log(tan(FORTPI + .5 * pe)); tpe = P->e * sin(pe); V2 = .5 * P->e * P->A * log((1. + tpe)/(1. - tpe)); t = ps - 2. * (atan(exp(V1 - V2 + P->C)) - FORTPI); pe += t; if (fabs(t) < EPS) break; } /* if (!i) { } else { } */ t = P->e * sin(pe); t = 1. - t * t; Re = P->one_es / ( t * sqrt(t) ); t = tan(ps); t2 = t * t; s = P->kRg * P->kRg; d = Re * P->k0 * P->kRg; I7 = t / (2. * d); I8 = t * (5. + 3. * t2) / (24. * d * s); d = cos(ps) * P->kRg * P->A; I9 = 1. / d; d *= s; I10 = (1. + 2. * t2) / (6. * d); I11 = (5. + t2 * (28. + 24. * t2)) / (120. * d * s); x2 = xy.x * xy.x; lp.phi = pe + x2 * (-I7 + I8 * x2); lp.lam = xy.x * (I9 + x2 * (-I10 + x2 * I11)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(labrd) double Az, sinp, R, N, t; P->rot = pj_param(P->params, "bno_rot").i == 0; Az = pj_param(P->params, "razi").f; sinp = sin(P->phi0); t = 1. - P->es * sinp * sinp; N = 1. / sqrt(t); R = P->one_es * N / t; P->kRg = P->k0 * sqrt( N * R ); P->p0s = atan( sqrt(R / N) * tan(P->phi0) ); P->A = sinp / sin(P->p0s); t = P->e * sinp; P->C = .5 * P->e * P->A * log((1. + t)/(1. - t)) + - P->A * log( tan(FORTPI + .5 * P->phi0)) + log( tan(FORTPI + .5 * P->p0s)); t = Az + Az; P->Ca = (1. - cos(t)) * ( P->Cb = 1. / (12. * P->kRg * P->kRg) ); P->Cb *= sin(t); P->Cc = 3. * (P->Ca * P->Ca - P->Cb * P->Cb); P->Cd = 6. * P->Ca * P->Cb; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_laea.c000066400000000000000000000117361307545355600172200ustar00rootroot00000000000000#define PROJ_PARMS__ \ double sinb1; \ double cosb1; \ double xmf; \ double ymf; \ double mmf; \ double qp; \ double dd; \ double rq; \ double *apa; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") "\n\tAzi, Sph&Ell"; #define sinph0 P->sinb1 #define cosph0 P->cosb1 #define EPS10 1.e-10 #define NITER 20 #define CONV 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(e_forward); /* ellipsoid */ double coslam, sinlam, sinphi, q, sinb=0.0, cosb=0.0, b=0.0; coslam = cos(lp.lam); sinlam = sin(lp.lam); sinphi = sin(lp.phi); q = pj_qsfn(sinphi, P->e, P->one_es); if (P->mode == OBLIQ || P->mode == EQUIT) { sinb = q / P->qp; cosb = sqrt(1. - sinb * sinb); } switch (P->mode) { case OBLIQ: b = 1. + P->sinb1 * sinb + P->cosb1 * cosb * coslam; break; case EQUIT: b = 1. + cosb * coslam; break; case N_POLE: b = HALFPI + lp.phi; q = P->qp - q; break; case S_POLE: b = lp.phi - HALFPI; q = P->qp + q; break; } if (fabs(b) < EPS10) F_ERROR; switch (P->mode) { case OBLIQ: xy.y = P->ymf * ( b = sqrt(2. / b) ) * (P->cosb1 * sinb - P->sinb1 * cosb * coslam); goto eqcon; break; case EQUIT: xy.y = (b = sqrt(2. / (1. + cosb * coslam))) * sinb * P->ymf; eqcon: xy.x = P->xmf * b * cosb * sinlam; break; case N_POLE: case S_POLE: if (q >= 0.) { xy.x = (b = sqrt(q)) * sinlam; xy.y = coslam * (P->mode == S_POLE ? b : -b); } else xy.x = xy.y = 0.; break; } return (xy); } FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: xy.y = 1. + cosphi * coslam; goto oblcon; case OBLIQ: xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; oblcon: if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = sqrt(2. / xy.y)) * cosphi * sin(lp.lam); xy.y *= P->mode == EQUIT ? sinphi : cosph0 * sinphi - sinph0 * cosphi * coslam; break; case N_POLE: coslam = -coslam; case S_POLE: if (fabs(lp.phi + P->phi0) < EPS10) F_ERROR; xy.y = FORTPI - lp.phi * .5; xy.y = 2. * (P->mode == S_POLE ? cos(xy.y) : sin(xy.y)); xy.x = xy.y * sin(lp.lam); xy.y *= coslam; break; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ double cCe, sCe, q, rho, ab=0.0; switch (P->mode) { case EQUIT: case OBLIQ: if ((rho = hypot(xy.x /= P->dd, xy.y *= P->dd)) < EPS10) { lp.lam = 0.; lp.phi = P->phi0; return (lp); } cCe = cos(sCe = 2. * asin(.5 * rho / P->rq)); xy.x *= (sCe = sin(sCe)); if (P->mode == OBLIQ) { q = P->qp * (ab = cCe * P->sinb1 + xy.y * sCe * P->cosb1 / rho); xy.y = rho * P->cosb1 * cCe - xy.y * P->sinb1 * sCe; } else { q = P->qp * (ab = xy.y * sCe / rho); xy.y = rho * cCe; } break; case N_POLE: xy.y = -xy.y; case S_POLE: if (!(q = (xy.x * xy.x + xy.y * xy.y)) ) { lp.lam = 0.; lp.phi = P->phi0; return (lp); } /* q = P->qp - q; */ ab = 1. - q / P->qp; if (P->mode == S_POLE) ab = - ab; break; } lp.lam = atan2(xy.x, xy.y); lp.phi = pj_authlat(asin(ab), P->apa); return (lp); } INVERSE(s_inverse); /* spheroid */ double cosz=0.0, rh, sinz=0.0; rh = hypot(xy.x, xy.y); if ((lp.phi = rh * .5 ) > 1.) I_ERROR; lp.phi = 2. * asin(lp.phi); if (P->mode == OBLIQ || P->mode == EQUIT) { sinz = sin(lp.phi); cosz = cos(lp.phi); } switch (P->mode) { case EQUIT: lp.phi = fabs(rh) <= EPS10 ? 0. : asin(xy.y * sinz / rh); xy.x *= sinz; xy.y = cosz * rh; break; case OBLIQ: lp.phi = fabs(rh) <= EPS10 ? P->phi0 : asin(cosz * sinph0 + xy.y * sinz * cosph0 / rh); xy.x *= sinz * cosph0; xy.y = (cosz - sin(lp.phi) * sinph0) * rh; break; case N_POLE: xy.y = -xy.y; lp.phi = HALFPI - lp.phi; break; case S_POLE: lp.phi -= HALFPI; break; } lp.lam = (xy.y == 0. && (P->mode == EQUIT || P->mode == OBLIQ)) ? 0. : atan2(xy.x, xy.y); return (lp); } FREEUP; if (P) { if (P->apa) pj_dalloc(P->apa); pj_dalloc(P); } } ENTRY1(laea,apa) double t; if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(t) < EPS10) P->mode = EQUIT; else P->mode = OBLIQ; if (P->es) { double sinphi; P->e = sqrt(P->es); P->qp = pj_qsfn(1., P->e, P->one_es); P->mmf = .5 / (1. - P->es); P->apa = pj_authset(P->es); switch (P->mode) { case N_POLE: case S_POLE: P->dd = 1.; break; case EQUIT: P->dd = 1. / (P->rq = sqrt(.5 * P->qp)); P->xmf = 1.; P->ymf = .5 * P->qp; break; case OBLIQ: P->rq = sqrt(.5 * P->qp); sinphi = sin(P->phi0); P->sinb1 = pj_qsfn(sinphi, P->e, P->one_es) / P->qp; P->cosb1 = sqrt(1. - P->sinb1 * P->sinb1); P->dd = cos(P->phi0) / (sqrt(1. - P->es * sinphi * sinphi) * P->rq * P->cosb1); P->ymf = (P->xmf = P->rq) / P->dd; P->xmf *= P->dd; break; } P->inv = e_inverse; P->fwd = e_forward; } else { if (P->mode == OBLIQ) { sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); } P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_lagrng.c000066400000000000000000000016151307545355600175630ustar00rootroot00000000000000#define PROJ_PARMS__ \ double hrw; \ double rw; \ double a1; #define TOL 1e-10 #define PJ_LIB__ #include PROJ_HEAD(lagrng, "Lagrange") "\n\tMisc Sph, no inv.\n\tW="; FORWARD(s_forward); /* spheroid */ double v, c; if (fabs(fabs(lp.phi) - HALFPI) < TOL) { xy.x = 0; xy.y = lp.phi < 0 ? -2. : 2.; } else { lp.phi = sin(lp.phi); v = P->a1 * pow((1. + lp.phi)/(1. - lp.phi), P->hrw); if ((c = 0.5 * (v + 1./v) + cos(lp.lam *= P->rw)) < TOL) F_ERROR; xy.x = 2. * sin(lp.lam) / c; xy.y = (v - 1./v) / c; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lagrng) double phi1; if ((P->rw = pj_param(P->params, "dW").f) <= 0) E_ERROR(-27); P->hrw = 0.5 * (P->rw = 1. / P->rw); phi1 = pj_param(P->params, "rlat_1").f; if (fabs(fabs(phi1 = sin(phi1)) - 1.) < TOL) E_ERROR(-22); P->a1 = pow((1. - phi1)/(1. + phi1), P->hrw); P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_larr.c000066400000000000000000000006241307545355600172500ustar00rootroot00000000000000#define PROJ_PARMS__ #define PJ_LIB__ #include PROJ_HEAD(larr, "Larrivee") "\n\tMisc Sph, no inv."; #define SIXTH .16666666666666666 FORWARD(s_forward); /* sphere */ xy.x = 0.5 * lp.lam * (1. + sqrt(cos(lp.phi))); xy.y = lp.phi / (cos(0.5 * lp.phi) * cos(SIXTH * lp.lam)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(larr) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_lask.c000066400000000000000000000012721307545355600172420ustar00rootroot00000000000000#define PROJ_PARMS__ #define PJ_LIB__ #include PROJ_HEAD(lask, "Laskowski") "\n\tMisc Sph, no inv."; #define a10 0.975534 #define a12 -0.119161 #define a32 -0.0143059 #define a14 -0.0547009 #define b01 1.00384 #define b21 0.0802894 #define b03 0.0998909 #define b41 0.000199025 #define b23 -0.0285500 #define b05 -0.0491032 FORWARD(s_forward); /* sphere */ double l2, p2; l2 = lp.lam * lp.lam; p2 = lp.phi * lp.phi; xy.x = lp.lam * (a10 + p2 * (a12 + l2 * a32 + p2 * a14)); xy.y = lp.phi * (b01 + l2 * (b21 + p2 * b23 + l2 * b41) + p2 * (b03 + p2 * b05)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lask) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_lcc.c000066400000000000000000000055621307545355600170570ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phi1; \ double phi2; \ double n; \ double rho0; \ double c; \ int ellips; #define PJ_LIB__ #include PROJ_HEAD(lcc, "Lambert Conformal Conic") "\n\tConic, Sph&Ell\n\tlat_1= and lat_2= or lat_0"; # define EPS10 1.e-10 FORWARD(e_forward); /* ellipsoid & spheroid */ double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) F_ERROR; rho = 0.; } else rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); xy.x = P->k0 * (rho * sin( lp.lam *= P->n ) ); xy.y = P->k0 * (P->rho0 - rho * cos(lp.lam) ); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double rho; xy.x /= P->k0; xy.y /= P->k0; if( (rho = hypot(xy.x, xy.y = P->rho0 - xy.y)) != 0.0) { if (P->n < 0.) { rho = -rho; xy.x = -xy.x; xy.y = -xy.y; } if (P->ellips) { if ((lp.phi = pj_phi2(pow(rho / P->c, 1./P->n), P->e)) == HUGE_VAL) I_ERROR; } else lp.phi = 2. * atan(pow(P->c / rho, 1./P->n)) - HALFPI; lp.lam = atan2(xy.x, xy.y) / P->n; } else { lp.lam = 0.; lp.phi = P->n > 0. ? HALFPI : - HALFPI; } return (lp); } SPECIAL(fac) { double rho; if (fabs(fabs(lp.phi) - HALFPI) < EPS10) { if ((lp.phi * P->n) <= 0.) return; rho = 0.; } else rho = P->c * (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->n) : pow(tan(FORTPI + .5 * lp.phi), -P->n)); fac->code |= IS_ANAL_HK + IS_ANAL_CONV; fac->k = fac->h = P->k0 * P->n * rho / pj_msfn(sin(lp.phi), cos(lp.phi), P->es); fac->conv = - P->n * lp.lam; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lcc) double cosphi, sinphi; int secant; P->phi1 = pj_param(P->params, "rlat_1").f; if (pj_param(P->params, "tlat_2").i) P->phi2 = pj_param(P->params, "rlat_2").f; else { P->phi2 = P->phi1; if (!pj_param(P->params, "tlat_0").i) P->phi0 = P->phi1; } if (fabs(P->phi1 + P->phi2) < EPS10) E_ERROR(-21); P->n = sinphi = sin(P->phi1); cosphi = cos(P->phi1); secant = fabs(P->phi1 - P->phi2) >= EPS10; if( (P->ellips = (P->es != 0.)) ) { double ml1, m1; P->e = sqrt(P->es); m1 = pj_msfn(sinphi, cosphi, P->es); ml1 = pj_tsfn(P->phi1, sinphi, P->e); if (secant) { /* secant cone */ P->n = log(m1 / pj_msfn(sinphi = sin(P->phi2), cos(P->phi2), P->es)); P->n /= log(ml1 / pj_tsfn(P->phi2, sinphi, P->e)); } P->c = (P->rho0 = m1 * pow(ml1, -P->n) / P->n); P->rho0 *= (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : pow(pj_tsfn(P->phi0, sin(P->phi0), P->e), P->n); } else { if (secant) P->n = log(cosphi / cos(P->phi2)) / log(tan(FORTPI + .5 * P->phi2) / tan(FORTPI + .5 * P->phi1)); P->c = cosphi * pow(tan(FORTPI + .5 * P->phi1), P->n) / P->n; P->rho0 = (fabs(fabs(P->phi0) - HALFPI) < EPS10) ? 0. : P->c * pow(tan(FORTPI + .5 * P->phi0), -P->n); } P->inv = e_inverse; P->fwd = e_forward; P->spc = fac; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_lcca.c000066400000000000000000000034151307545355600172130ustar00rootroot00000000000000static const char RCS_ID[] = "$Id: PJ_lcca.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* PROJ.4 Cartographic Projection System */ #define MAX_ITER 10 #define DEL_TOL 1e-12 #define PROJ_PARMS__ \ double *en; \ double r0, l, M0; \ double C; #define PJ_LIB__ #include PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") "\n\tConic, Sph&Ell\n\tlat_0="; static double /* func to compute dr */ fS(double S, double C) { return(S * ( 1. + S * S * C)); } static double /* deriv of fs */ fSp(double S, double C) { return(1. + 3.* S * S * C); } FORWARD(e_forward); /* ellipsoid */ double S, S3, r, dr; S = pj_mlfn(lp.phi, sin(lp.phi), cos(lp.phi), P->en) - P->M0; dr = fS(S, P->C); r = P->r0 - dr; xy.x = P->k0 * (r * sin( lp.lam *= P->l ) ); xy.y = P->k0 * (P->r0 - r * cos(lp.lam) ); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double theta, dr, S, dif; int i; xy.x /= P->k0; xy.y /= P->k0; theta = atan2(xy.x , P->r0 - xy.y); dr = xy.y - xy.x * tan(0.5 * theta); lp.lam = theta / P->l; S = dr; for (i = MAX_ITER; i ; --i) { S -= (dif = (fS(S, P->C) - dr) / fSp(S, P->C)); if (fabs(dif) < DEL_TOL) break; } if (!i) I_ERROR lp.phi = pj_inv_mlfn(S + P->M0, P->es, P->en); return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY0(lcca) double s2p0, N0, R0, tan0, tan20; if (!(P->en = pj_enfn(P->es))) E_ERROR_0; if (!pj_param(P->params, "tlat_0").i) E_ERROR(50); if (P->phi0 == 0.) E_ERROR(51); P->l = sin(P->phi0); P->M0 = pj_mlfn(P->phi0, P->l, cos(P->phi0), P->en); s2p0 = P->l * P->l; R0 = 1. / (1. - P->es * s2p0); N0 = sqrt(R0); R0 *= P->one_es * N0; tan0 = tan(P->phi0); tan20 = tan0 * tan0; P->r0 = N0 / tan0; P->C = 1. / (6. * R0 * N0); P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_loxim.c000066400000000000000000000020341307545355600174350ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phi1; \ double cosphi1; \ double tanphi1; #define PJ_LIB__ #include PROJ_HEAD(loxim, "Loximuthal") "\n\tPCyl Sph"; #define EPS 1e-8 FORWARD(s_forward); /* spheroid */ xy.y = lp.phi - P->phi1; if (fabs(xy.y) < EPS) xy.x = lp.lam * P->cosphi1; else { xy.x = FORTPI + 0.5 * lp.phi; if (fabs(xy.x) < EPS || fabs(fabs(xy.x) - HALFPI) < EPS) xy.x = 0.; else xy.x = lp.lam * xy.y / log( tan(xy.x) / P->tanphi1 ); } return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y + P->phi1; if (fabs(xy.y) < EPS) lp.lam = xy.x / P->cosphi1; else if (fabs( lp.lam = FORTPI + 0.5 * lp.phi ) < EPS || fabs(fabs(lp.lam) - HALFPI) < EPS) lp.lam = 0.; else lp.lam = xy.x * log( tan(lp.lam) / P->tanphi1 ) / xy.y ; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(loxim); P->phi1 = pj_param(P->params, "rlat_1").f; if ((P->cosphi1 = cos(P->phi1)) < EPS) E_ERROR(-22); P->tanphi1 = tan(FORTPI + 0.5 * P->phi1); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_lsat.c000066400000000000000000000121641307545355600172550ustar00rootroot00000000000000/* based upon Snyder and Linck, USGS-NMD */ #define PROJ_PARMS__ \ double a2, a4, b, c1, c3; \ double q, t, u, w, p22, sa, ca, xj, rlm, rlm2; #define PJ_LIB__ #include PROJ_HEAD(lsat, "Space oblique for LANDSAT") "\n\tCyl, Sph&Ell\n\tlsat= path="; #define TOL 1e-7 #define PI_HALFPI 4.71238898038468985766 #define TWOPI_HALFPI 7.85398163397448309610 static void seraz0(double lam, double mult, PJ *P) { double sdsq, h, s, fc, sd, sq, d__1; lam *= DEG_TO_RAD; sd = sin(lam); sdsq = sd * sd; s = P->p22 * P->sa * cos(lam) * sqrt((1. + P->t * sdsq) / (( 1. + P->w * sdsq) * (1. + P->q * sdsq))); d__1 = 1. + P->q * sdsq; h = sqrt((1. + P->q * sdsq) / (1. + P->w * sdsq)) * ((1. + P->w * sdsq) / (d__1 * d__1) - P->p22 * P->ca); sq = sqrt(P->xj * P->xj + s * s); P->b += fc = mult * (h * P->xj - s * s) / sq; P->a2 += fc * cos(lam + lam); P->a4 += fc * cos(lam * 4.); fc = mult * s * (h + P->xj) / sq; P->c1 += fc * cos(lam); P->c3 += fc * cos(lam * 3.); } FORWARD(e_forward); /* ellipsoid */ int l, nn; double lamt, xlam, sdsq, c, d, s, lamdp, phidp, lampp, tanph, lamtp, cl, sd, sp, fac, sav, tanphi; if (lp.phi > HALFPI) lp.phi = HALFPI; else if (lp.phi < -HALFPI) lp.phi = -HALFPI; lampp = lp.phi >= 0. ? HALFPI : PI_HALFPI; tanphi = tan(lp.phi); for (nn = 0;;) { sav = lampp; lamtp = lp.lam + P->p22 * lampp; cl = cos(lamtp); if (fabs(cl) < TOL) lamtp -= TOL; fac = lampp - sin(lampp) * (cl < 0. ? -HALFPI : HALFPI); for (l = 50; l; --l) { lamt = lp.lam + P->p22 * sav; if (fabs(c = cos(lamt)) < TOL) lamt -= TOL; xlam = (P->one_es * tanphi * P->sa + sin(lamt) * P->ca) / c; lamdp = atan(xlam) + fac; if (fabs(fabs(sav) - fabs(lamdp)) < TOL) break; sav = lamdp; } if (!l || ++nn >= 3 || (lamdp > P->rlm && lamdp < P->rlm2)) break; if (lamdp <= P->rlm) lampp = TWOPI_HALFPI; else if (lamdp >= P->rlm2) lampp = HALFPI; } if (l) { sp = sin(lp.phi); phidp = aasin((P->one_es * P->ca * sp - P->sa * cos(lp.phi) * sin(lamt)) / sqrt(1. - P->es * sp * sp)); tanph = log(tan(FORTPI + .5 * phidp)); sd = sin(lamdp); sdsq = sd * sd; s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); d = sqrt(P->xj * P->xj + s * s); xy.x = P->b * lamdp + P->a2 * sin(2. * lamdp) + P->a4 * sin(lamdp * 4.) - tanph * s / d; xy.y = P->c1 * sd + P->c3 * sin(lamdp * 3.) + tanph * P->xj / d; } else xy.x = xy.y = HUGE_VAL; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn; double lamt, sdsq, s, lamdp, phidp, sppsq, dd, sd, sl, fac, scl, sav, spp; lamdp = xy.x / P->b; nn = 50; do { sav = lamdp; sd = sin(lamdp); sdsq = sd * sd; s = P->p22 * P->sa * cos(lamdp) * sqrt((1. + P->t * sdsq) / ((1. + P->w * sdsq) * (1. + P->q * sdsq))); lamdp = xy.x + xy.y * s / P->xj - P->a2 * sin( 2. * lamdp) - P->a4 * sin(lamdp * 4.) - s / P->xj * ( P->c1 * sin(lamdp) + P->c3 * sin(lamdp * 3.)); lamdp /= P->b; } while (fabs(lamdp - sav) >= TOL && --nn); sl = sin(lamdp); fac = exp(sqrt(1. + s * s / P->xj / P->xj) * (xy.y - P->c1 * sl - P->c3 * sin(lamdp * 3.))); phidp = 2. * (atan(fac) - FORTPI); dd = sl * sl; if (fabs(cos(lamdp)) < TOL) lamdp -= TOL; spp = sin(phidp); sppsq = spp * spp; lamt = atan(((1. - sppsq * P->rone_es) * tan(lamdp) * P->ca - spp * P->sa * sqrt((1. + P->q * dd) * ( 1. - sppsq) - sppsq * P->u) / cos(lamdp)) / (1. - sppsq * (1. + P->u))); sl = lamt >= 0. ? 1. : -1.; scl = cos(lamdp) >= 0. ? 1. : -1; lamt -= HALFPI * (1. - scl) * sl; lp.lam = lamt - P->p22 * lamdp; if (fabs(P->sa) < TOL) lp.phi = aasin(spp / sqrt(P->one_es * P->one_es + P->es * sppsq)); else lp.phi = atan((tan(lamdp) * cos(lamt) - P->ca * sin(lamt)) / (P->one_es * P->sa)); return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(lsat) int land, path; double lam, alf, esc, ess; land = pj_param(P->params, "ilsat").i; if (land <= 0 || land > 5) E_ERROR(-28); path = pj_param(P->params, "ipath").i; if (path <= 0 || path > (land <= 3 ? 251 : 233)) E_ERROR(-29); if (land <= 3) { P->lam0 = DEG_TO_RAD * 128.87 - TWOPI / 251. * path; P->p22 = 103.2669323; alf = DEG_TO_RAD * 99.092; } else { P->lam0 = DEG_TO_RAD * 129.3 - TWOPI / 233. * path; P->p22 = 98.8841202; alf = DEG_TO_RAD * 98.2; } P->p22 /= 1440.; P->sa = sin(alf); P->ca = cos(alf); if (fabs(P->ca) < 1e-9) P->ca = 1e-9; esc = P->es * P->ca * P->ca; ess = P->es * P->sa * P->sa; P->w = (1. - esc) * P->rone_es; P->w = P->w * P->w - 1.; P->q = ess * P->rone_es; P->t = ess * (2. - P->es) * P->rone_es * P->rone_es; P->u = esc * P->rone_es; P->xj = P->one_es * P->one_es * P->one_es; P->rlm = PI * (1. / 248. + .5161290322580645); P->rlm2 = P->rlm + TWOPI; P->a2 = P->a4 = P->b = P->c1 = P->c3 = 0.; seraz0(0., 1., P); for (lam = 9.; lam <= 81.0001; lam += 18.) seraz0(lam, 4., P); for (lam = 18; lam <= 72.0001; lam += 18.) seraz0(lam, 2., P); seraz0(90., 1., P); P->a2 /= 30.; P->a4 /= 60.; P->b /= 30.; P->c1 /= 15.; P->c3 /= 45.; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_mbt_fps.c000066400000000000000000000017371307545355600177500ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") "\n\tCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 #define C1 0.45503 #define C2 1.36509 #define C3 1.41546 #define C_x 0.22248 #define C_y 1.44492 #define C1_2 0.33333333333333333333333333 FORWARD(s_forward); /* spheroid */ double k, V, t; int i; k = C3 * sin(lp.phi); for (i = MAX_ITER; i ; --i) { t = lp.phi / C2; lp.phi -= V = (C1 * sin(t) + sin(lp.phi) - k) / (C1_2 * cos(t) + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } t = lp.phi / C2; xy.x = C_x * lp.lam * (1. + 3. * cos(lp.phi)/cos(t) ); xy.y = C_y * sin(t); return (xy); } INVERSE(s_inverse); /* spheroid */ double t, s; lp.phi = C2 * (t = aasin(xy.y / C_y)); lp.lam = xy.x / (C_x * (1. + 3. * cos(lp.phi)/cos(t))); lp.phi = aasin((C1 * sin(t) + sin(lp.phi)) / C3); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbt_fps) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_mbtfpp.c000066400000000000000000000020231307545355600175730ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl., Sph."; #define CS .95257934441568037152 #define FXC .92582009977255146156 #define FYC 3.40168025708304504493 #define C23 .66666666666666666666 #define C13 .33333333333333333333 #define ONEEPS 1.0000001 FORWARD(s_forward); /* spheroid */ lp.phi = asin(CS * sin(lp.phi)); xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.); xy.y = FYC * sin(C13 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / FYC; if (fabs(lp.phi) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) ); if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) { if (fabs(lp.phi) > ONEEPS) I_ERROR else lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; } else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbtfpp) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_mbtfpq.c000066400000000000000000000025121307545355600175770ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") "\n\tCyl., Sph."; #define NITER 20 #define EPS 1e-7 #define ONETOL 1.000001 #define C 1.70710678118654752440 #define RC 0.58578643762690495119 #define FYC 1.87475828462269495505 #define RYC 0.53340209679417701685 #define FXC 0.31245971410378249250 #define RXC 3.20041258076506210122 FORWARD(s_forward); /* spheroid */ double th1, c; int i; c = C * sin(lp.phi); for (i = NITER; i; --i) { lp.phi -= th1 = (sin(.5*lp.phi) + sin(lp.phi) - c) / (.5*cos(.5*lp.phi) + cos(lp.phi)); if (fabs(th1) < EPS) break; } xy.x = FXC * lp.lam * (1.0 + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); xy.y = FYC * sin(0.5 * lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double t; lp.phi = RYC * xy.y; if (fabs(lp.phi) > 1.) { if (fabs(lp.phi) > ONETOL) I_ERROR else if (lp.phi < 0.) { t = -1.; lp.phi = -PI; } else { t = 1.; lp.phi = PI; } } else lp.phi = 2. * asin(t = lp.phi); lp.lam = RXC * xy.x / (1. + 2. * cos(lp.phi)/cos(0.5 * lp.phi)); lp.phi = RC * (t + sin(lp.phi)); if (fabs(lp.phi) > 1.) if (fabs(lp.phi) > ONETOL) I_ERROR else lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else lp.phi = asin(lp.phi); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mbtfpq) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_merc.c000066400000000000000000000023311307545355600172330ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(merc, "Mercator") "\n\tCyl, Sph&Ell\n\tlat_ts="; #define EPS10 1.e-10 FORWARD(e_forward); /* ellipsoid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = P->k0 * lp.lam; xy.y = - P->k0 * log(pj_tsfn(lp.phi, sin(lp.phi), P->e)); return (xy); } FORWARD(s_forward); /* spheroid */ if (fabs(fabs(lp.phi) - HALFPI) <= EPS10) F_ERROR; xy.x = P->k0 * lp.lam; xy.y = P->k0 * log(tan(FORTPI + .5 * lp.phi)); return (xy); } INVERSE(e_inverse); /* ellipsoid */ if ((lp.phi = pj_phi2(exp(- xy.y / P->k0), P->e)) == HUGE_VAL) I_ERROR; lp.lam = xy.x / P->k0; return (lp); } INVERSE(s_inverse); /* spheroid */ lp.phi = HALFPI - 2. * atan(exp(-xy.y / P->k0)); lp.lam = xy.x / P->k0; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(merc) double phits=0.0; int is_phits; if( (is_phits = pj_param(P->params, "tlat_ts").i) ) { phits = fabs(pj_param(P->params, "rlat_ts").f); if (phits >= HALFPI) E_ERROR(-24); } if (P->es) { /* ellipsoid */ if (is_phits) P->k0 = pj_msfn(sin(phits), cos(phits), P->es); P->inv = e_inverse; P->fwd = e_forward; } else { /* sphere */ if (is_phits) P->k0 = cos(phits); P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_mill.c000066400000000000000000000006601307545355600172450ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(mill, "Miller Cylindrical") "\n\tCyl, Sph"; FORWARD(s_forward); /* spheroid */ xy.x = lp.lam; xy.y = log(tan(FORTPI + lp.phi * .4)) * 1.25; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.lam = xy.x; lp.phi = 2.5 * (atan(exp(.8 * xy.y)) - FORTPI); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(mill) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_mod_ster.c000066400000000000000000000113351307545355600201250ustar00rootroot00000000000000/* based upon Snyder and Linck, USGS-NMD */ #define PROJ_PARMS__ \ COMPLEX *zcoeff; \ double cchio, schio; \ int n; #define PJ_LIB__ #include PROJ_HEAD(mil_os, "Miller Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(lee_os, "Lee Oblated Stereographic") "\n\tAzi(mod)"; PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") "\n\tAzi(mod)"; PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") "\n\tAzi(mod)"; PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") "\n\tAzi(mod)"; #define EPSLN 1e-10 FORWARD(e_forward); /* ellipsoid */ double sinlon, coslon, esphi, chi, schi, cchi, s; COMPLEX p; sinlon = sin(lp.lam); coslon = cos(lp.lam); esphi = P->e * sin(lp.phi); chi = 2. * atan(tan((HALFPI + lp.phi) * .5) * pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; schi = sin(chi); cchi = cos(chi); s = 2. / (1. + P->schio * schi + P->cchio * cchi * coslon); p.r = s * cchi * sinlon; p.i = s * (P->cchio * schi - P->schio * cchi * coslon); p = pj_zpoly1(p, P->zcoeff, P->n); xy.x = p.r; xy.y = p.i; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn; COMPLEX p, fxy, fpxy, dp; double den, rh, z, sinz, cosz, chi, phi, dphi, esphi; p.r = xy.x; p.i = xy.y; for (nn = 20; nn ;--nn) { fxy = pj_zpolyd1(p, P->zcoeff, P->n, &fpxy); fxy.r -= xy.x; fxy.i -= xy.y; den = fpxy.r * fpxy.r + fpxy.i * fpxy.i; dp.r = -(fxy.r * fpxy.r + fxy.i * fpxy.i) / den; dp.i = -(fxy.i * fpxy.r - fxy.r * fpxy.i) / den; p.r += dp.r; p.i += dp.i; if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) break; } if (nn) { rh = hypot(p.r, p.i); z = 2. * atan(.5 * rh); sinz = sin(z); cosz = cos(z); lp.lam = P->lam0; if (fabs(rh) <= EPSLN) { lp.phi = P->phi0; return lp; } chi = aasin(cosz * P->schio + p.i * sinz * P->cchio / rh); phi = chi; for (nn = 20; nn ;--nn) { esphi = P->e * sin(phi); dphi = 2. * atan(tan((HALFPI + chi) * .5) * pow((1. + esphi) / (1. - esphi), P->e * .5)) - HALFPI - phi; phi += dphi; if (fabs(dphi) <= EPSLN) break; } } if (nn) { lp.phi = phi; lp.lam = atan2(p.r * sinz, rh * P->cchio * cosz - p.i * P->schio * sinz); } else lp.lam = lp.phi = HUGE_VAL; return lp; } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { /* general initialization */ double esphi, chio; if (P->es) { esphi = P->e * sin(P->phi0); chio = 2. * atan(tan((HALFPI + P->phi0) * .5) * pow((1. - esphi) / (1. + esphi), P->e * .5)) - HALFPI; } else chio = P->phi0; P->schio = sin(chio); P->cchio = cos(chio); P->inv = e_inverse; P->fwd = e_forward; return P; } ENTRY0(mil_os) static COMPLEX /* Miller Oblated Stereographic */ AB[] = { {0.924500, 0.}, {0., 0.}, {0.019430, 0.} }; P->n = 2; P->lam0 = DEG_TO_RAD * 20.; P->phi0 = DEG_TO_RAD * 18.; P->zcoeff = AB; P->es = 0.; ENDENTRY(setup(P)) ENTRY0(lee_os) static COMPLEX /* Lee Oblated Stereographic */ AB[] = { {0.721316, 0.}, {0., 0.}, {-0.0088162, -0.00617325} }; P->n = 2; P->lam0 = DEG_TO_RAD * -165.; P->phi0 = DEG_TO_RAD * -10.; P->zcoeff = AB; P->es = 0.; ENDENTRY(setup(P)) ENTRY0(gs48) static COMPLEX /* 48 United States */ AB[] = { {0.98879, 0.}, {0., 0.}, {-0.050909, 0.}, {0., 0.}, {0.075528, 0.} }; P->n = 4; P->lam0 = DEG_TO_RAD * -96.; P->phi0 = DEG_TO_RAD * -39.; P->zcoeff = AB; P->es = 0.; P->a = 6370997.; ENDENTRY(setup(P)) ENTRY0(alsk) static COMPLEX ABe[] = { /* Alaska ellipsoid */ {.9945303, 0.}, {.0052083, -.0027404}, {.0072721, .0048181}, {-.0151089, -.1932526}, {.0642675, -.1381226}, {.3582802, -.2884586}}, ABs[] = { /* Alaska sphere */ {.9972523, 0.}, {.0052513, -.0041175}, {.0074606, .0048125}, {-.0153783, -.1968253}, {.0636871, -.1408027}, {.3660976, -.2937382} }; P->n = 5; P->lam0 = DEG_TO_RAD * -152.; P->phi0 = DEG_TO_RAD * 64.; if (P->es) { /* fixed ellipsoid/sphere */ P->zcoeff = ABe; P->a = 6378206.4; P->e = sqrt(P->es = 0.00676866); } else { P->zcoeff = ABs; P->a = 6370997.; } ENDENTRY(setup(P)) ENTRY0(gs50) static COMPLEX ABe[] = { /* GS50 ellipsoid */ {.9827497, 0.}, {.0210669, .0053804}, {-.1031415, -.0571664}, {-.0323337, -.0322847}, {.0502303, .1211983}, {.0251805, .0895678}, {-.0012315, -.1416121}, {.0072202, -.1317091}, {-.0194029, .0759677}, {-.0210072, .0834037} }, ABs[] = { /* GS50 sphere */ {.9842990, 0.}, {.0211642, .0037608}, {-.1036018, -.0575102}, {-.0329095, -.0320119}, {.0499471, .1223335}, {.0260460, .0899805}, {.0007388, -.1435792}, {.0075848, -.1334108}, {-.0216473, .0776645}, {-.0225161, .0853673} }; P->n = 9; P->lam0 = DEG_TO_RAD * -120.; P->phi0 = DEG_TO_RAD * 45.; if (P->es) { /* fixed ellipsoid/sphere */ P->zcoeff = ABe; P->a = 6378206.4; P->e = sqrt(P->es = 0.00676866); } else { P->zcoeff = ABs; P->a = 6370997.; } ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_moll.c000066400000000000000000000025221307545355600172520ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x, C_y, C_p; #define PJ_LIB__ #include PROJ_HEAD(moll, "Mollweide") "\n\tPCyl., Sph."; PROJ_HEAD(wag4, "Wagner IV") "\n\tPCyl., Sph."; PROJ_HEAD(wag5, "Wagner V") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double k, V; int i; k = P->C_p * sin(lp.phi); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; else lp.phi *= 0.5; xy.x = P->C_x * lp.lam * cos(lp.phi); xy.y = P->C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double th, s; lp.phi = aasin(xy.y / P->C_y); lp.lam = xy.x / (P->C_x * cos(lp.phi)); lp.phi += lp.phi; lp.phi = aasin((lp.phi + sin(lp.phi)) / P->C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P, double p) { double r, sp, p2 = p + p; P->es = 0; sp = sin(p); r = sqrt(TWOPI * sp / (p2 + sin(p2))); P->C_x = 2. * r / PI; P->C_y = r / sp; P->C_p = p2 + sin(p2); P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(moll) ENDENTRY(setup(P, HALFPI)) ENTRY0(wag4) ENDENTRY(setup(P, PI/3.)) ENTRY0(wag5) P->es = 0; P->C_x = 0.90977; P->C_y = 1.65014; P->C_p = 3.00896; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_nell.c000066400000000000000000000013601307545355600172400ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(nell, "Nell") "\n\tPCyl., Sph."; #define MAX_ITER 10 #define LOOP_TOL 1e-7 FORWARD(s_forward); /* spheroid */ double k, V; int i; k = 2. * sin(lp.phi); V = lp.phi * lp.phi; lp.phi *= 1.00371 + V * (-0.0935382 + V * -0.011412); for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ double th, s; lp.lam = 2. * xy.x / (1. + cos(xy.y)); lp.phi = aasin(0.5 * (xy.y + sin(xy.y))); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nell) P->es = 0; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_nell_h.c000066400000000000000000000013421307545355600175470ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(nell_h, "Nell-Hammer") "\n\tPCyl., Sph."; #define NITER 9 #define EPS 1e-7 FORWARD(s_forward); /* spheroid */ xy.x = 0.5 * lp.lam * (1. + cos(lp.phi)); xy.y = 2.0 * (lp.phi - tan(0.5 *lp.phi)); return (xy); } INVERSE(s_inverse); /* spheroid */ double V, c, p; int i; p = 0.5 * xy.y; for (i = NITER; i ; --i) { c = cos(0.5 * lp.phi); lp.phi -= V = (lp.phi - tan(lp.phi/2) - p)/(1. - 0.5/(c*c)); if (fabs(V) < EPS) break; } if (!i) { lp.phi = p < 0. ? -HALFPI : HALFPI; lp.lam = 2. * xy.x; } else lp.lam = 2. * xy.x / (1. + cos(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nell_h) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_nocol.c000066400000000000000000000020761307545355600174250ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(nicol, "Nicolosi Globular") "\n\tMisc Sph, no inv."; #define EPS 1e-10 FORWARD(s_forward); /* spheroid */ if (fabs(lp.lam) < EPS) { xy.x = 0; xy.y = lp.phi; } else if (fabs(lp.phi) < EPS) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(fabs(lp.lam) - HALFPI) < EPS) { xy.x = lp.lam * cos(lp.phi); xy.y = HALFPI * sin(lp.phi); } else if (fabs(fabs(lp.phi) - HALFPI) < EPS) { xy.x = 0; xy.y = lp.phi; } else { double tb, c, d, m, n, r2, sp; tb = HALFPI / lp.lam - lp.lam / HALFPI; c = lp.phi / HALFPI; d = (1 - c * c)/((sp = sin(lp.phi)) - c); r2 = tb / d; r2 *= r2; m = (tb * sp / d - 0.5 * tb)/(1. + r2); n = (sp / r2 + 0.5 * d)/(1. + 1./r2); xy.x = cos(lp.phi); xy.x = sqrt(m * m + xy.x * xy.x / (1. + r2)); xy.x = HALFPI * ( m + (lp.lam < 0. ? -xy.x : xy.x)); xy.y = sqrt(n * n - (sp * sp / r2 + d * sp - 1.) / (1. + 1./r2)); xy.y = HALFPI * ( n + (lp.phi < 0. ? xy.y : -xy.y )); } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nicol) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_nsper.c000066400000000000000000000062551307545355600174450ustar00rootroot00000000000000#define PROJ_PARMS__ \ double height; \ double sinph0; \ double cosph0; \ double p; \ double rp; \ double pn1; \ double pfact; \ double h; \ double cg; \ double sg; \ double sw; \ double cw; \ int mode; \ int tilt; #define PJ_LIB__ #include PROJ_HEAD(nsper, "Near-sided perspective") "\n\tAzi, Sph\n\th="; PROJ_HEAD(tpers, "Tilted perspective") "\n\tAzi, Sph\n\ttilt= azi= h="; # define EPS10 1.e-10 # define N_POLE 0 # define S_POLE 1 # define EQUIT 2 # define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case OBLIQ: xy.y = P->sinph0 * sinphi + P->cosph0 * cosphi * coslam; break; case EQUIT: xy.y = cosphi * coslam; break; case S_POLE: xy.y = - sinphi; break; case N_POLE: xy.y = sinphi; break; } if (xy.y < P->rp) F_ERROR; xy.y = P->pn1 / (P->p - xy.y); xy.x = xy.y * cosphi * sin(lp.lam); switch (P->mode) { case OBLIQ: xy.y *= (P->cosph0 * sinphi - P->sinph0 * cosphi * coslam); break; case EQUIT: xy.y *= sinphi; break; case N_POLE: coslam = - coslam; case S_POLE: xy.y *= cosphi * coslam; break; } if (P->tilt) { double yt, ba; yt = xy.y * P->cg + xy.x * P->sg; ba = 1. / (yt * P->sw * P->h + P->cw); xy.x = (xy.x * P->cg - xy.y * P->sg) * P->cw * ba; xy.y = yt * ba; } return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosz, sinz; if (P->tilt) { double bm, bq, yt; yt = 1./(P->pn1 - xy.y * P->sw); bm = P->pn1 * xy.x * yt; bq = P->pn1 * xy.y * P->cw * yt; xy.x = bm * P->cg + bq * P->sg; xy.y = bq * P->cg - bm * P->sg; } rh = hypot(xy.x, xy.y); if ((sinz = 1. - rh * rh * P->pfact) < 0.) I_ERROR; sinz = (P->p - sqrt(sinz)) / (P->pn1 / rh + rh / P->pn1); cosz = sqrt(1. - sinz * sinz); if (fabs(rh) <= EPS10) { lp.lam = 0.; lp.phi = P->phi0; } else { switch (P->mode) { case OBLIQ: lp.phi = asin(cosz * P->sinph0 + xy.y * sinz * P->cosph0 / rh); xy.y = (cosz - P->sinph0 * sin(lp.phi)) * rh; xy.x *= sinz * P->cosph0; break; case EQUIT: lp.phi = asin(xy.y * sinz / rh); xy.y = cosz * rh; xy.x *= sinz; break; case N_POLE: lp.phi = asin(cosz); xy.y = -xy.y; break; case S_POLE: lp.phi = - asin(cosz); break; } lp.lam = atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { if ((P->height = pj_param(P->params, "dh").f) <= 0.) E_ERROR(-30); if (fabs(fabs(P->phi0) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) < EPS10) P->mode = EQUIT; else { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } P->pn1 = P->height / P->a; /* normalize by radius */ P->p = 1. + P->pn1; P->rp = 1. / P->p; P->h = 1. / P->pn1; P->pfact = (P->p + 1.) * P->h; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; return P; } ENTRY0(nsper) P->tilt = 0; ENDENTRY(setup(P)) ENTRY0(tpers) double omega, gamma; omega = pj_param(P->params, "dtilt").f * DEG_TO_RAD; gamma = pj_param(P->params, "dazi").f * DEG_TO_RAD; P->tilt = 1; P->cg = cos(gamma); P->sg = sin(gamma); P->cw = cos(omega); P->sw = sin(omega); ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_nzmg.c000066400000000000000000000067201307545355600172660ustar00rootroot00000000000000/****************************************************************************** * $Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of the nzmg (New Zealand Map Grid) projection. * Very loosely based upon DMA code by Bradford W. Drew * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include PJ_CVSID("$Id: PJ_nzmg.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(nzmg, "New Zealand Map Grid") "\n\tfixed Earth"; #define EPSLN 1e-10 #define SEC5_TO_RAD 0.4848136811095359935899141023 #define RAD_TO_SEC5 2.062648062470963551564733573 static COMPLEX bf[] = { {.7557853228, 0.0}, {.249204646, .003371507}, {-.001541739, .041058560}, {-.10162907, .01727609}, {-.26623489, -.36249218}, {-.6870983, -1.1651967} }; static double tphi[] = { 1.5627014243, .5185406398, -.03333098, -.1052906, -.0368594, .007317, .01220, .00394, -.0013 }, tpsi[] = { .6399175073, -.1358797613, .063294409, -.02526853, .0117879, -.0055161, .0026906, -.001333, .00067, -.00034 }; #define Nbf 5 #define Ntpsi 9 #define Ntphi 8 FORWARD(e_forward); /* ellipsoid */ COMPLEX p; double *C; int i; lp.phi = (lp.phi - P->phi0) * RAD_TO_SEC5; for (p.r = *(C = tpsi + (i = Ntpsi)); i ; --i) p.r = *--C + lp.phi * p.r; p.r *= lp.phi; p.i = lp.lam; p = pj_zpoly1(p, bf, Nbf); xy.x = p.i; xy.y = p.r; return xy; } INVERSE(e_inverse); /* ellipsoid */ int nn, i; COMPLEX p, f, fp, dp; double den, *C; p.r = xy.y; p.i = xy.x; for (nn = 20; nn ;--nn) { f = pj_zpolyd1(p, bf, Nbf, &fp); f.r -= xy.y; f.i -= xy.x; den = fp.r * fp.r + fp.i * fp.i; p.r += dp.r = -(f.r * fp.r + f.i * fp.i) / den; p.i += dp.i = -(f.i * fp.r - f.r * fp.i) / den; if ((fabs(dp.r) + fabs(dp.i)) <= EPSLN) break; } if (nn) { lp.lam = p.i; for (lp.phi = *(C = tphi + (i = Ntphi)); i ; --i) lp.phi = *--C + p.r * lp.phi; lp.phi = P->phi0 + p.r * lp.phi * SEC5_TO_RAD; } else lp.lam = lp.phi = HUGE_VAL; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(nzmg) /* force to International major axis */ P->ra = 1. / (P->a = 6378388.0); P->lam0 = DEG_TO_RAD * 173.; P->phi0 = DEG_TO_RAD * -41.; P->x0 = 2510000.; P->y0 = 6023150.; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_ob_tran.c000066400000000000000000000100251307545355600177300ustar00rootroot00000000000000#define PROJ_PARMS__ \ struct PJconsts *link; \ double lamp; \ double cphip, sphip; #define PJ_LIB__ #include #include PROJ_HEAD(ob_tran, "General Oblique Transformation") "\n\tMisc Sph" "\n\to_proj= plus parameters for projection" "\n\to_lat_p= o_lon_p= (new pole) or" "\n\to_alpha= o_lon_c= o_lat_c= or" "\n\to_lon_1= o_lat_1= o_lon_2= o_lat_2="; #define TOL 1e-10 FORWARD(o_forward); /* spheroid */ double coslam, sinphi, cosphi; (void) xy; coslam = cos(lp.lam); sinphi = sin(lp.phi); cosphi = cos(lp.phi); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam + P->cphip * sinphi) + P->lamp); lp.phi = aasin(P->sphip * sinphi - P->cphip * cosphi * coslam); return (P->link->fwd(lp, P->link)); } FORWARD(t_forward); /* spheroid */ double cosphi, coslam; (void) xy; cosphi = cos(lp.phi); coslam = cos(lp.lam); lp.lam = adjlon(aatan2(cosphi * sin(lp.lam), sin(lp.phi)) + P->lamp); lp.phi = aasin(- cosphi * coslam); return (P->link->fwd(lp, P->link)); } INVERSE(o_inverse); /* spheroid */ double coslam, sinphi, cosphi; lp = P->link->inv(xy, P->link); if (lp.lam != HUGE_VAL) { coslam = cos(lp.lam -= P->lamp); sinphi = sin(lp.phi); cosphi = cos(lp.phi); lp.phi = aasin(P->sphip * sinphi + P->cphip * cosphi * coslam); lp.lam = aatan2(cosphi * sin(lp.lam), P->sphip * cosphi * coslam - P->cphip * sinphi); } return (lp); } INVERSE(t_inverse); /* spheroid */ double cosphi, t; lp = P->link->inv(xy, P->link); if (lp.lam != HUGE_VAL) { cosphi = cos(lp.phi); t = lp.lam - P->lamp; lp.lam = aatan2(cosphi * sin(t), - sin(lp.phi)); lp.phi = aasin(cosphi * cos(t)); } return (lp); } FREEUP; if (P) { if (P->link) (*(P->link->pfree))(P->link); pj_dalloc(P); } } ENTRY1(ob_tran, link) int i; double phip; char *name, *s; /* get name of projection to be translated */ if (!(name = pj_param(P->params, "so_proj").s)) E_ERROR(-26); for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; if (!s || !(P->link = (*pj_list[i].proj)(0))) E_ERROR(-37); /* copy existing header into new */ P->es = 0.; /* force to spherical */ P->link->params = P->params; P->link->over = P->over; P->link->geoc = P->geoc; P->link->a = P->a; P->link->es = P->es; P->link->ra = P->ra; P->link->lam0 = P->lam0; P->link->phi0 = P->phi0; P->link->x0 = P->x0; P->link->y0 = P->y0; P->link->k0 = P->k0; /* force spherical earth */ P->link->one_es = P->link->rone_es = 1.; P->link->es = P->link->e = 0.; if (!(P->link = pj_list[i].proj(P->link))) { freeup(P); return 0; } if (pj_param(P->params, "to_alpha").i) { double lamc, phic, alpha; lamc = pj_param(P->params, "ro_lon_c").f; phic = pj_param(P->params, "ro_lat_c").f; alpha = pj_param(P->params, "ro_alpha").f; /* if (fabs(phic) <= TOL || fabs(fabs(phic) - HALFPI) <= TOL || fabs(fabs(alpha) - HALFPI) <= TOL) */ if (fabs(fabs(phic) - HALFPI) <= TOL) E_ERROR(-32); P->lamp = lamc + aatan2(-cos(alpha), -sin(alpha) * sin(phic)); phip = aasin(cos(phic) * sin(alpha)); } else if (pj_param(P->params, "to_lat_p").i) { /* specified new pole */ P->lamp = pj_param(P->params, "ro_lon_p").f; phip = pj_param(P->params, "ro_lat_p").f; } else { /* specified new "equator" points */ double lam1, lam2, phi1, phi2, con; lam1 = pj_param(P->params, "ro_lon_1").f; phi1 = pj_param(P->params, "ro_lat_1").f; lam2 = pj_param(P->params, "ro_lon_2").f; phi2 = pj_param(P->params, "ro_lat_2").f; if (fabs(phi1 - phi2) <= TOL || (con = fabs(phi1)) <= TOL || fabs(con - HALFPI) <= TOL || fabs(fabs(phi2) - HALFPI) <= TOL) E_ERROR(-33); P->lamp = atan2(cos(phi1) * sin(phi2) * cos(lam1) - sin(phi1) * cos(phi2) * cos(lam2), sin(phi1) * cos(phi2) * sin(lam2) - cos(phi1) * sin(phi2) * sin(lam1)); phip = atan(-cos(P->lamp - lam1) / tan(phi1)); } if (fabs(phip) > TOL) { /* oblique */ P->cphip = cos(phip); P->sphip = sin(phip); P->fwd = o_forward; P->inv = P->link->inv ? o_inverse : 0; } else { /* transverse */ P->fwd = t_forward; P->inv = P->link->inv ? t_inverse : 0; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_ocea.c000066400000000000000000000036331307545355600172220ustar00rootroot00000000000000#define PROJ_PARMS__ \ double rok; \ double rtk; \ double sinphi; \ double cosphi; \ double singam; \ double cosgam; #define PJ_LIB__ #include PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") "\n\tCyl, Sph" "lonc= alpha= or\n\tlat_1= lat_2= lon_1= lon_2="; FORWARD(s_forward); /* spheroid */ double t; xy.y = sin(lp.lam); /* xy.x = atan2((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) , cos(lp.lam)); */ t = cos(lp.lam); xy.x = atan((tan(lp.phi) * P->cosphi + P->sinphi * xy.y) / t); if (t < 0.) xy.x += PI; xy.x *= P->rtk; xy.y = P->rok * (P->sinphi * sin(lp.phi) - P->cosphi * cos(lp.phi) * xy.y); return (xy); } INVERSE(s_inverse); /* spheroid */ double t, s; xy.y /= P->rok; xy.x /= P->rtk; t = sqrt(1. - xy.y * xy.y); lp.phi = asin(xy.y * P->sinphi + t * P->cosphi * (s = sin(xy.x))); lp.lam = atan2(t * P->sinphi * s - xy.y * P->cosphi, t * cos(xy.x)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(ocea) double phi_0=0.0, phi_1, phi_2, lam_1, lam_2, lonz, alpha; P->rok = P->a / P->k0; P->rtk = P->a * P->k0; if ( pj_param(P->params, "talpha").i) { alpha = pj_param(P->params, "ralpha").f; lonz = pj_param(P->params, "rlonc").f; P->singam = atan(-cos(alpha)/(-sin(phi_0) * sin(alpha))) + lonz; P->sinphi = asin(cos(phi_0) * sin(alpha)); } else { phi_1 = pj_param(P->params, "rlat_1").f; phi_2 = pj_param(P->params, "rlat_2").f; lam_1 = pj_param(P->params, "rlon_1").f; lam_2 = pj_param(P->params, "rlon_2").f; P->singam = atan2(cos(phi_1) * sin(phi_2) * cos(lam_1) - sin(phi_1) * cos(phi_2) * cos(lam_2), sin(phi_1) * cos(phi_2) * sin(lam_2) - cos(phi_1) * sin(phi_2) * sin(lam_1) ); P->sinphi = atan(-cos(P->singam - lam_1) / tan(phi_1)); } P->lam0 = P->singam + HALFPI; P->cosphi = cos(P->sinphi); P->sinphi = sin(P->sinphi); P->cosgam = cos(P->singam); P->singam = sin(P->singam); P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_oea.c000066400000000000000000000031611307545355600170530ustar00rootroot00000000000000#define PROJ_PARMS__ \ double theta; \ double m, n; \ double two_r_m, two_r_n, rm, rn, hm, hn; \ double cp0, sp0; #define PJ_LIB__ #include PROJ_HEAD(oea, "Oblated Equal Area") "\n\tMisc Sph\n\tn= m= theta="; FORWARD(s_forward); /* sphere */ double Az, M, N, cp, sp, cl, shz; cp = cos(lp.phi); sp = sin(lp.phi); cl = cos(lp.lam); Az = aatan2(cp * sin(lp.lam), P->cp0 * sp - P->sp0 * cp * cl) + P->theta; shz = sin(0.5 * aacos(P->sp0 * sp + P->cp0 * cp * cl)); M = aasin(shz * sin(Az)); N = aasin(shz * cos(Az) * cos(M) / cos(M * P->two_r_m)); xy.y = P->n * sin(N * P->two_r_n); xy.x = P->m * sin(M * P->two_r_m) * cos(N) / cos(N * P->two_r_n); return (xy); } INVERSE(s_inverse); /* sphere */ double N, M, xp, yp, z, Az, cz, sz, cAz; N = P->hn * aasin(xy.y * P->rn); M = P->hm * aasin(xy.x * P->rm * cos(N * P->two_r_n) / cos(N)); xp = 2. * sin(M); yp = 2. * sin(N) * cos(M * P->two_r_m) / cos(M); cAz = cos(Az = aatan2(xp, yp) - P->theta); z = 2. * aasin(0.5 * hypot(xp, yp)); sz = sin(z); cz = cos(z); lp.phi = aasin(P->sp0 * cz + P->cp0 * sz * cAz); lp.lam = aatan2(sz * sin(Az), P->cp0 * cz - P->sp0 * sz * cAz); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(oea) if (((P->n = pj_param(P->params, "dn").f) <= 0.) || ((P->m = pj_param(P->params, "dm").f) <= 0.)) E_ERROR(-39) else { P->theta = pj_param(P->params, "rtheta").f; P->sp0 = sin(P->phi0); P->cp0 = cos(P->phi0); P->rn = 1./ P->n; P->rm = 1./ P->m; P->two_r_n = 2. * P->rn; P->two_r_m = 2. * P->rm; P->hm = 0.5 * P->m; P->hn = 0.5 * P->n; P->fwd = s_forward; P->inv = s_inverse; P->es = 0.; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_omerc.c000066400000000000000000000112721307545355600174160ustar00rootroot00000000000000#define PROJ_PARMS__ \ double alpha, lamc, lam1, phi1, lam2, phi2, Gamma, al, bl, el, \ singam, cosgam, sinrot, cosrot, u_0; \ int ellips, rot; #define PJ_LIB__ #include PROJ_HEAD(omerc, "Oblique Mercator") "\n\tCyl, Sph&Ell\n\t no_rot rot_conv no_uoff and\n\t" "alpha= lonc= or\n\t lon_1= lat_1= lon_2= lat_2="; #define TOL 1.e-7 #define EPS 1.e-10 #define TSFN0(x) tan(.5 * (HALFPI - (x))) FORWARD(e_forward); /* ellipsoid & spheroid */ double con, q, s, ul, us, vl, vs; vl = sin(P->bl * lp.lam); if (fabs(fabs(lp.phi) - HALFPI) <= EPS) { ul = lp.phi < 0. ? -P->singam : P->singam; us = P->al * lp.phi / P->bl; } else { q = P->el / (P->ellips ? pow(pj_tsfn(lp.phi, sin(lp.phi), P->e), P->bl) : TSFN0(lp.phi)); s = .5 * (q - 1. / q); ul = 2. * (s * P->singam - vl * P->cosgam) / (q + 1. / q); con = cos(P->bl * lp.lam); if (fabs(con) >= TOL) { us = P->al * atan((s * P->cosgam + vl * P->singam) / con) / P->bl; if (con < 0.) us += PI * P->al / P->bl; } else us = P->al * P->bl * lp.lam; } if (fabs(fabs(ul) - 1.) <= EPS) F_ERROR; vs = .5 * P->al * log((1. - ul) / (1. + ul)) / P->bl; us -= P->u_0; if (! P->rot) { xy.x = us; xy.y = vs; } else { xy.x = vs * P->cosrot + us * P->sinrot; xy.y = us * P->cosrot - vs * P->sinrot; } return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double q, s, ul, us, vl, vs; if (! P->rot) { us = xy.x; vs = xy.y; } else { vs = xy.x * P->cosrot - xy.y * P->sinrot; us = xy.y * P->cosrot + xy.x * P->sinrot; } us += P->u_0; q = exp(- P->bl * vs / P->al); s = .5 * (q - 1. / q); vl = sin(P->bl * us / P->al); ul = 2. * (vl * P->cosgam + s * P->singam) / (q + 1. / q); if (fabs(fabs(ul) - 1.) < EPS) { lp.lam = 0.; lp.phi = ul < 0. ? -HALFPI : HALFPI; } else { lp.phi = P->el / sqrt((1. + ul) / (1. - ul)); if (P->ellips) { if ((lp.phi = pj_phi2(pow(lp.phi, 1. / P->bl), P->e)) == HUGE_VAL) I_ERROR; } else lp.phi = HALFPI - 2. * atan(lp.phi); lp.lam = - atan2((s * P->cosgam - vl * P->singam), cos(P->bl * us / P->al)) / P->bl; } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(omerc) double con, com, cosph0, d, f, h, l, sinph0, p, j; int azi; P->rot = pj_param(P->params, "bno_rot").i == 0; if( (azi = pj_param(P->params, "talpha").i) != 0.0) { P->lamc = pj_param(P->params, "rlonc").f; P->alpha = pj_param(P->params, "ralpha").f; if ( fabs(P->alpha) <= TOL || fabs(fabs(P->phi0) - HALFPI) <= TOL || fabs(fabs(P->alpha) - HALFPI) <= TOL) E_ERROR(-32); } else { P->lam1 = pj_param(P->params, "rlon_1").f; P->phi1 = pj_param(P->params, "rlat_1").f; P->lam2 = pj_param(P->params, "rlon_2").f; P->phi2 = pj_param(P->params, "rlat_2").f; if (fabs(P->phi1 - P->phi2) <= TOL || (con = fabs(P->phi1)) <= TOL || fabs(con - HALFPI) <= TOL || fabs(fabs(P->phi0) - HALFPI) <= TOL || fabs(fabs(P->phi2) - HALFPI) <= TOL) E_ERROR(-33); } com = (P->ellips = P->es > 0.) ? sqrt(P->one_es) : 1.; if (fabs(P->phi0) > EPS) { sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); if (P->ellips) { con = 1. - P->es * sinph0 * sinph0; P->bl = cosph0 * cosph0; P->bl = sqrt(1. + P->es * P->bl * P->bl / P->one_es); P->al = P->bl * P->k0 * com / con; d = P->bl * com / (cosph0 * sqrt(con)); } else { P->bl = 1.; P->al = P->k0; d = 1. / cosph0; } if ((f = d * d - 1.) <= 0.) f = 0.; else { f = sqrt(f); if (P->phi0 < 0.) f = -f; } P->el = f += d; if (P->ellips) P->el *= pow(pj_tsfn(P->phi0, sinph0, P->e), P->bl); else P->el *= TSFN0(P->phi0); } else { P->bl = 1. / com; P->al = P->k0; P->el = d = f = 1.; } if (azi) { P->Gamma = asin(sin(P->alpha) / d); P->lam0 = P->lamc - asin((.5 * (f - 1. / f)) * tan(P->Gamma)) / P->bl; } else { if (P->ellips) { h = pow(pj_tsfn(P->phi1, sin(P->phi1), P->e), P->bl); l = pow(pj_tsfn(P->phi2, sin(P->phi2), P->e), P->bl); } else { h = TSFN0(P->phi1); l = TSFN0(P->phi2); } f = P->el / h; p = (l - h) / (l + h); j = P->el * P->el; j = (j - l * h) / (j + l * h); if ((con = P->lam1 - P->lam2) < -PI) P->lam2 -= TWOPI; else if (con > PI) P->lam2 += TWOPI; P->lam0 = adjlon(.5 * (P->lam1 + P->lam2) - atan( j * tan(.5 * P->bl * (P->lam1 - P->lam2)) / p) / P->bl); P->Gamma = atan(2. * sin(P->bl * adjlon(P->lam1 - P->lam0)) / (f - 1. / f)); P->alpha = asin(d * sin(P->Gamma)); } P->singam = sin(P->Gamma); P->cosgam = cos(P->Gamma); f = pj_param(P->params, "brot_conv").i ? P->Gamma : P->alpha; P->sinrot = sin(f); P->cosrot = cos(f); P->u_0 = pj_param(P->params, "bno_uoff").i ? 0. : fabs(P->al * atan(sqrt(d * d - 1.) / P->cosrot) / P->bl); if (P->phi0 < 0.) P->u_0 = - P->u_0; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_ortho.c000066400000000000000000000045721307545355600174510ustar00rootroot00000000000000#define PROJ_PARMS__ \ double sinph0; \ double cosph0; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(ortho, "Orthographic") "\n\tAzi, Sph."; #define EPS10 1.e-10 #define N_POLE 0 #define S_POLE 1 #define EQUIT 2 #define OBLIQ 3 FORWARD(s_forward); /* spheroid */ double coslam, cosphi, sinphi; cosphi = cos(lp.phi); coslam = cos(lp.lam); switch (P->mode) { case EQUIT: if (cosphi * coslam < - EPS10) F_ERROR; xy.y = sin(lp.phi); break; case OBLIQ: if (P->sinph0 * (sinphi = sin(lp.phi)) + P->cosph0 * cosphi * coslam < - EPS10) F_ERROR; xy.y = P->cosph0 * sinphi - P->sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; case S_POLE: if (fabs(lp.phi - P->phi0) - EPS10 > HALFPI) F_ERROR; xy.y = cosphi * coslam; break; } xy.x = cosphi * sin(lp.lam); return (xy); } INVERSE(s_inverse); /* spheroid */ double rh, cosc, sinc; if ((sinc = (rh = hypot(xy.x, xy.y))) > 1.) { if ((sinc - 1.) > EPS10) I_ERROR; sinc = 1.; } cosc = sqrt(1. - sinc * sinc); /* in this range OK */ if (fabs(rh) <= EPS10) { lp.phi = P->phi0; lp.lam = 0.0; } else { switch (P->mode) { case N_POLE: xy.y = -xy.y; lp.phi = acos(sinc); break; case S_POLE: lp.phi = - acos(sinc); break; case EQUIT: lp.phi = xy.y * sinc / rh; xy.x *= sinc; xy.y = cosc * rh; goto sinchk; case OBLIQ: lp.phi = cosc * P->sinph0 + xy.y * sinc * P->cosph0 /rh; xy.y = (cosc - P->sinph0 * lp.phi) * rh; xy.x *= sinc * P->cosph0; sinchk: if (fabs(lp.phi) >= 1.) lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else lp.phi = asin(lp.phi); break; } lp.lam = (xy.y == 0. && (P->mode == OBLIQ || P->mode == EQUIT)) ? (xy.x == 0. ? 0. : xy.x < 0. ? -HALFPI : HALFPI) : atan2(xy.x, xy.y); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(ortho) if (fabs(fabs(P->phi0) - HALFPI) <= EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else if (fabs(P->phi0) > EPS10) { P->mode = OBLIQ; P->sinph0 = sin(P->phi0); P->cosph0 = cos(P->phi0); } else P->mode = EQUIT; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_poly.c000066400000000000000000000050031307545355600172670ustar00rootroot00000000000000#define PROJ_PARMS__ \ double ml0; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(poly, "Polyconic (American)") "\n\tConic, Sph&Ell"; #define TOL 1e-10 #define CONV 1e-10 #define N_ITER 10 #define I_ITER 20 #define ITOL 1.e-12 FORWARD(e_forward); /* ellipsoid */ double ms, sp, cp; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = -P->ml0; } else { sp = sin(lp.phi); ms = fabs(cp = cos(lp.phi)) > TOL ? pj_msfn(sp, cp, P->es) / sp : 0.; xy.x = ms * sin(lp.lam *= sp); xy.y = (pj_mlfn(lp.phi, sp, cp, P->en) - P->ml0) + ms * (1. - cos(lp.lam)); } return (xy); } FORWARD(s_forward); /* spheroid */ double cot, E; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = P->ml0; } else { cot = 1. / tan(lp.phi); xy.x = sin(E = lp.lam * sin(lp.phi)) * cot; xy.y = lp.phi - P->phi0 + cot * (1. - cos(E)); } return (xy); } INVERSE(e_inverse); /* ellipsoid */ xy.y += P->ml0; if (fabs(xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { double r, c, sp, cp, s2ph, ml, mlb, mlp, dPhi; int i; r = xy.y * xy.y + xy.x * xy.x; for (lp.phi = xy.y, i = I_ITER; i ; --i) { sp = sin(lp.phi); s2ph = sp * ( cp = cos(lp.phi)); if (fabs(cp) < ITOL) I_ERROR; c = sp * (mlp = sqrt(1. - P->es * sp * sp)) / cp; ml = pj_mlfn(lp.phi, sp, cp, P->en); mlb = ml * ml + r; mlp = P->one_es / (mlp * mlp * mlp); lp.phi += ( dPhi = ( ml + ml + c * mlb - 2. * xy.y * (c * ml + 1.) ) / ( P->es * s2ph * (mlb - 2. * xy.y * ml) / c + 2.* (xy.y - ml) * (c * mlp - 1. / s2ph) - mlp - mlp )); if (fabs(dPhi) <= ITOL) break; } if (!i) I_ERROR; c = sin(lp.phi); lp.lam = asin(xy.x * tan(lp.phi) * sqrt(1. - P->es * c * c)) / sin(lp.phi); } return (lp); } INVERSE(s_inverse); /* spheroid */ double B, dphi, tp; int i; if (fabs(xy.y = P->phi0 + xy.y) <= TOL) { lp.lam = xy.x; lp.phi = 0.; } else { lp.phi = xy.y; B = xy.x * xy.x + xy.y * xy.y; i = N_ITER; do { tp = tan(lp.phi); lp.phi -= (dphi = (xy.y * (lp.phi * tp + 1.) - lp.phi - .5 * ( lp.phi * lp.phi + B) * tp) / ((lp.phi - xy.y) / tp - 1.)); } while (fabs(dphi) > CONV && --i); if (! i) I_ERROR; lp.lam = asin(xy.x * tan(lp.phi)) / sin(lp.phi); } return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } ENTRY1(poly, en) if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->inv = e_inverse; P->fwd = e_forward; } else { P->ml0 = -P->phi0; P->inv = s_inverse; P->fwd = s_forward; } ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_putp2.c000066400000000000000000000020071307545355600173570ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(putp2, "Putnins P2") "\n\tPCyl., Sph."; #define C_x 1.89490 #define C_y 1.71848 #define C_p 0.6141848493043784 #define EPS 1e-10 #define NITER 10 #define PI_DIV_3 1.0471975511965977 FORWARD(s_forward); /* spheroid */ double p, c, s, V; int i; p = C_p * sin(lp.phi); s = lp.phi * lp.phi; lp.phi *= 0.615709 + s * ( 0.00909953 + s * 0.0046292 ); for (i = NITER; i ; --i) { c = cos(lp.phi); s = sin(lp.phi); lp.phi -= V = (lp.phi + s * (c - 1.) - p) / (1. + c * (c - 1.) - s * s); if (fabs(V) < EPS) break; } if (!i) lp.phi = lp.phi < 0 ? - PI_DIV_3 : PI_DIV_3; xy.x = C_x * lp.lam * (cos(lp.phi) - 0.5); xy.y = C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ double c; lp.phi = aasin(xy.y / C_y); lp.lam = xy.x / (C_x * ((c = cos(lp.phi)) - 0.5)); lp.phi = aasin((lp.phi + sin(lp.phi) * (c - 1.)) / C_p); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(putp2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_putp3.c000066400000000000000000000013101307545355600173540ustar00rootroot00000000000000#define PROJ_PARMS__ \ double A; #define PJ_LIB__ # include PROJ_HEAD(putp3, "Putnins P3") "\n\tPCyl., Sph."; PROJ_HEAD(putp3p, "Putnins P3'") "\n\tPCyl., no inv., Sph."; #define C 0.79788456 #define RPISQ 0.1013211836 FORWARD(s_forward); /* spheroid */ xy.x = C * lp.lam * (1. - P->A * lp.phi * lp.phi); xy.y = C * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C; lp.lam = xy.x / (C * (1. - P->A * lp.phi * lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp3) P->A = 4. * RPISQ; ENDENTRY(setup(P)) ENTRY0(putp3p) P->A = 2. * RPISQ; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_putp4p.c000066400000000000000000000015441307545355600175460ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x, C_y; #define PJ_LIB__ # include PROJ_HEAD(putp4p, "Putnins P4'") "\n\tPCyl., Sph."; PROJ_HEAD(weren, "Werenskiold I") "\n\tPCyl., Sph."; FORWARD(s_forward); /* spheroid */ lp.phi = aasin(0.883883476 * sin(lp.phi)); xy.x = P->C_x * lp.lam * cos(lp.phi); xy.x /= cos(lp.phi *= 0.333333333333333); xy.y = P->C_y * sin(lp.phi); return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = aasin(xy.y / P->C_y); lp.lam = xy.x * cos(lp.phi) / P->C_x; lp.phi *= 3.; lp.lam /= cos(lp.phi); lp.phi = aasin(1.13137085 * sin(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp4p) P->C_x = 0.874038744; P->C_y = 3.883251825; ENDENTRY(setup(P)) ENTRY0(weren) P->C_x = 1.; P->C_y = 4.442882938; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_putp5.c000066400000000000000000000013411307545355600173620ustar00rootroot00000000000000#define PROJ_PARMS__ \ double A, B; #define PJ_LIB__ # include PROJ_HEAD(putp5, "Putnins P5") "\n\tPCyl., Sph."; PROJ_HEAD(putp5p, "Putnins P5'") "\n\tPCyl., Sph."; #define C 1.01346 #define D 1.2158542 FORWARD(s_forward); /* spheroid */ xy.x = C * lp.lam * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi)); xy.y = C * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C; lp.lam = xy.x / (C * (P->A - P->B * sqrt(1. + D * lp.phi * lp.phi))); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp5) P->A = 2.; P->B = 1.; ENDENTRY(setup(P)) ENTRY0(putp5p) P->A = 1.5; P->B = 0.5; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_putp6.c000066400000000000000000000024411307545355600173650ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x, C_y, A, B, D; #define PJ_LIB__ #include PROJ_HEAD(putp6, "Putnins P6") "\n\tPCyl., Sph."; PROJ_HEAD(putp6p, "Putnins P6'") "\n\tPCyl., Sph."; #define EPS 1e-10 #define NITER 10 #define CON_POLE 1.732050807568877 FORWARD(s_forward); /* spheroid */ double p, r, V; int i; p = P->B * sin(lp.phi); lp.phi *= 1.10265779; for (i = NITER; i ; --i) { r = sqrt(1. + lp.phi * lp.phi); lp.phi -= V = ( (P->A - r) * lp.phi - log(lp.phi + r) - p ) / (P->A - 2. * r); if (fabs(V) < EPS) break; } if (!i) lp.phi = p < 0. ? -CON_POLE : CON_POLE; xy.x = P->C_x * lp.lam * (P->D - sqrt(1. + lp.phi * lp.phi)); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ double r; lp.phi = xy.y / P->C_y; r = sqrt(1. + lp.phi * lp.phi); lp.lam = xy.x / (P->C_x * (P->D - r)); lp.phi = aasin( ( (P->A - r) * lp.phi - log(lp.phi + r) ) / P->B); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(putp6) P->C_x = 1.01346; P->C_y = 0.91910; P->A = 4.; P->B = 2.1471437182129378784; P->D = 2.; ENDENTRY(setup(P)) ENTRY0(putp6p) P->C_x = 0.44329; P->C_y = 0.80404; P->A = 6.; P->B = 5.61125; P->D = 3.; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_robin.c000066400000000000000000000065751307545355600174340ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(robin, "Robinson") "\n\tPCyl., Sph."; #define V(C,z) (C.c0 + z * (C.c1 + z * (C.c2 + z * C.c3))) #define DV(C,z) (C.c1 + z * (C.c2 + C.c2 + z * 3. * C.c3)) /* note: following terms based upon 5 deg. intervals in degrees. */ static struct COEFS { float c0, c1, c2, c3; } X[] = { 1, -5.67239e-12, -7.15511e-05, 3.11028e-06, 0.9986, -0.000482241, -2.4897e-05, -1.33094e-06, 0.9954, -0.000831031, -4.4861e-05, -9.86588e-07, 0.99, -0.00135363, -5.96598e-05, 3.67749e-06, 0.9822, -0.00167442, -4.4975e-06, -5.72394e-06, 0.973, -0.00214869, -9.03565e-05, 1.88767e-08, 0.96, -0.00305084, -9.00732e-05, 1.64869e-06, 0.9427, -0.00382792, -6.53428e-05, -2.61493e-06, 0.9216, -0.00467747, -0.000104566, 4.8122e-06, 0.8962, -0.00536222, -3.23834e-05, -5.43445e-06, 0.8679, -0.00609364, -0.0001139, 3.32521e-06, 0.835, -0.00698325, -6.40219e-05, 9.34582e-07, 0.7986, -0.00755337, -5.00038e-05, 9.35532e-07, 0.7597, -0.00798325, -3.59716e-05, -2.27604e-06, 0.7186, -0.00851366, -7.0112e-05, -8.63072e-06, 0.6732, -0.00986209, -0.000199572, 1.91978e-05, 0.6213, -0.010418, 8.83948e-05, 6.24031e-06, 0.5722, -0.00906601, 0.000181999, 6.24033e-06, 0.5322, 0.,0.,0. }, Y[] = { 0, 0.0124, 3.72529e-10, 1.15484e-09, 0.062, 0.0124001, 1.76951e-08, -5.92321e-09, 0.124, 0.0123998, -7.09668e-08, 2.25753e-08, 0.186, 0.0124008, 2.66917e-07, -8.44523e-08, 0.248, 0.0123971, -9.99682e-07, 3.15569e-07, 0.31, 0.0124108, 3.73349e-06, -1.1779e-06, 0.372, 0.0123598, -1.3935e-05, 4.39588e-06, 0.434, 0.0125501, 5.20034e-05, -1.00051e-05, 0.4968, 0.0123198, -9.80735e-05, 9.22397e-06, 0.5571, 0.0120308, 4.02857e-05, -5.2901e-06, 0.6176, 0.0120369, -3.90662e-05, 7.36117e-07, 0.6769, 0.0117015, -2.80246e-05, -8.54283e-07, 0.7346, 0.0113572, -4.08389e-05, -5.18524e-07, 0.7903, 0.0109099, -4.86169e-05, -1.0718e-06, 0.8435, 0.0103433, -6.46934e-05, 5.36384e-09, 0.8936, 0.00969679, -6.46129e-05, -8.54894e-06, 0.9394, 0.00840949, -0.000192847, -4.21023e-06, 0.9761, 0.00616525, -0.000256001, -4.21021e-06, 1., 0.,0.,0 }; #define FXC 0.8487 #define FYC 1.3523 #define C1 11.45915590261646417544 #define RC1 0.08726646259971647884 #define NODES 18 #define ONEEPS 1.000001 #define EPS 1e-8 FORWARD(s_forward); /* spheroid */ int i; double dphi; i = floor((dphi = fabs(lp.phi)) * C1); if (i >= NODES) i = NODES - 1; dphi = RAD_TO_DEG * (dphi - RC1 * i); xy.x = V(X[i], dphi) * FXC * lp.lam; xy.y = V(Y[i], dphi) * FYC; if (lp.phi < 0.) xy.y = -xy.y; return (xy); } INVERSE(s_inverse); /* spheroid */ int i; double t, t1; struct COEFS T; lp.lam = xy.x / FXC; lp.phi = fabs(xy.y / FYC); if (lp.phi >= 1.) { /* simple pathologic cases */ if (lp.phi > ONEEPS) I_ERROR else { lp.phi = xy.y < 0. ? -HALFPI : HALFPI; lp.lam /= X[NODES].c0; } } else { /* general problem */ /* in Y space, reduce to table interval */ for (i = floor(lp.phi * NODES);;) { if (Y[i].c0 > lp.phi) --i; else if (Y[i+1].c0 <= lp.phi) ++i; else break; } T = Y[i]; /* first guess, linear interp */ t = 5. * (lp.phi - T.c0)/(Y[i+1].c0 - T.c0); /* make into root */ T.c0 -= lp.phi; for (;;) { /* Newton-Raphson reduction */ t -= t1 = V(T,t) / DV(T,t); if (fabs(t1) < EPS) break; } lp.phi = (5 * i + t) * DEG_TO_RAD; if (xy.y < 0.) lp.phi = -lp.phi; lp.lam /= V(X[i], t); } return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(robin) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_rpoly.c000066400000000000000000000014371307545355600174600ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phi1; \ double fxa; \ double fxb; \ int mode; #define EPS 1e-9 #define PJ_LIB__ #include PROJ_HEAD(rpoly, "Rectangular Polyconic") "\n\tConic, Sph., no inv.\n\tlat_ts="; FORWARD(s_forward); /* spheroid */ double fa; if (P->mode) fa = tan(lp.lam * P->fxb) * P->fxa; else fa = 0.5 * lp.lam; if (fabs(lp.phi) < EPS) { xy.x = fa + fa; xy.y = - P->phi0; } else { xy.y = 1. / tan(lp.phi); xy.x = sin(fa = 2. * atan(fa * sin(lp.phi))) * xy.y; xy.y = lp.phi - P->phi0 + (1. - cos(fa)) * xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(rpoly) if ((P->mode = (P->phi1 = fabs(pj_param(P->params, "rlat_ts").f)) > EPS)) { P->fxb = 0.5 * sin(P->phi1); P->fxa = 0.5 / P->fxb; } P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_sconics.c000066400000000000000000000066721307545355600177620ustar00rootroot00000000000000#define PROJ_PARMS__ \ double n; \ double rho_c; \ double rho_0; \ double sig; \ double c1, c2; \ int type; #define PJ_LIB__ #include #define EULER 0 #define MURD1 1 #define MURD2 2 #define MURD3 3 #define PCONIC 4 #define TISSOT 5 #define VITK1 6 #define EPS10 1.e-10 #define EPS 1e-10 #define LINE2 "\n\tConic, Sph\n\tlat_1= and lat_2=" PROJ_HEAD(tissot, "Tissot") LINE2; PROJ_HEAD(murd1, "Murdoch I") LINE2; PROJ_HEAD(murd2, "Murdoch II") LINE2; PROJ_HEAD(murd3, "Murdoch III") LINE2; PROJ_HEAD(euler, "Euler") LINE2; PROJ_HEAD(pconic, "Perspective Conic") LINE2; PROJ_HEAD(vitk1, "Vitkovsky I") LINE2; /* get common factors for simple conics */ static int phi12(PJ *P, double *del) { double p1, p2; int err = 0; if (!pj_param(P->params, "tlat_1").i || !pj_param(P->params, "tlat_2").i) { err = -41; } else { p1 = pj_param(P->params, "rlat_1").f; p2 = pj_param(P->params, "rlat_2").f; *del = 0.5 * (p2 - p1); P->sig = 0.5 * (p2 + p1); err = (fabs(*del) < EPS || fabs(P->sig) < EPS) ? -42 : 0; *del = *del; } return err; } FORWARD(s_forward); /* spheroid */ double rho; switch (P->type) { case MURD2: rho = P->rho_c + tan(P->sig - lp.phi); break; case PCONIC: rho = P->c2 * (P->c1 - tan(lp.phi)); break; default: rho = P->rho_c - lp.phi; break; } xy.x = rho * sin( lp.lam *= P->n ); xy.y = P->rho_0 - rho * cos(lp.lam); return (xy); } INVERSE(s_inverse); /* ellipsoid & spheroid */ double rho; rho = hypot(xy.x, xy.y = P->rho_0 - xy.y); if (P->n < 0.) { rho = - rho; xy.x = - xy.x; xy.y = - xy.y; } lp.lam = atan2(xy.x, xy.y) / P->n; switch (P->type) { case PCONIC: lp.phi = atan(P->c1 - rho / P->c2) + P->sig; break; case MURD2: lp.phi = P->sig - atan(rho - P->rho_c); break; default: lp.phi = P->rho_c - rho; } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { double del, cs; int i; if( (i = phi12(P, &del)) ) E_ERROR(i); switch (P->type) { case TISSOT: P->n = sin(P->sig); cs = cos(del); P->rho_c = P->n / cs + cs / P->n; P->rho_0 = sqrt((P->rho_c - 2 * sin(P->phi0))/P->n); break; case MURD1: P->rho_c = sin(del)/(del * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; P->n = sin(P->sig); break; case MURD2: P->rho_c = (cs = sqrt(cos(del))) / tan(P->sig); P->rho_0 = P->rho_c + tan(P->sig - P->phi0); P->n = sin(P->sig) * cs; break; case MURD3: P->rho_c = del / (tan(P->sig) * tan(del)) + P->sig; P->rho_0 = P->rho_c - P->phi0; P->n = sin(P->sig) * sin(del) * tan(del) / (del * del); break; case EULER: P->n = sin(P->sig) * sin(del) / del; del *= 0.5; P->rho_c = del / (tan(del) * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; break; case PCONIC: P->n = sin(P->sig); P->c2 = cos(del); P->c1 = 1./tan(P->sig); if (fabs(del = P->phi0 - P->sig) - EPS10 >= HALFPI) E_ERROR(-43); P->rho_0 = P->c2 * (P->c1 - tan(del)); break; case VITK1: P->n = (cs = tan(del)) * sin(P->sig) / del; P->rho_c = del / (cs * tan(P->sig)) + P->sig; P->rho_0 = P->rho_c - P->phi0; break; } P->inv = s_inverse; P->fwd = s_forward; P->es = 0; return (P); } ENTRY0(euler) P->type = EULER; ENDENTRY(setup(P)) ENTRY0(tissot) P->type = TISSOT; ENDENTRY(setup(P)) ENTRY0(murd1) P->type = MURD1; ENDENTRY(setup(P)) ENTRY0(murd2) P->type = MURD2; ENDENTRY(setup(P)) ENTRY0(murd3) P->type = MURD3; ENDENTRY(setup(P)) ENTRY0(pconic) P->type = PCONIC; ENDENTRY(setup(P)) ENTRY0(vitk1) P->type = VITK1; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_somerc.c000066400000000000000000000034741307545355600176060ustar00rootroot00000000000000#define PROJ_PARMS__ \ double K, c, hlf_e, kR, cosp0, sinp0; #define PJ_LIB__ #include PROJ_HEAD(somerc, "Swiss. Obl. Mercator") "\n\tCyl, Ell\n\tFor CH1903"; #define EPS 1.e-10 #define NITER 6 FORWARD(e_forward); double phip, lamp, phipp, lampp, sp, cp; sp = P->e * sin(lp.phi); phip = 2.* atan( exp( P->c * ( log(tan(FORTPI + 0.5 * lp.phi)) - P->hlf_e * log((1. + sp)/(1. - sp))) + P->K)) - HALFPI; lamp = P->c * lp.lam; cp = cos(phip); phipp = aasin(P->cosp0 * sin(phip) - P->sinp0 * cp * cos(lamp)); lampp = aasin(cp * sin(lamp) / cos(phipp)); xy.x = P->kR * lampp; xy.y = P->kR * log(tan(FORTPI + 0.5 * phipp)); return (xy); } INVERSE(e_inverse); /* ellipsoid & spheroid */ double phip, lamp, phipp, lampp, cp, esp, con, delp; int i; phipp = 2. * (atan(exp(xy.y / P->kR)) - FORTPI); lampp = xy.x / P->kR; cp = cos(phipp); phip = aasin(P->cosp0 * sin(phipp) + P->sinp0 * cp * cos(lampp)); lamp = aasin(cp * sin(lampp) / cos(phip)); con = (P->K - log(tan(FORTPI + 0.5 * phip)))/P->c; for (i = NITER; i ; --i) { esp = P->e * sin(phip); delp = (con + log(tan(FORTPI + 0.5 * phip)) - P->hlf_e * log((1. + esp)/(1. - esp)) ) * (1. - esp * esp) * cos(phip) * P->rone_es; phip -= delp; if (fabs(delp) < EPS) break; } if (i) { lp.phi = phip; lp.lam = lamp / P->c; } else I_ERROR return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(somerc) double cp, phip0, sp; P->hlf_e = 0.5 * P->e; cp = cos(P->phi0); cp *= cp; P->c = sqrt(1 + P->es * cp * cp * P->rone_es); sp = sin(P->phi0); P->cosp0 = cos( phip0 = aasin(P->sinp0 = sp / P->c) ); sp *= P->e; P->K = log(tan(FORTPI + 0.5 * phip0)) - P->c * ( log(tan(FORTPI + 0.5 * P->phi0)) - P->hlf_e * log((1. + sp) / (1. - sp))); P->kR = P->k0 * sqrt(P->one_es) / (1. - sp * sp); P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_stere.c000066400000000000000000000132411307545355600174310ustar00rootroot00000000000000#define PROJ_PARMS__ \ double phits; \ double sinX1; \ double cosX1; \ double akm1; \ int mode; #define PJ_LIB__ #include PROJ_HEAD(stere, "Stereographic") "\n\tAzi, Sph&Ell\n\tlat_ts="; PROJ_HEAD(ups, "Universal Polar Stereographic") "\n\tAzi, Sph&Ell\n\tsouth"; #define sinph0 P->sinX1 #define cosph0 P->cosX1 #define EPS10 1.e-10 #define TOL 1.e-8 #define NITER 8 #define CONV 1.e-10 #define S_POLE 0 #define N_POLE 1 #define OBLIQ 2 #define EQUIT 3 static double ssfn_(double phit, double sinphi, double eccen) { sinphi *= eccen; return (tan (.5 * (HALFPI + phit)) * pow((1. - sinphi) / (1. + sinphi), .5 * eccen)); } FORWARD(e_forward); /* ellipsoid */ double coslam, sinlam, sinX=0.0, cosX=0.0, X, A, sinphi; coslam = cos(lp.lam); sinlam = sin(lp.lam); sinphi = sin(lp.phi); if (P->mode == OBLIQ || P->mode == EQUIT) { sinX = sin(X = 2. * atan(ssfn_(lp.phi, sinphi, P->e)) - HALFPI); cosX = cos(X); } switch (P->mode) { case OBLIQ: A = P->akm1 / (P->cosX1 * (1. + P->sinX1 * sinX + P->cosX1 * cosX * coslam)); xy.y = A * (P->cosX1 * sinX - P->sinX1 * cosX * coslam); goto xmul; case EQUIT: A = 2. * P->akm1 / (1. + cosX * coslam); xy.y = A * sinX; xmul: xy.x = A * cosX; break; case S_POLE: lp.phi = -lp.phi; coslam = - coslam; sinphi = -sinphi; case N_POLE: xy.x = P->akm1 * pj_tsfn(lp.phi, sinphi, P->e); xy.y = - xy.x * coslam; break; } xy.x = xy.x * sinlam; return (xy); } FORWARD(s_forward); /* spheroid */ double sinphi, cosphi, coslam, sinlam; sinphi = sin(lp.phi); cosphi = cos(lp.phi); coslam = cos(lp.lam); sinlam = sin(lp.lam); switch (P->mode) { case EQUIT: xy.y = 1. + cosphi * coslam; goto oblcon; case OBLIQ: xy.y = 1. + sinph0 * sinphi + cosph0 * cosphi * coslam; oblcon: if (xy.y <= EPS10) F_ERROR; xy.x = (xy.y = P->akm1 / xy.y) * cosphi * sinlam; xy.y *= (P->mode == EQUIT) ? sinphi : cosph0 * sinphi - sinph0 * cosphi * coslam; break; case N_POLE: coslam = - coslam; lp.phi = - lp.phi; case S_POLE: if (fabs(lp.phi - HALFPI) < TOL) F_ERROR; xy.x = sinlam * ( xy.y = P->akm1 * tan(FORTPI + .5 * lp.phi) ); xy.y *= coslam; break; } return (xy); } INVERSE(e_inverse); /* ellipsoid */ double cosphi, sinphi, tp=0.0, phi_l=0.0, rho, halfe=0.0, halfpi=0.0; int i; rho = hypot(xy.x, xy.y); switch (P->mode) { case OBLIQ: case EQUIT: cosphi = cos( tp = 2. * atan2(rho * P->cosX1 , P->akm1) ); sinphi = sin(tp); if( rho == 0.0 ) phi_l = asin(cosphi * P->sinX1); else phi_l = asin(cosphi * P->sinX1 + (xy.y * sinphi * P->cosX1 / rho)); tp = tan(.5 * (HALFPI + phi_l)); xy.x *= sinphi; xy.y = rho * P->cosX1 * cosphi - xy.y * P->sinX1* sinphi; halfpi = HALFPI; halfe = .5 * P->e; break; case N_POLE: xy.y = -xy.y; case S_POLE: phi_l = HALFPI - 2. * atan(tp = - rho / P->akm1); halfpi = -HALFPI; halfe = -.5 * P->e; break; } for (i = NITER; i--; phi_l = lp.phi) { sinphi = P->e * sin(phi_l); lp.phi = 2. * atan(tp * pow((1.+sinphi)/(1.-sinphi), halfe)) - halfpi; if (fabs(phi_l - lp.phi) < CONV) { if (P->mode == S_POLE) lp.phi = -lp.phi; lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); return (lp); } } I_ERROR; } INVERSE(s_inverse); /* spheroid */ double c, rh, sinc, cosc; sinc = sin(c = 2. * atan((rh = hypot(xy.x, xy.y)) / P->akm1)); cosc = cos(c); lp.lam = 0.; switch (P->mode) { case EQUIT: if (fabs(rh) <= EPS10) lp.phi = 0.; else lp.phi = asin(xy.y * sinc / rh); if (cosc != 0. || xy.x != 0.) lp.lam = atan2(xy.x * sinc, cosc * rh); break; case OBLIQ: if (fabs(rh) <= EPS10) lp.phi = P->phi0; else lp.phi = asin(cosc * sinph0 + xy.y * sinc * cosph0 / rh); if ((c = cosc - sinph0 * sin(lp.phi)) != 0. || xy.x != 0.) lp.lam = atan2(xy.x * sinc * cosph0, c * rh); break; case N_POLE: xy.y = -xy.y; case S_POLE: if (fabs(rh) <= EPS10) lp.phi = P->phi0; else lp.phi = asin(P->mode == S_POLE ? - cosc : cosc); lp.lam = (xy.x == 0. && xy.y == 0.) ? 0. : atan2(xy.x, xy.y); break; } return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { /* general initialization */ double t; if (fabs((t = fabs(P->phi0)) - HALFPI) < EPS10) P->mode = P->phi0 < 0. ? S_POLE : N_POLE; else P->mode = t > EPS10 ? OBLIQ : EQUIT; P->phits = fabs(P->phits); if (P->es) { double X; switch (P->mode) { case N_POLE: case S_POLE: if (fabs(P->phits - HALFPI) < EPS10) P->akm1 = 2. * P->k0 / sqrt(pow(1+P->e,1+P->e)*pow(1-P->e,1-P->e)); else { P->akm1 = cos(P->phits) / pj_tsfn(P->phits, t = sin(P->phits), P->e); t *= P->e; P->akm1 /= sqrt(1. - t * t); } break; case EQUIT: P->akm1 = 2. * P->k0; break; case OBLIQ: t = sin(P->phi0); X = 2. * atan(ssfn_(P->phi0, t, P->e)) - HALFPI; t *= P->e; P->akm1 = 2. * P->k0 * cos(P->phi0) / sqrt(1. - t * t); P->sinX1 = sin(X); P->cosX1 = cos(X); break; } P->inv = e_inverse; P->fwd = e_forward; } else { switch (P->mode) { case OBLIQ: sinph0 = sin(P->phi0); cosph0 = cos(P->phi0); case EQUIT: P->akm1 = 2. * P->k0; break; case S_POLE: case N_POLE: P->akm1 = fabs(P->phits - HALFPI) >= EPS10 ? cos(P->phits) / tan(FORTPI - .5 * P->phits) : 2. * P->k0 ; break; } P->inv = s_inverse; P->fwd = s_forward; } return P; } ENTRY0(stere) P->phits = pj_param(P->params, "tlat_ts").i ? P->phits = pj_param(P->params, "rlat_ts").f : HALFPI; ENDENTRY(setup(P)) ENTRY0(ups) /* International Ellipsoid */ P->phi0 = pj_param(P->params, "bsouth").i ? - HALFPI: HALFPI; if (!P->es) E_ERROR(-34); P->k0 = .994; P->x0 = 2000000.; P->y0 = 2000000.; P->phits = HALFPI; P->lam0 = 0.; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_sterea.c000066400000000000000000000050061307545355600175720ustar00rootroot00000000000000/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: PJ_sterea.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double phic0; \ double cosc0, sinc0; \ double R2; \ void *en; #define PJ_LIB__ #include PROJ_HEAD(sterea, "Oblique Stereographic Alternative") "\n\tAzimuthal, Sph&Ell"; # define DEL_TOL 1.e-14 # define MAX_ITER 10 FORWARD(e_forward); /* ellipsoid */ double cosc, sinc, cosl, k; lp = pj_gauss(lp, P->en); sinc = sin(lp.phi); cosc = cos(lp.phi); cosl = cos(lp.lam); k = P->k0 * P->R2 / (1. + P->sinc0 * sinc + P->cosc0 * cosc * cosl); xy.x = k * cosc * sin(lp.lam); xy.y = k * (P->cosc0 * sinc - P->sinc0 * cosc * cosl); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double rho, c, sinc, cosc; xy.x /= P->k0; xy.y /= P->k0; if((rho = hypot(xy.x, xy.y))) { c = 2. * atan2(rho, P->R2); sinc = sin(c); cosc = cos(c); lp.phi = asin(cosc * P->sinc0 + xy.y * sinc * P->cosc0 / rho); lp.lam = atan2(xy.x * sinc, rho * P->cosc0 * cosc - xy.y * P->sinc0 * sinc); } else { lp.phi = P->phic0; lp.lam = 0.; } return(pj_inv_gauss(lp, P->en)); } FREEUP; if (P) { if (P->en) free(P->en); free(P); } } ENTRY0(sterea) double R; if (!(P->en = pj_gauss_ini(P->e, P->phi0, &(P->phic0), &R))) E_ERROR_0; P->sinc0 = sin(P->phic0); P->cosc0 = cos(P->phic0); P->R2 = 2. * R; P->inv = e_inverse; P->fwd = e_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_sts.c000066400000000000000000000023751307545355600171260ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x, C_y, C_p; \ int tan_mode; #define PJ_LIB__ # include PROJ_HEAD(kav5, "Kavraisky V") "\n\tPCyl., Sph."; PROJ_HEAD(qua_aut, "Quartic Authalic") "\n\tPCyl., Sph."; PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine (No. 1)") "\n\tPCyl., Sph."; PROJ_HEAD(fouc, "Foucaut") "\n\tPCyl., Sph."; FORWARD(s_forward); /* spheroid */ double c; xy.x = P->C_x * lp.lam * cos(lp.phi); xy.y = P->C_y; lp.phi *= P->C_p; c = cos(lp.phi); if (P->tan_mode) { xy.x *= c * c; xy.y *= tan(lp.phi); } else { xy.x /= c; xy.y *= sin(lp.phi); } return (xy); } INVERSE(s_inverse); /* spheroid */ double c; xy.y /= P->C_y; c = cos(lp.phi = P->tan_mode ? atan(xy.y) : aasin(xy.y)); lp.phi /= P->C_p; lp.lam = xy.x / (P->C_x * cos(lp.phi)); if (P->tan_mode) lp.lam /= c * c; else lp.lam *= c; return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P, double p, double q, int mode) { P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; P->C_x = q / p; P->C_y = p; P->C_p = 1/ q; P->tan_mode = mode; return P; } ENTRY0(kav5) ENDENTRY(setup(P, 1.50488, 1.35439, 0)) ENTRY0(qua_aut) ENDENTRY(setup(P, 2., 2., 0)) ENTRY0(mbt_s) ENDENTRY(setup(P, 1.48875, 1.36509, 0)) ENTRY0(fouc) ENDENTRY(setup(P, 2., 2., 1)) therion-5.4.1/extern/proj4/PJ_tcc.c000066400000000000000000000007141307545355600170610ustar00rootroot00000000000000#define PROJ_PARMS__ \ double ap; #define EPS10 1.e-10 #define PJ_LIB__ #include PROJ_HEAD(tcc, "Transverse Central Cylindrical") "\n\tCyl, Sph, no inv."; FORWARD(s_forward); /* spheroid */ double b, bt; b = cos(lp.phi) * sin(lp.lam); if ((bt = 1. - b * b) < EPS10) F_ERROR; xy.x = b / sqrt(bt); xy.y = atan2(tan(lp.phi) , cos(lp.lam)); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tcc) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_tcea.c000066400000000000000000000012021307545355600172150ustar00rootroot00000000000000#define PROJ_PARMS__ \ double rk0; #define PJ_LIB__ #include PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") "\n\tCyl, Sph"; FORWARD(s_forward); /* spheroid */ xy.x = P->rk0 * cos(lp.phi) * sin(lp.lam); xy.y = P->k0 * (atan2(tan(lp.phi), cos(lp.lam)) - P->phi0); return (xy); } INVERSE(s_inverse); /* spheroid */ double t; xy.y = xy.y * P->rk0 + P->phi0; xy.x *= P->k0; t = sqrt(1. - xy.x * xy.x); lp.phi = asin(t * sin(xy.y)); lp.lam = atan2(xy.x, t * cos(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tcea) P->rk0 = 1 / P->k0; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_tmerc.c000066400000000000000000000113001307545355600174130ustar00rootroot00000000000000#define PROJ_PARMS__ \ double esp; \ double ml0; \ double *en; #define PJ_LIB__ #include PROJ_HEAD(tmerc, "Transverse Mercator") "\n\tCyl, Sph&Ell"; PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") "\n\tCyl, Sph\n\tzone= south"; #define EPS10 1.e-10 #define aks0 P->esp #define aks5 P->ml0 #define FC1 1. #define FC2 .5 #define FC3 .16666666666666666666 #define FC4 .08333333333333333333 #define FC5 .05 #define FC6 .03333333333333333333 #define FC7 .02380952380952380952 #define FC8 .01785714285714285714 FORWARD(e_forward); /* ellipse */ double al, als, n, cosphi, sinphi, t; /* * Fail if our longitude is more than 90 degrees from the * central meridian since the results are essentially garbage. * Is error -20 really an appropriate return value? * * http://trac.osgeo.org/proj/ticket/5 */ if( lp.lam < -HALFPI || lp.lam > HALFPI ) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; pj_errno = -14; return xy; } sinphi = sin(lp.phi); cosphi = cos(lp.phi); t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; t *= t; al = cosphi * lp.lam; als = al * al; al /= sqrt(1. - P->es * sinphi * sinphi); n = P->esp * cosphi * cosphi; xy.x = P->k0 * al * (FC1 + FC3 * als * (1. - t + n + FC5 * als * (5. + t * (t - 18.) + n * (14. - 58. * t) + FC7 * als * (61. + t * ( t * (179. - t) - 479. ) ) ))); xy.y = P->k0 * (pj_mlfn(lp.phi, sinphi, cosphi, P->en) - P->ml0 + sinphi * al * lp.lam * FC2 * ( 1. + FC4 * als * (5. - t + n * (9. + 4. * n) + FC6 * als * (61. + t * (t - 58.) + n * (270. - 330 * t) + FC8 * als * (1385. + t * ( t * (543. - t) - 3111.) ) )))); return (xy); } FORWARD(s_forward); /* sphere */ double b, cosphi; /* * Fail if our longitude is more than 90 degrees from the * central meridian since the results are essentially garbage. * Is error -20 really an appropriate return value? * * http://trac.osgeo.org/proj/ticket/5 */ if( lp.lam < -HALFPI || lp.lam > HALFPI ) { xy.x = HUGE_VAL; xy.y = HUGE_VAL; pj_errno = -14; return xy; } b = (cosphi = cos(lp.phi)) * sin(lp.lam); if (fabs(fabs(b) - 1.) <= EPS10) F_ERROR; xy.x = aks5 * log((1. + b) / (1. - b)); if ((b = fabs( xy.y = cosphi * cos(lp.lam) / sqrt(1. - b * b) )) >= 1.) { if ((b - 1.) > EPS10) F_ERROR else xy.y = 0.; } else xy.y = acos(xy.y); if (lp.phi < 0.) xy.y = -xy.y; xy.y = aks0 * (xy.y - P->phi0); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double n, con, cosphi, d, ds, sinphi, t; lp.phi = pj_inv_mlfn(P->ml0 + xy.y / P->k0, P->es, P->en); if (fabs(lp.phi) >= HALFPI) { lp.phi = xy.y < 0. ? -HALFPI : HALFPI; lp.lam = 0.; } else { sinphi = sin(lp.phi); cosphi = cos(lp.phi); t = fabs(cosphi) > 1e-10 ? sinphi/cosphi : 0.; n = P->esp * cosphi * cosphi; d = xy.x * sqrt(con = 1. - P->es * sinphi * sinphi) / P->k0; con *= t; t *= t; ds = d * d; lp.phi -= (con * ds / (1.-P->es)) * FC2 * (1. - ds * FC4 * (5. + t * (3. - 9. * n) + n * (1. - 4 * n) - ds * FC6 * (61. + t * (90. - 252. * n + 45. * t) + 46. * n - ds * FC8 * (1385. + t * (3633. + t * (4095. + 1574. * t)) ) ))); lp.lam = d*(FC1 - ds*FC3*( 1. + 2.*t + n - ds*FC5*(5. + t*(28. + 24.*t + 8.*n) + 6.*n - ds * FC7 * (61. + t * (662. + t * (1320. + 720. * t)) ) ))) / cosphi; } return (lp); } INVERSE(s_inverse); /* sphere */ double h, g; h = exp(xy.x / aks0); g = .5 * (h - 1. / h); h = cos(P->phi0 + xy.y / aks0); lp.phi = asin(sqrt((1. - h * h) / (1. + g * g))); if (xy.y < 0.) lp.phi = -lp.phi; lp.lam = (g || h) ? atan2(g, h) : 0.; return (lp); } FREEUP; if (P) { if (P->en) pj_dalloc(P->en); pj_dalloc(P); } } static PJ * setup(PJ *P) { /* general initialization */ if (P->es) { if (!(P->en = pj_enfn(P->es))) E_ERROR_0; P->ml0 = pj_mlfn(P->phi0, sin(P->phi0), cos(P->phi0), P->en); P->esp = P->es / (1. - P->es); P->inv = e_inverse; P->fwd = e_forward; } else { aks0 = P->k0; aks5 = .5 * aks0; P->inv = s_inverse; P->fwd = s_forward; } return P; } ENTRY1(tmerc, en) ENDENTRY(setup(P)) ENTRY1(utm, en) int zone; if (!P->es) E_ERROR(-34); P->y0 = pj_param(P->params, "bsouth").i ? 10000000. : 0.; P->x0 = 500000.; if (pj_param(P->params, "tzone").i) /* zone input ? */ if ((zone = pj_param(P->params, "izone").i) > 0 && zone <= 60) --zone; else E_ERROR(-35) else /* nearest central meridian input */ if ((zone = floor((adjlon(P->lam0) + PI) * 30. / PI)) < 0) zone = 0; else if (zone >= 60) zone = 59; P->lam0 = (zone + .5) * PI / 30. - PI; P->k0 = 0.9996; P->phi0 = 0.; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_tpeqd.c000066400000000000000000000046321307545355600174300ustar00rootroot00000000000000#define PROJ_PARMS__ \ double cp1, sp1, cp2, sp2, ccs, cs, sc, r2z0, z02, dlam2; \ double hz0, thz0, rhshz0, ca, sa, lp, lamc; #define PJ_LIB__ #include PROJ_HEAD(tpeqd, "Two Point Equidistant") "\n\tMisc Sph\n\tlat_1= lon_1= lat_2= lon_2="; FORWARD(s_forward); /* sphere */ double t, z1, z2, dl1, dl2, sp, cp; sp = sin(lp.phi); cp = cos(lp.phi); z1 = aacos(P->sp1 * sp + P->cp1 * cp * cos(dl1 = lp.lam + P->dlam2)); z2 = aacos(P->sp2 * sp + P->cp2 * cp * cos(dl2 = lp.lam - P->dlam2)); z1 *= z1; z2 *= z2; xy.x = P->r2z0 * (t = z1 - z2); t = P->z02 - t; xy.y = P->r2z0 * asqrt(4. * P->z02 * z2 - t * t); if ((P->ccs * sp - cp * (P->cs * sin(dl1) - P->sc * sin(dl2))) < 0.) xy.y = -xy.y; return xy; } INVERSE(s_inverse); /* sphere */ double cz1, cz2, s, d, cp, sp; cz1 = cos(hypot(xy.y, xy.x + P->hz0)); cz2 = cos(hypot(xy.y, xy.x - P->hz0)); s = cz1 + cz2; d = cz1 - cz2; lp.lam = - atan2(d, (s * P->thz0)); lp.phi = aacos(hypot(P->thz0 * s, d) * P->rhshz0); if ( xy.y < 0. ) lp.phi = - lp.phi; /* lam--phi now in system relative to P1--P2 base equator */ sp = sin(lp.phi); cp = cos(lp.phi); lp.phi = aasin(P->sa * sp + P->ca * cp * (s = cos(lp.lam -= P->lp))); lp.lam = atan2(cp * sin(lp.lam), P->sa * cp * s - P->ca * sp) + P->lamc; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(tpeqd) double lam_1, lam_2, phi_1, phi_2, A12, pp; /* get control point locations */ phi_1 = pj_param(P->params, "rlat_1").f; lam_1 = pj_param(P->params, "rlon_1").f; phi_2 = pj_param(P->params, "rlat_2").f; lam_2 = pj_param(P->params, "rlon_2").f; if (phi_1 == phi_2 && lam_1 == lam_2) E_ERROR(-25); P->lam0 = adjlon(0.5 * (lam_1 + lam_2)); P->dlam2 = adjlon(lam_2 - lam_1); P->cp1 = cos(phi_1); P->cp2 = cos(phi_2); P->sp1 = sin(phi_1); P->sp2 = sin(phi_2); P->cs = P->cp1 * P->sp2; P->sc = P->sp1 * P->cp2; P->ccs = P->cp1 * P->cp2 * sin(P->dlam2); P->z02 = aacos(P->sp1 * P->sp2 + P->cp1 * P->cp2 * cos(P->dlam2)); P->hz0 = .5 * P->z02; A12 = atan2(P->cp2 * sin(P->dlam2), P->cp1 * P->sp2 - P->sp1 * P->cp2 * cos(P->dlam2)); P->ca = cos(pp = aasin(P->cp1 * sin(A12))); P->sa = sin(pp); P->lp = adjlon(atan2(P->cp1 * cos(A12), P->sp1) - P->hz0); P->dlam2 *= .5; P->lamc = HALFPI - atan2(sin(A12) * P->sp1, cos(A12)) - P->dlam2; P->thz0 = tan(P->hz0); P->rhshz0 = .5 / sin(P->hz0); P->r2z0 = 0.5 / P->z02; P->z02 *= P->z02; P->inv = s_inverse; P->fwd = s_forward; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_urm5.c000066400000000000000000000012461307545355600172010ustar00rootroot00000000000000#define PROJ_PARMS__ \ double m, rmn, q3, n; #define PJ_LIB__ # include PROJ_HEAD(urm5, "Urmaev V") "\n\tPCyl., Sph.\n\tn= q= alphi="; FORWARD(s_forward); /* spheroid */ double t; t = lp.phi = aasin(P->n * sin(lp.phi)); xy.x = P->m * lp.lam * cos(lp.phi); t *= t; xy.y = lp.phi * (1. + t * P->q3) * P->rmn; return xy; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(urm5) double alpha, t; P->n = pj_param(P->params, "dn").f; P->q3 = pj_param(P->params, "dq").f / 3.; alpha = pj_param(P->params, "ralpha").f; t = P->n * sin(alpha); P->m = cos(alpha) / sqrt(1. - t * t); P->rmn = 1. / (P->m * P->n); P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_urmfps.c000066400000000000000000000016621307545355600176270ustar00rootroot00000000000000#define PROJ_PARMS__ \ double n, C_y; #define PJ_LIB__ #include PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") "\n\tPCyl, Sph.\n\tn="; PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") "\n\tPCyl, Sph."; #define C_x 0.8773826753 #define Cy 1.139753528477 FORWARD(s_forward); /* sphere */ lp.phi = aasin(P->n * sin(lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = P->C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* sphere */ xy.y /= P->C_y; lp.phi = aasin(sin(xy.y) / P->n); lp.lam = xy.x / (C_x * cos(xy.y)); return (lp); } FREEUP; if (P) pj_dalloc(P); } static PJ * setup(PJ *P) { P->C_y = Cy / P->n; P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; return P; } ENTRY0(urmfps) if (pj_param(P->params, "tn").i) { P->n = pj_param(P->params, "dn").f; if (P->n <= 0. || P->n > 1.) E_ERROR(-40) } else E_ERROR(-40) ENDENTRY(setup(P)) ENTRY0(wag1) P->n = 0.8660254037844386467637231707; ENDENTRY(setup(P)) therion-5.4.1/extern/proj4/PJ_vandg.c000066400000000000000000000044261307545355600174130ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(vandg, "van der Grinten (I)") "\n\tMisc Sph"; # define TOL 1.e-10 # define THIRD .33333333333333333333 # define TWO_THRD .66666666666666666666 # define C2_27 .07407407407407407407 # define PI4_3 4.18879020478639098458 # define PISQ 9.86960440108935861869 # define TPISQ 19.73920880217871723738 # define HPISQ 4.93480220054467930934 FORWARD(s_forward); /* spheroid */ double al, al2, g, g2, p2; p2 = fabs(lp.phi / HALFPI); if ((p2 - TOL) > 1.) F_ERROR; if (p2 > 1.) p2 = 1.; if (fabs(lp.phi) <= TOL) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(lp.lam) <= TOL || fabs(p2 - 1.) < TOL) { xy.x = 0.; xy.y = PI * tan(.5 * asin(p2)); if (lp.phi < 0.) xy.y = -xy.y; } else { al = .5 * fabs(PI / lp.lam - lp.lam / PI); al2 = al * al; g = sqrt(1. - p2 * p2); g = g / (p2 + g - 1.); g2 = g * g; p2 = g * (2. / p2 - 1.); p2 = p2 * p2; xy.x = g - p2; g = p2 + al2; xy.x = PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g; if (lp.lam < 0.) xy.x = -xy.x; xy.y = fabs(xy.x / PI); xy.y = 1. - xy.y * (xy.y + 2. * al); if (xy.y < -TOL) F_ERROR; if (xy.y < 0.) xy.y = 0.; else xy.y = sqrt(xy.y) * (lp.phi < 0. ? -PI : PI); } return (xy); } INVERSE(s_inverse); /* spheroid */ double t, c0, c1, c2, c3, al, r2, r, m, d, ay, x2, y2; x2 = xy.x * xy.x; if ((ay = fabs(xy.y)) < TOL) { lp.phi = 0.; t = x2 * x2 + TPISQ * (x2 + HPISQ); lp.lam = fabs(xy.x) <= TOL ? 0. : .5 * (x2 - PISQ + sqrt(t)) / xy.x; return (lp); } y2 = xy.y * xy.y; r = x2 + y2; r2 = r * r; c1 = - PI * ay * (r + PISQ); c3 = r2 + TWOPI * (ay * r + PI * (y2 + PI * (ay + HALFPI))); c2 = c1 + PISQ * (r - 3. * y2); c0 = PI * ay; c2 /= c3; al = c1 / c3 - THIRD * c2 * c2; m = 2. * sqrt(-THIRD * al); d = C2_27 * c2 * c2 * c2 + (c0 * c0 - THIRD * c2 * c1) / c3; if (((t = fabs(d = 3. * d / (al * m))) - TOL) <= 1.) { d = t > 1. ? (d > 0. ? 0. : PI) : acos(d); lp.phi = PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2); if (xy.y < 0.) lp.phi = -lp.phi; t = r2 + TPISQ * (x2 - y2 + HPISQ); lp.lam = fabs(xy.x) <= TOL ? 0. : .5 * (r - PISQ + (t <= 0. ? 0. : sqrt(t))) / xy.x; } else I_ERROR; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_vandg2.c000066400000000000000000000021261307545355600174700ustar00rootroot00000000000000# define TOL 1e-10 # define TWORPI 0.63661977236758134308 #define PROJ_PARMS__ \ int vdg3; #define PJ_LIB__ #include PROJ_HEAD(vandg2, "van der Grinten II") "\n\tMisc Sph, no inv."; PROJ_HEAD(vandg3, "van der Grinten III") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* spheroid */ double x1, at, bt, ct; bt = fabs(TWORPI * lp.phi); if ((ct = 1. - bt * bt) < 0.) ct = 0.; else ct = sqrt(ct); if (fabs(lp.lam) < TOL) { xy.x = 0.; xy.y = PI * (lp.phi < 0. ? -bt : bt) / (1. + ct); } else { at = 0.5 * fabs(PI / lp.lam - lp.lam / PI); if (P->vdg3) { x1 = bt / (1. + ct); xy.x = PI * (sqrt(at * at + 1. - x1 * x1) - at); xy.y = PI * x1; } else { x1 = (ct * sqrt(1. + at * at) - at * ct * ct) / (1. + at * at * bt * bt); xy.x = PI * x1; xy.y = PI * sqrt(1. - x1 * (x1 + 2. * at) + TOL); } if ( lp.lam < 0.) xy.x = -xy.x; if ( lp.phi < 0.) xy.y = -xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg2) P->vdg3 = 0; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) ENTRY0(vandg3) P->vdg3 = 1; P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_vandg4.c000066400000000000000000000022061307545355600174710ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(vandg4, "van der Grinten IV") "\n\tMisc Sph, no inv."; #define TOL 1e-10 #define TWORPI 0.63661977236758134308 FORWARD(s_forward); /* spheroid */ double x1, t, bt, ct, ft, bt2, ct2, dt, dt2; if (fabs(lp.phi) < TOL) { xy.x = lp.lam; xy.y = 0.; } else if (fabs(lp.lam) < TOL || fabs(fabs(lp.phi) - HALFPI) < TOL) { xy.x = 0.; xy.y = lp.phi; } else { bt = fabs(TWORPI * lp.phi); bt2 = bt * bt; ct = 0.5 * (bt * (8. - bt * (2. + bt2)) - 5.) / (bt2 * (bt - 1.)); ct2 = ct * ct; dt = TWORPI * lp.lam; dt = dt + 1. / dt; dt = sqrt(dt * dt - 4.); if ((fabs(lp.lam) - HALFPI) < 0.) dt = -dt; dt2 = dt * dt; x1 = bt + ct; x1 *= x1; t = bt + 3.*ct; ft = x1 * (bt2 + ct2 * dt2 - 1.) + (1.-bt2) * ( bt2 * (t * t + 4. * ct2) + ct2 * (12. * bt * ct + 4. * ct2) ); x1 = (dt*(x1 + ct2 - 1.) + 2.*sqrt(ft)) / (4.* x1 + dt2); xy.x = HALFPI * x1; xy.y = HALFPI * sqrt(1. + dt * fabs(x1) - x1 * x1); if (lp.lam < 0.) xy.x = -xy.x; if (lp.phi < 0.) xy.y = -xy.y; } return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(vandg4) P->es = 0.; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_wag2.c000066400000000000000000000011121307545355600171410ustar00rootroot00000000000000#define PJ_LIB__ # include PROJ_HEAD(wag2, "Wagner II") "\n\tPCyl., Sph."; #define C_x 0.92483 #define C_y 1.38725 #define C_p1 0.88022 #define C_p2 0.88550 FORWARD(s_forward); /* spheroid */ lp.phi = aasin(C_p1 * sin(C_p2 * lp.phi)); xy.x = C_x * lp.lam * cos(lp.phi); xy.y = C_y * lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y / C_y; lp.lam = xy.x / (C_x * cos(lp.phi)); lp.phi = aasin(sin(lp.phi) / C_p1) / C_p2; return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag2) P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_wag3.c000066400000000000000000000011431307545355600171460ustar00rootroot00000000000000#define PROJ_PARMS__ \ double C_x; #define PJ_LIB__ # include PROJ_HEAD(wag3, "Wagner III") "\n\tPCyl., Sph.\n\tlat_ts="; #define TWOTHIRD 0.6666666666666666666667 FORWARD(s_forward); /* spheroid */ xy.x = P->C_x * lp.lam * cos(TWOTHIRD * lp.phi); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y; lp.lam = xy.x / (P->C_x * cos(TWOTHIRD * lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag3) double ts; ts = pj_param(P->params, "rlat_ts").f; P->C_x = cos(ts) / cos(2.*ts/3.); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_wag7.c000066400000000000000000000007111307545355600171520ustar00rootroot00000000000000#define PJ_LIB__ #include PROJ_HEAD(wag7, "Wagner VII") "\n\tMisc Sph, no inv."; FORWARD(s_forward); /* sphere */ double theta, ct, D; theta = asin(xy.y = 0.90630778703664996 * sin(lp.phi)); xy.x = 2.66723 * (ct = cos(theta)) * sin(lp.lam /= 3.); xy.y *= 1.24104 * (D = 1/(sqrt(0.5 * (1 + ct * cos(lp.lam))))); xy.x *= D; return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wag7) P->fwd = s_forward; P->inv = 0; P->es = 0.; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_wink1.c000066400000000000000000000010301307545355600173310ustar00rootroot00000000000000#define PROJ_PARMS__ \ double cosphi1; #define PJ_LIB__ # include PROJ_HEAD(wink1, "Winkel I") "\n\tPCyl., Sph.\n\tlat_ts="; FORWARD(s_forward); /* spheroid */ xy.x = .5 * lp.lam * (P->cosphi1 + cos(lp.phi)); xy.y = lp.phi; return (xy); } INVERSE(s_inverse); /* spheroid */ lp.phi = xy.y; lp.lam = 2. * xy.x / (P->cosphi1 + cos(lp.phi)); return (lp); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink1) P->cosphi1 = cos(pj_param(P->params, "rlat_ts").f); P->es = 0.; P->inv = s_inverse; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/PJ_wink2.c000066400000000000000000000015011307545355600173350ustar00rootroot00000000000000#define PROJ_PARMS__ \ double cosphi1; #define PJ_LIB__ # include PROJ_HEAD(wink2, "Winkel II") "\n\tPCyl., Sph., no inv.\n\tlat_1="; #define MAX_ITER 10 #define LOOP_TOL 1e-7 #define TWO_D_PI 0.636619772367581343 FORWARD(s_forward); /* spheroid */ double k, V; int i; xy.y = lp.phi * TWO_D_PI; k = PI * sin(lp.phi); lp.phi *= 1.8; for (i = MAX_ITER; i ; --i) { lp.phi -= V = (lp.phi + sin(lp.phi) - k) / (1. + cos(lp.phi)); if (fabs(V) < LOOP_TOL) break; } if (!i) lp.phi = (lp.phi < 0.) ? -HALFPI : HALFPI; else lp.phi *= 0.5; xy.x = 0.5 * lp.lam * (cos(lp.phi) + P->cosphi1); xy.y = FORTPI * (sin(lp.phi) + xy.y); return (xy); } FREEUP; if (P) pj_dalloc(P); } ENTRY0(wink2) P->cosphi1 = cos(pj_param(P->params, "rlat_1").f); P->es = 0.; P->inv = 0; P->fwd = s_forward; ENDENTRY(P) therion-5.4.1/extern/proj4/aasincos.c000066400000000000000000000012051307545355600175130ustar00rootroot00000000000000/* arc sin, cosine, tan2 and sqrt that will NOT fail */ #include #define ONE_TOL 1.00000000000001 #define TOL 0.000000001 #define ATOL 1e-50 double aasin(double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) pj_errno = -19; return (v < 0. ? -HALFPI : HALFPI); } return asin(v); } double aacos(double v) { double av; if ((av = fabs(v)) >= 1.) { if (av > ONE_TOL) pj_errno = -19; return (v < 0. ? PI : 0.); } return acos(v); } double asqrt(double v) { return ((v <= 0) ? 0. : sqrt(v)); } double aatan2(double n, double d) { return ((fabs(n) < ATOL && fabs(d) < ATOL) ? 0. : atan2(n,d)); } therion-5.4.1/extern/proj4/adjlon.c000066400000000000000000000007071307545355600171700ustar00rootroot00000000000000/* reduce argument to range +/- PI */ #include #include #define SPI 3.14159265359 #define TWOPI 6.2831853071795864769 #define ONEPI 3.14159265358979323846 double adjlon (double lon) { if (fabs(lon) <= SPI) return( lon ); lon += ONEPI; /* adjust to 0..2pi rad */ lon -= TWOPI * floor(lon / TWOPI); /* remove integral # of 'revolutions'*/ lon -= ONEPI; /* adjust back to -pi..pi rad */ return( lon ); } therion-5.4.1/extern/proj4/bch2bps.c000066400000000000000000000070201307545355600172370ustar00rootroot00000000000000/* convert bivariate w Chebyshev series to w Power series */ #include /* basic support procedures */ static void /* clear vector to zero */ clear(projUV *p, int n) { static const projUV c = {0., 0.}; while (n--) *p++ = c; } static void /* clear matrix rows to zero */ bclear(projUV **p, int n, int m) { while (n--) clear(*p++, m); } static void /* move vector */ bmove(projUV *a, projUV *b, int n) { while (n--) *a++ = *b++; } static void /* a <- m * b - c */ submop(projUV *a, double m, projUV *b, projUV *c, int n) { while (n--) { a->u = m * b->u - c->u; a++->v = m * b++->v - c++->v; } } static void /* a <- b - c */ subop(projUV *a, projUV *b, projUV *c, int n) { while (n--) { a->u = b->u - c->u; a++->v = b++->v - c++->v; } } static void /* multiply vector a by scalar m */ dmult(projUV *a, double m, int n) { while(n--) { a->u *= m; a->v *= m; ++a; } } static void /* row adjust a[] <- a[] - m * b[] */ dadd(projUV *a, projUV *b, double m, int n) { while(n--) { a->u -= m * b->u; a++->v -= m * b++->v; } } static void /* convert row to pover series */ rows(projUV *c, projUV *d, int n) { projUV sv, *dd; int j, k; dd = (projUV *)vector1(n-1, sizeof(projUV)); sv.u = sv.v = 0.; for (j = 0; j < n; ++j) d[j] = dd[j] = sv; d[0] = c[n-1]; for (j = n-2; j >= 1; --j) { for (k = n-j; k >= 1; --k) { sv = d[k]; d[k].u = 2. * d[k-1].u - dd[k].u; d[k].v = 2. * d[k-1].v - dd[k].v; dd[k] = sv; } sv = d[0]; d[0].u = -dd[0].u + c[j].u; d[0].v = -dd[0].v + c[j].v; dd[0] = sv; } for (j = n-1; j >= 1; --j) { d[j].u = d[j-1].u - dd[j].u; d[j].v = d[j-1].v - dd[j].v; } d[0].u = -dd[0].u + .5 * c[0].u; d[0].v = -dd[0].v + .5 * c[0].v; pj_dalloc(dd); } static void /* convert columns to power series */ cols(projUV **c, projUV **d, int nu, int nv) { projUV *sv, **dd; int j, k; dd = (projUV **)vector2(nu, nv, sizeof(projUV)); sv = (projUV *)vector1(nv, sizeof(projUV)); bclear(d, nu, nv); bclear(dd, nu, nv); bmove(d[0], c[nu-1], nv); for (j = nu-2; j >= 1; --j) { for (k = nu-j; k >= 1; --k) { bmove(sv, d[k], nv); submop(d[k], 2., d[k-1], dd[k], nv); bmove(dd[k], sv, nv); } bmove(sv, d[0], nv); subop(d[0], c[j], dd[0], nv); bmove(dd[0], sv, nv); } for (j = nu-1; j >= 1; --j) subop(d[j], d[j-1], dd[j], nv); submop(d[0], .5, c[0], dd[0], nv); freev2((void **) dd, nu); pj_dalloc(sv); } static void /* row adjust for range -1 to 1 to a to b */ rowshft(double a, double b, projUV *d, int n) { int k, j; double fac, cnst; cnst = 2. / (b - a); fac = cnst; for (j = 1; j < n; ++j) { d[j].u *= fac; d[j].v *= fac; fac *= cnst; } cnst = .5 * (a + b); for (j = 0; j <= n-2; ++j) for (k = n - 2; k >= j; --k) { d[k].u -= cnst * d[k+1].u; d[k].v -= cnst * d[k+1].v; } } static void /* column adjust for range -1 to 1 to a to b */ colshft(double a, double b, projUV **d, int n, int m) { int k, j; double fac, cnst; cnst = 2. / (b - a); fac = cnst; for (j = 1; j < n; ++j) { dmult(d[j], fac, m); fac *= cnst; } cnst = .5 * (a + b); for (j = 0; j <= n-2; ++j) for (k = n - 2; k >= j; --k) dadd(d[k], d[k+1], cnst, m); } int /* entry point */ bch2bps(projUV a, projUV b, projUV **c, int nu, int nv) { projUV **d; int i; if (nu < 1 || nv < 1 || !(d = (projUV **)vector2(nu, nv, sizeof(projUV)))) return 0; /* do rows to power series */ for (i = 0; i < nu; ++i) { rows(c[i], d[i], nv); rowshft(a.v, b.v, d[i], nv); } /* do columns to power series */ cols(d, c, nu, nv); colshft(a.u, b.u, c, nu, nv); freev2((void **) d, nu); return 1; } therion-5.4.1/extern/proj4/bchgen.c000066400000000000000000000025451307545355600171510ustar00rootroot00000000000000/* generate double bivariate Chebychev polynomial */ #include int bchgen(projUV a, projUV b, int nu, int nv, projUV **f, projUV(*func)(projUV)) { int i, j, k; projUV arg, *t, bma, bpa, *c; double d, fac; bma.u = 0.5 * (b.u - a.u); bma.v = 0.5 * (b.v - a.v); bpa.u = 0.5 * (b.u + a.u); bpa.v = 0.5 * (b.v + a.v); for ( i = 0; i < nu; ++i) { arg.u = cos(PI * (i + 0.5) / nu) * bma.u + bpa.u; for ( j = 0; j < nv; ++j) { arg.v = cos(PI * (j + 0.5) / nv) * bma.v + bpa.v; f[i][j] = (*func)(arg); if ((f[i][j]).u == HUGE_VAL) return(1); } } if (!(c = (projUV *) vector1(nu, sizeof(projUV)))) return 1; fac = 2. / nu; for ( j = 0; j < nv ; ++j) { for ( i = 0; i < nu; ++i) { arg.u = arg.v = 0.; for (k = 0; k < nu; ++k) { d = cos(PI * i * (k + .5) / nu); arg.u += f[k][j].u * d; arg.v += f[k][j].v * d; } arg.u *= fac; arg.v *= fac; c[i] = arg; } for (i = 0; i < nu; ++i) f[i][j] = c[i]; } pj_dalloc(c); if (!(c = (projUV*) vector1(nv, sizeof(projUV)))) return 1; fac = 2. / nv; for ( i = 0; i < nu; ++i) { t = f[i]; for (j = 0; j < nv; ++j) { arg.u = arg.v = 0.; for (k = 0; k < nv; ++k) { d = cos(PI * j * (k + .5) / nv); arg.u += t[k].u * d; arg.v += t[k].v * d; } arg.u *= fac; arg.v *= fac; c[j] = arg; } f[i] = c; c = t; } pj_dalloc(c); return(0); } therion-5.4.1/extern/proj4/biveval.c000066400000000000000000000036201307545355600173460ustar00rootroot00000000000000/* procedures for evaluating Tseries */ # include # define NEAR_ONE 1.00001 static double ceval(struct PW_COEF *C, int n, projUV w, projUV w2) { double d=0, dd=0, vd, vdd, tmp, *c; int j; for (C += n ; n-- ; --C ) { if (j = C->m) { vd = vdd = 0.; for (c = C->c + --j; j ; --j ) { vd = w2.v * (tmp = vd) - vdd + *c--; vdd = tmp; } d = w2.u * (tmp = d) - dd + w.v * vd - vdd + 0.5 * *c; } else d = w2.u * (tmp = d) - dd; dd = tmp; } if (j = C->m) { vd = vdd = 0.; for (c = C->c + --j; j ; --j ) { vd = w2.v * (tmp = vd) - vdd + *c--; vdd = tmp; } return (w.u * d - dd + 0.5 * ( w.v * vd - vdd + 0.5 * *c )); } else return (w.u * d - dd); } projUV /* bivariate Chebyshev polynomial entry point */ bcheval(projUV in, Tseries *T) { projUV w2, w; projUV out; /* scale to +-1 */ w.u = ( in.u + in.u - T->a.u ) * T->b.u; w.v = ( in.v + in.v - T->a.v ) * T->b.v; if (fabs(w.u) > NEAR_ONE || fabs(w.v) > NEAR_ONE) { out.u = out.v = HUGE_VAL; pj_errno = -36; } else { /* double evaluation */ w2.u = w.u + w.u; w2.v = w.v + w.v; out.u = ceval(T->cu, T->mu, w, w2); out.v = ceval(T->cv, T->mv, w, w2); } return out; } projUV /* bivariate power polynomial entry point */ bpseval(projUV in, Tseries *T) { projUV out; double *c, row; int i, m; out.u = out.v = 0.; for (i = T->mu; i >= 0; --i) { row = 0.; if (m = T->cu[i].m) { c = T->cu[i].c + m; while (m--) row = *--c + in.v * row; } out.u = row + in.u * out.u; } for (i = T->mv; i >= 0; --i) { row = 0.; if (m = T->cv[i].m) { c = T->cv[i].c + m; while (m--) row = *--c + in.v * row; } out.v = row + in.u * out.v; } return out; } projUV /* general entry point selecting evaluation mode */ biveval(projUV in, Tseries *T) { if (T->power) { return bpseval(in, T); } else { return bcheval(in, T); } } therion-5.4.1/extern/proj4/dmstor.c000066400000000000000000000043351307545355600172320ustar00rootroot00000000000000/* Convert DMS string to radians */ #include #include #include static double proj_strtod(char *nptr, char **endptr); /* following should be sufficient for all but the rediculous */ #define MAX_WORK 64 static const char *sym = "NnEeSsWw"; static const double vm[] = { .0174532925199433, .0002908882086657216, .0000048481368110953599 }; double dmstor(const char *is, char **rs) { int sign, n, nl; char *p, *s, work[MAX_WORK]; double v, tv; if (rs) *rs = (char *)is; /* copy sting into work space */ while (isspace(sign = *is)) ++is; for (n = MAX_WORK, s = work, p = (char *)is; isgraph(*p) && --n ; ) *s++ = *p++; *s = '\0'; /* it is possible that a really odd input (like lots of leading zeros) could be truncated in copying into work. But ... */ sign = *(s = work); if (sign == '+' || sign == '-') s++; else sign = '+'; for (v = 0., nl = 0 ; nl < 3 ; nl = n + 1 ) { if (!(isdigit(*s) || *s == '.')) break; if ((tv = proj_strtod(s, &s)) == HUGE_VAL) return tv; switch (*s) { case 'D': case 'd': n = 0; break; case '\'': n = 1; break; case '"': n = 2; break; case 'r': case 'R': if (nl) { pj_errno = -16; return HUGE_VAL; } ++s; v = tv; goto skip; default: v += tv * vm[nl]; skip: n = 4; continue; } if (n < nl) { pj_errno = -16; return HUGE_VAL; } v += tv * vm[n]; ++s; } /* postfix sign */ if (*s && (p = strchr(sym, *s))) { sign = (p - sym) >= 4 ? '-' : '+'; ++s; } if (sign == '-') v = -v; if (rs) /* return point of next char after valid string */ *rs = (char *)is + (s - work); return v; } static double proj_strtod(char *nptr, char **endptr) { char c, *cp = nptr; double result; /* * Scan for characters which cause problems with VC++ strtod() */ while ((c = *cp) != '\0') { if (c == 'd' || c == 'D') { /* * Found one, so NUL it out, call strtod(), * then restore it and return */ *cp = '\0'; result = strtod(nptr, endptr); *cp = c; return result; } ++cp; } /* no offending characters, just handle normally */ return strtod(nptr, endptr); } therion-5.4.1/extern/proj4/emess.c000066400000000000000000000026051307545355600170340ustar00rootroot00000000000000/* Error message processing */ #ifdef _MSC_VER # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE # endif #endif #include #include #include #include #include #include #define EMESS_ROUTINE #include "emess.h" void emess(int code, char *fmt, ...) { va_list args; va_start(args, fmt); /* prefix program name, if given */ if (fmt != NULL) (void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(), emess_dat.Prog_name); /* print file name and line, if given */ if (emess_dat.File_name != NULL && *emess_dat.File_name) { (void)fprintf(stderr,"while processing file: %s", emess_dat.File_name); if (emess_dat.File_line > 0) (void)fprintf(stderr,", line %d\n", emess_dat.File_line); else (void)fputc('\n', stderr); } else putc('\n', stderr); /* if |code|==2, print errno code data */ if (code == 2 || code == -2) (void)fprintf(stderr, "Sys errno: %d: %s\n", errno, #ifdef HAVE_STRERROR strerror(errno)); #else ""); #endif /* post remainder of call data */ (void)vfprintf(stderr,fmt,args); va_end(args); /* die if code positive */ if (code > 0) { (void)fputs("\nprogram abnormally terminated\n", stderr); exit(code); } else putc('\n', stderr); } therion-5.4.1/extern/proj4/emess.h000066400000000000000000000013071307545355600170370ustar00rootroot00000000000000/* Error message processing header file */ #ifndef EMESS_H #define EMESS_H #ifndef lint static char EMESS_H_ID[] = "@(#)emess.h 4.1 93/03/08 GIE REL"; #endif struct EMESS { char *File_name, /* input file name */ *Prog_name; /* name of program */ int File_line; /* approximate line read where error occured */ }; #ifdef EMESS_ROUTINE /* use type */ /* for emess procedure */ struct EMESS emess_dat = { (char *)0, (char *)0, 0 }; #ifdef sun /* Archaic SunOs 4.1.1, etc. */ extern char *sys_errlist[]; #define strerror(n) (sys_errlist[n]) #endif #else /* for for calling procedures */ extern struct EMESS emess_dat; void emess(int, char *, ...); #endif /* use type */ #endif /* end EMESS_H */ therion-5.4.1/extern/proj4/geocent.c000066400000000000000000000352711307545355600173510ustar00rootroot00000000000000/***************************************************************************/ /* RSC IDENTIFIER: GEOCENTRIC * * ABSTRACT * * This component provides conversions between Geodetic coordinates (latitude, * longitude in radians and height in meters) and Geocentric coordinates * (X, Y, Z) in meters. * * ERROR HANDLING * * This component checks parameters for valid values. If an invalid value * is found, the error code is combined with the current error code using * the bitwise or. This combining allows multiple error codes to be * returned. The possible error codes are: * * GEOCENT_NO_ERROR : No errors occurred in function * GEOCENT_LAT_ERROR : Latitude out of valid range * (-90 to 90 degrees) * GEOCENT_LON_ERROR : Longitude out of valid range * (-180 to 360 degrees) * GEOCENT_A_ERROR : Semi-major axis lessthan or equal to zero * GEOCENT_B_ERROR : Semi-minor axis lessthan or equal to zero * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis * * * REUSE NOTES * * GEOCENTRIC is intended for reuse by any application that performs * coordinate conversions between geodetic coordinates and geocentric * coordinates. * * * REFERENCES * * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, * Ralph Toms, February 1996 UCRL-JC-123138. * * Further information on GEOCENTRIC can be found in the Reuse Manual. * * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center * Geospatial Information Division * 7701 Telegraph Road * Alexandria, VA 22310-3864 * * LICENSES * * None apply to this component. * * RESTRICTIONS * * GEOCENTRIC has no restrictions. * * ENVIRONMENT * * GEOCENTRIC was tested and certified in the following environments: * * 1. Solaris 2.5 with GCC version 2.8.1 * 2. Windows 95 with MS Visual C++ version 6 * * MODIFICATIONS * * Date Description * ---- ----------- * 25-02-97 Original Code * */ /***************************************************************************/ /* * INCLUDES */ #include #include "geocent.h" /* * math.h - is needed for calls to sin, cos, tan and sqrt. * geocent.h - is needed for Error codes and prototype error checking. */ /***************************************************************************/ /* * DEFINES */ #define PI 3.14159265358979323e0 #define PI_OVER_2 (PI / 2.0e0) #define FALSE 0 #define TRUE 1 #define COS_67P5 0.38268343236508977 /* cosine of 67.5 degrees */ #define AD_C 1.0026000 /* Toms region 1 constant */ /***************************************************************************/ /* * FUNCTIONS */ long pj_Set_Geocentric_Parameters (GeocentricInfo *gi, double a, double b) { /* BEGIN Set_Geocentric_Parameters */ /* * The function Set_Geocentric_Parameters receives the ellipsoid parameters * as inputs and sets the corresponding state variables. * * a : Semi-major axis, in meters. (input) * b : Semi-minor axis, in meters. (input) */ long Error_Code = GEOCENT_NO_ERROR; if (a <= 0.0) Error_Code |= GEOCENT_A_ERROR; if (b <= 0.0) Error_Code |= GEOCENT_B_ERROR; if (a < b) Error_Code |= GEOCENT_A_LESS_B_ERROR; if (!Error_Code) { gi->Geocent_a = a; gi->Geocent_b = b; gi->Geocent_a2 = a * a; gi->Geocent_b2 = b * b; gi->Geocent_e2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_a2; gi->Geocent_ep2 = (gi->Geocent_a2 - gi->Geocent_b2) / gi->Geocent_b2; } return (Error_Code); } /* END OF Set_Geocentric_Parameters */ void pj_Get_Geocentric_Parameters (GeocentricInfo *gi, double *a, double *b) { /* BEGIN Get_Geocentric_Parameters */ /* * The function Get_Geocentric_Parameters returns the ellipsoid parameters * to be used in geocentric coordinate conversions. * * a : Semi-major axis, in meters. (output) * b : Semi-minor axis, in meters. (output) */ *a = gi->Geocent_a; *b = gi->Geocent_b; } /* END OF Get_Geocentric_Parameters */ long pj_Convert_Geodetic_To_Geocentric (GeocentricInfo *gi, double Latitude, double Longitude, double Height, double *X, double *Y, double *Z) { /* BEGIN Convert_Geodetic_To_Geocentric */ /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters (output) * Y : Calculated Geocentric Y coordinate, in meters (output) * Z : Calculated Geocentric Z coordinate, in meters (output) * */ long Error_Code = GEOCENT_NO_ERROR; double Rn; /* Earth radius at location */ double Sin_Lat; /* sin(Latitude) */ double Sin2_Lat; /* Square of sin(Latitude) */ double Cos_Lat; /* cos(Latitude) */ /* ** Don't blow up if Latitude is just a little out of the value ** range as it may just be a rounding issue. Also removed longitude ** test, it should be wrapped by cos() and sin(). NFW for PROJ.4, Sep/2001. */ if( Latitude < -PI_OVER_2 && Latitude > -1.001 * PI_OVER_2 ) Latitude = -PI_OVER_2; else if( Latitude > PI_OVER_2 && Latitude < 1.001 * PI_OVER_2 ) Latitude = PI_OVER_2; else if ((Latitude < -PI_OVER_2) || (Latitude > PI_OVER_2)) { /* Latitude out of range */ Error_Code |= GEOCENT_LAT_ERROR; } if (!Error_Code) { /* no errors */ if (Longitude > PI) Longitude -= (2*PI); Sin_Lat = sin(Latitude); Cos_Lat = cos(Latitude); Sin2_Lat = Sin_Lat * Sin_Lat; Rn = gi->Geocent_a / (sqrt(1.0e0 - gi->Geocent_e2 * Sin2_Lat)); *X = (Rn + Height) * Cos_Lat * cos(Longitude); *Y = (Rn + Height) * Cos_Lat * sin(Longitude); *Z = ((Rn * (1 - gi->Geocent_e2)) + Height) * Sin_Lat; } return (Error_Code); } /* END OF Convert_Geodetic_To_Geocentric */ /* * The function Convert_Geocentric_To_Geodetic converts geocentric * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, * and height), according to the current ellipsoid parameters. * * X : Geocentric X coordinate, in meters. (input) * Y : Geocentric Y coordinate, in meters. (input) * Z : Geocentric Z coordinate, in meters. (input) * Latitude : Calculated latitude value in radians. (output) * Longitude : Calculated longitude value in radians. (output) * Height : Calculated height value, in meters. (output) */ #define USE_ITERATIVE_METHOD void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, double X, double Y, double Z, double *Latitude, double *Longitude, double *Height) { /* BEGIN Convert_Geocentric_To_Geodetic */ #if !defined(USE_ITERATIVE_METHOD) /* * The method used here is derived from 'An Improved Algorithm for * Geocentric to Geodetic Coordinate Conversion', by Ralph Toms, Feb 1996 */ /* Note: Variable names follow the notation used in Toms, Feb 1996 */ double W; /* distance from Z axis */ double W2; /* square of distance from Z axis */ double T0; /* initial estimate of vertical component */ double T1; /* corrected estimate of vertical component */ double S0; /* initial estimate of horizontal component */ double S1; /* corrected estimate of horizontal component */ double Sin_B0; /* sin(B0), B0 is estimate of Bowring aux variable */ double Sin3_B0; /* cube of sin(B0) */ double Cos_B0; /* cos(B0) */ double Sin_p1; /* sin(phi1), phi1 is estimated latitude */ double Cos_p1; /* cos(phi1) */ double Rn; /* Earth radius at location */ double Sum; /* numerator of cos(phi1) */ int At_Pole; /* indicates location is in polar region */ At_Pole = FALSE; if (X != 0.0) { *Longitude = atan2(Y,X); } else { if (Y > 0) { *Longitude = PI_OVER_2; } else if (Y < 0) { *Longitude = -PI_OVER_2; } else { At_Pole = TRUE; *Longitude = 0.0; if (Z > 0.0) { /* north pole */ *Latitude = PI_OVER_2; } else if (Z < 0.0) { /* south pole */ *Latitude = -PI_OVER_2; } else { /* center of earth */ *Latitude = PI_OVER_2; *Height = -Geocent_b; return; } } } W2 = X*X + Y*Y; W = sqrt(W2); T0 = Z * AD_C; S0 = sqrt(T0 * T0 + W2); Sin_B0 = T0 / S0; Cos_B0 = W / S0; Sin3_B0 = Sin_B0 * Sin_B0 * Sin_B0; T1 = Z + gi->Geocent_b * gi->Geocent_ep2 * Sin3_B0; Sum = W - gi->Geocent_a * gi->Geocent_e2 * Cos_B0 * Cos_B0 * Cos_B0; S1 = sqrt(T1*T1 + Sum * Sum); Sin_p1 = T1 / S1; Cos_p1 = Sum / S1; Rn = gi->Geocent_a / sqrt(1.0 - gi->Geocent_e2 * Sin_p1 * Sin_p1); if (Cos_p1 >= COS_67P5) { *Height = W / Cos_p1 - Rn; } else if (Cos_p1 <= -COS_67P5) { *Height = W / -Cos_p1 - Rn; } else { *Height = Z / Sin_p1 + Rn * (gi->Geocent_e2 - 1.0); } if (At_Pole == FALSE) { *Latitude = atan(Sin_p1 / Cos_p1); } #else /* defined(USE_ITERATIVE_METHOD) */ /* * Reference... * ============ * Wenzel, H.-G.(1985): Hochauflösende Kugelfunktionsmodelle für * das Gravitationspotential der Erde. Wiss. Arb. Univ. Hannover * Nr. 137, p. 130-131. * Programmed by GGA- Leibniz-Institue of Applied Geophysics * Stilleweg 2 * D-30655 Hannover * Federal Republic of Germany * Internet: www.gga-hannover.de * * Hannover, March 1999, April 2004. * see also: comments in statements * remarks: * Mathematically exact and because of symmetry of rotation-ellipsoid, * each point (X,Y,Z) has at least two solutions (Latitude1,Longitude1,Height1) and * (Latitude2,Longitude2,Height2). Is point=(0.,0.,Z) (P=0.), so you get even * four solutions, every two symmetrical to the semi-minor axis. * Here Height1 and Height2 have at least a difference in order of * radius of curvature (e.g. (0,0,b)=> (90.,0.,0.) or (-90.,0.,-2b); * (a+100.)*(sqrt(2.)/2.,sqrt(2.)/2.,0.) => (0.,45.,100.) or * (0.,225.,-(2a+100.))). * The algorithm always computes (Latitude,Longitude) with smallest |Height|. * For normal computations, that means |Height|<10000.m, algorithm normally * converges after to 2-3 steps!!! * But if |Height| has the amount of length of ellipsoid's axis * (e.g. -6300000.m), algorithm needs about 15 steps. */ /* local defintions and variables */ /* end-criterium of loop, accuracy of sin(Latitude) */ #define genau 1.E-12 #define genau2 (genau*genau) #define maxiter 30 double P; /* distance between semi-minor axis and location */ double RR; /* distance between center and location */ double CT; /* sin of geocentric latitude */ double ST; /* cos of geocentric latitude */ double RX; double RK; double RN; /* Earth radius at location */ double CPHI0; /* cos of start or old geodetic latitude in iterations */ double SPHI0; /* sin of start or old geodetic latitude in iterations */ double CPHI; /* cos of searched geodetic latitude */ double SPHI; /* sin of searched geodetic latitude */ double SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ int At_Pole; /* indicates location is in polar region */ int iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ At_Pole = FALSE; P = sqrt(X*X+Y*Y); RR = sqrt(X*X+Y*Y+Z*Z); /* special cases for latitude and longitude */ if (P/gi->Geocent_a < genau) { /* special case, if P=0. (X=0., Y=0.) */ At_Pole = TRUE; *Longitude = 0.; /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis * of ellipsoid (=center of mass), Latitude becomes PI/2 */ if (RR/gi->Geocent_a < genau) { *Latitude = PI_OVER_2; *Height = -gi->Geocent_b; return ; } } else { /* ellipsoidal (geodetic) longitude * interval: -PI < Longitude <= +PI */ *Longitude=atan2(Y,X); } /* -------------------------------------------------------------- * Following iterative algorithm was developped by * "Institut für Erdmessung", University of Hannover, July 1988. * Internet: www.ife.uni-hannover.de * Iterative computation of CPHI,SPHI and Height. * Iteration of CPHI and SPHI to 10**-12 radian resp. * 2*10**-7 arcsec. * -------------------------------------------------------------- */ CT = Z/RR; ST = P/RR; RX = 1.0/sqrt(1.0-gi->Geocent_e2*(2.0-gi->Geocent_e2)*ST*ST); CPHI0 = ST*(1.0-gi->Geocent_e2)*RX; SPHI0 = CT*RX; iter = 0; /* loop to find sin(Latitude) resp. Latitude * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ do { iter++; RN = gi->Geocent_a/sqrt(1.0-gi->Geocent_e2*SPHI0*SPHI0); /* ellipsoidal (geodetic) height */ *Height = P*CPHI0+Z*SPHI0-RN*(1.0-gi->Geocent_e2*SPHI0*SPHI0); RK = gi->Geocent_e2*RN/(RN+*Height); RX = 1.0/sqrt(1.0-RK*(2.0-RK)*ST*ST); CPHI = ST*(1.0-RK)*RX; SPHI = CT*RX; SDPHI = SPHI*CPHI0-CPHI*SPHI0; CPHI0 = CPHI; SPHI0 = SPHI; } while (SDPHI*SDPHI > genau2 && iter < maxiter); /* ellipsoidal (geodetic) latitude */ *Latitude=atan(SPHI/fabs(CPHI)); return; #endif /* defined(USE_ITERATIVE_METHOD) */ } /* END OF Convert_Geocentric_To_Geodetic */ therion-5.4.1/extern/proj4/geocent.h000066400000000000000000000142131307545355600173470ustar00rootroot00000000000000#ifndef GEOCENT_H #define GEOCENT_H /***************************************************************************/ /* RSC IDENTIFIER: GEOCENTRIC * * ABSTRACT * * This component provides conversions between Geodetic coordinates (latitude, * longitude in radians and height in meters) and Geocentric coordinates * (X, Y, Z) in meters. * * ERROR HANDLING * * This component checks parameters for valid values. If an invalid value * is found, the error code is combined with the current error code using * the bitwise or. This combining allows multiple error codes to be * returned. The possible error codes are: * * GEOCENT_NO_ERROR : No errors occurred in function * GEOCENT_LAT_ERROR : Latitude out of valid range * (-90 to 90 degrees) * GEOCENT_LON_ERROR : Longitude out of valid range * (-180 to 360 degrees) * GEOCENT_A_ERROR : Semi-major axis less than or equal to zero * GEOCENT_B_ERROR : Semi-minor axis less than or equal to zero * GEOCENT_A_LESS_B_ERROR : Semi-major axis less than semi-minor axis * * * REUSE NOTES * * GEOCENTRIC is intended for reuse by any application that performs * coordinate conversions between geodetic coordinates and geocentric * coordinates. * * * REFERENCES * * An Improved Algorithm for Geocentric to Geodetic Coordinate Conversion, * Ralph Toms, February 1996 UCRL-JC-123138. * * Further information on GEOCENTRIC can be found in the Reuse Manual. * * GEOCENTRIC originated from : U.S. Army Topographic Engineering Center * Geospatial Information Division * 7701 Telegraph Road * Alexandria, VA 22310-3864 * * LICENSES * * None apply to this component. * * RESTRICTIONS * * GEOCENTRIC has no restrictions. * * ENVIRONMENT * * GEOCENTRIC was tested and certified in the following environments: * * 1. Solaris 2.5 with GCC version 2.8.1 * 2. Windows 95 with MS Visual C++ version 6 * * MODIFICATIONS * * Date Description * ---- ----------- * * */ /***************************************************************************/ /* * DEFINES */ #define GEOCENT_NO_ERROR 0x0000 #define GEOCENT_LAT_ERROR 0x0001 #define GEOCENT_LON_ERROR 0x0002 #define GEOCENT_A_ERROR 0x0004 #define GEOCENT_B_ERROR 0x0008 #define GEOCENT_A_LESS_B_ERROR 0x0010 /***************************************************************************/ /* * FUNCTION PROTOTYPES */ /* ensure proper linkage to c++ programs */ #ifdef __cplusplus extern "C" { #endif typedef struct { double Geocent_a; /* Semi-major axis of ellipsoid in meters */ double Geocent_b; /* Semi-minor axis of ellipsoid */ double Geocent_a2; /* Square of semi-major axis */ double Geocent_b2; /* Square of semi-minor axis */ double Geocent_e2; /* Eccentricity squared */ double Geocent_ep2; /* 2nd eccentricity squared */ } GeocentricInfo; void pj_Init_Geocentric( GeocentricInfo *gi ); long pj_Set_Geocentric_Parameters( GeocentricInfo *gi, double a, double b); /* * The function Set_Geocentric_Parameters receives the ellipsoid parameters * as inputs and sets the corresponding state variables. * * a : Semi-major axis, in meters. (input) * b : Semi-minor axis, in meters. (input) */ void pj_Get_Geocentric_Parameters ( GeocentricInfo *gi, double *a, double *b); /* * The function Get_Geocentric_Parameters returns the ellipsoid parameters * to be used in geocentric coordinate conversions. * * a : Semi-major axis, in meters. (output) * b : Semi-minor axis, in meters. (output) */ long pj_Convert_Geodetic_To_Geocentric ( GeocentricInfo *gi, double Latitude, double Longitude, double Height, double *X, double *Y, double *Z); /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters. (output) * Y : Calculated Geocentric Y coordinate, in meters. (output) * Z : Calculated Geocentric Z coordinate, in meters. (output) * */ void pj_Convert_Geocentric_To_Geodetic (GeocentricInfo *gi, double X, double Y, double Z, double *Latitude, double *Longitude, double *Height); /* * The function Convert_Geocentric_To_Geodetic converts geocentric * coordinates (X, Y, Z) to geodetic coordinates (latitude, longitude, * and height), according to the current ellipsoid parameters. * * X : Geocentric X coordinate, in meters. (input) * Y : Geocentric Y coordinate, in meters. (input) * Z : Geocentric Z coordinate, in meters. (input) * Latitude : Calculated latitude value in radians. (output) * Longitude : Calculated longitude value in radians. (output) * Height : Calculated height value, in meters. (output) */ #ifdef __cplusplus } #endif #endif /* GEOCENT_H */ therion-5.4.1/extern/proj4/mk_cheby.c000066400000000000000000000103611307545355600174770ustar00rootroot00000000000000#include static void /* sum coefficients less than res */ eval(projUV **w, int nu, int nv, double res, projUV *resid) { int i, j; double ab; projUV *s; resid->u = resid->v = 0.; for (i = 0; i < nu; ++i) for (s = w[i], j = 0; j < nv; ++j, ++s) { if ((ab = fabs(s->u)) < res) resid->u += ab; if ((ab = fabs(s->v)) < res) resid->v += ab; } } static Tseries * /* create power series structure */ makeT(int nru, int nrv) { Tseries *T; int i; if ((T = (Tseries *)pj_malloc(sizeof(Tseries))) && (T->cu = (struct PW_COEF *)pj_malloc( sizeof(struct PW_COEF) * nru)) && (T->cv = (struct PW_COEF *)pj_malloc( sizeof(struct PW_COEF) * nrv))) { for (i = 0; i < nru; ++i) T->cu[i].c = 0; for (i = 0; i < nrv; ++i) T->cv[i].c = 0; return T; } else return 0; } Tseries * mk_cheby(projUV a, projUV b, double res, projUV *resid, projUV (*func)(projUV), int nu, int nv, int power) { int j, i, nru, nrv, *ncu, *ncv; Tseries *T; projUV **w; double cutres; if (!(w = (projUV **)vector2(nu, nv, sizeof(projUV))) || !(ncu = (int *)vector1(nu + nv, sizeof(int)))) return 0; ncv = ncu + nu; if (!bchgen(a, b, nu, nv, w, func)) { projUV *s; double ab, *p; /* analyse coefficients and adjust until residual OK */ cutres = res; for (i = 4; i ; --i) { eval(w, nu, nv, cutres, resid); if (resid->u < res && resid->v < res) break; cutres *= 0.5; } if (i <= 0) /* warn of too many tries */ resid->u = - resid->u; /* apply cut resolution and set pointers */ nru = nrv = 0; for (j = 0; j < nu; ++j) { ncu[j] = ncv[j] = 0; /* clear column maxes */ for (s = w[j], i = 0; i < nv; ++i, ++s) { if ((ab = fabs(s->u)) < cutres) /* < resolution ? */ s->u = 0.; /* clear coefficient */ else ncu[j] = i + 1; /* update column max */ if ((ab = fabs(s->v)) < cutres) /* same for v coef's */ s->v = 0.; else ncv[j] = i + 1; } if (ncu[j]) nru = j + 1; /* update row max */ if (ncv[j]) nrv = j + 1; } if (power) { /* convert to bivariate power series */ if (!bch2bps(a, b, w, nu, nv)) goto error; /* possible change in some row counts, so readjust */ nru = nrv = 0; for (j = 0; j < nu; ++j) { ncu[j] = ncv[j] = 0; /* clear column maxes */ for (s = w[j], i = 0; i < nv; ++i, ++s) { if (s->u) ncu[j] = i + 1; /* update column max */ if (s->v) ncv[j] = i + 1; } if (ncu[j]) nru = j + 1; /* update row max */ if (ncv[j]) nrv = j + 1; } if (T = makeT(nru, nrv)) { T->a = a; T->b = b; T->mu = nru - 1; T->mv = nrv - 1; T->power = 1; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ if (T->cu[i].m = ncu[i]) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) *p++ = (w[i] + j)->u; else goto error; for (i = 0; i < nrv; ++i) /* same for v */ if (T->cv[i].m = ncv[i]) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) *p++ = (w[i] + j)->v; else goto error; } } else if (T = makeT(nru, nrv)) { /* else make returned Chebyshev coefficient structure */ T->mu = nru - 1; /* save row degree */ T->mv = nrv - 1; T->a.u = a.u + b.u; /* set argument scaling */ T->a.v = a.v + b.v; T->b.u = 1. / (b.u - a.u); T->b.v = 1. / (b.v - a.v); T->power = 0; for (i = 0; i < nru; ++i) /* store coefficient rows for u */ if (T->cu[i].m = ncu[i]) if ((p = T->cu[i].c = (double *)pj_malloc(sizeof(double) * ncu[i]))) for (j = 0; j < ncu[i]; ++j) *p++ = (w[i] + j)->u; else goto error; for (i = 0; i < nrv; ++i) /* same for v */ if (T->cv[i].m = ncv[i]) if ((p = T->cv[i].c = (double *)pj_malloc(sizeof(double) * ncv[i]))) for (j = 0; j < ncv[i]; ++j) *p++ = (w[i] + j)->v; else goto error; } else goto error; } goto gohome; error: if (T) { /* pj_dalloc up possible allocations */ for (i = 0; i <= T->mu; ++i) if (T->cu[i].c) pj_dalloc(T->cu[i].c); for (i = 0; i <= T->mv; ++i) if (T->cv[i].c) pj_dalloc(T->cv[i].c); pj_dalloc(T); } T = 0; gohome: freev2((void **) w, nu); pj_dalloc(ncu); return T; } therion-5.4.1/extern/proj4/nad/000077500000000000000000000000001307545355600163135ustar00rootroot00000000000000therion-5.4.1/extern/proj4/nad/epsg000066400000000000000000020641441307545355600172070ustar00rootroot00000000000000# HD1909 <3819> +proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <> # TWD67 <3821> +proj=longlat +ellps=aust_SA +no_defs <> # TWD97 <3824> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGRS <3889> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # MGI 1901 <3906> +proj=longlat +ellps=bessel +no_defs <> # Unknown datum based upon the Airy 1830 ellipsoid <4001> +proj=longlat +ellps=airy +no_defs <> # Unknown datum based upon the Airy Modified 1849 ellipsoid <4002> +proj=longlat +ellps=mod_airy +no_defs <> # Unknown datum based upon the Australian National Spheroid <4003> +proj=longlat +ellps=aust_SA +no_defs <> # Unknown datum based upon the Bessel 1841 ellipsoid <4004> +proj=longlat +ellps=bessel +no_defs <> # Unknown datum based upon the Bessel Modified ellipsoid <4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs <> # Unknown datum based upon the Bessel Namibia ellipsoid <4006> +proj=longlat +ellps=bess_nam +no_defs <> # Unknown datum based upon the Clarke 1858 ellipsoid <4007> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Unknown datum based upon the Clarke 1866 ellipsoid <4008> +proj=longlat +ellps=clrk66 +no_defs <> # Unknown datum based upon the Clarke 1866 Michigan ellipsoid <4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> # Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid <4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs <> # Unknown datum based upon the Clarke 1880 (IGN) ellipsoid <4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Unknown datum based upon the Clarke 1880 (RGS) ellipsoid <4012> +proj=longlat +ellps=clrk80 +no_defs <> # Unknown datum based upon the Clarke 1880 (Arc) ellipsoid <4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid <4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs <> # Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid <4015> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid <4016> +proj=longlat +ellps=evrstSS +no_defs <> # Unknown datum based upon the Everest 1830 Modified ellipsoid <4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs <> # Unknown datum based upon the GRS 1980 ellipsoid <4019> +proj=longlat +ellps=GRS80 +no_defs <> # Unknown datum based upon the Helmert 1906 ellipsoid <4020> +proj=longlat +ellps=helmert +no_defs <> # Unknown datum based upon the Indonesian National Spheroid <4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> # Unknown datum based upon the International 1924 ellipsoid <4022> +proj=longlat +ellps=intl +no_defs <> # MOLDREF99 <4023> +proj=longlat +ellps=GRS80 +no_defs <> # Unknown datum based upon the Krassowsky 1940 ellipsoid <4024> +proj=longlat +ellps=krass +no_defs <> # Unknown datum based upon the NWL 9D ellipsoid <4025> +proj=longlat +ellps=WGS66 +no_defs <> # Unknown datum based upon the Plessis 1817 ellipsoid <4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs <> # Unknown datum based upon the Struve 1860 ellipsoid <4028> +proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs <> # Unknown datum based upon the War Office ellipsoid <4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # Unknown datum based upon the WGS 84 ellipsoid <4030> +proj=longlat +ellps=WGS84 +no_defs <> # Unknown datum based upon the GEM 10C ellipsoid <4031> +proj=longlat +ellps=WGS84 +no_defs <> # Unknown datum based upon the OSU86F ellipsoid <4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs <> # Unknown datum based upon the OSU91A ellipsoid <4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs <> # Unknown datum based upon the Clarke 1880 ellipsoid <4034> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> # Unknown datum based upon the Authalic Sphere <4035> +proj=longlat +a=6371000 +b=6371000 +no_defs <> # Unknown datum based upon the GRS 1967 ellipsoid <4036> +proj=longlat +ellps=GRS67 +no_defs <> # Unknown datum based upon the Average Terrestrial System 1977 ellipsoid <4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> # Unknown datum based upon the Everest (1830 Definition) ellipsoid <4042> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> # Unknown datum based upon the WGS 72 ellipsoid <4043> +proj=longlat +ellps=WGS72 +no_defs <> # Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid <4044> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> # Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid <4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs <> # RGRDC 2005 <4046> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Unspecified datum based upon the GRS 1980 Authalic Sphere <4047> +proj=longlat +a=6371007 +b=6371007 +no_defs <> # Unspecified datum based upon the Clarke 1866 Authalic Sphere <4052> +proj=longlat +a=6370997 +b=6370997 +no_defs <> # Unspecified datum based upon the International 1924 Authalic Sphere <4053> +proj=longlat +a=6371228 +b=6371228 +no_defs <> # Unspecified datum based upon the Hughes 1980 ellipsoid <4054> +proj=longlat +a=6378273 +b=6356889.449 +no_defs <> # Popular Visualisation CRS <4055> +proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs <> # SREF98 <4075> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # REGCAN95 <4081> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Greek <4120> +proj=longlat +ellps=bessel +no_defs <> # GGRS87 <4121> +proj=longlat +ellps=GRS80 +datum=GGRS87 +no_defs <> # ATS77 <4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs <> # KKJ <4123> +proj=longlat +ellps=intl +no_defs <> # RT90 <4124> +proj=longlat +ellps=bessel +no_defs <> # Samboja <4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs <> # LKS94 (ETRS89) <4126> +proj=longlat +ellps=GRS80 +no_defs <> # Tete <4127> +proj=longlat +ellps=clrk66 +no_defs <> # Madzansua <4128> +proj=longlat +ellps=clrk66 +no_defs <> # Observatario <4129> +proj=longlat +ellps=clrk66 +no_defs <> # Moznet <4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs <> # Indian 1960 <4131> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # FD58 <4132> +proj=longlat +ellps=clrk80 +no_defs <> # EST92 <4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs <> # PSD93 <4134> +proj=longlat +ellps=clrk80 +no_defs <> # Old Hawaiian <4135> +proj=longlat +ellps=clrk66 +no_defs <> # St. Lawrence Island <4136> +proj=longlat +ellps=clrk66 +no_defs <> # St. Paul Island <4137> +proj=longlat +ellps=clrk66 +no_defs <> # St. George Island <4138> +proj=longlat +ellps=clrk66 +no_defs <> # Puerto Rico <4139> +proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs <> # NAD83(CSRS98) <4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Israel <4141> +proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs <> # Locodjo 1965 <4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs <> # Abidjan 1987 <4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs <> # Kalianpur 1937 <4144> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Kalianpur 1962 <4145> +proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs <> # Kalianpur 1975 <4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs <> # Hanoi 1972 <4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs <> # Hartebeesthoek94 <4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # CH1903 <4149> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> # CH1903+ <4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs <> # CHTRF95 <4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NAD83(HARN) <4152> +proj=longlat +ellps=GRS80 +no_defs <> # Rassadiran <4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs <> # ED50(ED77) <4154> +proj=longlat +ellps=intl +no_defs <> # Dabola 1981 <4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs <> # S-JTSK <4156> +proj=longlat +ellps=bessel +no_defs <> # Mount Dillon <4157> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Naparima 1955 <4158> +proj=longlat +ellps=intl +no_defs <> # ELD79 <4159> +proj=longlat +ellps=intl +no_defs <> # Chos Malal 1914 <4160> +proj=longlat +ellps=intl +no_defs <> # Pampa del Castillo <4161> +proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs <> # Korean 1985 <4162> +proj=longlat +ellps=bessel +no_defs <> # Yemen NGN96 <4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # South Yemen <4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs <> # Bissau <4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs <> # Korean 1995 <4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NZGD2000 <4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Accra <4168> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # American Samoa 1962 <4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs <> # SIRGAS 1995 <4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RGF93 <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # POSGAR <4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IRENET95 <4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Sierra Leone 1924 <4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs <> # Sierra Leone 1968 <4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs <> # Australian Antarctic <4176> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942(83) <4178> +proj=longlat +ellps=krass +no_defs <> # Pulkovo 1942(58) <4179> +proj=longlat +ellps=krass +no_defs <> # EST97 <4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Luxembourg 1930 <4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs <> # Azores Occidental 1939 <4182> +proj=longlat +ellps=intl +no_defs <> # Azores Central 1948 <4183> +proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs <> # Azores Oriental 1940 <4184> +proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs <> # Madeira 1936 <4185> +proj=longlat +ellps=intl +no_defs <> # OSNI 1952 <4188> +proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs <> # REGVEN <4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # POSGAR 98 <4190> +proj=longlat +ellps=GRS80 +no_defs <> # Albanian 1987 <4191> +proj=longlat +ellps=krass +no_defs <> # Douala 1948 <4192> +proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs <> # Manoca 1962 <4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Qornoq 1927 <4194> +proj=longlat +ellps=intl +no_defs <> # Scoresbysund 1952 <4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs <> # Ammassalik 1958 <4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs <> # Garoua <4197> +proj=longlat +ellps=clrk80 +no_defs <> # Kousseri <4198> +proj=longlat +ellps=clrk80 +no_defs <> # Egypt 1930 <4199> +proj=longlat +ellps=intl +no_defs <> # Pulkovo 1995 <4200> +proj=longlat +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +no_defs <> # Adindan <4201> +proj=longlat +ellps=clrk80 +no_defs <> # AGD66 <4202> +proj=longlat +ellps=aust_SA +no_defs <> # AGD84 <4203> +proj=longlat +ellps=aust_SA +no_defs <> # Ain el Abd <4204> +proj=longlat +ellps=intl +no_defs <> # Afgooye <4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs <> # Agadez <4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Lisbon <4207> +proj=longlat +ellps=intl +no_defs <> # Aratu <4208> +proj=longlat +ellps=intl +no_defs <> # Arc 1950 <4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Arc 1960 <4210> +proj=longlat +ellps=clrk80 +no_defs <> # Batavia <4211> +proj=longlat +ellps=bessel +no_defs <> # Barbados 1938 <4212> +proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs <> # Beduaram <4213> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs <> # Beijing 1954 <4214> +proj=longlat +ellps=krass +no_defs <> # Belge 1950 <4215> +proj=longlat +ellps=intl +no_defs <> # Bermuda 1957 <4216> +proj=longlat +ellps=clrk66 +no_defs <> # Bogota 1975 <4218> +proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs <> # Bukit Rimpah <4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs <> # Camacupa <4220> +proj=longlat +ellps=clrk80 +no_defs <> # Campo Inchauspe <4221> +proj=longlat +ellps=intl +no_defs <> # Cape <4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs <> # Carthage <4223> +proj=longlat +a=6378249.2 +b=6356515 +datum=carthage +no_defs <> # Chua <4224> +proj=longlat +ellps=intl +no_defs <> # Corrego Alegre <4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs <> # Cote d'Ivoire <4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Deir ez Zor <4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Douala <4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Egypt 1907 <4229> +proj=longlat +ellps=helmert +no_defs <> # ED50 <4230> +proj=longlat +ellps=intl +no_defs <> # ED87 <4231> +proj=longlat +ellps=intl +no_defs <> # Fahud <4232> +proj=longlat +ellps=clrk80 +no_defs <> # Gandajika 1970 <4233> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> # Garoua <4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Guyane Francaise <4235> +proj=longlat +ellps=intl +no_defs <> # Hu Tzu Shan 1950 <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs <> # HD72 <4237> +proj=longlat +ellps=GRS67 +no_defs <> # ID74 <4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs <> # Indian 1954 <4239> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs <> # Indian 1975 <4240> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # Jamaica 1875 <4241> +proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs <> # JAD69 <4242> +proj=longlat +ellps=clrk66 +no_defs <> # Kalianpur 1880 <4243> +proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs <> # Kandawala <4244> +proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs <> # Kertau 1968 <4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs <> # KOC <4246> +proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs <> # La Canoa <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs <> # PSAD56 <4248> +proj=longlat +ellps=intl +no_defs <> # Lake <4249> +proj=longlat +ellps=intl +no_defs <> # Leigon <4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs <> # Liberia 1964 <4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs <> # Lome <4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Luzon 1911 <4253> +proj=longlat +ellps=clrk66 +no_defs <> # Hito XVIII 1963 <4254> +proj=longlat +ellps=intl +no_defs <> # Herat North <4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs <> # Mahe 1971 <4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs <> # Makassar <4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs <> # ETRS89 <4258> +proj=longlat +ellps=GRS80 +no_defs <> # Malongo 1987 <4259> +proj=longlat +ellps=intl +no_defs <> # Manoca <4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs <> # Merchich <4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs <> # Massawa <4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs <> # Minna <4263> +proj=longlat +ellps=clrk80 +no_defs <> # Mhast <4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs <> # Monte Mario <4265> +proj=longlat +ellps=intl +no_defs <> # M'poraloko <4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # NAD27 <4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs <> # NAD27 Michigan <4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs <> # NAD83 <4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs <> # Nahrwan 1967 <4270> +proj=longlat +ellps=clrk80 +no_defs <> # Naparima 1972 <4271> +proj=longlat +ellps=intl +no_defs <> # NZGD49 <4272> +proj=longlat +ellps=intl +datum=nzgd49 +no_defs <> # NGO 1948 <4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs <> # Datum 73 <4274> +proj=longlat +ellps=intl +no_defs <> # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs <> # NSWC 9Z-2 <4276> +proj=longlat +ellps=WGS66 +no_defs <> # OSGB 1936 <4277> +proj=longlat +ellps=airy +datum=OSGB36 +no_defs <> # OSGB70 <4278> +proj=longlat +ellps=airy +no_defs <> # OS(SN)80 <4279> +proj=longlat +ellps=airy +no_defs <> # Padang <4280> +proj=longlat +ellps=bessel +no_defs <> # Palestine 1923 <4281> +proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs <> # Pointe Noire <4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # GDA94 <4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pulkovo 1942 <4284> +proj=longlat +ellps=krass +no_defs <> # Qatar 1974 <4285> +proj=longlat +ellps=intl +no_defs <> # Qatar 1948 <4286> +proj=longlat +ellps=helmert +no_defs <> # Qornoq <4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs <> # Loma Quintana <4288> +proj=longlat +ellps=intl +no_defs <> # Amersfoort <4289> +proj=longlat +ellps=bessel +no_defs <> # SAD69 <4291> +proj=longlat +ellps=GRS67 +no_defs <> # Sapper Hill 1943 <4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs <> # Schwarzeck <4293> +proj=longlat +ellps=bess_nam +no_defs <> # Segora <4294> +proj=longlat +ellps=bessel +no_defs <> # Serindung <4295> +proj=longlat +ellps=bessel +no_defs <> # Sudan <4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Tananarive <4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs <> # Timbalai 1948 <4298> +proj=longlat +ellps=evrstSS +no_defs <> # TM65 <4299> +proj=longlat +ellps=mod_airy +datum=ire65 +no_defs <> # TM75 <4300> +proj=longlat +ellps=mod_airy +no_defs <> # Tokyo <4301> +proj=longlat +ellps=bessel +no_defs <> # Trinidad 1903 <4302> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # TC(1948) <4303> +proj=longlat +ellps=helmert +no_defs <> # Voirol 1875 <4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs <> # Bern 1938 <4306> +proj=longlat +ellps=bessel +no_defs <> # Nord Sahara 1959 <4307> +proj=longlat +ellps=clrk80 +no_defs <> # RT38 <4308> +proj=longlat +ellps=bessel +no_defs <> # Yacare <4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs <> # Yoff <4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Zanderij <4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs <> # MGI <4312> +proj=longlat +ellps=bessel +datum=hermannskogel +no_defs <> # Belge 1972 <4313> +proj=longlat +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +no_defs <> # DHDN <4314> +proj=longlat +ellps=bessel +datum=potsdam +no_defs <> # Conakry 1905 <4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs <> # Dealul Piscului 1930 <4316> +proj=longlat +ellps=intl +no_defs <> # Dealul Piscului 1970 <4317> +proj=longlat +ellps=krass +no_defs <> # NGN <4318> +proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs <> # KUDAMS <4319> +proj=longlat +ellps=GRS80 +no_defs <> # WGS 72 <4322> +proj=longlat +ellps=WGS72 +no_defs <> # WGS 72BE <4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs <> # WGS 84 <4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs <> # Anguilla 1957 <4600> +proj=longlat +ellps=clrk80 +no_defs <> # Antigua 1943 <4601> +proj=longlat +ellps=clrk80 +no_defs <> # Dominica 1945 <4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs <> # Grenada 1953 <4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs <> # Montserrat 1958 <4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs <> # St. Kitts 1955 <4605> +proj=longlat +ellps=clrk80 +no_defs <> # St. Lucia 1955 <4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs <> # St. Vincent 1945 <4607> +proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs <> # NAD27(76) <4608> +proj=longlat +ellps=clrk66 +no_defs <> # NAD27(CGQ77) <4609> +proj=longlat +ellps=clrk66 +no_defs <> # Xian 1980 <4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs <> # Hong Kong 1980 <4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs <> # JGD2000 <4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Segara <4613> +proj=longlat +ellps=bessel +no_defs <> # QND95 <4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs <> # Porto Santo <4615> +proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs <> # Selvagem Grande <4616> +proj=longlat +ellps=intl +no_defs <> # NAD83(CSRS) <4617> +proj=longlat +ellps=GRS80 +no_defs <> # SAD69 <4618> +proj=longlat +ellps=aust_SA +no_defs <> # SWEREF99 <4619> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Point 58 <4620> +proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs <> # Fort Marigot <4621> +proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs <> # Guadeloupe 1948 <4622> +proj=longlat +ellps=intl +no_defs <> # CSG67 <4623> +proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs <> # RGFG95 <4624> +proj=longlat +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +no_defs <> # Martinique 1938 <4625> +proj=longlat +ellps=intl +no_defs <> # Reunion 1947 <4626> +proj=longlat +ellps=intl +no_defs <> # RGR92 <4627> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Tahiti 52 <4628> +proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs <> # Tahaa 54 <4629> +proj=longlat +ellps=intl +no_defs <> # IGN72 Nuku Hiva <4630> +proj=longlat +ellps=intl +no_defs <> # K0 1949 <4631> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> # Combani 1950 <4632> +proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs <> # IGN56 Lifou <4633> +proj=longlat +ellps=intl +no_defs <> # IGN72 Grand Terre <4634> +proj=longlat +ellps=intl +no_defs <> # ST87 Ouvea <4635> +proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs <> # Petrels 1972 <4636> +proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs <> # Perroud 1950 <4637> +proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs <> # Saint Pierre et Miquelon 1950 <4638> +proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs <> # MOP78 <4639> +proj=longlat +ellps=intl +no_defs <> # RRAF 1991 <4640> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN53 Mare <4641> +proj=longlat +ellps=intl +no_defs <> # ST84 Ile des Pins <4642> +proj=longlat +ellps=intl +no_defs <> # ST71 Belep <4643> +proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs <> # NEA74 Noumea <4644> +proj=longlat +ellps=intl +no_defs <> # RGNC 1991 <4645> +proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs <> # Grand Comoros <4646> +proj=longlat +ellps=intl +no_defs <> # Reykjavik 1900 <4657> +proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs <> # Hjorsey 1955 <4658> +proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs <> # ISN93 <4659> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Helle 1954 <4660> +proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +no_defs <> # LKS92 <4661> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGN72 Grande Terre <4662> +proj=longlat +ellps=intl +no_defs <> # Porto Santo 1995 <4663> +proj=longlat +ellps=intl +no_defs <> # Azores Oriental 1995 <4664> +proj=longlat +ellps=intl +no_defs <> # Azores Central 1995 <4665> +proj=longlat +ellps=intl +no_defs <> # Lisbon 1890 <4666> +proj=longlat +ellps=bessel +no_defs <> # IKBD-92 <4667> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # ED79 <4668> +proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs <> # LKS94 <4669> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # IGM95 <4670> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Voirol 1879 <4671> +proj=longlat +a=6378249.2 +b=6356515 +no_defs <> # Chatham Islands 1971 <4672> +proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs <> # Chatham Islands 1979 <4673> +proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs <> # SIRGAS 2000 <4674> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Guam 1963 <4675> +proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs <> # Vientiane 1982 <4676> +proj=longlat +ellps=krass +no_defs <> # Lao 1993 <4677> +proj=longlat +ellps=krass +no_defs <> # Lao 1997 <4678> +proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs <> # Jouik 1961 <4679> +proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs <> # Nouakchott 1965 <4680> +proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs <> # Mauritania 1999 <4681> +proj=longlat +ellps=clrk80 +no_defs <> # Gulshan 303 <4682> +proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs <> # PRS92 <4683> +proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs <> # Gan 1970 <4684> +proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs <> # Gandajika <4685> +proj=longlat +ellps=intl +no_defs <> # MAGNA-SIRGAS <4686> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RGPF <4687> +proj=longlat +ellps=GRS80 +no_defs <> # Fatu Iva 72 <4688> +proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs <> # IGN63 Hiva Oa <4689> +proj=longlat +ellps=intl +no_defs <> # Tahiti 79 <4690> +proj=longlat +ellps=intl +no_defs <> # Moorea 87 <4691> +proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs <> # Maupiti 83 <4692> +proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs <> # Nakhl-e Ghanem <4693> +proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs <> # POSGAR 94 <4694> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Katanga 1955 <4695> +proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs <> # Kasai 1953 <4696> +proj=longlat +ellps=clrk80 +no_defs <> # IGC 1962 6th Parallel South <4697> +proj=longlat +ellps=clrk80 +no_defs <> # IGN 1962 Kerguelen <4698> +proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs <> # Le Pouce 1934 <4699> +proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs <> # IGN Astro 1960 <4700> +proj=longlat +ellps=clrk80 +no_defs <> # IGCB 1955 <4701> +proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs <> # Mauritania 1999 <4702> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Mhast 1951 <4703> +proj=longlat +ellps=clrk80 +no_defs <> # Mhast (onshore) <4704> +proj=longlat +ellps=intl +no_defs <> # Mhast (offshore) <4705> +proj=longlat +ellps=intl +no_defs <> # Egypt Gulf of Suez S-650 TL <4706> +proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs <> # Tern Island 1961 <4707> +proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs <> # Cocos Islands 1965 <4708> +proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs <> # Iwo Jima 1945 <4709> +proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs <> # St. Helena 1971 <4710> +proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs <> # Marcus Island 1952 <4711> +proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs <> # Ascension Island 1958 <4712> +proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs <> # Ayabelle Lighthouse <4713> +proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs <> # Bellevue <4714> +proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs <> # Camp Area Astro <4715> +proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs <> # Phoenix Islands 1966 <4716> +proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs <> # Cape Canaveral <4717> +proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs <> # Solomon 1968 <4718> +proj=longlat +ellps=intl +no_defs <> # Easter Island 1967 <4719> +proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs <> # Fiji 1986 <4720> +proj=longlat +ellps=WGS72 +no_defs <> # Fiji 1956 <4721> +proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs <> # South Georgia 1968 <4722> +proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs <> # Grand Cayman 1959 <4723> +proj=longlat +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +no_defs <> # Diego Garcia 1969 <4724> +proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs <> # Johnston Island 1961 <4725> +proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs <> # Little Cayman 1961 <4726> +proj=longlat +ellps=clrk66 +no_defs <> # Midway 1961 <4727> +proj=longlat +ellps=intl +no_defs <> # Pico de las Nieves 1984 <4728> +proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs <> # Pitcairn 1967 <4729> +proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs <> # Santo 1965 <4730> +proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs <> # Viti Levu 1916 <4731> +proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # Marshall Islands 1960 <4732> +proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs <> # Wake Island 1952 <4733> +proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs <> # Tristan 1968 <4734> +proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs <> # Kusaie 1951 <4735> +proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs <> # Deception Island <4736> +proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs <> # Korea 2000 <4737> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Hong Kong 1963 <4738> +proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs <> # Hong Kong 1963(67) <4739> +proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs <> # PZ-90 <4740> +proj=longlat +a=6378136 +b=6356751.361745712 +no_defs <> # FD54 <4741> +proj=longlat +ellps=intl +no_defs <> # GDM2000 <4742> +proj=longlat +ellps=GRS80 +no_defs <> # Karbala 1979 <4743> +proj=longlat +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +no_defs <> # Nahrwan 1934 <4744> +proj=longlat +ellps=clrk80 +no_defs <> # RD/83 <4745> +proj=longlat +ellps=bessel +no_defs <> # PD/83 <4746> +proj=longlat +ellps=bessel +no_defs <> # GR96 <4747> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Vanua Levu 1915 <4748> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # RGNC91-93 <4749> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # ST87 Ouvea <4750> +proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs <> # Kertau (RSO) <4751> +proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs <> # Viti Levu 1912 <4752> +proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs <> # fk89 <4753> +proj=longlat +ellps=intl +no_defs <> # LGD2006 <4754> +proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs <> # DGN95 <4755> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # VN-2000 <4756> +proj=longlat +ellps=WGS84 +no_defs <> # SVY21 <4757> +proj=longlat +ellps=WGS84 +no_defs <> # JAD2001 <4758> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # NAD83(NSRS2007) <4759> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # WGS 66 <4760> +proj=longlat +ellps=WGS66 +no_defs <> # HTRS96 <4761> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # BDA2000 <4762> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Pitcairn 2006 <4763> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs <> # RSRGD2000 <4764> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Slovenia 1996 <4765> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <> # Bern 1898 (Bern) <4801> +proj=longlat +ellps=bessel +pm=bern +no_defs <> # Bogota 1975 (Bogota) <4802> +proj=longlat +ellps=intl +pm=bogota +no_defs <> # Lisbon (Lisbon) <4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs <> # Makassar (Jakarta) <4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs <> # MGI (Ferro) <4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> # Monte Mario (Rome) <4806> +proj=longlat +ellps=intl +pm=rome +no_defs <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs <> # Padang (Jakarta) <4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # Belge 1950 (Brussels) <4809> +proj=longlat +ellps=intl +pm=brussels +no_defs <> # Tananarive (Paris) <4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs <> # Voirol 1875 (Paris) <4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs <> # Batavia (Jakarta) <4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # RT38 (Stockholm) <4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs <> # Greek (Athens) <4815> +proj=longlat +ellps=bessel +pm=athens +no_defs <> # Carthage (Paris) <4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> # NGO 1948 (Oslo) <4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs <> # S-JTSK (Ferro) <4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs <> # Nord Sahara 1959 (Paris) <4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs <> # Segara (Jakarta) <4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs <> # Voirol 1879 (Paris) <4821> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs <> # unnamed ellipse <4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +no_defs <> # NDG (Paris) <4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs <> # Madrid 1870 (Madrid) <4903> +proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs <> # Lisbon 1890 (Lisbon) <4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs <> # Anguilla 1957 / British West Indies Grid <2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Antigua 1943 / British West Indies Grid <2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Dominica 1945 / British West Indies Grid <2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs <> # Grenada 1953 / British West Indies Grid <2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs <> # Montserrat 1958 / British West Indies Grid <2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs <> # St. Kitts 1955 / British West Indies Grid <2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # St. Lucia 1955 / British West Indies Grid <2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs <> # St. Vincent 45 / British West Indies Grid <2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 2 <2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 3 <2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 4 <2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 5 <2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 6 <2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 7 <2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 8 <2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 9 <2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / SCoPQ zone 10 <2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 8 <2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 9 <2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 10 <2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 11 <2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 12 <2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 13 <2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 14 <2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 15 <2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 16 <2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / MTM zone 17 <2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 15N <2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 16N <2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 17N <2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD27(76) / UTM zone 18N <2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 17N <2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 18N <2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 19N <2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 20N <2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> # NAD27(CGQ77) / UTM zone 21N <2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs <> # NAD83(CSRS98) / New Brunswick Stereo (deprecated) <2036> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 19N (deprecated) <2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 20N (deprecated) <2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Israel / Israeli TM Grid <2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs <> # Locodjo 1965 / UTM zone 30N <2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / UTM zone 30N <2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Locodjo 1965 / UTM zone 29N <2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / UTM zone 29N <2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / Gauss-Kruger zone 18 <2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / Gauss-Kruger zone 19 <2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # Hartebeesthoek94 / Lo15 # Unable to translate coordinate system EPSG:2046 into PROJ.4 format. # # Hartebeesthoek94 / Lo17 # Unable to translate coordinate system EPSG:2047 into PROJ.4 format. # # Hartebeesthoek94 / Lo19 # Unable to translate coordinate system EPSG:2048 into PROJ.4 format. # # Hartebeesthoek94 / Lo21 # Unable to translate coordinate system EPSG:2049 into PROJ.4 format. # # Hartebeesthoek94 / Lo23 # Unable to translate coordinate system EPSG:2050 into PROJ.4 format. # # Hartebeesthoek94 / Lo25 # Unable to translate coordinate system EPSG:2051 into PROJ.4 format. # # Hartebeesthoek94 / Lo27 # Unable to translate coordinate system EPSG:2052 into PROJ.4 format. # # Hartebeesthoek94 / Lo29 # Unable to translate coordinate system EPSG:2053 into PROJ.4 format. # # Hartebeesthoek94 / Lo31 # Unable to translate coordinate system EPSG:2054 into PROJ.4 format. # # Hartebeesthoek94 / Lo33 # Unable to translate coordinate system EPSG:2055 into PROJ.4 format. # # CH1903+ / LV95 <2056> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # Rassadiran / Nakhl e Taqi <2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs <> # ED50(ED77) / UTM zone 38N <2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 39N <2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 40N <2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> # ED50(ED77) / UTM zone 41N <2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs <> # Madrid 1870 (Madrid) / Spain <2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs <> # Dabola 1981 / UTM zone 28N (deprecated) <2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Dabola 1981 / UTM zone 29N (deprecated) <2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # S-JTSK (Ferro) / Krovak <2065> +proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # Mount Dillon / Tobago Grid <2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> # Naparima 1955 / UTM zone 20N <2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 5 <2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 6 <2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 7 <2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 8 <2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 9 <2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 10 <2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 11 <2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 12 <2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / Libya zone 13 <2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 32N <2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 33N <2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 34N <2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> # ELD79 / UTM zone 35N <2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> # Chos Malal 1914 / Argentina zone 2 <2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Pampa del Castillo / Argentina zone 2 <2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs <> # Hito XVIII 1963 / Argentina zone 2 <2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Hito XVIII 1963 / UTM zone 19S <2084> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # NAD27 / Cuba Norte (deprecated) <2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur (deprecated) <2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # ELD79 / TM 12 NE <2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Carthage / TM 11 NE <2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Yemen NGN96 / UTM zone 38N <2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Yemen NGN96 / UTM zone 39N <2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss Kruger zone 8 (deprecated) <2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss Kruger zone 9 (deprecated) <2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # Hanoi 1972 / GK 106 NE <2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs <> # WGS 72BE / TM 106 NE <2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # Bissau / UTM zone 28N <2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs <> # Korean 1985 / Korea East Belt <2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Korean 1985 / Korea Central Belt <2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Korean 1985 / Korea West Belt <2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs <> # Qatar 1948 / Qatar Grid <2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs <> # GGRS87 / Greek Grid <2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=GGRS87 +units=m +no_defs <> # Lake / Maracaibo Grid M1 <2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo Grid <2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo Grid M3 <2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs <> # Lake / Maracaibo La Rosa Grid <2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs <> # NZGD2000 / Mount Eden 2000 <2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Bay of Plenty 2000 <2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Poverty Bay 2000 <2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Hawkes Bay 2000 <2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Taranaki 2000 <2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Tuhirangi 2000 <2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wanganui 2000 <2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wairarapa 2000 <2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Wellington 2000 <2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Collingwood 2000 <2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Nelson 2000 <2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Karamea 2000 <2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Buller 2000 <2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Grey 2000 <2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Amuri 2000 <2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Marlborough 2000 <2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Hokitika 2000 <2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Okarito 2000 <2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Jacksons Bay 2000 <2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount Pleasant 2000 <2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Gawler 2000 <2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Timaru 2000 <2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Lindis Peak 2000 <2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount Nicholas 2000 <2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Mount York 2000 <2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Observation Point 2000 <2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / North Taieri 2000 <2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Bluff 2000 <2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 58S <2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 59S <2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / UTM zone 60S <2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Accra / Ghana National Grid <2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Accra / TM 1 NW <2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +units=m +no_defs <> # NAD27(CGQ77) / Quebec Lambert <2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # NAD83(CSRS98) / SCoPQ zone 2 (deprecated) <2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 3 (deprecated) <2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 4 (deprecated) <2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 5 (deprecated) <2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 6 (deprecated) <2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 7 (deprecated) <2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 8 (deprecated) <2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 9 (deprecated) <2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / MTM zone 10 (deprecated) <2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 21N (deprecated) <2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 18N (deprecated) <2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 17N (deprecated) <2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 13N (deprecated) <2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 12N (deprecated) <2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS98) / UTM zone 11N (deprecated) <2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / Lambert-93 <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert (deprecated) <2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 59S (deprecated) <2156> +proj=utm +zone=59 +south +ellps=GRS80 +units=m +no_defs <> # IRENET95 / Irish Transverse Mercator <2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IRENET95 / UTM zone 29N <2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Sierra Leone 1924 / New Colony Grid <2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Sierra Leone 1924 / New War Office Grid <2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs <> # Sierra Leone 1968 / UTM zone 28N <2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> # Sierra Leone 1968 / UTM zone 29N <2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs <> # unnamed <2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs <> # Locodjo 1965 / TM 5 NW <2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs <> # Abidjan 1987 / TM 5 NW <2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 3 (deprecated) <2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 4 (deprecated) <2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 5 (deprecated) <2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Luxembourg 1930 / Gauss <2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs <> # MGI / Slovenia Grid (deprecated) <2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I (deprecated) <2171> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone II <2172> +proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone III <2173> +proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone IV <2174> +proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone V <2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 5 <2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 6 <2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 7 <2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS2000 zone 8 <2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Poland CS92 <2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs <> # Azores Occidental 1939 / UTM zone 25N <2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs <> # Azores Central 1948 / UTM zone 26N <2189> +proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs <> # Azores Oriental 1940 / UTM zone 26N <2190> +proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs <> # Madeira 1936 / UTM zone 28N (deprecated) <2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # ED50 / France EuroLambert <2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs <> # NZGD2000 / New Zealand Transverse Mercator 2000 <2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert (deprecated) <2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 2S <2195> +proj=utm +zone=2 +south +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Jutland <2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Zealand <2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Kp2000 Bornholm <2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Albanian 1987 / Gauss Kruger zone 4 (deprecated) <2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # ATS77 / New Brunswick Stereographic (ATS77) <2200> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # REGVEN / UTM zone 18N <2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGVEN / UTM zone 19N <2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGVEN / UTM zone 20N <2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Tennessee <2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Kentucky North <2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 9 <2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 10 <2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 11 <2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 12 <2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 13 <2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 14 <2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / 3-degree Gauss-Kruger zone 15 <2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ETRS89 / TM 30 NE <2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Douala 1948 / AOF west (deprecated) <2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Manoca 1962 / UTM zone 32N <2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs <> # Qornoq 1927 / UTM zone 22N <2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs <> # Qornoq 1927 / UTM zone 23N <2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs <> # Scoresbysund 1952 / Greenland zone 5 east # Unable to translate coordinate system EPSG:2218 into PROJ.4 format. # # ATS77 / UTM zone 19N <2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # ATS77 / UTM zone 20N <2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # Scoresbysund 1952 / Greenland zone 6 east # Unable to translate coordinate system EPSG:2221 into PROJ.4 format. # # NAD83 / Arizona East (ft) <2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Arizona Central (ft) <2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Arizona West (ft) <2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / California zone 1 (ftUS) <2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 2 (ftUS) <2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 3 (ftUS) <2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 4 (ftUS) <2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 5 (ftUS) <2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / California zone 6 (ftUS) <2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado North (ftUS) <2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado Central (ftUS) <2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Colorado South (ftUS) <2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Connecticut (ftUS) <2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Delaware (ftUS) <2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida East (ftUS) <2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida West (ftUS) <2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Florida North (ftUS) <2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Georgia East (ftUS) <2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Georgia West (ftUS) <2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho East (ftUS) <2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho Central (ftUS) <2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Idaho West (ftUS) <2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) (deprecated) <2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) (deprecated) <2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kentucky North (ftUS) <2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kentucky South (ftUS) <2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Maryland (ftUS) <2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Massachusetts Mainland (ftUS) <2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Massachusetts Island (ftUS) <2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Michigan North (ft) <2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Michigan Central (ft) <2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Michigan South (ft) <2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Mississippi East (ftUS) <2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Mississippi West (ftUS) <2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Montana (ft) <2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / New Mexico East (ftUS) <2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Mexico Central (ftUS) <2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Mexico West (ftUS) <2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York East (ftUS) <2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York Central (ftUS) <2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York West (ftUS) <2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New York Long Island (ftUS) <2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / North Carolina (ftUS) <2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / North Dakota North (ft) <2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / North Dakota South (ft) <2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Oklahoma North (ftUS) <2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Oklahoma South (ftUS) <2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Oregon North (ft) <2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Oregon South (ft) <2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Pennsylvania North (ftUS) <2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Pennsylvania South (ftUS) <2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Carolina (ft) <2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Tennessee (ftUS) <2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas North (ftUS) <2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas North Central (ftUS) <2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas Central (ftUS) <2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas South Central (ftUS) <2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Texas South (ftUS) <2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Utah North (ft) <2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Utah Central (ft) <2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Utah South (ft) <2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83 / Virginia North (ftUS) <2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Virginia South (ftUS) <2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Washington North (ftUS) <2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Washington South (ftUS) <2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin North (ftUS) <2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin Central (ftUS) <2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wisconsin South (ftUS) <2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # ATS77 / Prince Edward Isl. Stereographic (ATS77) <2290> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) <2291> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) (deprecated) <2292> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ATS77 / MTM Nova Scotia zone 4 <2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # ATS77 / MTM Nova Scotia zone 5 <2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs <> # Ammassalik 1958 / Greenland zone 7 east # Unable to translate coordinate system EPSG:2296 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 1 east (deprecated) # Unable to translate coordinate system EPSG:2297 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 2 east (deprecated) # Unable to translate coordinate system EPSG:2298 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 2 west # Unable to translate coordinate system EPSG:2299 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 3 east (deprecated) # Unable to translate coordinate system EPSG:2300 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 3 west # Unable to translate coordinate system EPSG:2301 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 4 east (deprecated) # Unable to translate coordinate system EPSG:2302 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 4 west # Unable to translate coordinate system EPSG:2303 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 5 west # Unable to translate coordinate system EPSG:2304 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 6 west # Unable to translate coordinate system EPSG:2305 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 7 west # Unable to translate coordinate system EPSG:2306 into PROJ.4 format. # # Qornoq 1927 / Greenland zone 8 east # Unable to translate coordinate system EPSG:2307 into PROJ.4 format. # # Batavia / TM 109 SE <2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs <> # WGS 84 / TM 116 SE <2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 132 SE <2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 6 NE <2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Garoua / UTM zone 33N <2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Kousseri / UTM zone 33N <2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid (ftCla) <2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> # Campo Inchauspe / UTM zone 19S <2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # Campo Inchauspe / UTM zone 20S <2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> # PSAD56 / ICN Regional <2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs <> # Ain el Abd / Aramco Lambert <2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM27 <2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM30 <2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM33 <2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM36 <2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM39 <2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM42 <2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM45 <2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Hong Kong 1980 Grid System <2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 13 <2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 14 <2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 15 <2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 16 <2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 17 <2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 18 <2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 19 <2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 20 <2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 21 <2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 22 <2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger zone 23 <2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 75E <2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 81E <2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 87E <2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 93E <2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 99E <2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 105E <2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 111E <2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 117E <2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 123E <2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 129E <2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / Gauss-Kruger CM 135E <2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 25 <2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 26 <2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 27 <2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 28 <2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 29 <2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 30 <2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 31 <2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 32 <2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 33 <2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 34 <2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 35 <2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 36 <2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 37 <2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 38 <2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 39 <2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 40 <2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 41 <2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 42 <2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 43 <2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 44 <2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 45 <2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 75E <2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 78E <2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 81E <2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 84E <2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 87E <2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 90E <2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 93E <2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 96E <2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 99E <2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 102E <2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 105E <2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 108E <2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 111E <2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 114E <2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 117E <2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 120E <2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 123E <2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 126E <2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 129E <2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 132E <2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 135E <2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs <> # KKJ / Finland zone 1 <2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 2 <2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland Uniform Coordinate System <2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 4 <2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 8 <2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # South Yemen / Gauss-Kruger zone 9 <2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 3 <2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 4 <2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 5 <2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # RT90 2.5 gon W (deprecated) <2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 25 <2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 26 <2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 27 <2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 28 <2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 29 <2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 30 <2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 31 <2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 32 <2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 33 <2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 34 <2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 35 <2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 36 <2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 37 <2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 38 <2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 39 <2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 40 <2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 41 <2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 42 <2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 43 <2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 44 <2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 45 <2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 75E <2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 78E <2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 81E <2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 84E <2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 87E <2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 90E <2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 93E <2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 96E <2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 99E <2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 102E <2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 105E <2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 108E <2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 111E <2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 114E <2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 117E <2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 120E <2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 123E <2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 126E <2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 129E <2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 132E <2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 135E <2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS I <2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS II <2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS III <2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS IV <2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS V <2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VI <2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VII <2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS VIII <2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS IX <2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS X <2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XI <2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XII <2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIII <2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIV <2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XV <2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVI <2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVII <2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XVIII <2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / Japan Plane Rectangular CS XIX <2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Albanian 1987 / Gauss-Kruger zone 4 <2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 21E <2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 27E <2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 33E <2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 39E <2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 45E <2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 51E <2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 57E <2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 63E <2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 69E <2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 75E <2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 81E <2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 87E <2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 93E <2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 99E <2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 105E <2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 111E <2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 117E <2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 123E <2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 129E <2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 135E <2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 141E <2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 147E <2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 153E <2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 159E <2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 165E <2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171E <2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177E <2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177W <2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171W <2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 9E (deprecated) <2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 15E (deprecated) <2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 21E <2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 27E <2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 33E <2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 39E <2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 45E <2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 51E <2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 57E <2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 63E <2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 69E <2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 75E <2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 81E <2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 87E <2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 93E <2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 99E <2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 105E <2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 111E <2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 117E <2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 123E <2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 129E <2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 135E <2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 141E <2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 147E <2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 153E <2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 159E <2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 165E <2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171E <2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177E <2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177W <2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171W <2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 <2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 <2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 <2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 <2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 <2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 <2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 <2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 <2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 <2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 <2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 <2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 <2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 <2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 <2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 <2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 <2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 <2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 <2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 <2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 <2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 <2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 <2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 <2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 <2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 <2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 <2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 <2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Samboja / UTM zone 50S (deprecated) <2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 <2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 <2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 <2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 <2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 <2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 <2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 <2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 <2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 <2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 <2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 <2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 <2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 <2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 <2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 <2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 <2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 <2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 <2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 <2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 <2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 <2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 <2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 <2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 <2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 <2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 <2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 (deprecated) <2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 <2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 <2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 <2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 <2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E <2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E <2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E <2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E <2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E <2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E <2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E <2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E <2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E <2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E <2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E <2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E <2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E <2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E <2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E <2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E <2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E <2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E <2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Lietuvos Koordinoei Sistema 1994 (deprecated) <2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E <2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E <2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E <2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E <2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E <2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E <2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E <2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E <2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E <2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E <2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E <2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E <2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E <2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E <2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E <2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E <2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E <2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E <2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E <2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E <2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E <2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E <2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E <2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E <2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E <2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E <2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E <2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E <2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E <2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E <2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E <2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E <2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E <2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E <2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E <2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E <2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W <2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W <2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W <2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W <2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 <2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 <2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 <2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 <2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 <2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 <2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 <2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 <2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 <2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 <2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 <2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 <2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 <2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 <2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 <2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 <2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 <2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 <2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 <2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 <2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 <2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 <2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 <2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 <2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 <2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 <2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 <2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 <2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 <2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 <2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 <2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 <2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 <2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 <2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 <2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 <2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 <2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 <2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 <2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 <2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 <2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 <2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 <2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 <2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 <2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 <2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 <2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 <2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 <2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 <2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 <2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 <2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 <2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 (deprecated) <2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 <2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 <2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 <2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 <2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E <2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E <2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E <2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E <2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E <2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E <2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E <2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E <2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E <2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E <2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E <2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E <2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E <2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E <2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E <2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E <2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E <2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E <2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E <2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E <2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E <2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E <2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E <2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E <2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E <2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E <2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E <2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E <2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E <2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E <2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E <2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E <2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E <2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E <2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E <2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E <2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E <2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Tete / UTM zone 36S <2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs <> # Tete / UTM zone 37S <2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E <2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E <2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E <2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E <2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E <2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E <2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E <2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E <2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E <2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E <2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E <2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E <2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E <2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E <2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E <2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E <2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E <2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W <2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W <2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W <2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W <2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # NAD83(HARN) / Alabama East <2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Alabama West <2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona East <2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona Central <2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona West <2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arkansas North <2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arkansas South <2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 1 <2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 2 <2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 3 <2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 4 <2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 5 <2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / California zone 6 <2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado North <2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado Central <2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Colorado South <2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Connecticut <2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Delaware <2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida East <2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida West <2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Florida North <2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Georgia East <2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Georgia West <2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 1 <2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 2 <2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 3 <2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 4 <2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Hawaii zone 5 <2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho East <2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho Central <2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Idaho West <2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Illinois East <2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Illinois West <2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Indiana East <2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Indiana West <2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Iowa North <2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Iowa South <2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kansas North <2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kansas South <2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky North <2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky South <2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Louisiana North <2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Louisiana South <2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine East <2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine West <2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maryland <2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Mainland <2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Massachusetts Island <2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan North <2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan Central <2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Michigan South <2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota North <2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central <2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota South <2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Mississippi East <2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Mississippi West <2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri East <2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri Central <2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Missouri West <2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Montana <2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nebraska <2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada East <2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada Central <2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nevada West <2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Hampshire <2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Jersey <2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico East <2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico Central <2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New Mexico West <2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York East <2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York Central <2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York West <2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / New York Long Island <2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Dakota North <2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Dakota South <2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Ohio North <2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Ohio South <2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oklahoma North <2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oklahoma South <2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon North <2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon South <2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Rhode Island <2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Dakota North <2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Dakota South <2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Tennessee <2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas North <2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas North Central <2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas Central <2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas South Central <2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas South <2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah North <2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah Central <2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Utah South <2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Vermont <2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Virginia North <2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Virginia South <2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Washington North <2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Washington South <2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia North <2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia South <2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin North <2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Central <2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wisconsin South <2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming East <2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming East Central <2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming West Central <2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Wyoming West <2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Puerto Rico and Virgin Is. <2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Arizona East (ft) <2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Arizona Central (ft) <2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Arizona West (ft) <2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / California zone 1 (ftUS) <2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 2 (ftUS) <2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 3 (ftUS) <2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 4 (ftUS) <2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 5 (ftUS) <2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / California zone 6 (ftUS) <2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado North (ftUS) <2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado Central (ftUS) <2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Colorado South (ftUS) <2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Connecticut (ftUS) <2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Delaware (ftUS) <2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida East (ftUS) <2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida West (ftUS) <2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Florida North (ftUS) <2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia East (ftUS) <2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Georgia West (ftUS) <2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho East (ftUS) <2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho Central (ftUS) <2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Idaho West (ftUS) <2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) (deprecated) <2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) (deprecated) <2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky North (ftUS) <2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky South (ftUS) <2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Maryland (ftUS) <2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Mainland (ftUS) <2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Massachusetts Island (ftUS) <2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Michigan North (ft) <2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Michigan Central (ft) <2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Michigan South (ft) <2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Mississippi East (ftUS) <2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Mississippi West (ftUS) <2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Montana (ft) <2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / New Mexico East (ftUS) <2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico Central (ftUS) <2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Mexico West (ftUS) <2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York East (ftUS) <2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York Central (ftUS) <2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York West (ftUS) <2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New York Long Island (ftUS) <2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / North Dakota North (ft) <2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / North Dakota South (ft) <2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Oklahoma North (ftUS) <2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Oklahoma South (ftUS) <2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Oregon North (ft) <2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Oregon South (ft) <2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Tennessee (ftUS) <2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North (ftUS) <2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas North Central (ftUS) <2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas Central (ftUS) <2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South Central (ftUS) <2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Texas South (ftUS) <2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ft) <2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Utah Central (ft) <2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Utah South (ft) <2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Virginia North (ftUS) <2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Virginia South (ftUS) <2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Washington North (ftUS) <2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Washington South (ftUS) <2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin North (ftUS) <2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin Central (ftUS) <2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wisconsin South (ftUS) <2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Beduaram / TM 13 NE <2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs <> # QND95 / Qatar National Grid <2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs <> # Segara / UTM zone 50S <2933> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> # Segara (Jakarta) / NEIEZ (deprecated) <2934> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A1 <2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A2 <2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A3 <2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone A4 <2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K2 <2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K3 <2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone K4 <2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs <> # Porto Santo / UTM zone 28N <2942> +proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs <> # Selvagem Grande / UTM zone 28N <2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # NAD83(CSRS) / SCoPQ zone 2 <2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 3 <2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 4 <2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 5 <2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 6 <2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 7 <2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 8 <2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 9 <2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 10 <2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / New Brunswick Stereographic <2953> +proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) <2954> +proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 11N <2955> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 12N <2956> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 13N <2957> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 17N <2958> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 18N <2959> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 19N <2960> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 20N <2961> +proj=utm +zone=20 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 21N <2962> +proj=utm +zone=21 +ellps=GRS80 +units=m +no_defs <> # Lisbon 1890 (Lisbon) / Portugal Bonne # Unable to translate coordinate system EPSG:2963 into PROJ.4 format. # # NAD27 / Alaska Albers <2964> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Indiana East (ftUS) <2965> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Indiana West (ftUS) <2966> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana East (ftUS) <2967> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Indiana West (ftUS) <2968> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # Fort Marigot / UTM zone 20N <2969> +proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs <> # Guadeloupe 1948 / UTM zone 20N <2970> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # CSG67 / UTM zone 22N <2971> +proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 22N <2972> +proj=utm +zone=22 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> # Martinique 1938 / UTM zone 20N <2973> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # RGR92 / UTM zone 40S <2975> +proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Tahiti 52 / UTM zone 6S <2976> +proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs <> # Tahaa 54 / UTM zone 5S <2977> +proj=utm +zone=5 +south +ellps=intl +units=m +no_defs <> # IGN72 Nuku Hiva / UTM zone 7S <2978> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> # K0 1949 / UTM zone 42S (deprecated) <2979> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Combani 1950 / UTM zone 38S <2980> +proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs <> # IGN56 Lifou / UTM zone 58S <2981> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # IGN72 Grand Terre / UTM zone 58S (deprecated) <2982> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S (deprecated) <2983> +proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs <> # RGNC 1991 / Lambert New Caledonia (deprecated) <2984> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Petrels 1972 / Terre Adelie Polar Stereographic # Unable to translate coordinate system EPSG:2985 into PROJ.4 format. # # Perroud 1950 / Terre Adelie Polar Stereographic # Unable to translate coordinate system EPSG:2986 into PROJ.4 format. # # Saint Pierre et Miquelon 1950 / UTM zone 21N <2987> +proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs <> # MOP78 / UTM zone 1S <2988> +proj=utm +zone=1 +south +ellps=intl +units=m +no_defs <> # RRAF 1991 / UTM zone 20N <2989> +proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion (deprecated) <2990> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +units=m +no_defs <> # NAD83 / Oregon Lambert <2991> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon Lambert (ft) <2992> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=ft +no_defs <> # NAD83(HARN) / Oregon Lambert <2993> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Oregon Lambert (ft) <2994> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # IGN53 Mare / UTM zone 58S <2995> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST84 Ile des Pins / UTM zone 58S <2996> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # ST71 Belep / UTM zone 58S <2997> +proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs <> # NEA74 Noumea / UTM zone 58S <2998> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # Grand Comoros / UTM zone 38S <2999> +proj=utm +zone=38 +south +ellps=intl +units=m +no_defs <> # Segara / NEIEZ <3000> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> # Batavia / NEIEZ <3001> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +units=m +no_defs <> # Makassar / NEIEZ <3002> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs <> # Monte Mario / Italy zone 1 <3003> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Monte Mario / Italy zone 2 <3004> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +units=m +no_defs <> # NAD83 / BC Albers <3005> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # SWEREF99 TM <3006> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 12 00 <3007> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 13 30 <3008> +proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 15 00 <3009> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 16 30 <3010> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 18 00 <3011> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 14 15 <3012> +proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 15 45 <3013> +proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 17 15 <3014> +proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 18 45 <3015> +proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 20 15 <3016> +proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 21 45 <3017> +proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 23 15 <3018> +proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RT90 7.5 gon V <3019> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 5 gon V <3020> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 2.5 gon V <3021> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 0 gon <3022> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 2.5 gon O <3023> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT90 5 gon O <3024> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 7.5 gon V <3025> +proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 5 gon V <3026> +proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 2.5 gon V <3027> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 0 gon <3028> +proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 2.5 gon O <3029> +proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RT38 5 gon O <3030> +proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # WGS 84 / Antarctic Polar Stereographic <3031> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Polar Stereographic <3032> +proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Australian Antarctic Lambert <3033> +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # ETRS89 / ETRS-LCC <3034> +proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-LAEA <3035> +proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs <> # Moznet / UTM zone 36S <3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> # Moznet / UTM zone 37S <3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs <> # ETRS89 / ETRS-TM26 <3038> +proj=utm +zone=26 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM27 <3039> +proj=utm +zone=27 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM28 <3040> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM29 <3041> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM30 <3042> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM31 <3043> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM32 <3044> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM33 <3045> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM34 <3046> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM35 <3047> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM36 <3048> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM37 <3049> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM38 <3050> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-TM39 <3051> +proj=utm +zone=39 +ellps=GRS80 +units=m +no_defs <> # Reykjavik 1900 / Lambert 1900 # Unable to translate coordinate system EPSG:3052 into PROJ.4 format. # # Hjorsey 1955 / Lambert 1955 # Unable to translate coordinate system EPSG:3053 into PROJ.4 format. # # Hjorsey 1955 / UTM zone 26N <3054> +proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # Hjorsey 1955 / UTM zone 27N <3055> +proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # Hjorsey 1955 / UTM zone 28N <3056> +proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs <> # ISN93 / Lambert 1993 <3057> +proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Helle 1954 / Jan Mayen Grid <3058> +proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,32.3934,-153.257,-96.2266,16.805 +units=m +no_defs <> # LKS92 / Latvia TM <3059> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN72 Grande Terre / UTM zone 58S <3060> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs <> # Porto Santo 1995 / UTM zone 28N <3061> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # Azores Oriental 1995 / UTM zone 26N <3062> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> # Azores Central 1995 / UTM zone 26N <3063> +proj=utm +zone=26 +ellps=intl +units=m +no_defs <> # IGM95 / UTM zone 32N <3064> +proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGM95 / UTM zone 33N <3065> +proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Jordan TM <3066> +proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +units=m +no_defs <> # ETRS89 / ETRS-TM35FIN <3067> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # DHDN / Soldner Berlin <3068> +proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +datum=potsdam +units=m +no_defs <> # NAD27 / Wisconsin Transverse Mercator <3069> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Wisconsin Transverse Mercator <3070> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Wisconsin Transverse Mercator <3071> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Maine CS2000 East <3072> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine CS2000 Central (deprecated) <3073> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine CS2000 West <3074> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 East <3075> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central (deprecated) <3076> +proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 West <3077> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Michigan Oblique Mercator <3078> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Michigan Oblique Mercator <3079> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +units=m +no_defs <> # NAD27 / Shackleford <3080> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +ellps=clrk66 +datum=NAD27 +units=ft +no_defs <> # NAD83 / Texas State Mapping System <3081> +proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Centric Lambert Conformal <3082> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Centric Albers Equal Area <3083> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Lambert Conformal <3084> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Texas Centric Albers Equal Area <3085> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Florida GDL Albers <3086> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Florida GDL Albers <3087> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Kentucky Single Zone <3088> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky Single Zone (ftUS) <3089> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Kentucky Single Zone <3090> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Kentucky Single Zone (ftUS) <3091> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +units=us-ft +no_defs <> # Tokyo / UTM zone 51N <3092> +proj=utm +zone=51 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 52N <3093> +proj=utm +zone=52 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 53N <3094> +proj=utm +zone=53 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 54N <3095> +proj=utm +zone=54 +ellps=bessel +units=m +no_defs <> # Tokyo / UTM zone 55N <3096> +proj=utm +zone=55 +ellps=bessel +units=m +no_defs <> # JGD2000 / UTM zone 51N <3097> +proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 52N <3098> +proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 53N <3099> +proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 54N <3100> +proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JGD2000 / UTM zone 55N <3101> +proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # American Samoa 1962 / American Samoa Lambert <3102> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs <> # Mauritania 1999 / UTM zone 28N (deprecated) <3103> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> # Mauritania 1999 / UTM zone 29N (deprecated) <3104> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # Mauritania 1999 / UTM zone 30N (deprecated) <3105> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # Gulshan 303 / Bangladesh Transverse Mercator <3106> +proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # GDA94 / SA Lambert <3107> +proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ETRS89 / Guernsey Grid <3108> +proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Jersey Transverse Mercator <3109> +proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +units=m +no_defs <> # AGD66 / Vicgrid66 <3110> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +units=m +no_defs <> # GDA94 / Vicgrid94 <3111> +proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / Geoscience Australia Lambert <3112> +proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / BCSG02 <3113> +proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia Far West zone <3114> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia West zone <3115> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia Bogota zone <3116> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia East Central zone <3117> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # MAGNA-SIRGAS / Colombia East zone <3118> +proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Douala 1948 / AEF west <3119> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942(58) / Poland zone I <3120> +proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +units=m +no_defs <> # PRS92 / Philippines zone 1 <3121> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 2 <3122> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 3 <3123> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 4 <3124> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # PRS92 / Philippines zone 5 <3125> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs <> # ETRS89 / ETRS-GK19FIN <3126> +proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK20FIN <3127> +proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK21FIN <3128> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK22FIN <3129> +proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK23FIN <3130> +proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK24FIN <3131> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK25FIN <3132> +proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK26FIN <3133> +proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK27FIN <3134> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK28FIN <3135> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK29FIN <3136> +proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK30FIN <3137> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / ETRS-GK31FIN <3138> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Vanua Levu 1915 / Vanua Levu Grid # Unable to translate coordinate system EPSG:3139 into PROJ.4 format. # # Viti Levu 1912 / Viti Levu Grid <3140> +proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs <> # Fiji 1956 / UTM zone 60S <3141> +proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> # Fiji 1956 / UTM zone 1S <3142> +proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs <> # Fiji 1986 / Fiji Map Grid (deprecated) <3143> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> # FD54 / Faroe Lambert # Unable to translate coordinate system EPSG:3144 into PROJ.4 format. # # ETRS89 / Faroe Lambert # Unable to translate coordinate system EPSG:3145 into PROJ.4 format. # # Pulkovo 1942 / 3-degree Gauss-Kruger zone 6 <3146> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 18E <3147> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Indian 1960 / UTM zone 48N <3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Indian 1960 / UTM zone 49N <3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 6 <3150> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 18E <3151> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # ST74 <3152> +proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(CSRS) / BC Albers <3153> +proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 7N <3154> +proj=utm +zone=7 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 8N <3155> +proj=utm +zone=8 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 9N <3156> +proj=utm +zone=9 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 10N <3157> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 14N <3158> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 15N <3159> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / UTM zone 16N <3160> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Ontario MNR Lambert <3161> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Ontario MNR Lambert <3162> +proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +units=m +no_defs <> # RGNC91-93 / Lambert New Caledonia <3163> +proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ST87 Ouvea / UTM zone 58S <3164> +proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert <3165> +proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +units=m +no_defs <> # NEA74 Noumea / Noumea Lambert 2 <3166> +proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +units=m +no_defs <> # Kertau (RSO) / RSO Malaya (ch) <3167> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs <> # Kertau (RSO) / RSO Malaya (m) <3168> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs <> # RGNC91-93 / UTM zone 57S <3169> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / UTM zone 58S <3170> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGNC91-93 / UTM zone 59S <3171> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN53 Mare / UTM zone 59S <3172> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs <> # fk89 / Faroe Lambert FK89 # Unable to translate coordinate system EPSG:3173 into PROJ.4 format. # # NAD83 / Great Lakes Albers <3174> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Great Lakes and St Lawrence Albers <3175> +proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # Indian 1960 / TM 106 NE <3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # LGD2006 / Libya TM <3177> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 18N <3178> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 19N <3179> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 20N <3180> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 21N <3181> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 22N <3182> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 23N <3183> +proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 24N <3184> +proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 25N <3185> +proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 26N <3186> +proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 27N <3187> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 28N <3188> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GR96 / UTM zone 29N <3189> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 5 <3190> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 6 <3191> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 7 <3192> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 8 <3193> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 9 <3194> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 10 <3195> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 11 <3196> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 12 <3197> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / Libya TM zone 13 <3198> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 32N <3199> +proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # FD58 / Iraq zone <3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> # LGD2006 / UTM zone 33N <3201> +proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 34N <3202> +proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # LGD2006 / UTM zone 35N <3203> +proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs <> # WGS 84 / SCAR IMW SP19-20 <3204> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP21-22 <3205> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SP23-24 <3206> +proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ01-02 <3207> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ19-20 <3208> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ21-22 <3209> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ37-38 <3210> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ39-40 <3211> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ41-42 <3212> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ43-44 <3213> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ45-46 <3214> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ47-48 <3215> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ49-50 <3216> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ51-52 <3217> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ53-54 <3218> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ55-56 <3219> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SQ57-58 <3220> +proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR13-14 <3221> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR15-16 <3222> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR17-18 <3223> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR19-20 <3224> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR27-28 <3225> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR29-30 <3226> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR31-32 <3227> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR33-34 <3228> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR35-36 <3229> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR37-38 <3230> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR39-40 <3231> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR41-42 <3232> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR43-44 <3233> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR45-46 <3234> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR47-48 <3235> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR49-50 <3236> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR51-52 <3237> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR53-54 <3238> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR55-56 <3239> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR57-58 <3240> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SR59-60 <3241> +proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS04-06 <3242> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS07-09 <3243> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS10-12 <3244> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS13-15 <3245> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS16-18 <3246> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS19-21 <3247> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS25-27 <3248> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS28-30 <3249> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS31-33 <3250> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS34-36 <3251> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS37-39 <3252> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS40-42 <3253> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS43-45 <3254> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS46-48 <3255> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS49-51 <3256> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS52-54 <3257> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS55-57 <3258> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SS58-60 <3259> +proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST01-04 <3260> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST05-08 <3261> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST09-12 <3262> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST13-16 <3263> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST17-20 <3264> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST21-24 <3265> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST25-28 <3266> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST29-32 <3267> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST33-36 <3268> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST37-40 <3269> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST41-44 <3270> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST45-48 <3271> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST49-52 <3272> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST53-56 <3273> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW ST57-60 <3274> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU01-05 <3275> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU06-10 <3276> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU11-15 <3277> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU16-20 <3278> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU21-25 <3279> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU26-30 <3280> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU31-35 <3281> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU36-40 <3282> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU41-45 <3283> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU46-50 <3284> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU51-55 <3285> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SU56-60 <3286> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV01-10 <3287> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV11-20 <3288> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV21-30 <3289> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV31-40 <3290> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV41-50 <3291> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SV51-60 <3292> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / SCAR IMW SW01-60 <3293> +proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / USGS Transantarctic Mountains <3294> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Guam 1963 / Yap Islands # Unable to translate coordinate system EPSG:3295 into PROJ.4 format. # # RGPF / UTM zone 5S <3296> +proj=utm +zone=5 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 6S <3297> +proj=utm +zone=6 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 7S <3298> +proj=utm +zone=7 +south +ellps=GRS80 +units=m +no_defs <> # RGPF / UTM zone 8S <3299> +proj=utm +zone=8 +south +ellps=GRS80 +units=m +no_defs <> # Estonian Coordinate System of 1992 <3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs <> # Estonian Coordinate System of 1997 <3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGN63 Hiva Oa / UTM zone 7S <3302> +proj=utm +zone=7 +south +ellps=intl +units=m +no_defs <> # Fatu Iva 72 / UTM zone 7S <3303> +proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs <> # Tahiti 79 / UTM zone 6S <3304> +proj=utm +zone=6 +south +ellps=intl +units=m +no_defs <> # Moorea 87 / UTM zone 6S <3305> +proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs <> # Maupiti 83 / UTM zone 5S <3306> +proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs <> # Nakhl-e Ghanem / UTM zone 39N <3307> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs <> # GDA94 / NSW Lambert <3308> +proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / California Albers <3309> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / California Albers <3310> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / California Albers <3311> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +units=m +no_defs <> # CSG67 / UTM zone 21N <3312> +proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs <> # RGFG95 / UTM zone 21N <3313> +proj=utm +zone=21 +ellps=GRS80 +towgs84=2,2,-2,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Lambert (deprecated) <3314> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga TM (deprecated) <3315> +proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Kasai 1953 / Congo TM zone 22 <3316> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Kasai 1953 / Congo TM zone 24 <3317> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 12 <3318> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 14 <3319> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 16 <3320> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 18 <3321> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 20 <3322> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 22 <3323> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 24 <3324> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 26 <3325> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 28 <3326> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # IGC 1962 / Congo TM zone 30 <3327> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Pulkovo 1942(58) / GUGiK-80 <3328> +proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 5 <3329> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 6 <3330> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 7 <3331> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 8 <3332> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 3 <3333> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 4 <3334> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 5 <3335> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # IGN 1962 Kerguelen / UTM zone 42S <3336> +proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs <> # Le Pouce 1934 / Mauritius Grid <3337> +proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs <> # NAD83 / Alaska Albers <3338> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 12 <3339> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 14 <3340> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / Congo TM zone 16 <3341> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # IGCB 1955 / UTM zone 33S <3342> +proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 28N <3343> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 29N <3344> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Mauritania 1999 / UTM zone 30N <3345> +proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # LKS94 / Lithuania TM <3346> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Statistics Canada Lambert <3347> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Statistics Canada Lambert <3348> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / PDC Mercator (deprecated) <3349> +proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C0 <3350> +proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C1 <3351> +proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / CS63 zone C2 <3352> +proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +units=m +no_defs <> # Mhast (onshore) / UTM zone 32S <3353> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Mhast (offshore) / UTM zone 32S <3354> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Egypt Gulf of Suez S-650 TL / Red Belt <3355> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs <> # Grand Cayman 1959 / UTM zone 17N <3356> +proj=utm +zone=17 +ellps=clrk66 +towgs84=67.8,106.1,138.8,0,0,0,0 +units=m +no_defs <> # Little Cayman 1961 / UTM zone 17N <3357> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs <> # NAD83(HARN) / North Carolina <3358> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) (deprecated) <3359> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / South Carolina <3360> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / South Carolina (ft) <3361> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +units=ft +no_defs <> # NAD83(HARN) / Pennsylvania North <3362> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania North (ftUS) <3363> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Pennsylvania South <3364> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Pennsylvania South (ftUS) <3365> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Hong Kong 1963 Grid System (deprecated) <3366> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 28N <3367> +proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 29N <3368> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # IGN Astro 1960 / UTM zone 30N <3369> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # NAD27 / UTM zone 59N <3370> +proj=utm +zone=59 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 60N <3371> +proj=utm +zone=60 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / UTM zone 59N <3372> +proj=utm +zone=59 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 60N <3373> +proj=utm +zone=60 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # FD54 / UTM zone 29N <3374> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # GDM2000 / Peninsula RSO <3375> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / East Malaysia BRSO <3376> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Johor Grid <3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Sembilan and Melaka Grid <3378> +proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / PahangGrid <3379> +proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Selangor Grid <3380> +proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Terengganu Grid <3381> +proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Pinang Grid <3382> +proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Kedah and Perlis Grid <3383> +proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Perak Grid <3384> +proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs <> # GDM2000 / Kelantan Grid <3385> +proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs <> # KKJ / Finland zone 0 <3386> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # KKJ / Finland zone 5 <3387> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Pulkovo 1942 / Caspian Sea Mercator <3388> +proj=merc +lon_0=51 +k=1 +x_0=0 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 <3389> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 <3390> +proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Karbala 1979 / UTM zone 37N <3391> +proj=utm +zone=37 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 38N <3392> +proj=utm +zone=38 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Karbala 1979 / UTM zone 39N <3393> +proj=utm +zone=39 +ellps=clrk80 +towgs84=84.1,-320.1,218.7,0,0,0,0 +units=m +no_defs <> # Nahrwan 1934 / Iraq zone <3394> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs <> # WGS 84 / World Mercator <3395> +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 3 <3396> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # PD/83 / 3-degree Gauss-Kruger zone 4 <3397> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RD/83 / 3-degree Gauss-Kruger zone 4 <3398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # RD/83 / 3-degree Gauss-Kruger zone 5 <3399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # NAD83 / Alberta 10-TM (Forest) <3400> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 10-TM (Resource) <3401> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Forest) <3402> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 10-TM (Resource) <3403> +proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / North Carolina (ftUS) <3404> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # VN-2000 / UTM zone 48N <3405> +proj=utm +zone=48 +ellps=WGS84 +units=m +no_defs <> # VN-2000 / UTM zone 49N <3406> +proj=utm +zone=49 +ellps=WGS84 +units=m +no_defs <> # Hong Kong 1963 Grid System <3407> +proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs <> # unnamed <3408> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # unnamed <3409> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # NSIDC EASE-Grid Global <3410> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs <> # NSIDC Sea Ice Polar Stereographic North <3411> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> # NSIDC Sea Ice Polar Stereographic South <3412> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic North <3413> +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # SVY21 / Singapore TM <3414> +proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs <> # WGS 72BE / South China Sea Lambert <3415> +proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # ETRS89 / Austria Lambert <3416> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Iowa North (ft US) <3417> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Iowa South (ft US) <3418> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kansas North (ft US) <3419> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Kansas South (ft US) <3420> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada East (ft US) <3421> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada Central (ft US) <3422> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nevada West (ft US) <3423> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Jersey (ft US) <3424> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa North (ft US) <3425> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Iowa South (ft US) <3426> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas North (ft US) <3427> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Kansas South (ft US) <3428> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada East (ft US) <3429> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada Central (ft US) <3430> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nevada West (ft US) <3431> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Jersey (ft US) <3432> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83 / Arkansas North (ftUS) <3433> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Arkansas South (ftUS) <3434> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Illinois East (ftUS) <3435> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Illinois West (ftUS) <3436> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / New Hampshire (ftUS) <3437> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Rhode Island (ftUS) <3438> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # PSD93 / UTM zone 39N <3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # PSD93 / UTM zone 40N <3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # NAD83(HARN) / Arkansas North (ftUS) <3441> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Arkansas South (ftUS) <3442> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois East (ftUS) <3443> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Illinois West (ftUS) <3444> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / New Hampshire (ftUS) <3445> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Rhode Island (ftUS) <3446> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # ETRS89 / Belgian Lambert 2005 <3447> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +units=m +no_defs <> # JAD2001 / Jamaica Metric Grid <3448> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / UTM zone 17N <3449> +proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # JAD2001 / UTM zone 18N <3450> +proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Louisiana North (ftUS) <3451> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Louisiana South (ftUS) <3452> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Louisiana Offshore (ftUS) <3453> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Dakota North (ftUS) <3454> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / South Dakota South (ftUS) <3455> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana North (ftUS) <3456> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Louisiana South (ftUS) <3457> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota North (ftUS) <3458> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / South Dakota South (ftUS) <3459> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # Fiji 1986 / Fiji Map Grid <3460> +proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +units=m +no_defs <> # Dabola 1981 / UTM zone 28N <3461> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # Dabola 1981 / UTM zone 29N <3462> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine CS2000 Central <3463> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine CS2000 Central <3464> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama East <3465> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alabama West <3466> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska Albers <3467> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 1 <3468> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 2 <3469> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 3 <3470> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 4 <3471> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 5 <3472> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 6 <3473> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 7 <3474> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 8 <3475> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 9 <3476> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Alaska zone 10 <3477> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona Central <3478> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona Central (ft) <3479> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arizona East <3480> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona East (ft) <3481> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arizona West <3482> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arizona West (ft) <3483> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Arkansas North <3484> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arkansas North (ftUS) <3485> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Arkansas South <3486> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Arkansas South (ftUS) <3487> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California Albers <3488> +proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 1 <3489> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 1 (ftUS) <3490> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 2 <3491> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 2 (ftUS) <3492> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 3 <3493> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 3 (ftUS) <3494> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 4 <3495> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 4 (ftUS) <3496> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 5 <3497> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 5 (ftUS) <3498> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / California zone 6 <3499> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / California zone 6 (ftUS) <3500> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado Central <3501> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado Central (ftUS) <3502> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado North <3503> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado North (ftUS) <3504> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Colorado South <3505> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Colorado South (ftUS) <3506> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Connecticut <3507> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Connecticut (ftUS) <3508> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Delaware <3509> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Delaware (ftUS) <3510> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida East <3511> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida East (ftUS) <3512> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida GDL Albers <3513> +proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida North <3514> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida North (ftUS) <3515> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Florida West <3516> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Florida West (ftUS) <3517> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Georgia East <3518> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Georgia East (ftUS) <3519> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Georgia West <3520> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Georgia West (ftUS) <3521> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho Central <3522> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho Central (ftUS) <3523> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho East <3524> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho East (ftUS) <3525> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Idaho West <3526> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Idaho West (ftUS) <3527> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Illinois East <3528> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Illinois East (ftUS) <3529> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Illinois West <3530> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Illinois West (ftUS) <3531> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Indiana East <3532> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Indiana East (ftUS) <3533> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Indiana West <3534> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Indiana West (ftUS) <3535> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Iowa North <3536> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Iowa North (ft US) <3537> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Iowa South <3538> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Iowa South (ft US) <3539> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kansas North <3540> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kansas North (ft US) <3541> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kansas South <3542> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kansas South (ft US) <3543> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky North <3544> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky North (ftUS) <3545> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky Single Zone <3546> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky Single Zone (ftUS) <3547> +proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Kentucky South <3548> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Kentucky South (ftUS) <3549> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Louisiana North <3550> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Louisiana North (ftUS) <3551> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Louisiana South <3552> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Louisiana South (ftUS) <3553> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine CS2000 Central <3554> +proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine CS2000 East <3555> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine CS2000 West <3556> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine East <3557> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine West <3558> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maryland <3559> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Utah North (ftUS) <3560> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 1 <3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 2 <3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 3 <3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 4 <3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # Old Hawaiian / Hawaii zone 5 <3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +units=us-ft +no_defs <> # NAD83 / Utah Central (ftUS) <3566> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Utah South (ftUS) <3567> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Utah North (ftUS) <3568> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah Central (ftUS) <3569> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Utah South (ftUS) <3570> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +units=us-ft +no_defs <> # WGS 84 / North Pole LAEA Bering Sea <3571> +proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Alaska <3572> +proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Canada <3573> +proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Atlantic <3574> +proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Europe <3575> +proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / North Pole LAEA Russia <3576> +proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # GDA94 / Australian Albers <3577> +proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Yukon Albers <3578> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Yukon Albers <3579> +proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m +no_defs <> # NAD83 / NWT Lambert <3580> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / NWT Lambert <3581> +proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Maryland (ftUS) <3582> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Massachusetts Island <3583> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Massachusetts Island (ftUS) <3584> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Massachusetts Mainland <3585> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Massachusetts Mainland (ftUS) <3586> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Michigan Central <3587> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan Central (ft) <3588> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Michigan North <3589> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan North (ft) <3590> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Michigan Oblique Mercator <3591> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South <3592> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Michigan South (ft) <3593> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Minnesota Central <3594> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota North <3595> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota South <3596> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi East <3597> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi East (ftUS) <3598> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Mississippi West <3599> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi West (ftUS) <3600> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Missouri Central <3601> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Missouri East <3602> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Missouri West <3603> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Montana <3604> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Montana (ft) <3605> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Nebraska <3606> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada Central <3607> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada Central (ft US) <3608> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nevada East <3609> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada East (ft US) <3610> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nevada West <3611> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nevada West (ft US) <3612> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Hampshire <3613> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Hampshire (ftUS) <3614> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Jersey <3615> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Jersey (ft US) <3616> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico Central <3617> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico Central (ftUS) <3618> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico East <3619> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico East (ftUS) <3620> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New Mexico West <3621> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New Mexico West (ftUS) <3622> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York Central <3623> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York Central (ftUS) <3624> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York East <3625> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York East (ftUS) <3626> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York Long Island <3627> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York Long Island (ftUS) <3628> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / New York West <3629> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / New York West (ftUS) <3630> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / North Carolina <3631> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Carolina (ftUS) <3632> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / North Dakota North <3633> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Dakota North (ft) <3634> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / North Dakota South <3635> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / North Dakota South (ft) <3636> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Ohio North <3637> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Ohio South <3638> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma North <3639> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma North (ftUS) <3640> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Oklahoma South <3641> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oklahoma South (ftUS) <3642> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Oregon Lambert <3643> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon Lambert (ft) <3644> +proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Oregon North <3645> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon North (ft) <3646> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Oregon South <3647> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Oregon South (ft) <3648> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Pennsylvania North <3649> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Pennsylvania North (ftUS) <3650> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Pennsylvania South <3651> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Pennsylvania South (ftUS) <3652> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Rhode Island <3653> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Rhode Island (ftUS) <3654> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / South Carolina <3655> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Carolina (ft) <3656> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / South Dakota North <3657> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Dakota North (ftUS) <3658> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / South Dakota South <3659> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / South Dakota South (ftUS) <3660> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Tennessee <3661> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Tennessee (ftUS) <3662> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas Central <3663> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas Central (ftUS) <3664> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas Centric Albers Equal Area <3665> +proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas Centric Lambert Conformal <3666> +proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North <3667> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North (ftUS) <3668> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas North Central <3669> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas North Central (ftUS) <3670> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas South <3671> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas South (ftUS) <3672> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Texas South Central <3673> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Texas South Central (ftUS) <3674> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah Central <3675> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah Central (ft) <3676> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah Central (ftUS) <3677> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah North <3678> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah North (ft) <3679> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah North (ftUS) <3680> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Utah South <3681> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Utah South (ft) <3682> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs <> # NAD83(NSRS2007) / Utah South (ftUS) <3683> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Vermont <3684> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia North <3685> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia North (ftUS) <3686> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Virginia South <3687> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia South (ftUS) <3688> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Washington North <3689> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Washington North (ftUS) <3690> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Washington South <3691> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Washington South (ftUS) <3692> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia North <3693> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia South <3694> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin Central <3695> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin Central (ftUS) <3696> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin North <3697> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin North (ftUS) <3698> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin South <3699> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wisconsin South (ftUS) <3700> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wisconsin Transverse Mercator <3701> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming East <3702> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming East Central <3703> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming West Central <3704> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Wyoming West <3705> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 59N <3706> +proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 60N <3707> +proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 1N <3708> +proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 2N <3709> +proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 3N <3710> +proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 4N <3711> +proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 5N <3712> +proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 6N <3713> +proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 7N <3714> +proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 8N <3715> +proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 9N <3716> +proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 10N <3717> +proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 11N <3718> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 12N <3719> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 13N <3720> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 14N <3721> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 15N <3722> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 16N <3723> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 17N <3724> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 18N <3725> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / UTM zone 19N <3726> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Reunion 1947 / TM Reunion <3727> +proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +units=m +no_defs <> # NAD83(NSRS2007) / Ohio North (ftUS) <3728> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Ohio South (ftUS) <3729> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming East (ftUS) <3730> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming East Central (ftUS) <3731> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming West Central (ftUS) <3732> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Wyoming West (ftUS) <3733> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83 / Ohio North (ftUS) <3734> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Ohio South (ftUS) <3735> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming East (ftUS) <3736> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming East Central (ftUS) <3737> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming West Central (ftUS) <3738> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Wyoming West (ftUS) <3739> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / UTM zone 10N <3740> +proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 11N <3741> +proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 12N <3742> +proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 13N <3743> +proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 14N <3744> +proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 15N <3745> +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 16N <3746> +proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 17N <3747> +proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 18N <3748> +proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 19N <3749> +proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 4N <3750> +proj=utm +zone=4 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / UTM zone 5N <3751> +proj=utm +zone=5 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / Mercator 41 (deprecated) <3752> +proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # NAD83(HARN) / Ohio North (ftUS) <3753> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Ohio South (ftUS) <3754> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East (ftUS) <3755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming East Central (ftUS) <3756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West Central (ftUS) <3757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Wyoming West (ftUS) <3758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83 / Hawaii zone 3 (ftUS) <3759> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Hawaii zone 3 (ftUS) <3760> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(CSRS) / UTM zone 22N <3761> +proj=utm +zone=22 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / South Georgia Lambert <3762> +proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # ETRS89 / Portugal TM06 <3763> +proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NZGD2000 / Chatham Island Circuit 2000 <3764> +proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / Croatia TM <3765> +proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / Croatia LCC <3766> +proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / UTM zone 33N <3767> +proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # HTRS96 / UTM zone 34N <3768> +proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Bermuda 1957 / UTM zone 20N <3769> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs <> # BDA2000 / Bermuda 2000 National Grid <3770> +proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 111 W <3771> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 114 W <3772> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 117 W <3773> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W (deprecated) <3774> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 111 W <3775> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 114 W <3776> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 117 W <3777> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W (deprecated) <3778> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 111 W <3779> +proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 114 W <3780> +proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 117 W <3781> +proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W (deprecated) <3782> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Pitcairn 2006 / Pitcairn TM 2006 <3783> +proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pitcairn 1967 / UTM zone 9S <3784> +proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs <> # Popular Visualisation CRS / Mercator (deprecated) <3785> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> # World Equidistant Cylindrical (Sphere) (deprecated) <3786> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs <> # MGI / Slovene National Grid (deprecated) <3787> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # NZGD2000 / Auckland Islands TM 2000 <3788> +proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Campbell Island TM 2000 <3789> +proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Antipodes Islands TM 2000 <3790> +proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Raoul Island TM 2000 <3791> +proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / Chatham Islands TM 2000 <3793> +proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Slovenia 1996 / Slovene National Grid <3794> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Cuba Norte <3795> +proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Cuba Sur <3796> +proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTQ Lambert <3797> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / MTQ Lambert <3798> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / MTQ Lambert <3799> +proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD27 / Alberta 3TM ref merid 120 W <3800> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD83 / Alberta 3TM ref merid 120 W <3801> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Alberta 3TM ref merid 120 W <3802> +proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / Belgian Lambert 2008 <3812> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +units=m +no_defs <> # NAD83 / Mississippi TM <3814> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Mississippi TM <3815> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Mississippi TM <3816> +proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD97 / TM2 zone 119 <3825> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD97 / TM2 zone 121 <3826> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # TWD67 / TM2 zone 119 <3827> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> # TWD67 / TM2 zone 121 <3828> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs <> # Hu Tzu Shan / UTM zone 51N <3829> +proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs <> # WGS 84 / PDC Mercator <3832> +proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # Pulkovo 1942(58) / Gauss-Kruger zone 2 <3833> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 2 <3834> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 3 <3835> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 4 <3836> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 3 <3837> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 4 <3838> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 9 <3839> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / 3-degree Gauss-Kruger zone 10 <3840> +proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 6 <3841> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 7 <3842> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(83) / 3-degree Gauss-Kruger zone 8 <3843> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942(58) / Stereo70 <3844> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # SWEREF99 / RT90 7.5 gon V emulation <3845> +proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 5 gon V emulation <3846> +proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 2.5 gon V emulation <3847> +proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 0 gon emulation <3848> +proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 2.5 gon O emulation <3849> +proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SWEREF99 / RT90 5 gon O emulation <3850> +proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NZGD2000 / NZCS2000 <3851> +proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RSRGD2000 / DGLC2000 <3852> +proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # County ST74 <3854> +proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / Pseudo-Mercator <3857> +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs <> # IGRS / UTM zone 37N <3890> +proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 38N <3891> +proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # IGRS / UTM zone 39N <3892> +proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ED50 / Iraq National Grid <3893> +proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +units=m +no_defs <> # MGI 1901 / Balkans zone 5 <3907> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 6 <3908> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 7 <3909> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Balkans zone 8 <3910> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Slovenia Grid <3911> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # MGI 1901 / Slovene National Grid <3912> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +units=m +no_defs <> # Puerto Rico / UTM zone 20N <3920> +proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs <> # RGF93 / CC42 <3942> +proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC43 <3943> +proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC44 <3944> +proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC45 <3945> +proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC46 <3946> +proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC47 <3947> +proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC48 <3948> +proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC49 <3949> +proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGF93 / CC50 <3950> +proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Virginia Lambert <3968> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Virginia Lambert <3969> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Virginia Lambert <3970> +proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / NSIDC EASE-Grid North # Unable to translate coordinate system EPSG:3973 into PROJ.4 format. # # WGS 84 / NSIDC EASE-Grid South # Unable to translate coordinate system EPSG:3974 into PROJ.4 format. # # WGS 84 / NSIDC EASE-Grid Global <3975> +proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / NSIDC Sea Ice Polar Stereographic South <3976> +proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # NAD83 / Canada Atlas Lambert <3978> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(CSRS) / Canada Atlas Lambert <3979> +proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Katanga 1955 / Katanga Lambert <3985> +proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone A <3986> +proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone B <3987> +proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone C <3988> +proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Katanga 1955 / Katanga Gauss zone D <3989> +proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs <> # Puerto Rico State Plane CS of 1927 <3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> # Puerto Rico / St. Croix <3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs <> # Guam 1963 / Guam SPCS # Unable to translate coordinate system EPSG:3993 into PROJ.4 format. # # WGS 84 / Mercator 41 <3994> +proj=merc +lon_0=100 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Arctic Polar Stereographic <3995> +proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / IBCAO Polar Stereographic <3996> +proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Dubai Local TM <3997> +proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # MOLDREF99 / Moldova TM <4026> +proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +units=m +no_defs <> # WGS 84 / TMzn35N <4037> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TMzn36N <4038> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 12 <4048> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 14 <4049> +proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 16 <4050> +proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 18 <4051> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 20 <4056> +proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 22 <4057> +proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 24 <4058> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 26 <4059> +proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / Congo TM zone 28 <4060> +proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 33S <4061> +proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 34S <4062> +proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # RGRDC 2005 / UTM zone 35S <4063> +proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Chua / UTM zone 23S <4071> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> # REGCAN95 / UTM zone 27N <4082> +proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # REGCAN95 / UTM zone 28N <4083> +proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # WGS 84 / World Equidistant Cylindrical # Unable to translate coordinate system EPSG:4087 into PROJ.4 format. # # World Equidistant Cylindrical (Sphere) # Unable to translate coordinate system EPSG:4088 into PROJ.4 format. # # EPSG topocentric example A # Unable to translate coordinate system EPSG:5819 into PROJ.4 format. # # EPSG topocentric example B # Unable to translate coordinate system EPSG:5820 into PROJ.4 format. # # EPSG vertical perspective example # Unable to translate coordinate system EPSG:5821 into PROJ.4 format. # # Pulkovo 1995 / Gauss-Kruger zone 4 <20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 5 <20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 6 <20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 7 <20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 8 <20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 9 <20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 10 <20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 11 <20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 12 <20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 13 <20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 14 <20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 15 <20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 16 <20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 17 <20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 18 <20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 19 <20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 20 <20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 21 <20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 22 <20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 23 <20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 24 <20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 25 <20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 26 <20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 27 <20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 28 <20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 29 <20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 30 <20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 31 <20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 32 <20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 4N (deprecated) <20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 5N (deprecated) <20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 6N (deprecated) <20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 7N (deprecated) <20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 8N (deprecated) <20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 9N (deprecated) <20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 10N (deprecated) <20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 11N (deprecated) <20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 12N (deprecated) <20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 13N (deprecated) <20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 14N (deprecated) <20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 15N (deprecated) <20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 16N (deprecated) <20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 17N (deprecated) <20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 18N (deprecated) <20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 19N (deprecated) <20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 20N (deprecated) <20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 21N (deprecated) <20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 22N (deprecated) <20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 23N (deprecated) <20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 24N (deprecated) <20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 25N (deprecated) <20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 26N (deprecated) <20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 27N (deprecated) <20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 28N (deprecated) <20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 29N (deprecated) <20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 30N (deprecated) <20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 31N (deprecated) <20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Pulkovo 1995 / Gauss-Kruger 32N (deprecated) <20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.82,-131.21,-82.66,-0,-0,0.16,-0.12 +units=m +no_defs <> # Adindan / UTM zone 35N <20135> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 36N <20136> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 37N <20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Adindan / UTM zone 38N <20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> # AGD66 / AMG zone 48 <20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 49 <20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 50 <20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 51 <20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 52 <20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 53 <20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 54 <20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 55 <20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 56 <20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 57 <20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> # AGD66 / AMG zone 58 <20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 48 <20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 49 <20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 50 <20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 51 <20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 52 <20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 53 <20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 54 <20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 55 <20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 56 <20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 57 <20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs <> # AGD84 / AMG zone 58 <20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs <> # Ain el Abd / UTM zone 36N <20436> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 37N <20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 38N <20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 39N <20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # Ain el Abd / UTM zone 40N <20440> +proj=utm +zone=40 +ellps=intl +units=m +no_defs <> # Ain el Abd / Bahrain Grid <20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs <> # Afgooye / UTM zone 38N <20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Afgooye / UTM zone 39N <20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese National Grid <20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs <> # Lisbon (Lisbon) / Portuguese Grid <20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs <> # Aratu / UTM zone 22S <20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> # Aratu / UTM zone 23S <20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs <> # Aratu / UTM zone 24S <20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs <> # Arc 1950 / UTM zone 34S <20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1950 / UTM zone 35S <20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1950 / UTM zone 36S <20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Arc 1960 / UTM zone 35S <21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 36S <21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 37S <21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 35N <21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 36N <21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs <> # Arc 1960 / UTM zone 37N <21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Batavia (Jakarta) / NEIEZ (deprecated) <21100> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs <> # Batavia / UTM zone 48S <21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs <> # Batavia / UTM zone 49S <21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs <> # Batavia / UTM zone 50S <21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs <> # Barbados 1938 / British West Indies Grid <21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Barbados 1938 / Barbados National Grid <21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 13 <21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 14 <21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 15 <21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 16 <21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 17 <21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 18 <21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 19 <21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 20 <21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 21 <21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 22 <21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger zone 23 <21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 75E <21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 81E <21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 87E <21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 93E <21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 99E <21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 105E <21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 111E <21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 117E <21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 123E <21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 129E <21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger CM 135E <21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 13N (deprecated) <21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 14N (deprecated) <21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 15N (deprecated) <21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 16N (deprecated) <21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 17N (deprecated) <21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 18N (deprecated) <21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 19N (deprecated) <21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 20N (deprecated) <21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 21N (deprecated) <21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 22N (deprecated) <21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Beijing 1954 / Gauss-Kruger 23N (deprecated) <21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Belge 1950 (Brussels) / Belge Lambert 50 <21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs <> # Bern 1898 (Bern) / LV03C <21780> +proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs <> # CH1903 / LV03 <21781> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # CH1903 / LV03C-G <21782> +proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 17N (deprecated) <21817> +proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / UTM zone 18N <21818> +proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia West zone (deprecated) <21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia Bogota zone (deprecated) <21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East Central zone (deprecated) <21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East (deprecated) <21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia West zone <21896> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia Bogota zone <21897> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East Central zone <21898> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Bogota 1975 / Colombia East <21899> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs <> # Camacupa / UTM zone 32S <22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs <> # Camacupa / UTM zone 33S <22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs <> # Camacupa / TM 11.30 SE <22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # Camacupa / TM 12 SE <22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs <> # POSGAR 98 / Argentina 1 <22171> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 2 <22172> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 3 <22173> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 4 <22174> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 5 <22175> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 6 <22176> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 98 / Argentina 7 <22177> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # POSGAR 94 / Argentina 1 <22181> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 2 <22182> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 3 <22183> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 4 <22184> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 5 <22185> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 6 <22186> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # POSGAR 94 / Argentina 7 <22187> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Campo Inchauspe / Argentina 1 <22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 2 <22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 3 <22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 4 <22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 5 <22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 6 <22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Campo Inchauspe / Argentina 7 <22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Cape / UTM zone 34S <22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / UTM zone 35S <22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / UTM zone 36S <22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs <> # Cape / Lo15 # Unable to translate coordinate system EPSG:22275 into PROJ.4 format. # # Cape / Lo17 # Unable to translate coordinate system EPSG:22277 into PROJ.4 format. # # Cape / Lo19 # Unable to translate coordinate system EPSG:22279 into PROJ.4 format. # # Cape / Lo21 # Unable to translate coordinate system EPSG:22281 into PROJ.4 format. # # Cape / Lo23 # Unable to translate coordinate system EPSG:22283 into PROJ.4 format. # # Cape / Lo25 # Unable to translate coordinate system EPSG:22285 into PROJ.4 format. # # Cape / Lo27 # Unable to translate coordinate system EPSG:22287 into PROJ.4 format. # # Cape / Lo29 # Unable to translate coordinate system EPSG:22289 into PROJ.4 format. # # Cape / Lo31 # Unable to translate coordinate system EPSG:22291 into PROJ.4 format. # # Cape / Lo33 # Unable to translate coordinate system EPSG:22293 into PROJ.4 format. # # Carthage (Paris) / Tunisia Mining Grid # Unable to translate coordinate system EPSG:22300 into PROJ.4 format. # # Carthage / UTM zone 32N <22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Carthage / Nord Tunisie <22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Carthage / Sud Tunisie <22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +datum=carthage +units=m +no_defs <> # Corrego Alegre / UTM zone 21S <22521> +proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 22S <22522> +proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 23S <22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 24S <22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Corrego Alegre / UTM zone 25S <22525> +proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs <> # Deir ez Zor / Levant Zone <22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Deir ez Zor / Syria Lambert <22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Deir ez Zor / Levant Stereographic <22780> +proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Douala / UTM zone 32N (deprecated) <22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Egypt 1907 / Blue Belt <22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Red Belt <22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Purple Belt <22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs <> # Egypt 1907 / Extended Purple Belt <22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs <> # ED50 / UTM zone 28N <23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 29N <23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 30N <23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 31N <23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 32N <23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 33N <23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 34N <23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 35N <23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 36N <23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 37N <23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs <> # ED50 / UTM zone 38N <23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs <> # ED50 / TM 0 N <23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # ED50 / TM 5 NE <23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs <> # Fahud / UTM zone 39N <23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # Fahud / UTM zone 40N <23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # Garoua / UTM zone 33N (deprecated) <23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs <> # HD72 / EOV <23700> +proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 46.2 <23830> +proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 47.1 <23831> +proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 47.2 <23832> +proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 48.1 <23833> +proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 48.2 <23834> +proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 49.1 <23835> +proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 49.2 <23836> +proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 50.1 <23837> +proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 50.2 <23838> +proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 51.1 <23839> +proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 51.2 <23840> +proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 52.1 <23841> +proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 52.2 <23842> +proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 53.1 <23843> +proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 53.2 <23844> +proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / Indonesia TM-3 zone 54.1 <23845> +proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46N <23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 47N <23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 48N <23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 49N <23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 50N <23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 51N <23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 52N <23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 53N (deprecated) <23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # DGN95 / UTM zone 46N <23866> +proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 47N <23867> +proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 48N <23868> +proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 49N <23869> +proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 50N <23870> +proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 51N <23871> +proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 52N <23872> +proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 47S <23877> +proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 48S <23878> +proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 49S <23879> +proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 50S <23880> +proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 51S <23881> +proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 52S <23882> +proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 53S <23883> +proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # DGN95 / UTM zone 54S <23884> +proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # ID74 / UTM zone 46S (deprecated) <23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 47S <23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 48S <23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 49S <23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 50S <23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 51S <23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 52S <23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 53S <23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # ID74 / UTM zone 54S <23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs <> # Indian 1954 / UTM zone 46N <23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 47N <23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1954 / UTM zone 48N <23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs <> # Indian 1975 / UTM zone 47N <24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Indian 1975 / UTM zone 48N <24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Jamaica 1875 / Jamaica (Old Grid) <24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs <> # JAD69 / Jamaica National Grid <24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 45N <24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1937 / UTM zone 46N <24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 41N <24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 42N <24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / UTM zone 43N <24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 42N <24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 43N <24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 44N <24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 45N <24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 46N <24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / UTM zone 47N <24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1880 / India zone 0 <24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone I <24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone IIa <24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone III <24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1880 / India zone IV <24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1937 / India zone IIb <24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +units=m +no_defs <> # Kalianpur 1962 / India zone I <24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1962 / India zone IIa <24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +units=m +no_defs <> # Kalianpur 1975 / India zone I <24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone IIa <24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone IIb <24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1975 / India zone III <24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kalianpur 1880 / India zone IIb <24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs <> # Kalianpur 1975 / India zone IV <24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / Singapore Grid <24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / UTM zone 47N <24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau 1968 / UTM zone 48N <24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs <> # Kertau / R.S.O. Malaya (ch) (deprecated) <24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs <> # KOC Lambert <24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 18N <24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 19N <24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # La Canoa / UTM zone 20N <24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs <> # PSAD56 / UTM zone 17N <24817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 18N <24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 19N <24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 20N <24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 21N <24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 17S <24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 18S <24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 19S <24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 20S <24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 21S <24881> +proj=utm +zone=21 +south +ellps=intl +units=m +no_defs <> # PSAD56 / UTM zone 22S <24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs <> # PSAD56 / Peru west zone <24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs <> # PSAD56 / Peru central zone <24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs <> # PSAD56 / Peru east zone <24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs <> # Leigon / Ghana Metre Grid <25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs <> # Lome / UTM zone 31N <25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Luzon 1911 / Philippines zone I <25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone II <25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone III <25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone IV <25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Luzon 1911 / Philippines zone V <25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs <> # Makassar (Jakarta) / NEIEZ (deprecated) <25700> +proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs <> # ETRS89 / UTM zone 28N <25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 29N <25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 30N <25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 31N <25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 32N <25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 33N <25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 34N <25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 35N <25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 36N <25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 37N <25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / UTM zone 38N <25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs <> # ETRS89 / TM Baltic93 <25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # Malongo 1987 / UTM zone 32S <25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs <> # Merchich / Nord Maroc <26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sud Maroc <26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara (deprecated) <26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara Nord <26194> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Merchich / Sahara Sud <26195> +proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs <> # Massawa / UTM zone 37N <26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs <> # Minna / UTM zone 31N <26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> # Minna / UTM zone 32N <26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria West Belt <26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria Mid Belt <26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Minna / Nigeria East Belt <26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs <> # Mhast / UTM zone 32S (deprecated) <26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 1 (deprecated) <26591> +proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> # Monte Mario (Rome) / Italy zone 2 (deprecated) <26592> +proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs <> # M'poraloko / UTM zone 32N <26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs <> # M'poraloko / UTM zone 32S <26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> # NAD27 / UTM zone 1N <26701> +proj=utm +zone=1 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 2N <26702> +proj=utm +zone=2 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 3N <26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 4N <26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 5N <26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 6N <26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 7N <26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 8N <26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 9N <26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 10N <26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 11N <26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 12N <26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 13N <26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 14N <26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 15N <26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 16N <26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 17N <26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 18N <26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 19N <26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 20N <26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 21N <26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / UTM zone 22N <26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Alabama East <26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alabama West <26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 1 <26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 2 <26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 3 <26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 4 <26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 5 <26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 6 <26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 7 <26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 8 <26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 9 <26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Alaska zone 10 <26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone I <26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone II <26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone III <26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone IV <26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone V <26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VI <26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII (deprecated) <26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona East <26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona Central <26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arizona West <26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas North <26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Arkansas South <26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado North <26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado Central <26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Colorado South <26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Connecticut <26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Delaware <26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida East <26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida West <26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Florida North <26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia East <26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Georgia West <26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho East <26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho Central <26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Idaho West <26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois East <26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Illinois West <26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana East <26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Indiana West <26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa North <26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Iowa South <26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas North <26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kansas South <26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky North <26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Kentucky South <26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana North <26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Louisiana South <26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine East <26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maine West <26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Maryland <26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Mainland <26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Massachusetts Island <26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota North <26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota Central <26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Minnesota South <26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi East <26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Mississippi West <26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri East <26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri Central <26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Missouri West <26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / California zone VII <26799> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD Michigan / Michigan East <26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan Old Central <26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan West <26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan North <26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan Central <26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD Michigan / Michigan South <26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs <> # NAD83 / Maine East (ftUS) (deprecated) <26814> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine West (ftUS) (deprecated) <26815> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota North (ftUS) (deprecated) <26819> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota Central (ftUS) (deprecated) <26820> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota South (ftUS) (deprecated) <26821> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nebraska (ftUS) (deprecated) <26822> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia North (ftUS) (deprecated) <26823> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia South (ftUS) (deprecated) <26824> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83(HARN) / Maine East (ftUS) (deprecated) <26825> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Maine West (ftUS) (deprecated) <26826> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) (deprecated) <26830> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) (deprecated) <26831> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) (deprecated) <26832> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / Nebraska (ftUS) (deprecated) <26833> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) (deprecated) <26834> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) (deprecated) <26835> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) (deprecated) <26836> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) (deprecated) <26837> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota North (ftUS) (deprecated) <26841> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota Central (ftUS) (deprecated) <26842> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Minnesota South (ftUS) (deprecated) <26843> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / Nebraska (ftUS) (deprecated) <26844> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia North (ftUS) (deprecated) <26845> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83(NSRS2007) / West Virginia South (ftUS) (deprecated) <26846> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD83 / Maine East (ftUS) <26847> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Maine West (ftUS) <26848> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota North (ftUS) <26849> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota Central (ftUS) <26850> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Minnesota South (ftUS) <26851> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / Nebraska (ftUS) <26852> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / West Virginia North (ftUS) <26853> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / West Virginia South (ftUS) <26854> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83(HARN) / Maine East (ftUS) <26855> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Maine West (ftUS) <26856> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota North (ftUS) <26857> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota Central (ftUS) <26858> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Minnesota South (ftUS) <26859> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / Nebraska (ftUS) <26860> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia North (ftUS) <26861> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(HARN) / West Virginia South (ftUS) <26862> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine East (ftUS) <26863> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Maine West (ftUS) <26864> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota North (ftUS) <26865> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota Central (ftUS) <26866> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Minnesota South (ftUS) <26867> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / Nebraska (ftUS) <26868> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia North (ftUS) <26869> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(NSRS2007) / West Virginia South (ftUS) <26870> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs <> # NAD83(CSRS) / MTM zone 11 <26891> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 12 <26892> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 13 <26893> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 14 <26894> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 15 <26895> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 16 <26896> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 17 <26897> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 1 <26898> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83(CSRS) / MTM zone 2 <26899> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # NAD83 / UTM zone 1N <26901> +proj=utm +zone=1 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 2N <26902> +proj=utm +zone=2 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 3N <26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 4N <26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 5N <26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 6N <26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 7N <26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 8N <26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 9N <26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 10N <26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 11N <26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 12N <26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 13N <26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 14N <26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 15N <26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 16N <26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 17N <26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 18N <26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 19N <26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 20N <26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 21N <26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 22N <26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / UTM zone 23N <26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alabama East <26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alabama West <26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 1 <26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 2 <26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 3 <26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 4 <26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 5 <26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 6 <26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 7 <26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 8 <26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 9 <26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Alaska zone 10 <26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 1 <26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 2 <26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 3 <26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 4 <26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 5 <26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / California zone 6 <26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona East <26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona Central <26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arizona West <26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arkansas North <26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Arkansas South <26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado North <26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado Central <26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Colorado South <26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Connecticut <26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Delaware <26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida East <26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida West <26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Florida North <26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 1 <26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 2 <26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 3 <26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 4 <26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Hawaii zone 5 <26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Georgia East <26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Georgia West <26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho East <26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho Central <26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Idaho West <26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Illinois East <26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Illinois West <26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Indiana East <26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Indiana West <26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Iowa North <26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Iowa South <26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kansas North <26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kansas South <26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky North (deprecated) <26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Kentucky South <26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana North <26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana South <26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine East <26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maine West <26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Maryland <26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Massachusetts Mainland <26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Massachusetts Island <26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan North <26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan Central <26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Michigan South <26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota North <26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota Central <26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Minnesota South <26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Mississippi East <26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Mississippi West <26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri East <26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri Central <26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Missouri West <26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 37N <27037> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 38N <27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 39N <27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs <> # Nahrwan 1967 / UTM zone 40N <27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs <> # Naparima 1972 / UTM zone 20N <27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs <> # NZGD49 / New Zealand Map Grid <27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Eden Circuit <27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Bay of Plenty Circuit <27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Poverty Bay Circuit <27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Hawkes Bay Circuit <27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Taranaki Circuit <27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Tuhirangi Circuit <27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wanganui Circuit <27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wairarapa Circuit <27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Wellington Circuit <27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Collingwood Circuit <27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Nelson Circuit <27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Karamea Circuit <27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Buller Circuit <27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Grey Circuit <27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Amuri Circuit <27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Marlborough Circuit <27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Hokitika Circuit <27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Okarito Circuit <27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Jacksons Bay Circuit <27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Pleasant Circuit <27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Gawler Circuit <27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Timaru Circuit <27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Lindis Peak Circuit <27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount Nicholas Circuit <27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Mount York Circuit <27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Observation Point Circuit <27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / North Taieri Circuit <27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / Bluff Circuit <27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 58S <27258> +proj=utm +zone=58 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 59S <27259> +proj=utm +zone=59 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / UTM zone 60S <27260> +proj=utm +zone=60 +south +ellps=intl +datum=nzgd49 +units=m +no_defs <> # NZGD49 / North Island Grid <27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> # NZGD49 / South Island Grid <27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +datum=nzgd49 +to_meter=0.9143984146160287 +no_defs <> # NGO 1948 (Oslo) / NGO zone I <27391> +proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone II <27392> +proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone III <27393> +proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone IV <27394> +proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone V <27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VI <27396> +proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VII <27397> +proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # NGO 1948 (Oslo) / NGO zone VIII <27398> +proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs <> # Datum 73 / UTM zone 29N <27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid (deprecated) <27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> # Datum 73 / Modified Portuguese Grid <27493> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs <> # unnamed <27500> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=5.4 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.3372291666985 +units=m +no_defs <> # NTF (Paris) / Lambert Nord France <27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Centre France <27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Sud France <27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert Corse <27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone I <27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone II <27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone III <27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Lambert zone IV <27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France I (deprecated) <27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France II (deprecated) <27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France III (deprecated) <27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / France IV (deprecated) <27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Nord France (deprecated) <27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Centre France (deprecated) <27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Sud France (deprecated) <27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # NTF (Paris) / Corse (deprecated) <27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs <> # OSGB 1936 / British National Grid <27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs <> # Palestine 1923 / Palestine Grid <28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Palestine 1923 / Palestine Belt <28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Palestine 1923 / Israeli CS Grid <28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs <> # Pointe Noire / UTM zone 32S <28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs <> # GDA94 / MGA zone 48 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 49 <28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 50 <28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 51 <28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 52 <28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 53 <28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 54 <28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 55 <28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 56 <28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 57 <28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # GDA94 / MGA zone 58 <28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 2 (deprecated) <28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 3 (deprecated) <28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 4 <28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 5 <28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 6 <28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 7 <28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 8 <28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 9 <28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 10 <28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 11 <28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 12 <28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 13 <28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 14 <28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 15 <28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 16 <28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 17 <28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 18 <28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 19 <28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 20 <28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 21 <28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 22 <28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 23 <28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 24 <28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 25 <28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 26 <28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 27 <28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 28 <28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 29 <28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 30 <28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 31 <28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 32 <28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 2N (deprecated) <28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 3N (deprecated) <28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 4N (deprecated) <28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 5N (deprecated) <28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 6N (deprecated) <28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 7N (deprecated) <28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 8N (deprecated) <28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 9N (deprecated) <28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 10N (deprecated) <28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 11N (deprecated) <28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 12N (deprecated) <28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 13N (deprecated) <28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 14N (deprecated) <28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 15N (deprecated) <28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 16N (deprecated) <28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 17N (deprecated) <28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 18N (deprecated) <28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 19N (deprecated) <28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 20N (deprecated) <28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 21N (deprecated) <28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 22N (deprecated) <28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 23N (deprecated) <28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 24N (deprecated) <28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 25N (deprecated) <28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 26N (deprecated) <28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 27N (deprecated) <28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 28N (deprecated) <28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 29N (deprecated) <28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 30N (deprecated) <28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 31N (deprecated) <28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Pulkovo 1942 / Gauss-Kruger 32N (deprecated) <28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs <> # Qatar 1974 / Qatar National Grid <28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs <> # Amersfoort / RD Old <28991> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Amersfoort / RD New <28992> +proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs <> # SAD69 / Brazil Polyconic (deprecated) <29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs <> # SAD69 / Brazil Polyconic <29101> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 18N (deprecated) <29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 19N (deprecated) <29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 20N (deprecated) <29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 21N (deprecated) <29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 22N (deprecated) <29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 18N <29168> +proj=utm +zone=18 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 19N <29169> +proj=utm +zone=19 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 20N <29170> +proj=utm +zone=20 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 21N <29171> +proj=utm +zone=21 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 22N <29172> +proj=utm +zone=22 +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 17S (deprecated) <29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 18S (deprecated) <29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 19S (deprecated) <29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 20S (deprecated) <29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 21S (deprecated) <29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 22S (deprecated) <29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 23S (deprecated) <29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 24S (deprecated) <29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 25S (deprecated) <29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs <> # SAD69 / UTM zone 17S <29187> +proj=utm +zone=17 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 18S <29188> +proj=utm +zone=18 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 19S <29189> +proj=utm +zone=19 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 20S <29190> +proj=utm +zone=20 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 21S <29191> +proj=utm +zone=21 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 22S <29192> +proj=utm +zone=22 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 23S <29193> +proj=utm +zone=23 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 24S <29194> +proj=utm +zone=24 +south +ellps=aust_SA +units=m +no_defs <> # SAD69 / UTM zone 25S <29195> +proj=utm +zone=25 +south +ellps=aust_SA +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 20S <29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Sapper Hill 1943 / UTM zone 21S <29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs <> # Schwarzeck / UTM zone 33S <29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs <> # Schwarzeck / Lo22/11 # Unable to translate coordinate system EPSG:29371 into PROJ.4 format. # # Schwarzeck / Lo22/13 # Unable to translate coordinate system EPSG:29373 into PROJ.4 format. # # Schwarzeck / Lo22/15 # Unable to translate coordinate system EPSG:29375 into PROJ.4 format. # # Schwarzeck / Lo22/17 # Unable to translate coordinate system EPSG:29377 into PROJ.4 format. # # Schwarzeck / Lo22/19 # Unable to translate coordinate system EPSG:29379 into PROJ.4 format. # # Schwarzeck / Lo22/21 # Unable to translate coordinate system EPSG:29381 into PROJ.4 format. # # Schwarzeck / Lo22/23 # Unable to translate coordinate system EPSG:29383 into PROJ.4 format. # # Schwarzeck / Lo22/25 # Unable to translate coordinate system EPSG:29385 into PROJ.4 format. # # Sudan / UTM zone 35N (deprecated) <29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Sudan / UTM zone 36N (deprecated) <29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid (deprecated) <29700> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive (Paris) / Laborde Grid # Unable to translate coordinate system EPSG:29701 into PROJ.4 format. # # Tananarive (Paris) / Laborde Grid approximation <29702> +proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs <> # Tananarive / UTM zone 38S <29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Tananarive / UTM zone 39S <29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs <> # Timbalai 1948 / UTM zone 49N <29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs <> # Timbalai 1948 / UTM zone 50N <29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs <> # Timbalai 1948 / RSO Borneo (ch) <29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs <> # Timbalai 1948 / RSO Borneo (ft) <29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs <> # Timbalai 1948 / RSO Borneo (m) <29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs <> # TM65 / Irish National Grid (deprecated) <29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> # OSNI 1952 / Irish National Grid <29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs <> # TM65 / Irish Grid <29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +datum=ire65 +units=m +no_defs <> # TM75 / Irish Grid <29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS I <30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS II <30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS III <30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IV <30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS V <30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VI <30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VII <30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS VIII <30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS IX <30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS X <30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XI <30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XII <30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIII <30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIV <30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XV <30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVI <30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVII <30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XVIII <30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Tokyo / Japan Plane Rectangular CS XIX <30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs <> # Trinidad 1903 / Trinidad Grid <30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs <> # TC(1948) / UTM zone 39N <30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs <> # TC(1948) / UTM zone 40N <30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs <> # Voirol 1875 / Nord Algerie (ancienne) <30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> # Voirol 1875 / Sud Algerie (ancienne) <30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs <> # Voirol 1879 / Nord Algerie (ancienne) <30493> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Voirol 1879 / Sud Algerie (ancienne) <30494> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 29N <30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 30N <30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 31N <30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / UTM zone 32N <30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Nord <30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> # Nord Sahara 1959 / Voirol Unifie Sud <30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs <> # RT38 2.5 gon W (deprecated) <30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs <> # Yoff / UTM zone 28N <31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs <> # Zanderij / UTM zone 21N <31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / TM 54 NW <31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / Suriname Old TM <31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # Zanderij / Suriname TM <31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs <> # MGI (Ferro) / Austria GK West Zone <31251> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK Central Zone <31252> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria GK East Zone <31253> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / Austria GK West <31254> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK Central <31255> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK East <31256> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M28 <31257> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M31 <31258> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria GK M34 <31259> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 5 (deprecated) <31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 6 (deprecated) <31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 7 (deprecated) <31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / 3-degree Gauss zone 8 (deprecated) <31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 5 (deprecated) <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 6 (deprecated) <31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 7 (deprecated) <31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) <31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Balkans zone 8 (deprecated) <31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI (Ferro) / Austria West Zone <31281> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone <31282> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone <31283> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / Austria M28 <31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria M31 <31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria M34 <31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria Lambert <31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI (Ferro) / M28 <31288> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M31 <31289> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / M34 <31290> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria West Zone (deprecated) <31291> +proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria Central Zone (deprecated) <31292> +proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI (Ferro) / Austria East Zone (deprecated) <31293> +proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs <> # MGI / M28 (deprecated) <31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / M31 (deprecated) <31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / M34 (deprecated) <31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # MGI / Austria Lambert (deprecated) <31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +datum=hermannskogel +units=m +no_defs <> # Belge 1972 / Belge Lambert 72 <31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> # Belge 1972 / Belgian Lambert 72 <31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1 +units=m +no_defs <> # DHDN / 3-degree Gauss zone 1 (deprecated) <31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 2 (deprecated) <31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 3 (deprecated) <31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 4 (deprecated) <31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss zone 5 (deprecated) <31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 2 <31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 3 <31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 4 <31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # DHDN / 3-degree Gauss-Kruger zone 5 <31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +datum=potsdam +units=m +no_defs <> # Conakry 1905 / UTM zone 28N <31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Conakry 1905 / UTM zone 29N <31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs <> # Dealul Piscului 1930 / Stereo 33 <31600> +proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +units=m +no_defs <> # Dealul Piscului 1970/ Stereo 70 (deprecated) <31700> +proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs <> # NGN / UTM zone 38N <31838> +proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # NGN / UTM zone 39N <31839> +proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs <> # KUDAMS / KTM (deprecated) <31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # KUDAMS / KTM <31901> +proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 11N <31965> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 12N <31966> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 13N <31967> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 14N <31968> +proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 15N <31969> +proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 16N <31970> +proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 17N <31971> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 18N <31972> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 19N <31973> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 20N <31974> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 21N <31975> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 22N <31976> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 17S <31977> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 18S <31978> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 19S <31979> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 20S <31980> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 21S <31981> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 22S <31982> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 23S <31983> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 24S <31984> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 2000 / UTM zone 25S <31985> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 17N <31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 18N <31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 19N <31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 20N <31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 21N <31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 22N <31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 17S <31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 18S <31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 19S <31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 20S <31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 21S <31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 22S <31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 23S <31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 24S <31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # SIRGAS 1995 / UTM zone 25S <32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <> # NAD27 / Montana North <32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana Central <32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Montana South <32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska North <32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nebraska South <32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada East <32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada Central <32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Nevada West <32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Hampshire <32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Jersey <32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico East <32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico Central <32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New Mexico West <32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York East <32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York Central <32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York West <32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / New York Long Island <32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Carolina <32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota North <32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / North Dakota South <32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio North <32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Ohio South <32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma North <32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oklahoma South <32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon North <32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Oregon South <32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Pennsylvania North <32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Pennsylvania South <32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Rhode Island <32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina North <32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Carolina South <32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota North <32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / South Dakota South <32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Tennessee (deprecated) <32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North <32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas North Central <32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas Central <32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South Central <32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Texas South <32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah North <32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah Central <32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Utah South <32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Vermont <32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia North <32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Virginia South <32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington North <32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Washington South <32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia North <32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / West Virginia South <32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin North <32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin Central <32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wisconsin South <32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East <32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming East Central <32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West Central <32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Wyoming West <32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / Guatemala Norte <32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Guatemala Sur <32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / BLM 14N (ftUS) <32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (ftUS) <32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (ftUS) <32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (ftUS) <32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 14N (feet) (deprecated) <32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 15N (feet) (deprecated) <32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 16N (feet) (deprecated) <32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / BLM 17N (feet) (deprecated) <32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD27 / MTM zone 1 <32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 2 <32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 3 <32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 4 <32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 5 <32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / MTM zone 6 <32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Quebec Lambert <32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs <> # NAD27 / Louisiana Offshore <32099> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=us-ft +no_defs <> # NAD83 / Montana <32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nebraska <32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada East <32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada Central <32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Nevada West <32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Hampshire <32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Jersey <32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico East <32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico Central <32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New Mexico West <32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York East <32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York Central <32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York West <32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / New York Long Island <32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Carolina <32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Dakota North <32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / North Dakota South <32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Ohio North <32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Ohio South <32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oklahoma North <32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oklahoma South <32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon North <32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Oregon South <32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Pennsylvania North <32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Pennsylvania South <32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Rhode Island <32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Carolina <32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Dakota North <32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / South Dakota South <32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Tennessee <32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas North <32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas North Central <32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas Central <32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas South Central <32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Texas South <32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah North <32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah Central <32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Utah South <32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Vermont <32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Virginia North <32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Virginia South <32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Washington North <32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Washington South <32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia North <32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / West Virginia South <32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin North <32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin Central <32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wisconsin South <32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming East <32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming East Central <32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming West Central <32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Wyoming West <32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Puerto Rico & Virgin Is. <32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / BLM 14N (ftUS) <32164> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 15N (ftUS) <32165> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 16N (ftUS) <32166> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / BLM 17N (ftUS) <32167> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=us-ft +no_defs <> # NAD83 / SCoPQ zone 2 <32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 1 <32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 2 <32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 3 <32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 4 <32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 5 <32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 6 <32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 7 <32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 8 <32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 9 <32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 10 <32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 11 <32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 12 <32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 13 <32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 14 <32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 15 <32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 16 <32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / MTM zone 17 <32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Quebec Lambert <32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # NAD83 / Louisiana Offshore <32199> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs <> # WGS 72 / UTM zone 1N <32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 2N <32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 3N <32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 4N <32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 5N <32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 6N <32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 7N <32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 8N <32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 9N <32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 10N <32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 11N <32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 12N <32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 13N <32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 14N <32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 15N <32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 16N <32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 17N <32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 18N <32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 19N <32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 20N <32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 21N <32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 22N <32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 23N <32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 24N <32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 25N <32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 26N <32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 27N <32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 28N <32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 29N <32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 30N <32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 31N <32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 32N <32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 33N <32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 34N <32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 35N <32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 36N <32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 37N <32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 38N <32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 39N <32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 40N <32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 41N <32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 42N <32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 43N <32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 44N <32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 45N <32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 46N <32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 47N <32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 48N <32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 49N <32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 50N <32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 51N <32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 52N <32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 53N <32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 54N <32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 55N <32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 56N <32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 57N <32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 58N <32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 59N <32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 60N <32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 1S <32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 2S <32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 3S <32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 4S <32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 5S <32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 6S <32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 7S <32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 8S <32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 9S <32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 10S <32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 11S <32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 12S <32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 13S <32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 14S <32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 15S <32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 16S <32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 17S <32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 18S <32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 19S <32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 20S <32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 21S <32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 22S <32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 23S <32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 24S <32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 25S <32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 26S <32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 27S <32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 28S <32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 29S <32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 30S <32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 31S <32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 32S <32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 33S <32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 34S <32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 35S <32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 36S <32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 37S <32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 38S <32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 39S <32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 40S <32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 41S <32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 42S <32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 43S <32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 44S <32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 45S <32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 46S <32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 47S <32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 48S <32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 49S <32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 50S <32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 51S <32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 52S <32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 53S <32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 54S <32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 55S <32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 56S <32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 57S <32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 58S <32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 59S <32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72 / UTM zone 60S <32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs <> # WGS 72BE / UTM zone 1N <32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 2N <32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 3N <32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 4N <32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 5N <32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 6N <32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 7N <32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 8N <32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 9N <32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 10N <32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 11N <32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 12N <32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 13N <32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 14N <32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 15N <32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 16N <32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 17N <32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 18N <32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 19N <32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 20N <32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 21N <32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 22N <32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 23N <32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 24N <32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 25N <32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 26N <32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 27N <32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 28N <32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 29N <32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 30N <32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 31N <32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 32N <32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 33N <32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 34N <32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 35N <32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 36N <32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 37N <32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 38N <32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 39N <32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 40N <32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 41N <32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 42N <32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 43N <32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 44N <32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 45N <32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 46N <32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 47N <32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 48N <32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 49N <32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 50N <32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 51N <32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 52N <32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 53N <32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 54N <32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 55N <32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 56N <32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 57N <32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 58N <32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 59N <32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 60N <32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 1S <32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 2S <32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 3S <32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 4S <32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 5S <32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 6S <32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 7S <32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 8S <32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 9S <32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 10S <32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 11S <32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 12S <32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 13S <32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 14S <32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 15S <32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 16S <32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 17S <32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 18S <32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 19S <32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 20S <32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 21S <32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 22S <32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 23S <32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 24S <32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 25S <32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 26S <32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 27S <32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 28S <32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 29S <32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 30S <32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 31S <32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 32S <32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 33S <32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 34S <32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 35S <32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 36S <32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 37S <32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 38S <32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 39S <32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 40S <32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 41S <32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 42S <32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 43S <32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 44S <32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 45S <32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 46S <32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 47S <32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 48S <32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 49S <32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 50S <32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 51S <32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 52S <32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 53S <32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 54S <32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 55S <32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 56S <32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 57S <32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 58S <32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 59S <32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 72BE / UTM zone 60S <32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs <> # WGS 84 / UTM grid system (northern hemisphere) # Unable to translate coordinate system EPSG:32600 into PROJ.4 format. # # WGS 84 / UTM zone 1N <32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2N <32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3N <32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4N <32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5N <32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6N <32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7N <32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8N <32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9N <32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10N <32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11N <32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12N <32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13N <32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14N <32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15N <32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16N <32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17N <32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18N <32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19N <32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20N <32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21N <32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22N <32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23N <32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24N <32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25N <32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26N <32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27N <32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28N <32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29N <32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30N <32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31N <32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32N <32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33N <32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34N <32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35N <32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36N <32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37N <32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38N <32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39N <32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40N <32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41N <32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42N <32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43N <32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44N <32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45N <32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46N <32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47N <32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48N <32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49N <32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50N <32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51N <32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52N <32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53N <32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54N <32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55N <32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56N <32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57N <32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58N <32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59N <32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60N <32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UPS North <32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / Plate Carree (deprecated) <32662> +proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / World Equidistant Cylindrical (deprecated) # Unable to translate coordinate system EPSG:32663 into PROJ.4 format. # # WGS 84 / BLM 14N (ftUS) <32664> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 15N (ftUS) <32665> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 16N (ftUS) <32666> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / BLM 17N (ftUS) <32667> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=us-ft +no_defs <> # WGS 84 / UTM grid system (southern hemisphere) # Unable to translate coordinate system EPSG:32700 into PROJ.4 format. # # WGS 84 / UTM zone 1S <32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 2S <32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 3S <32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 4S <32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 5S <32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 6S <32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 7S <32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 8S <32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 9S <32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 10S <32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 11S <32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 12S <32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 13S <32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 14S <32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 15S <32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 16S <32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 17S <32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 18S <32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 19S <32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 20S <32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 21S <32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 22S <32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 23S <32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 24S <32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 25S <32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 26S <32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 27S <32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 28S <32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 29S <32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 30S <32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 31S <32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 32S <32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 33S <32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 34S <32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 35S <32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 36S <32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 37S <32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 38S <32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 39S <32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 40S <32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 41S <32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 42S <32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 43S <32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 44S <32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 45S <32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 46S <32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 47S <32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 48S <32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 49S <32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 50S <32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 51S <32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 52S <32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 53S <32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 54S <32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 55S <32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 56S <32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 57S <32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 58S <32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 59S <32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UTM zone 60S <32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / UPS South <32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> # WGS 84 / TM 36 SE <32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs <> therion-5.4.1/extern/proj4/nad/esri000066400000000000000000015654741307545355600172260ustar00rootroot00000000000000# Anguilla 1957 / British West Indies Grid <2000> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Antigua 1943 / British West Indies Grid <2001> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs no_defs <> # Dominica 1945 / British West Indies Grid <2002> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs no_defs <> # Grenada 1953 / British West Indies Grid <2003> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs no_defs <> # Montserrat 58 / British West Indies Grid <2004> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs no_defs <> # St Kitts 1955 / British West Indies Grid <2005> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs no_defs <> # St Lucia 1955 / British West Indies Grid <2006> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs no_defs <> # St Vincent 45 / British West Indies Grid <2007> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 2 <2008> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 3 <2009> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 4 <2010> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 5 <2011> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 6 <2012> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 7 <2013> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 8 <2014> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 9 <2015> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / SCoPQ zone 10 <2016> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 8 <2017> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 9 <2018> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 10 <2019> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 11 <2020> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 12 <2021> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 13 <2022> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 14 <2023> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 15 <2024> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 16 <2025> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / MTM zone 17 <2026> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 15N <2027> +proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 16N <2028> +proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 17N <2029> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(76) / UTM zone 18N <2030> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 17N <2031> +proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 18N <2032> +proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 19N <2033> +proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 20N <2034> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD27(CGQ77) / UTM zone 21N <2035> +proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD83(CSRS98) / New Brunswick Stereo <2036> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 19N <2037> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 20N <2038> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Israel / Israeli TM Grid <2039> +proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.000007 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +units=m +no_defs no_defs <> # Locodjo 1965 / UTM zone 30N <2040> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / UTM zone 30N <2041> +proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Locodjo 1965 / UTM zone 29N <2042> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / UTM zone 29N <2043> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / Gauss-Kruger zone 18 <2044> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / Gauss-Kruger zone 19 <2045> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # Hartebeesthoek94 / Lo15 # Hartebeesthoek94 / Lo17 # Hartebeesthoek94 / Lo19 # Hartebeesthoek94 / Lo21 # Hartebeesthoek94 / Lo23 # Hartebeesthoek94 / Lo25 # Hartebeesthoek94 / Lo27 # Hartebeesthoek94 / Lo29 # Hartebeesthoek94 / Lo31 # Hartebeesthoek94 / Lo33 # CH1903+ / LV95 <2056> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs no_defs <> # Rassadiran / Nakhl e Taqi <2057> +proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 38N <2058> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 39N <2059> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 40N <2060> +proj=utm +zone=40 +ellps=intl +units=m +no_defs no_defs <> # ED50(ED77) / UTM zone 41N <2061> +proj=utm +zone=41 +ellps=intl +units=m +no_defs no_defs <> # Madrid 1870 (Madrid) / Spain <2062> +proj=lcc +lat_1=40 +lat_0=40 +lon_0=-3.687938888888889 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669562 +pm=madrid +units=m +no_defs no_defs <> # Dabola 1981 / UTM zone 28N <2063> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Dabola 1981 / UTM zone 29N <2064> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # S-JTSK (Ferro) / Krovak <2065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # Mount Dillon / Tobago Grid <2066> +proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66154375 +y_0=36209.915082 +a=6378293.63683822 +b=6356617.979337744 +to_meter=0.2011661949 +no_defs no_defs <> # Naparima 1955 / UTM zone 20N <2067> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 5 <2068> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 6 <2069> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 7 <2070> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 8 <2071> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 9 <2072> +proj=tmerc +lat_0=0 +lon_0=17 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 10 <2073> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 11 <2074> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 12 <2075> +proj=tmerc +lat_0=0 +lon_0=23 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / Libya zone 13 <2076> +proj=tmerc +lat_0=0 +lon_0=25 +k=0.999900 +x_0=200000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 32N <2077> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 33N <2078> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 34N <2079> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> # ELD79 / UTM zone 35N <2080> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> # Chos Malal 1914 / Argentina zone 2 <2081> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Pampa del Castillo / Argentina zone 2 <2082> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Hito XVIII 1963 / Argentina zone 2 <2083> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> # Hito XVIII 1963 / UTM zone 19S <2084> +proj=utm +zone=19 +south +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +units=m +no_defs no_defs <> # NAD27 / Cuba Norte <2085> +proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Cuba Sur <2086> +proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # ELD79 / TM 12 NE <2087> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Carthage / TM 11 NE <2088> +proj=tmerc +lat_0=0 +lon_0=11 +k=0.999600 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Yemen NGN96 / UTM zone 38N <2089> +proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Yemen NGN96 / UTM zone 39N <2090> +proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss Kruger zone 8 <2091> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss Kruger zone 9 <2092> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # Hanoi 1972 / GK 106 NE <2093> +proj=tmerc +lat_0=0 +lon_0=106 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs no_defs <> # WGS 72BE / TM 106 NE <2094> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # Bissau / UTM zone 28N <2095> +proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs no_defs <> # Korean 1985 / Korea East Belt <2096> +proj=tmerc +lat_0=38 +lon_0=129 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Korean 1985 / Korea Central Belt <2097> +proj=tmerc +lat_0=38 +lon_0=127 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Korean 1985 / Korea West Belt <2098> +proj=tmerc +lat_0=38 +lon_0=125 +k=1.000000 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs no_defs <> # Qatar 1948 / Qatar Grid <2099> +proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs no_defs <> # GGRS87 / Greek Grid <2100> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs no_defs <> # Lake / Maracaibo Grid M1 <2101> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo Grid <2102> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo Grid M3 <2103> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs no_defs <> # Lake / Maracaibo La Rosa Grid <2104> +proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs no_defs <> # NZGD2000 / Mount Eden Circuit 2000 <2105> +proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.999900 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Bay of Plenty Circuit 2000 <2106> +proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Poverty Bay Circuit 2000 <2107> +proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Hawkes Bay Circuit 2000 <2108> +proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Taranaki Circuit 2000 <2109> +proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Tuhirangi Circuit 2000 <2110> +proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wanganui Circuit 2000 <2111> +proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wairarapa Circuit 2000 <2112> +proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Wellington Circuit 2000 <2113> +proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Collingwood Circuit 2000 <2114> +proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Nelson Circuit 2000 <2115> +proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Karamea Circuit 2000 <2116> +proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Buller Circuit 2000 <2117> +proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Grey Circuit 2000 <2118> +proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Amuri Circuit 2000 <2119> +proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Marlborough Circuit 2000 <2120> +proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Hokitika Circuit 2000 <2121> +proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Okarito Circuit 2000 <2122> +proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Jacksons Bay Circuit 2000 <2123> +proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount Pleasant Circuit 2000 <2124> +proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Gawler Circuit 2000 <2125> +proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Timaru Circuit 2000 <2126> +proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Lindis Peak Circuit 2000 <2127> +proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount Nicholas Circuit 2000 <2128> +proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Mount York Circuit 2000 <2129> +proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Observation Point Circuit 2000 <2130> +proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / North Taieri Circuit 2000 <2131> +proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.999960 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / Bluff Circuit 2000 <2132> +proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1.000000 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 58S <2133> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 59S <2134> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NZGD2000 / UTM zone 60S <2135> +proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Accra / Ghana National Grid <2136> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs no_defs <> # Accra / TM 1 NW <2137> +proj=tmerc +lat_0=0 +lon_0=-1 +k=0.999600 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs no_defs <> # NAD27(CGQ77) / Quebec Lambert <2138> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # NAD83(CSRS98) / SCoPQ zone 2 <2139> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 3 <2140> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 4 <2141> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 5 <2142> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 6 <2143> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 7 <2144> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 8 <2145> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 9 <2146> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / MTM zone 10 <2147> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 21N <2148> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 18N <2149> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 17N <2150> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 13N <2151> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 12N <2152> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS98) / UTM zone 11N <2153> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # RGF93 / Lambert-93 <2154> +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # American Samoa 1962 / American Samoa Lambert <2155> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / UTM zone 59S <2156> +proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # IRENET95 / Irish Transverse Mercator <2157> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.999820 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # IRENET95 / UTM zone 29N <2158> +proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Sierra Leone 1924 / New Colony Grid <2159> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> # Sierra Leone 1924 / New War Office Grid <2160> +proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1.000000 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs no_defs <> # Sierra Leone 1968 / UTM zone 28N <2161> +proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> # Sierra Leone 1968 / UTM zone 29N <2162> +proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs no_defs <> # US National Atlas Equal Area <2163> +proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs no_defs <> # Locodjo 1965 / TM 5 NW <2164> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs no_defs <> # Abidjan 1987 / TM 5 NW <2165> +proj=tmerc +lat_0=0 +lon_0=-5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 3 <2166> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 4 <2167> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss Kruger zone 5 <2168> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Luxembourg 1930 / Gauss <2169> +proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1.000000 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +units=m +no_defs no_defs <> # MGI / Slovenia Grid <2170> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone I <2171> +proj=stere +lat_0=50.625 +lon_0=21.08333333333333 +k=0.999800 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone II <2172> +proj=stere +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.999800 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone III <2173> +proj=stere +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.999800 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone IV <2174> +proj=stere +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.999800 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # Pulkovo 1942(58) / Poland zone V <2175> +proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 5 <2176> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 6 <2177> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 7 <2178> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS2000 zone 8 <2179> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Poland CS92 <2180> +proj=tmerc +lat_0=0 +lon_0=19 +k=0.999300 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +units=m +no_defs no_defs <> # Azores Occidental 1939 / UTM zone 25N <2188> +proj=utm +zone=25 +ellps=intl +units=m +no_defs no_defs <> # Azores Central 1948 / UTM zone 26N <2189> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> # Azores Oriental 1940 / UTM zone 26N <2190> +proj=utm +zone=26 +ellps=intl +units=m +no_defs no_defs <> # Madeira 1936 / UTM zone 28N <2191> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # ED50 / France EuroLambert <2192> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +units=m +no_defs no_defs <> # NZGD2000 / New Zealand Transverse Mercator <2193> +proj=tmerc +lat_0=0 +lon_0=173 +k=0.999600 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # American Samoa 1962 / American Samoa Lambert <2194> +proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / UTM zone 2S <2195> +proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Jutland <2196> +proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.999950 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Zealand <2197> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999950 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / Kp2000 Bornholm <2198> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Albanian 1987 / Gauss Kruger zone 4 <2199> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # ATS77 / New Brunswick Stereographic (ATS77) <2200> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # REGVEN / UTM zone 18N <2201> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # REGVEN / UTM zone 19N <2202> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # REGVEN / UTM zone 20N <2203> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD27 / Tennessee <2204> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky North <2205> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 9 <2206> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 10 <2207> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 11 <2208> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 12 <2209> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 13 <2210> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 14 <2211> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / 3-degree Gauss-Kruger zone 15 <2212> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ETRS89 / TM 30 NE <2213> +proj=tmerc +lat_0=0 +lon_0=30 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Douala 1948 / AOF west <2214> +proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Manoca 1962 / UTM zone 32N <2215> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs no_defs <> # Qornoq 1927 / UTM zone 22N <2216> +proj=utm +zone=22 +ellps=intl +units=m +no_defs no_defs <> # Qornoq 1927 / UTM zone 23N <2217> +proj=utm +zone=23 +ellps=intl +units=m +no_defs no_defs <> # ATS77 / UTM zone 19N <2219> +proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # ATS77 / UTM zone 20N <2220> +proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83 / Arizona East (ft) <2222> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Arizona Central (ft) <2223> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Arizona West (ft) <2224> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / California zone 1 (ftUS) <2225> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 2 (ftUS) <2226> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 3 (ftUS) <2227> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 4 (ftUS) <2228> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 5 (ftUS) <2229> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / California zone 6 (ftUS) <2230> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado North (ftUS) <2231> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado Central (ftUS) <2232> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Colorado South (ftUS) <2233> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Connecticut (ftUS) <2234> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Delaware (ftUS) <2235> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida East (ftUS) <2236> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida West (ftUS) <2237> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Florida North (ftUS) <2238> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Georgia East (ftUS) <2239> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Georgia West (ftUS) <2240> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho East (ftUS) <2241> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho Central (ftUS) <2242> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Idaho West (ftUS) <2243> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Indiana East (ftUS) <2244> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Indiana West (ftUS) <2245> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky North (ftUS) <2246> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Kentucky South (ftUS) <2247> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Maryland (ftUS) <2248> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Massachusetts Mainland (ftUS) <2249> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Massachusetts Island (ftUS) <2250> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Michigan North (ft) <2251> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Michigan Central (ft) <2252> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Michigan South (ft) <2253> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Mississippi East (ftUS) <2254> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Mississippi West (ftUS) <2255> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Montana (ft) <2256> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / New Mexico East (ftUS) <2257> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New Mexico Central (ftUS) <2258> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New Mexico West (ftUS) <2259> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York East (ftUS) <2260> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York Central (ftUS) <2261> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York West (ftUS) <2262> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / New York Long Island (ftUS) <2263> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / North Carolina (ftUS) <2264> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / North Dakota North (ft) <2265> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / North Dakota South (ft) <2266> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Oklahoma North (ftUS) <2267> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Oklahoma South (ftUS) <2268> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Oregon North (ft) <2269> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Oregon South (ft) <2270> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Pennsylvania North (ftUS) <2271> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Pennsylvania South (ftUS) <2272> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / South Carolina (ft) <2273> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Tennessee (ftUS) <2274> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas North (ftUS) <2275> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas North Central (ftUS) <2276> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas Central (ftUS) <2277> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas South Central (ftUS) <2278> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Texas South (ftUS) <2279> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Utah North (ft) <2280> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Utah Central (ft) <2281> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Utah South (ft) <2282> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048 +no_defs no_defs <> # NAD83 / Virginia North (ftUS) <2283> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Virginia South (ftUS) <2284> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Washington North (ftUS) <2285> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Washington South (ftUS) <2286> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin North (ftUS) <2287> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin Central (ftUS) <2288> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / Wisconsin South (ftUS) <2289> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs no_defs <> # ATS77 / Prince Edward Isl. Stereographic (ATS77) <2290> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) <2291> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # NAD83(CSRS98) / Prince Edward Isl. Stereographic (NAD83) <2292> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # ATS77 / MTM Nova Scotia zone 4 <2294> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # ATS77 / MTM Nova Scotia zone 5 <2295> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs no_defs <> # Batavia / TM 109 SE <2308> +proj=tmerc +lat_0=0 +lon_0=109 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=bessel +units=m +no_defs no_defs <> # WGS 84 / TM 116 SE <2309> +proj=tmerc +lat_0=0 +lon_0=116 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 132 SE <2310> +proj=tmerc +lat_0=0 +lon_0=132 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 6 NE <2311> +proj=tmerc +lat_0=0 +lon_0=6 +k=0.999600 +x_0=500000 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # Garoua / UTM zone 33N <2312> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> # Kousseri / UTM zone 33N <2313> +proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs no_defs <> # Trinidad 1903 / Trinidad Grid (ftCla) <2314> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380699999 +y_0=65379.01334249999 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.304797265 +no_defs no_defs <> # Campo Inchauspe / UTM zone 19S <2315> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / UTM zone 20S <2316> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / ICN Regional <2317> +proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / Aramco Lambert <2318> +proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM27 <2319> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM30 <2320> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM33 <2321> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM36 <2322> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM39 <2323> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM42 <2324> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM45 <2325> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Hong Kong 1980 Grid System <2326> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 13 <2327> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 14 <2328> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 15 <2329> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 16 <2330> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 17 <2331> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 18 <2332> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 19 <2333> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 20 <2334> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 21 <2335> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 22 <2336> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger zone 23 <2337> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 75E <2338> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 81E <2339> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 87E <2340> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 93E <2341> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 99E <2342> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 105E <2343> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 111E <2344> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 117E <2345> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 123E <2346> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 129E <2347> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / Gauss-Kruger CM 135E <2348> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 25 <2349> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 26 <2350> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 27 <2351> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 28 <2352> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 29 <2353> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 30 <2354> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 31 <2355> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 32 <2356> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 33 <2357> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 34 <2358> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 35 <2359> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 36 <2360> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 37 <2361> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 38 <2362> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 39 <2363> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 40 <2364> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 41 <2365> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 42 <2366> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 43 <2367> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 44 <2368> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger zone 45 <2369> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 75E <2370> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 78E <2371> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 81E <2372> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 84E <2373> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 87E <2374> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 90E <2375> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 93E <2376> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 96E <2377> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 99E <2378> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 102E <2379> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 105E <2380> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 108E <2381> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 111E <2382> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 114E <2383> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 117E <2384> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 120E <2385> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 123E <2386> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 126E <2387> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 129E <2388> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 132E <2389> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # Xian 1980 / 3-degree Gauss-Kruger CM 135E <2390> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs no_defs <> # KKJ / Finland zone 1 <2391> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland zone 2 <2392> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland Uniform Coordinate System <2393> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # KKJ / Finland zone 4 <2394> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +units=m +no_defs no_defs <> # South Yemen / Gauss-Kruger zone 8 <2395> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # South Yemen / Gauss-Kruger zone 9 <2396> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 3 <2397> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 4 <2398> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # Pulkovo 1942(83) / Gauss-Kruger zone 5 <2399> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +units=m +no_defs no_defs <> # RT90 2.5 gon W <2400> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 25 <2401> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 26 <2402> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 27 <2403> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 28 <2404> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 29 <2405> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 30 <2406> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 31 <2407> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 32 <2408> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 33 <2409> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 34 <2410> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 35 <2411> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 36 <2412> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 37 <2413> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 38 <2414> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 39 <2415> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 40 <2416> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 41 <2417> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 42 <2418> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 43 <2419> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 44 <2420> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger zone 45 <2421> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 75E <2422> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 78E <2423> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 81E <2424> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 84E <2425> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 87E <2426> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 90E <2427> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 93E <2428> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 96E <2429> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 99E <2430> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 102E <2431> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 105E <2432> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 108E <2433> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 111E <2434> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 114E <2435> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 117E <2436> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 120E <2437> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 123E <2438> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 126E <2439> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 129E <2440> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 132E <2441> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / 3-degree Gauss-Kruger CM 135E <2442> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS I <2443> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS II <2444> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS III <2445> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS IV <2446> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS V <2447> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VI <2448> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VII <2449> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS VIII <2450> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS IX <2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS X <2452> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XI <2453> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XII <2454> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIII <2455> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIV <2456> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XV <2457> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVI <2458> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVII <2459> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XVIII <2460> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # JGD2000 / Japan Plane Rectangular CS XIX <2461> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Albanian 1987 / Gauss-Kruger zone 4 <2462> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 21E <2463> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 27E <2464> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 33E <2465> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 39E <2466> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 45E <2467> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 51E <2468> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 57E <2469> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 63E <2470> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 69E <2471> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 75E <2472> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 81E <2473> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 87E <2474> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 93E <2475> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 99E <2476> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 105E <2477> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 111E <2478> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 117E <2479> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 123E <2480> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 129E <2481> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 135E <2482> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 141E <2483> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 147E <2484> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 153E <2485> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 159E <2486> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 165E <2487> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171E <2488> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177E <2489> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 177W <2490> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger CM 171W <2491> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 9E <2492> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 15E <2493> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 21E <2494> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 27E <2495> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 33E <2496> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 39E <2497> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 45E <2498> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 51E <2499> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 57E <2500> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 63E <2501> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 69E <2502> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 75E <2503> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 81E <2504> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 87E <2505> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 93E <2506> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 99E <2507> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 105E <2508> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 111E <2509> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 117E <2510> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 123E <2511> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 129E <2512> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 135E <2513> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 141E <2514> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 147E <2515> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 153E <2516> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 159E <2517> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 165E <2518> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171E <2519> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177E <2520> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 177W <2521> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger CM 171W <2522> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 7 <2523> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 8 <2524> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 9 <2525> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 10 <2526> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 11 <2527> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 12 <2528> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 13 <2529> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 14 <2530> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 15 <2531> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 16 <2532> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 17 <2533> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 18 <2534> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 19 <2535> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 20 <2536> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 21 <2537> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 22 <2538> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 23 <2539> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 24 <2540> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 25 <2541> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 26 <2542> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 27 <2543> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 28 <2544> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 29 <2545> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 30 <2546> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 31 <2547> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 32 <2548> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 33 <2549> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Samboja / UTM zone 50S <2550> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 34 <2551> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 35 <2552> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 36 <2553> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 37 <2554> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 38 <2555> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 39 <2556> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 40 <2557> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 41 <2558> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 42 <2559> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 43 <2560> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 44 <2561> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 45 <2562> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 46 <2563> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 47 <2564> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 48 <2565> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 49 <2566> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 50 <2567> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 51 <2568> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 52 <2569> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 53 <2570> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 54 <2571> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 55 <2572> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 56 <2573> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 57 <2574> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 58 <2575> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 59 <2576> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 60 <2577> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 61 <2578> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 62 <2579> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 63 <2580> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger zone 64 <2581> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 21E <2582> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 24E <2583> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 27E <2584> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 30E <2585> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 33E <2586> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 36E <2587> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 39E <2588> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 42E <2589> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 45E <2590> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 48E <2591> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 51E <2592> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 54E <2593> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 57E <2594> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 60E <2595> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 63E <2596> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 66E <2597> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 69E <2598> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 72E <2599> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Lietuvos Koordinoei Sistema 1994 <2600> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999800 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 75E <2601> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 78E <2602> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 81E <2603> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 84E <2604> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 87E <2605> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 90E <2606> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 93E <2607> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 96E <2608> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 99E <2609> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 102E <2610> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 105E <2611> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 108E <2612> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 111E <2613> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 114E <2614> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 117E <2615> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 120E <2616> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 123E <2617> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 126E <2618> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 129E <2619> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 132E <2620> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 135E <2621> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 138E <2622> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 141E <2623> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 144E <2624> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 147E <2625> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 150E <2626> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 153E <2627> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 156E <2628> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 159E <2629> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 162E <2630> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 165E <2631> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168E <2632> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171E <2633> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174E <2634> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177E <2635> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 180E <2636> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 177W <2637> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 174W <2638> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 171W <2639> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / 3-degree Gauss-Kruger CM 168W <2640> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 7 <2641> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 8 <2642> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 9 <2643> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 10 <2644> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 11 <2645> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 12 <2646> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 13 <2647> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 14 <2648> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 15 <2649> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 16 <2650> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 17 <2651> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 18 <2652> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 19 <2653> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 20 <2654> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 21 <2655> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 22 <2656> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 23 <2657> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 24 <2658> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 25 <2659> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 26 <2660> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 27 <2661> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 28 <2662> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 29 <2663> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 30 <2664> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 31 <2665> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 32 <2666> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 33 <2667> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 34 <2668> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 35 <2669> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 36 <2670> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 37 <2671> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 38 <2672> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 39 <2673> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 40 <2674> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 41 <2675> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 42 <2676> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 43 <2677> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 44 <2678> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 45 <2679> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 46 <2680> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=46500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 47 <2681> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=47500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 48 <2682> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=48500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 49 <2683> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=49500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 50 <2684> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=50500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 51 <2685> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=51500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 52 <2686> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=52500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 53 <2687> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=53500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 54 <2688> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=54500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 55 <2689> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=55500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 56 <2690> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=56500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 57 <2691> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=57500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 58 <2692> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=58500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 59 <2693> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=59500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 60 <2694> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=60000000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 61 <2695> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=61500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 62 <2696> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=62500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 63 <2697> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=63500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger zone 64 <2698> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=64500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 21E <2699> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 24E <2700> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 27E <2701> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 30E <2702> +proj=tmerc +lat_0=0 +lon_0=30 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 33E <2703> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 36E <2704> +proj=tmerc +lat_0=0 +lon_0=36 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 39E <2705> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 42E <2706> +proj=tmerc +lat_0=0 +lon_0=42 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 45E <2707> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 48E <2708> +proj=tmerc +lat_0=0 +lon_0=48 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 51E <2709> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 54E <2710> +proj=tmerc +lat_0=0 +lon_0=54 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 57E <2711> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 60E <2712> +proj=tmerc +lat_0=0 +lon_0=60 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 63E <2713> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 66E <2714> +proj=tmerc +lat_0=0 +lon_0=66 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 69E <2715> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 72E <2716> +proj=tmerc +lat_0=0 +lon_0=72 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 75E <2717> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 78E <2718> +proj=tmerc +lat_0=0 +lon_0=78 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 81E <2719> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 84E <2720> +proj=tmerc +lat_0=0 +lon_0=84 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 87E <2721> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 90E <2722> +proj=tmerc +lat_0=0 +lon_0=90 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 93E <2723> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 96E <2724> +proj=tmerc +lat_0=0 +lon_0=96 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 99E <2725> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 102E <2726> +proj=tmerc +lat_0=0 +lon_0=102 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 105E <2727> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 108E <2728> +proj=tmerc +lat_0=0 +lon_0=108 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 111E <2729> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 114E <2730> +proj=tmerc +lat_0=0 +lon_0=114 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 117E <2731> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 120E <2732> +proj=tmerc +lat_0=0 +lon_0=120 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 123E <2733> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 126E <2734> +proj=tmerc +lat_0=0 +lon_0=126 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 129E <2735> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Tete / UTM zone 36S <2736> +proj=utm +zone=36 +south +ellps=clrk66 +units=m +no_defs no_defs <> # Tete / UTM zone 37S <2737> +proj=utm +zone=37 +south +ellps=clrk66 +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 132E <2738> +proj=tmerc +lat_0=0 +lon_0=132 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 135E <2739> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 138E <2740> +proj=tmerc +lat_0=0 +lon_0=138 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 141E <2741> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 144E <2742> +proj=tmerc +lat_0=0 +lon_0=144 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 147E <2743> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 150E <2744> +proj=tmerc +lat_0=0 +lon_0=150 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 153E <2745> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 156E <2746> +proj=tmerc +lat_0=0 +lon_0=156 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 159E <2747> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 162E <2748> +proj=tmerc +lat_0=0 +lon_0=162 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 165E <2749> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168E <2750> +proj=tmerc +lat_0=0 +lon_0=168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171E <2751> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174E <2752> +proj=tmerc +lat_0=0 +lon_0=174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177E <2753> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 180E <2754> +proj=tmerc +lat_0=0 +lon_0=180 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 177W <2755> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 174W <2756> +proj=tmerc +lat_0=0 +lon_0=-174 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 171W <2757> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / 3-degree Gauss-Kruger CM 168W <2758> +proj=tmerc +lat_0=0 +lon_0=-168 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # NAD83(HARN) / Alabama East <2759> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Alabama West <2760> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona East <2761> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona Central <2762> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona West <2763> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arkansas North <2764> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arkansas South <2765> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 1 <2766> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 2 <2767> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 3 <2768> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 4 <2769> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 5 <2770> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / California zone 6 <2771> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado North <2772> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado Central <2773> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Colorado South <2774> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Connecticut <2775> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Delaware <2776> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida East <2777> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida West <2778> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Florida North <2779> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Georgia East <2780> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Georgia West <2781> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 1 <2782> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 2 <2783> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 3 <2784> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 4 <2785> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Hawaii zone 5 <2786> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho East <2787> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho Central <2788> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Idaho West <2789> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Illinois East <2790> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Illinois West <2791> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Indiana East <2792> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Indiana West <2793> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Iowa North <2794> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Iowa South <2795> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kansas North <2796> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kansas South <2797> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kentucky North <2798> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Kentucky South <2799> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Louisiana North <2800> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Louisiana South <2801> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maine East <2802> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maine West <2803> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Maryland <2804> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Massachusetts Mainland <2805> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Massachusetts Island <2806> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan North <2807> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan Central <2808> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Michigan South <2809> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota North <2810> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota Central <2811> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Minnesota South <2812> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Mississippi East <2813> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Mississippi West <2814> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri East <2815> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri Central <2816> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Missouri West <2817> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Montana <2818> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nebraska <2819> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada East <2820> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada Central <2821> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Nevada West <2822> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Hampshire <2823> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Jersey <2824> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico East <2825> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico Central <2826> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New Mexico West <2827> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York East <2828> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York Central <2829> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York West <2830> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / New York Long Island <2831> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / North Dakota North <2832> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / North Dakota South <2833> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Ohio North <2834> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Ohio South <2835> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oklahoma North <2836> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oklahoma South <2837> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oregon North <2838> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Oregon South <2839> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Rhode Island <2840> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / South Dakota North <2841> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / South Dakota South <2842> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Tennessee <2843> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas North <2844> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas North Central <2845> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas Central <2846> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas South Central <2847> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Texas South <2848> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah North <2849> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah Central <2850> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Utah South <2851> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Vermont <2852> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Virginia North <2853> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Virginia South <2854> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Washington North <2855> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Washington South <2856> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / West Virginia North <2857> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / West Virginia South <2858> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin North <2859> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin Central <2860> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wisconsin South <2861> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming East <2862> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming East Central <2863> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming West Central <2864> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Wyoming West <2865> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Puerto Rico & Virgin Is. <2866> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(HARN) / Arizona East (ft) <2867> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Arizona Central (ft) <2868> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Arizona West (ft) <2869> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / California zone 1 (ftUS) <2870> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 2 (ftUS) <2871> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 3 (ftUS) <2872> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 4 (ftUS) <2873> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 5 (ftUS) <2874> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / California zone 6 (ftUS) <2875> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado North (ftUS) <2876> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado Central (ftUS) <2877> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Colorado South (ftUS) <2878> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Connecticut (ftUS) <2879> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Delaware (ftUS) <2880> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida East (ftUS) <2881> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida West (ftUS) <2882> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Florida North (ftUS) <2883> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Georgia East (ftUS) <2884> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Georgia West (ftUS) <2885> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho East (ftUS) <2886> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho Central (ftUS) <2887> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Idaho West (ftUS) <2888> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Indiana East (ftUS) <2889> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Indiana West (ftUS) <2890> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Kentucky North (ftUS) <2891> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Kentucky South (ftUS) <2892> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Maryland (ftUS) <2893> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Massachusetts Mainland (ftUS) <2894> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Massachusetts Island (ftUS) <2895> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Michigan North (ft) <2896> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Michigan Central (ft) <2897> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Michigan South (ft) <2898> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Mississippi East (ftUS) <2899> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Mississippi West (ftUS) <2900> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Montana (ft) <2901> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / New Mexico East (ftUS) <2902> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New Mexico Central (ftUS) <2903> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New Mexico West (ftUS) <2904> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York East (ftUS) <2905> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York Central (ftUS) <2906> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York West (ftUS) <2907> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / New York Long Island (ftUS) <2908> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / North Dakota North (ft) <2909> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / North Dakota South (ft) <2910> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Oklahoma North (ftUS) <2911> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Oklahoma South (ftUS) <2912> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Oregon North (ft) <2913> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Oregon South (ft) <2914> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Tennessee (ftUS) <2915> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas North (ftUS) <2916> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas North Central (ftUS) <2917> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas Central (ftUS) <2918> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas South Central (ftUS) <2919> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Texas South (ftUS) <2920> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Utah North (ft) <2921> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Utah Central (ft) <2922> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Utah South (ft) <2923> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048 +no_defs no_defs <> # NAD83(HARN) / Virginia North (ftUS) <2924> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Virginia South (ftUS) <2925> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Washington North (ftUS) <2926> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Washington South (ftUS) <2927> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin North (ftUS) <2928> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin Central (ftUS) <2929> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83(HARN) / Wisconsin South (ftUS) <2930> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +to_meter=0.3048006096012192 +no_defs no_defs <> # Beduaram / TM 13 NE <2931> +proj=tmerc +lat_0=0 +lon_0=13 +k=0.999600 +x_0=500000.0000000001 +y_0=0 +a=6378249.2 +b=6356515 +to_meter=0.3048006096012192 +no_defs no_defs <> # QND95 / Qatar National Grid <2932> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs no_defs <> # Segara / UTM zone 50S <2933> +proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs no_defs <> # Segara (Jakarta) / NEIEZ <2934> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A1 <2935> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1.000000 +x_0=1300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A2 <2936> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A3 <2937> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone A4 <2938> +proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K2 <2939> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1.000000 +x_0=2300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K3 <2940> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1.000000 +x_0=3300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / CS63 zone K4 <2941> +proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1.000000 +x_0=4300000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Porto Santo / UTM zone 28N <2942> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # Selvagem Grande / UTM zone 28N <2943> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # NAD83(CSRS) / SCoPQ zone 2 <2944> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 3 <2945> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 4 <2946> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 5 <2947> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 6 <2948> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 7 <2949> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 8 <2950> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 9 <2951> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / MTM zone 10 <2952> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / New Brunswick Stereo <2953> +proj=stere +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / Prince Edward Isl. Stereographic (NAD83) <2954> +proj=stere +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 11N <2955> +proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 12N <2956> +proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 13N <2957> +proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 17N <2958> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 18N <2959> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 19N <2960> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 20N <2961> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD83(CSRS) / UTM zone 21N <2962> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Moznet / UTM zone 36S <3036> +proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> # Moznet / UTM zone 37S <3037> +proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs no_defs <> # Indian 1960 / UTM zone 48N <3148> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1960 / UTM zone 49N <3149> +proj=utm +zone=49 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1960 / TM 106 NE <3176> +proj=tmerc +lat_0=0 +lon_0=106 +k=0.999600 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # FD58 / Iraq zone <3200> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> # Estonian Coordinate System of 1992 <3300> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs no_defs <> # Estonian Coordinate System of 1997 <3301> +proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # PSD93 / UTM zone 39N <3439> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # PSD93 / UTM zone 40N <3440> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Old Hawaiian / Hawaii zone 1 <3561> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 2 <3562> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 3 <3563> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 4 <3564> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Old Hawaiian / Hawaii zone 5 <3565> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Puerto Rico / UTM zone 20N <3920> +proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs no_defs <> # Puerto Rico State Plane CS of 1927 <3991> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Puerto Rico / St. Croix <3992> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +to_meter=0.3048006096012192 +no_defs no_defs <> # Unknown datum based upon the Airy 1830 ellipsoid <4001> +proj=longlat +ellps=airy +no_defs no_defs <> # Unknown datum based upon the Airy Modified 1849 ellipsoid <4002> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # Unknown datum based upon the Australian National Spheroid <4003> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # Unknown datum based upon the Bessel 1841 ellipsoid <4004> +proj=longlat +ellps=bessel +no_defs no_defs <> # Unknown datum based upon the Bessel Modified ellipsoid <4005> +proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs no_defs <> # Unknown datum based upon the Bessel Namibia ellipsoid <4006> +proj=longlat +ellps=bess_nam +no_defs no_defs <> # Unknown datum based upon the Clarke 1858 ellipsoid <4007> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> # Unknown datum based upon the Clarke 1866 ellipsoid <4008> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Unknown datum based upon the Clarke 1866 Michigan ellipsoid <4009> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (Benoit) ellipsoid <4010> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (IGN) ellipsoid <4011> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (RGS) ellipsoid <4012> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (Arc) ellipsoid <4013> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 (SGA 1922) ellipsoid <4014> +proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1937 Adjustment) ellipsoid <4015> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1967 Definition) ellipsoid <4016> +proj=longlat +ellps=evrstSS +no_defs no_defs <> # Unknown datum based upon the Everest 1830 Modified ellipsoid <4018> +proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs no_defs <> # Unknown datum based upon the GRS 1980 ellipsoid <4019> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Unknown datum based upon the Helmert 1906 ellipsoid <4020> +proj=longlat +ellps=helmert +no_defs no_defs <> # Unknown datum based upon the Indonesian National Spheroid <4021> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> # Unknown datum based upon the International 1924 ellipsoid <4022> +proj=longlat +ellps=intl +no_defs no_defs <> # Unknown datum based upon the Krassowsky 1940 ellipsoid <4024> +proj=longlat +ellps=krass +no_defs no_defs <> # Unknown datum based upon the NWL 9D ellipsoid <4025> +proj=longlat +ellps=WGS66 +no_defs no_defs <> # Unknown datum based upon the Plessis 1817 ellipsoid <4027> +proj=longlat +a=6376523 +b=6355862.933255573 +no_defs no_defs <> # Unknown datum based upon the Struve 1860 ellipsoid <4028> +proj=longlat +a=6378298.3 +b=6356657.142669562 +no_defs no_defs <> # Unknown datum based upon the War Office ellipsoid <4029> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> # Unknown datum based upon the WGS 84 ellipsoid <4030> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # Unknown datum based upon the GEM 10C ellipsoid <4031> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # Unknown datum based upon the OSU86F ellipsoid <4032> +proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs no_defs <> # Unknown datum based upon the OSU91A ellipsoid <4033> +proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs no_defs <> # Unknown datum based upon the Clarke 1880 ellipsoid <4034> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Unknown datum based upon the Authalic Sphere <4035> +proj=longlat +a=6371000 +b=6371000 +no_defs no_defs <> # Unknown datum based upon the GRS 1967 ellipsoid <4036> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # Unknown datum based upon the Average Terrestrial System 1977 ellipsoid <4041> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> # Unknown datum based upon the Everest (1830 Definition) ellipsoid <4042> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> # Unknown datum based upon the WGS 72 ellipsoid <4043> +proj=longlat +ellps=WGS72 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1962 Definition) ellipsoid <4044> +proj=longlat +a=6377301.243 +b=6356100.230165385 +no_defs no_defs <> # Unknown datum based upon the Everest 1830 (1975 Definition) ellipsoid <4045> +proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs no_defs <> # Unspecified based upon the GRS 1980 Authalic Sphere <4047> +proj=longlat +a=6370997 +b=6370997 +no_defs no_defs <> # Greek <4120> +proj=longlat +ellps=bessel +no_defs no_defs <> # GGRS87 <4121> +proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs no_defs <> # ATS77 <4122> +proj=longlat +a=6378135 +b=6356750.304921594 +no_defs no_defs <> # KKJ <4123> +proj=longlat +ellps=intl +towgs84=-90.7,-106.1,-119.2,4.09,0.218,-1.05,1.37 +no_defs no_defs <> # RT90 <4124> +proj=longlat +ellps=bessel +no_defs no_defs <> # Samboja <4125> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> # LKS94 (ETRS89) <4126> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Tete <4127> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Madzansua <4128> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Observatario <4129> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Moznet <4130> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs no_defs <> # Indian 1960 <4131> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # FD58 <4132> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # EST92 <4133> +proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs no_defs <> # PDO Survey Datum 1993 <4134> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Old Hawaiian <4135> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. Lawrence Island <4136> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. Paul Island <4137> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # St. George Island <4138> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Puerto Rico <4139> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # NAD83(CSRS98) <4140> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Israel <4141> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Locodjo 1965 <4142> +proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs no_defs <> # Abidjan 1987 <4143> +proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs no_defs <> # Kalianpur 1937 <4144> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Kalianpur 1962 <4145> +proj=longlat +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +no_defs no_defs <> # Kalianpur 1975 <4146> +proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs no_defs <> # Hanoi 1972 <4147> +proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs no_defs <> # Hartebeesthoek94 <4148> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # CH1903 <4149> +proj=longlat +ellps=bessel +no_defs no_defs <> # CH1903+ <4150> +proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs no_defs <> # CHTRF95 <4151> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # NAD83(HARN) <4152> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Rassadiran <4153> +proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs no_defs <> # ED50(ED77) <4154> +proj=longlat +ellps=intl +no_defs no_defs <> # Dabola 1981 <4155> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs no_defs <> # S-JTSK <4156> +proj=longlat +ellps=bessel +no_defs no_defs <> # Mount Dillon <4157> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +no_defs no_defs <> # Naparima 1955 <4158> +proj=longlat +ellps=intl +no_defs no_defs <> # ELD79 <4159> +proj=longlat +ellps=intl +no_defs no_defs <> # Chos Malal 1914 <4160> +proj=longlat +ellps=intl +no_defs no_defs <> # Pampa del Castillo <4161> +proj=longlat +ellps=intl +no_defs no_defs <> # Korean 1985 <4162> +proj=longlat +ellps=bessel +no_defs no_defs <> # Yemen NGN96 <4163> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # South Yemen <4164> +proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs no_defs <> # Bissau <4165> +proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs no_defs <> # Korean 1995 <4166> +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # NZGD2000 <4167> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Accra <4168> +proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs no_defs <> # American Samoa 1962 <4169> +proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs no_defs <> # SIRGAS <4170> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # RGF93 <4171> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # POSGAR <4172> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # IRENET95 <4173> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Sierra Leone 1924 <4174> +proj=longlat +a=6378300 +b=6356751.689189189 +no_defs no_defs <> # Sierra Leone 1968 <4175> +proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs no_defs <> # Australian Antarctic <4176> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Pulkovo 1942(83) <4178> +proj=longlat +ellps=krass +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs no_defs <> # Pulkovo 1942(58) <4179> +proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs no_defs <> # EST97 <4180> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Luxembourg 1930 <4181> +proj=longlat +ellps=intl +towgs84=-193,13.7,-39.3,-0.41,-2.933,2.688,0.43 +no_defs no_defs <> # Azores Occidental 1939 <4182> +proj=longlat +ellps=intl +no_defs no_defs <> # Azores Central 1948 <4183> +proj=longlat +ellps=intl +no_defs no_defs <> # Azores Oriental 1940 <4184> +proj=longlat +ellps=intl +no_defs no_defs <> # Madeira 1936 <4185> +proj=longlat +ellps=intl +no_defs no_defs <> # OSNI 1952 <4188> +proj=longlat +ellps=airy +no_defs no_defs <> # REGVEN <4189> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # POSGAR 98 <4190> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Albanian 1987 <4191> +proj=longlat +ellps=krass +no_defs no_defs <> # Douala 1948 <4192> +proj=longlat +ellps=intl +no_defs no_defs <> # Manoca 1962 <4193> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> # Qornoq 1927 <4194> +proj=longlat +ellps=intl +no_defs no_defs <> # Scoresbysund 1952 <4195> +proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs no_defs <> # Ammassalik 1958 <4196> +proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs no_defs <> # Garoua <4197> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Kousseri <4198> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Egypt 1930 <4199> +proj=longlat +ellps=intl +no_defs no_defs <> # Pulkovo 1995 <4200> +proj=longlat +ellps=krass +no_defs no_defs <> # Adindan <4201> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # AGD66 <4202> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # AGD84 <4203> +proj=longlat +ellps=aust_SA +no_defs no_defs <> # Ain el Abd <4204> +proj=longlat +ellps=intl +no_defs no_defs <> # Afgooye <4205> +proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs no_defs <> # Agadez <4206> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Lisbon <4207> +proj=longlat +ellps=intl +no_defs no_defs <> # Aratu <4208> +proj=longlat +ellps=intl +no_defs no_defs <> # Arc 1950 <4209> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Arc 1960 <4210> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Batavia <4211> +proj=longlat +ellps=bessel +no_defs no_defs <> # Barbados 1938 <4212> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Beduaram <4213> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Beijing 1954 <4214> +proj=longlat +ellps=krass +no_defs no_defs <> # Belge 1950 <4215> +proj=longlat +ellps=intl +no_defs no_defs <> # Bermuda 1957 <4216> +proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs no_defs <> # Bogota 1975 <4218> +proj=longlat +ellps=intl +no_defs no_defs <> # Bukit Rimpah <4219> +proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs no_defs <> # Camacupa <4220> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Campo Inchauspe <4221> +proj=longlat +ellps=intl +no_defs no_defs <> # Cape <4222> +proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs no_defs <> # Carthage <4223> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Chua <4224> +proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs no_defs <> # Corrego Alegre <4225> +proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs no_defs <> # Cote d'Ivoire <4226> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Deir ez Zor <4227> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Douala <4228> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Egypt 1907 <4229> +proj=longlat +ellps=helmert +no_defs no_defs <> # ED50 <4230> +proj=longlat +ellps=intl +no_defs no_defs <> # ED87 <4231> +proj=longlat +ellps=intl +towgs84=-82.981,-99.719,-110.709,-0.5076,0.1503,0.3898,-0.3143 +no_defs no_defs <> # Fahud <4232> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Gandajika 1970 <4233> +proj=longlat +ellps=intl +no_defs no_defs <> # Garoua <4234> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Guyane Francaise <4235> +proj=longlat +ellps=intl +no_defs no_defs <> # Hu Tzu Shan <4236> +proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs no_defs <> # HD72 <4237> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # ID74 <4238> +proj=longlat +a=6378160 +b=6356774.50408554 +no_defs no_defs <> # Indian 1954 <4239> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +no_defs no_defs <> # Indian 1975 <4240> +proj=longlat +a=6377276.345 +b=6356075.413140239 +no_defs no_defs <> # Jamaica 1875 <4241> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # JAD69 <4242> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Kalianpur 1880 <4243> +proj=longlat +a=6377299.36559538 +b=6356098.357204817 +no_defs no_defs <> # Kandawala <4244> +proj=longlat +a=6377276.345 +b=6356075.413140239 +towgs84=-97,787,86,0,0,0,0 +no_defs no_defs <> # Kertau <4245> +proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs no_defs <> # KOC <4246> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # La Canoa <4247> +proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs no_defs <> # PSAD56 <4248> +proj=longlat +ellps=intl +no_defs no_defs <> # Lake <4249> +proj=longlat +ellps=intl +no_defs no_defs <> # Leigon <4250> +proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs no_defs <> # Liberia 1964 <4251> +proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs no_defs <> # Lome <4252> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Luzon 1911 <4253> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Hito XVIII 1963 <4254> +proj=longlat +ellps=intl +towgs84=18.38,192.45,96.82,0.056,-0.142,-0.2,-0.0013 +no_defs no_defs <> # Herat North <4255> +proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs no_defs <> # Mahe 1971 <4256> +proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs no_defs <> # Makassar <4257> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs no_defs <> # ETRS89 <4258> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # Malongo 1987 <4259> +proj=longlat +ellps=intl +no_defs no_defs <> # Manoca <4260> +proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs no_defs <> # Merchich <4261> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs no_defs <> # Massawa <4262> +proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs no_defs <> # Minna <4263> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Mhast <4264> +proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs no_defs <> # Monte Mario <4265> +proj=longlat +ellps=intl +no_defs no_defs <> # M'poraloko <4266> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # NAD27 <4267> +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs no_defs <> # NAD27 Michigan <4268> +proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs no_defs <> # NAD83 <4269> +proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs no_defs <> # Nahrwan 1967 <4270> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Naparima 1972 <4271> +proj=longlat +ellps=intl +no_defs no_defs <> # NZGD49 <4272> +proj=longlat +ellps=intl +no_defs no_defs <> # NGO 1948 <4273> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs no_defs <> # Datum 73 <4274> +proj=longlat +ellps=intl +no_defs no_defs <> # NTF <4275> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs no_defs <> # NSWC 9Z-2 <4276> +proj=longlat +ellps=WGS66 +no_defs no_defs <> # OSGB 1936 <4277> +proj=longlat +ellps=airy +no_defs no_defs <> # OSGB70 <4278> +proj=longlat +ellps=airy +no_defs no_defs <> # OS(SN)80 <4279> +proj=longlat +ellps=airy +no_defs no_defs <> # Padang <4280> +proj=longlat +ellps=bessel +no_defs no_defs <> # Palestine 1923 <4281> +proj=longlat +a=6378300.789 +b=6356566.435 +no_defs no_defs <> # Pointe Noire <4282> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # GDA94 <4283> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Pulkovo 1942 <4284> +proj=longlat +ellps=krass +no_defs no_defs <> # Qatar 1974 <4285> +proj=longlat +ellps=intl +no_defs no_defs <> # Qatar 1948 <4286> +proj=longlat +ellps=helmert +no_defs no_defs <> # Qornoq <4287> +proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs no_defs <> # Loma Quintana <4288> +proj=longlat +ellps=intl +no_defs no_defs <> # Amersfoort <4289> +proj=longlat +ellps=bessel +no_defs no_defs <> # SAD69 <4291> +proj=longlat +ellps=GRS67 +no_defs no_defs <> # Sapper Hill 1943 <4292> +proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs no_defs <> # Schwarzeck <4293> +proj=longlat +ellps=bess_nam +no_defs no_defs <> # Segora <4294> +proj=longlat +ellps=bessel +no_defs no_defs <> # Serindung <4295> +proj=longlat +ellps=bessel +no_defs no_defs <> # Sudan <4296> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Tananarive <4297> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs no_defs <> # Timbalai 1948 <4298> +proj=longlat +ellps=evrstSS +no_defs no_defs <> # TM65 <4299> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # TM75 <4300> +proj=longlat +a=6377340.189 +b=6356034.447938534 +no_defs no_defs <> # Tokyo <4301> +proj=longlat +ellps=bessel +no_defs no_defs <> # Trinidad 1903 <4302> +proj=longlat +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs no_defs <> # TC(1948) <4303> +proj=longlat +ellps=helmert +no_defs no_defs <> # Voirol 1875 <4304> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs no_defs <> # Bern 1938 <4306> +proj=longlat +ellps=bessel +no_defs no_defs <> # Nord Sahara 1959 <4307> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # RT38 <4308> +proj=longlat +ellps=bessel +no_defs no_defs <> # Yacare <4309> +proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs no_defs <> # Yoff <4310> +proj=longlat +a=6378249.2 +b=6356515 +no_defs no_defs <> # Zanderij <4311> +proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs no_defs <> # MGI <4312> +proj=longlat +ellps=bessel +no_defs no_defs <> # Belge 1972 <4313> +proj=longlat +ellps=intl +no_defs no_defs <> # DHDN <4314> +proj=longlat +ellps=bessel +no_defs no_defs <> # Conakry 1905 <4315> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs no_defs <> # Dealul Piscului 1933 <4316> +proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs no_defs <> # Dealul Piscului 1970 <4317> +proj=longlat +ellps=krass +no_defs no_defs <> # NGN <4318> +proj=longlat +ellps=WGS84 +no_defs no_defs <> # KUDAMS <4319> +proj=longlat +ellps=GRS80 +no_defs no_defs <> # WGS 72 <4322> +proj=longlat +ellps=WGS72 +no_defs no_defs <> # WGS 72BE <4324> +proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs no_defs <> # WGS 84 <4326> +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs no_defs <> # Anguilla 1957 <4600> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # Antigua 1943 <4601> +proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs no_defs <> # Dominica 1945 <4602> +proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs no_defs <> # Grenada 1953 <4603> +proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs no_defs <> # Montserrat 1958 <4604> +proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs no_defs <> # St. Kitts 1955 <4605> +proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs no_defs <> # St. Lucia 1955 <4606> +proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs no_defs <> # St. Vincent 1945 <4607> +proj=longlat +ellps=clrk80 +no_defs no_defs <> # NAD27(76) <4608> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # NAD27(CGQ77) <4609> +proj=longlat +ellps=clrk66 +no_defs no_defs <> # Xian 1980 <4610> +proj=longlat +a=6378140 +b=6356755.288157528 +no_defs no_defs <> # Hong Kong 1980 <4611> +proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs no_defs <> # JGD2000 <4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Segara <4613> +proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs no_defs <> # QND95 <4614> +proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs no_defs <> # Porto Santo <4615> +proj=longlat +ellps=intl +no_defs no_defs <> # Selvagem Grande <4616> +proj=longlat +ellps=intl +no_defs no_defs <> # NAD83(CSRS) <4617> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs no_defs <> # Bern 1898 (Bern) <4801> +proj=longlat +ellps=bessel +pm=bern +no_defs no_defs <> # Bogota 1975 (Bogota) <4802> +proj=longlat +ellps=intl +pm=bogota +no_defs no_defs <> # Lisbon (Lisbon) <4803> +proj=longlat +ellps=intl +pm=lisbon +no_defs no_defs <> # Makassar (Jakarta) <4804> +proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs no_defs <> # MGI (Ferro) <4805> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> # Monte Mario (Rome) <4806> +proj=longlat +ellps=intl +pm=rome +no_defs no_defs <> # NTF (Paris) <4807> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs no_defs <> # Padang (Jakarta) <4808> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # Belge 1950 (Brussels) <4809> +proj=longlat +ellps=intl +pm=brussels +no_defs no_defs <> # Tananarive (Paris) <4810> +proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs no_defs <> # Voirol 1875 (Paris) <4811> +proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs no_defs <> # Batavia (Jakarta) <4813> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # RT38 (Stockholm) <4814> +proj=longlat +ellps=bessel +pm=stockholm +no_defs no_defs <> # Greek (Athens) <4815> +proj=longlat +ellps=bessel +pm=athens +no_defs no_defs <> # Carthage (Paris) <4816> +proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs no_defs <> # NGO 1948 (Oslo) <4817> +proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs no_defs <> # S-JTSK (Ferro) <4818> +proj=longlat +ellps=bessel +pm=ferro +no_defs no_defs <> # Nord Sahara 1959 (Paris) <4819> +proj=longlat +ellps=clrk80 +pm=paris +no_defs no_defs <> # Segara (Jakarta) <4820> +proj=longlat +ellps=bessel +pm=jakarta +no_defs no_defs <> # ATF (Paris) <4901> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> # NDG (Paris) <4902> +proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs no_defs <> # Madrid 1870 (Madrid) <4903> +proj=longlat +a=6378298.3 +b=6356657.142669562 +pm=madrid +no_defs no_defs <> # Lisbon 1890 (Lisbon) <4904> +proj=longlat +ellps=bessel +pm=lisbon +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 4 <20004> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 5 <20005> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 6 <20006> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 7 <20007> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 8 <20008> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 9 <20009> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 10 <20010> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 11 <20011> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 12 <20012> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 13 <20013> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 14 <20014> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 15 <20015> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 16 <20016> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 17 <20017> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 18 <20018> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 19 <20019> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 20 <20020> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 21 <20021> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 22 <20022> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 23 <20023> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 24 <20024> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 25 <20025> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 26 <20026> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 27 <20027> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 28 <20028> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 29 <20029> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 30 <20030> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 31 <20031> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger zone 32 <20032> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 4N <20064> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 5N <20065> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 6N <20066> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 7N <20067> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 8N <20068> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 9N <20069> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 10N <20070> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 11N <20071> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 12N <20072> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 13N <20073> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 14N <20074> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 15N <20075> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 16N <20076> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 17N <20077> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 18N <20078> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 19N <20079> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 20N <20080> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 21N <20081> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 22N <20082> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 23N <20083> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 24N <20084> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 25N <20085> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 26N <20086> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 27N <20087> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 28N <20088> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 29N <20089> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 30N <20090> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 31N <20091> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1995 / Gauss-Kruger 32N <20092> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Adindan / UTM zone 37N <20137> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> # Adindan / UTM zone 38N <20138> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> # AGD66 / AMG zone 48 <20248> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 49 <20249> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 50 <20250> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 51 <20251> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 52 <20252> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 53 <20253> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 54 <20254> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 55 <20255> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 56 <20256> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 57 <20257> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD66 / AMG zone 58 <20258> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 48 <20348> +proj=utm +zone=48 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 49 <20349> +proj=utm +zone=49 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 50 <20350> +proj=utm +zone=50 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 51 <20351> +proj=utm +zone=51 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 52 <20352> +proj=utm +zone=52 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 53 <20353> +proj=utm +zone=53 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 54 <20354> +proj=utm +zone=54 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 55 <20355> +proj=utm +zone=55 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 56 <20356> +proj=utm +zone=56 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 57 <20357> +proj=utm +zone=57 +south +ellps=aust_SA +units=m +no_defs no_defs <> # AGD84 / AMG zone 58 <20358> +proj=utm +zone=58 +south +ellps=aust_SA +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 37N <20437> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 38N <20438> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / UTM zone 39N <20439> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # Ain el Abd / Bahrain Grid <20499> +proj=utm +zone=39 +ellps=intl +units=m +no_defs no_defs <> # Afgooye / UTM zone 38N <20538> +proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> # Afgooye / UTM zone 39N <20539> +proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs no_defs <> # Lisbon (Lisbon)/Portuguese National Grid <20790> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> # Lisbon (Lisbon)/Portuguese Grid <20791> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +pm=lisbon +units=m +no_defs no_defs <> # Aratu / UTM zone 22S <20822> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> # Aratu / UTM zone 23S <20823> +proj=utm +zone=23 +south +ellps=intl +units=m +no_defs no_defs <> # Aratu / UTM zone 24S <20824> +proj=utm +zone=24 +south +ellps=intl +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 34S <20934> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 35S <20935> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1950 / UTM zone 36S <20936> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 35S <21035> +proj=utm +zone=35 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 36S <21036> +proj=utm +zone=36 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 37S <21037> +proj=utm +zone=37 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 35N <21095> +proj=utm +zone=35 +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 36N <21096> +proj=utm +zone=36 +ellps=clrk80 +units=m +no_defs no_defs <> # Arc 1960 / UTM zone 37N <21097> +proj=utm +zone=37 +ellps=clrk80 +units=m +no_defs no_defs <> # Batavia (Jakarta) / NEIEZ <21100> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +pm=jakarta +units=m +no_defs no_defs <> # Batavia / UTM zone 48S <21148> +proj=utm +zone=48 +south +ellps=bessel +units=m +no_defs no_defs <> # Batavia / UTM zone 49S <21149> +proj=utm +zone=49 +south +ellps=bessel +units=m +no_defs no_defs <> # Batavia / UTM zone 50S <21150> +proj=utm +zone=50 +south +ellps=bessel +units=m +no_defs no_defs <> # Barbados 1938 / British West Indies Grid <21291> +proj=tmerc +lat_0=0 +lon_0=-62 +k=0.999500 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Barbados 1938 / Barbados National Grid <21292> +proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.999999 +x_0=30000 +y_0=75000 +ellps=clrk80 +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 13 <21413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 14 <21414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 15 <21415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 16 <21416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 17 <21417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 18 <21418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 19 <21419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 20 <21420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 21 <21421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 22 <21422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger zone 23 <21423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 75E <21453> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 81E <21454> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 87E <21455> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 93E <21456> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 99E <21457> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 105E <21458> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 111E <21459> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 117E <21460> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 123E <21461> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 129E <21462> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger CM 135E <21463> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 13N <21473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 14N <21474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 15N <21475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 16N <21476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 17N <21477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 18N <21478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 19N <21479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 20N <21480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 21N <21481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 22N <21482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Beijing 1954 / Gauss-Kruger 23N <21483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Belge 1950 (Brussels) / Belge Lambert 50 <21500> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.367975 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs no_defs <> # Bern 1898 (Bern) / LV03C <21780> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=0 +y_0=0 +ellps=bessel +pm=bern +units=m +no_defs no_defs <> # CH1903 / LV03 <21781> +proj=omerc +lat_0=46.95240555555556 +lonc=7.439583333333333 +alpha=90 +k=1 +x_0=600000 +y_0=200000 +ellps=bessel +units=m +no_defs no_defs <> # Bogota 1975 / UTM zone 17N <21817> +proj=utm +zone=17 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / UTM zone 18N <21818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia West zone <21891> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia Bogota zone <21892> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia East Central zone <21893> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Bogota 1975 / Colombia East <21894> +proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1.000000 +x_0=1000000 +y_0=1000000 +ellps=intl +units=m +no_defs no_defs <> # Camacupa / UTM zone 32S <22032> +proj=utm +zone=32 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / UTM zone 33S <22033> +proj=utm +zone=33 +south +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / TM 11.30 SE <22091> +proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> # Camacupa / TM 12 SE <22092> +proj=tmerc +lat_0=0 +lon_0=12 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 1 <22191> +proj=tmerc +lat_0=-90 +lon_0=-72 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 2 <22192> +proj=tmerc +lat_0=-90 +lon_0=-69 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 3 <22193> +proj=tmerc +lat_0=-90 +lon_0=-66 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 4 <22194> +proj=tmerc +lat_0=-90 +lon_0=-63 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 5 <22195> +proj=tmerc +lat_0=-90 +lon_0=-60 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 6 <22196> +proj=tmerc +lat_0=-90 +lon_0=-57 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Campo Inchauspe / Argentina 7 <22197> +proj=tmerc +lat_0=-90 +lon_0=-54 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Cape / UTM zone 34S <22234> +proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Cape / UTM zone 35S <22235> +proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # Cape / UTM zone 36S <22236> +proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +units=m +no_defs no_defs <> # South African Coordinate System zone 15 # South African Coordinate System zone 17 # South African Coordinate System zone 19 # South African Coordinate System zone 21 # South African Coordinate System zone 23 # South African Coordinate System zone 25 # South African Coordinate System zone 27 # South African Coordinate System zone 29 # South African Coordinate System zone 31 # South African Coordinate System zone 33 # Carthage (Paris) / Tunisia Mining Grid # Carthage / UTM zone 32N <22332> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Carthage / Nord Tunisie <22391> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Carthage / Sud Tunisie <22392> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Corrego Alegre / UTM zone 23S <22523> +proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> # Corrego Alegre / UTM zone 24S <22524> +proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs no_defs <> # Deir ez Zor / Levant Zone <22700> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Deir ez Zor / Syria Lambert <22770> +proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Deir ez Zor / Levant Stereographic <22780> +proj=stere +lat_0=34.2 +lon_0=39.15 +k=0.999534 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Douala / UTM zone 32N <22832> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Egypt 1907 / Blue Belt <22991> +proj=tmerc +lat_0=30 +lon_0=35 +k=1.000000 +x_0=300000 +y_0=1100000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Red Belt <22992> +proj=tmerc +lat_0=30 +lon_0=31 +k=1.000000 +x_0=615000 +y_0=810000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Purple Belt <22993> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=200000 +ellps=helmert +units=m +no_defs no_defs <> # Egypt 1907 / Extended Purple Belt <22994> +proj=tmerc +lat_0=30 +lon_0=27 +k=1.000000 +x_0=700000 +y_0=1200000 +ellps=helmert +units=m +no_defs no_defs <> # ED50 / UTM zone 28N <23028> +proj=utm +zone=28 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 29N <23029> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 30N <23030> +proj=utm +zone=30 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 31N <23031> +proj=utm +zone=31 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 32N <23032> +proj=utm +zone=32 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 33N <23033> +proj=utm +zone=33 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 34N <23034> +proj=utm +zone=34 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 35N <23035> +proj=utm +zone=35 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 36N <23036> +proj=utm +zone=36 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 37N <23037> +proj=utm +zone=37 +ellps=intl +units=m +no_defs no_defs <> # ED50 / UTM zone 38N <23038> +proj=utm +zone=38 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM 0 N <23090> +proj=tmerc +lat_0=0 +lon_0=0 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # ED50 / TM 5 NE <23095> +proj=tmerc +lat_0=0 +lon_0=5 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +units=m +no_defs no_defs <> # Fahud / UTM zone 39N <23239> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # Fahud / UTM zone 40N <23240> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Garoua / UTM zone 33N <23433> +proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # HD72 / EOV <23700> +proj=omerc +lat_0=47.14439372222222 +lonc=19.04857177777778 +alpha=90 +k=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +units=m +no_defs no_defs <> # ID74 / UTM zone 46N <23846> +proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 47N <23847> +proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 48N <23848> +proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 49N <23849> +proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 50N <23850> +proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 51N <23851> +proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 52N <23852> +proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 53N <23853> +proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 46S <23886> +proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 47S <23887> +proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 48S <23888> +proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 49S <23889> +proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 50S <23890> +proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 51S <23891> +proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 52S <23892> +proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 53S <23893> +proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # ID74 / UTM zone 54S <23894> +proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 46N <23946> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 47N <23947> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1954 / UTM zone 48N <23948> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs no_defs <> # Indian 1975 / UTM zone 47N <24047> +proj=utm +zone=47 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Indian 1975 / UTM zone 48N <24048> +proj=utm +zone=48 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Jamaica 1875 / Jamaica (Old Grid) <24100> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49575 +y_0=121918.906 +ellps=clrk80 +to_meter=0.304797265 +no_defs no_defs <> # JAD69 / Jamaica National Grid <24200> +proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +units=m +no_defs no_defs <> # Kalianpur 1937 / UTM zone 45N <24305> +proj=utm +zone=45 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1937 / UTM zone 46N <24306> +proj=utm +zone=46 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 41N <24311> +proj=utm +zone=41 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 42N <24312> +proj=utm +zone=42 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / UTM zone 43N <24313> +proj=utm +zone=43 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 42N <24342> +proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 43N <24343> +proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 44N <24344> +proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 45N <24345> +proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 46N <24346> +proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / UTM zone 47N <24347> +proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1880 / India zone 0 <24370> +proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone I <24371> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone IIa <24372> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone III <24373> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1880 / India zone IV <24374> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1937 / India zone IIb <24375> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.413140239 +units=m +no_defs no_defs <> # Kalianpur 1962 / India zone I <24376> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1962 / India zone IIa <24377> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165385 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone I <24378> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone IIa <24379> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone IIb <24380> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1975 / India zone III <24381> +proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kalianpur 1880 / India zone IIb <24382> +proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.357204817 +to_meter=0.9143985307444408 +no_defs no_defs <> # Kalianpur 1975 / India zone IV <24383> +proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / Singapore Grid <24500> +proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / UTM zone 47N <24547> +proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / UTM zone 48N <24548> +proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs no_defs <> # Kertau / R.S.O. Malaya (ch) <24571> +proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs no_defs <> # KOC Lambert <24600> +proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs no_defs <> # La Canoa / UTM zone 18N <24718> +proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # La Canoa / UTM zone 19N <24719> +proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # La Canoa / UTM zone 20N <24720> +proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs no_defs <> # PSAD56 / UTM zone 18N <24818> +proj=utm +zone=18 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 19N <24819> +proj=utm +zone=19 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 20N <24820> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 21N <24821> +proj=utm +zone=21 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 17S <24877> +proj=utm +zone=17 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 18S <24878> +proj=utm +zone=18 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 19S <24879> +proj=utm +zone=19 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 20S <24880> +proj=utm +zone=20 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / UTM zone 22S <24882> +proj=utm +zone=22 +south +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru west zone <24891> +proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.999830 +x_0=222000 +y_0=1426834.743 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru central zone <24892> +proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.999330 +x_0=720000 +y_0=1039979.159 +ellps=intl +units=m +no_defs no_defs <> # PSAD56 / Peru east zone <24893> +proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.999530 +x_0=1324000 +y_0=1040084.558 +ellps=intl +units=m +no_defs no_defs <> # Leigon / Ghana Metre Grid <25000> +proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.999750 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs no_defs <> # Lome / UTM zone 31N <25231> +proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone I <25391> +proj=tmerc +lat_0=0 +lon_0=117 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone II <25392> +proj=tmerc +lat_0=0 +lon_0=119 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone III <25393> +proj=tmerc +lat_0=0 +lon_0=121 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone IV <25394> +proj=tmerc +lat_0=0 +lon_0=123 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Luzon 1911 / Philippines zone V <25395> +proj=tmerc +lat_0=0 +lon_0=125 +k=0.999950 +x_0=500000 +y_0=0 +ellps=clrk66 +units=m +no_defs no_defs <> # Makassar (Jakarta) / NEIEZ <25700> +proj=merc +lat_ts=0 +lon_0=216.8077194444444 +k=0.997000 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs no_defs <> # ETRS89 / UTM zone 28N <25828> +proj=utm +zone=28 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 29N <25829> +proj=utm +zone=29 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 30N <25830> +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 31N <25831> +proj=utm +zone=31 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 32N <25832> +proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 33N <25833> +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 34N <25834> +proj=utm +zone=34 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 35N <25835> +proj=utm +zone=35 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 36N <25836> +proj=utm +zone=36 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 37N <25837> +proj=utm +zone=37 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / UTM zone 38N <25838> +proj=utm +zone=38 +ellps=GRS80 +units=m +no_defs no_defs <> # ETRS89 / TM Baltic93 <25884> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # Malongo 1987 / UTM zone 32S <25932> +proj=utm +zone=32 +south +ellps=intl +units=m +no_defs no_defs <> # Merchich / Nord Maroc <26191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Merchich / Sud Maroc <26192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Merchich / Sahara <26193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs no_defs <> # Massawa / UTM zone 37N <26237> +proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs no_defs <> # Minna / UTM zone 31N <26331> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / UTM zone 32N <26332> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria West Belt <26391> +proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.999750 +x_0=230738.26 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria Mid Belt <26392> +proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.999750 +x_0=670553.98 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Minna / Nigeria East Belt <26393> +proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.999750 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +units=m +no_defs no_defs <> # Mhast / UTM zone 32S <26432> +proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs no_defs <> # Monte Mario (Rome) / Italy zone 1 <26591> +proj=tmerc +lat_0=0 +lon_0=21.45233333333333 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> # Monte Mario (Rome) / Italy zone 2 <26592> +proj=tmerc +lat_0=0 +lon_0=27.45233333333333 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +pm=rome +units=m +no_defs no_defs <> # M'poraloko / UTM zone 32N <26632> +proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # M'poraloko / UTM zone 32S <26692> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # NAD27 / UTM zone 3N <26703> +proj=utm +zone=3 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 4N <26704> +proj=utm +zone=4 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 5N <26705> +proj=utm +zone=5 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 6N <26706> +proj=utm +zone=6 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 7N <26707> +proj=utm +zone=7 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 8N <26708> +proj=utm +zone=8 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 9N <26709> +proj=utm +zone=9 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 10N <26710> +proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 11N <26711> +proj=utm +zone=11 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 12N <26712> +proj=utm +zone=12 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 13N <26713> +proj=utm +zone=13 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 14N <26714> +proj=utm +zone=14 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 15N <26715> +proj=utm +zone=15 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 16N <26716> +proj=utm +zone=16 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 17N <26717> +proj=utm +zone=17 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 18N <26718> +proj=utm +zone=18 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 19N <26719> +proj=utm +zone=19 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 20N <26720> +proj=utm +zone=20 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 21N <26721> +proj=utm +zone=21 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / UTM zone 22N <26722> +proj=utm +zone=22 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Alabama East <26729> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alabama West <26730> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 1 <26731> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 2 <26732> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 3 <26733> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 4 <26734> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 5 <26735> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 6 <26736> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 7 <26737> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=213360.4267208534 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 8 <26738> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 9 <26739> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Alaska zone 10 <26740> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone I <26741> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone II <26742> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone III <26743> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone IV <26744> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone V <26745> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone VI <26746> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / California zone VII <26747> +proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona East <26748> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona Central <26749> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arizona West <26750> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arkansas North <26751> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Arkansas South <26752> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado North <26753> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado Central <26754> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Colorado South <26755> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Connecticut <26756> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Delaware <26757> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida East <26758> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida West <26759> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Florida North <26760> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Georgia East <26766> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Georgia West <26767> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho East <26768> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho Central <26769> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Idaho West <26770> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Illinois East <26771> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Illinois West <26772> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Indiana East <26773> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Indiana West <26774> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Iowa North <26775> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Iowa South <26776> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kansas North <26777> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kansas South <26778> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kentucky North <26779> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Kentucky South <26780> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Louisiana North <26781> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Louisiana South <26782> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maine East <26783> +proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maine West <26784> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Maryland <26785> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Massachusetts Mainland <26786> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Massachusetts Island <26787> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota North <26791> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota Central <26792> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Minnesota South <26793> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Mississippi East <26794> +proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.999960 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Mississippi West <26795> +proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri East <26796> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri Central <26797> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Missouri West <26798> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan East <26801> +proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999943 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan Old Central <26802> +proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan West <26803> +proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan North <26811> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan Central <26812> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD Michigan / Michigan South <26813> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD83 / UTM zone 3N <26903> +proj=utm +zone=3 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 4N <26904> +proj=utm +zone=4 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 5N <26905> +proj=utm +zone=5 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 6N <26906> +proj=utm +zone=6 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 7N <26907> +proj=utm +zone=7 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 8N <26908> +proj=utm +zone=8 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 9N <26909> +proj=utm +zone=9 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 10N <26910> +proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 11N <26911> +proj=utm +zone=11 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 12N <26912> +proj=utm +zone=12 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 13N <26913> +proj=utm +zone=13 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 14N <26914> +proj=utm +zone=14 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 15N <26915> +proj=utm +zone=15 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 16N <26916> +proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 17N <26917> +proj=utm +zone=17 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 18N <26918> +proj=utm +zone=18 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 19N <26919> +proj=utm +zone=19 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 20N <26920> +proj=utm +zone=20 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 21N <26921> +proj=utm +zone=21 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 22N <26922> +proj=utm +zone=22 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / UTM zone 23N <26923> +proj=utm +zone=23 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alabama East <26929> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alabama West <26930> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 1 <26931> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 2 <26932> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 3 <26933> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 4 <26934> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 5 <26935> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 6 <26936> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 7 <26937> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 8 <26938> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 9 <26939> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Alaska zone 10 <26940> +proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 1 <26941> +proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 2 <26942> +proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 3 <26943> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 4 <26944> +proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 5 <26945> +proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / California zone 6 <26946> +proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona East <26948> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona Central <26949> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arizona West <26950> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arkansas North <26951> +proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Arkansas South <26952> +proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado North <26953> +proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado Central <26954> +proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Colorado South <26955> +proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Connecticut <26956> +proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Delaware <26957> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida East <26958> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida West <26959> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Florida North <26960> +proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 1 <26961> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 2 <26962> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 3 <26963> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 4 <26964> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Hawaii zone 5 <26965> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Georgia East <26966> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Georgia West <26967> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho East <26968> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho Central <26969> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Idaho West <26970> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Illinois East <26971> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Illinois West <26972> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Indiana East <26973> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Indiana West <26974> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Iowa North <26975> +proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Iowa South <26976> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kansas North <26977> +proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kansas South <26978> +proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kentucky North <26979> +proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Kentucky South <26980> +proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Louisiana North <26981> +proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Louisiana South <26982> +proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maine East <26983> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maine West <26984> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Maryland <26985> +proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Massachusetts Mainland <26986> +proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Massachusetts Island <26987> +proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan North <26988> +proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan Central <26989> +proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Michigan South <26990> +proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota North <26991> +proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota Central <26992> +proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Minnesota South <26993> +proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Mississippi East <26994> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Mississippi West <26995> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri East <26996> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri Central <26997> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Missouri West <26998> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 38N <27038> +proj=utm +zone=38 +ellps=clrk80 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 39N <27039> +proj=utm +zone=39 +ellps=clrk80 +units=m +no_defs no_defs <> # Nahrwan 1967 / UTM zone 40N <27040> +proj=utm +zone=40 +ellps=clrk80 +units=m +no_defs no_defs <> # Naparima 1972 / UTM zone 20N <27120> +proj=utm +zone=20 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / New Zealand Map Grid <27200> +proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Eden Circuit <27205> +proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.999900 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Bay of Plenty Circuit <27206> +proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Poverty Bay Circuit <27207> +proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Hawkes Bay Circuit <27208> +proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Taranaki Circuit <27209> +proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Tuhirangi Circuit <27210> +proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wanganui Circuit <27211> +proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wairarapa Circuit <27212> +proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Wellington Circuit <27213> +proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Collingwood Circuit <27214> +proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Nelson Circuit <27215> +proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Karamea Circuit <27216> +proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Buller Circuit <27217> +proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Grey Circuit <27218> +proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Amuri Circuit <27219> +proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Marlborough Circuit <27220> +proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Hokitika Circuit <27221> +proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Okarito Circuit <27222> +proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Jacksons Bay Circuit <27223> +proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Pleasant Circuit <27224> +proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Gawler Circuit <27225> +proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Timaru Circuit <27226> +proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Lindis Peak Circuit <27227> +proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount Nicholas Circuit <27228> +proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Mount York Circuit <27229> +proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Observation Point Circuit <27230> +proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1.000000 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / North Taieri Circuit <27231> +proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.999960 +x_0=300000 +y_0=700000 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / Bluff Circuit <27232> +proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1.000000 +x_0=300002.66 +y_0=699999.58 +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 58S <27258> +proj=utm +zone=58 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 59S <27259> +proj=utm +zone=59 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / UTM zone 60S <27260> +proj=utm +zone=60 +south +ellps=intl +units=m +no_defs no_defs <> # NZGD49 / North Island Grid <27291> +proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1.000000 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> # NZGD49 / South Island Grid <27292> +proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1.000000 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +to_meter=0.9143984146160287 +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone I <27391> +proj=tmerc +lat_0=58 +lon_0=6.056250000000003 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone II <27392> +proj=tmerc +lat_0=58 +lon_0=8.389583333333336 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone III <27393> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone IV <27394> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone V <27395> +proj=tmerc +lat_0=58 +lon_0=16.88958333333334 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VI <27396> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VII <27397> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # NGO 1948 (Oslo) / NGO zone VIII <27398> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs no_defs <> # Datum 73 / UTM zone 29N <27429> +proj=utm +zone=29 +ellps=intl +units=m +no_defs no_defs <> # Datum 73 / Modified Portuguese Grid <27492> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m +no_defs no_defs <> # ATF (Paris) / Nord de Guerre <27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=7.737229170000001 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Nord France <27561> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Centre France <27562> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Sud France <27563> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert Corse <27564> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone I <27571> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone II <27572> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone III <27573> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Lambert zone IV <27574> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France I <27581> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France II <27582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France III <27583> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / France IV <27584> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Nord France <27591> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=2.33722917 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Centre France <27592> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.33722917 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Sud France <27593> +proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=2.33722917 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # NTF (Paris) / Corse <27594> +proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=2.33722917 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # OSGB 1936 / British National Grid <27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs no_defs <> # Palestine 1923 / Palestine Grid <28191> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Palestine 1923 / Palestine Belt <28192> +proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1.000000 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Palestine 1923 / Israeli CS Grid <28193> +proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +units=m +no_defs no_defs <> # Pointe Noire / UTM zone 32S <28232> +proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # GDA94 / MGA zone 48 <28348> +proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 49 <28349> +proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 50 <28350> +proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 51 <28351> +proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 52 <28352> +proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 53 <28353> +proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 54 <28354> +proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 55 <28355> +proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 56 <28356> +proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 57 <28357> +proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # GDA94 / MGA zone 58 <28358> +proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 2 <28402> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 3 <28403> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 4 <28404> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 5 <28405> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 6 <28406> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 7 <28407> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 8 <28408> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 9 <28409> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=9500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 10 <28410> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=10500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 11 <28411> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=11500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 12 <28412> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=12500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 13 <28413> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 14 <28414> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 15 <28415> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 16 <28416> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 17 <28417> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 18 <28418> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 19 <28419> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 20 <28420> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 21 <28421> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 22 <28422> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 23 <28423> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 24 <28424> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=24500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 25 <28425> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 26 <28426> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 27 <28427> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 28 <28428> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 29 <28429> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 30 <28430> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 31 <28431> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger zone 32 <28432> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 2N <28462> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 3N <28463> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 4N <28464> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 5N <28465> +proj=tmerc +lat_0=0 +lon_0=27 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 6N <28466> +proj=tmerc +lat_0=0 +lon_0=33 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 7N <28467> +proj=tmerc +lat_0=0 +lon_0=39 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 8N <28468> +proj=tmerc +lat_0=0 +lon_0=45 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 9N <28469> +proj=tmerc +lat_0=0 +lon_0=51 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 10N <28470> +proj=tmerc +lat_0=0 +lon_0=57 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 11N <28471> +proj=tmerc +lat_0=0 +lon_0=63 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 12N <28472> +proj=tmerc +lat_0=0 +lon_0=69 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 13N <28473> +proj=tmerc +lat_0=0 +lon_0=75 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 14N <28474> +proj=tmerc +lat_0=0 +lon_0=81 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 15N <28475> +proj=tmerc +lat_0=0 +lon_0=87 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 16N <28476> +proj=tmerc +lat_0=0 +lon_0=93 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 17N <28477> +proj=tmerc +lat_0=0 +lon_0=99 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 18N <28478> +proj=tmerc +lat_0=0 +lon_0=105 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 19N <28479> +proj=tmerc +lat_0=0 +lon_0=111 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 20N <28480> +proj=tmerc +lat_0=0 +lon_0=117 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 21N <28481> +proj=tmerc +lat_0=0 +lon_0=123 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 22N <28482> +proj=tmerc +lat_0=0 +lon_0=129 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 23N <28483> +proj=tmerc +lat_0=0 +lon_0=135 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 24N <28484> +proj=tmerc +lat_0=0 +lon_0=141 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 25N <28485> +proj=tmerc +lat_0=0 +lon_0=147 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 26N <28486> +proj=tmerc +lat_0=0 +lon_0=153 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 27N <28487> +proj=tmerc +lat_0=0 +lon_0=159 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 28N <28488> +proj=tmerc +lat_0=0 +lon_0=165 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 29N <28489> +proj=tmerc +lat_0=0 +lon_0=171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 30N <28490> +proj=tmerc +lat_0=0 +lon_0=177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 31N <28491> +proj=tmerc +lat_0=0 +lon_0=-177 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Pulkovo 1942 / Gauss-Kruger 32N <28492> +proj=tmerc +lat_0=0 +lon_0=-171 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs no_defs <> # Qatar 1974 / Qatar National Grid <28600> +proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.999990 +x_0=200000 +y_0=300000 +ellps=intl +units=m +no_defs no_defs <> # Amersfoort / RD Old <28991> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Amersfoort / RD New <28992> +proj=stere +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +no_defs no_defs <> # SAD69 / Brazil Polyconic <29100> +proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 18N <29118> +proj=utm +zone=18 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 19N <29119> +proj=utm +zone=19 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 20N <29120> +proj=utm +zone=20 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 21N <29121> +proj=utm +zone=21 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 22N <29122> +proj=utm +zone=22 +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 17S <29177> +proj=utm +zone=17 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 18S <29178> +proj=utm +zone=18 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 19S <29179> +proj=utm +zone=19 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 20S <29180> +proj=utm +zone=20 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 21S <29181> +proj=utm +zone=21 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 22S <29182> +proj=utm +zone=22 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 23S <29183> +proj=utm +zone=23 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 24S <29184> +proj=utm +zone=24 +south +ellps=GRS67 +units=m +no_defs no_defs <> # SAD69 / UTM zone 25S <29185> +proj=utm +zone=25 +south +ellps=GRS67 +units=m +no_defs no_defs <> # Sapper Hill 1943 / UTM zone 20S <29220> +proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> # Sapper Hill 1943 / UTM zone 21S <29221> +proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs no_defs <> # Schwarzeck / UTM zone 33S <29333> +proj=utm +zone=33 +south +ellps=bess_nam +units=m +no_defs no_defs <> # South West African Coord. System zone 11 # South West African Coord. System zone 13 # South West African Coord. System zone 15 # South West African Coord. System zone 17 # South West African Coord. System zone 19 # South West African Coord. System zone 21 # South West African Coord. System zone 23 # South West African Coord. System zone 25 # Sudan / UTM zone 35N <29635> +proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Sudan / UTM zone 36N <29636> +proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Tananarive (Paris) / Laborde Grid <29700> +proj=omerc +lat_0=-18.9 +lonc=46.43722917000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs no_defs <> # Tananarive / UTM zone 38S <29738> +proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> # Tananarive / UTM zone 39S <29739> +proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs no_defs <> # Timbalai 1948 / UTM zone 49N <29849> +proj=utm +zone=49 +ellps=evrstSS +units=m +no_defs no_defs <> # Timbalai 1948 / UTM zone 50N <29850> +proj=utm +zone=50 +ellps=evrstSS +units=m +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (ch) <29871> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +ellps=evrstSS +to_meter=20.11676512155263 +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (ft) <29872> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +ellps=evrstSS +to_meter=0.3047994715386762 +no_defs no_defs <> # Timbalai 1948 / R.S.O. Borneo (m) <29873> +proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +ellps=evrstSS +units=m +no_defs no_defs <> # TM65 / Irish National Grid <29900> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # OSNI 1952 / Irish National Grid <29901> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000000 +x_0=200000 +y_0=250000 +ellps=airy +units=m +no_defs no_defs <> # TM65 / Irish Grid <29902> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # TM75 / Irish Grid <29903> +proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +a=6377340.189 +b=6356034.447938534 +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS I <30161> +proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS II <30162> +proj=tmerc +lat_0=33 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS III <30163> +proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS IV <30164> +proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS V <30165> +proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VI <30166> +proj=tmerc +lat_0=36 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VII <30167> +proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS VIII <30168> +proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS IX <30169> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS X <30170> +proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XI <30171> +proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XII <30172> +proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIII <30173> +proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIV <30174> +proj=tmerc +lat_0=26 +lon_0=142 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XV <30175> +proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVI <30176> +proj=tmerc +lat_0=26 +lon_0=124 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVII <30177> +proj=tmerc +lat_0=26 +lon_0=131 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XVIII <30178> +proj=tmerc +lat_0=20 +lon_0=136 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Tokyo / Japan Plane Rectangular CS XIX <30179> +proj=tmerc +lat_0=26 +lon_0=154 +k=0.999900 +x_0=0 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Trinidad 1903 / Trinidad Grid <30200> +proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46380700001 +y_0=65379.0133425 +a=6378293.63683822 +b=6356617.979337744 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.2011661949 +no_defs no_defs <> # TC(1948) / UTM zone 39N <30339> +proj=utm +zone=39 +ellps=helmert +units=m +no_defs no_defs <> # TC(1948) / UTM zone 40N <30340> +proj=utm +zone=40 +ellps=helmert +units=m +no_defs no_defs <> # Voirol 1875 / Nord Algerie (ancienne) <30491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> # Voirol 1875 / Sud Algerie (ancienne) <30492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 29N <30729> +proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 30N <30730> +proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 31N <30731> +proj=utm +zone=31 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / UTM zone 32N <30732> +proj=utm +zone=32 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / Voirol Unifie Nord <30791> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> # Nord Sahara 1959 / Voirol Unifie Sud <30792> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m +no_defs no_defs <> # RT38 2.5 gon W <30800> +proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Yoff / UTM zone 28N <31028> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs no_defs <> # Zanderij / UTM zone 21N <31121> +proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / TM 54 NW <31154> +proj=tmerc +lat_0=0 +lon_0=-54 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / Suriname Old TM <31170> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999600 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # Zanderij / Suriname TM <31171> +proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.999900 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 5 <31265> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 6 <31266> +proj=tmerc +lat_0=0 +lon_0=18 +k=1.000000 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 7 <31267> +proj=tmerc +lat_0=0 +lon_0=21 +k=1.000000 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / 3-degree Gauss zone 8 <31268> +proj=tmerc +lat_0=0 +lon_0=24 +k=1.000000 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 5 <31275> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999900 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 6 <31276> +proj=tmerc +lat_0=0 +lon_0=18 +k=0.999900 +x_0=6500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 7 <31277> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 8 <31278> +proj=tmerc +lat_0=0 +lon_0=21 +k=0.999900 +x_0=7500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Balkans zone 8 <31279> +proj=tmerc +lat_0=0 +lon_0=24 +k=0.999900 +x_0=8500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI (Ferro) / Austria West Zone <31281> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria Central Zone <31282> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria East Zone <31283> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI / M28 <31284> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M31 <31285> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M34 <31286> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Austria Lambert <31287> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> # MGI (Ferro) / Austria West Zone <31291> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria Central Zone <31292> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI (Ferro) / Austria East Zone <31293> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=0 +y_0=0 +ellps=bessel +pm=ferro +units=m +no_defs no_defs <> # MGI / M28 <31294> +proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1.000000 +x_0=150000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M31 <31295> +proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1.000000 +x_0=450000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / M34 <31296> +proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1.000000 +x_0=750000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # MGI / Austria Lambert <31297> +proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +units=m +no_defs no_defs <> # Belge 1972 / Belge Lambert 72 <31300> +proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m +no_defs no_defs <> # Belge 1972 / Belgian Lambert 72 <31370> +proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 1 <31461> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 2 <31462> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 3 <31463> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 4 <31464> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / 3-degree Gauss zone 5 <31465> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 2 <31466> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 3 <31467> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 4 <31468> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # DHDN / Gauss-Kruger zone 5 <31469> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs no_defs <> # Conakry 1905 / UTM zone 28N <31528> +proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Conakry 1905 / UTM zone 29N <31529> +proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs no_defs <> # Dealul Piscului 1933/ Stereo 33 <31600> +proj=stere +lat_0=45.9 +lon_0=25.39246588888889 +k=0.999667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs no_defs <> # Dealul Piscului 1970/ Stereo 70 <31700> +proj=stere +lat_0=46 +lon_0=25 +k=0.999750 +x_0=500000 +y_0=500000 +ellps=krass +units=m +no_defs no_defs <> # NGN / UTM zone 38N <31838> +proj=utm +zone=38 +ellps=WGS84 +units=m +no_defs no_defs <> # NGN / UTM zone 39N <31839> +proj=utm +zone=39 +ellps=WGS84 +units=m +no_defs no_defs <> # KUDAMS / KTM <31900> +proj=tmerc +lat_0=0 +lon_0=48 +k=0.999600 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 17N <31986> +proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 18N <31987> +proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 19N <31988> +proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 20N <31989> +proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 21N <31990> +proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 22N <31991> +proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 17S <31992> +proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 18S <31993> +proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 19S <31994> +proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 20S <31995> +proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 21S <31996> +proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 22S <31997> +proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 23S <31998> +proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 24S <31999> +proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # SIRGAS / UTM zone 25S <32000> +proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs no_defs <> # NAD27 / Montana North <32001> +proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Montana Central <32002> +proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Montana South <32003> +proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nebraska North <32005> +proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nebraska South <32006> +proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada East <32007> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada Central <32008> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Nevada West <32009> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Hampshire <32010> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Jersey <32011> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.999975 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico East <32012> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico Central <32013> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New Mexico West <32014> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York East <32015> +proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York Central <32016> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York West <32017> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / New York Long Island <32018> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Carolina <32019> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Dakota North <32020> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / North Dakota South <32021> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Ohio North <32022> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Ohio South <32023> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oklahoma North <32024> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oklahoma South <32025> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oregon North <32026> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Oregon South <32027> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Pennsylvania North <32028> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Pennsylvania South <32029> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Rhode Island <32030> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Carolina North <32031> +proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Carolina South <32033> +proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Dakota North <32034> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / South Dakota South <32035> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Tennessee <32036> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas North <32037> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas North Central <32038> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas Central <32039> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas South Central <32040> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Texas South <32041> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah North <32042> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah Central <32043> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Utah South <32044> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Vermont <32045> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Virginia North <32046> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Virginia South <32047> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Washington North <32048> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Washington South <32049> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / West Virginia North <32050> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / West Virginia South <32051> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin North <32052> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin Central <32053> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wisconsin South <32054> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming East <32055> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming East Central <32056> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming West Central <32057> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Wyoming West <32058> +proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / Guatemala Norte <32061> +proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Guatemala Sur <32062> +proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / BLM 14N (ftUS) <32064> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 15N (ftUS) <32065> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 16N (ftUS) <32066> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 17N (ftUS) <32067> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 14N (feet) <32074> +proj=tmerc +lat_0=0 +lon_0=-99 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 15N (feet) <32075> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 16N (feet) <32076> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / BLM 17N (feet) <32077> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999600 +x_0=500000.001016002 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 +no_defs no_defs <> # NAD27 / MTM zone 1 <32081> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 2 <32082> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 3 <32083> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 4 <32084> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 5 <32085> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / MTM zone 6 <32086> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD27 / Quebec Lambert <32098> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +datum=NAD27 +units=m +no_defs no_defs <> # NAD83 / Montana <32100> +proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nebraska <32104> +proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada East <32107> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada Central <32108> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Nevada West <32109> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Hampshire <32110> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Jersey <32111> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico East <32112> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico Central <32113> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New Mexico West <32114> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York East <32115> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York Central <32116> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York West <32117> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / New York Long Island <32118> +proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Carolina <32119> +proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Dakota North <32120> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / North Dakota South <32121> +proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Ohio North <32122> +proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Ohio South <32123> +proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oklahoma North <32124> +proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oklahoma South <32125> +proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oregon North <32126> +proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Oregon South <32127> +proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Pennsylvania North <32128> +proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Pennsylvania South <32129> +proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Rhode Island <32130> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Carolina <32133> +proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Dakota North <32134> +proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / South Dakota South <32135> +proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Tennessee <32136> +proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas North <32137> +proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas North Central <32138> +proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas Central <32139> +proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas South Central <32140> +proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Texas South <32141> +proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah North <32142> +proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah Central <32143> +proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Utah South <32144> +proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Vermont <32145> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Virginia North <32146> +proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Virginia South <32147> +proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Washington North <32148> +proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Washington South <32149> +proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / West Virginia North <32150> +proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / West Virginia South <32151> +proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin North <32152> +proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin Central <32153> +proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wisconsin South <32154> +proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming East <32155> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming East Central <32156> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming West Central <32157> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Wyoming West <32158> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Puerto Rico & Virgin Is. <32161> +proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / SCoPQ zone 2 <32180> +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 1 <32181> +proj=tmerc +lat_0=0 +lon_0=-53 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 2 <32182> +proj=tmerc +lat_0=0 +lon_0=-56 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 3 <32183> +proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 4 <32184> +proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 5 <32185> +proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 6 <32186> +proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 7 <32187> +proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 8 <32188> +proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 9 <32189> +proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 10 <32190> +proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 11 <32191> +proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 12 <32192> +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 13 <32193> +proj=tmerc +lat_0=0 +lon_0=-84 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 14 <32194> +proj=tmerc +lat_0=0 +lon_0=-87 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 15 <32195> +proj=tmerc +lat_0=0 +lon_0=-90 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 16 <32196> +proj=tmerc +lat_0=0 +lon_0=-93 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / MTM zone 17 <32197> +proj=tmerc +lat_0=0 +lon_0=-96 +k=0.999900 +x_0=304800 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # NAD83 / Quebec Lambert <32198> +proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 1N <32201> +proj=utm +zone=1 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 2N <32202> +proj=utm +zone=2 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 3N <32203> +proj=utm +zone=3 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 4N <32204> +proj=utm +zone=4 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 5N <32205> +proj=utm +zone=5 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 6N <32206> +proj=utm +zone=6 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 7N <32207> +proj=utm +zone=7 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 8N <32208> +proj=utm +zone=8 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 9N <32209> +proj=utm +zone=9 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 10N <32210> +proj=utm +zone=10 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 11N <32211> +proj=utm +zone=11 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 12N <32212> +proj=utm +zone=12 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 13N <32213> +proj=utm +zone=13 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 14N <32214> +proj=utm +zone=14 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 15N <32215> +proj=utm +zone=15 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 16N <32216> +proj=utm +zone=16 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 17N <32217> +proj=utm +zone=17 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 18N <32218> +proj=utm +zone=18 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 19N <32219> +proj=utm +zone=19 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 20N <32220> +proj=utm +zone=20 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 21N <32221> +proj=utm +zone=21 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 22N <32222> +proj=utm +zone=22 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 23N <32223> +proj=utm +zone=23 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 24N <32224> +proj=utm +zone=24 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 25N <32225> +proj=utm +zone=25 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 26N <32226> +proj=utm +zone=26 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 27N <32227> +proj=utm +zone=27 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 28N <32228> +proj=utm +zone=28 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 29N <32229> +proj=utm +zone=29 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 30N <32230> +proj=utm +zone=30 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 31N <32231> +proj=utm +zone=31 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 32N <32232> +proj=utm +zone=32 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 33N <32233> +proj=utm +zone=33 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 34N <32234> +proj=utm +zone=34 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 35N <32235> +proj=utm +zone=35 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 36N <32236> +proj=utm +zone=36 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 37N <32237> +proj=utm +zone=37 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 38N <32238> +proj=utm +zone=38 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 39N <32239> +proj=utm +zone=39 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 40N <32240> +proj=utm +zone=40 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 41N <32241> +proj=utm +zone=41 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 42N <32242> +proj=utm +zone=42 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 43N <32243> +proj=utm +zone=43 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 44N <32244> +proj=utm +zone=44 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 45N <32245> +proj=utm +zone=45 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 46N <32246> +proj=utm +zone=46 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 47N <32247> +proj=utm +zone=47 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 48N <32248> +proj=utm +zone=48 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 49N <32249> +proj=utm +zone=49 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 50N <32250> +proj=utm +zone=50 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 51N <32251> +proj=utm +zone=51 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 52N <32252> +proj=utm +zone=52 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 53N <32253> +proj=utm +zone=53 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 54N <32254> +proj=utm +zone=54 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 55N <32255> +proj=utm +zone=55 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 56N <32256> +proj=utm +zone=56 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 57N <32257> +proj=utm +zone=57 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 58N <32258> +proj=utm +zone=58 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 59N <32259> +proj=utm +zone=59 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 60N <32260> +proj=utm +zone=60 +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 1S <32301> +proj=utm +zone=1 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 2S <32302> +proj=utm +zone=2 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 3S <32303> +proj=utm +zone=3 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 4S <32304> +proj=utm +zone=4 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 5S <32305> +proj=utm +zone=5 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 6S <32306> +proj=utm +zone=6 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 7S <32307> +proj=utm +zone=7 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 8S <32308> +proj=utm +zone=8 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 9S <32309> +proj=utm +zone=9 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 10S <32310> +proj=utm +zone=10 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 11S <32311> +proj=utm +zone=11 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 12S <32312> +proj=utm +zone=12 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 13S <32313> +proj=utm +zone=13 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 14S <32314> +proj=utm +zone=14 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 15S <32315> +proj=utm +zone=15 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 16S <32316> +proj=utm +zone=16 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 17S <32317> +proj=utm +zone=17 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 18S <32318> +proj=utm +zone=18 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 19S <32319> +proj=utm +zone=19 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 20S <32320> +proj=utm +zone=20 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 21S <32321> +proj=utm +zone=21 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 22S <32322> +proj=utm +zone=22 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 23S <32323> +proj=utm +zone=23 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 24S <32324> +proj=utm +zone=24 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 25S <32325> +proj=utm +zone=25 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 26S <32326> +proj=utm +zone=26 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 27S <32327> +proj=utm +zone=27 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 28S <32328> +proj=utm +zone=28 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 29S <32329> +proj=utm +zone=29 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 30S <32330> +proj=utm +zone=30 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 31S <32331> +proj=utm +zone=31 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 32S <32332> +proj=utm +zone=32 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 33S <32333> +proj=utm +zone=33 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 34S <32334> +proj=utm +zone=34 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 35S <32335> +proj=utm +zone=35 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 36S <32336> +proj=utm +zone=36 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 37S <32337> +proj=utm +zone=37 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 38S <32338> +proj=utm +zone=38 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 39S <32339> +proj=utm +zone=39 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 40S <32340> +proj=utm +zone=40 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 41S <32341> +proj=utm +zone=41 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 42S <32342> +proj=utm +zone=42 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 43S <32343> +proj=utm +zone=43 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 44S <32344> +proj=utm +zone=44 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 45S <32345> +proj=utm +zone=45 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 46S <32346> +proj=utm +zone=46 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 47S <32347> +proj=utm +zone=47 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 48S <32348> +proj=utm +zone=48 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 49S <32349> +proj=utm +zone=49 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 50S <32350> +proj=utm +zone=50 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 51S <32351> +proj=utm +zone=51 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 52S <32352> +proj=utm +zone=52 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 53S <32353> +proj=utm +zone=53 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 54S <32354> +proj=utm +zone=54 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 55S <32355> +proj=utm +zone=55 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 56S <32356> +proj=utm +zone=56 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 57S <32357> +proj=utm +zone=57 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 58S <32358> +proj=utm +zone=58 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 59S <32359> +proj=utm +zone=59 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72 / UTM zone 60S <32360> +proj=utm +zone=60 +south +ellps=WGS72 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 1N <32401> +proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 2N <32402> +proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 3N <32403> +proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 4N <32404> +proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 5N <32405> +proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 6N <32406> +proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 7N <32407> +proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 8N <32408> +proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 9N <32409> +proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 10N <32410> +proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 11N <32411> +proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 12N <32412> +proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 13N <32413> +proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 14N <32414> +proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 15N <32415> +proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 16N <32416> +proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 17N <32417> +proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 18N <32418> +proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 19N <32419> +proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 20N <32420> +proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 21N <32421> +proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 22N <32422> +proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 23N <32423> +proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 24N <32424> +proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 25N <32425> +proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 26N <32426> +proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 27N <32427> +proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 28N <32428> +proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 29N <32429> +proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 30N <32430> +proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 31N <32431> +proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 32N <32432> +proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 33N <32433> +proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 34N <32434> +proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 35N <32435> +proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 36N <32436> +proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 37N <32437> +proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 38N <32438> +proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 39N <32439> +proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 40N <32440> +proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 41N <32441> +proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 42N <32442> +proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 43N <32443> +proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 44N <32444> +proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 45N <32445> +proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 46N <32446> +proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 47N <32447> +proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 48N <32448> +proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 49N <32449> +proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 50N <32450> +proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 51N <32451> +proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 52N <32452> +proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 53N <32453> +proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 54N <32454> +proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 55N <32455> +proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 56N <32456> +proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 57N <32457> +proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 58N <32458> +proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 59N <32459> +proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 60N <32460> +proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 1S <32501> +proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 2S <32502> +proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 3S <32503> +proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 4S <32504> +proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 5S <32505> +proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 6S <32506> +proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 7S <32507> +proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 8S <32508> +proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 9S <32509> +proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 10S <32510> +proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 11S <32511> +proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 12S <32512> +proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 13S <32513> +proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 14S <32514> +proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 15S <32515> +proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 16S <32516> +proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 17S <32517> +proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 18S <32518> +proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 19S <32519> +proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 20S <32520> +proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 21S <32521> +proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 22S <32522> +proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 23S <32523> +proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 24S <32524> +proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 25S <32525> +proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 26S <32526> +proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 27S <32527> +proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 28S <32528> +proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 29S <32529> +proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 30S <32530> +proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 31S <32531> +proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 32S <32532> +proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 33S <32533> +proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 34S <32534> +proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 35S <32535> +proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 36S <32536> +proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 37S <32537> +proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 38S <32538> +proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 39S <32539> +proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 40S <32540> +proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 41S <32541> +proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 42S <32542> +proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 43S <32543> +proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 44S <32544> +proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 45S <32545> +proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 46S <32546> +proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 47S <32547> +proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 48S <32548> +proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 49S <32549> +proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 50S <32550> +proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 51S <32551> +proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 52S <32552> +proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 53S <32553> +proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 54S <32554> +proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 55S <32555> +proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 56S <32556> +proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 57S <32557> +proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 58S <32558> +proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 59S <32559> +proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 72BE / UTM zone 60S <32560> +proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 1N <32601> +proj=utm +zone=1 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 2N <32602> +proj=utm +zone=2 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 3N <32603> +proj=utm +zone=3 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 4N <32604> +proj=utm +zone=4 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 5N <32605> +proj=utm +zone=5 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 6N <32606> +proj=utm +zone=6 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 7N <32607> +proj=utm +zone=7 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 8N <32608> +proj=utm +zone=8 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 9N <32609> +proj=utm +zone=9 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 10N <32610> +proj=utm +zone=10 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 11N <32611> +proj=utm +zone=11 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 12N <32612> +proj=utm +zone=12 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 13N <32613> +proj=utm +zone=13 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 14N <32614> +proj=utm +zone=14 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 15N <32615> +proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 16N <32616> +proj=utm +zone=16 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 17N <32617> +proj=utm +zone=17 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 18N <32618> +proj=utm +zone=18 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 19N <32619> +proj=utm +zone=19 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 20N <32620> +proj=utm +zone=20 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 21N <32621> +proj=utm +zone=21 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 22N <32622> +proj=utm +zone=22 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 23N <32623> +proj=utm +zone=23 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 24N <32624> +proj=utm +zone=24 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 25N <32625> +proj=utm +zone=25 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 26N <32626> +proj=utm +zone=26 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 27N <32627> +proj=utm +zone=27 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 28N <32628> +proj=utm +zone=28 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 29N <32629> +proj=utm +zone=29 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 30N <32630> +proj=utm +zone=30 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 31N <32631> +proj=utm +zone=31 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 32N <32632> +proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 33N <32633> +proj=utm +zone=33 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 34N <32634> +proj=utm +zone=34 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 35N <32635> +proj=utm +zone=35 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 36N <32636> +proj=utm +zone=36 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 37N <32637> +proj=utm +zone=37 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 38N <32638> +proj=utm +zone=38 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 39N <32639> +proj=utm +zone=39 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 40N <32640> +proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 41N <32641> +proj=utm +zone=41 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 42N <32642> +proj=utm +zone=42 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 43N <32643> +proj=utm +zone=43 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 44N <32644> +proj=utm +zone=44 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 45N <32645> +proj=utm +zone=45 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 46N <32646> +proj=utm +zone=46 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 47N <32647> +proj=utm +zone=47 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 48N <32648> +proj=utm +zone=48 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 49N <32649> +proj=utm +zone=49 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 50N <32650> +proj=utm +zone=50 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 51N <32651> +proj=utm +zone=51 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 52N <32652> +proj=utm +zone=52 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 53N <32653> +proj=utm +zone=53 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 54N <32654> +proj=utm +zone=54 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 55N <32655> +proj=utm +zone=55 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 56N <32656> +proj=utm +zone=56 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 57N <32657> +proj=utm +zone=57 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 58N <32658> +proj=utm +zone=58 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 59N <32659> +proj=utm +zone=59 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 60N <32660> +proj=utm +zone=60 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UPS North <32661> +proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 1S <32701> +proj=utm +zone=1 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 2S <32702> +proj=utm +zone=2 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 3S <32703> +proj=utm +zone=3 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 4S <32704> +proj=utm +zone=4 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 5S <32705> +proj=utm +zone=5 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 6S <32706> +proj=utm +zone=6 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 7S <32707> +proj=utm +zone=7 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 8S <32708> +proj=utm +zone=8 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 9S <32709> +proj=utm +zone=9 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 10S <32710> +proj=utm +zone=10 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 11S <32711> +proj=utm +zone=11 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 12S <32712> +proj=utm +zone=12 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 13S <32713> +proj=utm +zone=13 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 14S <32714> +proj=utm +zone=14 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 15S <32715> +proj=utm +zone=15 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 16S <32716> +proj=utm +zone=16 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 17S <32717> +proj=utm +zone=17 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 18S <32718> +proj=utm +zone=18 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 19S <32719> +proj=utm +zone=19 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 20S <32720> +proj=utm +zone=20 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 21S <32721> +proj=utm +zone=21 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 22S <32722> +proj=utm +zone=22 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 23S <32723> +proj=utm +zone=23 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 24S <32724> +proj=utm +zone=24 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 25S <32725> +proj=utm +zone=25 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 26S <32726> +proj=utm +zone=26 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 27S <32727> +proj=utm +zone=27 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 28S <32728> +proj=utm +zone=28 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 29S <32729> +proj=utm +zone=29 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 30S <32730> +proj=utm +zone=30 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 31S <32731> +proj=utm +zone=31 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 32S <32732> +proj=utm +zone=32 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 33S <32733> +proj=utm +zone=33 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 34S <32734> +proj=utm +zone=34 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 35S <32735> +proj=utm +zone=35 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 36S <32736> +proj=utm +zone=36 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 37S <32737> +proj=utm +zone=37 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 38S <32738> +proj=utm +zone=38 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 39S <32739> +proj=utm +zone=39 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 40S <32740> +proj=utm +zone=40 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 41S <32741> +proj=utm +zone=41 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 42S <32742> +proj=utm +zone=42 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 43S <32743> +proj=utm +zone=43 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 44S <32744> +proj=utm +zone=44 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 45S <32745> +proj=utm +zone=45 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 46S <32746> +proj=utm +zone=46 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 47S <32747> +proj=utm +zone=47 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 48S <32748> +proj=utm +zone=48 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 49S <32749> +proj=utm +zone=49 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 50S <32750> +proj=utm +zone=50 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 51S <32751> +proj=utm +zone=51 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 52S <32752> +proj=utm +zone=52 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 53S <32753> +proj=utm +zone=53 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 54S <32754> +proj=utm +zone=54 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 55S <32755> +proj=utm +zone=55 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 56S <32756> +proj=utm +zone=56 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 57S <32757> +proj=utm +zone=57 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 58S <32758> +proj=utm +zone=58 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 59S <32759> +proj=utm +zone=59 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UTM zone 60S <32760> +proj=utm +zone=60 +south +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / UPS South <32761> +proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # WGS 84 / TM 36 SE <32766> +proj=tmerc +lat_0=0 +lon_0=36 +k=0.999600 +x_0=500000 +y_0=10000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs no_defs <> # Pulkovo 1995 GK Zone 2 <20002> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 3 <20003> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 2N <20062> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> # Pulkovo 1995 GK Zone 3N <20063> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=500000 +y_0=0 +ellps=krass +units=m no_defs <> # La Canoa UTM Zone 21N <24721> +proj=utm +zone=21 +ellps=intl +units=m no_defs <> # NAD 1927 StatePlane Hawaii 1 FIPS 5101 <26761> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 2 FIPS 5102 <26762> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 3 FIPS 5103 <26763> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 4 FIPS 5104 <26764> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Hawaii 5 FIPS 5105 <26765> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan North FIPS 2111 <26788> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan Central FIPS 2112 <26789> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Michigan South FIPS 2113 <26790> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024385 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # Nord Algerie <30591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Sud Algerie <30592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Germany Zone 1 <31491> +proj=tmerc +lat_0=0 +lon_0=3 +k=1.000000 +x_0=1500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 2 <31492> +proj=tmerc +lat_0=0 +lon_0=6 +k=1.000000 +x_0=2500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 3 <31493> +proj=tmerc +lat_0=0 +lon_0=9 +k=1.000000 +x_0=3500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 4 <31494> +proj=tmerc +lat_0=0 +lon_0=12 +k=1.000000 +x_0=4500000 +y_0=0 +ellps=bessel +units=m no_defs <> # Germany Zone 5 <31495> +proj=tmerc +lat_0=0 +lon_0=15 +k=1.000000 +x_0=5500000 +y_0=0 +ellps=bessel +units=m no_defs <> # NAD 1927 StatePlane Puerto Rico FIPS 5201 <32059> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 StatePlane Virgin Islands St Croix FIPS 5202 <32060> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012193 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # Sphere Plate Carree <53001> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Equidistant Cylindrical <53002> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Miller Cylindrical <53003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Mercator <53004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Sinusoidal <53008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Mollweide <53009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert VI <53010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert V <53011> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert IV <53012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert III <53013> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert II <53014> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Eckert I <53015> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Gall Stereographic <53016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Behrmann <53017> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Winkel I <53018> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Winkel II <53019> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Polyconic <53021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Quartic Authalic <53022> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Loximuthal <53023> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Bonne <53024> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Hotine <53025> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Stereographic <53026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Equidistant Conic <53027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Cassini <53028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Van der Grinten I <53029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Robinson <53030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Two Point Equidistant <53031> +a=6371000 +b=6371000 +units=m no_defs <> # Sphere Azimuthal Equidistant <53032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m no_defs <> # World Plate Carree <54001> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Equidistant Cylindrical <54002> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Miller Cylindrical <54003> +proj=mill +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Mercator <54004> +proj=merc +lat_ts=0 +lon_0=0 +k=1.000000 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Sinusoidal <54008> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Mollweide <54009> +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert VI <54010> +proj=eck6 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert V <54011> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert IV <54012> +proj=eck4 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert III <54013> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert II <54014> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Eckert I <54015> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Gall Stereographic <54016> +proj=gall +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Behrmann <54017> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Winkel I <54018> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Winkel II <54019> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Polyconic <54021> +proj=poly +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Quartic Authalic <54022> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Loximuthal <54023> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Bonne <54024> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Hotine <54025> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Stereographic <54026> +proj=stere +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Equidistant Conic <54027> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=60 +lat_2=60 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Cassini <54028> +proj=cass +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Van der Grinten I <54029> +proj=vandg +lon_0=0 +x_0=0 +y_0=0 +R_A +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Robinson <54030> +proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Two Point Equidistant <54031> +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # World Azimuthal Equidistant <54032> +proj=aeqd +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # NAD 1927 StatePlane Guam FIPS 5400 <65061> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000.00000000001 +y_0=50000.00000000001 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Guam FIPS 5400 <65161> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=50000 +y_0=50000 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Canada Albers Equal Area Conic <102001> +proj=aea +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Canada Lambert Conformal Conic <102002> +proj=lcc +lat_1=50 +lat_2=70 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Albers Equal Area Conic <102003> +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Lambert Conformal Conic <102004> +proj=lcc +lat_1=33 +lat_2=45 +lat_0=39 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # USA Contiguous Equidistant Conic <102005> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=33 +lat_2=45 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Alaska Albers Equal Area Conic <102006> +proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Hawaii Albers Equal Area Conic <102007> +proj=aea +lat_1=8 +lat_2=18 +lat_0=13 +lon_0=-157 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Albers Equal Area Conic <102008> +proj=aea +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Lambert Conformal Conic <102009> +proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # North America Equidistant Conic <102010> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=60 +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # Africa Sinusoidal <102011> +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia Lambert Conformal Conic <102012> +proj=lcc +lat_1=30 +lat_2=62 +lat_0=0 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Europe Albers Equal Area Conic <102013> +proj=aea +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # Europe Lambert Conformal Conic <102014> +proj=lcc +lat_1=43 +lat_2=62 +lat_0=30 +lon_0=10 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # South America Lambert Conformal Conic <102015> +proj=lcc +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # North Pole Azimuthal Equidistant <102016> +proj=aeqd +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # North Pole Lambert Azimuthal Equal Area <102017> +proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # North Pole Stereographic <102018> +proj=stere +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Azimuthal Equidistant <102019> +proj=aeqd +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Lambert Azimuthal Equal Area <102020> +proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # South Pole Stereographic <102021> +proj=stere +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Albers Equal Area Conic <102022> +proj=aea +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Equidistant Conic <102023> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=20 +lat_2=-23 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Africa Lambert Conformal Conic <102024> +proj=lcc +lat_1=20 +lat_2=-23 +lat_0=0 +lon_0=25 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Albers Equal Area Conic <102025> +proj=aea +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Equidistant Conic <102026> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=15 +lat_2=65 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia North Lambert Conformal Conic <102027> +proj=lcc +lat_1=15 +lat_2=65 +lat_0=30 +lon_0=95 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Albers Equal Area Conic <102028> +proj=aea +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Equidistant Conic <102029> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=7 +lat_2=-32 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Asia South Lambert Conformal Conic <102030> +proj=lcc +lat_1=7 +lat_2=-32 +lat_0=-15 +lon_0=125 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs <> # Europe Equidistant Conic <102031> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=43 +lat_2=62 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # South America Equidistant Conic <102032> +proj=eqdc +lat_0=0 +lon_0=0 +lat_1=-5 +lat_2=-42 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # South America Albers Equal Area Conic <102033> +proj=aea +lat_1=-5 +lat_2=-42 +lat_0=-32 +lon_0=-60 +x_0=0 +y_0=0 +ellps=aust_SA +units=m no_defs <> # S-JTSK Krovak <102065> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> # S-JTSK Ferro Krovak East North <102066> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +pm=-17.66666666666667 +units=m no_defs <> # S-JTSK Krovak East North <102067> +proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813975277778 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +units=m no_defs <> # Monte Mario Italy 1 <102091> +proj=tmerc +lat_0=0 +lon_0=9 +k=0.999600 +x_0=1500000 +y_0=0 +ellps=intl +units=m no_defs <> # Monte Mario Italy 2 <102092> +proj=tmerc +lat_0=0 +lon_0=15 +k=0.999600 +x_0=2520000 +y_0=0 +ellps=intl +units=m no_defs <> # NGO 1948 Norway Zone 1 <102101> +proj=tmerc +lat_0=58 +lon_0=6.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 2 <102102> +proj=tmerc +lat_0=58 +lon_0=8.389583333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 3 <102103> +proj=tmerc +lat_0=58 +lon_0=10.72291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 4 <102104> +proj=tmerc +lat_0=58 +lon_0=13.22291666666667 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 5 <102105> +proj=tmerc +lat_0=58 +lon_0=16.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 6 <102106> +proj=tmerc +lat_0=58 +lon_0=20.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 7 <102107> +proj=tmerc +lat_0=58 +lon_0=24.88958333333333 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 Norway Zone 8 <102108> +proj=tmerc +lat_0=58 +lon_0=29.05625 +k=1.000000 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # RGF 1993 Lambert 93 <102110> +proj=lcc +lat_1=44 +lat_2=49 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +units=m no_defs <> # Old Hawaiian UTM Zone 4N <102114> +proj=utm +zone=4 +ellps=clrk66 +units=m no_defs <> # Old Hawaiian UTM Zone 5N <102115> +proj=utm +zone=5 +ellps=clrk66 +units=m no_defs <> # NAD 1927 Michigan GeoRef Feet US <102120> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=clrk66 +datum=NAD27 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 Michigan GeoRef Feet US <102121> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.495961392 +y_0=-4354009.816002033 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1927 Michigan GeoRef Meters <102122> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=clrk66 +datum=NAD27 +units=m no_defs <> # NAD 1983 Michigan GeoRef Meters <102123> +proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.255555555556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +ellps=GRS80 +datum=NAD83 +units=m no_defs <> # NGO 1948 UTM Zone 32N <102132> +proj=utm +zone=32 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 33N <102133> +proj=utm +zone=33 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 34N <102134> +proj=utm +zone=34 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # NGO 1948 UTM Zone 35N <102135> +proj=utm +zone=35 +a=6377492.018 +b=6356173.508712696 +units=m no_defs <> # Hong Kong 1980 Grid <102140> +proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1.000000 +x_0=836694.05 +y_0=819069.8 +ellps=intl +units=m no_defs <> # Hong Kong 1980 UTM Zone 49N <102141> +proj=utm +zone=49 +ellps=intl +units=m no_defs <> # Hong Kong 1980 UTM Zone 50N <102142> +proj=utm +zone=50 +ellps=intl +units=m no_defs <> # Tokyo UTM Zone 51N <102151> +proj=utm +zone=51 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 52N <102152> +proj=utm +zone=52 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 53N <102153> +proj=utm +zone=53 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 54N <102154> +proj=utm +zone=54 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 55N <102155> +proj=utm +zone=55 +ellps=bessel +units=m no_defs <> # Tokyo UTM Zone 56N <102156> +proj=utm +zone=56 +ellps=bessel +units=m no_defs <> # Datum 73 Hayford Gauss IGeoE <102160> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200180.598 +y_0=299913.01 +ellps=intl +units=m no_defs <> # Datum 73 Hayford Gauss IPCC <102161> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +units=m no_defs <> # Graciosa Base SW 1948 UTM Zone 26N <102162> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> # Lisboa Bessel Bonne <102163> +ellps=bessel +units=m no_defs <> # Lisboa Hayford Gauss IGeoE <102164> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=200000 +y_0=300000 +ellps=intl +units=m no_defs <> # Lisboa Hayford Gauss IPCC <102165> +proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1.000000 +x_0=0 +y_0=0 +ellps=intl +units=m no_defs <> # Observ Meteorologico 1939 UTM Zone 25N <102166> +proj=utm +zone=25 +ellps=intl +units=m no_defs <> # Porto Santo 1936 UTM Zone 28N <102167> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> # Sao Braz UTM Zone 26N <102168> +proj=utm +zone=26 +ellps=intl +units=m no_defs <> # Selvagem Grande 1938 UTM Zone 28N <102169> +proj=utm +zone=28 +ellps=intl +units=m no_defs <> # Nord Maroc Degree <102191> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sud Maroc Degree <102192> +proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sahara Degree <102193> +proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NAD 1983 HARN StatePlane Alabama East FIPS 0101 <102229> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Alabama West FIPS 0102 <102230> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California I FIPS 0401 <102241> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California II FIPS 0402 <102242> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California III FIPS 0403 <102243> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California IV FIPS 0404 <102244> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California V FIPS 0405 <102245> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane California VI FIPS 0406 <102246> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona East FIPS 0201 <102248> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona Central FIPS 0202 <102249> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arizona West FIPS 0203 <102250> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arkansas North FIPS 0301 <102251> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Arkansas South FIPS 0302 <102252> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado North FIPS 0501 <102253> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado Central FIPS 0502 <102254> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Colorado South FIPS 0503 <102255> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Connecticut FIPS 0600 <102256> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Delaware FIPS 0700 <102257> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida East FIPS 0901 <102258> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida West FIPS 0902 <102259> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Florida North FIPS 0903 <102260> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 1 FIPS 5101 <102261> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 2 FIPS 5102 <102262> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 3 FIPS 5103 <102263> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 4 FIPS 5104 <102264> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Hawaii 5 FIPS 5105 <102265> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Georgia East FIPS 1001 <102266> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Georgia West FIPS 1002 <102267> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho East FIPS 1101 <102268> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho Central FIPS 1102 <102269> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Idaho West FIPS 1103 <102270> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=800000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Illinois East FIPS 1201 <102271> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Illinois West FIPS 1202 <102272> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Indiana East FIPS 1301 <102273> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Indiana West FIPS 1302 <102274> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000 +y_0=250000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kansas North FIPS 1501 <102277> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kansas South FIPS 1502 <102278> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kentucky North FIPS 1601 <102279> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Kentucky South FIPS 1602 <102280> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Louisiana North FIPS 1701 <102281> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Louisiana South FIPS 1702 <102282> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maine East FIPS 1801 <102283> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maine West FIPS 1802 <102284> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Maryland FIPS 1900 <102285> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Massachusetts Mainland FIPS 2001 <102286> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Massachusetts Island FIPS 2002 <102287> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan North FIPS 2111 <102288> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan Central FIPS 2112 <102289> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Michigan South FIPS 2113 <102290> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota North FIPS 2201 <102291> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota Central FIPS 2202 <102292> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Minnesota South FIPS 2203 <102293> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Mississippi East FIPS 2301 <102294> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Mississippi West FIPS 2302 <102295> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri East FIPS 2401 <102296> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri Central FIPS 2402 <102297> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Missouri West FIPS 2403 <102298> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Montana FIPS 2500 <102300> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nebraska FIPS 2600 <102304> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada East FIPS 2701 <102307> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=8000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada Central FIPS 2702 <102308> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000 +y_0=6000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Nevada West FIPS 2703 <102309> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=800000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Hampshire FIPS 2800 <102310> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Jersey FIPS 2900 <102311> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico East FIPS 3001 <102312> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico Central FIPS 3002 <102313> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New Mexico West FIPS 3003 <102314> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=830000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York East FIPS 3101 <102315> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York Central FIPS 3102 <102316> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York West FIPS 3103 <102317> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane New York Long Island FIPS 3104 <102318> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane North Dakota North FIPS 3301 <102320> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane North Dakota South FIPS 3302 <102321> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Ohio North FIPS 3401 <102322> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Ohio South FIPS 3402 <102323> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oklahoma North FIPS 3501 <102324> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oklahoma South FIPS 3502 <102325> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oregon North FIPS 3601 <102326> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Oregon South FIPS 3602 <102327> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Rhode Island FIPS 3800 <102330> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane South Dakota North FIPS 4001 <102334> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane South Dakota South FIPS 4002 <102335> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Tennessee FIPS 4100 <102336> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas North FIPS 4201 <102337> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas North Central FIPS 4202 <102338> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas Central FIPS 4203 <102339> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas South Central FIPS 4204 <102340> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Texas South FIPS 4205 <102341> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah North FIPS 4301 <102342> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah Central FIPS 4302 <102343> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Utah South FIPS 4303 <102344> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Vermont FIPS 4400 <102345> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Virginia North FIPS 4501 <102346> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Virginia South FIPS 4502 <102347> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Washington North FIPS 4601 <102348> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Washington South FIPS 4602 <102349> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane West Virginia North FIPS 4701 <102350> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane West Virginia South FIPS 4702 <102351> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin North FIPS 4801 <102352> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin Central FIPS 4802 <102353> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wisconsin South FIPS 4803 <102354> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming East FIPS 4901 <102355> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming East Central FIPS 4902 <102356> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=400000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming West Central FIPS 4903 <102357> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000 +y_0=0 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Wyoming West FIPS 4904 <102358> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=800000 +y_0=100000 +ellps=GRS80 +units=m no_defs <> # NAD 1983 HARN StatePlane Puerto Rico Virgin Islands FIPS 5200 <102361> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +units=m no_defs <> # Nord Algerie Ancienne Degree <102491> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Sud Algerie Ancienne Degree <102492> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France I degrees <102581> +proj=lcc +lat_1=49.5 +lat_0=49.5 +lon_0=2.337229166666667 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France II degrees <102582> +proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France III degrees <102583> +proj=lcc +lat_1=44.1 +lat_0=44.1 +lon_0=2.337229166666667 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # NTF France IV degrees <102584> +proj=lcc +lat_1=42.165 +lat_0=42.165 +lon_0=2.337229166666667 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356514.999904194 +units=m no_defs <> # Nord Algerie Degree <102591> +proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # Sud Algerie Degree <102592> +proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +units=m no_defs <> # NAD 1983 StatePlane Alabama East FIPS 0101 Feet <102629> +proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.999960 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alabama West FIPS 0102 Feet <102630> +proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 1 FIPS 5001 Feet <102631> +proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=-36.86989764583333 +k=0.9999 +x_0=4999999.999999999 +y_0=-4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 2 FIPS 5002 Feet <102632> +proj=tmerc +lat_0=54 +lon_0=-142 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 3 FIPS 5003 Feet <102633> +proj=tmerc +lat_0=54 +lon_0=-146 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 4 FIPS 5004 Feet <102634> +proj=tmerc +lat_0=54 +lon_0=-150 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 5 FIPS 5005 Feet <102635> +proj=tmerc +lat_0=54 +lon_0=-154 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 6 FIPS 5006 Feet <102636> +proj=tmerc +lat_0=54 +lon_0=-158 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 7 FIPS 5007 Feet <102637> +proj=tmerc +lat_0=54 +lon_0=-162 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 8 FIPS 5008 Feet <102638> +proj=tmerc +lat_0=54 +lon_0=-166 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 9 FIPS 5009 Feet <102639> +proj=tmerc +lat_0=54 +lon_0=-170 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Alaska 10 FIPS 5010 Feet <102640> +proj=lcc +lat_1=51.83333333333334 +lat_2=53.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California I FIPS 0401 Feet <102641> +proj=lcc +lat_1=40 +lat_2=41.66666666666666 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California II FIPS 0402 Feet <102642> +proj=lcc +lat_1=38.33333333333334 +lat_2=39.83333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California III FIPS 0403 Feet <102643> +proj=lcc +lat_1=37.06666666666667 +lat_2=38.43333333333333 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California IV FIPS 0404 Feet <102644> +proj=lcc +lat_1=36 +lat_2=37.25 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California V FIPS 0405 Feet <102645> +proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane California VI FIPS 0406 Feet <102646> +proj=lcc +lat_1=32.78333333333333 +lat_2=33.88333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona East FIPS 0201 Feet <102648> +proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona Central FIPS 0202 Feet <102649> +proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.999900 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arizona West FIPS 0203 Feet <102650> +proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933 +x_0=213360 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arkansas North FIPS 0301 Feet <102651> +proj=lcc +lat_1=34.93333333333333 +lat_2=36.23333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Arkansas South FIPS 0302 Feet <102652> +proj=lcc +lat_1=33.3 +lat_2=34.76666666666667 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado North FIPS 0501 Feet <102653> +proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado Central FIPS 0502 Feet <102654> +proj=lcc +lat_1=38.45 +lat_2=39.75 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Colorado South FIPS 0503 Feet <102655> +proj=lcc +lat_1=37.23333333333333 +lat_2=38.43333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Connecticut FIPS 0600 Feet <102656> +proj=lcc +lat_1=41.2 +lat_2=41.86666666666667 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Delaware FIPS 0700 Feet <102657> +proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida East FIPS 0901 Feet <102658> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida West FIPS 0902 Feet <102659> +proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Florida North FIPS 0903 Feet <102660> +proj=lcc +lat_1=29.58333333333333 +lat_2=30.75 +lat_0=29 +lon_0=-84.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 1 FIPS 5101 Feet <102661> +proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 2 FIPS 5102 Feet <102662> +proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999967 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 3 FIPS 5103 Feet <102663> +proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 4 FIPS 5104 Feet <102664> +proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.999990 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Hawaii 5 FIPS 5105 Feet <102665> +proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1.000000 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Georgia East FIPS 1001 Feet <102666> +proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.999900 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Georgia West FIPS 1002 Feet <102667> +proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.999900 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho East FIPS 1101 Feet <102668> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.999947 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho Central FIPS 1102 Feet <102669> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.999947 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Idaho West FIPS 1103 Feet <102670> +proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933 +x_0=799999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Illinois East FIPS 1201 Feet <102671> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.999975 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Illinois West FIPS 1202 Feet <102672> +proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Indiana East FIPS 1301 Feet <102673> +proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999967 +x_0=100000 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Indiana West FIPS 1302 Feet <102674> +proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999967 +x_0=900000.0000000001 +y_0=250000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Iowa North FIPS 1401 Feet <102675> +proj=lcc +lat_1=42.06666666666667 +lat_2=43.26666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Iowa South FIPS 1402 Feet <102676> +proj=lcc +lat_1=40.61666666666667 +lat_2=41.78333333333333 +lat_0=40 +lon_0=-93.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kansas North FIPS 1501 Feet <102677> +proj=lcc +lat_1=38.71666666666667 +lat_2=39.78333333333333 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kansas South FIPS 1502 Feet <102678> +proj=lcc +lat_1=37.26666666666667 +lat_2=38.56666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.9999999999 +y_0=399999.9999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kentucky North FIPS 1601 Feet <102679> +proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Kentucky South FIPS 1602 Feet <102680> +proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0000000002 +y_0=500000.0000000002 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Louisiana North FIPS 1701 Feet <102681> +proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Louisiana South FIPS 1702 Feet <102682> +proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maine East FIPS 1801 Feet <102683> +proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.999900 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maine West FIPS 1802 Feet <102684> +proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999967 +x_0=900000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Maryland FIPS 1900 Feet <102685> +proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Massachusetts Mainland FIPS 2001 Feet <102686> +proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000.0000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Massachusetts Island FIPS 2002 Feet <102687> +proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan North FIPS 2111 Feet <102688> +proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan Central FIPS 2112 Feet <102689> +proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000.000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Michigan South FIPS 2113 Feet <102690> +proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota North FIPS 2201 Feet <102691> +proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota Central FIPS 2202 Feet <102692> +proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Minnesota South FIPS 2203 Feet <102693> +proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Mississippi East FIPS 2301 Feet <102694> +proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.999950 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Mississippi West FIPS 2302 Feet <102695> +proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.999950 +x_0=700000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri East FIPS 2401 Feet <102696> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri Central FIPS 2402 Feet <102697> +proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Missouri West FIPS 2403 Feet <102698> +proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941 +x_0=850000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Montana FIPS 2500 Feet <102700> +proj=lcc +lat_1=45 +lat_2=49 +lat_0=44.25 +lon_0=-109.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nebraska FIPS 2600 Feet <102704> +proj=lcc +lat_1=40 +lat_2=43 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada East FIPS 2701 Feet <102707> +proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.999900 +x_0=200000 +y_0=7999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada Central FIPS 2702 Feet <102708> +proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.999900 +x_0=500000.0000000002 +y_0=6000000.000000001 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Nevada West FIPS 2703 Feet <102709> +proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.999900 +x_0=799999.9999999999 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Hampshire FIPS 2800 Feet <102710> +proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999967 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Jersey FIPS 2900 Feet <102711> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico East FIPS 3001 Feet <102712> +proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909 +x_0=165000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico Central FIPS 3002 Feet <102713> +proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.999900 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New Mexico West FIPS 3003 Feet <102714> +proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999917 +x_0=829999.9999999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York East FIPS 3101 Feet <102715> +proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.999900 +x_0=150000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York Central FIPS 3102 Feet <102716> +proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.999938 +x_0=250000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York West FIPS 3103 Feet <102717> +proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.999938 +x_0=350000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane New York Long Island FIPS 3104 Feet <102718> +proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Carolina FIPS 3200 Feet <102719> +proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2199999999 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Dakota North FIPS 3301 Feet <102720> +proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane North Dakota South FIPS 3302 Feet <102721> +proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Ohio North FIPS 3401 Feet <102722> +proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Ohio South FIPS 3402 Feet <102723> +proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oklahoma North FIPS 3501 Feet <102724> +proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oklahoma South FIPS 3502 Feet <102725> +proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oregon North FIPS 3601 Feet <102726> +proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Oregon South FIPS 3602 Feet <102727> +proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Pennsylvania North FIPS 3701 Feet <102728> +proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Pennsylvania South FIPS 3702 Feet <102729> +proj=lcc +lat_1=39.93333333333333 +lat_2=40.96666666666667 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Rhode Island FIPS 3800 Feet <102730> +proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.999994 +x_0=100000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Carolina FIPS 3900 Feet <102733> +proj=lcc +lat_1=32.5 +lat_2=34.83333333333334 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Dakota North FIPS 4001 Feet <102734> +proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane South Dakota South FIPS 4002 Feet <102735> +proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Tennessee FIPS 4100 Feet <102736> +proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas North FIPS 4201 Feet <102737> +proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas North Central FIPS 4202 Feet <102738> +proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000.0000000001 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas Central FIPS 4203 Feet <102739> +proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas South Central FIPS 4204 Feet <102740> +proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000.0000000001 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Texas South FIPS 4205 Feet <102741> +proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=4999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah North FIPS 4301 Feet <102742> +proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah Central FIPS 4302 Feet <102743> +proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Utah South FIPS 4303 Feet <102744> +proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0000000002 +y_0=3000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Vermont FIPS 4400 Feet <102745> +proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Virginia North FIPS 4501 Feet <102746> +proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=2000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Virginia South FIPS 4502 Feet <102747> +proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3499999.999999999 +y_0=1000000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Washington North FIPS 4601 Feet <102748> +proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Washington South FIPS 4602 Feet <102749> +proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0000000002 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane West Virginia North FIPS 4701 Feet <102750> +proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane West Virginia South FIPS 4702 Feet <102751> +proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin North FIPS 4801 Feet <102752> +proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin Central FIPS 4802 Feet <102753> +proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wisconsin South FIPS 4803 Feet <102754> +proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming East FIPS 4901 Feet <102755> +proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.999938 +x_0=200000 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming East Central FIPS 4902 Feet <102756> +proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.999938 +x_0=399999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming West Central FIPS 4903 Feet <102757> +proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.999938 +x_0=600000.0000000001 +y_0=0 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Wyoming West FIPS 4904 Feet <102758> +proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.999938 +x_0=799999.9999999999 +y_0=100000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Puerto Rico Virgin Islands FIPS 5200 Feet <102761> +proj=lcc +lat_1=18.03333333333334 +lat_2=18.43333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # NAD 1983 StatePlane Guam FIPS 5400 Feet <102766> +proj=poly +lat_0=13.47246635277778 +lon_0=-144.7487507055556 +x_0=49999.99999999999 +y_0=49999.99999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 no_defs <> # Belge Lambert 1972 <103300> +proj=lcc +lat_1=49.8333339 +lat_2=51.16666733333333 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +units=m no_defs <> # GCS International 1967 <4023> +proj=longlat +ellps=aust_SA no_defs <> # GCS Bern 1898 <4217> +proj=longlat +ellps=bessel no_defs <> # GCS Voirol Unifie 1960 <4305> +proj=longlat +ellps=clrk80 no_defs <> # GCS Montserrat 1958 <4404> +proj=longlat +ellps=clrk80 no_defs <> # GCS Voirol Unifie 1960 Paris <4812> +proj=longlat +ellps=clrk80 +pm=2.337229166666667 no_defs <> # GCS WGS 1966 <37001> +proj=longlat +ellps=WGS66 no_defs <> # GCS Fischer 1960 <37002> +proj=longlat +a=6378166 +b=6356784.283607107 no_defs <> # GCS Fischer 1968 <37003> +proj=longlat +a=6378150 +b=6356768.337244385 no_defs <> # GCS Fischer Modified <37004> +proj=longlat +ellps=fschr60m no_defs <> # GCS Hough 1960 <37005> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> # GCS Everest Modified 1969 <37006> +proj=longlat +a=6377295.664 +b=6356094.667915204 no_defs <> # GCS Walbeck <37007> +proj=longlat +a=6376896 +b=6355834.846687363 no_defs <> # GCS Sphere ARC INFO <37008> +proj=longlat +a=6370997 +b=6370997 no_defs <> # GCS European 1979 <37201> +proj=longlat +ellps=intl no_defs <> # GCS Everest Bangladesh <37202> +proj=longlat +a=6377276.345 +b=6356075.413140239 no_defs <> # GCS Everest India Nepal <37203> +proj=longlat +a=6377301.243 +b=6356100.230165385 no_defs <> # GCS Hjorsey 1955 <37204> +proj=longlat +ellps=intl no_defs <> # GCS Hong Kong 1963 <37205> +proj=longlat +ellps=intl no_defs <> # GCS Oman <37206> +proj=longlat +ellps=clrk80 no_defs <> # GCS South Asia Singapore <37207> +proj=longlat +ellps=fschr60m no_defs <> # GCS Ayabelle <37208> +proj=longlat +ellps=clrk80 no_defs <> # GCS Point 58 <37211> +proj=longlat +ellps=clrk80 no_defs <> # GCS Beacon E 1945 <37212> +proj=longlat +ellps=intl no_defs <> # GCS Tern Island 1961 <37213> +proj=longlat +ellps=intl no_defs <> # GCS Astro 1952 <37214> +proj=longlat +ellps=intl no_defs <> # GCS Bellevue IGN <37215> +proj=longlat +ellps=intl no_defs <> # GCS Canton 1966 <37216> +proj=longlat +ellps=intl no_defs <> # GCS Chatham Island 1971 <37217> +proj=longlat +ellps=intl no_defs <> # GCS DOS 1968 <37218> +proj=longlat +ellps=intl no_defs <> # GCS Easter Island 1967 <37219> +proj=longlat +ellps=intl no_defs <> # GCS Guam 1963 <37220> +proj=longlat +ellps=clrk66 no_defs <> # GCS GUX 1 <37221> +proj=longlat +ellps=intl no_defs <> # GCS Johnston Island 1961 <37222> +proj=longlat +ellps=intl no_defs <> # GCS Carthage Degree <37223> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Midway 1961 <37224> +proj=longlat +ellps=intl no_defs <> # GCS Pitcairn 1967 <37226> +proj=longlat +ellps=intl no_defs <> # GCS Santo DOS 1965 <37227> +proj=longlat +ellps=intl no_defs <> # GCS Viti Levu 1916 <37228> +proj=longlat +ellps=clrk80 no_defs <> # GCS Wake Eniwetok 1960 <37229> +proj=longlat +a=6378270 +b=6356794.343434343 no_defs <> # GCS Wake Island 1952 <37230> +proj=longlat +ellps=intl no_defs <> # GCS Anna 1 1965 <37231> +proj=longlat +ellps=aust_SA no_defs <> # GCS Gan 1970 <37232> +proj=longlat +ellps=intl no_defs <> # GCS ISTS 073 1969 <37233> +proj=longlat +ellps=intl no_defs <> # GCS Kerguelen Island 1949 <37234> +proj=longlat +ellps=intl no_defs <> # GCS Reunion <37235> +proj=longlat +ellps=intl no_defs <> # GCS Ascension Island 1958 <37237> +proj=longlat +ellps=intl no_defs <> # GCS DOS 71 4 <37238> +proj=longlat +ellps=intl no_defs <> # GCS Cape Canaveral <37239> +proj=longlat +ellps=clrk66 no_defs <> # GCS Fort Thomas 1955 <37240> +proj=longlat +ellps=clrk80 no_defs <> # GCS Graciosa Base SW 1948 <37241> +proj=longlat +ellps=intl no_defs <> # GCS ISTS 061 1968 <37242> +proj=longlat +ellps=intl no_defs <> # GCS LC5 1961 <37243> +proj=longlat +ellps=clrk66 no_defs <> # GCS Observ Meteorologico 1939 <37245> +proj=longlat +ellps=intl no_defs <> # GCS Pico de Las Nieves <37246> +proj=longlat +ellps=intl no_defs <> # GCS Porto Santo 1936 <37247> +proj=longlat +ellps=intl no_defs <> # GCS Sao Braz <37249> +proj=longlat +ellps=intl no_defs <> # GCS Selvagem Grande 1938 <37250> +proj=longlat +ellps=intl no_defs <> # GCS Tristan 1968 <37251> +proj=longlat +ellps=intl no_defs <> # GCS Samoa 1962 <37252> +proj=longlat +ellps=clrk66 no_defs <> # GCS Camp Area <37253> +proj=longlat +ellps=intl no_defs <> # GCS Deception Island <37254> +proj=longlat +ellps=clrk80 no_defs <> # GCS Gunung Segara <37255> +proj=longlat +ellps=bessel no_defs <> # GCS S42 Hungary <37257> +proj=longlat +ellps=krass no_defs <> # GCS Kusaie 1951 <37259> +proj=longlat +ellps=intl no_defs <> # GCS Alaskan Islands <37260> +proj=longlat +ellps=clrk66 no_defs <> # GCS Assumed Geographic 1 <104000> +proj=longlat +ellps=clrk66 +datum=NAD27 no_defs <> # GCS Estonia 1937 <104101> +proj=longlat +ellps=bessel no_defs <> # GCS Hermannskogel <104102> +proj=longlat +ellps=bessel no_defs <> # GCS Sierra Leone 1960 <104103> +proj=longlat +ellps=clrk80 no_defs <> # GCS Hong Kong 1980 <104104> +proj=longlat +ellps=intl no_defs <> # GCS Datum Lisboa Bessel <104105> +proj=longlat +ellps=bessel no_defs <> # GCS Datum Lisboa Hayford <104106> +proj=longlat +ellps=intl no_defs <> # GCS RGF 1993 <104107> +proj=longlat +ellps=GRS80 no_defs <> # GCS NZGD 2000 <104108> +proj=longlat +ellps=GRS80 no_defs <> # GCS Merchich Degree <104261> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Voirol 1875 Degree <104304> +proj=longlat +a=6378249.2 +b=6356514.999904194 no_defs <> # GCS Voirol Unifie 1960 Degree <104305> +proj=longlat +ellps=clrk80 no_defs <> therion-5.4.1/extern/proj4/nad_cvt.c000066400000000000000000000043011307545355600173310ustar00rootroot00000000000000#define PJ_LIB__ #include #define MAX_TRY 9 #define TOL 1e-12 LP nad_cvt(LP in, int inverse, struct CTABLE *ct) { LP t, tb; if (in.lam == HUGE_VAL) return in; /* normalize input to ll origin */ tb = in; tb.lam -= ct->ll.lam; tb.phi -= ct->ll.phi; tb.lam = adjlon(tb.lam - PI) + PI; t = nad_intr(tb, ct); if (inverse) { LP del, dif; int i = MAX_TRY; if (t.lam == HUGE_VAL) return t; t.lam = tb.lam + t.lam; t.phi = tb.phi - t.phi; do { del = nad_intr(t, ct); /* This case used to return failure, but I have changed it to return the first order approximation of the inverse shift. This avoids cases where the grid shift *into* this grid came from another grid. While we aren't returning optimally correct results I feel a close result in this case is better than no result. NFW To demonstrate use -112.5839956 49.4914451 against the NTv2 grid shift file from Canada. */ if (del.lam == HUGE_VAL) { if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "Inverse grid shift iteration failed, presumably at grid edge.\n" "Using first approximation.\n" ); /* return del */; break; } t.lam -= dif.lam = t.lam - del.lam - tb.lam; t.phi -= dif.phi = t.phi + del.phi - tb.phi; } while (i-- && fabs(dif.lam) > TOL && fabs(dif.phi) > TOL); if (i < 0) { if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "Inverse grid shift iterator failed to converge.\n" ); t.lam = t.phi = HUGE_VAL; return t; } in.lam = adjlon(t.lam + ct->ll.lam); in.phi = t.phi + ct->ll.phi; } else { if (t.lam == HUGE_VAL) in = t; else { in.lam -= t.lam; in.phi += t.phi; } } return in; } therion-5.4.1/extern/proj4/nad_init.c000066400000000000000000000132431307545355600175050ustar00rootroot00000000000000/****************************************************************************** * $Id: nad_init.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Load datum shift files into memory. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ /************************************************************************/ /* nad_ctable_load() */ /* */ /* Load the data portion of a ctable formatted grid. */ /************************************************************************/ int nad_ctable_load( struct CTABLE *ct, FILE *fid ) { int a_size; fseek( fid, sizeof(struct CTABLE), SEEK_SET ); /* read all the actual shift values */ a_size = ct->lim.lam * ct->lim.phi; ct->cvs = (FLP *) pj_malloc(sizeof(FLP) * a_size); if( ct->cvs == NULL || fread(ct->cvs, sizeof(FLP), a_size, fid) != a_size ) { pj_dalloc( ct->cvs ); ct->cvs = NULL; if( getenv("PROJ_DEBUG") != NULL ) { fprintf( stderr, "ctable loading failed on fread() - binary incompatible?\n" ); } pj_errno = -38; return 0; } return 1; } /************************************************************************/ /* nad_ctable_init() */ /* */ /* Read the header portion of a "ctable" format grid. */ /************************************************************************/ struct CTABLE *nad_ctable_init( FILE * fid ) { struct CTABLE *ct; int id_end; /* read the table header */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); if( ct == NULL || fread( ct, sizeof(struct CTABLE), 1, fid ) != 1 ) { pj_errno = -38; return NULL; } /* do some minimal validation to ensure the structure isn't corrupt */ if( ct->lim.lam < 1 || ct->lim.lam > 100000 || ct->lim.phi < 1 || ct->lim.phi > 100000 ) { pj_errno = -38; return NULL; } /* trim white space and newlines off id */ for( id_end = strlen(ct->id)-1; id_end > 0; id_end-- ) { if( ct->id[id_end] == '\n' || ct->id[id_end] == ' ' ) ct->id[id_end] = '\0'; else break; } ct->cvs = NULL; return ct; } /************************************************************************/ /* nad_init() */ /* */ /* Read a datum shift file in any of the supported binary formats. */ /************************************************************************/ struct CTABLE *nad_init(char *name) { char fname[MAX_PATH_FILENAME+1]; struct CTABLE *ct; FILE *fid; char header[512]; errno = pj_errno = 0; /* -------------------------------------------------------------------- */ /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, name); if (!(fid = pj_open_lib(fname, "rb"))) { pj_errno = errno; return 0; } ct = nad_ctable_init( fid ); if( ct != NULL ) { if( !nad_ctable_load( ct, fid ) ) { nad_free( ct ); ct = NULL; } } fclose(fid); return ct; } /************************************************************************/ /* nad_free() */ /* */ /* Free a CTABLE grid shift structure produced by nad_init(). */ /************************************************************************/ void nad_free(struct CTABLE *ct) { if (ct) { if( ct->cvs != NULL ) pj_dalloc(ct->cvs); pj_dalloc(ct); } } therion-5.4.1/extern/proj4/nad_intr.c000066400000000000000000000027011307545355600175130ustar00rootroot00000000000000/* Determine nad table correction value */ #define PJ_LIB__ #include LP nad_intr(LP t, struct CTABLE *ct) { LP val, frct; ILP indx; double m00, m10, m01, m11; FLP *f00, *f10, *f01, *f11; long index; int in; indx.lam = floor(t.lam /= ct->del.lam); indx.phi = floor(t.phi /= ct->del.phi); frct.lam = t.lam - indx.lam; frct.phi = t.phi - indx.phi; val.lam = val.phi = HUGE_VAL; if (indx.lam < 0) { if (indx.lam == -1 && frct.lam > 0.99999999999) { ++indx.lam; frct.lam = 0.; } else return val; } else if ((in = indx.lam + 1) >= ct->lim.lam) { if (in == ct->lim.lam && frct.lam < 1e-11) { --indx.lam; frct.lam = 1.; } else return val; } if (indx.phi < 0) { if (indx.phi == -1 && frct.phi > 0.99999999999) { ++indx.phi; frct.phi = 0.; } else return val; } else if ((in = indx.phi + 1) >= ct->lim.phi) { if (in == ct->lim.phi && frct.phi < 1e-11) { --indx.phi; frct.phi = 1.; } else return val; } index = indx.phi * ct->lim.lam + indx.lam; f00 = ct->cvs + index++; f10 = ct->cvs + index; index += ct->lim.lam; f11 = ct->cvs + index--; f01 = ct->cvs + index; m11 = m10 = frct.lam; m00 = m01 = 1. - frct.lam; m11 *= frct.phi; m01 *= frct.phi; frct.phi = 1. - frct.phi; m00 *= frct.phi; m10 *= frct.phi; val.lam = m00 * f00->lam + m10 * f10->lam + m01 * f01->lam + m11 * f11->lam; val.phi = m00 * f00->phi + m10 * f10->phi + m01 * f01->phi + m11 * f11->phi; return val; } therion-5.4.1/extern/proj4/nad_list.h000066400000000000000000000003771307545355600175260ustar00rootroot00000000000000/* projection list for program nad2nad */ PROJ_HEAD(lcc, "Lambert Conformal Conic") PROJ_HEAD(omerc, "Oblique Mercator") PROJ_HEAD(poly, "Polyconic (American)") PROJ_HEAD(tmerc, "Transverse Mercator") PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") therion-5.4.1/extern/proj4/org_proj4_Projections.h000066400000000000000000000017511307545355600222120ustar00rootroot00000000000000/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class org_proj4_Projections */ #ifndef _Included_org_proj4_Projections #define _Included_org_proj4_Projections #ifdef __cplusplus extern "C" { #endif /* * Class: org_proj4_Projections * Method: getProjInfo * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getProjInfo (JNIEnv *, jobject, jstring); /* * Class: org_proj4_Projections * Method: getEllipsInfo * Signature: (Ljava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_proj4_Projections_getEllipsInfo (JNIEnv *, jobject, jstring); /* * Class: org_proj4_Projections * Method: transform * Signature: ([D[D[DLjava/lang/String;Ljava/lang/String;JI)V */ JNIEXPORT void JNICALL Java_org_proj4_Projections_transform (JNIEnv *, jobject, jdoubleArray, jdoubleArray, jdoubleArray, jstring, jstring, jlong, jint); #ifdef __cplusplus } #endif #endif therion-5.4.1/extern/proj4/pj_apply_gridshift.c000066400000000000000000000125631307545355600216050ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_apply_gridshift.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum shifts based on grid shift files (normally NAD27 to * NAD83 or the reverse). This module is responsible for keeping * a list of loaded grids, and calling with each one that is * allowed for a given datum (expressed as the nadgrids= parameter). * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include /************************************************************************/ /* pj_apply_gridshift() */ /************************************************************************/ int pj_apply_gridshift( const char *nadgrids, int inverse, long point_count, int point_offset, double *x, double *y, double *z ) { int grid_count = 0; PJ_GRIDINFO **tables; int i; int debug_flag = getenv( "PROJ_DEBUG" ) != NULL; static int debug_count = 0; pj_errno = 0; tables = pj_gridlist_from_nadgrids( nadgrids, &grid_count); if( tables == NULL || grid_count == 0 ) return pj_errno; for( i = 0; i < point_count; i++ ) { long io = i * point_offset; LP input, output; int itable; input.phi = y[io]; input.lam = x[io]; output.phi = HUGE_VAL; output.lam = HUGE_VAL; /* keep trying till we find a table that works */ for( itable = 0; itable < grid_count; itable++ ) { PJ_GRIDINFO *gi = tables[itable]; struct CTABLE *ct = gi->ct; /* skip tables that don't match our point at all. */ if( ct->ll.phi > input.phi || ct->ll.lam > input.lam || ct->ll.phi + (ct->lim.phi-1) * ct->del.phi < input.phi || ct->ll.lam + (ct->lim.lam-1) * ct->del.lam < input.lam ) continue; /* If we have child nodes, check to see if any of them apply. */ if( gi->child != NULL ) { PJ_GRIDINFO *child; for( child = gi->child; child != NULL; child = child->next ) { struct CTABLE *ct1 = child->ct; if( ct1->ll.phi > input.phi || ct1->ll.lam > input.lam || ct1->ll.phi+(ct1->lim.phi-1)*ct1->del.phi < input.phi || ct1->ll.lam+(ct1->lim.lam-1)*ct1->del.lam < input.lam) continue; break; } /* we found a more refined child node to use */ if( child != NULL ) { gi = child; ct = child->ct; } } /* load the grid shift info if we don't have it. */ if( ct->cvs == NULL && !pj_gridinfo_load( gi ) ) { pj_errno = -38; return pj_errno; } output = nad_cvt( input, inverse, ct ); if( output.lam != HUGE_VAL ) { if( debug_flag && debug_count++ < 20 ) fprintf( stderr, "pj_apply_gridshift(): used %s\n", ct->id ); break; } } if( output.lam == HUGE_VAL ) { if( debug_flag ) { fprintf( stderr, "pj_apply_gridshift(): failed to find a grid shift table for\n" " location (%.7fdW,%.7fdN)\n", x[io] * RAD_TO_DEG, y[io] * RAD_TO_DEG ); fprintf( stderr, " tried: %s\n", nadgrids ); } pj_errno = -38; return pj_errno; } else { y[io] = output.phi; x[io] = output.lam; } } return 0; } therion-5.4.1/extern/proj4/pj_auth.c000066400000000000000000000013271307545355600173520ustar00rootroot00000000000000/* determine latitude from authalic latitude */ #include # define P00 .33333333333333333333 # define P01 .17222222222222222222 # define P02 .10257936507936507936 # define P10 .06388888888888888888 # define P11 .06640211640211640211 # define P20 .01641501294219154443 #define APA_SIZE 3 double * pj_authset(double es) { double t, *APA; if (APA = (double *)pj_malloc(APA_SIZE * sizeof(double))) { APA[0] = es * P00; t = es * es; APA[0] += t * P01; APA[1] = t * P10; t *= es; APA[0] += t * P02; APA[1] += t * P11; APA[2] = t * P20; } return APA; } double pj_authlat(double beta, double *APA) { double t = beta+beta; return(beta + APA[0] * sin(t) + APA[1] * sin(t+t) + APA[2] * sin(t+t+t)); } therion-5.4.1/extern/proj4/pj_datum_set.c000066400000000000000000000131421307545355600203740ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_datum_set.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Apply datum definition to PJ structure from initialization string. * Author: Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include /* SEC_TO_RAD = Pi/180/3600 */ #define SEC_TO_RAD 4.84813681109535993589914102357e-6 /************************************************************************/ /* pj_datum_set() */ /************************************************************************/ int pj_datum_set(paralist *pl, PJ *projdef) { const char *name, *towgs84, *nadgrids; projdef->datum_type = PJD_UNKNOWN; /* -------------------------------------------------------------------- */ /* Is there a datum definition in the parameters list? If so, */ /* add the defining values to the parameter list. Note that */ /* this will append the ellipse definition as well as the */ /* towgs84= and related parameters. It should also be pointed */ /* out that the addition is permanent rather than temporary */ /* like most other keyword expansion so that the ellipse */ /* definition will last into the pj_ell_set() function called */ /* after this one. */ /* -------------------------------------------------------------------- */ if( (name = pj_param(pl,"sdatum").s) != NULL ) { paralist *curr; const char *s; int i; /* find the end of the list, so we can add to it */ for (curr = pl; curr && curr->next ; curr = curr->next) {} /* find the datum definition */ for (i = 0; (s = pj_datums[i].id) && strcmp(name, s) ; ++i) {} if (!s) { pj_errno = -9; return 1; } if( pj_datums[i].ellipse_id && strlen(pj_datums[i].ellipse_id) > 0 ) { char entry[100]; strcpy( entry, "ellps=" ); strncat( entry, pj_datums[i].ellipse_id, 80 ); curr = curr->next = pj_mkparam(entry); } if( pj_datums[i].defn && strlen(pj_datums[i].defn) > 0 ) curr = curr->next = pj_mkparam(pj_datums[i].defn); } /* -------------------------------------------------------------------- */ /* Check for nadgrids parameter. */ /* -------------------------------------------------------------------- */ if( (nadgrids = pj_param(pl,"snadgrids").s) != NULL ) { /* We don't actually save the value separately. It will continue to exist int he param list for use in pj_apply_gridshift.c */ projdef->datum_type = PJD_GRIDSHIFT; } /* -------------------------------------------------------------------- */ /* Check for towgs84 parameter. */ /* -------------------------------------------------------------------- */ else if( (towgs84 = pj_param(pl,"stowgs84").s) != NULL ) { int parm_count = 0; const char *s; memset( projdef->datum_params, 0, sizeof(double) * 7); /* parse out the parameters */ s = towgs84; for( s = towgs84; *s != '\0' && parm_count < 7; ) { projdef->datum_params[parm_count++] = atof(s); while( *s != '\0' && *s != ',' ) s++; if( *s == ',' ) s++; } if( projdef->datum_params[3] != 0.0 || projdef->datum_params[4] != 0.0 || projdef->datum_params[5] != 0.0 || projdef->datum_params[6] != 0.0 ) { projdef->datum_type = PJD_7PARAM; /* transform from arc seconds to radians */ projdef->datum_params[3] *= SEC_TO_RAD; projdef->datum_params[4] *= SEC_TO_RAD; projdef->datum_params[5] *= SEC_TO_RAD; /* transform from parts per million to scaling factor */ projdef->datum_params[6] = (projdef->datum_params[6]/1000000.0) + 1; } else projdef->datum_type = PJD_3PARAM; /* Note that pj_init() will later switch datum_type to PJD_WGS84 if shifts are all zero, and ellipsoid is WGS84 or GRS80 */ } return 0; } therion-5.4.1/extern/proj4/pj_datums.c000066400000000000000000000073401307545355600177070ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_datums.c 1558 2009-04-02 18:25:58Z warmerdam $ * * Project: PROJ.4 * Purpose: Built in datum list. * Author: Frank Warmerdam, warmerda@home.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_DATUMS__ #include /* * The ellipse code must match one from pj_ellps.c. The datum id should * be kept to 12 characters or less if possible. Use the official OGC * datum name for the comments if available. */ C_NAMESPACE_VAR struct PJ_DATUMS pj_datums[] = { /* id definition ellipse comments */ /* -- ---------- ------- -------- */ "WGS84", "towgs84=0,0,0", "WGS84", "", "GGRS87", "towgs84=-199.87,74.79,246.62", "GRS80", "Greek_Geodetic_Reference_System_1987", "NAD83", "towgs84=0,0,0", "GRS80", "North_American_Datum_1983", "NAD27", "nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", "clrk66", "North_American_Datum_1927", "potsdam", "towgs84=606.0,23.0,413.0", "bessel", "Potsdam Rauenberg 1950 DHDN", "carthage", "towgs84=-263.0,6.0,431.0", "clark80", "Carthage 1934 Tunisia", "hermannskogel", "towgs84=653.0,-212.0,449.0", "bessel", "Hermannskogel", "ire65", "towgs84=482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", "mod_airy", "Ireland 1965", "nzgd49", "towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", "intl", "New Zealand Geodetic Datum 1949", "OSGB36", "towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", "airy", "Airy 1830", NULL, NULL, NULL, NULL }; struct PJ_DATUMS *pj_get_datums_ref() { return pj_datums; } C_NAMESPACE_VAR struct PJ_PRIME_MERIDIANS pj_prime_meridians[] = { /* id definition */ /* -- ---------- */ "greenwich", "0dE", "lisbon", "9d07'54.862\"W", "paris", "2d20'14.025\"E", "bogota", "74d04'51.3\"W", "madrid", "3d41'16.58\"W", "rome", "12d27'8.4\"E", "bern", "7d26'22.5\"E", "jakarta", "106d48'27.79\"E", "ferro", "17d40'W", "brussels", "4d22'4.71\"E", "stockholm", "18d3'29.8\"E", "athens", "23d42'58.815\"E", "oslo", "10d43'22.5\"E", NULL, NULL }; struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref() { return pj_prime_meridians; } therion-5.4.1/extern/proj4/pj_deriv.c000066400000000000000000000015601307545355600175210ustar00rootroot00000000000000/* dervative of (*P->fwd) projection */ #define PJ_LIB__ #include "projects.h" int pj_deriv(LP lp, double h, PJ *P, struct DERIVS *der) { XY t; lp.lam += h; lp.phi += h; if (fabs(lp.phi) > HALFPI) return 1; h += h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l = t.x; der->y_p = t.y; der->x_p = -t.x; der->y_l = -t.y; lp.phi -= h; if (fabs(lp.phi) > HALFPI) return 1; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l += t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l -= t.y; lp.lam -= h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l -= t.x; der->y_p -= t.y; der->x_p += t.x; der->y_l += t.y; lp.phi += h; t = (*P->fwd)(lp, P); if (t.x == HUGE_VAL) return 1; der->x_l -= t.x; der->y_p += t.y; der->x_p -= t.x; der->y_l += t.y; der->x_l /= (h += h); der->y_p /= h; der->x_p /= h; der->y_l /= h; return 0; } therion-5.4.1/extern/proj4/pj_ell_set.c000066400000000000000000000062111307545355600200350ustar00rootroot00000000000000/* set ellipsoid parameters a and es */ #include #include #define SIXTH .1666666666666666667 /* 1/6 */ #define RA4 .04722222222222222222 /* 17/360 */ #define RA6 .02215608465608465608 /* 67/3024 */ #define RV4 .06944444444444444444 /* 5/72 */ #define RV6 .04243827160493827160 /* 55/1296 */ int /* initialize geographic shape parameters */ pj_ell_set(paralist *pl, double *a, double *es) { int i; double b=0.0, e; char *name; paralist *start = 0, *curr; /* check for varying forms of ellipsoid input */ *a = *es = 0.; /* R takes precedence */ if (pj_param(pl, "tR").i) *a = pj_param(pl, "dR").f; else { /* probable elliptical figure */ /* check if ellps present and temporarily append its values to pl */ if (name = pj_param(pl, "sellps").s) { char *s; for (start = pl; start && start->next ; start = start->next) ; curr = start; for (i = 0; (s = pj_ellps[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -9; return 1; } curr = curr->next = pj_mkparam(pj_ellps[i].major); curr = curr->next = pj_mkparam(pj_ellps[i].ell); } *a = pj_param(pl, "da").f; if (pj_param(pl, "tes").i) /* eccentricity squared */ *es = pj_param(pl, "des").f; else if (pj_param(pl, "te").i) { /* eccentricity */ e = pj_param(pl, "de").f; *es = e * e; } else if (pj_param(pl, "trf").i) { /* recip flattening */ *es = pj_param(pl, "drf").f; if (!*es) { pj_errno = -10; goto bomb; } *es = 1./ *es; *es = *es * (2. - *es); } else if (pj_param(pl, "tf").i) { /* flattening */ *es = pj_param(pl, "df").f; *es = *es * (2. - *es); } else if (pj_param(pl, "tb").i) { /* minor axis */ b = pj_param(pl, "db").f; *es = 1. - (b * b) / (*a * *a); } /* else *es == 0. and sphere of radius *a */ if (!b) b = *a * sqrt(1. - *es); /* following options turn ellipsoid into equivalent sphere */ if (pj_param(pl, "bR_A").i) { /* sphere--area of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RA4 + *es * RA6)); *es = 0.; } else if (pj_param(pl, "bR_V").i) { /* sphere--vol. of ellipsoid */ *a *= 1. - *es * (SIXTH + *es * (RV4 + *es * RV6)); *es = 0.; } else if (pj_param(pl, "bR_a").i) { /* sphere--arithmetic mean */ *a = .5 * (*a + b); *es = 0.; } else if (pj_param(pl, "bR_g").i) { /* sphere--geometric mean */ *a = sqrt(*a * b); *es = 0.; } else if (pj_param(pl, "bR_h").i) { /* sphere--harmonic mean */ *a = 2. * *a * b / (*a + b); *es = 0.; } else if ((i = pj_param(pl, "tR_lat_a").i) || /* sphere--arith. */ pj_param(pl, "tR_lat_g").i) { /* or geom. mean at latitude */ double tmp; tmp = sin(pj_param(pl, i ? "rR_lat_a" : "rR_lat_g").f); if (fabs(tmp) > HALFPI) { pj_errno = -11; goto bomb; } tmp = 1. - *es * tmp * tmp; *a *= i ? .5 * (1. - *es + tmp) / ( tmp * sqrt(tmp)) : sqrt(1. - *es) / tmp; *es = 0.; } bomb: if (start) { /* clean up temporary extension of list */ pj_dalloc(start->next->next); pj_dalloc(start->next); start->next = 0; } if (pj_errno) return 1; } /* some remaining checks */ if (*es < 0.) { pj_errno = -12; return 1; } if (*a <= 0.) { pj_errno = -13; return 1; } return 0; } therion-5.4.1/extern/proj4/pj_ellps.c000066400000000000000000000053011307545355600175240ustar00rootroot00000000000000/* definition of standard geoids */ #define PJ_ELLPS__ #include "projects.h" C_NAMESPACE_VAR struct PJ_ELLPS pj_ellps[] = { "MERIT", "a=6378137.0", "rf=298.257", "MERIT 1983", "SGS85", "a=6378136.0", "rf=298.257", "Soviet Geodetic System 85", "GRS80", "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)", "IAU76", "a=6378140.0", "rf=298.257", "IAU 1976", "airy", "a=6377563.396", "b=6356256.910", "Airy 1830", "APL4.9", "a=6378137.0.", "rf=298.25", "Appl. Physics. 1965", "NWL9D", "a=6378145.0.", "rf=298.25", "Naval Weapons Lab., 1965", "mod_airy", "a=6377340.189", "b=6356034.446", "Modified Airy", "andrae", "a=6377104.43", "rf=300.0", "Andrae 1876 (Den., Iclnd.)", "aust_SA", "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969", "GRS67", "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)", "bessel", "a=6377397.155", "rf=299.1528128", "Bessel 1841", "bess_nam", "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)", "clrk66", "a=6378206.4", "b=6356583.8", "Clarke 1866", "clrk80", "a=6378249.145", "rf=293.4663", "Clarke 1880 mod.", "CPM", "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799", "delmbr", "a=6376428.", "rf=311.5", "Delambre 1810 (Belgium)", "engelis", "a=6378136.05", "rf=298.2566", "Engelis 1985", "evrst30", "a=6377276.345", "rf=300.8017", "Everest 1830", "evrst48", "a=6377304.063", "rf=300.8017", "Everest 1948", "evrst56", "a=6377301.243", "rf=300.8017", "Everest 1956", "evrst69", "a=6377295.664", "rf=300.8017", "Everest 1969", "evrstSS", "a=6377298.556", "rf=300.8017", "Everest (Sabah & Sarawak)", "fschr60", "a=6378166.", "rf=298.3", "Fischer (Mercury Datum) 1960", "fschr60m", "a=6378155.", "rf=298.3", "Modified Fischer 1960", "fschr68", "a=6378150.", "rf=298.3", "Fischer 1968", "helmert", "a=6378200.", "rf=298.3", "Helmert 1906", "hough", "a=6378270.0", "rf=297.", "Hough", "intl", "a=6378388.0", "rf=297.", "International 1909 (Hayford)", "krass", "a=6378245.0", "rf=298.3", "Krassovsky, 1942", "kaula", "a=6378163.", "rf=298.24", "Kaula 1961", "lerch", "a=6378139.", "rf=298.257", "Lerch 1979", "mprts", "a=6397300.", "rf=191.", "Maupertius 1738", "new_intl", "a=6378157.5", "b=6356772.2", "New International 1967", "plessis", "a=6376523.", "b=6355863.", "Plessis 1817 (France)", "SEasia", "a=6378155.0", "b=6356773.3205", "Southeast Asia", "walbeck", "a=6376896.0", "b=6355834.8467", "Walbeck", "WGS60", "a=6378165.0", "rf=298.3", "WGS 60", "WGS66", "a=6378145.0", "rf=298.25", "WGS 66", "WGS72", "a=6378135.0", "rf=298.26", "WGS 72", "WGS84", "a=6378137.0", "rf=298.257223563", "WGS 84", "sphere", "a=6370997.0", "b=6370997.0", "Normal Sphere (r=6370997)", 0,0,0,0 }; struct PJ_ELLPS *pj_get_ellps_ref() { return pj_ellps; } therion-5.4.1/extern/proj4/pj_errno.c000066400000000000000000000006151307545355600175350ustar00rootroot00000000000000/* For full ANSI compliance of global variable */ #include C_NAMESPACE_VAR int pj_errno = 0; /************************************************************************/ /* pj_get_errno_ref() */ /************************************************************************/ int *pj_get_errno_ref() { return &pj_errno; } /* end */ therion-5.4.1/extern/proj4/pj_factors.c000066400000000000000000000046251307545355600200560ustar00rootroot00000000000000/* projection scale factors */ #define PJ_LIB__ #include #include #ifndef DEFAULT_H #define DEFAULT_H 1e-5 /* radian default for numeric h */ #endif #define EPS 1.0e-12 int pj_factors(LP lp, PJ *P, double h, struct FACTORS *fac) { struct DERIVS der; double cosphi, t, n, r; /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { pj_errno = -14; return 1; } else { /* proceed */ errno = pj_errno = 0; if (h < EPS) h = DEFAULT_H; if (fabs(lp.phi) > (HALFPI - h)) /* adjust to value around pi/2 where derived still exists*/ lp.phi = lp.phi < 0. ? (-HALFPI+h) : (HALFPI-h); else if (P->geoc) lp.phi = atan(P->rone_es * tan(lp.phi)); lp.lam -= P->lam0; /* compute del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust del longitude */ if (P->spc) /* get what projection analytic values */ P->spc(lp, P, fac); if (((fac->code & (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) != (IS_ANAL_XL_YL+IS_ANAL_XP_YP)) && pj_deriv(lp, h, P, &der)) return 1; if (!(fac->code & IS_ANAL_XL_YL)) { fac->der.x_l = der.x_l; fac->der.y_l = der.y_l; } if (!(fac->code & IS_ANAL_XP_YP)) { fac->der.x_p = der.x_p; fac->der.y_p = der.y_p; } cosphi = cos(lp.phi); if (!(fac->code & IS_ANAL_HK)) { fac->h = hypot(fac->der.x_p, fac->der.y_p); fac->k = hypot(fac->der.x_l, fac->der.y_l) / cosphi; if (P->es) { t = sin(lp.phi); t = 1. - P->es * t * t; n = sqrt(t); fac->h *= t * n / P->one_es; fac->k *= n; r = t * t / P->one_es; } else r = 1.; } else if (P->es) { r = sin(lp.phi); r = 1. - P->es * r * r; r = r * r / P->one_es; } else r = 1.; /* convergence */ if (!(fac->code & IS_ANAL_CONV)) { fac->conv = - atan2(fac->der.y_l, fac->der.x_l); if (fac->code & IS_ANAL_XL_YL) fac->code |= IS_ANAL_CONV; } /* areal scale factor */ fac->s = (fac->der.y_p * fac->der.x_l - fac->der.x_p * fac->der.y_l) * r / cosphi; /* meridian-parallel angle theta prime */ fac->thetap = aasin(fac->s / (fac->h * fac->k)); /* Tissot ellips axis */ t = fac->k * fac->k + fac->h * fac->h; fac->a = sqrt(t + 2. * fac->s); t = (t = t - 2. * fac->s) <= 0. ? 0. : sqrt(t); fac->b = 0.5 * (fac->a - t); fac->a = 0.5 * (fac->a + t); /* omega */ fac->omega = 2. * aasin((fac->a - fac->b)/(fac->a + fac->b)); } return 0; } therion-5.4.1/extern/proj4/pj_fwd.c000066400000000000000000000016631307545355600171740ustar00rootroot00000000000000/* general forward projection */ #define PJ_LIB__ #include #include # define EPS 1.0e-12 XY /* forward projection entry */ pj_fwd(LP lp, PJ *P) { XY xy; double t; /* check for forward and latitude or longitude overange */ if ((t = fabs(lp.phi)-HALFPI) > EPS || fabs(lp.lam) > 10.) { xy.x = xy.y = HUGE_VAL; pj_errno = -14; } else { /* proceed with projection */ errno = pj_errno = 0; if (fabs(t) <= EPS) lp.phi = lp.phi < 0. ? -HALFPI : HALFPI; else if (P->geoc) lp.phi = atan(P->rone_es * tan(lp.phi)); lp.lam -= P->lam0; /* compute del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust del longitude */ xy = (*P->fwd)(lp, P); /* project */ if (pj_errno || (pj_errno = errno)) xy.x = xy.y = HUGE_VAL; /* adjust for major axis and easting/northings */ else { xy.x = P->fr_meter * (P->a * xy.x + P->x0); xy.y = P->fr_meter * (P->a * xy.y + P->y0); } } return xy; } therion-5.4.1/extern/proj4/pj_gauss.c000066400000000000000000000053011307545355600175270ustar00rootroot00000000000000/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: pj_gauss.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PJ_LIB__ #include #define MAX_ITER 20 struct GAUSS { double C; double K; double e; double ratexp; }; #define EN ((struct GAUSS *)en) #define DEL_TOL 1e-14 static double srat(double esinp, double exp) { return(pow((1.-esinp)/(1.+esinp), exp)); } void * pj_gauss_ini(double e, double phi0, double *chi, double *rc) { double sphi, cphi, es; struct GAUSS *en; if ((en = (struct GAUSS *)malloc(sizeof(struct GAUSS))) == NULL) return (NULL); es = e * e; EN->e = e; sphi = sin(phi0); cphi = cos(phi0); cphi *= cphi; *rc = sqrt(1. - es) / (1. - es * sphi * sphi); EN->C = sqrt(1. + es * cphi * cphi / (1. - es)); *chi = asin(sphi / EN->C); EN->ratexp = 0.5 * EN->C * e; EN->K = tan(.5 * *chi + FORTPI) / ( pow(tan(.5 * phi0 + FORTPI), EN->C) * srat(EN->e * sphi, EN->ratexp) ); return ((void *)en); } LP pj_gauss(LP elp, const void *en) { LP slp; slp.phi = 2. * atan( EN->K * pow(tan(.5 * elp.phi + FORTPI), EN->C) * srat(EN->e * sin(elp.phi), EN->ratexp) ) - HALFPI; slp.lam = EN->C * (elp.lam); return(slp); } LP pj_inv_gauss(LP slp, const void *en) { LP elp; double num; int i; elp.lam = slp.lam / EN->C; num = pow(tan(.5 * slp.phi + FORTPI)/EN->K, 1./EN->C); for (i = MAX_ITER; i; --i) { elp.phi = 2. * atan(num * srat(EN->e * sin(slp.phi), -.5 * EN->e)) - HALFPI; if (fabs(elp.phi - slp.phi) < DEL_TOL) break; slp.phi = elp.phi; } /* convergence failed */ if (!i) pj_errno = -17; return (elp); } therion-5.4.1/extern/proj4/pj_geocent.c000066400000000000000000000041641307545355600200370ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Stub projection for geocentric. The transformation isn't * really done here since this code is 2D. The real transformation * is handled by pj_transform.c. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include PJ_CVSID("$Id: pj_geocent.c 1504 2009-01-06 02:11:57Z warmerdam $"); PROJ_HEAD(geocent, "Geocentric") "\n\t"; FORWARD(forward); xy.x = lp.lam; xy.y = lp.phi; return xy; } INVERSE(inverse); lp.phi = xy.y; lp.lam = xy.x; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(geocent) P->is_geocent = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) therion-5.4.1/extern/proj4/pj_gridinfo.c000066400000000000000000000562641307545355600202240ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_gridinfo.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Functions for handling individual PJ_GRIDINFO's. Includes * loaders for all formats but CTABLE (in nad_init.c). * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ /************************************************************************/ /* swap_words() */ /* */ /* Convert the byte order of the given word(s) in place. */ /************************************************************************/ static int byte_order_test = 1; #define IS_LSB (((unsigned char *) (&byte_order_test))[0] == 1) static void swap_words( unsigned char *data, int word_size, int word_count ) { int word; for( word = 0; word < word_count; word++ ) { int i; for( i = 0; i < word_size/2; i++ ) { int t; t = data[i]; data[i] = data[word_size-i-1]; data[word_size-i-1] = t; } data += word_size; } } /************************************************************************/ /* pj_gridinfo_free() */ /************************************************************************/ void pj_gridinfo_free( PJ_GRIDINFO *gi ) { if( gi == NULL ) return; if( gi->child != NULL ) { PJ_GRIDINFO *child, *next; for( child = gi->child; child != NULL; child=next) { next=child->next; pj_gridinfo_free( child ); } } if( gi->ct != NULL ) nad_free( gi->ct ); free( gi->gridname ); if( gi->filename != NULL ) free( gi->filename ); pj_dalloc( gi ); } /************************************************************************/ /* pj_gridinfo_load() */ /* */ /* This function is intended to implement delayed loading of */ /* the data contents of a grid file. The header and related */ /* stuff are loaded by pj_gridinfo_init(). */ /************************************************************************/ int pj_gridinfo_load( PJ_GRIDINFO *gi ) { if( gi == NULL || gi->ct == NULL ) return 0; /* -------------------------------------------------------------------- */ /* ctable is currently loaded on initialization though there is */ /* no real reason not to support delayed loading for it as well. */ /* -------------------------------------------------------------------- */ if( strcmp(gi->format,"ctable") == 0 ) { FILE *fid; int result; fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } result = nad_ctable_load( gi->ct, fid ); fclose( fid ); return result; } /* -------------------------------------------------------------------- */ /* NTv1 format. */ /* We process one line at a time. Note that the array storage */ /* direction (e-w) is different in the NTv1 file and what */ /* the CTABLE is supposed to have. The phi/lam are also */ /* reversed, and we have to be aware of byte swapping. */ /* -------------------------------------------------------------------- */ else if( strcmp(gi->format,"ntv1") == 0 ) { double *row_buf; int row; FILE *fid; fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } fseek( fid, gi->grid_offset, SEEK_SET ); row_buf = (double *) pj_malloc(gi->ct->lim.lam * sizeof(double) * 2); gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { pj_errno = -38; return 0; } for( row = 0; row < gi->ct->lim.phi; row++ ) { int i; FLP *cvs; double *diff_seconds; if( fread( row_buf, sizeof(double), gi->ct->lim.lam * 2, fid ) != 2 * gi->ct->lim.lam ) { pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); pj_errno = -38; return 0; } if( IS_LSB ) swap_words( (unsigned char *) row_buf, 8, gi->ct->lim.lam*2 ); /* convert seconds to radians */ diff_seconds = row_buf; for( i = 0; i < gi->ct->lim.lam; i++ ) { cvs = gi->ct->cvs + (row) * gi->ct->lim.lam + (gi->ct->lim.lam - i - 1); cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); } } pj_dalloc( row_buf ); fclose( fid ); return 1; } /* -------------------------------------------------------------------- */ /* NTv2 format. */ /* We process one line at a time. Note that the array storage */ /* direction (e-w) is different in the NTv2 file and what */ /* the CTABLE is supposed to have. The phi/lam are also */ /* reversed, and we have to be aware of byte swapping. */ /* -------------------------------------------------------------------- */ else if( strcmp(gi->format,"ntv2") == 0 ) { float *row_buf; int row; FILE *fid; if( getenv("PROJ_DEBUG") != NULL ) { fprintf( stderr, "NTv2 - loading grid %s\n", gi->ct->id ); } fid = pj_open_lib( gi->filename, "rb" ); if( fid == NULL ) { pj_errno = -38; return 0; } fseek( fid, gi->grid_offset, SEEK_SET ); row_buf = (float *) pj_malloc(gi->ct->lim.lam * sizeof(float) * 4); gi->ct->cvs = (FLP *) pj_malloc(gi->ct->lim.lam*gi->ct->lim.phi*sizeof(FLP)); if( row_buf == NULL || gi->ct->cvs == NULL ) { pj_errno = -38; return 0; } for( row = 0; row < gi->ct->lim.phi; row++ ) { int i; FLP *cvs; float *diff_seconds; if( fread( row_buf, sizeof(float), gi->ct->lim.lam*4, fid ) != 4 * gi->ct->lim.lam ) { pj_dalloc( row_buf ); pj_dalloc( gi->ct->cvs ); gi->ct->cvs = NULL; pj_errno = -38; return 0; } if( !IS_LSB ) swap_words( (unsigned char *) row_buf, 4, gi->ct->lim.lam*4 ); /* convert seconds to radians */ diff_seconds = row_buf; for( i = 0; i < gi->ct->lim.lam; i++ ) { cvs = gi->ct->cvs + (row) * gi->ct->lim.lam + (gi->ct->lim.lam - i - 1); cvs->phi = *(diff_seconds++) * ((PI/180.0) / 3600.0); cvs->lam = *(diff_seconds++) * ((PI/180.0) / 3600.0); diff_seconds += 2; /* skip accuracy values */ } } pj_dalloc( row_buf ); fclose( fid ); return 1; } else { return 0; } } /************************************************************************/ /* pj_gridinfo_init_ntv2() */ /* */ /* Load a ntv2 (.gsb) file. */ /************************************************************************/ static int pj_gridinfo_init_ntv2( FILE *fid, PJ_GRIDINFO *gilist ) { unsigned char header[11*16]; int num_subfiles, subfile; assert( sizeof(int) == 4 ); assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { fprintf( stderr, "basic types of inappropraiate size in pj_gridinfo_init_ntv2()\n" ); pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Read the overview header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Byte swap interesting fields if needed. */ /* -------------------------------------------------------------------- */ if( !IS_LSB ) { swap_words( header+8, 4, 1 ); swap_words( header+8+16, 4, 1 ); swap_words( header+8+32, 4, 1 ); swap_words( header+8+7*16, 8, 1 ); swap_words( header+8+8*16, 8, 1 ); swap_words( header+8+9*16, 8, 1 ); swap_words( header+8+10*16, 8, 1 ); } /* -------------------------------------------------------------------- */ /* Get the subfile count out ... all we really use for now. */ /* -------------------------------------------------------------------- */ memcpy( &num_subfiles, header+8+32, 4 ); /* ==================================================================== */ /* Step through the subfiles, creating a PJ_GRIDINFO for each. */ /* ==================================================================== */ for( subfile = 0; subfile < num_subfiles; subfile++ ) { struct CTABLE *ct; LP ur; int gs_count; PJ_GRIDINFO *gi; /* -------------------------------------------------------------------- */ /* Read header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } if( strncmp((const char *) header,"SUB_NAME",8) != 0 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Byte swap interesting fields if needed. */ /* -------------------------------------------------------------------- */ if( !IS_LSB ) { swap_words( header+8+16*4, 8, 1 ); swap_words( header+8+16*5, 8, 1 ); swap_words( header+8+16*6, 8, 1 ); swap_words( header+8+16*7, 8, 1 ); swap_words( header+8+16*8, 8, 1 ); swap_words( header+8+16*9, 8, 1 ); swap_words( header+8+16*10, 4, 1 ); } /* -------------------------------------------------------------------- */ /* Initialize a corresponding "ct" structure. */ /* -------------------------------------------------------------------- */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); strncpy( ct->id, (const char *) header + 8, 8 ); ct->id[8] = '\0'; ct->ll.lam = - *((double *) (header+7*16+8)); /* W_LONG */ ct->ll.phi = *((double *) (header+4*16+8)); /* S_LAT */ ur.lam = - *((double *) (header+6*16+8)); /* E_LONG */ ur.phi = *((double *) (header+5*16+8)); /* N_LAT */ ct->del.lam = *((double *) (header+9*16+8)); ct->del.phi = *((double *) (header+8*16+8)); ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "NTv2 %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->id, ct->lim.lam, ct->lim.phi, ct->ll.lam/3600.0, ct->ll.phi/3600.0, ur.lam/3600.0, ur.phi/3600.0 ); ct->ll.lam *= DEG_TO_RAD/3600.0; ct->ll.phi *= DEG_TO_RAD/3600.0; ct->del.lam *= DEG_TO_RAD/3600.0; ct->del.phi *= DEG_TO_RAD/3600.0; memcpy( &gs_count, header + 8 + 16*10, 4 ); if( gs_count != ct->lim.lam * ct->lim.phi ) { fprintf( stderr, "GS_COUNT(%d) does not match expected cells (%dx%d=%d)\n", gs_count, ct->lim.lam, ct->lim.phi, ct->lim.lam * ct->lim.phi ); pj_errno = -38; return 0; } ct->cvs = NULL; /* -------------------------------------------------------------------- */ /* Create a new gridinfo for this if we aren't processing the */ /* 1st subfile, and initialize our grid info. */ /* -------------------------------------------------------------------- */ if( subfile == 0 ) gi = gilist; else { gi = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); memset( gi, 0, sizeof(PJ_GRIDINFO) ); gi->gridname = strdup( gilist->gridname ); gi->filename = strdup( gilist->filename ); gi->next = NULL; } gi->ct = ct; gi->format = "ntv2"; gi->grid_offset = ftell( fid ); /* -------------------------------------------------------------------- */ /* Attach to the correct list or sublist. */ /* -------------------------------------------------------------------- */ if( strncmp((const char *)header+24,"NONE",4) == 0 ) { if( gi != gilist ) { PJ_GRIDINFO *lnk; for( lnk = gilist; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } } else { PJ_GRIDINFO *lnk; PJ_GRIDINFO *gp = gilist; while( gp != NULL && strncmp(gp->ct->id,(const char*)header+24,8) != 0 ) gp = gp->next; if( gp == NULL ) { if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "pj_gridinfo_init_ntv2(): " "failed to find parent %8.8s for %s.\n", (const char *) header+24, gi->ct->id ); for( lnk = gp; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } else if( gp->child == NULL ) { gp->child = gi; } else { for( lnk = gp->child; lnk->next != NULL; lnk = lnk->next ) {} lnk->next = gi; } } /* -------------------------------------------------------------------- */ /* Seek past the data. */ /* -------------------------------------------------------------------- */ fseek( fid, gs_count * 16, SEEK_CUR ); } return 1; } /************************************************************************/ /* pj_gridinfo_init_ntv1() */ /* */ /* Load an NTv1 style Canadian grid shift file. */ /************************************************************************/ static int pj_gridinfo_init_ntv1( FILE * fid, PJ_GRIDINFO *gi ) { unsigned char header[176]; struct CTABLE *ct; LP ur; assert( sizeof(int) == 4 ); assert( sizeof(double) == 8 ); if( sizeof(int) != 4 || sizeof(double) != 8 ) { fprintf( stderr, "basic types of inappropraiate size in nad_load_ntv1()\n" ); pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Read the header. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fid ) != 1 ) { pj_errno = -38; return 0; } /* -------------------------------------------------------------------- */ /* Regularize fields of interest. */ /* -------------------------------------------------------------------- */ if( IS_LSB ) { swap_words( header+8, 4, 1 ); swap_words( header+24, 8, 1 ); swap_words( header+40, 8, 1 ); swap_words( header+56, 8, 1 ); swap_words( header+72, 8, 1 ); swap_words( header+88, 8, 1 ); swap_words( header+104, 8, 1 ); } if( *((int *) (header+8)) != 12 ) { pj_errno = -38; printf("NTv1 grid shift file has wrong record count, corrupt?\n"); return 0; } /* -------------------------------------------------------------------- */ /* Fill in CTABLE structure. */ /* -------------------------------------------------------------------- */ ct = (struct CTABLE *) pj_malloc(sizeof(struct CTABLE)); strcpy( ct->id, "NTv1 Grid Shift File" ); ct->ll.lam = - *((double *) (header+72)); ct->ll.phi = *((double *) (header+24)); ur.lam = - *((double *) (header+56)); ur.phi = *((double *) (header+40)); ct->del.lam = *((double *) (header+104)); ct->del.phi = *((double *) (header+88)); ct->lim.lam = (int) (fabs(ur.lam-ct->ll.lam)/ct->del.lam + 0.5) + 1; ct->lim.phi = (int) (fabs(ur.phi-ct->ll.phi)/ct->del.phi + 0.5) + 1; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "NTv1 %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->lim.lam, ct->lim.phi, ct->ll.lam, ct->ll.phi, ur.lam, ur.phi ); ct->ll.lam *= DEG_TO_RAD; ct->ll.phi *= DEG_TO_RAD; ct->del.lam *= DEG_TO_RAD; ct->del.phi *= DEG_TO_RAD; ct->cvs = NULL; gi->ct = ct; gi->grid_offset = ftell( fid ); gi->format = "ntv1"; return 1; } /************************************************************************/ /* pj_gridinfo_init() */ /* */ /* Open and parse header details from a datum gridshift file */ /* returning a list of PJ_GRIDINFOs for the grids in that */ /* file. This superceeds use of nad_init() for modern */ /* applications. */ /************************************************************************/ PJ_GRIDINFO *pj_gridinfo_init( const char *gridname ) { char fname[MAX_PATH_FILENAME+1]; PJ_GRIDINFO *gilist; FILE *fp; char header[160]; errno = pj_errno = 0; /* -------------------------------------------------------------------- */ /* Initialize a GRIDINFO with stub info we would use if it */ /* cannot be loaded. */ /* -------------------------------------------------------------------- */ gilist = (PJ_GRIDINFO *) pj_malloc(sizeof(PJ_GRIDINFO)); memset( gilist, 0, sizeof(PJ_GRIDINFO) ); gilist->gridname = strdup( gridname ); gilist->filename = NULL; gilist->format = "missing"; gilist->grid_offset = 0; gilist->ct = NULL; gilist->next = NULL; /* -------------------------------------------------------------------- */ /* Open the file using the usual search rules. */ /* -------------------------------------------------------------------- */ strcpy(fname, gridname); if (!(fp = pj_open_lib(fname, "rb"))) { pj_errno = errno; return gilist; } gilist->filename = strdup(fname); /* -------------------------------------------------------------------- */ /* Load a header, to determine the file type. */ /* -------------------------------------------------------------------- */ if( fread( header, sizeof(header), 1, fp ) != 1 ) { fclose( fp ); pj_errno = -38; return gilist; } fseek( fp, SEEK_SET, 0 ); /* -------------------------------------------------------------------- */ /* Determine file type. */ /* -------------------------------------------------------------------- */ if( strncmp(header + 0, "HEADER", 6) == 0 && strncmp(header + 96, "W GRID", 6) == 0 && strncmp(header + 144, "TO NAD83 ", 16) == 0 ) { pj_gridinfo_init_ntv1( fp, gilist ); } else if( strncmp(header + 0, "NUM_OREC", 8) == 0 && strncmp(header + 48, "GS_TYPE", 7) == 0 ) { pj_gridinfo_init_ntv2( fp, gilist ); } else { struct CTABLE *ct = nad_ctable_init( fp ); gilist->format = "ctable"; gilist->ct = ct; if( getenv("PROJ_DEBUG") != NULL ) fprintf( stderr, "Ctable %s %dx%d: LL=(%.9g,%.9g) UR=(%.9g,%.9g)\n", ct->id, ct->lim.lam, ct->lim.phi, ct->ll.lam * RAD_TO_DEG, ct->ll.phi * RAD_TO_DEG, (ct->ll.lam + (ct->lim.lam-1)*ct->del.lam) * RAD_TO_DEG, (ct->ll.phi + (ct->lim.phi-1)*ct->del.phi) * RAD_TO_DEG ); } fclose(fp); return gilist; } therion-5.4.1/extern/proj4/pj_gridlist.c000066400000000000000000000214701307545355600202330ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_gridlist.c 1634 2009-09-24 02:40:46Z warmerdam $ * * Project: PROJ.4 * Purpose: Code to manage the list of currently loaded (cached) PJ_GRIDINFOs * See pj_gridinfo.c for details of loading individual grids. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #ifdef _WIN32_WCE /* assert.h includes all Windows API headers and causes 'LP' name clash. * Here assert we disable assert() for Windows CE. * TODO - mloskot: re-implement porting friendly assert */ # define assert(exp) ((void)0) #else # include #endif /* _WIN32_WCE */ static PJ_GRIDINFO *grid_list = NULL; /* used only by pj_load_nadgrids() and pj_deallocate_grids() */ static int last_nadgrids_max = 0; static int last_nadgrids_count = 0; static PJ_GRIDINFO **last_nadgrids_list = NULL; static char *last_nadgrids = NULL; /************************************************************************/ /* pj_deallocate_grids() */ /* */ /* Deallocate all loaded grids. */ /************************************************************************/ void pj_deallocate_grids() { while( grid_list != NULL ) { PJ_GRIDINFO *item = grid_list; grid_list = grid_list->next; item->next = NULL; pj_gridinfo_free( item ); } if( last_nadgrids != NULL ) { pj_dalloc( last_nadgrids ); last_nadgrids = NULL; pj_dalloc( last_nadgrids_list ); last_nadgrids_list = NULL; last_nadgrids_count = 0; last_nadgrids_max = 0; } } /************************************************************************/ /* pj_gridlist_merge_grid() */ /* */ /* Find/load the named gridfile and merge it into the */ /* last_nadgrids_list. */ /************************************************************************/ static int pj_gridlist_merge_gridfile( const char *gridname ) { int i, got_match=0; PJ_GRIDINFO *this_grid, *tail = NULL; /* -------------------------------------------------------------------- */ /* Try to find in the existing list of loaded grids. Add all */ /* matching grids as with NTv2 we can get many grids from one */ /* file (one shared gridname). */ /* -------------------------------------------------------------------- */ for( this_grid = grid_list; this_grid != NULL; this_grid = this_grid->next) { if( strcmp(this_grid->gridname,gridname) == 0 ) { got_match = 1; /* dont add to the list if it is invalid. */ if( this_grid->ct == NULL ) return 0; /* do we need to grow the list? */ if( last_nadgrids_count >= last_nadgrids_max - 2 ) { PJ_GRIDINFO **new_list; int new_max = last_nadgrids_max + 20; new_list = (PJ_GRIDINFO **) pj_malloc(sizeof(void*) * new_max); if( last_nadgrids_list != NULL ) { memcpy( new_list, last_nadgrids_list, sizeof(void*) * last_nadgrids_max ); pj_dalloc( last_nadgrids_list ); } last_nadgrids_list = new_list; last_nadgrids_max = new_max; } /* add to the list */ last_nadgrids_list[last_nadgrids_count++] = this_grid; last_nadgrids_list[last_nadgrids_count] = NULL; } tail = this_grid; } if( got_match ) return 1; /* -------------------------------------------------------------------- */ /* Try to load the named grid. */ /* -------------------------------------------------------------------- */ this_grid = pj_gridinfo_init( gridname ); if( this_grid == NULL ) { /* we should get at least a stub grid with a missing "ct" member */ assert( FALSE ); return 0; } if( tail != NULL ) tail->next = this_grid; else grid_list = this_grid; /* -------------------------------------------------------------------- */ /* Recurse to add the grid now that it is loaded. */ /* -------------------------------------------------------------------- */ return pj_gridlist_merge_gridfile( gridname ); } /************************************************************************/ /* pj_gridlist_from_nadgrids() */ /* */ /* This functions loads the list of grids corresponding to a */ /* particular nadgrids string into a list, and returns it. The */ /* list is kept around till a request is made with a different */ /* string in order to cut down on the string parsing cost, and */ /* the cost of building the list of tables each time. */ /************************************************************************/ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *nadgrids, int *grid_count) { const char *s; pj_errno = 0; *grid_count = 0; pj_acquire_lock(); if( last_nadgrids != NULL && strcmp(nadgrids,last_nadgrids) == 0 ) { PJ_GRIDINFO **ret = last_nadgrids_list; *grid_count = last_nadgrids_count; if( *grid_count == 0 ) pj_errno = -38; pj_release_lock(); return ret; } /* -------------------------------------------------------------------- */ /* Free old one, if any, and make space for new list. */ /* -------------------------------------------------------------------- */ if( last_nadgrids != NULL ) { pj_dalloc(last_nadgrids); } last_nadgrids = (char *) pj_malloc(strlen(nadgrids)+1); strcpy( last_nadgrids, nadgrids ); last_nadgrids_count = 0; /* -------------------------------------------------------------------- */ /* Loop processing names out of nadgrids one at a time. */ /* -------------------------------------------------------------------- */ for( s = nadgrids; *s != '\0'; ) { int end_char; int required = 1; char name[128]; if( *s == '@' ) { required = 0; s++; } for( end_char = 0; s[end_char] != '\0' && s[end_char] != ','; end_char++ ) {} if( end_char > sizeof(name) ) { pj_errno = -38; pj_release_lock(); return NULL; } strncpy( name, s, end_char ); name[end_char] = '\0'; s += end_char; if( *s == ',' ) s++; if( !pj_gridlist_merge_gridfile( name ) && required ) { pj_errno = -38; pj_release_lock(); return NULL; } else pj_errno = 0; } if( last_nadgrids_count > 0 ) { PJ_GRIDINFO **ret = last_nadgrids_list; *grid_count = last_nadgrids_count; pj_release_lock(); return ret; } else { pj_release_lock(); return NULL; } } therion-5.4.1/extern/proj4/pj_init.c000066400000000000000000000313651307545355600173610ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $ * * Project: PROJ.4 * Purpose: Initialize projection object from string definition. Includes * pj_init(), pj_init_plus() and pj_free() function. * Author: Gerald Evenden, Frank Warmerdam * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include #include PJ_CVSID("$Id: pj_init.c 1630 2009-09-24 02:14:06Z warmerdam $"); extern FILE *pj_open_lib(char *, char *); /************************************************************************/ /* get_opt() */ /************************************************************************/ static paralist * get_opt(paralist **start, FILE *fid, char *name, paralist *next) { char sword[302], *word = sword+1; int first = 1, len, c; len = strlen(name); *sword = 't'; while (fscanf(fid, "%300s", word) == 1) { if (*word == '#') /* skip comments */ while((c = fgetc(fid)) != EOF && c != '\n') ; else if (*word == '<') { /* control name */ if (first && !strncmp(name, word + 1, len) && word[len + 1] == '>') first = 0; else if (!first && *word == '<') { while((c = fgetc(fid)) != EOF && c != '\n') ; break; } } else if (!first && !pj_param(*start, sword).i) { /* don't default ellipse if datum, ellps or any earth model information is set. */ if( strncmp(word,"ellps=",6) != 0 || (!pj_param(*start, "tdatum").i && !pj_param(*start, "tellps").i && !pj_param(*start, "ta").i && !pj_param(*start, "tb").i && !pj_param(*start, "trf").i && !pj_param(*start, "tf").i) ) { next = next->next = pj_mkparam(word); } } } if (errno == 25) errno = 0; return next; } /************************************************************************/ /* get_defaults() */ /************************************************************************/ static paralist * get_defaults(paralist **start, paralist *next, char *name) { FILE *fid; if (fid = pj_open_lib("proj_def.dat", "rt")) { next = get_opt(start, fid, "general", next); rewind(fid); next = get_opt(start, fid, name, next); (void)fclose(fid); } if (errno) errno = 0; /* don't care if can't open file */ return next; } /************************************************************************/ /* get_init() */ /************************************************************************/ static paralist * get_init(paralist **start, paralist *next, char *name) { char fname[MAX_PATH_FILENAME+ID_TAG_MAX+3], *opt; FILE *fid; paralist *init_items = NULL; const paralist *orig_next = next; (void)strncpy(fname, name, MAX_PATH_FILENAME + ID_TAG_MAX + 1); /* ** Search for file/key pair in cache */ init_items = pj_search_initcache( name ); if( init_items != NULL ) { next->next = init_items; while( next->next != NULL ) next = next->next; return next; } /* ** Otherwise we try to open the file and search for it. */ if (opt = strrchr(fname, ':')) *opt++ = '\0'; else { pj_errno = -3; return(0); } if (fid = pj_open_lib(fname, "rt")) next = get_opt(start, fid, opt, next); else return(0); (void)fclose(fid); if (errno == 25) errno = 0; /* unknown problem with some sys errno<-25 */ /* ** If we seem to have gotten a result, insert it into the ** init file cache. */ if( next != NULL && next != orig_next ) pj_insert_initcache( name, orig_next->next ); return next; } /************************************************************************/ /* pj_init_plus() */ /* */ /* Same as pj_init() except it takes one argument string with */ /* individual arguments preceeded by '+', such as "+proj=utm */ /* +zone=11 +ellps=WGS84". */ /************************************************************************/ PJ * pj_init_plus( const char *definition ) { #define MAX_ARG 200 char *argv[MAX_ARG]; char *defn_copy; int argc = 0, i; PJ *result; /* make a copy that we can manipulate */ defn_copy = (char *) pj_malloc( strlen(definition)+1 ); strcpy( defn_copy, definition ); /* split into arguments based on '+' and trim white space */ for( i = 0; defn_copy[i] != '\0'; i++ ) { switch( defn_copy[i] ) { case '+': if( i == 0 || defn_copy[i-1] == '\0' ) { if( argc+1 == MAX_ARG ) { pj_errno = -44; return NULL; } argv[argc++] = defn_copy + i + 1; } break; case ' ': case '\t': case '\n': defn_copy[i] = '\0'; break; default: /* do nothing */; } } /* perform actual initialization */ result = pj_init( argc, argv ); pj_dalloc( defn_copy ); return result; } /************************************************************************/ /* pj_init() */ /* */ /* Main entry point for initialing a PJ projections */ /* definition. Note that the projection specific function is */ /* called to do the initial allocation so it can be created */ /* large enough to hold projection specific parameters. */ /************************************************************************/ PJ * pj_init(int argc, char **argv) { char *s, *name; paralist *start = NULL; PJ *(*proj)(PJ *); paralist *curr; int i; PJ *PIN = 0; const char *old_locale; errno = pj_errno = 0; start = NULL; old_locale = setlocale(LC_NUMERIC, NULL); setlocale(LC_NUMERIC,"C"); /* put arguments into internal linked list */ if (argc <= 0) { pj_errno = -1; goto bum_call; } for (i = 0; i < argc; ++i) if (i) curr = curr->next = pj_mkparam(argv[i]); else start = curr = pj_mkparam(argv[i]); if (pj_errno) goto bum_call; /* check if +init present */ if (pj_param(start, "tinit").i) { paralist *last = curr; if (!(curr = get_init(&start, curr, pj_param(start, "sinit").s))) goto bum_call; if (curr == last) { pj_errno = -2; goto bum_call; } } /* find projection selection */ if (!(name = pj_param(start, "sproj").s)) { pj_errno = -4; goto bum_call; } for (i = 0; (s = pj_list[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -5; goto bum_call; } /* set defaults, unless inhibited */ if (!pj_param(start, "bno_defs").i) curr = get_defaults(&start, curr, name); proj = (PJ *(*)(PJ *)) pj_list[i].proj; /* allocate projection structure */ if (!(PIN = (*proj)(0))) goto bum_call; PIN->params = start; PIN->is_latlong = 0; PIN->is_geocent = 0; PIN->long_wrap_center = 0.0; /* set datum parameters */ if (pj_datum_set(start, PIN)) goto bum_call; /* set ellipsoid/sphere parameters */ if (pj_ell_set(start, &PIN->a, &PIN->es)) goto bum_call; PIN->a_orig = PIN->a; PIN->es_orig = PIN->es; PIN->e = sqrt(PIN->es); PIN->ra = 1. / PIN->a; PIN->one_es = 1. - PIN->es; if (PIN->one_es == 0.) { pj_errno = -6; goto bum_call; } PIN->rone_es = 1./PIN->one_es; /* Now that we have ellipse information check for WGS84 datum */ if( PIN->datum_type == PJD_3PARAM && PIN->datum_params[0] == 0.0 && PIN->datum_params[1] == 0.0 && PIN->datum_params[2] == 0.0 && PIN->a == 6378137.0 && ABS(PIN->es - 0.006694379990) < 0.000000000050 )/*WGS84/GRS80*/ { PIN->datum_type = PJD_WGS84; } /* set PIN->geoc coordinate system */ PIN->geoc = (PIN->es && pj_param(start, "bgeoc").i); /* over-ranging flag */ PIN->over = pj_param(start, "bover").i; /* longitude center for wrapping */ PIN->long_wrap_center = pj_param(start, "rlon_wrap").f; /* central meridian */ PIN->lam0=pj_param(start, "rlon_0").f; /* central latitude */ PIN->phi0 = pj_param(start, "rlat_0").f; /* false easting and northing */ PIN->x0 = pj_param(start, "dx_0").f; PIN->y0 = pj_param(start, "dy_0").f; /* general scaling factor */ if (pj_param(start, "tk_0").i) PIN->k0 = pj_param(start, "dk_0").f; else if (pj_param(start, "tk").i) PIN->k0 = pj_param(start, "dk").f; else PIN->k0 = 1.; if (PIN->k0 <= 0.) { pj_errno = -31; goto bum_call; } /* set units */ s = 0; if (name = pj_param(start, "sunits").s) { for (i = 0; (s = pj_units[i].id) && strcmp(name, s) ; ++i) ; if (!s) { pj_errno = -7; goto bum_call; } s = pj_units[i].to_meter; } if (s || (s = pj_param(start, "sto_meter").s)) { PIN->to_meter = strtod(s, &s); if (*s == '/') /* ratio number */ PIN->to_meter /= strtod(++s, 0); PIN->fr_meter = 1. / PIN->to_meter; } else PIN->to_meter = PIN->fr_meter = 1.; /* prime meridian */ s = 0; if (name = pj_param(start, "spm").s) { const char *value = NULL; char *next_str = NULL; for (i = 0; pj_prime_meridians[i].id != NULL; ++i ) { if( strcmp(name,pj_prime_meridians[i].id) == 0 ) { value = pj_prime_meridians[i].defn; break; } } if( value == NULL && (dmstor(name,&next_str) != 0.0 || *name == '0') && *next_str == '\0' ) value = name; if (!value) { pj_errno = -46; goto bum_call; } PIN->from_greenwich = dmstor(value,NULL); } else PIN->from_greenwich = 0.0; /* projection specific initialization */ if (!(PIN = (*proj)(PIN)) || errno || pj_errno) { bum_call: /* cleanup error return */ if (!pj_errno) pj_errno = errno; if (PIN) pj_free(PIN); else for ( ; start; start = curr) { curr = start->next; pj_dalloc(start); } PIN = 0; } setlocale(LC_NUMERIC,old_locale); return PIN; } /************************************************************************/ /* pj_free() */ /* */ /* This is the application callable entry point for destroying */ /* a projection definition. It does work generic to all */ /* projection types, and then calls the projection specific */ /* free function (P->pfree()) to do local work. This maps to */ /* the FREEUP code in the individual projection source files. */ /************************************************************************/ void pj_free(PJ *P) { if (P) { paralist *t = P->params, *n; /* free parameter list elements */ for (t = P->params; t; t = n) { n = t->next; pj_dalloc(t); } /* free projection parameters */ P->pfree(P); } } therion-5.4.1/extern/proj4/pj_initcache.c000066400000000000000000000130161307545355600203360ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: init file definition cache. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2009, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); static int cache_count = 0; static int cache_alloc = 0; static char **cache_key = NULL; static paralist **cache_paralist = NULL; /************************************************************************/ /* pj_clone_paralist() */ /* */ /* Allocate a copy of a parameter list. */ /************************************************************************/ paralist *pj_clone_paralist( const paralist *list) { paralist *list_copy = NULL, *next_copy = NULL; for( ; list != NULL; list = list->next ) { paralist *newitem = (paralist *) pj_malloc(sizeof(paralist) + strlen(list->param)); newitem->used = 0; newitem->next = 0; strcpy( newitem->param, list->param ); if( list_copy == NULL ) list_copy = newitem; else next_copy->next = newitem; next_copy = newitem; } return list_copy; } /************************************************************************/ /* pj_clear_initcache() */ /* */ /* Clear out all memory held in the init file cache. */ /************************************************************************/ void pj_clear_initcache() { if( cache_alloc > 0 ) { int i; pj_acquire_lock(); for( i = 0; i < cache_count; i++ ) { paralist *n, *t = cache_paralist[i]; pj_dalloc( cache_key[i] ); /* free parameter list elements */ for (; t != NULL; t = n) { n = t->next; pj_dalloc(t); } } pj_dalloc( cache_key ); pj_dalloc( cache_paralist ); cache_count = 0; cache_alloc= 0; cache_key = NULL; cache_paralist = NULL; pj_release_lock(); } } /************************************************************************/ /* pj_search_initcache() */ /* */ /* Search for a matching definition in the init cache. */ /************************************************************************/ paralist *pj_search_initcache( const char *filekey ) { int i; paralist *result = NULL; pj_acquire_lock(); for( i = 0; result == NULL && i < cache_count; i++) { if( strcmp(filekey,cache_key[i]) == 0 ) { result = pj_clone_paralist( cache_paralist[i] ); } } pj_release_lock(); return result; } /************************************************************************/ /* pj_insert_initcache() */ /* */ /* Insert a paralist definition in the init file cache. */ /************************************************************************/ void pj_insert_initcache( const char *filekey, const paralist *list ) { pj_acquire_lock(); /* ** Grow list if required. */ if( cache_count == cache_alloc ) { char **cache_key_new; paralist **cache_paralist_new; cache_alloc = cache_alloc * 2 + 15; cache_key_new = (char **) pj_malloc(sizeof(char*) * cache_alloc); memcpy( cache_key, cache_key_new, sizeof(char*) * cache_count); pj_dalloc( cache_key ); cache_key = cache_key_new; cache_paralist_new = (paralist **) pj_malloc(sizeof(paralist*) * cache_alloc); memcpy( cache_paralist_new, cache_paralist, sizeof(paralist*) * cache_count ); pj_dalloc( cache_paralist ); cache_paralist = cache_paralist_new; } /* ** Duplicate the filekey and paralist, and insert in cache. */ cache_key[cache_count] = (char *) pj_malloc(strlen(filekey)+1); strcpy( cache_key[cache_count], filekey ); cache_paralist[cache_count] = pj_clone_paralist( list ); cache_count++; pj_release_lock(); } therion-5.4.1/extern/proj4/pj_inv.c000066400000000000000000000015011307545355600171770ustar00rootroot00000000000000/* general inverse projection */ #define PJ_LIB__ #include #include # define EPS 1.0e-12 LP /* inverse projection entry */ pj_inv(XY xy, PJ *P) { LP lp; /* can't do as much preliminary checking as with forward */ if (xy.x == HUGE_VAL || xy.y == HUGE_VAL) { lp.lam = lp.phi = HUGE_VAL; pj_errno = -15; } errno = pj_errno = 0; xy.x = (xy.x * P->to_meter - P->x0) * P->ra; /* descale and de-offset */ xy.y = (xy.y * P->to_meter - P->y0) * P->ra; lp = (*P->inv)(xy, P); /* inverse project */ if (pj_errno || (pj_errno = errno)) lp.lam = lp.phi = HUGE_VAL; else { lp.lam += P->lam0; /* reduce from del lp.lam */ if (!P->over) lp.lam = adjlon(lp.lam); /* adjust longitude to CM */ if (P->geoc && fabs(fabs(lp.phi)-HALFPI) > EPS) lp.phi = atan(P->one_es * tan(lp.phi)); } return lp; } therion-5.4.1/extern/proj4/pj_latlong.c000066400000000000000000000053301307545355600200470ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_latlong.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Stub projection implementation for lat/long coordinates. We * don't actually change the coordinates, but we want proj=latlong * to act sort of like a projection. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* very loosely based upon DMA code by Bradford W. Drew */ #define PJ_LIB__ #include PROJ_HEAD(lonlat, "Lat/long (Geodetic)") "\n\t"; PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") "\n\t"; PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") "\n\t"; PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") "\n\t"; FORWARD(forward); xy.x = lp.lam / P->a; xy.y = lp.phi / P->a; return xy; } INVERSE(inverse); lp.phi = xy.y * P->a; lp.lam = xy.x * P->a; return lp; } FREEUP; if (P) pj_dalloc(P); } ENTRY0(latlong) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(longlat) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(latlon) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) ENTRY0(lonlat) P->is_latlong = 1; P->x0 = 0.0; P->y0 = 0.0; P->inv = inverse; P->fwd = forward; ENDENTRY(P) therion-5.4.1/extern/proj4/pj_list.c000066400000000000000000000003271307545355600173630ustar00rootroot00000000000000/* Projection System: default list of projections ** Use local definition of PJ_LIST_H for subset. */ #define PJ_LIST_H "pj_list.h" #include "projects.h" struct PJ_LIST *pj_get_list_ref() { return pj_list; } therion-5.4.1/extern/proj4/pj_list.h000066400000000000000000000122411307545355600173660ustar00rootroot00000000000000#ifdef DO_PJ_LIST_ID static const char PJ_LIST_H_ID[] = "@(#)pj_list.h 4.5 95/08/09 GIE REL"; #endif /* Full list of current projections for Tue Jan 11 12:27:04 EST 1994 ** ** Copy this file and retain only appropriate lines for subset list */ PROJ_HEAD(aea, "Albers Equal Area") PROJ_HEAD(aeqd, "Azimuthal Equidistant") PROJ_HEAD(airy, "Airy") PROJ_HEAD(aitoff, "Aitoff") PROJ_HEAD(alsk, "Mod. Stererographics of Alaska") PROJ_HEAD(apian, "Apian Globular I") PROJ_HEAD(august, "August Epicycloidal") PROJ_HEAD(bacon, "Bacon Globular") PROJ_HEAD(bipc, "Bipolar conic of western hemisphere") PROJ_HEAD(boggs, "Boggs Eumorphic") PROJ_HEAD(bonne, "Bonne (Werner lat_1=90)") PROJ_HEAD(cass, "Cassini") PROJ_HEAD(cc, "Central Cylindrical") PROJ_HEAD(cea, "Equal Area Cylindrical") PROJ_HEAD(chamb, "Chamberlin Trimetric") PROJ_HEAD(collg, "Collignon") PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(denoy, "Denoyer Semi-Elliptical") PROJ_HEAD(eck1, "Eckert I") PROJ_HEAD(eck2, "Eckert II") PROJ_HEAD(eck3, "Eckert III") PROJ_HEAD(eck4, "Eckert IV") PROJ_HEAD(eck5, "Eckert V") PROJ_HEAD(eck6, "Eckert VI") PROJ_HEAD(eqc, "Equidistant Cylindrical (Plate Caree)") PROJ_HEAD(eqdc, "Equidistant Conic") PROJ_HEAD(euler, "Euler") PROJ_HEAD(fahey, "Fahey") PROJ_HEAD(fouc, "Foucaut") PROJ_HEAD(fouc_s, "Foucaut Sinusoidal") PROJ_HEAD(gall, "Gall (Gall Stereographic)") PROJ_HEAD(geocent, "Geocentric") PROJ_HEAD(geos, "Geostationary Satellite View") PROJ_HEAD(gins8, "Ginsburg VIII (TsNIIGAiK)") PROJ_HEAD(gn_sinu, "General Sinusoidal Series") PROJ_HEAD(gnom, "Gnomonic") PROJ_HEAD(goode, "Goode Homolosine") PROJ_HEAD(gs48, "Mod. Stererographics of 48 U.S.") PROJ_HEAD(gs50, "Mod. Stererographics of 50 U.S.") PROJ_HEAD(hammer, "Hammer & Eckert-Greifendorff") PROJ_HEAD(hatano, "Hatano Asymmetrical Equal Area") PROJ_HEAD(imw_p, "Internation Map of the World Polyconic") PROJ_HEAD(kav5, "Kavraisky V") PROJ_HEAD(kav7, "Kavraisky VII") PROJ_HEAD(krovak, "Krovak") PROJ_HEAD(labrd, "Laborde") PROJ_HEAD(laea, "Lambert Azimuthal Equal Area") PROJ_HEAD(lagrng, "Lagrange") PROJ_HEAD(larr, "Larrivee") PROJ_HEAD(lask, "Laskowski") PROJ_HEAD(lonlat, "Lat/long (Geodetic)") PROJ_HEAD(latlon, "Lat/long (Geodetic alias)") PROJ_HEAD(latlong, "Lat/long (Geodetic alias)") PROJ_HEAD(longlat, "Lat/long (Geodetic alias)") PROJ_HEAD(lcc, "Lambert Conformal Conic") PROJ_HEAD(lcca, "Lambert Conformal Conic Alternative") PROJ_HEAD(leac, "Lambert Equal Area Conic") PROJ_HEAD(lee_os, "Lee Oblated Stereographic") PROJ_HEAD(loxim, "Loximuthal") PROJ_HEAD(lsat, "Space oblique for LANDSAT") PROJ_HEAD(mbt_s, "McBryde-Thomas Flat-Polar Sine") PROJ_HEAD(mbt_fps, "McBryde-Thomas Flat-Pole Sine (No. 2)") PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") PROJ_HEAD(mbtfpq, "McBryde-Thomas Flat-Polar Quartic") PROJ_HEAD(mbtfps, "McBryde-Thomas Flat-Polar Sinusoidal") PROJ_HEAD(merc, "Mercator") PROJ_HEAD(mil_os, "Miller Oblated Stereographic") PROJ_HEAD(mill, "Miller Cylindrical") PROJ_HEAD(moll, "Mollweide") PROJ_HEAD(murd1, "Murdoch I") PROJ_HEAD(murd2, "Murdoch II") PROJ_HEAD(murd3, "Murdoch III") PROJ_HEAD(nell, "Nell") PROJ_HEAD(nell_h, "Nell-Hammer") PROJ_HEAD(nicol, "Nicolosi Globular") PROJ_HEAD(nsper, "Near-sided perspective") PROJ_HEAD(nzmg, "New Zealand Map Grid") PROJ_HEAD(ob_tran, "General Oblique Transformation") PROJ_HEAD(ocea, "Oblique Cylindrical Equal Area") PROJ_HEAD(oea, "Oblated Equal Area") PROJ_HEAD(omerc, "Oblique Mercator") PROJ_HEAD(ortel, "Ortelius Oval") PROJ_HEAD(ortho, "Orthographic") PROJ_HEAD(pconic, "Perspective Conic") PROJ_HEAD(poly, "Polyconic (American)") PROJ_HEAD(putp1, "Putnins P1") PROJ_HEAD(putp2, "Putnins P2") PROJ_HEAD(putp3, "Putnins P3") PROJ_HEAD(putp3p, "Putnins P3'") PROJ_HEAD(putp4p, "Putnins P4'") PROJ_HEAD(putp5, "Putnins P5") PROJ_HEAD(putp5p, "Putnins P5'") PROJ_HEAD(putp6, "Putnins P6") PROJ_HEAD(putp6p, "Putnins P6'") PROJ_HEAD(qua_aut, "Quartic Authalic") PROJ_HEAD(robin, "Robinson") PROJ_HEAD(rouss, "Roussilhe Stereographic") PROJ_HEAD(rpoly, "Rectangular Polyconic") PROJ_HEAD(sinu, "Sinusoidal (Sanson-Flamsteed)") PROJ_HEAD(somerc, "Swiss. Obl. Mercator") PROJ_HEAD(stere, "Stereographic") PROJ_HEAD(sterea, "Oblique Stereographic Alternative") PROJ_HEAD(gstmerc, "Gauss-Schreiber Transverse Mercator (aka Gauss-Laborde Reunion)") PROJ_HEAD(tcc, "Transverse Central Cylindrical") PROJ_HEAD(tcea, "Transverse Cylindrical Equal Area") PROJ_HEAD(tissot, "Tissot Conic") PROJ_HEAD(tmerc, "Transverse Mercator") PROJ_HEAD(tpeqd, "Two Point Equidistant") PROJ_HEAD(tpers, "Tilted perspective") PROJ_HEAD(ups, "Universal Polar Stereographic") PROJ_HEAD(urm5, "Urmaev V") PROJ_HEAD(urmfps, "Urmaev Flat-Polar Sinusoidal") PROJ_HEAD(utm, "Universal Transverse Mercator (UTM)") PROJ_HEAD(vandg, "van der Grinten (I)") PROJ_HEAD(vandg2, "van der Grinten II") PROJ_HEAD(vandg3, "van der Grinten III") PROJ_HEAD(vandg4, "van der Grinten IV") PROJ_HEAD(vitk1, "Vitkovsky I") PROJ_HEAD(wag1, "Wagner I (Kavraisky VI)") PROJ_HEAD(wag2, "Wagner II") PROJ_HEAD(wag3, "Wagner III") PROJ_HEAD(wag4, "Wagner IV") PROJ_HEAD(wag5, "Wagner V") PROJ_HEAD(wag6, "Wagner VI") PROJ_HEAD(wag7, "Wagner VII") PROJ_HEAD(weren, "Werenskiold I") PROJ_HEAD(wink1, "Winkel I") PROJ_HEAD(wink2, "Winkel II") PROJ_HEAD(wintri, "Winkel Tripel") therion-5.4.1/extern/proj4/pj_malloc.c000066400000000000000000000015041307545355600176550ustar00rootroot00000000000000/* allocate and deallocate memory */ /* These routines are used so that applications can readily replace ** projection system memory allocation/deallocation call with custom ** application procedures. */ #include #include void * pj_malloc(size_t size) { // Currently, pj_malloc is a hack to solve an errno problem. // The problem is described in more details at // https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=86420. // It seems, that pj_init and similar functions incorrectly // (under debian/glibs-2.3.2) assume that pj_malloc resets // errno after success. pj_malloc tries to mimic this. int old_errno = errno; void *res = malloc(size); if ( res && !old_errno ) errno = 0; return res; } void pj_dalloc(void *ptr) { free(ptr); } therion-5.4.1/extern/proj4/pj_mlfn.c000066400000000000000000000030341307545355600173420ustar00rootroot00000000000000#include /* meridinal distance for ellipsoid and inverse ** 8th degree - accurate to < 1e-5 meters when used in conjuction ** with typical major axis values. ** Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds. */ #define C00 1. #define C02 .25 #define C04 .046875 #define C06 .01953125 #define C08 .01068115234375 #define C22 .75 #define C44 .46875 #define C46 .01302083333333333333 #define C48 .00712076822916666666 #define C66 .36458333333333333333 #define C68 .00569661458333333333 #define C88 .3076171875 #define EPS 1e-11 #define MAX_ITER 10 #define EN_SIZE 5 double * pj_enfn(double es) { double t, *en; if (en = (double *)pj_malloc(EN_SIZE * sizeof(double))) { en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); en[2] = (t = es * es) * (C44 - es * (C46 + es * C48)); en[3] = (t *= es) * (C66 - es * C68); en[4] = t * es * C88; } /* else return NULL if unable to allocate memory */ return en; } double pj_mlfn(double phi, double sphi, double cphi, double *en) { cphi *= sphi; sphi *= sphi; return(en[0] * phi - cphi * (en[1] + sphi*(en[2] + sphi*(en[3] + sphi*en[4])))); } double pj_inv_mlfn(double arg, double es, double *en) { double s, t, phi, k = 1./(1.-es); int i; phi = arg; for (i = MAX_ITER; i ; --i) { /* rarely goes over 2 iterations */ s = sin(phi); t = 1. - es * s * s; phi -= t = (pj_mlfn(phi, s, cos(phi), en) - arg) * (t * sqrt(t)) * k; if (fabs(t) < EPS) return phi; } pj_errno = -17; return phi; } therion-5.4.1/extern/proj4/pj_msfn.c000066400000000000000000000002731307545355600173530ustar00rootroot00000000000000/* determine constant small m */ #include #include double pj_msfn(double sinphi, double cosphi, double es) { return (cosphi / sqrt (1. - es * sinphi * sinphi)); } therion-5.4.1/extern/proj4/pj_mutex.c000066400000000000000000000170731307545355600175600ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Mutex (thread lock) functions. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2009, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* projects.h and windows.h conflict - avoid this! */ #ifndef _WIN32 #include PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); #else #include #endif #ifdef _WIN32 # define MUTEX_win32 #endif #if !defined(MUTEX_stub) && !defined(MUTEX_pthread) && !defined(MUTEX_win32) # define MUTEX_stub #endif static void pj_init_lock(); /************************************************************************/ /* ==================================================================== */ /* stub mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_stub /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { } #endif // def MUTEX_stub /************************************************************************/ /* ==================================================================== */ /* pthread mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_pthread #include "pthread.h" static pthread_mutex_t core_lock = PTHREAD_MUTEX_INITIALIZER; /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { pthread_mutex_lock( &core_lock); } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { pthread_mutex_unlock( &core_lock ); } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { } #endif // def MUTEX_pthread /************************************************************************/ /* ==================================================================== */ /* win32 mutex implementation */ /* ==================================================================== */ /************************************************************************/ #ifdef MUTEX_win32 #include static HANDLE mutex_lock = NULL; /************************************************************************/ /* pj_acquire_lock() */ /* */ /* Acquire the PROJ.4 lock. */ /************************************************************************/ void pj_acquire_lock() { if( mutex_lock == NULL ) pj_init_lock(); WaitForSingleObject( mutex_lock, INFINITE ); } /************************************************************************/ /* pj_release_lock() */ /* */ /* Release the PROJ.4 lock. */ /************************************************************************/ void pj_release_lock() { if( mutex_lock == NULL ) pj_init_lock(); ReleaseMutex( mutex_lock ); } /************************************************************************/ /* pj_cleanup_lock() */ /************************************************************************/ void pj_cleanup_lock() { if( mutex_lock != NULL ) { CloseHandle( mutex_lock ); mutex_lock = NULL; } } /************************************************************************/ /* pj_init_lock() */ /************************************************************************/ static void pj_init_lock() { if( mutex_lock == NULL ) mutex_lock = CreateMutex( NULL, TRUE, NULL ); } #endif // def MUTEX_win32 therion-5.4.1/extern/proj4/pj_open_lib.c000066400000000000000000000134421307545355600202010ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Implementation of pj_open_lib(), and pj_set_finder(). These * provide a standard interface for opening projections support * data files. * Author: Gerald Evenden, Frank Warmerdam * ****************************************************************************** * Copyright (c) 1995, Gerald Evenden * Copyright (c) 2002, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include #include PJ_CVSID("$Id: pj_open_lib.c 1504 2009-01-06 02:11:57Z warmerdam $"); static const char *(*pj_finder)(const char *) = NULL; static int path_count = 0; static char **search_path = NULL; static char * proj_lib_name = #ifdef PROJ_LIB PROJ_LIB; #else 0; #endif /************************************************************************/ /* pj_set_finder() */ /************************************************************************/ void pj_set_finder( const char *(*new_finder)(const char *) ) { pj_finder = new_finder; } /************************************************************************/ /* pj_set_searchpath() */ /* */ /* Path control for callers that can't practically provide */ /* pj_set_finder() style callbacks. Call with (0,NULL) as args */ /* to clear the searchpath set. */ /************************************************************************/ void pj_set_searchpath ( int count, const char **path ) { int i; if (path_count > 0 && search_path != NULL) { for (i = 0; i < path_count; i++) { pj_dalloc(search_path[i]); } pj_dalloc(search_path); path_count = 0; search_path = NULL; } if( count > 0 ) { search_path = pj_malloc(sizeof *search_path * count); for (i = 0; i < count; i++) { search_path[i] = pj_malloc(strlen(path[i]) + 1); strcpy(search_path[i], path[i]); } } path_count = count; } /************************************************************************/ /* pj_open_lib() */ /************************************************************************/ FILE * pj_open_lib(char *name, char *mode) { char fname[MAX_PATH_FILENAME+1]; const char *sysname; FILE *fid; int n = 0; int i; #ifdef WIN32 static const char dir_chars[] = "/\\"; #else static const char dir_chars[] = "/"; #endif #ifndef _WIN32_WCE /* check if ~/name */ if (*name == '~' && strchr(dir_chars,name[1]) ) if (sysname = getenv("HOME")) { (void)strcpy(fname, sysname); fname[n = strlen(fname)] = DIR_CHAR; fname[++n] = '\0'; (void)strcpy(fname+n, name + 1); sysname = fname; } else return NULL; /* or fixed path: /name, ./name or ../name */ else if (strchr(dir_chars,*name) || (*name == '.' && strchr(dir_chars,name[1])) || (!strncmp(name, "..", 2) && strchr(dir_chars,name[2])) || (name[1] == ':' && strchr(dir_chars,name[2])) ) sysname = name; /* or try to use application provided file finder */ else if( pj_finder != NULL && pj_finder( name ) != NULL ) sysname = pj_finder( name ); /* or is environment PROJ_LIB defined */ else if ((sysname = getenv("PROJ_LIB")) || (sysname = proj_lib_name)) { (void)strcpy(fname, sysname); fname[n = strlen(fname)] = DIR_CHAR; fname[++n] = '\0'; (void)strcpy(fname+n, name); sysname = fname; } else /* just try it bare bones */ sysname = name; if (fid = fopen(sysname, mode)) errno = 0; /* If none of those work and we have a search path, try it */ if (!fid && path_count > 0) { for (i = 0; fid == NULL && i < path_count; i++) { sprintf(fname, "%s%c%s", search_path[i], DIR_CHAR, name); sysname = fname; fid = fopen (sysname, mode); } if (fid) errno = 0; } if( getenv( "PROJ_DEBUG" ) != NULL ) fprintf( stderr, "pj_open_lib(%s): call fopen(%s) - %s\n", name, sysname, fid == NULL ? "failed" : "succeeded" ); return(fid); #else return NULL; #endif /* _WIN32_WCE */ } therion-5.4.1/extern/proj4/pj_param.c000066400000000000000000000055651307545355600175210ustar00rootroot00000000000000/* put parameters in linked list and retrieve */ #include #include #include paralist * /* create parameter list entry */ pj_mkparam(char *str) { paralist *newitem; if (newitem = (paralist *)pj_malloc(sizeof(paralist) + strlen(str))) { newitem->used = 0; newitem->next = 0; if (*str == '+') ++str; (void)strcpy(newitem->param, str); } return newitem; } /************************************************************************/ /* pj_param() */ /* */ /* Test for presence or get parameter value. The first */ /* character in `opt' is a parameter type which can take the */ /* values: */ /* */ /* `t' - test for presence, return TRUE/FALSE in PVALUE.i */ /* `i' - integer value returned in PVALUE.i */ /* `d' - simple valued real input returned in PVALUE.f */ /* `r' - degrees (DMS translation applied), returned as */ /* radians in PVALUE.f */ /* `s' - string returned in PVALUE.s */ /* `b' - test for t/T/f/F, return in PVALUE.i */ /* */ /************************************************************************/ PVALUE /* test for presence or get parameter value */ pj_param(paralist *pl, char *opt) { int type; unsigned l; PVALUE value; type = *opt++; /* simple linear lookup */ l = strlen(opt); while (pl && !(!strncmp(pl->param, opt, l) && (!pl->param[l] || pl->param[l] == '='))) pl = pl->next; if (type == 't') value.i = pl != 0; else if (pl) { pl->used |= 1; opt = pl->param + l; if (*opt == '=') ++opt; switch (type) { case 'i': /* integer input */ value.i = atoi(opt); break; case 'd': /* simple real input */ value.f = atof(opt); break; case 'r': /* degrees input */ value.f = dmstor(opt, 0); break; case 's': /* char string */ value.s = opt; break; case 'b': /* boolean */ switch (*opt) { case 'F': case 'f': value.i = 0; break; case '\0': case 'T': case 't': value.i = 1; break; default: pj_errno = -8; value.i = 0; break; } break; default: bum_type: /* note: this is an error in parameter, not a user error */ fprintf(stderr, "invalid request to pj_param, fatal\n"); exit(1); } } else /* not given */ switch (type) { case 'b': case 'i': value.i = 0; break; case 'd': case 'r': value.f = 0.; break; case 's': value.s = 0; break; default: goto bum_type; } return value; } therion-5.4.1/extern/proj4/pj_phi2.c000066400000000000000000000007501307545355600172520ustar00rootroot00000000000000/* determine latitude angle phi-2 */ #include #define HALFPI 1.5707963267948966 #define TOL 1.0e-10 #define N_ITER 15 double pj_phi2(double ts, double e) { double eccnth, Phi, con, dphi; int i; eccnth = .5 * e; Phi = HALFPI - 2. * atan (ts); i = N_ITER; do { con = e * sin (Phi); dphi = HALFPI - 2. * atan (ts * pow((1. - con) / (1. + con), eccnth)) - Phi; Phi += dphi; } while ( fabs(dphi) > TOL && --i); if (i <= 0) pj_errno = -18; return Phi; } therion-5.4.1/extern/proj4/pj_pr_list.c000066400000000000000000000045051307545355600200660ustar00rootroot00000000000000/* print projection's list of parameters */ #include #include #include #define LINE_LEN 72 static int pr_list(PJ *P, int not_used) { paralist *t; int l, n = 1, flag = 0; (void)putchar('#'); for (t = P->params; t; t = t->next) if ((!not_used && t->used) || (not_used && !t->used)) { l = strlen(t->param) + 1; if (n + l > LINE_LEN) { (void)fputs("\n#", stdout); n = 2; } (void)putchar(' '); if (*(t->param) != '+') (void)putchar('+'); (void)fputs(t->param, stdout); n += l; } else flag = 1; if (n > 1) (void)putchar('\n'); return flag; } void /* print link list of projection parameters */ pj_pr_list(PJ *P) { char const *s; (void)putchar('#'); for (s = P->descr; *s ; ++s) { (void)putchar(*s); if (*s == '\n') (void)putchar('#'); } (void)putchar('\n'); if (pr_list(P, 0)) { (void)fputs("#--- following specified but NOT used\n", stdout); (void)pr_list(P, 1); } } /************************************************************************/ /* pj_get_def() */ /* */ /* Returns the PROJ.4 command string that would produce this */ /* definition expanded as much as possible. For instance, */ /* +init= calls and +datum= defintions would be expanded. */ /************************************************************************/ char *pj_get_def( PJ *P, int options ) { paralist *t; int l; char *definition; int def_max = 10; definition = (char *) pj_malloc(def_max); definition[0] = '\0'; for (t = P->params; t; t = t->next) { /* skip unused parameters ... mostly appended defaults and stuff */ if (!t->used) continue; /* grow the resulting string if needed */ l = strlen(t->param) + 1; if( strlen(definition) + l + 5 > def_max ) { char *def2; def_max = def_max * 2 + l + 5; def2 = (char *) pj_malloc(def_max); strcpy( def2, definition ); pj_dalloc( definition ); definition = def2; } /* append this parameter */ strcat( definition, " +" ); strcat( definition, t->param ); } return definition; } therion-5.4.1/extern/proj4/pj_qsfn.c000066400000000000000000000005211307545355600173530ustar00rootroot00000000000000/* determine small q */ #include #include # define EPSILON 1.0e-7 double pj_qsfn(double sinphi, double e, double one_es) { double con; if (e >= EPSILON) { con = e * sinphi; return (one_es * (sinphi / (1. - con * con) - (.5 / e) * log ((1. - con) / (1. + con)))); } else return (sinphi + sinphi); } therion-5.4.1/extern/proj4/pj_release.c000066400000000000000000000002641307545355600200300ustar00rootroot00000000000000/* <<< Release Notice for library >>> */ #include char const pj_release[]="Rel. 4.7.1, 23 September 2009"; const char *pj_get_release() { return pj_release; } therion-5.4.1/extern/proj4/pj_strerrno.c000066400000000000000000000053241307545355600202700ustar00rootroot00000000000000/* list of projection system pj_errno values */ #include "projects.h" #include #include #include static char * pj_err_list[] = { "no arguments in initialization list", /* -1 */ "no options found in 'init' file", /* -2 */ "no colon in init= string", /* -3 */ "projection not named", /* -4 */ "unknown projection id", /* -5 */ "effective eccentricity = 1.", /* -6 */ "unknown unit conversion id", /* -7 */ "invalid boolean param argument", /* -8 */ "unknown elliptical parameter name", /* -9 */ "reciprocal flattening (1/f) = 0", /* -10 */ "|radius reference latitude| > 90", /* -11 */ "squared eccentricity < 0", /* -12 */ "major axis or radius = 0 or not given", /* -13 */ "latitude or longitude exceeded limits", /* -14 */ "invalid x or y", /* -15 */ "improperly formed DMS value", /* -16 */ "non-convergent inverse meridinal dist", /* -17 */ "non-convergent inverse phi2", /* -18 */ "acos/asin: |arg| >1.+1e-14", /* -19 */ "tolerance condition error", /* -20 */ "conic lat_1 = -lat_2", /* -21 */ "lat_1 >= 90", /* -22 */ "lat_1 = 0", /* -23 */ "lat_ts >= 90", /* -24 */ "no distance between control points", /* -25 */ "projection not selected to be rotated", /* -26 */ "W <= 0 or M <= 0", /* -27 */ "lsat not in 1-5 range", /* -28 */ "path not in range", /* -29 */ "h <= 0", /* -30 */ "k <= 0", /* -31 */ "lat_0 = 0 or 90 or alpha = 90", /* -32 */ "lat_1=lat_2 or lat_1=0 or lat_2=90", /* -33 */ "elliptical usage required", /* -34 */ "invalid UTM zone number", /* -35 */ "arg(s) out of range for Tcheby eval", /* -36 */ "failed to find projection to be rotated", /* -37 */ "failed to load NAD27-83 correction file", /* -38 */ "both n & m must be spec'd and > 0", /* -39 */ "n <= 0, n > 1 or not specified", /* -40 */ "lat_1 or lat_2 not specified", /* -41 */ "|lat_1| == |lat_2|", /* -42 */ "lat_0 is pi/2 from mean lat", /* -43 */ "unparseable coordinate system definition", /* -44 */ "geocentric transformation missing z or ellps", /* -45 */ "unknown prime meridian conversion id", /* -46 */ }; char * pj_strerrno(int err) { static char note[50]; if (err > 0) #ifdef HAVE_STRERROR return strerror(err); #else { sprintf(note,"no system list, errno: %d\n", err); return note; } #endif else if (err < 0) { int adjusted_err = - err - 1; if (adjusted_err < (sizeof(pj_err_list) / sizeof(char *))) return(pj_err_list[adjusted_err]); else { sprintf( note, "invalid projection system error (%d)", err ); return note; } } else return NULL; } therion-5.4.1/extern/proj4/pj_transform.c000066400000000000000000000551071307545355600204310ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Perform overall coordinate system to coordinate system * transformations (pj_transform() function) including reprojection * and datum shifting. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #include #include #include #include "geocent.h" PJ_CVSID("$Id: pj_transform.c 1504 2009-01-06 02:11:57Z warmerdam $"); #ifndef SRS_WGS84_SEMIMAJOR #define SRS_WGS84_SEMIMAJOR 6378137.0 #endif #ifndef SRS_WGS84_ESQUARED #define SRS_WGS84_ESQUARED 0.0066943799901413165 #endif #define Dx_BF (defn->datum_params[0]) #define Dy_BF (defn->datum_params[1]) #define Dz_BF (defn->datum_params[2]) #define Rx_BF (defn->datum_params[3]) #define Ry_BF (defn->datum_params[4]) #define Rz_BF (defn->datum_params[5]) #define M_BF (defn->datum_params[6]) /* ** This table is intended to indicate for any given error code in ** the range 0 to -44, whether that error will occur for all locations (ie. ** it is a problem with the coordinate system as a whole) in which case the ** value would be 0, or if the problem is with the point being transformed ** in which case the value is 1. ** ** At some point we might want to move this array in with the error message ** list or something, but while experimenting with it this should be fine. */ static const int transient_error[45] = { /* 0 1 2 3 4 5 6 7 8 9 */ /* 0 to 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 to 19 */ 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, /* 20 to 29 */ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, /* 30 to 39 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, /* 40 to 44 */ 0, 0, 0, 0, 0 }; /************************************************************************/ /* pj_transform() */ /* */ /* Currently this function doesn't recognise if two projections */ /* are identical (to short circuit reprojection) because it is */ /* difficult to compare PJ structures (since there are some */ /* projection specific components). */ /************************************************************************/ int pj_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, double *x, double *y, double *z ) { long i; int need_datum_shift; pj_errno = 0; if( point_offset == 0 ) point_offset = 1; /* -------------------------------------------------------------------- */ /* Transform geocentric source coordinates to lat/long. */ /* -------------------------------------------------------------------- */ if( srcdefn->is_geocent ) { if( z == NULL ) { pj_errno = PJD_ERR_GEOCENTRIC; return PJD_ERR_GEOCENTRIC; } if( srcdefn->to_meter != 1.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) { x[point_offset*i] *= srcdefn->to_meter; y[point_offset*i] *= srcdefn->to_meter; } } } if( pj_geocentric_to_geodetic( srcdefn->a_orig, srcdefn->es_orig, point_count, point_offset, x, y, z ) != 0) return pj_errno; } /* -------------------------------------------------------------------- */ /* Transform source points to lat/long, if they aren't */ /* already. */ /* -------------------------------------------------------------------- */ else if( !srcdefn->is_latlong ) { if( srcdefn->inv == NULL ) { pj_errno = -17; /* this isn't correct, we need a no inverse err */ if( getenv( "PROJ_DEBUG" ) != NULL ) { fprintf( stderr, "pj_transform(): source projection not invertable\n" ); } return pj_errno; } for( i = 0; i < point_count; i++ ) { XY projected_loc; LP geodetic_loc; projected_loc.u = x[point_offset*i]; projected_loc.v = y[point_offset*i]; if( projected_loc.u == HUGE_VAL ) continue; geodetic_loc = pj_inv( projected_loc, srcdefn ); if( pj_errno != 0 ) { if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) && (pj_errno > 0 || pj_errno < -44 || point_count == 1 || transient_error[-pj_errno] == 0 ) ) return pj_errno; else { geodetic_loc.u = HUGE_VAL; geodetic_loc.v = HUGE_VAL; } } x[point_offset*i] = geodetic_loc.u; y[point_offset*i] = geodetic_loc.v; } } /* -------------------------------------------------------------------- */ /* But if they are already lat long, adjust for the prime */ /* meridian if there is one in effect. */ /* -------------------------------------------------------------------- */ if( srcdefn->from_greenwich != 0.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) x[point_offset*i] += srcdefn->from_greenwich; } } /* -------------------------------------------------------------------- */ /* Convert datums if needed, and possible. */ /* -------------------------------------------------------------------- */ if( pj_datum_transform( srcdefn, dstdefn, point_count, point_offset, x, y, z ) != 0 ) return pj_errno; /* -------------------------------------------------------------------- */ /* But if they are staying lat long, adjust for the prime */ /* meridian if there is one in effect. */ /* -------------------------------------------------------------------- */ if( dstdefn->from_greenwich != 0.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) x[point_offset*i] -= dstdefn->from_greenwich; } } /* -------------------------------------------------------------------- */ /* Transform destination latlong to geocentric if required. */ /* -------------------------------------------------------------------- */ if( dstdefn->is_geocent ) { if( z == NULL ) { pj_errno = PJD_ERR_GEOCENTRIC; return PJD_ERR_GEOCENTRIC; } pj_geodetic_to_geocentric( dstdefn->a_orig, dstdefn->es_orig, point_count, point_offset, x, y, z ); if( dstdefn->fr_meter != 1.0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] != HUGE_VAL ) { x[point_offset*i] *= dstdefn->fr_meter; y[point_offset*i] *= dstdefn->fr_meter; } } } } /* -------------------------------------------------------------------- */ /* Transform destination points to projection coordinates, if */ /* desired. */ /* -------------------------------------------------------------------- */ else if( !dstdefn->is_latlong ) { for( i = 0; i < point_count; i++ ) { XY projected_loc; LP geodetic_loc; geodetic_loc.u = x[point_offset*i]; geodetic_loc.v = y[point_offset*i]; if( geodetic_loc.u == HUGE_VAL ) continue; projected_loc = pj_fwd( geodetic_loc, dstdefn ); if( pj_errno != 0 ) { if( (pj_errno != 33 /*EDOM*/ && pj_errno != 34 /*ERANGE*/ ) && (pj_errno > 0 || pj_errno < -44 || point_count == 1 || transient_error[-pj_errno] == 0 ) ) return pj_errno; else { projected_loc.u = HUGE_VAL; projected_loc.v = HUGE_VAL; } } x[point_offset*i] = projected_loc.u; y[point_offset*i] = projected_loc.v; } } /* -------------------------------------------------------------------- */ /* If a wrapping center other than 0 is provided, rewrap around */ /* the suggested center (for latlong coordinate systems only). */ /* -------------------------------------------------------------------- */ else if( dstdefn->is_latlong && dstdefn->long_wrap_center != 0 ) { for( i = 0; i < point_count; i++ ) { if( x[point_offset*i] == HUGE_VAL ) continue; while( x[point_offset*i] < dstdefn->long_wrap_center - HALFPI ) x[point_offset*i] += PI; while( x[point_offset*i] > dstdefn->long_wrap_center + HALFPI ) x[point_offset*i] -= PI; } } return 0; } /************************************************************************/ /* pj_geodetic_to_geocentric() */ /************************************************************************/ int pj_geodetic_to_geocentric( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ) { double b; int i; GeocentricInfo gi; pj_errno = 0; if( es == 0.0 ) b = a; else b = a * sqrt(1-es); if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { pj_errno = PJD_ERR_GEOCENTRIC; return pj_errno; } for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; if( pj_Convert_Geodetic_To_Geocentric( &gi, y[io], x[io], z[io], x+io, y+io, z+io ) != 0 ) { pj_errno = -14; x[io] = y[io] = HUGE_VAL; /* but keep processing points! */ } } return pj_errno; } /************************************************************************/ /* pj_geodetic_to_geocentric() */ /************************************************************************/ int pj_geocentric_to_geodetic( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ) { double b; int i; GeocentricInfo gi; if( es == 0.0 ) b = a; else b = a * sqrt(1-es); if( pj_Set_Geocentric_Parameters( &gi, a, b ) != 0 ) { pj_errno = PJD_ERR_GEOCENTRIC; return pj_errno; } for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; pj_Convert_Geocentric_To_Geodetic( &gi, x[io], y[io], z[io], y+io, x+io, z+io ); } return 0; } /************************************************************************/ /* pj_compare_datums() */ /* */ /* Returns TRUE if the two datums are identical, otherwise */ /* FALSE. */ /************************************************************************/ int pj_compare_datums( PJ *srcdefn, PJ *dstdefn ) { if( srcdefn->datum_type != dstdefn->datum_type ) { return 0; } else if( srcdefn->a_orig != dstdefn->a_orig || ABS(srcdefn->es_orig - dstdefn->es_orig) > 0.000000000050 ) { /* the tolerence for es is to ensure that GRS80 and WGS84 are considered identical */ return 0; } else if( srcdefn->datum_type == PJD_3PARAM ) { return (srcdefn->datum_params[0] == dstdefn->datum_params[0] && srcdefn->datum_params[1] == dstdefn->datum_params[1] && srcdefn->datum_params[2] == dstdefn->datum_params[2]); } else if( srcdefn->datum_type == PJD_7PARAM ) { return (srcdefn->datum_params[0] == dstdefn->datum_params[0] && srcdefn->datum_params[1] == dstdefn->datum_params[1] && srcdefn->datum_params[2] == dstdefn->datum_params[2] && srcdefn->datum_params[3] == dstdefn->datum_params[3] && srcdefn->datum_params[4] == dstdefn->datum_params[4] && srcdefn->datum_params[5] == dstdefn->datum_params[5] && srcdefn->datum_params[6] == dstdefn->datum_params[6]); } else if( srcdefn->datum_type == PJD_GRIDSHIFT ) { return strcmp( pj_param(srcdefn->params,"snadgrids").s, pj_param(dstdefn->params,"snadgrids").s ) == 0; } else return 1; } /************************************************************************/ /* pj_geocentic_to_wgs84() */ /************************************************************************/ int pj_geocentric_to_wgs84( PJ *defn, long point_count, int point_offset, double *x, double *y, double *z ) { int i; pj_errno = 0; if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; x[io] = x[io] + Dx_BF; y[io] = y[io] + Dy_BF; z[io] = z[io] + Dz_BF; } } else if( defn->datum_type == PJD_7PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; double x_out, y_out, z_out; if( x[io] == HUGE_VAL ) continue; x_out = M_BF*( x[io] - Rz_BF*y[io] + Ry_BF*z[io]) + Dx_BF; y_out = M_BF*( Rz_BF*x[io] + y[io] - Rx_BF*z[io]) + Dy_BF; z_out = M_BF*(-Ry_BF*x[io] + Rx_BF*y[io] + z[io]) + Dz_BF; x[io] = x_out; y[io] = y_out; z[io] = z_out; } } return 0; } /************************************************************************/ /* pj_geocentic_from_wgs84() */ /************************************************************************/ int pj_geocentric_from_wgs84( PJ *defn, long point_count, int point_offset, double *x, double *y, double *z ) { int i; pj_errno = 0; if( defn->datum_type == PJD_3PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; if( x[io] == HUGE_VAL ) continue; x[io] = x[io] - Dx_BF; y[io] = y[io] - Dy_BF; z[io] = z[io] - Dz_BF; } } else if( defn->datum_type == PJD_7PARAM ) { for( i = 0; i < point_count; i++ ) { long io = i * point_offset; double x_tmp, y_tmp, z_tmp; if( x[io] == HUGE_VAL ) continue; x_tmp = (x[io] - Dx_BF) / M_BF; y_tmp = (y[io] - Dy_BF) / M_BF; z_tmp = (z[io] - Dz_BF) / M_BF; x[io] = x_tmp + Rz_BF*y_tmp - Ry_BF*z_tmp; y[io] = -Rz_BF*x_tmp + y_tmp + Rx_BF*z_tmp; z[io] = Ry_BF*x_tmp - Rx_BF*y_tmp + z_tmp; } } return 0; } /************************************************************************/ /* pj_datum_transform() */ /* */ /* The input should be long/lat/z coordinates in radians in the */ /* source datum, and the output should be long/lat/z */ /* coordinates in radians in the destination datum. */ /************************************************************************/ int pj_datum_transform( PJ *srcdefn, PJ *dstdefn, long point_count, int point_offset, double *x, double *y, double *z ) { double src_a, src_es, dst_a, dst_es; int z_is_temp = FALSE; pj_errno = 0; /* -------------------------------------------------------------------- */ /* We cannot do any meaningful datum transformation if either */ /* the source or destination are of an unknown datum type */ /* (ie. only a +ellps declaration, no +datum). This is new */ /* behavior for PROJ 4.6.0. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_UNKNOWN || dstdefn->datum_type == PJD_UNKNOWN ) return 0; /* -------------------------------------------------------------------- */ /* Short cut if the datums are identical. */ /* -------------------------------------------------------------------- */ if( pj_compare_datums( srcdefn, dstdefn ) ) return 0; src_a = srcdefn->a_orig; src_es = srcdefn->es_orig; dst_a = dstdefn->a_orig; dst_es = dstdefn->es_orig; /* -------------------------------------------------------------------- */ /* Create a temporary Z array if one is not provided. */ /* -------------------------------------------------------------------- */ if( z == NULL ) { int bytes = sizeof(double) * point_count * point_offset; z = (double *) pj_malloc(bytes); memset( z, 0, bytes ); z_is_temp = TRUE; } #define CHECK_RETURN {if( pj_errno != 0 && (pj_errno > 0 || transient_error[-pj_errno] == 0) ) { if( z_is_temp ) pj_dalloc(z); return pj_errno; }} /* -------------------------------------------------------------------- */ /* If this datum requires grid shifts, then apply it to geodetic */ /* coordinates. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_GRIDSHIFT ) { pj_apply_gridshift( pj_param(srcdefn->params,"snadgrids").s, 0, point_count, point_offset, x, y, z ); CHECK_RETURN; src_a = SRS_WGS84_SEMIMAJOR; src_es = SRS_WGS84_ESQUARED; } if( dstdefn->datum_type == PJD_GRIDSHIFT ) { dst_a = SRS_WGS84_SEMIMAJOR; dst_es = SRS_WGS84_ESQUARED; } /* ==================================================================== */ /* Do we need to go through geocentric coordinates? */ /* ==================================================================== */ if( src_es != dst_es || src_a != dst_a || srcdefn->datum_type == PJD_3PARAM || srcdefn->datum_type == PJD_7PARAM || dstdefn->datum_type == PJD_3PARAM || dstdefn->datum_type == PJD_7PARAM) { /* -------------------------------------------------------------------- */ /* Convert to geocentric coordinates. */ /* -------------------------------------------------------------------- */ pj_geodetic_to_geocentric( src_a, src_es, point_count, point_offset, x, y, z ); CHECK_RETURN; /* -------------------------------------------------------------------- */ /* Convert between datums. */ /* -------------------------------------------------------------------- */ if( srcdefn->datum_type == PJD_3PARAM || srcdefn->datum_type == PJD_7PARAM ) { pj_geocentric_to_wgs84( srcdefn, point_count, point_offset,x,y,z); CHECK_RETURN; } if( dstdefn->datum_type == PJD_3PARAM || dstdefn->datum_type == PJD_7PARAM ) { pj_geocentric_from_wgs84( dstdefn, point_count,point_offset,x,y,z); CHECK_RETURN; } /* -------------------------------------------------------------------- */ /* Convert back to geodetic coordinates. */ /* -------------------------------------------------------------------- */ pj_geocentric_to_geodetic( dst_a, dst_es, point_count, point_offset, x, y, z ); CHECK_RETURN; } /* -------------------------------------------------------------------- */ /* Apply grid shift to destination if required. */ /* -------------------------------------------------------------------- */ if( dstdefn->datum_type == PJD_GRIDSHIFT ) { pj_apply_gridshift( pj_param(dstdefn->params,"snadgrids").s, 1, point_count, point_offset, x, y, z ); CHECK_RETURN; } if( z_is_temp ) pj_dalloc( z ); return 0; } therion-5.4.1/extern/proj4/pj_tsfn.c000066400000000000000000000004001307545355600173520ustar00rootroot00000000000000/* determine small t */ #include #include #define HALFPI 1.5707963267948966 double pj_tsfn(double phi, double sinphi, double e) { sinphi *= e; return (tan (.5 * (HALFPI - phi)) / pow((1. - sinphi) / (1. + sinphi), .5 * e)); } therion-5.4.1/extern/proj4/pj_units.c000066400000000000000000000024251307545355600175530ustar00rootroot00000000000000/* definition of standard cartesian units */ #define PJ_UNITS__ #include /* Field 2 that contains the multiplier to convert named units to meters ** may be expressed by either a simple floating point constant or a ** numerator/denomenator values (e.g. 1/1000) */ C_NAMESPACE_VAR struct PJ_UNITS pj_units[] = { "km", "1000.", "Kilometer", "m", "1.", "Meter", "dm", "1/10", "Decimeter", "cm", "1/100", "Centimeter", "mm", "1/1000", "Millimeter", "kmi", "1852.0", "International Nautical Mile", "in", "0.0254", "International Inch", "ft", "0.3048", "International Foot", "yd", "0.9144", "International Yard", "mi", "1609.344", "International Statute Mile", "fath", "1.8288", "International Fathom", "ch", "20.1168", "International Chain", "link", "0.201168", "International Link", "us-in", "1./39.37", "U.S. Surveyor's Inch", "us-ft", "0.304800609601219", "U.S. Surveyor's Foot", "us-yd", "0.914401828803658", "U.S. Surveyor's Yard", "us-ch", "20.11684023368047", "U.S. Surveyor's Chain", "us-mi", "1609.347218694437", "U.S. Surveyor's Statute Mile", "ind-yd", "0.91439523", "Indian Yard", "ind-ft", "0.30479841", "Indian Foot", "ind-ch", "20.11669506", "Indian Chain", (char *)0, (char *)0, (char *)0 }; struct PJ_UNITS *pj_get_units_ref() { return pj_units; } therion-5.4.1/extern/proj4/pj_utils.c000066400000000000000000000135071307545355600175540ustar00rootroot00000000000000/****************************************************************************** * $Id: pj_utils.c 1504 2009-01-06 02:11:57Z warmerdam $ * * Project: PROJ.4 * Purpose: Some utility functions we don't want to bother putting in * their own source files. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ #define PJ_LIB__ #include #include #include /************************************************************************/ /* pj_is_latlong() */ /* */ /* Returns TRUE if this coordinate system object is */ /* geographic. */ /************************************************************************/ int pj_is_latlong( PJ *pj ) { return pj == NULL || pj->is_latlong; } /************************************************************************/ /* pj_is_geocent() */ /* */ /* Returns TRUE if this coordinate system object is geocentric. */ /************************************************************************/ int pj_is_geocent( PJ *pj ) { return pj != NULL && pj->is_geocent; } /************************************************************************/ /* pj_latlong_from_proj() */ /* */ /* Return a PJ* definition defining the lat/long coordinate */ /* system on which a projection is based. If the coordinate */ /* system passed in is latlong, a clone of the same will be */ /* returned. */ /************************************************************************/ PJ *pj_latlong_from_proj( PJ *pj_in ) { char defn[512]; int got_datum = FALSE; pj_errno = 0; strcpy( defn, "+proj=latlong" ); if( pj_param(pj_in->params, "tdatum").i ) { got_datum = TRUE; sprintf( defn+strlen(defn), " +datum=%s", pj_param(pj_in->params,"sdatum").s ); } else if( pj_param(pj_in->params, "tellps").i ) { sprintf( defn+strlen(defn), " +ellps=%s", pj_param(pj_in->params,"sellps").s ); } else if( pj_param(pj_in->params, "ta").i ) { sprintf( defn+strlen(defn), " +a=%s", pj_param(pj_in->params,"sa").s ); if( pj_param(pj_in->params, "tb").i ) sprintf( defn+strlen(defn), " +b=%s", pj_param(pj_in->params,"sb").s ); else if( pj_param(pj_in->params, "tes").i ) sprintf( defn+strlen(defn), " +es=%s", pj_param(pj_in->params,"ses").s ); else if( pj_param(pj_in->params, "tf").i ) sprintf( defn+strlen(defn), " +f=%s", pj_param(pj_in->params,"sf").s ); else sprintf( defn+strlen(defn), " +es=%.16g", pj_in->es ); } else { pj_errno = -13; return NULL; } if( !got_datum ) { if( pj_param(pj_in->params, "ttowgs84").i ) sprintf( defn+strlen(defn), " +towgs84=%s", pj_param(pj_in->params,"stowgs84").s ); if( pj_param(pj_in->params, "tnadgrids").i ) sprintf( defn+strlen(defn), " +nadgrids=%s", pj_param(pj_in->params,"snadgrids").s ); } /* copy over some other information related to ellipsoid */ if( pj_param(pj_in->params, "tR").i ) sprintf( defn+strlen(defn), " +R=%s", pj_param(pj_in->params,"sR").s ); if( pj_param(pj_in->params, "tR_A").i ) sprintf( defn+strlen(defn), " +R_A" ); if( pj_param(pj_in->params, "tR_V").i ) sprintf( defn+strlen(defn), " +R_V" ); if( pj_param(pj_in->params, "tR_a").i ) sprintf( defn+strlen(defn), " +R_a" ); if( pj_param(pj_in->params, "tR_lat_a").i ) sprintf( defn+strlen(defn), " +R_lat_a=%s", pj_param(pj_in->params,"sR_lat_a").s ); if( pj_param(pj_in->params, "tR_lat_g").i ) sprintf( defn+strlen(defn), " +R_lat_g=%s", pj_param(pj_in->params,"sR_lat_g").s ); /* copy over prime meridian */ if( pj_param(pj_in->params, "tpm").i ) sprintf( defn+strlen(defn), " +pm=%s", pj_param(pj_in->params,"spm").s ); return pj_init_plus( defn ); } therion-5.4.1/extern/proj4/pj_zpoly1.c000066400000000000000000000020141307545355600176410ustar00rootroot00000000000000/* evaluate complex polynomial */ #include /* note: coefficients are always from C_1 to C_n ** i.e. C_0 == (0., 0) ** n should always be >= 1 though no checks are made */ COMPLEX pj_zpoly1(COMPLEX z, COMPLEX *C, int n) { COMPLEX a; double t; a = *(C += n); while (n-- > 0) { a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; a.i = C->i + z.r * a.i + z.i * t; } a.r = z.r * (t = a.r) - z.i * a.i; a.i = z.r * a.i + z.i * t; return a; } /* evaluate complex polynomial and derivative */ COMPLEX pj_zpolyd1(COMPLEX z, COMPLEX *C, int n, COMPLEX *der) { COMPLEX a, b; double t; int first = 1; a = *(C += n); while (n-- > 0) { if (first) { first = 0; b = a; } else { b.r = a.r + z.r * (t = b.r) - z.i * b.i; b.i = a.i + z.r * b.i + z.i * t; } a.r = (--C)->r + z.r * (t = a.r) - z.i * a.i; a.i = C->i + z.r * a.i + z.i * t; } b.r = a.r + z.r * (t = b.r) - z.i * b.i; b.i = a.i + z.r * b.i + z.i * t; a.r = z.r * (t = a.r) - z.i * a.i; a.i = z.r * a.i + z.i * t; *der = b; return a; } therion-5.4.1/extern/proj4/proj_api.h000066400000000000000000000074461307545355600175400ustar00rootroot00000000000000/****************************************************************************** * $Id: proj_api.h 1631 2009-09-24 02:26:05Z warmerdam $ * * Project: PROJ.4 * Purpose: Public (application) include file for PROJ.4 API, and constants. * Author: Frank Warmerdam, * ****************************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* General projections header file */ #ifndef PROJ_API_H #define PROJ_API_H /* standard inclusions */ #include #include #ifdef __cplusplus extern "C" { #endif /* Try to update this every version! */ #define PJ_VERSION 470 extern char const pj_release[]; /* global release id string */ #define RAD_TO_DEG 57.29577951308232 #define DEG_TO_RAD .0174532925199432958 extern int pj_errno; /* global error return code */ #if !defined(PROJECTS_H) typedef struct { double u, v; } projUV; typedef void *projPJ; #define projXY projUV #define projLP projUV #else typedef PJ *projPJ; # define projXY XY # define projLP LP #endif /* procedure prototypes */ projXY pj_fwd(projLP, projPJ); projLP pj_inv(projXY, projPJ); int pj_transform( projPJ src, projPJ dst, long point_count, int point_offset, double *x, double *y, double *z ); int pj_datum_transform( projPJ src, projPJ dst, long point_count, int point_offset, double *x, double *y, double *z ); int pj_geocentric_to_geodetic( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ); int pj_geodetic_to_geocentric( double a, double es, long point_count, int point_offset, double *x, double *y, double *z ); int pj_compare_datums( projPJ srcdefn, projPJ dstdefn ); int pj_apply_gridshift( const char *, int, long point_count, int point_offset, double *x, double *y, double *z ); void pj_deallocate_grids(void); int pj_is_latlong(projPJ); int pj_is_geocent(projPJ); void pj_pr_list(projPJ); void pj_free(projPJ); void pj_set_finder( const char *(*)(const char *) ); void pj_set_searchpath ( int count, const char **path ); projPJ pj_init(int, char **); projPJ pj_init_plus(const char *); char *pj_get_def(projPJ, int); projPJ pj_latlong_from_proj( projPJ ); void *pj_malloc(size_t); void pj_dalloc(void *); char *pj_strerrno(int); int *pj_get_errno_ref(void); const char *pj_get_release(void); void pj_acquire_lock(void); void pj_release_lock(void); void pj_cleanup_lock(void); #ifdef __cplusplus } #endif #endif /* ndef PROJ_API_H */ therion-5.4.1/extern/proj4/proj_config.h000066400000000000000000000034141307545355600202230ustar00rootroot00000000000000/* src/proj_config.h. Generated from proj_config.h.in by configure. */ /* src/proj_config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ /* #undef HAVE_DLFCN_H */ /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Enabled for Java/JNI Support */ #define JNI_ENABLED 1 /* Name of package */ #define PACKAGE "proj" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "warmerdam@pobox.com" /* Define to the full name of this package. */ #define PACKAGE_NAME "PROJ.4 Projections" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "PROJ.4 Projections 4.7.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "proj" /* Define to the version of this package. */ #define PACKAGE_VERSION "4.7.0" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ #define VERSION "4.7.0" therion-5.4.1/extern/proj4/proj_mdist.c000066400000000000000000000063341307545355600200750ustar00rootroot00000000000000/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: proj_mdist.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* Computes distance from equator along the meridian to latitude phi ** and inverse on unit ellipsoid. ** Precision commensurate with double precision. */ #define PROJ_LIB__ #include #define MAX_ITER 20 #define TOL 1e-14 struct MDIST { int nb; double es; double E; double b[1]; }; #define B ((struct MDIST *)b) void * proj_mdist_ini(double es) { double numf, numfi, twon1, denf, denfi, ens, T, twon; double den, El, Es; double E[MAX_ITER]; struct MDIST *b; int i, j; /* generate E(e^2) and its terms E[] */ ens = es; numf = twon1 = denfi = 1.; denf = 1.; twon = 4.; Es = El = E[0] = 1.; for (i = 1; i < MAX_ITER ; ++i) { numf *= (twon1 * twon1); den = twon * denf * denf * twon1; T = numf/den; Es -= (E[i] = T * ens); ens *= es; twon *= 4.; denf *= ++denfi; twon1 += 2.; if (Es == El) /* jump out if no change */ break; El = Es; } if ((b = (struct MDIST *)malloc(sizeof(struct MDIST)+ (i*sizeof(double)))) == NULL) return(NULL); b->nb = i - 1; b->es = es; b->E = Es; /* generate b_n coefficients--note: collapse with prefix ratios */ b->b[0] = Es = 1. - Es; numf = denf = 1.; numfi = 2.; denfi = 3.; for (j = 1; j < i; ++j) { Es -= E[j]; numf *= numfi; denf *= denfi; b->b[j] = Es * numf / denf; numfi += 2.; denfi += 2.; } return (b); } double proj_mdist(double phi, double sphi, double cphi, const void *b) { double sc, sum, sphi2, D; int i; sc = sphi * cphi; sphi2 = sphi * sphi; D = phi * B->E - B->es * sc / sqrt(1. - B->es * sphi2); sum = B->b[i = B->nb]; while (i) sum = B->b[--i] + sphi2 * sum; return(D + sc * sum); } double proj_inv_mdist(double dist, const void *b) { double s, t, phi, k; int i; k = 1./(1.- B->es); i = MAX_ITER; phi = dist; while ( i-- ) { s = sin(phi); t = 1. - B->es * s * s; phi -= t = (proj_mdist(phi, s, cos(phi), b) - dist) * (t * sqrt(t)) * k; if (fabs(t) < TOL) /* that is no change */ return phi; } /* convergence failed */ pj_errno = -17; return phi; } therion-5.4.1/extern/proj4/proj_rouss.c000066400000000000000000000103701307545355600201230ustar00rootroot00000000000000/* ** libproj -- library of cartographic projections ** ** Copyright (c) 2003, 2006 Gerald I. Evenden */ static const char LIBPROJ_ID[] = "$Id: proj_rouss.c 1504 2009-01-06 02:11:57Z warmerdam $"; /* ** Permission is hereby granted, free of charge, to any person obtaining ** a copy of this software and associated documentation files (the ** "Software"), to deal in the Software without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Software, and to ** permit persons to whom the Software is furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be ** included in all copies or substantial portions of the Software. ** ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define PROJ_PARMS__ \ double s0; \ double A1, A2, A3, A4, A5, A6; \ double B1, B2, B3, B4, B5, B6, B7, B8; \ double C1, C2, C3, C4, C5, C6, C7, C8; \ double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11; \ void *en; #define PJ_LIB__ # include PROJ_HEAD(rouss, "Roussilhe Stereographic") "\n\tAzi., Ellps."; FORWARD(e_forward); /* ellipsoid */ double s, al, cp, sp, al2, s2; cp = cos(lp.phi); sp = sin(lp.phi); s = proj_mdist(lp.phi, sp, cp, P->en) - P->s0; s2 = s * s; al = lp.lam * cp / sqrt(1. - P->es * sp * sp); al2 = al * al; xy.x = P->k0 * al*(1.+s2*(P->A1+s2*P->A4)-al2*(P->A2+s*P->A3+s2*P->A5 +al2*P->A6)); xy.y = P->k0 * (al2*(P->B1+al2*P->B4)+ s*(1.+al2*(P->B3-al2*P->B6)+s2*(P->B2+s2*P->B8)+ s*al2*(P->B5+s*P->B7))); return (xy); } INVERSE(e_inverse); /* ellipsoid */ double s, al, x = xy.x / P->k0, y = xy.y / P->k0, x2, y2;; x2 = x * x; y2 = y * y; al = x*(1.-P->C1*y2+x2*(P->C2+P->C3*y-P->C4*x2+P->C5*y2-P->C7*x2*y) +y2*(P->C6*y2-P->C8*x2*y)); s = P->s0 + y*(1.+y2*(-P->D2+P->D8*y2))+ x2*(-P->D1+y*(-P->D3+y*(-P->D5+y*(-P->D7+y*P->D11)))+ x2*(P->D4+y*(P->D6+y*P->D10)-x2*P->D9)); lp.phi=proj_inv_mdist(s, P->en); s = sin(lp.phi); lp.lam=al * sqrt(1. - P->es * s * s)/cos(lp.phi); return (lp); } FREEUP; if (P) { if (P->en) free(P->en); free(P); } } ENTRY1(rouss, en) double N0, es2, t, t2, R_R0_2, R_R0_4; if (!((P->en = proj_mdist_ini(P->es)))) E_ERROR_0; es2 = sin(P->phi0); P->s0 = proj_mdist(P->phi0, es2, cos(P->phi0), P->en); t = 1. - (es2 = P->es * es2 * es2); N0 = 1./sqrt(t); R_R0_2 = t * t / P->one_es; R_R0_4 = R_R0_2 * R_R0_2; t = tan(P->phi0); t2 = t * t; P->C1 = P->A1 = R_R0_2 / 4.; P->C2 = P->A2 = R_R0_2 * (2 * t2 - 1. - 2. * es2) / 12.; P->A3 = R_R0_2 * t * (1. + 4. * t2)/ ( 12. * N0); P->A4 = R_R0_4 / 24.; P->A5 = R_R0_4 * ( -1. + t2 * (11. + 12. * t2))/24.; P->A6 = R_R0_4 * ( -2. + t2 * (11. - 2. * t2))/240.; P->B1 = t / (2. * N0); P->B2 = R_R0_2 / 12.; P->B3 = R_R0_2 * (1. + 2. * t2 - 2. * es2)/4.; P->B4 = R_R0_2 * t * (2. - t2)/(24. * N0); P->B5 = R_R0_2 * t * (5. + 4.* t2)/(8. * N0); P->B6 = R_R0_4 * (-2. + t2 * (-5. + 6. * t2))/48.; P->B7 = R_R0_4 * (5. + t2 * (19. + 12. * t2))/24.; P->B8 = R_R0_4 / 120.; P->C3 = R_R0_2 * t * (1. + t2)/(3. * N0); P->C4 = R_R0_4 * (-3. + t2 * (34. + 22. * t2))/240.; P->C5 = R_R0_4 * (4. + t2 * (13. + 12. * t2))/24.; P->C6 = R_R0_4 / 16.; P->C7 = R_R0_4 * t * (11. + t2 * (33. + t2 * 16.))/(48. * N0); P->C8 = R_R0_4 * t * (1. + t2 * 4.)/(36. * N0); P->D1 = t / (2. * N0); P->D2 = R_R0_2 / 12.; P->D3 = R_R0_2 * (2 * t2 + 1. - 2. * es2) / 4.; P->D4 = R_R0_2 * t * (1. + t2)/(8. * N0); P->D5 = R_R0_2 * t * (1. + t2 * 2.)/(4. * N0); P->D6 = R_R0_4 * (1. + t2 * (6. + t2 * 6.))/16.; P->D7 = R_R0_4 * t2 * (3. + t2 * 4.)/8.; P->D8 = R_R0_4 / 80.; P->D9 = R_R0_4 * t * (-21. + t2 * (178. - t2 * 26.))/720.; P->D10 = R_R0_4 * t * (29. + t2 * (86. + t2 * 48.))/(96. * N0); P->D11 = R_R0_4 * t * (37. + t2 * 44.)/(96. * N0); P->fwd = e_forward; P->inv = e_inverse; ENDENTRY(P) therion-5.4.1/extern/proj4/projects.h000066400000000000000000000315541307545355600175630ustar00rootroot00000000000000/****************************************************************************** * $Id: projects.h 1625 2009-09-23 18:58:15Z warmerdam $ * * Project: PROJ.4 * Purpose: Primary (private) include file for PROJ.4 library. * Author: Gerald Evenden * ****************************************************************************** * Copyright (c) 2000, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *****************************************************************************/ /* General projections header file */ #ifndef PROJECTS_H #define PROJECTS_H #ifdef _MSC_VER # ifndef _CRT_SECURE_NO_DEPRECATE # define _CRT_SECURE_NO_DEPRECATE # endif # ifndef _CRT_NONSTDC_NO_DEPRECATE # define _CRT_NONSTDC_NO_DEPRECATE # endif #endif /* standard inclusions */ #include #include #include #ifdef __cplusplus #define C_NAMESPACE extern "C" #define C_NAMESPACE_VAR extern "C" extern "C" { #else #define C_NAMESPACE extern #define C_NAMESPACE_VAR #endif #ifndef NULL # define NULL 0 #endif #ifndef FALSE # define FALSE 0 #endif #ifndef TRUE # define TRUE 1 #endif #ifndef MAX # define MIN(a,b) ((ab) ? a : b) #endif #ifndef ABS # define ABS(x) ((x<0) ? (-1*(x)) : x) #endif /* maximum path/filename */ #ifndef MAX_PATH_FILENAME #define MAX_PATH_FILENAME 1024 #endif /* prototype hypot for systems where absent */ #ifndef _WIN32 extern double hypot(double, double); #endif #ifdef _WIN32_WCE # include # include # define rewind wceex_rewind # define getenv wceex_getenv # define strdup _strdup # define hypot _hypot #endif /* some useful constants */ #define HALFPI 1.5707963267948966 #define FORTPI 0.78539816339744833 #define PI 3.14159265358979323846 #define TWOPI 6.2831853071795864769 /* environment parameter name */ #ifndef PROJ_LIB #define PROJ_LIB "PROJ_LIB" #endif /* maximum tag id length for +init and default files */ #ifndef ID_TAG_MAX #define ID_TAG_MAX 50 #endif /* Use WIN32 as a standard windows 32 bit declaration */ #if defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) # define WIN32 #endif #if defined(_WINDOWS) && !defined(WIN32) && !defined(_WIN32_WCE) # define WIN32 #endif /* directory delimiter for DOS support */ #ifdef WIN32 #define DIR_CHAR '\\' #else #define DIR_CHAR '/' #endif /* datum_type values */ #define PJD_UNKNOWN 0 #define PJD_3PARAM 1 #define PJD_7PARAM 2 #define PJD_GRIDSHIFT 3 #define PJD_WGS84 4 /* WGS84 (or anything considered equivelent) */ /* datum system errors */ #define PJD_ERR_GEOCENTRIC -45 #define USE_PROJUV typedef struct { double u, v; } projUV; typedef struct { double r, i; } COMPLEX; #ifndef PJ_LIB__ #define XY projUV #define LP projUV #else typedef struct { double x, y; } XY; typedef struct { double lam, phi; } LP; #endif typedef union { double f; int i; char *s; } PVALUE; struct PJconsts; struct PJ_LIST { char *id; /* projection keyword */ struct PJconsts *(*proj)(struct PJconsts*);/* projection entry point */ char * const *descr; /* description text */ }; struct PJ_ELLPS { char *id; /* ellipse keyword name */ char *major; /* a= value */ char *ell; /* elliptical parameter */ char *name; /* comments */ }; struct PJ_UNITS { char *id; /* units keyword */ char *to_meter; /* multiply by value to get meters */ char *name; /* comments */ }; struct PJ_DATUMS { char *id; /* datum keyword */ char *defn; /* ie. "to_wgs84=..." */ char *ellipse_id; /* ie from ellipse table */ char *comments; /* EPSG code, etc */ }; struct PJ_PRIME_MERIDIANS { char *id; /* prime meridian keyword */ char *defn; /* offset from greenwich in DMS format. */ }; struct DERIVS { double x_l, x_p; /* derivatives of x for lambda-phi */ double y_l, y_p; /* derivatives of y for lambda-phi */ }; struct FACTORS { struct DERIVS der; double h, k; /* meridinal, parallel scales */ double omega, thetap; /* angular distortion, theta prime */ double conv; /* convergence */ double s; /* areal scale factor */ double a, b; /* max-min scale error */ int code; /* info as to analytics, see following */ }; #define IS_ANAL_XL_YL 01 /* derivatives of lon analytic */ #define IS_ANAL_XP_YP 02 /* derivatives of lat analytic */ #define IS_ANAL_HK 04 /* h and k analytic */ #define IS_ANAL_CONV 010 /* convergence analytic */ /* parameter list struct */ typedef struct ARG_list { struct ARG_list *next; char used; char param[1]; } paralist; /* base projection data structure */ typedef struct PJconsts { XY (*fwd)(LP, struct PJconsts *); LP (*inv)(XY, struct PJconsts *); void (*spc)(LP, struct PJconsts *, struct FACTORS *); void (*pfree)(struct PJconsts *); const char *descr; paralist *params; /* parameter list */ int over; /* over-range flag */ int geoc; /* geocentric latitude flag */ int is_latlong; /* proj=latlong ... not really a projection at all */ int is_geocent; /* proj=geocent ... not really a projection at all */ double a, /* major axis or radius if es==0 */ a_orig, /* major axis before any +proj related adjustment */ es, /* e ^ 2 */ es_orig, /* es before any +proj related adjustment */ e, /* eccentricity */ ra, /* 1/A */ one_es, /* 1 - e^2 */ rone_es, /* 1/one_es */ lam0, phi0, /* central longitude, latitude */ x0, y0, /* easting and northing */ k0, /* general scaling factor */ to_meter, fr_meter; /* cartesian scaling */ int datum_type; /* PJD_UNKNOWN/3PARAM/7PARAM/GRIDSHIFT/WGS84 */ double datum_params[7]; double from_greenwich; /* prime meridian offset (in radians) */ double long_wrap_center; /* 0.0 for -180 to 180, actually in radians*/ #ifdef PROJ_PARMS__ PROJ_PARMS__ #endif /* end of optional extensions */ } PJ; /* public API */ #include "proj_api.h" /* Generate pj_list external or make list from include file */ #ifndef PJ_LIST_H extern struct PJ_LIST pj_list[]; #else #define PROJ_HEAD(id, name) \ struct PJconsts *pj_##id(struct PJconsts*); extern char * const pj_s_##id; #ifndef lint #define DO_PJ_LIST_ID #endif #include PJ_LIST_H #ifndef lint #undef DO_PJ_LIST_ID #endif #undef PROJ_HEAD #define PROJ_HEAD(id, name) {#id, pj_##id, &pj_s_##id}, struct PJ_LIST pj_list[] = { #include PJ_LIST_H {0, 0, 0}, }; #undef PROJ_HEAD #endif #ifndef PJ_ELLPS__ extern struct PJ_ELLPS pj_ellps[]; #endif #ifndef PJ_UNITS__ extern struct PJ_UNITS pj_units[]; #endif #ifndef PJ_DATUMS__ extern struct PJ_DATUMS pj_datums[]; extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[]; #endif #ifdef PJ_LIB__ /* repeatative projection code */ #define PROJ_HEAD(id, name) static const char des_##id [] = name #define ENTRYA(name) \ C_NAMESPACE_VAR const char * const pj_s_##name = des_##name; \ C_NAMESPACE PJ *pj_##name(PJ *P) { if (!P) { \ if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \ P->pfree = freeup; P->fwd = 0; P->inv = 0; \ P->spc = 0; P->descr = des_##name; #define ENTRYX } return P; } else { #define ENTRY0(name) ENTRYA(name) ENTRYX #define ENTRY1(name, a) ENTRYA(name) P->a = 0; ENTRYX #define ENTRY2(name, a, b) ENTRYA(name) P->a = 0; P->b = 0; ENTRYX #define ENDENTRY(p) } return (p); } #define E_ERROR(err) { pj_errno = err; freeup(P); return(0); } #define E_ERROR_0 { freeup(P); return(0); } #define F_ERROR { pj_errno = -20; return(xy); } #define I_ERROR { pj_errno = -20; return(lp); } #define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0} #define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0} #define FREEUP static void freeup(PJ *P) { #define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac) #endif #define MAX_TAB_ID 80 typedef struct { float lam, phi; } FLP; typedef struct { int lam, phi; } ILP; struct CTABLE { char id[MAX_TAB_ID]; /* ascii info */ LP ll; /* lower left corner coordinates */ LP del; /* size of cells */ ILP lim; /* limits of conversion matrix */ FLP *cvs; /* conversion matrix */ }; typedef struct _pj_gi { char *gridname; /* identifying name of grid, eg "conus" or ntv2_0.gsb */ char *filename; /* full path to filename */ const char *format; /* format of this grid, ie "ctable", "ntv1", "ntv2" or "missing". */ int grid_offset; /* offset in file, for delayed loading */ struct CTABLE *ct; struct _pj_gi *next; struct _pj_gi *child; } PJ_GRIDINFO; /* procedure prototypes */ double dmstor(const char *, char **); void set_rtodms(int, int); char *rtodms(char *, double, int, int); double adjlon(double); double aacos(double), aasin(double), asqrt(double), aatan2(double, double); PVALUE pj_param(paralist *, char *); paralist *pj_mkparam(char *); int pj_ell_set(paralist *, double *, double *); int pj_datum_set(paralist *, PJ *); int pj_prime_meridian_set(paralist *, PJ *); int pj_angular_units_set(paralist *, PJ *); paralist *pj_clone_paralist( const paralist* ); void pj_clear_initcache(void); paralist*pj_search_initcache( const char *filekey ); void pj_insert_initcache( const char *filekey, const paralist *list); double *pj_enfn(double); double pj_mlfn(double, double, double, double *); double pj_inv_mlfn(double, double, double *); double pj_qsfn(double, double, double); double pj_tsfn(double, double, double); double pj_msfn(double, double, double); double pj_phi2(double, double); double pj_qsfn_(double, PJ *); double *pj_authset(double); double pj_authlat(double, double *); COMPLEX pj_zpoly1(COMPLEX, COMPLEX *, int); COMPLEX pj_zpolyd1(COMPLEX, COMPLEX *, int, COMPLEX *); FILE *pj_open_lib(char *, char *); int pj_deriv(LP, double, PJ *, struct DERIVS *); int pj_factors(LP, PJ *, double, struct FACTORS *); struct PW_COEF {/* row coefficient structure */ int m; /* number of c coefficients (=0 for none) */ double *c; /* power coefficients */ }; /* Approximation structures and procedures */ typedef struct { /* Chebyshev or Power series structure */ projUV a, b; /* power series range for evaluation */ /* or Chebyshev argument shift/scaling */ struct PW_COEF *cu, *cv; int mu, mv; /* maximum cu and cv index (+1 for count) */ int power; /* != 0 if power series, else Chebyshev */ } Tseries; Tseries *mk_cheby(projUV, projUV, double, projUV *, projUV (*)(projUV), int, int, int); projUV bpseval(projUV, Tseries *); projUV bcheval(projUV, Tseries *); projUV biveval(projUV, Tseries *); void *vector1(int, int); void **vector2(int, int, int); void freev2(void **v, int nrows); int bchgen(projUV, projUV, int, int, projUV **, projUV(*)(projUV)); int bch2bps(projUV, projUV, projUV **, int, int); /* nadcon related protos */ LP nad_intr(LP, struct CTABLE *); LP nad_cvt(LP, int, struct CTABLE *); struct CTABLE *nad_init(char *); struct CTABLE *nad_ctable_init( FILE * fid ); int nad_ctable_load( struct CTABLE *, FILE * fid ); void nad_free(struct CTABLE *); /* higher level handling of datum grid shift files */ PJ_GRIDINFO **pj_gridlist_from_nadgrids( const char *, int * ); void pj_deallocate_grids(); PJ_GRIDINFO *pj_gridinfo_init( const char * ); int pj_gridinfo_load( PJ_GRIDINFO * ); void pj_gridinfo_free( PJ_GRIDINFO * ); void *proj_mdist_ini(double); double proj_mdist(double, double, double, const void *); double proj_inv_mdist(double, const void *); void *pj_gauss_ini(double, double, double *,double *); LP pj_gauss(LP, const void *); LP pj_inv_gauss(LP, const void *); extern char const pj_release[]; struct PJ_ELLPS *pj_get_ellps_ref( void ); struct PJ_DATUMS *pj_get_datums_ref( void ); struct PJ_UNITS *pj_get_units_ref( void ); struct PJ_LIST *pj_get_list_ref( void ); struct PJ_PRIME_MERIDIANS *pj_get_prime_meridians_ref( void ); #ifndef DISABLE_CVSID # define PJ_CVSID(string) static char pj_cvsid[] = string; \ static char *cvsid_aw() { return( cvsid_aw() ? ((char *) NULL) : pj_cvsid ); } #else # define PJ_CVSID(string) #endif #ifdef __cplusplus } #endif #endif /* end of basic projections header */ therion-5.4.1/extern/proj4/rtodms.c000066400000000000000000000030271307545355600172270ustar00rootroot00000000000000/* Convert radian argument to DMS ascii format */ #include #include #include /* ** RES is fractional second figures ** RES60 = 60 * RES ** CONV = 180 * 3600 * RES / PI (radians to RES seconds) */ static double RES = 1000., RES60 = 60000., CONV = 206264806.24709635515796003417; static char format[50] = "%dd%d'%.3f\"%c"; static int dolong = 0; void set_rtodms(int fract, int con_w) { int i; if (fract >= 0 && fract < 9 ) { RES = 1.; /* following not very elegant, but used infrequently */ for (i = 0; i < fract; ++i) RES *= 10.; RES60 = RES * 60.; CONV = 180. * 3600. * RES / PI; if (! con_w) (void)sprintf(format,"%%dd%%d'%%.%df\"%%c", fract); else (void)sprintf(format,"%%dd%%02d'%%0%d.%df\"%%c", fract+2+(fract?1:0), fract); dolong = con_w; } } char * rtodms(char *s, double r, int pos, int neg) { int deg, min, sign; char *ss = s; double sec; if (r < 0) { r = -r; if (!pos) { *ss++ = '-'; sign = 0; } else sign = neg; } else sign = pos; r = floor(r * CONV + .5); sec = fmod(r / RES, 60.); r = floor(r / RES60); min = fmod(r, 60.); r = floor(r / 60.); deg = r; if (dolong) (void)sprintf(ss,format,deg,min,sec,sign); else if (sec) { char *p, *q; (void)sprintf(ss,format,deg,min,sec,sign); for (q = p = ss + strlen(ss) - (sign ? 3 : 2); *p == '0'; --p) ; if (*p != '.') ++p; if (++q != p) (void)strcpy(p, q); } else if (min) (void)sprintf(ss,"%dd%d'%c",deg,min,sign); else (void)sprintf(ss,"%dd%c",deg, sign); return s; } therion-5.4.1/extern/proj4/vector1.c000066400000000000000000000012331307545355600172770ustar00rootroot00000000000000/* make storage for one and two dimensional matricies */ #include #include void * /* one dimension array */ vector1(int nvals, int size) { return((void *)pj_malloc(size * nvals)); } void /* free 2D array */ freev2(void **v, int nrows) { if (v) { for (v += nrows; nrows > 0; --nrows) pj_dalloc(*--v); pj_dalloc(v); } } void ** /* two dimension array */ vector2(int nrows, int ncols, int size) { void **s; if (s = (void **)pj_malloc(sizeof(void *) * nrows)) { int rsize, i; rsize = size * ncols; for (i = 0; i < nrows; ++i) if (!(s[i] = pj_malloc(rsize))) { freev2(s, i); return (void **)0; } } return s; } therion-5.4.1/extern/shapefil.h000066400000000000000000000400321307545355600164560ustar00rootroot00000000000000#ifndef _SHAPEFILE_H_INCLUDED #define _SHAPEFILE_H_INCLUDED /****************************************************************************** * $Id: shapefil.h,v 1.26 2002/09/29 00:00:08 warmerda Exp $ * * Project: Shapelib * Purpose: Primary include file for Shapelib. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: shapefil.h,v $ * Revision 1.26 2002/09/29 00:00:08 warmerda * added FTLogical and logical attribute read/write calls * * Revision 1.25 2002/05/07 13:46:30 warmerda * added DBFWriteAttributeDirectly(). * * Revision 1.24 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.23 2002/01/15 14:36:07 warmerda * updated email address * * Revision 1.22 2002/01/15 14:32:00 warmerda * try to improve SHPAPI_CALL docs * * Revision 1.21 2001/11/01 16:29:55 warmerda * move pabyRec into SHPInfo for thread safety * * Revision 1.20 2001/07/20 13:06:02 warmerda * fixed SHPAPI attribute for SHPTreeFindLikelyShapes * * Revision 1.19 2001/05/31 19:20:13 warmerda * added DBFGetFieldIndex() * * Revision 1.18 2001/05/31 18:15:40 warmerda * Added support for NULL fields in DBF files * * Revision 1.17 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.16 2000/09/25 14:15:59 warmerda * added DBFGetNativeFieldType() * * Revision 1.15 2000/02/16 16:03:51 warmerda * added null shape support * * Revision 1.14 1999/11/05 14:12:05 warmerda * updated license terms * * Revision 1.13 1999/06/02 18:24:21 warmerda * added trimming code * * Revision 1.12 1999/06/02 17:56:12 warmerda * added quad'' subnode support for trees * * Revision 1.11 1999/05/18 19:11:11 warmerda * Added example searching capability * * Revision 1.10 1999/05/18 17:49:38 warmerda * added initial quadtree support * * Revision 1.9 1999/05/11 03:19:28 warmerda * added new Tuple api, and improved extension handling - add from candrsn * * Revision 1.8 1999/03/23 17:22:27 warmerda * Added extern "C" protection for C++ users of shapefil.h. * * Revision 1.7 1998/12/31 15:31:07 warmerda * Added the TRIM_DBF_WHITESPACE and DISABLE_MULTIPATCH_MEASURE options. * * Revision 1.6 1998/12/03 15:48:15 warmerda * Added SHPCalculateExtents(). * * Revision 1.5 1998/11/09 20:57:16 warmerda * Altered SHPGetInfo() call. * * Revision 1.4 1998/11/09 20:19:33 warmerda * Added 3D support, and use of SHPObject. * * Revision 1.3 1995/08/23 02:24:05 warmerda * Added support for reading bounds. * * Revision 1.2 1995/08/04 03:17:39 warmerda * Added header. * */ #include #ifdef USE_DBMALLOC #include #endif #ifdef __cplusplus extern "C" { #endif /************************************************************************/ /* Configuration options. */ /************************************************************************/ /* -------------------------------------------------------------------- */ /* Should the DBFReadStringAttribute() strip leading and */ /* trailing white space? */ /* -------------------------------------------------------------------- */ #define TRIM_DBF_WHITESPACE /* -------------------------------------------------------------------- */ /* Should we write measure values to the Multipatch object? */ /* Reportedly ArcView crashes if we do write it, so for now it */ /* is disabled. */ /* -------------------------------------------------------------------- */ #define DISABLE_MULTIPATCH_MEASURE /* -------------------------------------------------------------------- */ /* SHPAPI_CALL */ /* */ /* The following two macros are present to allow forcing */ /* various calling conventions on the Shapelib API. */ /* */ /* To force __stdcall conventions (needed to call Shapelib */ /* from Visual Basic and/or Dephi I believe) the makefile could */ /* be modified to define: */ /* */ /* /DSHPAPI_CALL=__stdcall */ /* */ /* If it is desired to force export of the Shapelib API without */ /* using the shapelib.def file, use the following definition. */ /* */ /* /DSHAPELIB_DLLEXPORT */ /* */ /* To get both at once it will be necessary to hack this */ /* include file to define: */ /* */ /* #define SHPAPI_CALL __declspec(dllexport) __stdcall */ /* #define SHPAPI_CALL1 __declspec(dllexport) * __stdcall */ /* */ /* The complexity of the situtation is partly caused by the */ /* peculiar requirement of Visual C++ that __stdcall appear */ /* after any "*"'s in the return value of a function while the */ /* __declspec(dllexport) must appear before them. */ /* -------------------------------------------------------------------- */ #ifdef SHAPELIB_DLLEXPORT # define SHPAPI_CALL __declspec(dllexport) # define SHPAPI_CALL1(x) __declspec(dllexport) x #endif #ifndef SHPAPI_CALL # define SHPAPI_CALL #endif #ifndef SHPAPI_CALL1 # define SHPAPI_CALL1(x) x SHPAPI_CALL #endif /************************************************************************/ /* SHP Support. */ /************************************************************************/ typedef struct { FILE *fpSHP; FILE *fpSHX; int nShapeType; /* SHPT_* */ int nFileSize; /* SHP file */ int nRecords; int nMaxRecords; int *panRecOffset; int *panRecSize; double adBoundsMin[4]; double adBoundsMax[4]; int bUpdated; unsigned char *pabyRec; int nBufSize; } SHPInfo; typedef SHPInfo * SHPHandle; /* -------------------------------------------------------------------- */ /* Shape types (nSHPType) */ /* -------------------------------------------------------------------- */ #define SHPT_NULL 0 #define SHPT_POINT 1 #define SHPT_ARC 3 #define SHPT_POLYGON 5 #define SHPT_MULTIPOINT 8 #define SHPT_POINTZ 11 #define SHPT_ARCZ 13 #define SHPT_POLYGONZ 15 #define SHPT_MULTIPOINTZ 18 #define SHPT_POINTM 21 #define SHPT_ARCM 23 #define SHPT_POLYGONM 25 #define SHPT_MULTIPOINTM 28 #define SHPT_MULTIPATCH 31 /* -------------------------------------------------------------------- */ /* Part types - everything but SHPT_MULTIPATCH just uses */ /* SHPP_RING. */ /* -------------------------------------------------------------------- */ #define SHPP_TRISTRIP 0 #define SHPP_TRIFAN 1 #define SHPP_OUTERRING 2 #define SHPP_INNERRING 3 #define SHPP_FIRSTRING 4 #define SHPP_RING 5 /* -------------------------------------------------------------------- */ /* SHPObject - represents on shape (without attributes) read */ /* from the .shp file. */ /* -------------------------------------------------------------------- */ typedef struct { int nSHPType; int nShapeId; /* -1 is unknown/unassigned */ int nParts; int *panPartStart; int *panPartType; int nVertices; double *padfX; double *padfY; double *padfZ; double *padfM; double dfXMin; double dfYMin; double dfZMin; double dfMMin; double dfXMax; double dfYMax; double dfZMax; double dfMMax; } SHPObject; /* -------------------------------------------------------------------- */ /* SHP API Prototypes */ /* -------------------------------------------------------------------- */ SHPHandle SHPAPI_CALL SHPOpen( const char * pszShapeFile, const char * pszAccess ); SHPHandle SHPAPI_CALL SHPCreate( const char * pszShapeFile, int nShapeType ); void SHPAPI_CALL SHPGetInfo( SHPHandle hSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ); SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle hSHP, int iShape ); int SHPAPI_CALL SHPWriteObject( SHPHandle hSHP, int iShape, SHPObject * psObject ); void SHPAPI_CALL SHPDestroyObject( SHPObject * psObject ); void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ); SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, int * panPartStart, int * panPartType, int nVertices, double * padfX, double * padfY, double * padfZ, double * padfM ); SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, double * padfX, double * padfY, double * padfZ ); int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ); void SHPAPI_CALL SHPClose( SHPHandle hSHP ); const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ); const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ); /* -------------------------------------------------------------------- */ /* Shape quadtree indexing API. */ /* -------------------------------------------------------------------- */ /* this can be two or four for binary or quad tree */ #define MAX_SUBNODE 4 typedef struct shape_tree_node { /* region covered by this node */ double adfBoundsMin[4]; double adfBoundsMax[4]; /* list of shapes stored at this node. The papsShapeObj pointers or the whole list can be NULL */ int nShapeCount; int *panShapeIds; SHPObject **papsShapeObj; int nSubNodes; struct shape_tree_node *apsSubNode[MAX_SUBNODE]; } SHPTreeNode; typedef struct { SHPHandle hSHP; int nMaxDepth; int nDimension; SHPTreeNode *psRoot; } SHPTree; SHPTree SHPAPI_CALL1(*) SHPCreateTree( SHPHandle hSHP, int nDimension, int nMaxDepth, double *padfBoundsMin, double *padfBoundsMax ); void SHPAPI_CALL SHPDestroyTree( SHPTree * hTree ); int SHPAPI_CALL SHPWriteTree( SHPTree *hTree, const char * pszFilename ); SHPTree SHPAPI_CALL SHPReadTree( const char * pszFilename ); int SHPAPI_CALL SHPTreeAddObject( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeAddShapeId( SHPTree * hTree, SHPObject * psObject ); int SHPAPI_CALL SHPTreeRemoveShapeId( SHPTree * hTree, int nShapeId ); void SHPAPI_CALL SHPTreeTrimExtraNodes( SHPTree * hTree ); int SHPAPI_CALL1(*) SHPTreeFindLikelyShapes( SHPTree * hTree, double * padfBoundsMin, double * padfBoundsMax, int * ); int SHPAPI_CALL SHPCheckBoundsOverlap( double *, double *, double *, double *, int ); /************************************************************************/ /* DBF Support. */ /************************************************************************/ typedef struct { FILE *fp; int nRecords; int nRecordLength; int nHeaderLength; int nFields; int *panFieldOffset; int *panFieldSize; int *panFieldDecimals; char *pachFieldType; char *pszHeader; int nCurrentRecord; int bCurrentRecordModified; char *pszCurrentRecord; int bNoHeader; int bUpdated; } DBFInfo; typedef DBFInfo * DBFHandle; typedef enum { FTString, FTInteger, FTDouble, FTLogical, FTInvalid } DBFFieldType; #define XBASE_FLDHDR_SZ 32 DBFHandle SHPAPI_CALL DBFOpen( const char * pszDBFFile, const char * pszAccess ); DBFHandle SHPAPI_CALL DBFCreate( const char * pszDBFFile ); int SHPAPI_CALL DBFGetFieldCount( DBFHandle psDBF ); int SHPAPI_CALL DBFGetRecordCount( DBFHandle psDBF ); int SHPAPI_CALL DBFAddField( DBFHandle hDBF, const char * pszFieldName, DBFFieldType eType, int nWidth, int nDecimals ); DBFFieldType SHPAPI_CALL DBFGetFieldInfo( DBFHandle psDBF, int iField, char * pszFieldName, int * pnWidth, int * pnDecimals ); int SHPAPI_CALL DBFGetFieldIndex(DBFHandle psDBF, const char *pszFieldName); int SHPAPI_CALL DBFReadIntegerAttribute( DBFHandle hDBF, int iShape, int iField ); double SHPAPI_CALL DBFReadDoubleAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadStringAttribute( DBFHandle hDBF, int iShape, int iField ); const char SHPAPI_CALL1(*) DBFReadLogicalAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFIsAttributeNULL( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteIntegerAttribute( DBFHandle hDBF, int iShape, int iField, int nFieldValue ); int SHPAPI_CALL DBFWriteDoubleAttribute( DBFHandle hDBF, int iShape, int iField, double dFieldValue ); int SHPAPI_CALL DBFWriteStringAttribute( DBFHandle hDBF, int iShape, int iField, const char * pszFieldValue ); int SHPAPI_CALL DBFWriteNULLAttribute( DBFHandle hDBF, int iShape, int iField ); int SHPAPI_CALL DBFWriteLogicalAttribute( DBFHandle hDBF, int iShape, int iField, const char lFieldValue); int SHPAPI_CALL DBFWriteAttributeDirectly(DBFHandle psDBF, int hEntity, int iField, void * pValue ); const char SHPAPI_CALL1(*) DBFReadTuple(DBFHandle psDBF, int hEntity ); int SHPAPI_CALL DBFWriteTuple(DBFHandle psDBF, int hEntity, void * pRawTuple ); DBFHandle SHPAPI_CALL DBFCloneEmpty(DBFHandle psDBF, const char * pszFilename ); void SHPAPI_CALL DBFClose( DBFHandle hDBF ); char SHPAPI_CALL DBFGetNativeFieldType( DBFHandle hDBF, int iField ); #ifdef __cplusplus } #endif #endif /* ndef _SHAPEFILE_H_INCLUDED */ therion-5.4.1/extern/shpopen.c000066400000000000000000002067011307545355600163410ustar00rootroot00000000000000/****************************************************************************** * $Id: shpopen.c,v 1.39 2002/08/26 06:46:56 warmerda Exp $ * * Project: Shapelib * Purpose: Implementation of core Shapefile read/write functions. * Author: Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, 2001, Frank Warmerdam * * This software is available under the following "MIT Style" license, * or at the option of the licensee under the LGPL (see LICENSE.LGPL). This * option is discussed in more detail in shapelib.html. * * -- * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. ****************************************************************************** * * $Log: shpopen.c,v $ * Revision 1.39 2002/08/26 06:46:56 warmerda * avoid c++ comments * * Revision 1.38 2002/05/07 16:43:39 warmerda * Removed debugging printf. * * Revision 1.37 2002/04/10 17:35:22 warmerda * fixed bug in ring reversal code * * Revision 1.36 2002/04/10 16:59:54 warmerda * added SHPRewindObject * * Revision 1.35 2001/12/07 15:10:44 warmerda * fix if .shx fails to open * * Revision 1.34 2001/11/01 16:29:55 warmerda * move pabyRec into SHPInfo for thread safety * * Revision 1.33 2001/07/03 12:18:15 warmerda * Improved cleanup if SHX not found, provied by Riccardo Cohen. * * Revision 1.32 2001/06/22 01:58:07 warmerda * be more careful about establishing initial bounds in face of NULL shapes * * Revision 1.31 2001/05/31 19:35:29 warmerda * added support for writing null shapes * * Revision 1.30 2001/05/28 12:46:29 warmerda * Add some checking on reasonableness of record count when opening. * * Revision 1.29 2001/05/23 13:36:52 warmerda * added use of SHPAPI_CALL * * Revision 1.28 2001/02/06 22:25:06 warmerda * fixed memory leaks when SHPOpen() fails * * Revision 1.27 2000/07/18 15:21:33 warmerda * added better enforcement of -1 for append in SHPWriteObject * * Revision 1.26 2000/02/16 16:03:51 warmerda * added null shape support * * Revision 1.25 1999/12/15 13:47:07 warmerda * Fixed record size settings in .shp file (was 4 words too long) * Added stdlib.h. * * Revision 1.24 1999/11/05 14:12:04 warmerda * updated license terms * * Revision 1.23 1999/07/27 00:53:46 warmerda * added support for rewriting shapes * * Revision 1.22 1999/06/11 19:19:11 warmerda * Cleanup pabyRec static buffer on SHPClose(). * * Revision 1.21 1999/06/02 14:57:56 kshih * Remove unused variables * * Revision 1.20 1999/04/19 21:04:17 warmerda * Fixed syntax error. * * Revision 1.19 1999/04/19 21:01:57 warmerda * Force access string to binary in SHPOpen(). * * Revision 1.18 1999/04/01 18:48:07 warmerda * Try upper case extensions if lower case doesn't work. * * Revision 1.17 1998/12/31 15:29:39 warmerda * Disable writing measure values to multipatch objects if * DISABLE_MULTIPATCH_MEASURE is defined. * * Revision 1.16 1998/12/16 05:14:33 warmerda * Added support to write MULTIPATCH. Fixed reading Z coordinate of * MULTIPATCH. Fixed record size written for all feature types. * * Revision 1.15 1998/12/03 16:35:29 warmerda * r+b is proper binary access string, not rb+. * * Revision 1.14 1998/12/03 15:47:56 warmerda * Fixed setting of nVertices in SHPCreateObject(). * * Revision 1.13 1998/12/03 15:33:54 warmerda * Made SHPCalculateExtents() separately callable. * * Revision 1.12 1998/11/11 20:01:50 warmerda * Fixed bug writing ArcM/Z, and PolygonM/Z for big endian machines. * * Revision 1.11 1998/11/09 20:56:44 warmerda * Fixed up handling of file wide bounds. * * Revision 1.10 1998/11/09 20:18:51 warmerda * Converted to support 3D shapefiles, and use of SHPObject. * * Revision 1.9 1998/02/24 15:09:05 warmerda * Fixed memory leak. * * Revision 1.8 1997/12/04 15:40:29 warmerda * Fixed byte swapping of record number, and record length fields in the * .shp file. * * Revision 1.7 1995/10/21 03:15:58 warmerda * Added support for binary file access, the magic cookie 9997 * and tried to improve the int32 selection logic for 16bit systems. * * Revision 1.6 1995/09/04 04:19:41 warmerda * Added fix for file bounds. * * Revision 1.5 1995/08/25 15:16:44 warmerda * Fixed a couple of problems with big endian systems ... one with bounds * and the other with multipart polygons. * * Revision 1.4 1995/08/24 18:10:17 warmerda * Switch to use SfRealloc() to avoid problems with pre-ANSI realloc() * functions (such as on the Sun). * * Revision 1.3 1995/08/23 02:23:15 warmerda * Added support for reading bounds, and fixed up problems in setting the * file wide bounds. * * Revision 1.2 1995/08/04 03:16:57 warmerda * Added header. * */ /* * static char rcsid[] = * "$Id: shpopen.c,v 1.39 2002/08/26 06:46:56 warmerda Exp $"; */ #include "shapefil.h" #include #include #include #include #include typedef unsigned char uchar; #if UINT_MAX == 65535 typedef long int32; #else typedef int int32; #endif #ifndef FALSE # define FALSE 0 # define TRUE 1 #endif #define ByteCopy( a, b, c ) memcpy( b, a, c ) #ifndef MAX # define MIN(a,b) ((ab) ? a : b) #endif static int bBigEndian; /************************************************************************/ /* SwapWord() */ /* */ /* Swap a 2, 4 or 8 byte word. */ /************************************************************************/ static void SwapWord( int length, void * wordP ) { int i; uchar temp; for( i=0; i < length/2; i++ ) { temp = ((uchar *) wordP)[i]; ((uchar *)wordP)[i] = ((uchar *) wordP)[length-i-1]; ((uchar *) wordP)[length-i-1] = temp; } } /************************************************************************/ /* SfRealloc() */ /* */ /* A realloc cover function that will access a NULL pointer as */ /* a valid input. */ /************************************************************************/ static void * SfRealloc( void * pMem, int nNewSize ) { if( pMem == NULL ) return( (void *) malloc(nNewSize) ); else return( (void *) realloc(pMem,nNewSize) ); } /************************************************************************/ /* SHPWriteHeader() */ /* */ /* Write out a header for the .shp and .shx files as well as the */ /* contents of the index (.shx) file. */ /************************************************************************/ static void SHPWriteHeader( SHPHandle psSHP ) { uchar abyHeader[100]; int i; int32 i32; double dValue; int32 *panSHX; /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = psSHP->nFileSize/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = psSHP->nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = psSHP->adBoundsMin[0]; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+36 ); dValue = psSHP->adBoundsMin[1]; ByteCopy( &dValue, abyHeader+44, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+44 ); dValue = psSHP->adBoundsMax[0]; ByteCopy( &dValue, abyHeader+52, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+52 ); dValue = psSHP->adBoundsMax[1]; ByteCopy( &dValue, abyHeader+60, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+60 ); dValue = psSHP->adBoundsMin[2]; /* z */ ByteCopy( &dValue, abyHeader+68, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+68 ); dValue = psSHP->adBoundsMax[2]; ByteCopy( &dValue, abyHeader+76, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+76 ); dValue = psSHP->adBoundsMin[3]; /* m */ ByteCopy( &dValue, abyHeader+84, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+84 ); dValue = psSHP->adBoundsMax[3]; ByteCopy( &dValue, abyHeader+92, 8 ); if( bBigEndian ) SwapWord( 8, abyHeader+92 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ fseek( psSHP->fpSHP, 0, 0 ); fwrite( abyHeader, 100, 1, psSHP->fpSHP ); /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = (psSHP->nRecords * 2 * sizeof(int32) + 100)/2; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); fseek( psSHP->fpSHX, 0, 0 ); fwrite( abyHeader, 100, 1, psSHP->fpSHX ); /* -------------------------------------------------------------------- */ /* Write out the .shx contents. */ /* -------------------------------------------------------------------- */ panSHX = (int32 *) malloc(sizeof(int32) * 2 * psSHP->nRecords); for( i = 0; i < psSHP->nRecords; i++ ) { panSHX[i*2 ] = psSHP->panRecOffset[i]/2; panSHX[i*2+1] = psSHP->panRecSize[i]/2; if( !bBigEndian ) SwapWord( 4, panSHX+i*2 ); if( !bBigEndian ) SwapWord( 4, panSHX+i*2+1 ); } fwrite( panSHX, sizeof(int32) * 2, psSHP->nRecords, psSHP->fpSHX ); free( panSHX ); } /************************************************************************/ /* SHPOpen() */ /* */ /* Open the .shp and .shx files based on the basename of the */ /* files or either file name. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPOpen( const char * pszLayer, const char * pszAccess ) { char *pszFullname, *pszBasename; SHPHandle psSHP; uchar *pabyBuf; int i; double dValue; /* -------------------------------------------------------------------- */ /* Ensure the access string is one of the legal ones. We */ /* ensure the result string indicates binary to avoid common */ /* problems on Windows. */ /* -------------------------------------------------------------------- */ if( strcmp(pszAccess,"rb+") == 0 || strcmp(pszAccess,"r+b") == 0 || strcmp(pszAccess,"r+") == 0 ) pszAccess = "r+b"; else pszAccess = "rb"; /* -------------------------------------------------------------------- */ /* Establish the byte order on this machine. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Initialize the info structure. */ /* -------------------------------------------------------------------- */ psSHP = (SHPHandle) calloc(sizeof(SHPInfo),1); psSHP->bUpdated = FALSE; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the .shp and .shx files. Note that files pulled from */ /* a PC to Unix with upper case filenames won't work! */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ); psSHP->fpSHP = fopen(pszFullname, pszAccess ); if( psSHP->fpSHP == NULL ) { sprintf( pszFullname, "%s.SHP", pszBasename ); psSHP->fpSHP = fopen(pszFullname, pszAccess ); } if( psSHP->fpSHP == NULL ) { free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } sprintf( pszFullname, "%s.shx", pszBasename ); psSHP->fpSHX = fopen(pszFullname, pszAccess ); if( psSHP->fpSHX == NULL ) { sprintf( pszFullname, "%s.SHX", pszBasename ); psSHP->fpSHX = fopen(pszFullname, pszAccess ); } if( psSHP->fpSHX == NULL ) { fclose( psSHP->fpSHP ); free( psSHP ); free( pszBasename ); free( pszFullname ); return( NULL ); } free( pszFullname ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Read the file size from the SHP file. */ /* -------------------------------------------------------------------- */ pabyBuf = (uchar *) malloc(100); fread( pabyBuf, 100, 1, psSHP->fpSHP ); psSHP->nFileSize = (pabyBuf[24] * 256 * 256 * 256 + pabyBuf[25] * 256 * 256 + pabyBuf[26] * 256 + pabyBuf[27]) * 2; /* -------------------------------------------------------------------- */ /* Read SHX file Header info */ /* -------------------------------------------------------------------- */ fread( pabyBuf, 100, 1, psSHP->fpSHX ); if( pabyBuf[0] != 0 || pabyBuf[1] != 0 || pabyBuf[2] != 0x27 || (pabyBuf[3] != 0x0a && pabyBuf[3] != 0x0d) ) { fclose( psSHP->fpSHP ); fclose( psSHP->fpSHX ); free( psSHP ); return( NULL ); } psSHP->nRecords = pabyBuf[27] + pabyBuf[26] * 256 + pabyBuf[25] * 256 * 256 + pabyBuf[24] * 256 * 256 * 256; psSHP->nRecords = (psSHP->nRecords*2 - 100) / 8; psSHP->nShapeType = pabyBuf[32]; if( psSHP->nRecords < 0 || psSHP->nRecords > 256000000 ) { /* this header appears to be corrupt. Give up. */ fclose( psSHP->fpSHP ); fclose( psSHP->fpSHX ); free( psSHP ); return( NULL ); } /* -------------------------------------------------------------------- */ /* Read the bounds. */ /* -------------------------------------------------------------------- */ if( bBigEndian ) SwapWord( 8, pabyBuf+36 ); memcpy( &dValue, pabyBuf+36, 8 ); psSHP->adBoundsMin[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+44 ); memcpy( &dValue, pabyBuf+44, 8 ); psSHP->adBoundsMin[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+52 ); memcpy( &dValue, pabyBuf+52, 8 ); psSHP->adBoundsMax[0] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+60 ); memcpy( &dValue, pabyBuf+60, 8 ); psSHP->adBoundsMax[1] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+68 ); /* z */ memcpy( &dValue, pabyBuf+68, 8 ); psSHP->adBoundsMin[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+76 ); memcpy( &dValue, pabyBuf+76, 8 ); psSHP->adBoundsMax[2] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+84 ); /* z */ memcpy( &dValue, pabyBuf+84, 8 ); psSHP->adBoundsMin[3] = dValue; if( bBigEndian ) SwapWord( 8, pabyBuf+92 ); memcpy( &dValue, pabyBuf+92, 8 ); psSHP->adBoundsMax[3] = dValue; free( pabyBuf ); /* -------------------------------------------------------------------- */ /* Read the .shx file to get the offsets to each record in */ /* the .shp file. */ /* -------------------------------------------------------------------- */ psSHP->nMaxRecords = psSHP->nRecords; psSHP->panRecOffset = (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); psSHP->panRecSize = (int *) malloc(sizeof(int) * MAX(1,psSHP->nMaxRecords) ); pabyBuf = (uchar *) malloc(8 * MAX(1,psSHP->nRecords) ); fread( pabyBuf, 8, psSHP->nRecords, psSHP->fpSHX ); for( i = 0; i < psSHP->nRecords; i++ ) { int32 nOffset, nLength; memcpy( &nOffset, pabyBuf + i * 8, 4 ); if( !bBigEndian ) SwapWord( 4, &nOffset ); memcpy( &nLength, pabyBuf + i * 8 + 4, 4 ); if( !bBigEndian ) SwapWord( 4, &nLength ); psSHP->panRecOffset[i] = nOffset*2; psSHP->panRecSize[i] = nLength*2; } free( pabyBuf ); return( psSHP ); } /************************************************************************/ /* SHPClose() */ /* */ /* Close the .shp and .shx files. */ /************************************************************************/ void SHPAPI_CALL SHPClose(SHPHandle psSHP ) { /* -------------------------------------------------------------------- */ /* Update the header if we have modified anything. */ /* -------------------------------------------------------------------- */ if( psSHP->bUpdated ) { SHPWriteHeader( psSHP ); } /* -------------------------------------------------------------------- */ /* Free all resources, and close files. */ /* -------------------------------------------------------------------- */ free( psSHP->panRecOffset ); free( psSHP->panRecSize ); fclose( psSHP->fpSHX ); fclose( psSHP->fpSHP ); if( psSHP->pabyRec != NULL ) { free( psSHP->pabyRec ); } free( psSHP ); } /************************************************************************/ /* SHPGetInfo() */ /* */ /* Fetch general information about the shape file. */ /************************************************************************/ void SHPAPI_CALL SHPGetInfo(SHPHandle psSHP, int * pnEntities, int * pnShapeType, double * padfMinBound, double * padfMaxBound ) { int i; if( pnEntities != NULL ) *pnEntities = psSHP->nRecords; if( pnShapeType != NULL ) *pnShapeType = psSHP->nShapeType; for( i = 0; i < 4; i++ ) { if( padfMinBound != NULL ) padfMinBound[i] = psSHP->adBoundsMin[i]; if( padfMaxBound != NULL ) padfMaxBound[i] = psSHP->adBoundsMax[i]; } } /************************************************************************/ /* SHPCreate() */ /* */ /* Create a new shape file and return a handle to the open */ /* shape file with read/write access. */ /************************************************************************/ SHPHandle SHPAPI_CALL SHPCreate( const char * pszLayer, int nShapeType ) { char *pszBasename, *pszFullname; int i; FILE *fpSHP, *fpSHX; uchar abyHeader[100]; int32 i32; double dValue; /* -------------------------------------------------------------------- */ /* Establish the byte order on this system. */ /* -------------------------------------------------------------------- */ i = 1; if( *((uchar *) &i) == 1 ) bBigEndian = FALSE; else bBigEndian = TRUE; /* -------------------------------------------------------------------- */ /* Compute the base (layer) name. If there is any extension */ /* on the passed in filename we will strip it off. */ /* -------------------------------------------------------------------- */ pszBasename = (char *) malloc(strlen(pszLayer)+5); strcpy( pszBasename, pszLayer ); for( i = strlen(pszBasename)-1; i > 0 && pszBasename[i] != '.' && pszBasename[i] != '/' && pszBasename[i] != '\\'; i-- ) {} if( pszBasename[i] == '.' ) pszBasename[i] = '\0'; /* -------------------------------------------------------------------- */ /* Open the two files so we can write their headers. */ /* -------------------------------------------------------------------- */ pszFullname = (char *) malloc(strlen(pszBasename) + 5); sprintf( pszFullname, "%s.shp", pszBasename ); fpSHP = fopen(pszFullname, "wb" ); if( fpSHP == NULL ) return( NULL ); sprintf( pszFullname, "%s.shx", pszBasename ); fpSHX = fopen(pszFullname, "wb" ); if( fpSHX == NULL ) return( NULL ); free( pszFullname ); free( pszBasename ); /* -------------------------------------------------------------------- */ /* Prepare header block for .shp file. */ /* -------------------------------------------------------------------- */ for( i = 0; i < 100; i++ ) abyHeader[i] = 0; abyHeader[2] = 0x27; /* magic cookie */ abyHeader[3] = 0x0a; i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); i32 = 1000; /* version */ ByteCopy( &i32, abyHeader+28, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+28 ); i32 = nShapeType; /* shape type */ ByteCopy( &i32, abyHeader+32, 4 ); if( bBigEndian ) SwapWord( 4, abyHeader+32 ); dValue = 0.0; /* set bounds */ ByteCopy( &dValue, abyHeader+36, 8 ); ByteCopy( &dValue, abyHeader+44, 8 ); ByteCopy( &dValue, abyHeader+52, 8 ); ByteCopy( &dValue, abyHeader+60, 8 ); /* -------------------------------------------------------------------- */ /* Write .shp file header. */ /* -------------------------------------------------------------------- */ fwrite( abyHeader, 100, 1, fpSHP ); /* -------------------------------------------------------------------- */ /* Prepare, and write .shx file header. */ /* -------------------------------------------------------------------- */ i32 = 50; /* file size */ ByteCopy( &i32, abyHeader+24, 4 ); if( !bBigEndian ) SwapWord( 4, abyHeader+24 ); fwrite( abyHeader, 100, 1, fpSHX ); /* -------------------------------------------------------------------- */ /* Close the files, and then open them as regular existing files. */ /* -------------------------------------------------------------------- */ fclose( fpSHP ); fclose( fpSHX ); return( SHPOpen( pszLayer, "r+b" ) ); } /************************************************************************/ /* _SHPSetBounds() */ /* */ /* Compute a bounds rectangle for a shape, and set it into the */ /* indicated location in the record. */ /************************************************************************/ static void _SHPSetBounds( uchar * pabyRec, SHPObject * psShape ) { ByteCopy( &(psShape->dfXMin), pabyRec + 0, 8 ); ByteCopy( &(psShape->dfYMin), pabyRec + 8, 8 ); ByteCopy( &(psShape->dfXMax), pabyRec + 16, 8 ); ByteCopy( &(psShape->dfYMax), pabyRec + 24, 8 ); if( bBigEndian ) { SwapWord( 8, pabyRec + 0 ); SwapWord( 8, pabyRec + 8 ); SwapWord( 8, pabyRec + 16 ); SwapWord( 8, pabyRec + 24 ); } } /************************************************************************/ /* SHPComputeExtents() */ /* */ /* Recompute the extents of a shape. Automatically done by */ /* SHPCreateObject(). */ /************************************************************************/ void SHPAPI_CALL SHPComputeExtents( SHPObject * psObject ) { int i; /* -------------------------------------------------------------------- */ /* Build extents for this object. */ /* -------------------------------------------------------------------- */ if( psObject->nVertices > 0 ) { psObject->dfXMin = psObject->dfXMax = psObject->padfX[0]; psObject->dfYMin = psObject->dfYMax = psObject->padfY[0]; psObject->dfZMin = psObject->dfZMax = psObject->padfZ[0]; psObject->dfMMin = psObject->dfMMax = psObject->padfM[0]; } for( i = 0; i < psObject->nVertices; i++ ) { psObject->dfXMin = MIN(psObject->dfXMin, psObject->padfX[i]); psObject->dfYMin = MIN(psObject->dfYMin, psObject->padfY[i]); psObject->dfZMin = MIN(psObject->dfZMin, psObject->padfZ[i]); psObject->dfMMin = MIN(psObject->dfMMin, psObject->padfM[i]); psObject->dfXMax = MAX(psObject->dfXMax, psObject->padfX[i]); psObject->dfYMax = MAX(psObject->dfYMax, psObject->padfY[i]); psObject->dfZMax = MAX(psObject->dfZMax, psObject->padfZ[i]); psObject->dfMMax = MAX(psObject->dfMMax, psObject->padfM[i]); } } /************************************************************************/ /* SHPCreateObject() */ /* */ /* Create a shape object. It should be freed with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateObject( int nSHPType, int nShapeId, int nParts, int * panPartStart, int * panPartType, int nVertices, double * padfX, double * padfY, double * padfZ, double * padfM ) { SHPObject *psObject; int i, bHasM, bHasZ; psObject = (SHPObject *) calloc(1,sizeof(SHPObject)); psObject->nSHPType = nSHPType; psObject->nShapeId = nShapeId; /* -------------------------------------------------------------------- */ /* Establish whether this shape type has M, and Z values. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARCM || nSHPType == SHPT_POINTM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_MULTIPOINTM ) { bHasM = TRUE; bHasZ = FALSE; } else if( nSHPType == SHPT_ARCZ || nSHPType == SHPT_POINTZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPOINTZ || nSHPType == SHPT_MULTIPATCH ) { bHasM = TRUE; bHasZ = TRUE; } else { bHasM = FALSE; bHasZ = FALSE; } /* -------------------------------------------------------------------- */ /* Capture parts. Note that part type is optional, and */ /* defaults to ring. */ /* -------------------------------------------------------------------- */ if( nSHPType == SHPT_ARC || nSHPType == SHPT_POLYGON || nSHPType == SHPT_ARCM || nSHPType == SHPT_POLYGONM || nSHPType == SHPT_ARCZ || nSHPType == SHPT_POLYGONZ || nSHPType == SHPT_MULTIPATCH ) { psObject->nParts = MAX(1,nParts); psObject->panPartStart = (int *) malloc(sizeof(int) * psObject->nParts); psObject->panPartType = (int *) malloc(sizeof(int) * psObject->nParts); psObject->panPartStart[0] = 0; psObject->panPartType[0] = SHPP_RING; for( i = 0; i < nParts; i++ ) { psObject->panPartStart[i] = panPartStart[i]; if( panPartType != NULL ) psObject->panPartType[i] = panPartType[i]; else psObject->panPartType[i] = SHPP_RING; } } /* -------------------------------------------------------------------- */ /* Capture vertices. Note that Z and M are optional, but X and */ /* Y are not. */ /* -------------------------------------------------------------------- */ if( nVertices > 0 ) { psObject->padfX = (double *) calloc(sizeof(double),nVertices); psObject->padfY = (double *) calloc(sizeof(double),nVertices); psObject->padfZ = (double *) calloc(sizeof(double),nVertices); psObject->padfM = (double *) calloc(sizeof(double),nVertices); assert( padfX != NULL ); assert( padfY != NULL ); for( i = 0; i < nVertices; i++ ) { psObject->padfX[i] = padfX[i]; psObject->padfY[i] = padfY[i]; if( padfZ != NULL && bHasZ ) psObject->padfZ[i] = padfZ[i]; if( padfM != NULL && bHasM ) psObject->padfM[i] = padfM[i]; } } /* -------------------------------------------------------------------- */ /* Compute the extents. */ /* -------------------------------------------------------------------- */ psObject->nVertices = nVertices; SHPComputeExtents( psObject ); return( psObject ); } /************************************************************************/ /* SHPCreateSimpleObject() */ /* */ /* Create a simple (common) shape object. Destroy with */ /* SHPDestroyObject(). */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject( int nSHPType, int nVertices, double * padfX, double * padfY, double * padfZ ) { return( SHPCreateObject( nSHPType, -1, 0, NULL, NULL, nVertices, padfX, padfY, padfZ, NULL ) ); } /************************************************************************/ /* SHPWriteObject() */ /* */ /* Write out the vertices of a new structure. Note that it is */ /* only possible to write vertices at the end of the file. */ /************************************************************************/ int SHPAPI_CALL SHPWriteObject(SHPHandle psSHP, int nShapeId, SHPObject * psObject ) { int nRecordOffset, i, nRecordSize; uchar *pabyRec; int32 i32; psSHP->bUpdated = TRUE; /* -------------------------------------------------------------------- */ /* Ensure that shape object matches the type of the file it is */ /* being written to. */ /* -------------------------------------------------------------------- */ assert( psObject->nSHPType == psSHP->nShapeType || psObject->nSHPType == SHPT_NULL ); /* -------------------------------------------------------------------- */ /* Ensure that -1 is used for appends. Either blow an */ /* assertion, or if they are disabled, set the shapeid to -1 */ /* for appends. */ /* -------------------------------------------------------------------- */ assert( nShapeId == -1 || (nShapeId >= 0 && nShapeId < psSHP->nRecords) ); if( nShapeId != -1 && nShapeId >= psSHP->nRecords ) nShapeId = -1; /* -------------------------------------------------------------------- */ /* Add the new entity to the in memory index. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 && psSHP->nRecords+1 > psSHP->nMaxRecords ) { psSHP->nMaxRecords =(int) ( psSHP->nMaxRecords * 1.3 + 100); psSHP->panRecOffset = (int *) SfRealloc(psSHP->panRecOffset,sizeof(int) * psSHP->nMaxRecords ); psSHP->panRecSize = (int *) SfRealloc(psSHP->panRecSize,sizeof(int) * psSHP->nMaxRecords ); } /* -------------------------------------------------------------------- */ /* Initialize record. */ /* -------------------------------------------------------------------- */ pabyRec = (uchar *) malloc(psObject->nVertices * 4 * sizeof(double) + psObject->nParts * 8 + 128); /* -------------------------------------------------------------------- */ /* Extract vertices for a Polygon or Arc. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType == SHPT_POLYGON || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARC || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_ARCM || psObject->nSHPType == SHPT_MULTIPATCH ) { int32 nPoints, nParts; int i; nPoints = psObject->nVertices; nParts = psObject->nParts; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); ByteCopy( &nPoints, pabyRec + 40 + 8, 4 ); ByteCopy( &nParts, pabyRec + 36 + 8, 4 ); nRecordSize = 52; /* * Write part start positions. */ ByteCopy( psObject->panPartStart, pabyRec + 44 + 8, 4 * psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + 44 + 8 + 4*i ); nRecordSize += 4; } /* * Write multipatch part types if needed. */ if( psObject->nSHPType == SHPT_MULTIPATCH ) { memcpy( pabyRec + nRecordSize, psObject->panPartType, 4*psObject->nParts ); for( i = 0; i < psObject->nParts; i++ ) { if( bBigEndian ) SwapWord( 4, pabyRec + nRecordSize ); nRecordSize += 4; } } /* * Write the (x,y) vertex values. */ for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + nRecordSize, 8 ); ByteCopy( psObject->padfY + i, pabyRec + nRecordSize + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize + 8 ); nRecordSize += 2 * 8; } /* * Write the Z coordinates (if any). */ if( psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ || psObject->nSHPType == SHPT_MULTIPATCH ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* * Write the M values, if any. */ if( psObject->nSHPType == SHPT_POLYGONM || psObject->nSHPType == SHPT_ARCM #ifndef DISABLE_MULTIPATCH_MEASURE || psObject->nSHPType == SHPT_MULTIPATCH #endif || psObject->nSHPType == SHPT_POLYGONZ || psObject->nSHPType == SHPT_ARCZ ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Extract vertices for a MultiPoint. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_MULTIPOINT || psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM ) { int32 nPoints; int i; nPoints = psObject->nVertices; _SHPSetBounds( pabyRec + 12, psObject ); if( bBigEndian ) SwapWord( 4, &nPoints ); ByteCopy( &nPoints, pabyRec + 44, 4 ); for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfX + i, pabyRec + 48 + i*16, 8 ); ByteCopy( psObject->padfY + i, pabyRec + 48 + i*16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 ); if( bBigEndian ) SwapWord( 8, pabyRec + 48 + i*16 + 8 ); } nRecordSize = 48 + 16 * psObject->nVertices; if( psObject->nSHPType == SHPT_MULTIPOINTZ ) { ByteCopy( &(psObject->dfZMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfZMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfZ + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } if( psObject->nSHPType == SHPT_MULTIPOINTZ || psObject->nSHPType == SHPT_MULTIPOINTM ) { ByteCopy( &(psObject->dfMMin), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; ByteCopy( &(psObject->dfMMax), pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; for( i = 0; i < psObject->nVertices; i++ ) { ByteCopy( psObject->padfM + i, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } } /* -------------------------------------------------------------------- */ /* Write point. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_POINT || psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM ) { ByteCopy( psObject->padfX, pabyRec + 12, 8 ); ByteCopy( psObject->padfY, pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + 12 ); if( bBigEndian ) SwapWord( 8, pabyRec + 20 ); nRecordSize = 28; if( psObject->nSHPType == SHPT_POINTZ ) { ByteCopy( psObject->padfZ, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } if( psObject->nSHPType == SHPT_POINTZ || psObject->nSHPType == SHPT_POINTM ) { ByteCopy( psObject->padfM, pabyRec + nRecordSize, 8 ); if( bBigEndian ) SwapWord( 8, pabyRec + nRecordSize ); nRecordSize += 8; } } /* -------------------------------------------------------------------- */ /* Not much to do for null geometries. */ /* -------------------------------------------------------------------- */ else if( psObject->nSHPType == SHPT_NULL ) { nRecordSize = 12; } else { /* unknown type */ assert( FALSE ); } /* -------------------------------------------------------------------- */ /* Establish where we are going to put this record. If we are */ /* rewriting and existing record, and it will fit, then put it */ /* back where the original came from. Otherwise write at the end. */ /* -------------------------------------------------------------------- */ if( nShapeId == -1 || psSHP->panRecSize[nShapeId] < nRecordSize-8 ) { if( nShapeId == -1 ) nShapeId = psSHP->nRecords++; psSHP->panRecOffset[nShapeId] = nRecordOffset = psSHP->nFileSize; psSHP->panRecSize[nShapeId] = nRecordSize-8; psSHP->nFileSize += nRecordSize; } else { nRecordOffset = psSHP->panRecOffset[nShapeId]; } /* -------------------------------------------------------------------- */ /* Set the shape type, record number, and record size. */ /* -------------------------------------------------------------------- */ i32 = nShapeId+1; /* record # */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec, 4 ); i32 = (nRecordSize-8)/2; /* record size */ if( !bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 4, 4 ); i32 = psObject->nSHPType; /* shape type */ if( bBigEndian ) SwapWord( 4, &i32 ); ByteCopy( &i32, pabyRec + 8, 4 ); /* -------------------------------------------------------------------- */ /* Write out record. */ /* -------------------------------------------------------------------- */ if( fseek( psSHP->fpSHP, nRecordOffset, 0 ) != 0 || fwrite( pabyRec, nRecordSize, 1, psSHP->fpSHP ) < 1 ) { printf( "Error in fseek() or fwrite().\n" ); free( pabyRec ); return -1; } free( pabyRec ); /* -------------------------------------------------------------------- */ /* Expand file wide bounds based on this shape. */ /* -------------------------------------------------------------------- */ if( psSHP->adBoundsMin[0] == 0.0 && psSHP->adBoundsMax[0] == 0.0 && psSHP->adBoundsMin[1] == 0.0 && psSHP->adBoundsMax[1] == 0.0 && psObject->nSHPType != SHPT_NULL ) { psSHP->adBoundsMin[0] = psSHP->adBoundsMax[0] = psObject->padfX[0]; psSHP->adBoundsMin[1] = psSHP->adBoundsMax[1] = psObject->padfY[0]; psSHP->adBoundsMin[2] = psSHP->adBoundsMax[2] = psObject->padfZ[0]; psSHP->adBoundsMin[3] = psSHP->adBoundsMax[3] = psObject->padfM[0]; } for( i = 0; i < psObject->nVertices; i++ ) { psSHP->adBoundsMin[0] = MIN(psSHP->adBoundsMin[0],psObject->padfX[i]); psSHP->adBoundsMin[1] = MIN(psSHP->adBoundsMin[1],psObject->padfY[i]); psSHP->adBoundsMin[2] = MIN(psSHP->adBoundsMin[2],psObject->padfZ[i]); psSHP->adBoundsMin[3] = MIN(psSHP->adBoundsMin[3],psObject->padfM[i]); psSHP->adBoundsMax[0] = MAX(psSHP->adBoundsMax[0],psObject->padfX[i]); psSHP->adBoundsMax[1] = MAX(psSHP->adBoundsMax[1],psObject->padfY[i]); psSHP->adBoundsMax[2] = MAX(psSHP->adBoundsMax[2],psObject->padfZ[i]); psSHP->adBoundsMax[3] = MAX(psSHP->adBoundsMax[3],psObject->padfM[i]); } return( nShapeId ); } /************************************************************************/ /* SHPReadObject() */ /* */ /* Read the vertices, parts, and other non-attribute information */ /* for one shape. */ /************************************************************************/ SHPObject SHPAPI_CALL1(*) SHPReadObject( SHPHandle psSHP, int hEntity ) { SHPObject *psShape; /* -------------------------------------------------------------------- */ /* Validate the record/entity number. */ /* -------------------------------------------------------------------- */ if( hEntity < 0 || hEntity >= psSHP->nRecords ) return( NULL ); /* -------------------------------------------------------------------- */ /* Ensure our record buffer is large enough. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 > psSHP->nBufSize ) { psSHP->nBufSize = psSHP->panRecSize[hEntity]+8; psSHP->pabyRec = (uchar *) SfRealloc(psSHP->pabyRec,psSHP->nBufSize); } /* -------------------------------------------------------------------- */ /* Read the record. */ /* -------------------------------------------------------------------- */ fseek( psSHP->fpSHP, psSHP->panRecOffset[hEntity], 0 ); fread( psSHP->pabyRec, psSHP->panRecSize[hEntity]+8, 1, psSHP->fpSHP ); /* -------------------------------------------------------------------- */ /* Allocate and minimally initialize the object. */ /* -------------------------------------------------------------------- */ psShape = (SHPObject *) calloc(1,sizeof(SHPObject)); psShape->nShapeId = hEntity; memcpy( &psShape->nSHPType, psSHP->pabyRec + 8, 4 ); if( bBigEndian ) SwapWord( 4, &(psShape->nSHPType) ); /* ==================================================================== */ /* Extract vertices for a Polygon or Arc. */ /* ==================================================================== */ if( psShape->nSHPType == SHPT_POLYGON || psShape->nSHPType == SHPT_ARC || psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_POLYGONM || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_ARCM || psShape->nSHPType == SHPT_MULTIPATCH ) { int32 nPoints, nParts; int i, nOffset; /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* Extract part/point count, and build vertex and part arrays */ /* to proper size. */ /* -------------------------------------------------------------------- */ memcpy( &nPoints, psSHP->pabyRec + 40 + 8, 4 ); memcpy( &nParts, psSHP->pabyRec + 36 + 8, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); if( bBigEndian ) SwapWord( 4, &nParts ); psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); psShape->nParts = nParts; psShape->panPartStart = (int *) calloc(nParts,sizeof(int)); psShape->panPartType = (int *) calloc(nParts,sizeof(int)); for( i = 0; i < nParts; i++ ) psShape->panPartType[i] = SHPP_RING; /* -------------------------------------------------------------------- */ /* Copy out the part array from the record. */ /* -------------------------------------------------------------------- */ memcpy( psShape->panPartStart, psSHP->pabyRec + 44 + 8, 4 * nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartStart+i ); } nOffset = 44 + 8 + 4*nParts; /* -------------------------------------------------------------------- */ /* If this is a multipatch, we will also have parts types. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( psShape->panPartType, psSHP->pabyRec + nOffset, 4*nParts ); for( i = 0; i < nParts; i++ ) { if( bBigEndian ) SwapWord( 4, psShape->panPartType+i ); } nOffset += 4*nParts; } /* -------------------------------------------------------------------- */ /* Copy out the vertices from the record. */ /* -------------------------------------------------------------------- */ for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX + i, psSHP->pabyRec + nOffset + i * 16, 8 ); memcpy(psShape->padfY + i, psSHP->pabyRec + nOffset + i * 16 + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset += 16*nPoints; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POLYGONZ || psShape->nSHPType == SHPT_ARCZ || psShape->nSHPType == SHPT_MULTIPATCH ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } } } /* ==================================================================== */ /* Extract vertices for a MultiPoint. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_MULTIPOINT || psShape->nSHPType == SHPT_MULTIPOINTM || psShape->nSHPType == SHPT_MULTIPOINTZ ) { int32 nPoints; int i, nOffset; memcpy( &nPoints, psSHP->pabyRec + 44, 4 ); if( bBigEndian ) SwapWord( 4, &nPoints ); psShape->nVertices = nPoints; psShape->padfX = (double *) calloc(nPoints,sizeof(double)); psShape->padfY = (double *) calloc(nPoints,sizeof(double)); psShape->padfZ = (double *) calloc(nPoints,sizeof(double)); psShape->padfM = (double *) calloc(nPoints,sizeof(double)); for( i = 0; i < nPoints; i++ ) { memcpy(psShape->padfX+i, psSHP->pabyRec + 48 + 16 * i, 8 ); memcpy(psShape->padfY+i, psSHP->pabyRec + 48 + 16 * i + 8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX + i ); if( bBigEndian ) SwapWord( 8, psShape->padfY + i ); } nOffset = 48 + 16*nPoints; /* -------------------------------------------------------------------- */ /* Get the X/Y bounds. */ /* -------------------------------------------------------------------- */ memcpy( &(psShape->dfXMin), psSHP->pabyRec + 8 + 4, 8 ); memcpy( &(psShape->dfYMin), psSHP->pabyRec + 8 + 12, 8 ); memcpy( &(psShape->dfXMax), psSHP->pabyRec + 8 + 20, 8 ); memcpy( &(psShape->dfYMax), psSHP->pabyRec + 8 + 28, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfXMax) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfYMax) ); /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_MULTIPOINTZ ) { memcpy( &(psShape->dfZMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfZMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfZMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfZ + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ + i ); } nOffset += 16 + 8*nPoints; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 16 + 8*nPoints ) { memcpy( &(psShape->dfMMin), psSHP->pabyRec + nOffset, 8 ); memcpy( &(psShape->dfMMax), psSHP->pabyRec + nOffset + 8, 8 ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMin) ); if( bBigEndian ) SwapWord( 8, &(psShape->dfMMax) ); for( i = 0; i < nPoints; i++ ) { memcpy( psShape->padfM + i, psSHP->pabyRec + nOffset + 16 + i*8, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM + i ); } } } /* ==================================================================== */ /* Extract vertices for a point. */ /* ==================================================================== */ else if( psShape->nSHPType == SHPT_POINT || psShape->nSHPType == SHPT_POINTM || psShape->nSHPType == SHPT_POINTZ ) { int nOffset; psShape->nVertices = 1; psShape->padfX = (double *) calloc(1,sizeof(double)); psShape->padfY = (double *) calloc(1,sizeof(double)); psShape->padfZ = (double *) calloc(1,sizeof(double)); psShape->padfM = (double *) calloc(1,sizeof(double)); memcpy( psShape->padfX, psSHP->pabyRec + 12, 8 ); memcpy( psShape->padfY, psSHP->pabyRec + 20, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfX ); if( bBigEndian ) SwapWord( 8, psShape->padfY ); nOffset = 20 + 8; /* -------------------------------------------------------------------- */ /* If we have a Z coordinate, collect that now. */ /* -------------------------------------------------------------------- */ if( psShape->nSHPType == SHPT_POINTZ ) { memcpy( psShape->padfZ, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfZ ); nOffset += 8; } /* -------------------------------------------------------------------- */ /* If we have a M measure value, then read it now. We assume */ /* that the measure can be present for any shape if the size is */ /* big enough, but really it will only occur for the Z shapes */ /* (options), and the M shapes. */ /* -------------------------------------------------------------------- */ if( psSHP->panRecSize[hEntity]+8 >= nOffset + 8 ) { memcpy( psShape->padfM, psSHP->pabyRec + nOffset, 8 ); if( bBigEndian ) SwapWord( 8, psShape->padfM ); } /* -------------------------------------------------------------------- */ /* Since no extents are supplied in the record, we will apply */ /* them from the single vertex. */ /* -------------------------------------------------------------------- */ psShape->dfXMin = psShape->dfXMax = psShape->padfX[0]; psShape->dfYMin = psShape->dfYMax = psShape->padfY[0]; psShape->dfZMin = psShape->dfZMax = psShape->padfZ[0]; psShape->dfMMin = psShape->dfMMax = psShape->padfM[0]; } return( psShape ); } /************************************************************************/ /* SHPTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPTypeName( int nSHPType ) { switch( nSHPType ) { case SHPT_NULL: return "NullShape"; case SHPT_POINT: return "Point"; case SHPT_ARC: return "Arc"; case SHPT_POLYGON: return "Polygon"; case SHPT_MULTIPOINT: return "MultiPoint"; case SHPT_POINTZ: return "PointZ"; case SHPT_ARCZ: return "ArcZ"; case SHPT_POLYGONZ: return "PolygonZ"; case SHPT_MULTIPOINTZ: return "MultiPointZ"; case SHPT_POINTM: return "PointM"; case SHPT_ARCM: return "ArcM"; case SHPT_POLYGONM: return "PolygonM"; case SHPT_MULTIPOINTM: return "MultiPointM"; case SHPT_MULTIPATCH: return "MultiPatch"; default: return "UnknownShapeType"; } } /************************************************************************/ /* SHPPartTypeName() */ /************************************************************************/ const char SHPAPI_CALL1(*) SHPPartTypeName( int nPartType ) { switch( nPartType ) { case SHPP_TRISTRIP: return "TriangleStrip"; case SHPP_TRIFAN: return "TriangleFan"; case SHPP_OUTERRING: return "OuterRing"; case SHPP_INNERRING: return "InnerRing"; case SHPP_FIRSTRING: return "FirstRing"; case SHPP_RING: return "Ring"; default: return "UnknownPartType"; } } /************************************************************************/ /* SHPDestroyObject() */ /************************************************************************/ void SHPAPI_CALL SHPDestroyObject( SHPObject * psShape ) { if( psShape == NULL ) return; if( psShape->padfX != NULL ) free( psShape->padfX ); if( psShape->padfY != NULL ) free( psShape->padfY ); if( psShape->padfZ != NULL ) free( psShape->padfZ ); if( psShape->padfM != NULL ) free( psShape->padfM ); if( psShape->panPartStart != NULL ) free( psShape->panPartStart ); if( psShape->panPartType != NULL ) free( psShape->panPartType ); free( psShape ); } /************************************************************************/ /* SHPRewindObject() */ /* */ /* Reset the winding of polygon objects to adhere to the */ /* specification. */ /************************************************************************/ int SHPAPI_CALL SHPRewindObject( SHPHandle hSHP, SHPObject * psObject ) { int iOpRing, bAltered = 0; /* -------------------------------------------------------------------- */ /* Do nothing if this is not a polygon object. */ /* -------------------------------------------------------------------- */ if( psObject->nSHPType != SHPT_POLYGON && psObject->nSHPType != SHPT_POLYGONZ && psObject->nSHPType != SHPT_POLYGONM ) return 0; /* -------------------------------------------------------------------- */ /* Process each of the rings. */ /* -------------------------------------------------------------------- */ for( iOpRing = 0; iOpRing < psObject->nParts; iOpRing++ ) { int bInner, iVert, nVertCount, nVertStart, iCheckRing; double dfSum, dfTestX, dfTestY; /* -------------------------------------------------------------------- */ /* Determine if this ring is an inner ring or an outer ring */ /* relative to all the other rings. For now we assume the */ /* first ring is outer and all others are inner, but eventually */ /* we need to fix this to handle multiple island polygons and */ /* unordered sets of rings. */ /* -------------------------------------------------------------------- */ dfTestX = psObject->padfX[psObject->panPartStart[iOpRing]]; dfTestY = psObject->padfY[psObject->panPartStart[iOpRing]]; bInner = FALSE; for( iCheckRing = 0; iCheckRing < psObject->nParts; iCheckRing++ ) { int iEdge; if( iCheckRing == iOpRing ) continue; nVertStart = psObject->panPartStart[iCheckRing]; if( iCheckRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iCheckRing]; else nVertCount = psObject->panPartStart[iCheckRing+1] - psObject->panPartStart[iCheckRing]; for( iEdge = 0; iEdge < nVertCount; iEdge++ ) { int iNext; if( iEdge < nVertCount-1 ) iNext = iEdge+1; else iNext = 0; if( (psObject->padfY[iEdge+nVertStart] < dfTestY && psObject->padfY[iNext+nVertStart] >= dfTestY) || (psObject->padfY[iNext+nVertStart] < dfTestY && psObject->padfY[iEdge+nVertStart] >= dfTestY) ) { if( psObject->padfX[iEdge+nVertStart] + (dfTestY - psObject->padfY[iEdge+nVertStart]) / (psObject->padfY[iNext+nVertStart] - psObject->padfY[iEdge+nVertStart]) * (psObject->padfX[iNext+nVertStart] - psObject->padfX[iEdge+nVertStart]) < dfTestX ) bInner = !bInner; } } } /* -------------------------------------------------------------------- */ /* Determine the current order of this ring so we will know if */ /* it has to be reversed. */ /* -------------------------------------------------------------------- */ nVertStart = psObject->panPartStart[iOpRing]; if( iOpRing == psObject->nParts-1 ) nVertCount = psObject->nVertices - psObject->panPartStart[iOpRing]; else nVertCount = psObject->panPartStart[iOpRing+1] - psObject->panPartStart[iOpRing]; dfSum = 0.0; for( iVert = nVertStart; iVert < nVertStart+nVertCount-1; iVert++ ) { dfSum += psObject->padfX[iVert] * psObject->padfY[iVert+1] - psObject->padfY[iVert] * psObject->padfX[iVert+1]; } dfSum += psObject->padfX[iVert] * psObject->padfY[nVertStart] - psObject->padfY[iVert] * psObject->padfX[nVertStart]; /* -------------------------------------------------------------------- */ /* Reverse if necessary. */ /* -------------------------------------------------------------------- */ if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) ) { int i; bAltered++; for( i = 0; i < nVertCount/2; i++ ) { double dfSaved; /* Swap X */ dfSaved = psObject->padfX[nVertStart+i]; psObject->padfX[nVertStart+i] = psObject->padfX[nVertStart+nVertCount-i-1]; psObject->padfX[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Y */ dfSaved = psObject->padfY[nVertStart+i]; psObject->padfY[nVertStart+i] = psObject->padfY[nVertStart+nVertCount-i-1]; psObject->padfY[nVertStart+nVertCount-i-1] = dfSaved; /* Swap Z */ if( psObject->padfZ ) { dfSaved = psObject->padfZ[nVertStart+i]; psObject->padfZ[nVertStart+i] = psObject->padfZ[nVertStart+nVertCount-i-1]; psObject->padfZ[nVertStart+nVertCount-i-1] = dfSaved; } /* Swap M */ if( psObject->padfM ) { dfSaved = psObject->padfM[nVertStart+i]; psObject->padfM[nVertStart+i] = psObject->padfM[nVertStart+nVertCount-i-1]; psObject->padfM[nVertStart+nVertCount-i-1] = dfSaved; } } } } return bAltered; } therion-5.4.1/geomag/000077500000000000000000000000001307545355600144455ustar00rootroot00000000000000therion-5.4.1/geomag/igrf11coeffs.txt000066400000000000000000001060341307545355600174710ustar00rootroot00000000000000g/h n m 1900.0 1905.0 1910.0 1915.0 1920.0 1925.0 1930.0 1935.0 1940.0 1945.0 1950.0 1955.0 1960.0 1965.0 1970.0 1975.0 1980.0 1985.0 1990.0 1995.0 2000.0 2005.0 2010.0 SV g 1 0 -31543 -31464 -31354 -31212 -31060 -30926 -30805 -30715 -30654 -30594 -30554 -30500 -30421 -30334 -30220 -30100 -29992 -29873 -29775 -29692 -29619.4 -29554.63 -29496.5 11.4 g 1 1 -2298 -2298 -2297 -2306 -2317 -2318 -2316 -2306 -2292 -2285 -2250 -2215 -2169 -2119 -2068 -2013 -1956 -1905 -1848 -1784 -1728.2 -1669.05 -1585.9 16.7 h 1 1 5922 5909 5898 5875 5845 5817 5808 5812 5821 5810 5815 5820 5791 5776 5737 5675 5604 5500 5406 5306 5186.1 5077.99 4945.1 -28.8 g 2 0 -677 -728 -769 -802 -839 -893 -951 -1018 -1106 -1244 -1341 -1440 -1555 -1662 -1781 -1902 -1997 -2072 -2131 -2200 -2267.7 -2337.24 -2396.6 -11.3 g 2 1 2905 2928 2948 2956 2959 2969 2980 2984 2981 2990 2998 3003 3002 2997 3000 3010 3027 3044 3059 3070 3068.4 3047.69 3026.0 -3.9 h 2 1 -1061 -1086 -1128 -1191 -1259 -1334 -1424 -1520 -1614 -1702 -1810 -1898 -1967 -2016 -2047 -2067 -2129 -2197 -2279 -2366 -2481.6 -2594.50 -2707.7 -23.0 g 2 2 924 1041 1176 1309 1407 1471 1517 1550 1566 1578 1576 1581 1590 1594 1611 1632 1663 1687 1686 1681 1670.9 1657.76 1668.6 2.7 h 2 2 1121 1065 1000 917 823 728 644 586 528 477 381 291 206 114 25 -68 -200 -306 -373 -413 -458.0 -515.43 -575.4 -12.9 g 3 0 1022 1037 1058 1084 1111 1140 1172 1206 1240 1282 1297 1302 1302 1297 1287 1276 1281 1296 1314 1335 1339.6 1336.30 1339.7 1.3 g 3 1 -1469 -1494 -1524 -1559 -1600 -1645 -1692 -1740 -1790 -1834 -1889 -1944 -1992 -2038 -2091 -2144 -2180 -2208 -2239 -2267 -2288.0 -2305.83 -2326.3 -3.9 h 3 1 -330 -357 -389 -421 -445 -462 -480 -494 -499 -499 -476 -462 -414 -404 -366 -333 -336 -310 -284 -262 -227.6 -198.86 -160.5 8.6 g 3 2 1256 1239 1223 1212 1205 1202 1205 1215 1232 1255 1274 1288 1289 1292 1278 1260 1251 1247 1248 1249 1252.1 1246.39 1231.7 -2.9 h 3 2 3 34 62 84 103 119 133 146 163 186 206 216 224 240 251 262 271 284 293 302 293.4 269.72 251.7 -2.9 g 3 3 572 635 705 778 839 881 907 918 916 913 896 882 878 856 838 830 833 829 802 759 714.5 672.51 634.2 -8.1 h 3 3 523 480 425 360 293 229 166 101 43 -11 -46 -83 -130 -165 -196 -223 -252 -297 -352 -427 -491.1 -524.72 -536.8 -2.1 g 4 0 876 880 884 887 889 891 896 903 914 944 954 958 957 957 952 946 938 936 939 940 932.3 920.55 912.6 -1.4 g 4 1 628 643 660 678 695 711 727 744 762 776 792 796 800 804 800 791 782 780 780 780 786.8 797.96 809.0 2.0 h 4 1 195 203 211 218 220 216 205 188 169 144 136 133 135 148 167 191 212 232 247 262 272.6 282.07 286.4 0.4 g 4 2 660 653 644 631 616 601 584 565 550 544 528 510 504 479 461 438 398 361 325 290 250.0 210.65 166.6 -8.9 h 4 2 -69 -77 -90 -109 -134 -163 -195 -226 -252 -276 -278 -274 -278 -269 -266 -265 -257 -249 -240 -236 -231.9 -225.23 -211.2 3.2 g 4 3 -361 -380 -400 -416 -424 -426 -422 -415 -405 -421 -408 -397 -394 -390 -395 -405 -419 -424 -423 -418 -403.0 -379.86 -357.1 4.4 h 4 3 -210 -201 -189 -173 -153 -130 -109 -90 -72 -55 -37 -23 3 13 26 39 53 69 84 97 119.8 145.15 164.4 3.6 g 4 4 134 146 160 178 199 217 234 249 265 304 303 290 269 252 234 216 199 170 141 122 111.3 100.00 89.7 -2.3 h 4 4 -75 -65 -55 -51 -57 -70 -90 -114 -141 -178 -210 -230 -255 -269 -279 -288 -297 -297 -299 -306 -303.8 -305.36 -309.2 -0.8 g 5 0 -184 -192 -201 -211 -221 -230 -237 -241 -241 -253 -240 -229 -222 -219 -216 -218 -218 -214 -214 -214 -218.8 -227.00 -231.1 -0.5 g 5 1 328 328 327 327 326 326 327 329 334 346 349 360 362 358 359 356 357 355 353 352 351.4 354.41 357.2 0.5 h 5 1 -210 -193 -172 -148 -122 -96 -72 -51 -33 -12 3 15 16 19 26 31 46 47 46 46 43.8 42.72 44.7 0.5 g 5 2 264 259 253 245 236 226 218 211 208 194 211 230 242 254 262 264 261 253 245 235 222.3 208.95 200.3 -1.5 h 5 2 53 56 57 58 58 58 60 64 71 95 103 110 125 128 139 148 150 150 154 165 171.9 180.25 188.9 1.5 g 5 3 5 -1 -9 -16 -23 -28 -32 -33 -33 -20 -20 -23 -26 -31 -42 -59 -74 -93 -109 -118 -130.4 -136.54 -141.2 -0.7 h 5 3 -33 -32 -33 -34 -38 -44 -53 -64 -75 -67 -87 -98 -117 -126 -139 -152 -151 -154 -153 -143 -133.1 -123.45 -118.1 0.9 g 5 4 -86 -93 -102 -111 -119 -125 -131 -136 -141 -142 -147 -152 -156 -157 -160 -159 -162 -164 -165 -166 -168.6 -168.05 -163.1 1.3 h 5 4 -124 -125 -126 -126 -125 -122 -118 -115 -113 -119 -122 -121 -114 -97 -91 -83 -78 -75 -69 -55 -39.3 -19.57 0.1 3.7 g 5 5 -16 -26 -38 -51 -62 -69 -74 -76 -76 -82 -76 -69 -63 -62 -56 -49 -48 -46 -36 -17 -12.9 -13.55 -7.7 1.4 h 5 5 3 11 21 32 43 51 58 64 69 82 80 78 81 81 83 88 92 95 97 107 106.3 103.85 100.9 -0.6 g 6 0 63 62 62 61 61 61 60 59 57 59 54 47 46 45 43 45 48 53 61 68 72.3 73.60 72.8 -0.3 g 6 1 61 60 58 57 55 54 53 53 54 57 57 57 58 61 64 66 66 65 65 67 68.2 69.56 68.6 -0.3 h 6 1 -9 -7 -5 -2 0 3 4 4 4 6 -1 -9 -10 -11 -12 -13 -15 -16 -16 -17 -17.4 -20.33 -20.8 -0.1 g 6 2 -11 -11 -11 -10 -10 -9 -9 -8 -7 6 4 3 1 8 15 28 42 51 59 68 74.2 76.74 76.0 -0.3 h 6 2 83 86 89 93 96 99 102 104 105 100 99 96 99 100 100 99 93 88 82 72 63.7 54.75 44.2 -2.1 g 6 3 -217 -221 -224 -228 -233 -238 -242 -246 -249 -246 -247 -247 -237 -228 -212 -198 -192 -185 -178 -170 -160.9 -151.34 -141.4 1.9 h 6 3 2 4 5 8 11 14 19 25 33 16 33 48 60 68 72 75 71 69 69 67 65.1 63.63 61.5 -0.4 g 6 4 -58 -57 -54 -51 -46 -40 -32 -25 -18 -25 -16 -8 -1 4 2 1 4 4 3 -1 -5.9 -14.58 -22.9 -1.6 h 6 4 -35 -32 -29 -26 -22 -18 -16 -15 -15 -9 -12 -16 -20 -32 -37 -41 -43 -48 -52 -58 -61.2 -63.53 -66.3 -0.5 g 6 5 59 57 54 49 44 39 32 25 18 21 12 7 -2 1 3 6 14 16 18 19 16.9 14.58 13.1 -0.2 h 6 5 36 32 28 23 18 13 8 4 0 -16 -12 -12 -11 -8 -6 -4 -2 -1 1 1 0.7 0.24 3.1 0.8 g 6 6 -90 -92 -95 -98 -101 -103 -104 -106 -107 -104 -105 -107 -113 -111 -112 -111 -108 -102 -96 -93 -90.4 -86.36 -77.9 1.8 h 6 6 -69 -67 -65 -62 -57 -52 -46 -40 -33 -39 -30 -24 -17 -7 1 11 17 21 24 36 43.8 50.94 54.9 0.5 g 7 0 70 70 71 72 73 73 74 74 74 70 65 65 67 75 72 71 72 74 77 77 79.0 79.88 80.4 0.2 g 7 1 -55 -54 -54 -54 -54 -54 -54 -53 -53 -40 -55 -56 -56 -57 -57 -56 -59 -62 -64 -72 -74.0 -74.46 -75.0 -0.1 h 7 1 -45 -46 -47 -48 -49 -50 -51 -52 -52 -45 -35 -50 -55 -61 -70 -77 -82 -83 -80 -69 -64.6 -61.14 -57.8 0.6 g 7 2 0 0 1 2 2 3 4 4 4 0 2 2 5 4 1 1 2 3 2 1 0.0 -1.65 -4.7 -0.6 h 7 2 -13 -14 -14 -14 -14 -14 -15 -17 -18 -18 -17 -24 -28 -27 -27 -26 -27 -27 -26 -25 -24.2 -22.57 -21.2 0.3 g 7 3 34 33 32 31 29 27 25 23 20 0 1 10 15 13 14 16 21 24 26 28 33.3 38.73 45.3 1.4 h 7 3 -10 -11 -12 -12 -13 -14 -14 -14 -14 2 0 -4 -6 -2 -4 -5 -5 -2 0 4 6.2 6.82 6.6 -0.2 g 7 4 -41 -41 -40 -38 -37 -35 -34 -33 -31 -29 -40 -32 -32 -26 -22 -14 -12 -6 -1 5 9.1 12.30 14.0 0.3 h 7 4 -1 0 1 2 4 5 6 7 7 6 10 8 7 6 8 10 16 20 21 24 24.0 25.35 24.9 -0.1 g 7 5 -21 -20 -19 -18 -16 -14 -12 -11 -9 -10 -7 -11 -7 -6 -2 0 1 4 5 4 6.9 9.37 10.4 0.1 h 7 5 28 28 28 28 28 29 29 29 29 28 36 28 23 26 23 22 18 17 17 17 14.8 10.93 7.0 -0.8 g 7 6 18 18 18 19 19 19 18 18 17 15 5 9 17 13 13 12 11 10 9 8 7.3 5.42 1.6 -0.8 h 7 6 -12 -12 -13 -15 -16 -17 -18 -19 -20 -17 -18 -20 -18 -23 -23 -23 -23 -23 -23 -24 -25.4 -26.32 -27.7 -0.3 g 7 7 6 6 6 6 6 6 6 6 5 29 19 18 8 1 -2 -5 -2 0 0 -2 -1.2 1.94 4.9 0.4 h 7 7 -22 -22 -22 -22 -22 -21 -20 -19 -19 -22 -16 -18 -17 -12 -11 -12 -10 -7 -4 -6 -5.8 -4.64 -3.4 0.2 g 8 0 11 11 11 11 11 11 11 11 11 13 22 11 15 13 14 14 18 21 23 25 24.4 24.80 24.3 -0.1 g 8 1 8 8 8 8 7 7 7 7 7 7 15 9 6 5 6 6 6 6 5 6 6.6 7.62 8.2 0.1 h 8 1 8 8 8 8 8 8 8 8 8 12 5 10 11 7 7 6 7 8 10 11 11.9 11.20 10.9 0.0 g 8 2 -4 -4 -4 -4 -3 -3 -3 -3 -3 -8 -4 -6 -4 -4 -2 -1 0 0 -1 -6 -9.2 -11.73 -14.5 -0.5 h 8 2 -14 -15 -15 -15 -15 -15 -15 -15 -14 -21 -22 -15 -14 -12 -15 -16 -18 -19 -19 -21 -21.5 -20.88 -20.0 0.2 g 8 3 -9 -9 -9 -9 -9 -9 -9 -9 -10 -5 -1 -14 -11 -14 -13 -12 -11 -11 -10 -9 -7.9 -6.88 -5.7 0.3 h 8 3 7 7 6 6 6 6 5 5 5 -12 0 5 7 9 6 4 4 5 6 8 8.5 9.83 11.9 0.5 g 8 4 1 1 1 2 2 2 2 1 1 9 11 6 2 0 -3 -8 -7 -9 -12 -14 -16.6 -18.11 -19.3 -0.3 h 8 4 -13 -13 -13 -13 -14 -14 -14 -15 -15 -7 -21 -23 -18 -16 -17 -19 -22 -23 -22 -23 -21.5 -19.71 -17.4 0.4 g 8 5 2 2 2 3 4 4 5 6 6 7 15 10 10 8 5 4 4 4 3 9 9.1 10.17 11.6 0.3 h 8 5 5 5 5 5 5 5 5 5 5 2 -8 3 4 4 6 6 9 11 12 15 15.5 16.22 16.7 0.1 g 8 6 -9 -8 -8 -8 -7 -7 -6 -6 -5 -10 -13 -7 -5 -1 0 0 3 4 4 6 7.0 9.36 10.9 0.2 h 8 6 16 16 16 16 17 17 18 18 19 18 17 23 23 24 21 18 16 14 12 11 8.9 7.61 7.1 -0.1 g 8 7 5 5 5 6 6 7 8 8 9 7 5 6 10 11 11 10 6 4 2 -5 -7.9 -11.25 -14.1 -0.5 h 8 7 -5 -5 -5 -5 -5 -5 -5 -5 -5 3 -4 -4 1 -3 -6 -10 -13 -15 -16 -16 -14.9 -12.76 -10.8 0.4 g 8 8 8 8 8 8 8 8 8 7 7 2 -1 9 8 4 3 1 -1 -4 -6 -7 -7.0 -4.87 -3.7 0.2 h 8 8 -18 -18 -18 -18 -19 -19 -19 -19 -19 -11 -17 -13 -20 -17 -16 -17 -15 -11 -10 -4 -2.1 -0.06 1.7 0.4 g 9 0 8 8 8 8 8 8 8 8 8 5 3 4 4 8 8 7 5 5 4 4 5.0 5.58 5.4 0.0 g 9 1 10 10 10 10 10 10 10 10 10 -21 -7 9 6 10 10 10 10 10 9 9 9.4 9.76 9.4 0.0 h 9 1 -20 -20 -20 -20 -20 -20 -20 -20 -21 -27 -24 -11 -18 -22 -21 -21 -21 -21 -20 -20 -19.7 -20.11 -20.5 0.0 g 9 2 1 1 1 1 1 1 1 1 1 1 -1 -4 0 2 2 2 1 1 1 3 3.0 3.58 3.4 0.0 h 9 2 14 14 14 14 14 14 14 15 15 17 19 12 12 15 16 16 16 15 15 15 13.4 12.69 11.6 0.0 g 9 3 -11 -11 -11 -11 -11 -11 -12 -12 -12 -11 -25 -5 -9 -13 -12 -12 -12 -12 -12 -10 -8.4 -6.94 -5.3 0.0 h 9 3 5 5 5 5 5 5 5 5 5 29 12 7 2 7 6 7 9 9 11 12 12.5 12.67 12.8 0.0 g 9 4 12 12 12 12 12 12 12 11 11 3 10 2 1 10 10 10 9 9 9 8 6.3 5.01 3.1 0.0 h 9 4 -3 -3 -3 -3 -3 -3 -3 -3 -3 -9 2 6 0 -4 -4 -4 -5 -6 -7 -6 -6.2 -6.72 -7.2 0.0 g 9 5 1 1 1 1 1 1 1 1 1 16 5 4 4 -1 -1 -1 -3 -3 -4 -8 -8.9 -10.76 -12.4 0.0 h 9 5 -2 -2 -2 -2 -2 -2 -2 -3 -3 4 2 -2 -3 -5 -5 -5 -6 -6 -7 -8 -8.4 -8.16 -7.4 0.0 g 9 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -3 -5 1 -1 -1 0 -1 -1 -1 -2 -1 -1.5 -1.25 -0.8 0.0 h 9 6 8 8 8 8 9 9 9 9 9 9 8 10 9 10 10 10 9 9 9 8 8.4 8.10 8.0 0.0 g 9 7 2 2 2 2 2 2 3 3 3 -4 -2 2 -2 5 3 4 7 7 7 10 9.3 8.76 8.4 0.0 h 9 7 10 10 10 10 10 10 10 11 11 6 8 7 8 10 11 11 10 9 8 5 3.8 2.92 2.2 0.0 g 9 8 -1 0 0 0 0 0 0 0 1 -3 3 2 3 1 1 1 2 1 1 -2 -4.3 -6.66 -8.4 0.0 h 9 8 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 -11 -6 0 -4 -2 -3 -6 -7 -7 -8 -8.2 -7.73 -6.1 0.0 g 9 9 -1 -1 -1 -1 -1 -1 -2 -2 -2 -4 8 5 -1 -2 -1 -2 -5 -5 -6 -8 -8.2 -9.22 -10.1 0.0 h 9 9 2 2 2 2 2 2 2 2 2 8 -7 5 5 1 1 1 2 2 2 3 4.8 6.01 7.0 0.0 g 10 0 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -8 -3 1 -2 -3 -3 -4 -4 -3 -3 -2.6 -2.17 -2.0 0.0 g 10 1 -4 -4 -4 -4 -4 -4 -4 -4 -4 11 4 -5 -3 -3 -3 -3 -4 -4 -4 -6 -6.0 -6.12 -6.3 0.0 h 10 1 2 2 2 2 2 2 2 2 2 5 13 -4 4 2 1 1 1 1 2 1 1.7 2.19 2.8 0.0 g 10 2 2 2 2 2 2 2 2 2 2 1 -1 -1 4 2 2 2 2 3 2 2 1.7 1.42 0.9 0.0 h 10 2 1 1 1 1 1 1 1 1 1 1 -2 0 1 1 1 1 0 0 1 0 0.0 0.10 -0.1 0.0 g 10 3 -5 -5 -5 -5 -5 -5 -5 -5 -5 2 13 2 0 -5 -5 -5 -5 -5 -5 -4 -3.1 -2.35 -1.1 0.0 h 10 3 2 2 2 2 2 2 2 2 2 -20 -10 -8 0 2 3 3 3 3 3 4 4.0 4.46 4.7 0.0 g 10 4 -2 -2 -2 -2 -2 -2 -2 -2 -2 -5 -4 -3 -1 -2 -1 -2 -2 -2 -2 -1 -0.5 -0.15 -0.2 0.0 h 10 4 6 6 6 6 6 6 6 6 6 -1 2 -2 2 6 4 4 6 6 6 5 4.9 4.76 4.4 0.0 g 10 5 6 6 6 6 6 6 6 6 6 -1 4 7 4 4 6 5 5 5 4 4 3.7 3.06 2.5 0.0 h 10 5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -6 -3 -4 -5 -4 -4 -4 -4 -4 -4 -5 -5.9 -6.58 -7.2 0.0 g 10 6 4 4 4 4 4 4 4 4 4 8 12 4 6 4 4 4 3 3 3 2 1.0 0.29 -0.3 0.0 h 10 6 0 0 0 0 0 0 0 0 0 6 6 1 1 0 0 -1 0 0 0 -1 -1.2 -1.01 -1.0 0.0 g 10 7 0 0 0 0 0 0 0 0 0 -1 3 -2 1 0 1 1 1 1 1 2 2.0 2.06 2.2 0.0 h 10 7 -2 -2 -2 -2 -2 -2 -2 -1 -1 -4 -3 -3 -1 -2 -1 -1 -1 -1 -2 -2 -2.9 -3.47 -4.0 0.0 g 10 8 2 2 2 1 1 1 1 2 2 -3 2 6 -1 2 0 0 2 2 3 5 4.2 3.77 3.1 0.0 h 10 8 4 4 4 4 4 4 4 4 4 -2 6 7 6 3 3 3 4 4 3 1 0.2 -0.86 -2.0 0.0 g 10 9 2 2 2 2 3 3 3 3 3 5 10 -2 2 2 3 3 3 3 3 1 0.3 -0.21 -1.0 0.0 h 10 9 0 0 0 0 0 0 0 0 0 0 11 -1 0 0 1 1 0 0 -1 -2 -2.2 -2.31 -2.0 0.0 g 10 10 0 0 0 0 0 0 0 0 0 -2 3 0 0 0 -1 -1 0 0 0 0 -1.1 -2.09 -2.8 0.0 h 10 10 -6 -6 -6 -6 -6 -6 -6 -6 -6 -2 8 -3 -7 -6 -4 -5 -6 -6 -6 -7 -7.4 -7.93 -8.3 0.0 g 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 2.95 3.0 0.0 g 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.7 -1.60 -1.5 0.0 h 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.26 0.1 0.0 g 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.88 -2.1 0.0 h 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.44 1.7 0.0 g 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.44 1.6 0.0 h 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.77 -0.6 0.0 g 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.31 -0.5 0.0 h 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.27 -1.8 0.0 g 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.29 0.5 0.0 h 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.90 0.9 0.0 g 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.79 -0.8 0.0 h 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.58 -0.4 0.0 g 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.53 0.4 0.0 h 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.8 -2.69 -2.5 0.0 g 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.7 1.80 1.8 0.0 h 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.08 -1.3 0.0 g 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.16 0.2 0.0 h 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 -1.58 -2.1 0.0 g 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 0.96 0.8 0.0 h 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.90 -1.9 0.0 g 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.0 3.99 3.8 0.0 h 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.39 -1.8 0.0 g 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.2 -2.15 -2.1 0.0 g 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.29 -0.2 0.0 h 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.55 -0.8 0.0 g 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.21 0.3 0.0 h 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.23 0.3 0.0 g 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.89 1.0 0.0 h 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5 2.38 2.2 0.0 g 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.38 -0.7 0.0 h 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.63 -2.5 0.0 g 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.96 0.9 0.0 h 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.61 0.5 0.0 g 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.30 -0.1 0.0 h 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.40 0.6 0.0 g 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.46 0.5 0.0 h 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.01 0.0 0.0 g 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.35 -0.4 0.0 h 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.02 0.1 0.0 g 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.36 -0.4 0.0 h 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.28 0.3 0.0 g 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0.08 0.2 0.0 h 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.87 -0.9 0.0 g 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.49 -0.8 0.0 h 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.34 -0.2 0.0 g 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.08 0.0 0.0 h 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8 0.88 0.8 0.0 g 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.16 -0.2 0.0 g 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.88 -0.9 0.0 h 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.76 -0.8 0.0 g 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.30 0.3 0.0 h 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.33 0.3 0.0 g 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.28 0.4 0.0 h 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.8 1.72 1.7 0.0 g 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.43 -0.4 0.0 h 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.54 -0.6 0.0 g 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.18 1.1 0.0 h 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.0 -1.07 -1.2 0.0 g 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.37 -0.3 0.0 h 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.04 -0.1 0.0 g 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.75 0.8 0.0 h 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.63 0.5 0.0 g 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.26 -0.2 0.0 h 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.21 0.1 0.0 g 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.35 0.4 0.0 h 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0.53 0.5 0.0 g 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.05 0.0 0.0 h 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.38 0.4 0.0 g 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0.41 0.4 0.0 h 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.22 -0.2 0.0 g 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 -0.10 -0.3 0.0 h 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.57 -0.5 0.0 g 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 -0.18 -0.3 0.0 h 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.82 -0.8 0.0 therion-5.4.1/geomag/igrf12coeffs.txt000066400000000000000000001131121307545355600174650ustar00rootroot00000000000000# 12th Generation International Geomagnetic Reference Field Schmidt semi-normalised spherical harmonic coefficients, degree n=1,13 # in units nanoTesla for IGRF and definitive DGRF main-field models (degree n=1,8 nanoTesla/year for secular variation (SV)) c/s deg ord IGRF IGRF IGRF IGRF IGRF IGRF IGRF IGRF IGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF DGRF IGRF SV g/h n m 1900.0 1905.0 1910.0 1915.0 1920.0 1925.0 1930.0 1935.0 1940.0 1945.0 1950.0 1955.0 1960.0 1965.0 1970.0 1975.0 1980.0 1985.0 1990.0 1995.0 2000.0 2005.0 2010.0 2015.0 2015-20 g 1 0 -31543 -31464 -31354 -31212 -31060 -30926 -30805 -30715 -30654 -30594 -30554 -30500 -30421 -30334 -30220 -30100 -29992 -29873 -29775 -29692 -29619.4 -29554.63 -29496.57 -29442.0 10.3 g 1 1 -2298 -2298 -2297 -2306 -2317 -2318 -2316 -2306 -2292 -2285 -2250 -2215 -2169 -2119 -2068 -2013 -1956 -1905 -1848 -1784 -1728.2 -1669.05 -1586.42 -1501.0 18.1 h 1 1 5922 5909 5898 5875 5845 5817 5808 5812 5821 5810 5815 5820 5791 5776 5737 5675 5604 5500 5406 5306 5186.1 5077.99 4944.26 4797.1 -26.6 g 2 0 -677 -728 -769 -802 -839 -893 -951 -1018 -1106 -1244 -1341 -1440 -1555 -1662 -1781 -1902 -1997 -2072 -2131 -2200 -2267.7 -2337.24 -2396.06 -2445.1 -8.7 g 2 1 2905 2928 2948 2956 2959 2969 2980 2984 2981 2990 2998 3003 3002 2997 3000 3010 3027 3044 3059 3070 3068.4 3047.69 3026.34 3012.9 -3.3 h 2 1 -1061 -1086 -1128 -1191 -1259 -1334 -1424 -1520 -1614 -1702 -1810 -1898 -1967 -2016 -2047 -2067 -2129 -2197 -2279 -2366 -2481.6 -2594.50 -2708.54 -2845.6 -27.4 g 2 2 924 1041 1176 1309 1407 1471 1517 1550 1566 1578 1576 1581 1590 1594 1611 1632 1663 1687 1686 1681 1670.9 1657.76 1668.17 1676.7 2.1 h 2 2 1121 1065 1000 917 823 728 644 586 528 477 381 291 206 114 25 -68 -200 -306 -373 -413 -458.0 -515.43 -575.73 -641.9 -14.1 g 3 0 1022 1037 1058 1084 1111 1140 1172 1206 1240 1282 1297 1302 1302 1297 1287 1276 1281 1296 1314 1335 1339.6 1336.30 1339.85 1350.7 3.4 g 3 1 -1469 -1494 -1524 -1559 -1600 -1645 -1692 -1740 -1790 -1834 -1889 -1944 -1992 -2038 -2091 -2144 -2180 -2208 -2239 -2267 -2288.0 -2305.83 -2326.54 -2352.3 -5.5 h 3 1 -330 -357 -389 -421 -445 -462 -480 -494 -499 -499 -476 -462 -414 -404 -366 -333 -336 -310 -284 -262 -227.6 -198.86 -160.40 -115.3 8.2 g 3 2 1256 1239 1223 1212 1205 1202 1205 1215 1232 1255 1274 1288 1289 1292 1278 1260 1251 1247 1248 1249 1252.1 1246.39 1232.10 1225.6 -0.7 h 3 2 3 34 62 84 103 119 133 146 163 186 206 216 224 240 251 262 271 284 293 302 293.4 269.72 251.75 244.9 -0.4 g 3 3 572 635 705 778 839 881 907 918 916 913 896 882 878 856 838 830 833 829 802 759 714.5 672.51 633.73 582.0 -10.1 h 3 3 523 480 425 360 293 229 166 101 43 -11 -46 -83 -130 -165 -196 -223 -252 -297 -352 -427 -491.1 -524.72 -537.03 -538.4 1.8 g 4 0 876 880 884 887 889 891 896 903 914 944 954 958 957 957 952 946 938 936 939 940 932.3 920.55 912.66 907.6 -0.7 g 4 1 628 643 660 678 695 711 727 744 762 776 792 796 800 804 800 791 782 780 780 780 786.8 797.96 808.97 813.7 0.2 h 4 1 195 203 211 218 220 216 205 188 169 144 136 133 135 148 167 191 212 232 247 262 272.6 282.07 286.48 283.3 -1.3 g 4 2 660 653 644 631 616 601 584 565 550 544 528 510 504 479 461 438 398 361 325 290 250.0 210.65 166.58 120.4 -9.1 h 4 2 -69 -77 -90 -109 -134 -163 -195 -226 -252 -276 -278 -274 -278 -269 -266 -265 -257 -249 -240 -236 -231.9 -225.23 -211.03 -188.7 5.3 g 4 3 -361 -380 -400 -416 -424 -426 -422 -415 -405 -421 -408 -397 -394 -390 -395 -405 -419 -424 -423 -418 -403.0 -379.86 -356.83 -334.9 4.1 h 4 3 -210 -201 -189 -173 -153 -130 -109 -90 -72 -55 -37 -23 3 13 26 39 53 69 84 97 119.8 145.15 164.46 180.9 2.9 g 4 4 134 146 160 178 199 217 234 249 265 304 303 290 269 252 234 216 199 170 141 122 111.3 100.00 89.40 70.4 -4.3 h 4 4 -75 -65 -55 -51 -57 -70 -90 -114 -141 -178 -210 -230 -255 -269 -279 -288 -297 -297 -299 -306 -303.8 -305.36 -309.72 -329.5 -5.2 g 5 0 -184 -192 -201 -211 -221 -230 -237 -241 -241 -253 -240 -229 -222 -219 -216 -218 -218 -214 -214 -214 -218.8 -227.00 -230.87 -232.6 -0.2 g 5 1 328 328 327 327 326 326 327 329 334 346 349 360 362 358 359 356 357 355 353 352 351.4 354.41 357.29 360.1 0.5 h 5 1 -210 -193 -172 -148 -122 -96 -72 -51 -33 -12 3 15 16 19 26 31 46 47 46 46 43.8 42.72 44.58 47.3 0.6 g 5 2 264 259 253 245 236 226 218 211 208 194 211 230 242 254 262 264 261 253 245 235 222.3 208.95 200.26 192.4 -1.3 h 5 2 53 56 57 58 58 58 60 64 71 95 103 110 125 128 139 148 150 150 154 165 171.9 180.25 189.01 197.0 1.7 g 5 3 5 -1 -9 -16 -23 -28 -32 -33 -33 -20 -20 -23 -26 -31 -42 -59 -74 -93 -109 -118 -130.4 -136.54 -141.05 -140.9 -0.1 h 5 3 -33 -32 -33 -34 -38 -44 -53 -64 -75 -67 -87 -98 -117 -126 -139 -152 -151 -154 -153 -143 -133.1 -123.45 -118.06 -119.3 -1.2 g 5 4 -86 -93 -102 -111 -119 -125 -131 -136 -141 -142 -147 -152 -156 -157 -160 -159 -162 -164 -165 -166 -168.6 -168.05 -163.17 -157.5 1.4 h 5 4 -124 -125 -126 -126 -125 -122 -118 -115 -113 -119 -122 -121 -114 -97 -91 -83 -78 -75 -69 -55 -39.3 -19.57 -0.01 16.0 3.4 g 5 5 -16 -26 -38 -51 -62 -69 -74 -76 -76 -82 -76 -69 -63 -62 -56 -49 -48 -46 -36 -17 -12.9 -13.55 -8.03 4.1 3.9 h 5 5 3 11 21 32 43 51 58 64 69 82 80 78 81 81 83 88 92 95 97 107 106.3 103.85 101.04 100.2 0.0 g 6 0 63 62 62 61 61 61 60 59 57 59 54 47 46 45 43 45 48 53 61 68 72.3 73.60 72.78 70.0 -0.3 g 6 1 61 60 58 57 55 54 53 53 54 57 57 57 58 61 64 66 66 65 65 67 68.2 69.56 68.69 67.7 -0.1 h 6 1 -9 -7 -5 -2 0 3 4 4 4 6 -1 -9 -10 -11 -12 -13 -15 -16 -16 -17 -17.4 -20.33 -20.90 -20.8 0.0 g 6 2 -11 -11 -11 -10 -10 -9 -9 -8 -7 6 4 3 1 8 15 28 42 51 59 68 74.2 76.74 75.92 72.7 -0.7 h 6 2 83 86 89 93 96 99 102 104 105 100 99 96 99 100 100 99 93 88 82 72 63.7 54.75 44.18 33.2 -2.1 g 6 3 -217 -221 -224 -228 -233 -238 -242 -246 -249 -246 -247 -247 -237 -228 -212 -198 -192 -185 -178 -170 -160.9 -151.34 -141.40 -129.9 2.1 h 6 3 2 4 5 8 11 14 19 25 33 16 33 48 60 68 72 75 71 69 69 67 65.1 63.63 61.54 58.9 -0.7 g 6 4 -58 -57 -54 -51 -46 -40 -32 -25 -18 -25 -16 -8 -1 4 2 1 4 4 3 -1 -5.9 -14.58 -22.83 -28.9 -1.2 h 6 4 -35 -32 -29 -26 -22 -18 -16 -15 -15 -9 -12 -16 -20 -32 -37 -41 -43 -48 -52 -58 -61.2 -63.53 -66.26 -66.7 0.2 g 6 5 59 57 54 49 44 39 32 25 18 21 12 7 -2 1 3 6 14 16 18 19 16.9 14.58 13.10 13.2 0.3 h 6 5 36 32 28 23 18 13 8 4 0 -16 -12 -12 -11 -8 -6 -4 -2 -1 1 1 0.7 0.24 3.02 7.3 0.9 g 6 6 -90 -92 -95 -98 -101 -103 -104 -106 -107 -104 -105 -107 -113 -111 -112 -111 -108 -102 -96 -93 -90.4 -86.36 -78.09 -70.9 1.6 h 6 6 -69 -67 -65 -62 -57 -52 -46 -40 -33 -39 -30 -24 -17 -7 1 11 17 21 24 36 43.8 50.94 55.40 62.6 1.0 g 7 0 70 70 71 72 73 73 74 74 74 70 65 65 67 75 72 71 72 74 77 77 79.0 79.88 80.44 81.6 0.3 g 7 1 -55 -54 -54 -54 -54 -54 -54 -53 -53 -40 -55 -56 -56 -57 -57 -56 -59 -62 -64 -72 -74.0 -74.46 -75.00 -76.1 -0.2 h 7 1 -45 -46 -47 -48 -49 -50 -51 -52 -52 -45 -35 -50 -55 -61 -70 -77 -82 -83 -80 -69 -64.6 -61.14 -57.80 -54.1 0.8 g 7 2 0 0 1 2 2 3 4 4 4 0 2 2 5 4 1 1 2 3 2 1 0.0 -1.65 -4.55 -6.8 -0.5 h 7 2 -13 -14 -14 -14 -14 -14 -15 -17 -18 -18 -17 -24 -28 -27 -27 -26 -27 -27 -26 -25 -24.2 -22.57 -21.20 -19.5 0.4 g 7 3 34 33 32 31 29 27 25 23 20 0 1 10 15 13 14 16 21 24 26 28 33.3 38.73 45.24 51.8 1.3 h 7 3 -10 -11 -12 -12 -13 -14 -14 -14 -14 2 0 -4 -6 -2 -4 -5 -5 -2 0 4 6.2 6.82 6.54 5.7 -0.2 g 7 4 -41 -41 -40 -38 -37 -35 -34 -33 -31 -29 -40 -32 -32 -26 -22 -14 -12 -6 -1 5 9.1 12.30 14.00 15.0 0.1 h 7 4 -1 0 1 2 4 5 6 7 7 6 10 8 7 6 8 10 16 20 21 24 24.0 25.35 24.96 24.4 -0.3 g 7 5 -21 -20 -19 -18 -16 -14 -12 -11 -9 -10 -7 -11 -7 -6 -2 0 1 4 5 4 6.9 9.37 10.46 9.4 -0.6 h 7 5 28 28 28 28 28 29 29 29 29 28 36 28 23 26 23 22 18 17 17 17 14.8 10.93 7.03 3.4 -0.6 g 7 6 18 18 18 19 19 19 18 18 17 15 5 9 17 13 13 12 11 10 9 8 7.3 5.42 1.64 -2.8 -0.8 h 7 6 -12 -12 -13 -15 -16 -17 -18 -19 -20 -17 -18 -20 -18 -23 -23 -23 -23 -23 -23 -24 -25.4 -26.32 -27.61 -27.4 0.1 g 7 7 6 6 6 6 6 6 6 6 5 29 19 18 8 1 -2 -5 -2 0 0 -2 -1.2 1.94 4.92 6.8 0.2 h 7 7 -22 -22 -22 -22 -22 -21 -20 -19 -19 -22 -16 -18 -17 -12 -11 -12 -10 -7 -4 -6 -5.8 -4.64 -3.28 -2.2 -0.2 g 8 0 11 11 11 11 11 11 11 11 11 13 22 11 15 13 14 14 18 21 23 25 24.4 24.80 24.41 24.2 0.2 g 8 1 8 8 8 8 7 7 7 7 7 7 15 9 6 5 6 6 6 6 5 6 6.6 7.62 8.21 8.8 0.0 h 8 1 8 8 8 8 8 8 8 8 8 12 5 10 11 7 7 6 7 8 10 11 11.9 11.20 10.84 10.1 -0.3 g 8 2 -4 -4 -4 -4 -3 -3 -3 -3 -3 -8 -4 -6 -4 -4 -2 -1 0 0 -1 -6 -9.2 -11.73 -14.50 -16.9 -0.6 h 8 2 -14 -15 -15 -15 -15 -15 -15 -15 -14 -21 -22 -15 -14 -12 -15 -16 -18 -19 -19 -21 -21.5 -20.88 -20.03 -18.3 0.3 g 8 3 -9 -9 -9 -9 -9 -9 -9 -9 -10 -5 -1 -14 -11 -14 -13 -12 -11 -11 -10 -9 -7.9 -6.88 -5.59 -3.2 0.5 h 8 3 7 7 6 6 6 6 5 5 5 -12 0 5 7 9 6 4 4 5 6 8 8.5 9.83 11.83 13.3 0.1 g 8 4 1 1 1 2 2 2 2 1 1 9 11 6 2 0 -3 -8 -7 -9 -12 -14 -16.6 -18.11 -19.34 -20.6 -0.2 h 8 4 -13 -13 -13 -13 -14 -14 -14 -15 -15 -7 -21 -23 -18 -16 -17 -19 -22 -23 -22 -23 -21.5 -19.71 -17.41 -14.6 0.5 g 8 5 2 2 2 3 4 4 5 6 6 7 15 10 10 8 5 4 4 4 3 9 9.1 10.17 11.61 13.4 0.4 h 8 5 5 5 5 5 5 5 5 5 5 2 -8 3 4 4 6 6 9 11 12 15 15.5 16.22 16.71 16.2 -0.2 g 8 6 -9 -8 -8 -8 -7 -7 -6 -6 -5 -10 -13 -7 -5 -1 0 0 3 4 4 6 7.0 9.36 10.85 11.7 0.1 h 8 6 16 16 16 16 17 17 18 18 19 18 17 23 23 24 21 18 16 14 12 11 8.9 7.61 6.96 5.7 -0.3 g 8 7 5 5 5 6 6 7 8 8 9 7 5 6 10 11 11 10 6 4 2 -5 -7.9 -11.25 -14.05 -15.9 -0.4 h 8 7 -5 -5 -5 -5 -5 -5 -5 -5 -5 3 -4 -4 1 -3 -6 -10 -13 -15 -16 -16 -14.9 -12.76 -10.74 -9.1 0.3 g 8 8 8 8 8 8 8 8 8 7 7 2 -1 9 8 4 3 1 -1 -4 -6 -7 -7.0 -4.87 -3.54 -2.0 0.3 h 8 8 -18 -18 -18 -18 -19 -19 -19 -19 -19 -11 -17 -13 -20 -17 -16 -17 -15 -11 -10 -4 -2.1 -0.06 1.64 2.1 0.0 g 9 0 8 8 8 8 8 8 8 8 8 5 3 4 4 8 8 7 5 5 4 4 5.0 5.58 5.50 5.4 0.0 g 9 1 10 10 10 10 10 10 10 10 10 -21 -7 9 6 10 10 10 10 10 9 9 9.4 9.76 9.45 8.8 0.0 h 9 1 -20 -20 -20 -20 -20 -20 -20 -20 -21 -27 -24 -11 -18 -22 -21 -21 -21 -21 -20 -20 -19.7 -20.11 -20.54 -21.6 0.0 g 9 2 1 1 1 1 1 1 1 1 1 1 -1 -4 0 2 2 2 1 1 1 3 3.0 3.58 3.45 3.1 0.0 h 9 2 14 14 14 14 14 14 14 15 15 17 19 12 12 15 16 16 16 15 15 15 13.4 12.69 11.51 10.8 0.0 g 9 3 -11 -11 -11 -11 -11 -11 -12 -12 -12 -11 -25 -5 -9 -13 -12 -12 -12 -12 -12 -10 -8.4 -6.94 -5.27 -3.3 0.0 h 9 3 5 5 5 5 5 5 5 5 5 29 12 7 2 7 6 7 9 9 11 12 12.5 12.67 12.75 11.8 0.0 g 9 4 12 12 12 12 12 12 12 11 11 3 10 2 1 10 10 10 9 9 9 8 6.3 5.01 3.13 0.7 0.0 h 9 4 -3 -3 -3 -3 -3 -3 -3 -3 -3 -9 2 6 0 -4 -4 -4 -5 -6 -7 -6 -6.2 -6.72 -7.14 -6.8 0.0 g 9 5 1 1 1 1 1 1 1 1 1 16 5 4 4 -1 -1 -1 -3 -3 -4 -8 -8.9 -10.76 -12.38 -13.3 0.0 h 9 5 -2 -2 -2 -2 -2 -2 -2 -3 -3 4 2 -2 -3 -5 -5 -5 -6 -6 -7 -8 -8.4 -8.16 -7.42 -6.9 0.0 g 9 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -3 -5 1 -1 -1 0 -1 -1 -1 -2 -1 -1.5 -1.25 -0.76 -0.1 0.0 h 9 6 8 8 8 8 9 9 9 9 9 9 8 10 9 10 10 10 9 9 9 8 8.4 8.10 7.97 7.8 0.0 g 9 7 2 2 2 2 2 2 3 3 3 -4 -2 2 -2 5 3 4 7 7 7 10 9.3 8.76 8.43 8.7 0.0 h 9 7 10 10 10 10 10 10 10 11 11 6 8 7 8 10 11 11 10 9 8 5 3.8 2.92 2.14 1.0 0.0 g 9 8 -1 0 0 0 0 0 0 0 1 -3 3 2 3 1 1 1 2 1 1 -2 -4.3 -6.66 -8.42 -9.1 0.0 h 9 8 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 -11 -6 0 -4 -2 -3 -6 -7 -7 -8 -8.2 -7.73 -6.08 -4.0 0.0 g 9 9 -1 -1 -1 -1 -1 -1 -2 -2 -2 -4 8 5 -1 -2 -1 -2 -5 -5 -6 -8 -8.2 -9.22 -10.08 -10.5 0.0 h 9 9 2 2 2 2 2 2 2 2 2 8 -7 5 5 1 1 1 2 2 2 3 4.8 6.01 7.01 8.4 0.0 g 10 0 -3 -3 -3 -3 -3 -3 -3 -3 -3 -3 -8 -3 1 -2 -3 -3 -4 -4 -3 -3 -2.6 -2.17 -1.94 -1.9 0.0 g 10 1 -4 -4 -4 -4 -4 -4 -4 -4 -4 11 4 -5 -3 -3 -3 -3 -4 -4 -4 -6 -6.0 -6.12 -6.24 -6.3 0.0 h 10 1 2 2 2 2 2 2 2 2 2 5 13 -4 4 2 1 1 1 1 2 1 1.7 2.19 2.73 3.2 0.0 g 10 2 2 2 2 2 2 2 2 2 2 1 -1 -1 4 2 2 2 2 3 2 2 1.7 1.42 0.89 0.1 0.0 h 10 2 1 1 1 1 1 1 1 1 1 1 -2 0 1 1 1 1 0 0 1 0 0.0 0.10 -0.10 -0.4 0.0 g 10 3 -5 -5 -5 -5 -5 -5 -5 -5 -5 2 13 2 0 -5 -5 -5 -5 -5 -5 -4 -3.1 -2.35 -1.07 0.5 0.0 h 10 3 2 2 2 2 2 2 2 2 2 -20 -10 -8 0 2 3 3 3 3 3 4 4.0 4.46 4.71 4.6 0.0 g 10 4 -2 -2 -2 -2 -2 -2 -2 -2 -2 -5 -4 -3 -1 -2 -1 -2 -2 -2 -2 -1 -0.5 -0.15 -0.16 -0.5 0.0 h 10 4 6 6 6 6 6 6 6 6 6 -1 2 -2 2 6 4 4 6 6 6 5 4.9 4.76 4.44 4.4 0.0 g 10 5 6 6 6 6 6 6 6 6 6 -1 4 7 4 4 6 5 5 5 4 4 3.7 3.06 2.45 1.8 0.0 h 10 5 -4 -4 -4 -4 -4 -4 -4 -4 -4 -6 -3 -4 -5 -4 -4 -4 -4 -4 -4 -5 -5.9 -6.58 -7.22 -7.9 0.0 g 10 6 4 4 4 4 4 4 4 4 4 8 12 4 6 4 4 4 3 3 3 2 1.0 0.29 -0.33 -0.7 0.0 h 10 6 0 0 0 0 0 0 0 0 0 6 6 1 1 0 0 -1 0 0 0 -1 -1.2 -1.01 -0.96 -0.6 0.0 g 10 7 0 0 0 0 0 0 0 0 0 -1 3 -2 1 0 1 1 1 1 1 2 2.0 2.06 2.13 2.1 0.0 h 10 7 -2 -2 -2 -2 -2 -2 -2 -1 -1 -4 -3 -3 -1 -2 -1 -1 -1 -1 -2 -2 -2.9 -3.47 -3.95 -4.2 0.0 g 10 8 2 2 2 1 1 1 1 2 2 -3 2 6 -1 2 0 0 2 2 3 5 4.2 3.77 3.09 2.4 0.0 h 10 8 4 4 4 4 4 4 4 4 4 -2 6 7 6 3 3 3 4 4 3 1 0.2 -0.86 -1.99 -2.8 0.0 g 10 9 2 2 2 2 3 3 3 3 3 5 10 -2 2 2 3 3 3 3 3 1 0.3 -0.21 -1.03 -1.8 0.0 h 10 9 0 0 0 0 0 0 0 0 0 0 11 -1 0 0 1 1 0 0 -1 -2 -2.2 -2.31 -1.97 -1.2 0.0 g 10 10 0 0 0 0 0 0 0 0 0 -2 3 0 0 0 -1 -1 0 0 0 0 -1.1 -2.09 -2.80 -3.6 0.0 h 10 10 -6 -6 -6 -6 -6 -6 -6 -6 -6 -2 8 -3 -7 -6 -4 -5 -6 -6 -6 -7 -7.4 -7.93 -8.31 -8.7 0.0 g 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.7 2.95 3.05 3.1 0.0 g 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.7 -1.60 -1.48 -1.5 0.0 h 11 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.26 0.13 -0.1 0.0 g 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.88 -2.03 -2.3 0.0 h 11 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.44 1.67 2.0 0.0 g 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.5 1.44 1.65 2.0 0.0 h 11 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.77 -0.66 -0.7 0.0 g 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.31 -0.51 -0.8 0.0 h 11 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.27 -1.76 -1.1 0.0 g 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.29 0.54 0.6 0.0 h 11 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.90 0.85 0.8 0.0 g 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.79 -0.79 -0.7 0.0 h 11 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.7 -0.58 -0.39 -0.2 0.0 g 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.53 0.37 0.2 0.0 h 11 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.8 -2.69 -2.51 -2.2 0.0 g 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.7 1.80 1.79 1.7 0.0 h 11 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.08 -1.27 -1.4 0.0 g 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.16 0.12 -0.2 0.0 h 11 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.2 -1.58 -2.11 -2.5 0.0 g 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.2 0.96 0.75 0.4 0.0 h 11 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.9 -1.90 -1.94 -2.0 0.0 g 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.0 3.99 3.75 3.5 0.0 h 11 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -1.39 -1.86 -2.4 0.0 g 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.2 -2.15 -2.12 -1.9 0.0 g 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.29 -0.21 -0.2 0.0 h 12 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.55 -0.87 -1.1 0.0 g 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.21 0.30 0.4 0.0 h 12 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.23 0.27 0.4 0.0 g 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.89 1.04 1.2 0.0 h 12 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2.5 2.38 2.13 1.9 0.0 g 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.38 -0.63 -0.8 0.0 h 12 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2.6 -2.63 -2.49 -2.2 0.0 g 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.9 0.96 0.95 0.9 0.0 h 12 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.61 0.49 0.3 0.0 g 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.30 -0.11 0.1 0.0 h 12 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.40 0.59 0.7 0.0 g 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.46 0.52 0.5 0.0 h 12 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.01 0.00 -0.1 0.0 g 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.3 -0.35 -0.39 -0.3 0.0 h 12 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 0.02 0.13 0.3 0.0 g 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.36 -0.37 -0.4 0.0 h 12 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.28 0.27 0.2 0.0 g 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 0.08 0.21 0.2 0.0 h 12 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.87 -0.86 -0.9 0.0 g 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.49 -0.77 -0.9 0.0 h 12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.34 -0.23 -0.1 0.0 g 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.08 0.04 0.0 0.0 h 12 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.8 0.88 0.87 0.7 0.0 g 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.16 -0.09 0.0 0.0 g 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.88 -0.89 -0.9 0.0 h 13 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.76 -0.87 -0.9 0.0 g 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.30 0.31 0.4 0.0 h 13 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0.33 0.30 0.4 0.0 g 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0.28 0.42 0.5 0.0 h 13 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.8 1.72 1.66 1.6 0.0 g 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.43 -0.45 -0.5 0.0 h 13 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.54 -0.59 -0.5 0.0 g 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.3 1.18 1.08 1.0 0.0 h 13 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.0 -1.07 -1.14 -1.2 0.0 g 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.37 -0.31 -0.2 0.0 h 13 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.04 -0.07 -0.1 0.0 g 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.75 0.78 0.8 0.0 h 13 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.7 0.63 0.54 0.4 0.0 g 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4 -0.26 -0.18 -0.1 0.0 h 13 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.21 0.10 -0.1 0.0 g 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.35 0.38 0.3 0.0 h 13 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0.53 0.49 0.4 0.0 g 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.1 -0.05 0.02 0.1 0.0 h 13 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.38 0.44 0.5 0.0 g 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.4 0.41 0.42 0.5 0.0 h 13 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.2 -0.22 -0.25 -0.3 0.0 g 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0 -0.10 -0.26 -0.4 0.0 h 13 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.5 -0.57 -0.53 -0.4 0.0 g 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 -0.18 -0.26 -0.3 0.0 h 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.9 -0.82 -0.79 -0.8 0.0 therion-5.4.1/geomag/igrf2c.py000077500000000000000000000035541307545355600162050ustar00rootroot00000000000000#!/usr/bin/python3 # Martin Budaj 2014 import sys if len(sys.argv) == 1: print('usage: %s ' % sys.argv[0]) sys.exit(1) def get_values(d): return d[3:len(d)-1] def iround(d): if '.' in d: return d.rstrip('0').rstrip('.') else: return d data = dict() max_n = 0 with open(sys.argv[1]) as fin: for l in fin: if l.startswith(('#', 'c/s')): continue l = l.rstrip() ldata = l.split() if ldata[0] == 'g/h': assert(ldata[1] == 'n' and ldata[2] == 'm') years = get_values(ldata) elif ldata[0] in ('g', 'h'): n = int(ldata[1]) m = int(ldata[2]) data[ldata[0],n,m] = list(get_values(ldata)) data[ldata[0]+'_delta',n,m] = ldata[len(ldata)-1], max_n = max(max_n, n, m) else: raise ValueError('data line in unknown format!') with open('../thgeomagdata.h','w') as fout: fout.write('''// generated by geomag/igrf2c.py #ifndef thgeomagdata_h #define thgeomagdata_h ''') for gh in ('g', 'h', 'g_delta', 'h_delta'): if 'delta' in gh: isdelta = True suffix = 'D' yy = (0,) else: isdelta = False suffix = '[%d]' % len(years) yy = range(0,len(years)) fout.write('static const double thgeomag_%sNM%s[%d][%d] = {\n' % (gh[0].upper(),suffix,max_n+1,max_n+1)) for y in yy: if not isdelta: fout.write('{\n') for n in range(0,max_n+1): fout.write(' {') for m in range(0,max_n+1): fout.write('%s, ' % (iround(data[gh,n,m][y]) if (gh,n,m) in data else '0')) fout.write('},\n') if not isdelta: fout.write('},\n') fout.write('};\n') fout.write( '''#define thgeomag_maxmindex %d #define thgeomag_step %d #define thgeomag_minyear %d #define thgeomag_maxdeg %d #endif ''' % (len(years)-1, float(years[1])-float(years[0]), float(years[0]), max_n)) print('OK: ../thgeomagdata.h created') therion-5.4.1/geomag/test/000077500000000000000000000000001307545355600154245ustar00rootroot00000000000000therion-5.4.1/geomag/test/build.sh000077500000000000000000000002261307545355600170620ustar00rootroot00000000000000#!/bin/sh swig -python -c++ geomag.i g++ -shared -fPIC ../../thgeomag.cxx geomag_wrap.cxx -I /usr/include/python2.7 -o _geomag.so rm *wrap* ./test.py therion-5.4.1/geomag/test/geomag.i000066400000000000000000000001171307545355600170340ustar00rootroot00000000000000%module geomag %{ #include "../../thgeomag.h" %} %include "../../thgeomag.h" therion-5.4.1/geomag/test/sample_out_IGRF11.txt000066400000000000000000000053071307545355600213130ustar00rootroot00000000000000Date Coord-System Altitude Latitude Longitude D_deg D_min I_deg I_min H_nT X_nT Y_nT Z_nT F_nT dD_min dI_min dH_nT dX_nT dY_nT dZ_nT dF_nT 2014.5 D K100 70.3 30.8 13d 51m 78d 55m 9987.9 9697.4 2391.4 51022.3 51990.7 10.9 1.0 -10.4 -17.7 28.1 29.0 26.5 2013,10,7 D K100 70.3 30.8 13d 43m 78d 55m 9995.6 9710.4 2370.8 51001.0 51971.3 10.8 1.0 -10.5 -17.7 28.1 29.0 26.5 2012.5 C K6470 70.3 30.8 13d 35m 79d 4m 9814.3 9539.5 2306.2 50782.2 51721.9 11.0 1.1 -10.6 -17.7 28.0 28.7 26.2 2011.5 D M1042 70.3 30.8 14d 11m 78d 53m 10430.7 10112.6 2556.5 53095.2 54110.0 10.6 1.1 -11.1 -18.7 28.6 31.2 28.5 2010.5 D F30000 70.3 30.8 13d 56m 78d 52m 10407.4 10101.0 2506.6 52883.3 53897.6 10.6 1.1 -11.1 -18.6 28.5 31.0 28.3 2013.7 D F30000 -70.3 -30.8 0d -37m -60d 28m 19004.1 19003.0 -201.8 -33538.8 38548.7 -1.8 0.5 -34.1 -34.2 -9.8 70.7 -78.3 2013.7 D F30000 -70,18,0 -30,48,0 0d -37m -60d 28m 19004.1 19003.0 -201.8 -33538.8 38548.7 -1.8 0.5 -34.1 -34.2 -9.8 70.7 -78.3 2013.7 D F30000 43,22,1 -30,8, -11d 17m 59d 30m 23372.8 22921.2 -4572.1 39688.4 46059.3 10.5 -3.7 33.8 47.1 63.8 -40.1 -17.4 2013,4,7 D F30000 43,22,1 -54,36,9 -17d 52m 64d 15m 21481.2 20444.5 -6592.7 44546.1 49455.0 9.6 -5.8 42.2 58.6 44.6 -102.9 -74.3 2013,2,2 D K1.3 48.123 16.123 3d 33m 64d 25m 20929.8 20889.5 1297.7 43706.9 48459.7 7.4 0.3 9.0 6.2 45.3 27.2 28.4 2014,11,19 D K1.3 48.123 16.123 3d 46m 64d 25m 20946.0 20900.6 1378.9 43755.7 48510.8 7.3 0.2 9.2 6.2 45.3 27.2 28.5 2014.8849 D K1.3 48.123 16.123 3d 46m 64d 25m 20946.0 20900.6 1378.9 43755.7 48510.8 7.3 0.2 9.2 6.2 45.3 27.2 28.5 2013,4,7 D F0 43,22,1 -54,36,9 -17d 54m 64d 15m 21580.7 20536.2 -6632.4 44740.5 49673.3 9.7 -5.8 42.4 59.0 44.9 -103.3 -74.6 2010,1,1 D F30000 43,22,1 -54,36,9 -18d 24m 64d 34m 21344.7 20253.2 -6738.2 44881.7 49698.8 9.8 -5.7 41.6 58.6 44.6 -102.9 -74.9 2010,1,1 D F0 0.0 0.0 -6d 6m -29d 10m 27693.0 27535.9 -2945.7 -15457.8 31715.1 8.0 -8.1 -1.1 5.6 64.2 -85.4 40.7 2015,1,1 D F0 0.0 0.0 -5d 26m -29d 51m 27688.8 27564.1 -2624.8 -15884.7 31921.7 8.0 -8.0 -0.4 5.6 64.2 -85.4 42.2 therion-5.4.1/geomag/test/test.py000077500000000000000000000022461307545355600167640ustar00rootroot00000000000000#!/usr/bin/python import re,datetime,math,geomag units = {'K':1000, 'M':1, 'F':.3048} def deg2rad(s): m = re.match(r'(-?)(\d+)\,(\d+)\,(\d*)',s) if m: tmp = float(m.group(2))+float(m.group(3))/60+float('0'+m.group(4))/3600 if m.group(1) == '-': tmp = -tmp else: tmp = float(s) return tmp/180*math.pi for i,l in enumerate(open('sample_out_IGRF11.txt')): if i==0: continue print '% 2s ' % i, (dat, cs, alt, lat, lon, dd, dm) = l.split()[:7] if cs == 'C': print ' (skipping geocentric coordinates)' continue m = re.match(r'(\d{4}),(\d{1,2}),(\d{1,2})',dat) if m: dat = datetime.datetime(*(int(d) for d in m.groups())) dat = dat.year + (float(dat.timetuple().tm_yday-1) / datetime.datetime(dat.year,12,31).timetuple().tm_yday) else: dat = float(dat) alt = units[alt[0]] * float(alt[1:]) lat = deg2rad(lat) lon = deg2rad(lon) decl = geomag.thgeomag(lat,lon,alt,dat) if decl < 0: res = '-' else: res = '' decl = abs(decl) res += "%dd %dm" % (int(decl),round((decl-int(decl)) * 60)) correct = "%s %s" % (dd,dm) if res == correct: print ' ', else: print '! ', print "%s %s" % (res, correct) therion-5.4.1/lib/000077500000000000000000000000001307545355600137545ustar00rootroot00000000000000therion-5.4.1/lib/grades.th000066400000000000000000000154171307545355600155660ustar00rootroot00000000000000encoding utf-8 ############################################################################### # BRCA GRADES # see: http://bcra.org.uk/surveying/ # grade BCRA3 -title "BCRA grade 3" # 95.44% of readings are within 0.5m (2 S.D.) length 0.25 metres # 95.44% of readings are within 2.5 degrees (2 S.D.) bearing 1.25 degrees # 95.44% of readings are within 2.5 degrees (2 S.D.) gradient 1.25 degrees # 95.44% of positions are within 0.5m (2 S.D.) position 0.25 metres endgrade grade BCRA5 -title "BCRA grade 5" # 95.44% of readings are within 0.1m (2 S.D.) length 0.05 metres # 95.44% of readings are within 1 degree (2 S.D.) bearing 0.5 degrees # 95.44% of readings are within 1 degree (2 S.D.) gradient 0.5 degrees # 95.44% of positions are within 0.1m (2 S.D.) position 0.05 metres endgrade ############################################################################### # UIS Grades - International standard grades specification # from: http://www.uisic.uis-speleo.org/UISmappingGrades.pdf # Version 2 from 14 Sep 2012 (cosmetic update; UISv1 values still apply) # # Note: UIS standards says nothing about accuracy of the stations # positions, so it is probably good practice to include a # "sd position " definition in your centrelines. # # Grade -1: no map available # Only for database purposes: It means that the cave map has not been drawn yet. grade "UISv1_-1" -title "UISv1 ungraded survey without map" # Not applicable for therion data. # It is mainly here to support automated data exports from # databases which may export such a number. endgrade # Grade 0: ungraded # Only for database purposes. If a cave survey is ungraded, its quality cannot be # assessed. This is most usually true for historic or otherwise old maps. grade "UISv1_0" -title "UISv1 ungraded survey" # Nothing defined here. # Specifying such an grade may be useful to document that the survey was # not graded. As it is documented in the *.th-datafiles it may easily be # searched for. Use it as a kind of "todo" flag... endgrade # Grade 1: sketch from memory, not to scale grade "UISv1_1" -title "UISv1 survey grade 1" # nothing defined here. # Specifying such an grade may be useful to document that the survey was # just the result of a sketch and should be redone. endgrade # Grade 2: No instruments, from annotations/sketches/estimates # Map compiled from annotations, sketches and estimates made # in the cave. No instruments used. grade "UISv1_2" -title "UISv1 survey grade 2" # nothing defined here. # Specifying such an grade may be useful to document that the survey # was the result of sketches/annotations in the cave. endgrade # Grade 3: Rough magnetic/analogue survey # Directions measured by compass, distances measured by chord, # pace, or body dimensions. Significant slopes estimated. # # A Silva clinometer or comparable, relatively simple means without precise # readings qualify for grade 3. Mapping from head to head of the surveyors # qualifies only for grade 3. Topofil measurements qualify generally for # grade 3 or 4. grade "UISv1_3" -title "UISv1 survey grade 3" # 95.44% of readings are within 0.5m (2 S.D.) length 0.25 metres # 95.44% of readings are within 5.0 degrees (2 S.D.) bearing 2.50 degrees # 95.44% of readings are within 30.0 degrees (2 S.D.) # (estimating is allowed, no measurement needed - value guessed by me) gradient 15.0 degrees # UIS specifications say nothing about station position accuracy. # Add "sd position " to your centreline. endgrade # Grade 4: Magnetic survey # Compass and tape survey, using deliberately chosen and fixed # stations. Slopes measured by clinometer or horizontal and vertical # components of line. # # Topofil measurements may qualify for grade 4 if the survey shots are not too # long and care is given to correctly read all data. Laser rangefinder can be # used throughout grades 4 to 5. In order to attain grade 4, fixed and # re-findable survey stations must be made. They have not to be necessarily on # the walls; tripod-mounted points with a defined length above the floor are # also accepted grade "UISv1_4" -title "UISv1 survey grade 4" # 95.44% of readings are within 0.1m (2 S.D.) length 0.05 metres # 95.44% of readings are within 2.0 degrees (2 S.D.) bearing 1.00 degrees # 95.44% of readings are within 2.0 degrees (2 S.D.) gradient 1.00 degrees # UIS specifications say nothing about station position accuracy. # Add "sd position " to your centreline. endgrade # Grade 5: # Compass and tape survey. Directions and slope by calibrated # instruments, distances by fibreglass or metallic tape, or tachometry. # # Calibrated DistoX, DUSI or comparable instruments attain grade 5. With a # calibration of the length measurement, they attain grade 6. If they are # uncalibrated, they are to be graded with 1! Topofil used for vertical pits # may reach grade 5. In order to reach grade 5, the survey coordinates have to # be calculated (xyz coordinates, no polar coordinates plotted with scale rule # and protractor). grade "UISv1_5" -title "UISv1 survey grade 5" # 95.44% of readings are within 0.05m (2 S.D.) length 0.025 metres # 95.44% of readings are within 1.0 degrees (2 S.D.) bearing 0.5 degrees # 95.44% of readings are within 1.0 degrees (2 S.D.) gradient 0.5 degrees # UIS specifications say nothing about station position accuracy. # Add "sd position " to your centreline. endgrade # Grade 6: # Survey or triangulation using calibrated, tripod-mounted instruments # for directions and slope. Distances by calibrated tape, precise # tacheometry, or calibrated DistoX type (angles and length). grade "UISv1_6" -title "UISv1 survey grade 6" # 95.44% of readings are within 0.02m (2 S.D.) length 0.01 metres # 95.44% of readings are within 0.25 degrees (2 S.D.) bearing 0.125 degrees # 95.44% of readings are within 0.25 degrees (2 S.D.) gradient 0.125 degrees # UIS specifications say nothing about station position accuracy. # Add "sd position " to your centreline. endgrade # Grade X: Survey by theodolite or comparable means # Theodolite models or other similar equipment may vary as well as the measuring # techniques. Therefore, all grade X surveys must include, in the written # description of the cave, descriptions of the instruments and techniques used # as well as an estimate of the probable accuracy of the survey. grade "UISv1_X" -title "UISv1 survey grade X" # Details must be laid out at the survey. # custom "sd ... " have to be specified for your centrelines! # # That said, a construction site theodolite is about 0.08 gon # and a engineering theodolite about 0.02 gon. # Example: "sd bearing gradient 0.08 grad" # theodolite endgrade # therion-5.4.1/lib/layouts.thcfg000066400000000000000000000010141307545355600164650ustar00rootroot00000000000000layout SCR200 -title "Computer screen layout" scale 1 200 grid-size 10 10 10 m page-setup 27 20.25 26 19.25 0.5 0.5 cm overlap 1 cm size 24 13.99 cm origin-label 100 100 nav-size 2 2 nav-factor 25 symbol-set SKBB endlayout layout AUT -title "Austrian symbol set" symbol-set AUT symbol-color group water [18 19 57] symbol-color group speleothems [87 39 23] symbol-color group sediments [50 42 39] symbol-color group centerline [95 0 0] symbol-color group ice [0 68 94] endlayout therion-5.4.1/lib/therion.th000066400000000000000000000000461307545355600157610ustar00rootroot00000000000000# input survey grades input grades.th therion-5.4.1/loch/000077500000000000000000000000001307545355600141335ustar00rootroot00000000000000therion-5.4.1/loch/Makefile000066400000000000000000000216531307545355600156020ustar00rootroot00000000000000OUTDIR ?= . THPLATFORM ?= LINUX ifneq ($(OUTDIR),.) LOUTDIR = $(OUTDIR)/loch else LOUTDIR = . endif # common therion objects CMNOBJECTS = \ lxTR.o lxOGLFT.o lxSetup.o lxRender.o lxWX.o \ lxImgIO.o lxLRUD.o lxFile.o lxSTree.o \ lxData.o lxMath.o lxSView.o lxSScene.o \ lxGUI.o lxGLC.o lxOptDlg.o lxAboutDlg.o lxPres.o \ img.o CROSS = EXT = VTKVERSION = $(shell tclsh ./getvtkver.tcl version) VTKPATH = $(shell tclsh ./getvtkver.tcl incpath) VTKLIBPATH = $(shell tclsh ./getvtkver.tcl libpath) VTKV6 = $(shell tclsh ./getvtkver.tcl version6) ifeq ($(VTKV6),1) VTKLIBS = -lvtkCommonExecutionModel-$(VTKVERSION) -lvtkCommonDataModel-$(VTKVERSION) -lvtkCommonCore-$(VTKVERSION) -lvtkFiltersCore-$(VTKVERSION) -lvtkFiltersHybrid-$(VTKVERSION) -lvtkIOLegacy-$(VTKVERSION) -lfreetype -lpng -ljpeg else VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtkjpeg -lvtkpng -lvtkzlib -lvtksys -lfreetype endif # VTKVERSION = 5.4 # VTKPATH = /usr/local/include/vtk-$(VTKVERSION) # VTKLIBPATH = /usr/local/lib/vtk-$(VTKVERSION) POSTMAKE = STRIPFLAG = -s # PLATFORM CONFIG # PLATFORM LINUX ##CXX = c++ ##CC = gcc ##POBJECTS = lxR2P.o ##ifeq ($(VTKV6),1) ##VTKLIBS = -lvtkCommonExecutionModel-$(VTKVERSION) -lvtkCommonDataModel-$(VTKVERSION) -lvtkCommonCore-$(VTKVERSION) -lvtkFiltersCore-$(VTKVERSION) -lvtkFiltersHybrid-$(VTKVERSION) -lvtkIOLegacy-$(VTKVERSION) -lfreetype -lpng -ljpeg ##else ##VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lfreetype ##endif ##CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) -Wno-deprecated $(shell freetype-config --cflags) -I$(VTKPATH) ##CCPFLAGS = -DLXLINUX $(shell wx-config --cflags) ##LXLIBDIR = linux ##PLIBS = $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) -lGLU -lGL -lpthread -lX11 -lz ##LXPLATFORM = LINUX # PLATFORM DEBIAN CXX = c++ CC = gcc POBJECTS = lxR2P.o ifeq ($(VTKV6),1) VTKLIBS = -lvtkCommonExecutionModel-$(VTKVERSION) -lvtkCommonDataModel-$(VTKVERSION) -lvtkCommonCore-$(VTKVERSION) -lvtkFiltersCore-$(VTKVERSION) -lvtkFiltersHybrid-$(VTKVERSION) -lvtkIOLegacy-$(VTKVERSION) -lfreetype -lpng -ljpeg else VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lfreetype endif CXXPFLAGS = -DLXLINUX $(shell wx-config --cxxflags) -Wno-deprecated $(shell freetype-config --cflags) -I$(VTKPATH) CCPFLAGS = -DLXLINUX $(shell wx-config --cflags) LXLIBDIR = linux PLIBS = $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) -lGLU -lGL -lpthread -lX11 -lz LXPLATFORM = LINUX # PLATFORM WIN32 ##CXX = c++ ##CC = gcc ##POBJECTS = loch.res lxR2D.o getline.o ##CXXPFLAGS = -W -Wall -DLXWIN32 $(shell wx-config --static --cxxflags) $(shell freetype-config --cflags) -I$(VTKPATH) -Wno-deprecated ##CCPFLAGS = -W -Wall -DLXWIN32 $(shell wx-config --static --cflags) ##LXLIBDIR = mingw ##PLIBS = $(shell freetype-config --libs) $(shell wx-config --static --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) ##LXPLATFORM = WIN32 ##STRIPFLAG = -static-libgcc -static -s # PLATFORM WIN32CROSS ##CROSS= i686-w64-mingw32.static- ##EXT = .exe ##VTKPATH = /usr/lib/mxe/usr/i686-w64-mingw32.static/include/vtk-5.8 ##VTKLIBPATH = /usr/lib/mxe/usr/i686-w64-mingw32.static/lib/vtk-5.8 ##VTKLIBS = -lvtkHybrid -lvtkImaging -lvtkIO -lvtkGraphics -lvtkFiltering -lvtkCommon -lvtksys -lharfbuzz -lbz2 -lglib-2.0 -lintl -liconv -lws2_32 -lwinmm ##CXX = $(CROSS)c++ ##CC = $(CROSS)gcc ##POBJECTS = loch.res lxR2D.o getline.o ##CXXPFLAGS = -W -Wall -std=gnu++11 -DLXWIN32 $(shell $(CROSS)wx-config --static --cxxflags) $(shell $(CROSS)freetype-config --cflags) -I$(VTKPATH) -Wno-deprecated ##CCPFLAGS = -W -Wall -DLXWIN32 $(shell $(CROSS)wx-config --static --cflags) ##LXLIBDIR = ##PLIBS = $(shell $(CROSS)freetype-config --libs) $(shell $(CROSS)wx-config --static --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) ##LXPLATFORM = WIN32 ##STRIPFLAG = -static-libgcc -static -s # PLATFORM MACOSX ##CXX = c++ ##CC = cc ##POBJECTS = ##CXXPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cxxflags) $(shell freetype-config --cflags) -I$(VTKPATH) -Wno-deprecated -I/usr/X11R6/include -I/usr/X11R6/include/freetype2 ##CCPFLAGS = -W -Wall -DLXMACOSX $(shell wx-config --cflags) -I/usr/X11R6/include ##LXLIBDIR = ##PLIBS = -lz -L/usr/X11R6/lib $(shell wx-config --libs --gl-libs) -L$(VTKLIBPATH) $(VTKLIBS) ##POSTMAKE = cp -f ./loch ./loch.app/Contents/MacOS ##STRIPFLAG = # PLATFORM ENDCONFIG # BUILD CONFIG # BUILD OZONE ##CCBFLAGS = -O3 ##CXXBFLAGS = -O3 ##LDBFLAGS = $(STRIPFLAG) # BUILD OXYGEN CCBFLAGS = -O2 CXXBFLAGS = -O2 LDBFLAGS = $(STRIPFLAG) # BUILD RELEASE ##CCBFLAGS = ##CXXBFLAGS = ##LDBFLAGS = $(STRIPFLAG) # BUILD DEBUG ##CCBFLAGS = -ggdb ##CXXBFLAGS = -ggdb -DLXDEBUG ##LDBFLAGS = # BUILD ENDCONFIG # compiler settings CXXFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CXXPFLAGS) $(CXXBFLAGS) CCFLAGS = -Wall -D_GNU_SOURCE -DLOCH $(CCPFLAGS) $(CCBFLAGS) OBJECTS = $(addprefix $(LOUTDIR)/,$(POBJECTS)) $(addprefix $(LOUTDIR)/,$(CMNOBJECTS)) # linker settings LIBS = $(PLIBS) LDFLAGS = $(LDBFLAGS) $(LOUTDIR)/%.o : %.cxx $(CXX) -c $(CXXFLAGS) -o $@ $< $(LOUTDIR)/%.o : %.cc $(CXX) -c $(CXXFLAGS) -o $@ $< $(LOUTDIR)/%.o : %.c $(CC) -c $(CCFLAGS) -o $@ $< all: $(LOUTDIR)/loch hlp hlp: $(MAKE) -C ./help $(LOUTDIR)/loch: $(OBJECTS) $(CXX) -o $(LOUTDIR)/loch$(EXT) -Wall $(OBJECTS) $(LIBS) $(LDFLAGS) $(POSTMAKE) $(LOUTDIR)/loch.res: loch.rc loch.ico $(CROSS)windres -i loch.rc $(shell $(CROSS)wx-config --cflags | tr ' ' '\n' | grep "^-I" | tr '\n' ' ') -J rc -o $(LOUTDIR)/loch.res -O coff graphs: dot -Tps graph-vispipe.dot -o graph-vispipe.ps depend: perl makedepend.pl > Makefile.dep perl maketest.pl Makefile.dep perl makefile.pl mv Makefile.dep Makefile $(CXX) -DLXDEPCHECK -DLOCH -D'wxCHECK_VERSION(X,Y,Z)=1' -MM *.cxx >> Makefile $(CC) -DLXDEPCHECK -DLOCH -MM *.c >> Makefile perl makedepend2.pl config-debug: perl makeconfig.pl BUILD DEBUG test-release: zip -9 loch.zip loch.exe test.th test.jpg thconfig config-release: perl makeconfig.pl BUILD RELEASE config-oxygen: perl makeconfig.pl BUILD OXYGEN config-ozone: perl makeconfig.pl BUILD OZONE config-linux: perl makeconfig.pl PLATFORM LINUX config-debian: perl makeconfig.pl PLATFORM DEBIAN config-win32: perl makeconfig.pl PLATFORM WIN32 config-win32cross: perl makeconfig.pl PLATFORM WIN32CROSS config-macosx: perl makeconfig.pl PLATFORM MACOSX clean: perl makefile.pl rm -q *~ perl makefile.pl rm -q help/*/*~ perl makefile.pl rm -q loch.exe perl makefile.pl rm -q loch perl makefile.pl rm -q loch.app/Contents/MacOS/loch perl makefile.pl rm -q *.o perl makefile.pl rm -q *.log perl makefile.pl rm -q core perl makefile.pl rmdir -q .xvpics perl makefile.pl rm -q *.bmp perl makefile.pl rm -q *.ppm perl makefile.pl rm -q *.zip perl makefile.pl rm -q *.pdf perl makefile.pl rm -q *.png # DEPENDENCIES $(LOUTDIR)/lxAboutDlg.o: lxAboutDlg.cxx lxWX.h icons/about.xpm ../thversion.h $(LOUTDIR)/lxData.o: lxData.cxx lxData.h lxMath.h lxImgIO.h lxFile.h lxLRUD.h $(LOUTDIR)/lxFile.o: lxFile.cxx lxFile.h lxMath.h img.h ../extern/img.h $(LOUTDIR)/lxGLC.o: lxGLC.cxx lxGLC.h lxMath.h lxGUI.h lxData.h lxImgIO.h lxFile.h \ lxSetup.h lxSView.h lxWX.h lxFNT6x13_bdf.h lxFNT10x20_bdf.h \ lxFNTFreeSans_ttf.h lxRender.h lxTR.h $(LOUTDIR)/lxGUI.o: lxGUI.cxx lxGUI.h lxGLC.h lxMath.h lxData.h lxImgIO.h lxFile.h \ lxSetup.h lxRender.h lxOptDlg.h lxAboutDlg.h lxSView.h lxWX.h lxSScene.h \ lxSTree.h lxPres.h icons/open.xpm icons/render.xpm icons/reload.xpm \ icons/stereo.xpm icons/rotation.xpm icons/lockrot.xpm icons/fit.xpm \ icons/home.xpm icons/rendersetup.xpm icons/plan.xpm icons/profile.xpm \ icons/fullscreen.xpm icons/orto.xpm icons/camera.xpm icons/scene.xpm \ icons/viscline.xpm icons/vissurface.xpm icons/visbbox.xpm \ icons/viswalls.xpm icons/visinds.xpm icons/visentrance.xpm \ icons/visfix.xpm icons/visstation.xpm icons/vislabel.xpm loch.xpm $(LOUTDIR)/lxImgIO.o: lxImgIO.cxx lxImgIO.h $(LOUTDIR)/lxLRUD.o: lxLRUD.cxx lxLRUD.h lxMath.h $(LOUTDIR)/lxMath.o: lxMath.cxx lxMath.h $(LOUTDIR)/lxOGLFT.o: lxOGLFT.cxx lxOGLFT.h $(LOUTDIR)/lxOptDlg.o: lxOptDlg.cxx lxWX.h lxGUI.h lxGLC.h lxMath.h $(LOUTDIR)/lxPres.o: lxPres.cxx lxPres.h lxWX.h lxGUI.h lxGLC.h lxMath.h lxSetup.h \ lxData.h lxImgIO.h lxFile.h loch.xpm $(LOUTDIR)/lxRender.o: lxRender.cxx lxRender.h lxWX.h lxGLC.h lxMath.h lxGUI.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h lxTR.h $(LOUTDIR)/lxSScene.o: lxSScene.cxx lxSScene.h lxWX.h lxGUI.h lxGLC.h lxMath.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm $(LOUTDIR)/lxSTree.o: lxSTree.cxx lxSTree.h lxWX.h lxGUI.h lxGLC.h lxMath.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm $(LOUTDIR)/lxSView.o: lxSView.cxx lxSView.h lxWX.h lxGUI.h lxGLC.h lxMath.h \ lxSetup.h lxData.h lxImgIO.h lxFile.h loch.xpm $(LOUTDIR)/lxSetup.o: lxSetup.cxx lxSetup.h lxData.h lxMath.h lxImgIO.h lxFile.h $(LOUTDIR)/lxWX.o: lxWX.cxx lxWX.h $(LOUTDIR)/getline.o: getline.c $(LOUTDIR)/img.o: img.c ../extern/img.c ../extern/img.h $(LOUTDIR)/lxR2D.o: lxR2D.c lxR2D.h $(LOUTDIR)/lxR2P.o: lxR2P.c lxR2P.h $(LOUTDIR)/lxTR.o: lxTR.c lxTR.h therion-5.4.1/loch/README000066400000000000000000000004771307545355600150230ustar00rootroot00000000000000To compile loch, you will need following packages: freetype (version 2 and above, freetype-config must work) wxWidgets (version 2.6 and above, wx-config must work) VTK (version 5.0 and above installed at /usr/local or modify VTKPATH and VTKLIBPATH in Makefile) Then following should work: make config-linux make therion-5.4.1/loch/TODO000066400000000000000000000017011307545355600146220ustar00rootroot00000000000000TODO: + stations signs + labels + label entrances and fixed stations + multiple color modes + measure toolbox + survey tree + animation toolbox + multiple surfaces support + finish SK translation + fix Mac OS X built + search for help and localization files under Linux + scalebar to OpenGL list + channel brightness adjustment in stereo mode + station labeling + PNG texture support + color schemes (altitude, surveys, date) + add closed file mode + File->Close + escape in full-screen mode from toolboxes BUGS: + inactive loading file window + radiobutton not active when rotation MAC OS X: a) Udelat z ni bundlovanou aplikaci b) Dodat Info.plist, do kteryho se napisi typy souboru, ktery to ma zrat pretazenim, jaky maji mit obrazek (asi mysli ikonu), koncovku, file type, atd. c) Doprogramovat podporu pro tohle aby pri pretazeni se event zkonvertoval na udalost pro otevreni souboru aniz by te to otravovalo s oknem pro jeho vyber. therion-5.4.1/loch/getline.c000066400000000000000000000072041307545355600157310ustar00rootroot00000000000000/* getline.c -- Replacement for GNU C library function getline Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Jan Brittenson, bson@gnu.ai.mit.edu. */ #if HAVE_CONFIG_H # include #endif /* The `getdelim' function is only declared if the following symbol is defined. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include #include #if defined __GNU_LIBRARY__ && HAVE_GETDELIM int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getdelim (lineptr, n, '\n', stream); } #else /* ! have getdelim */ # define NDEBUG # include # if STDC_HEADERS # include # else char *malloc (), *realloc (); # endif /* Always add at least this many bytes when extending the buffer. */ # define MIN_CHUNK 64 /* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'd as necessary. Return the number of characters read (not including the null terminator), or -1 on error or EOF. */ int getstr (lineptr, n, stream, terminator, offset) char **lineptr; size_t *n; FILE *stream; char terminator; size_t offset; { int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ char *read_pos; /* Where we're reading into *LINEPTR. */ int ret; if (!lineptr || !n || !stream) return -1; if (!*lineptr) { *n = MIN_CHUNK; *lineptr = malloc (*n); if (!*lineptr) return -1; } nchars_avail = *n - offset; read_pos = *lineptr + offset; for (;;) { register int c = getc (stream); /* We always want at least one char left in the buffer, since we always (unless we get an error while reading the first char) NUL-terminate the line buffer. */ assert(*n - nchars_avail == read_pos - *lineptr); if (nchars_avail < 2) { if (*n > MIN_CHUNK) *n *= 2; else *n += MIN_CHUNK; nchars_avail = *n + *lineptr - read_pos; *lineptr = realloc (*lineptr, *n); if (!*lineptr) return -1; read_pos = *n - nchars_avail + *lineptr; assert(*n - nchars_avail == read_pos - *lineptr); } if (c == EOF || ferror (stream)) { /* Return partial line, if any. */ if (read_pos == *lineptr) return -1; else break; } *read_pos++ = c; nchars_avail--; if (c == terminator) /* Return the line. */ break; } /* Done - NUL terminate and return the number of chars read. */ *read_pos = '\0'; ret = read_pos - (*lineptr + offset); return ret; } int getline (lineptr, n, stream) char **lineptr; size_t *n; FILE *stream; { return getstr (lineptr, n, stream, '\n', 0); } int getdelim (lineptr, n, delimiter, stream) char **lineptr; size_t *n; int delimiter; FILE *stream; { return getstr (lineptr, n, stream, delimiter, 0); } #endif therion-5.4.1/loch/getline.h000066400000000000000000000017771307545355600157470ustar00rootroot00000000000000/* Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GETLINE_H_ # define GETLINE_H_ 1 #ifdef __cplusplus extern "C" { #endif # include int getline (char **_lineptr, size_t *_n, FILE *_stream); int getdelim (char **_lineptr, size_t *_n, int _delimiter, FILE *_stream); #ifdef __cplusplus } #endif #endif /* not GETLINE_H_ */ therion-5.4.1/loch/getvtkver.tcl000066400000000000000000000012161307545355600166600ustar00rootroot00000000000000set ver 5.4 set incpath "/usr/local/include/vtk-$ver" set libpath "/usr/local/lib/vtk-$ver" set vv1 0 set vv2 0 foreach d {/usr /usr/local} { set ll [glob -nocomplain -directory "$d/include" -types d vtk*] foreach l $ll { if {[regexp {vtk-(\d+)\.(\d+)$} $l dum v1 v2]} { if {($v1 >= $vv1) && ($v2 >= $vv2)} { set vv1 $v1 set vv2 $v2 set ver $vv1.$vv2 set incpath "$d/include/vtk-$vv1.$vv2" set libpath "$d/lib/vtk-$vv1.$vv2" } } } } switch [lindex $argv 0] { incpath { puts $incpath } libpath { puts $libpath } version6 { puts [expr $vv1 >= 6] } default { puts $ver } } exit therion-5.4.1/loch/help/000077500000000000000000000000001307545355600150635ustar00rootroot00000000000000therion-5.4.1/loch/help/Makefile000066400000000000000000000000551307545355600165230ustar00rootroot00000000000000all: $(MAKE) -i -C ./en $(MAKE) -i -C ./sk therion-5.4.1/loch/help/en/000077500000000000000000000000001307545355600154655ustar00rootroot00000000000000therion-5.4.1/loch/help/en/Makefile000066400000000000000000000002661307545355600171310ustar00rootroot00000000000000all: loch.htb loch.chm loch.chm: loch.hhp loch.hhc loch.hhk loch.htm hhc loch.hhp loch.htb: loch.hhp loch.hhc loch.hhk loch.htm zip loch.htb loch.hhp loch.hhc loch.hhk loch.htm therion-5.4.1/loch/help/en/loch.hhc000066400000000000000000000014451307545355600171020ustar00rootroot00000000000000
therion-5.4.1/loch/help/en/loch.hhk000066400000000000000000000013151307545355600171060ustar00rootroot00000000000000
therion-5.4.1/loch/help/en/loch.hhp000066400000000000000000000004271307545355600171160ustar00rootroot00000000000000[OPTIONS] Auto Index=Yes Compatibility=1.1 or later Compiled file=loch.chm Contents file=loch.hhc Default topic=loch.htm Display compile progress=Yes Full-text search=Yes Index file=loch.hhk Language=0x409 English (United States) Title=Loch Help [FILES] loch.htm [INFOTYPES] therion-5.4.1/loch/help/en/loch.htb000066400000000000000000000054341307545355600171170ustar00rootroot00000000000000PK<5 )3loch.hhpSD,qM=cd`ia``P`@FFUT ERFhFUj0{ۡ!,<&&tP%rt8 ]ڪ?m;T(eʭX-V#2g^6CNIѰYP|GH)ˑEhL63_VUOrZ/_qzӇ3Vr)ʪ}eӞw PK}<5I3,%3loch.hhcSD,qM=cd`ia``P`@FFUT ERFhFR]o0}~ag@,(,>62Mw %<ۏs9m7 VlvQKHDْ !to=;.B,0j^D7t`΁TFf欋TF;-Na%JR4T0Z֑KaDL'ຸIZO ̷B1# iJhSyn<5Ng!ށO^qg)7 pm_ d/78Aw/,)/{\)|e9T||e:lWǵl?s Ga۸PK<5@X 3loch.hhkSD,qM=cd`ia``P`@FFUT ERFhFO0Wu7K-P]̎ V %3[Q/}KEtcG?@.e,_0 \iWoB(Tbk]E?X'w ]4Yq<4 8rJUCyErT)h?k6v +]z 'p]F_[H48` xYj2Z)ciU̍HbI v"J:O?_tJ̚>"5kaFUI 5>`$IɝYX"RmAAƹG.Ϣ;&f҅&a2wj]pR[yC9 o93tG'`e(&ӬM5<|̠?ӿ%^/[ƤtQPY }uR>yrPK <5 ) loch.hhpSD,UTEPK }<5I3,% &loch.hhcSD,UTEPK <5@X  loch.hhkSD,UTEPK WG6J loch.htmSD,UT&ѕFPK therion-5.4.1/loch/help/en/loch.htm000066400000000000000000000076111307545355600171310ustar00rootroot00000000000000 Loch Help

Loch Help

Table of contents


Basic control

Function Mouse action Key

Zoom & Rotate Left click + drag
Zoom only Left click + drag up/down,
then hold left and click right
Ctrl + Up/Down
Rotate only Left click + drag left/right,
then hold left and click right
Left/Right
Pan Right click + drag Shift + Arrows
Tilt Middle (wheel) click + drag
or wheel rotate
Up/Down

Full screen Left double click F11
Context menu Right click

If continuous rotation is turned on, then rotation mouse movements change the speed or direction of rotation. If rotation is locked, then rotation mouse movements have no effect.


Off screen rendering

Loch is able to render large bitmaps that can be afterwards post processed and printed. Bitmaps can be exported in PDF, PNG or BMP formats. Configuration of export is dove via Rendering setup dialog. You can set following features:

Size and scaling

Screen shotScreen copy will be saved into file with no other changes.
Image widthContents of the screen will have given with.
Image heightContents of the screen will have given height.
ScaleContents of the screen will be exported in given scale.

Image options

Rendering resolutionResolution of the image file used when image size or scale are specified.
Image sizeImage size in pixels and uncompressed bytes calculated from previous settings.
White backgroundForce white background in exported image.

 

Known bugs

  • Sometimes empty rectangles appear in off screen rendered file. Changing window size usually helps.

Windows specific

  • Texture gets strange color pattern. Reloading model seems to help.
  • Passage coloring gets random. Restarting the program/computer helps.

Linux specific

  • Stereo mode does not work correctly on some graphic adapters.
  • This help does not work.

therion-5.4.1/loch/help/sk/000077500000000000000000000000001307545355600155005ustar00rootroot00000000000000therion-5.4.1/loch/help/sk/Makefile000066400000000000000000000002661307545355600171440ustar00rootroot00000000000000all: loch.htb loch.chm loch.chm: loch.hhp loch.hhc loch.hhk loch.htm hhc loch.hhp loch.htb: loch.hhp loch.hhc loch.hhk loch.htm zip loch.htb loch.hhp loch.hhc loch.hhk loch.htm therion-5.4.1/loch/help/sk/loch.hhc000066400000000000000000000016071307545355600171150ustar00rootroot00000000000000
therion-5.4.1/loch/help/sk/loch.hhk000066400000000000000000000013531307545355600171230ustar00rootroot00000000000000
therion-5.4.1/loch/help/sk/loch.hhp000066400000000000000000000004271307545355600171310ustar00rootroot00000000000000[OPTIONS] Auto Index=Yes Compatibility=1.1 or later Compiled file=loch.chm Contents file=loch.hhc Default topic=loch.htm Display compile progress=Yes Full-text search=Yes Index file=loch.hhk Language=0x409 English (United States) Title=Loch Help [FILES] loch.htm [INFOTYPES] therion-5.4.1/loch/help/sk/loch.htb000066400000000000000000000061311307545355600171250ustar00rootroot00000000000000PK<5 )3loch.hhpSD,qM=cd`ia``P`@FFUT ERFiFUj0{ۡ!,<&&tP%rt8 ]ڪ?m;T(eʭX-V#2g^6CNIѰYP|GH)ˑEhL63_VUOrZ/_qzӇ3Vr)ʪ}eӞw PKH6tw3loch.hhcSD,qM=cd`ia``P`@FFUT 0ӕFRFiFN@ϚCMă hLK ޖv nn<.G^-Ae:Ԫ^ϟO#&;a2t>!o'8c}ui%&23ԀS2Fq xΗFY u L|-MU f(MH& ADEUȥy!5ӄXbB3ho4)ѲV׳jupy cPVFM6L + eEy,D 3W6Q4q9"/A.(;F1D-[3{ i. 44|d 䐿/(NR(tuJwn'Ӎ*!c?ѝZm}PKH6l9=73loch.hhkSD,qM=cd`ia``P`@FFUT <ӕFRFiFn0g*T\n5H$q U Uts71<.#ЩqOwӇAǛ%i<a™Ќq Dۤd( `#,jG+R% fTZ}{NdxJoBU8 oaV0<*juv1{%~ P5چ}Twv]+8-ׁ=&4*FQ'wL@1d]WgZ1i0)wcqK_X(TZ%$yQZ;5PKI6H3loch.htmSD,qM=cd`ia``P`@FFUT ӕFRFiFXnF>@aA"\ YRmDGqܖڢ%k r;Tr)={<}r)Au.;7[wγno[gu 7٫5T0;v6±G%:=r% h zYT#W0RɣksAA48e~|uwoVgMYL3$sQ F. /VHo{g M>t7k+gt2b'1K'6jJRoSǵ `s Vt"?x-~4JLdoһb܄nGG/3ue?fׁ!eM@hfE-m6MHw!B{pVw4IN,m: ^ m{=xNpNgڬL^#&< xw,c06gtZ DbvEf .s\?Gӫ#ْmY.x`AF:#?qơy|'(_EYoFΑ?MxRЬ"r?௅0j5 CW9*En혟(vj^z%VݍGx]8Qb4^lpBaL?B^0 4.N |k %xl#𨟞H/#CtͭУb!;OJ\V繙$fz Xoh)9(ڊJ}r?:8ҿfWD mD@!NBA,=M?\`DϮTb2VZ _mEٙ}\A;+%4B*(.~_svp:KzIk9Ǒ>2" 0rظeCX#FX#\ mP*}hm7󕤈o6I|#_4z8+W< X"C9)U,AدρCVW$3hݰ]Ȧ12F~w3EIJ*Jق) +Dg 87t9nƬ +-S>L/g8δ< ݜ|_iz'@(/EsyqP23VDyKʔˆK&I^)+ҵI80_$ LTjE*L:+Wx4ENzp"4qLNҋ)oo?B4TMS^`yoR;YdBzD:xaDGv0y3 بܦKpđ1VV0J8ԯ`K9<>ǂxRg~]M9~tZ:>=PRA9v]4cY4E`61~PK <5 ) loch.hhpSD,UTEPK H6tw &loch.hhcSD,UT0ӕFPK H6l9=7 loch.hhkSD,UT<ӕFPK I6H loch.htmSD,UTӕFPK' therion-5.4.1/loch/help/sk/loch.htm000066400000000000000000000121201307545355600171330ustar00rootroot00000000000000 Loch

Loch

Obsah


Základné ovládanie

Funkcia Ovládanie Klávesa

Zoom & otáčanie Ľavé tlačítko + posun
Iba zoom Ľavé tlačítko + posun hore/dole,
potom držať pravé a kliknúť ľavé tlačítko
Ctrl + Hore/Dolu
Iba otáčanie Ľavé tlačítko + posun vľavo/vpravo,
potom držať ľavé a kliknúť pravé tlačítko
Vľavo/Vpravo
Posun Pravé tlačítko + posun Shift + Šípky
Sklon Stredné tlačítko (koliesko) + posun
alebo otáčanie kolieska
Hore/Dole

Celá obrazovka Dvojklik ľavým tlačítkom F11
Menu Pravé tlačítko

Ak je zapnutá automatická rotácia, tak pohyb myšou mení rýchlosť alebo smer rotácie. Ak rotácia je zamknutá, tak pohyb myšou na ňu nemá vplyv.


Rendrovanie do súboru

Loch môže rendrovať obrázky vo vysokom rozlíšení, ktoré je možné následne spracovať a vytlačiť. Obrázky môžu byť exportované v PDF, PNG alebo BMP formáte. Konfigurácia exportu sa robí prostredníctvom dialógového okna Nastavenie rendrovania. Môžete v ňom nastaviť nasledovné:

Veľkosť a mierka

Kópia obrazovky Do súboru bude uložená presná kópia obrazovky.
Šírka obrázku Obsah obrazovky bude mať špecifikovanú šírku.
Výška obrázku Obsah obrazovky bude mať špecifikovanú výšku.
Mierka Obsah obrazovky bude exportovaný v danej mierke.

Nastavenia obrázku

Rozlíšenie Rozlíšenie obrázku pokiaľ sú špecifikované jeho rozmery alebo presná mierka.
Veľkosť obrázku Vypočítaná veľkosť obrázku v bodoch a nekomprimovaných bajtoch podľa predchádzajúcich nastavení.
Biele pozadie Biele pozadie v exportovanom obrázku - používa sa pri tlači.

 

Známe problémy

  • V exportovanom obrázku sa občas zobrazí prázdny štvoruholník. Zmena veľkosti okna tento problém obyčajne vyrieši.

Špecifické pre Windows

  • Textúry majú niekedy čudnú farebnú vzorku, pomôže súbor znovu načítať.
  • Farby chodieb sú náhodné. Treba reštartovať program alebo počítač.

Špecifické pre Linux

  • Občas nefunguje stereo mód.

therion-5.4.1/loch/icons/000077500000000000000000000000001307545355600152465ustar00rootroot00000000000000therion-5.4.1/loch/icons/about.xpm000066400000000000000000003157151307545355600171220ustar00rootroot00000000000000/* XPM */ static const char * about_xpm[] = { "224 224 257 2", " c None", ". c #000000", "+ c #010101", "@ c #020202", "# c #030303", "$ c #040404", "% c #050505", "& c #060606", "* c #070707", "= c #090909", "- c #0A0A0A", "; c #080808", "> c #151515", ", c #131313", "' c #0C0C0C", ") c #141414", "! c #181818", "~ c #0D0D0D", "{ c #0B0B0B", "] c #0E0E0E", "^ c #0F0F0F", "/ c #111111", "( c #101010", "_ c #121212", ": c #161616", "< c #171717", "[ c #191919", "} c #1A1A1A", "| c #222222", "1 c #1F1F1F", "2 c #232323", "3 c #1D1D1D", "4 c #2A2A2A", "5 c #262626", "6 c #212121", "7 c #1E1E1E", "8 c #2B2B2B", "9 c #2C2C2C", "0 c #313131", "a c #1C1C1C", "b c #1B1B1B", "c c #292929", "d c #2F2F2F", "e c #242424", "f c #404040", "g c #202020", "h c #424242", "i c #2E2E2E", "j c #3A3A3A", "k c #272727", "l c #3C3C3C", "m c #3E3E3E", "n c #4A4A4A", "o c #323232", "p c #363636", "q c #434343", "r c #383838", "s c #303030", "t c #2D2D2D", "u c #373737", "v c #393939", "w c #282828", "x c #3D3D3D", "y c #444444", "z c #343434", "A c #252525", "B c #353535", "C c #333333", "D c #515151", "E c #474747", "F c #464646", "G c #3F3F3F", "H c #4D4D4D", "I c #414141", "J c #575757", "K c #4F4F4F", "L c #5C5C5C", "M c #5D5D5D", "N c #454545", "O c #565656", "P c #5B5B5B", "Q c #494949", "R c #696969", "S c #3B3B3B", "T c #585858", "U c #535353", "V c #484848", "W c #555555", "X c #4C4C4C", "Y c #505050", "Z c #4B4B4B", "` c #4E4E4E", " . c #5A5A5A", ".. c #606060", "+. c #5E5E5E", "@. c #595959", "#. c #6B6B6B", "$. c #717171", "%. c #616161", "&. c #666666", "*. c #676767", "=. c #747474", "-. c #828282", ";. c #808080", ">. c #707070", ",. c #545454", "'. c #6D6D6D", "). c #656565", "!. c #636363", "~. c #6F6F6F", "{. c #7F7F7F", "]. c #8A8A8A", "^. c #525252", "/. c #8D8D8D", "(. c #818181", "_. c #9D9D9D", ":. c #626262", "<. c #5F5F5F", "[. c #898989", "}. c #A0A0A0", "|. c #959595", "1. c #8E8E8E", "2. c #848484", "3. c #767676", "4. c #8F8F8F", "5. c #A4A4A4", "6. c #AFAFAF", "7. c #979797", "8. c #838383", "9. c #787878", "0. c #8C8C8C", "a. c #868686", "b. c #9B9B9B", "c. c #ABABAB", "d. c #858585", "e. c #777777", "f. c #646464", "g. c #999999", "h. c #727272", "i. c #7E7E7E", "j. c #929292", "k. c #7B7B7B", "l. c #6A6A6A", "m. c #A8A8A8", "n. c #737373", "o. c #919191", "p. c #9F9F9F", "q. c #A7A7A7", "r. c #C4C4C4", "s. c #7C7C7C", "t. c #AAAAAA", "u. c #7A7A7A", "v. c #939393", "w. c #BFBFBF", "x. c #9E9E9E", "y. c #797979", "z. c #9C9C9C", "A. c #A9A9A9", "B. c #7D7D7D", "C. c #B5B5B5", "D. c #B0B0B0", "E. c #B8B8B8", "F. c #686868", "G. c #878787", "H. c #A1A1A1", "I. c #949494", "J. c #B2B2B2", "K. c #BABABA", "L. c #909090", "M. c #969696", "N. c #757575", "O. c #6C6C6C", "P. c #6E6E6E", "Q. c #CFCFCF", "R. c #A6A6A6", "S. c #AEAEAE", "T. c #B6B6B6", "U. c #ADADAD", "V. c #B7B7B7", "W. c #B3B3B3", "X. c #C5C5C5", "Y. c #ACACAC", "Z. c #B1B1B1", "`. c #B9B9B9", " + c #B4B4B4", ".+ c #BCBCBC", "++ c #C3C3C3", "@+ c #C2C2C2", "#+ c #C0C0C0", "$+ c #C7C7C7", "%+ c #CDCDCD", "&+ c #CBCBCB", "*+ c #BEBEBE", "=+ c #C1C1C1", "-+ c #989898", ";+ c #D6D6D6", ">+ c #E0E0E0", ",+ c #D0D0D0", "'+ c #DDDDDD", ")+ c #DFDFDF", "!+ c #D1D1D1", "~+ c #BBBBBB", "{+ c #888888", "]+ c #C9C9C9", "^+ c #DADADA", "/+ c #F2F2F2", "(+ c #F0F0F0", "_+ c #A3A3A3", ":+ c #F9F9F9", "<+ c #E6E6E6", "[+ c #DCDCDC", "}+ c #CECECE", "|+ c #EFEFEF", "1+ c #EDEDED", "2+ c #F4F4F4", "3+ c #F3F3F3", "4+ c #F7F7F7", "5+ c #E3E3E3", "6+ c #D9D9D9", "7+ c #BDBDBD", "8+ c #A2A2A2", "9+ c #E4E4E4", "0+ c #FBFBFB", "a+ c #ECECEC", "b+ c #D4D4D4", "c+ c #E7E7E7", "d+ c #C8C8C8", "e+ c #D8D8D8", "f+ c #CCCCCC", "g+ c #E5E5E5", "h+ c #D2D2D2", "i+ c #A5A5A5", "j+ c #DEDEDE", "k+ c #CACACA", "l+ c #D5D5D5", "m+ c #D3D3D3", "n+ c #9A9A9A", "o+ c #EBEBEB", "p+ c #D7D7D7", "q+ c #E1E1E1", "r+ c #C6C6C6", "s+ c #8B8B8B", "t+ c #DBDBDB", "u+ c #E9E9E9", "v+ c #EEEEEE", "w+ c #FEFEFE", "x+ c #FAFAFA", "y+ c #F8F8F8", "z+ c #F1F1F1", "A+ c #F6F6F6", "B+ c #F5F5F5", "C+ c #E8E8E8", "D+ c #FFFFFF", "E+ c #FCFCFC", "F+ c #FDFDFD", "G+ c #E2E2E2", "H+ c #EAEAEA", ". . + + + @ + + + + @ # # # @ $ % $ # % $ # @ @ + + + + + . . . . . + @ + + + + . + . . + + . . . . + + + + . + + + + + + . + + + + + + . . . . . . . . . . . . . . + + . . . @ $ $ # # $ $ @ $ % % @ + + + + . + + + + + . + + . . + + + + . . + + . . @ + @ + + . . . . + @ @ + @ % & $ * = - - * $ $ % ; * $ $ & & % $ $ & % $ # # $ $ % & ; = & @ + @ $ % % # $ % # @ + . . + + . + + . . . + + . . . . + . . . . + . . . . + + @ + + + + $ $ # + + + + + . ", ". . + + + + @ @ + + @ # @ @ @ # % $ $ # $ $ # @ @ @ + + . . . . . . + + + + + . . . . + . + + + + + + + . + @ @ + + @ + + + + . + + + + . + + . . . . . . . . . . . . + + . + # % $ + @ $ @ # % % % $ @ @ @ + @ # @ $ # + + + + + + + + + + . + + + + + # # @ + + . . . . # # + + @ % $ $ $ * - = - % # % $ $ % & ; ; % # $ % $ @ @ # % $ * > , ' % + + @ # $ $ # % % # + + + + + + . . + . + + + . . . . + . . . . + @ . . + + + + + + + + # # @ @ + + + + + . ", ". . + + + @ @ @ + + @ @ @ + @ $ # # # # # $ $ # # @ . . . . . . . + + + + . + . . . + + . + + + + + + + + + @ @ @ @ @ @ @ + + + @ @ @ + . . + . . . . . . . . . . . + + . . + $ % # @ @ @ + @ # % % $ # + @ @ # $ $ $ @ + + @ + . + + + + + + + + . + + # @ @ @ . . . + + # $ @ + @ $ $ $ % * ; = - * # # # @ * ; = * # + # # @ # # % ; ; ' ) ! ~ # + @ # # # $ # $ & # + + + + + + + @ # + . . . . . + + + + . . . + @ + . . + + + + + + @ + + + + + + + + + . ", ". . + + @ @ @ @ + @ @ @ @ + # $ # # $ # $ $ % % & # . . . . . . + + + + + + + . . . . + + + + + . + @ @ @ @ @ + + + @ @ @ + @ # @ @ # + . . . . . . . . . . . . . . @ . . . . # $ # @ + + . + @ # $ # # # # @ # @ @ . + + + # + + + + + + + + + . . + @ # + + @ + . . + @ @ # @ # % % $ $ % % & = - & # @ + # $ = ~ = @ + + # @ $ $ { - ~ ] ' ' ; @ + @ @ # $ # # # @ + . . + + + @ @ + + @ . . . . . . . + + . . . + + @ + + + + + + + + @ @ + + + + + + + + . ", ". . . + @ @ @ + + + @ @ @ @ # $ $ % % # $ % % # $ @ + + . . . . + + + + . . . . . + + + + + + + + + @ + + @ @ + + @ @ @ @ + + @ + + @ + . . . . . . . . . . . . + # $ + . . . @ # $ + @ @ + . + # % $ $ $ $ @ + . . . . . # @ + @ + + + + + @ + . + @ # @ + + + + . . + @ # % # # * - ; % % # % - = % # + @ % $ ; ^ ; $ # @ # # & ; = { ' / ] = # + . $ & $ & % # # @ . + . + + + + @ + + + + . . . . + . . . . . . + @ # + + + + + + @ + + @ + + + + + + + + . ", ". . . . + + + + + + + @ @ @ @ @ # # # @ @ $ $ @ + . + + . . . + + . + . . . . . . + + + + + + + + @ @ + + @ @ + + + @ @ . + + + + + @ + . . . . . . . . . . . + $ $ # @ . + . . . @ + # & % % # & & # $ # # $ @ . . . + + + + + # + + + + + # @ + + . + + . + + + . . + # @ # # $ * ; & = * # $ * * # @ @ % ; ; - ' ; & & & $ % = - = ] ( ( ~ $ . + + % = = - ' % + + + + . + + @ + + @ @ + + . . . . + . . . . . + + # @ + @ @ + + @ @ @ + @ @ + @ + + + + + . ", ". . . . + @ @ + + + + @ @ @ # @ # $ # # @ # # # + + . + + + + + + . . . . . . . . . + + + + + + + @ @ + + @ @ + + + + + + + + + + + + + + + . + . . + . + + + + @ # @ @ . . . . . + + # & = - = % $ # # @ + @ . . + + + + + + + @ + + . + @ @ + + + + . . + + . . . . + # $ @ # % & ; * { * $ # % & & # # { ( _ , ] - - { - { ~ , ( , ) / ^ - $ . + @ % - { _ ] # . . + + . + + + + # @ @ . . . . . . + + . . . . + @ @ @ + + + + @ + + @ @ + + @ @ @ + . + + . ", ". . . . + @ + + + + @ @ @ @ # @ # $ $ $ $ $ # @ + + . + + @ @ + + + + . . . . . . + + + . + + + + @ @ + @ @ + + . + + + + @ @ # @ + + + . . . . . . + + + + + + + . + + . . . + @ + + + @ $ % & $ @ # @ + + . . . + + + + + + + + + . + @ @ + . + @ + + + . . . . . . @ # $ # @ % & * * { & # $ & % % + # % ] ^ ] _ - * { - ~ ^ , ^ ^ / ( / ; @ + @ @ % - ' ] * + . . + . . + + @ + @ + + + . . . . . . . . . . + + + + + . + + + @ + + + + + + + + + + . + + . ", ". . . . + + + + + @ # # # @ @ @ # $ % $ % % $ @ + + + @ @ @ + + + . . + . . . + + + + . . . . + @ @ + + @ + + + @ + + + @ @ # # @ + + + . . . . . . + @ # @ + . . + + + + @ + @ % $ + + . . + @ @ @ # + + @ . . + + @ @ + + + + + . + + + + + . + + + + + + + @ + . + # # # # @ $ % $ % ; % % & % # # @ # @ * { = * % & ; ; = - ' - { ^ _ ^ & + + @ % ; ( ( * # + + + + + . + + + @ @ . . . . . . . . + . . + + + + @ + + + + + + + @ @ + + + + + + + + + + + . ", ". + . . + + + + @ @ @ # # # # @ @ @ # $ $ $ @ + + + @ # @ + + + + + . + + + + + @ + + + + . + + @ @ + + + + + + @ @ + + @ # + + + + . . . . . . . . + @ @ + + + + + @ # $ $ @ # & & @ @ + + @ + + + + . + # @ + @ @ # # + . . + . . + @ + + + + + + @ # @ @ + + + + + @ $ $ # # # # $ & % $ * - = & $ @ # @ @ * * & & & & * * $ ; ~ ~ , _ - # + @ $ = ^ ) ] # + + + + + + . + + + @ + + . . . . . . + + + . + + . + @ + + + @ + @ @ @ @ + + + + + + + + + + + . ", ". . . . + + @ # @ @ @ # $ @ # # # # # # # @ + . . + + + + . + + + . + + + + . + @ + + + . + + + @ @ @ + + + @ + @ @ + + + + + + + . + . + + + . . . . + + + + # @ @ $ $ % $ # # # $ @ @ @ $ $ + + . + + @ - = # # % ; $ + . . . . + + + + . . . + + $ & $ + + @ @ + @ # % $ $ $ # # # % & $ ; - * & % # # @ @ @ # $ $ ; { ; * ; = { ~ : < - + + # = ^ / > ( % + + + + . . + + + + + . . . . . . . . + + + + . . . + @ + + @ @ # # @ @ + + + @ + + + + + + + + . ", ". . . . + + @ @ @ @ @ # $ @ @ # $ % # @ + + + . . . . + + + + + + . + + + + + @ $ $ $ + . . . + + @ # @ + @ @ + + + + + + + + + . + + @ + + . . . . + + + $ $ # @ @ $ @ # @ + + + + + @ $ ; & + . . + + # - = $ $ % # @ @ + . . + + + . + + + + @ # % * # . + + @ . + # $ $ $ % $ @ # ; ; & ; ; - ; * $ @ @ # % & # # - ] - ; = - ~ > : [ ' + $ = ( } } > ~ @ . + + . . . + + + + . . . . . . . . . . + + + + + + @ # @ @ @ @ @ @ @ + + + @ @ + + + + + + . + . ", ". . . + + + @ @ # @ @ @ # # @ # % % # + . + + + + . . + + . . + . + . + + + + % ; % # + . . . + @ @ @ + + @ + + + + + + + + + + + @ @ @ . + . + + + @ # @ % # @ + + + . . . . + + + + $ & & # + . . + + @ $ $ $ @ @ @ @ @ + + + + . . . + + @ $ # @ @ # + . + @ + + + @ $ $ # # $ # # & = = ; ; { ; & # @ @ # # $ $ $ * ; ; = ] = { ~ ( _ ; @ ; ' _ [ | , # + + + . . . . + @ @ + + + + . . . . . . . . + . @ + @ # # @ @ # # + @ @ + + + + + + + @ + + + + @ . ", ". . . + + @ @ @ # # @ @ # @ # # $ $ $ @ . . + + + . . . + . . + . + . . . + + $ * $ @ + + @ @ @ @ @ + + + @ + @ + + + + + @ @ @ # # @ + . + + . . + @ & % % @ + . . . + . . . . + @ # $ % # + . . + @ + + + @ @ + + # # @ + + + + + . + @ + @ # @ + . . . + + @ + + @ # $ $ $ $ # % # $ = - ; ; * % % # $ $ $ # # $ $ * = * - ' - { ' / ' $ % ~ , : 1 ! ; # + + + @ . + + . . . . . . . . . . + + + + + . + + + @ # # # $ # # @ + + @ @ + + # @ @ + + + @ @ @ . ", ". + . + + + @ @ @ @ @ @ @ # # # # @ + . . . + + . . + . . . + + + + . . . . . + # @ @ + + @ @ @ @ + + + + @ . . + @ @ @ @ # @ @ # @ + . . . . . . + # % & $ + . . . . @ # # @ . + @ # @ @ + . . + @ + @ + @ # % @ @ @ + + + + + + + . . @ + + + . . . . . @ @ + + . @ # $ & $ # # % $ $ = { ; & % % & % $ % $ # # @ $ & ; * * ; - { ( / { % { } 1 2 } ; # @ + + + + + + + . . + + . . . . . . + + + + + . + . + # # # # $ @ @ + + @ # @ @ @ @ @ @ + + @ # + @ . ", ". + + + + @ @ @ @ @ @ # @ # # # # + + . . . . . . . + . . . . @ # + . . . . . + + + + + + @ @ @ @ + + + + + + + + $ $ @ + $ # + @ + + + . . . . . @ $ % * $ @ . . + @ $ % * & @ + @ + + . . . + + @ + @ @ # ~ - # + . + . + + + + + + . + + + + . . . . @ # $ + + @ + + # $ # # $ $ # $ & & % % & & # $ % % & $ # # % $ & * * - ' { ( ( * $ ] 3 4 5 ' @ @ @ + + @ @ + + + + + . + + . . . . + + + + + . . + + @ # # @ + @ @ @ + + + + # @ + @ @ + + + @ @ + + . ", ". + + + + @ @ + @ @ + @ @ @ # @ + . + . . . . . . . . . + + + + + . . . . . . + @ + + + + + + @ + + @ @ @ + + + @ # @ @ @ # @ + @ . . + . . . . . # % & $ # + . + $ % & * ; ; # + + + + + + + @ @ + + % % * / { @ + . . . . + . + @ + + . . + @ + . + @ @ # # + + @ @ # # @ # $ $ # # @ @ @ @ $ % % $ # # $ & = % $ # # % & * = - ~ ] { $ $ / : 6 7 & @ + # + @ # @ @ + + + + . + + . . . . + . + + + . + + . % $ @ @ + + @ + @ @ + @ @ @ + + + @ + + + @ @ . . ", "+ + + + + + @ @ @ + + + + + + + . . . . . . . . . . . . + . + + + . . . + + + # @ + + . . . . + @ + # + + + + + @ # @ # @ @ + + + + . . . . . . . @ @ @ @ @ + . @ = = & * * % . + + + $ # @ # @ @ @ + & ; = { % + + + . . . . . + + . . . . + @ @ . + @ @ + + + + + + @ # # # # # @ @ @ @ + + @ $ * % # @ @ $ & $ $ $ $ # $ $ * - ~ ' % $ & , : 1 ) # @ + @ @ @ # # @ + + + + + . . . . . . . + + + + . + + + # # @ . + + @ @ @ @ + + @ + @ + + + + + + + + + . ", ". + + + + + + . . + . . + + . . . . . . . . . . . . + + + + + + . . . + @ @ # $ # @ @ + . . + + + @ # @ . + + + + @ @ @ @ + + @ + . . . . + + + + @ + . + + . . + ; - % * % @ + + + + @ @ # @ @ + @ + $ % $ # + + + + + . . . . + + + + + @ @ + . . + @ @ . . + @ @ + + @ @ # # # @ @ + @ + + @ % & # # # @ $ % $ % % $ % % $ ; { ~ - & $ ; } } / * @ + + + @ @ # @ @ + @ @ + . . . . . . . @ @ + + + + + + + + + + + @ @ @ @ @ @ + # + + + + + + @ + @ + @ + . ", ". . . . . . . . . . + + + . . . . . . . . . . . . + + + . + + + + . . + @ @ @ # @ # @ @ + + + + @ @ @ + + + @ @ + + # @ + + + + . . . . . + + + + @ @ + . . + . + & ; ; ; * # # # @ + + + + + + + + + + + . . . . + @ + . + + + @ % & @ @ @ @ . . + + + + . . + @ + + + + + @ @ # @ @ # + @ $ # @ @ @ + + # $ # @ $ & % % $ & = = ] ; $ $ - } } ' + + + . + @ + @ @ @ @ @ + + . . . . . . . + @ + + + + @ + + + + . + # @ + @ # @ # @ @ + + @ + @ # @ + + @ + . ", ". . . . . . . . . + + + + . . . . . . . . . + . . . + + . . + + + + + @ @ + + @ @ @ @ + . + @ @ & $ + . + + @ @ @ @ + @ @ + + + . . . . . + . . + + @ + . . . . . $ ; = ' & # @ $ # # @ # $ % # @ + + + . . . . . . + . + + + @ # % @ + + + + + + + + + + + + + + + + + + + @ + + + @ @ + # $ # # + + + + @ $ # + # % % % % % & = ] * # $ ( [ > & @ + + + + + + @ @ + @ + . + . . . . . . . + + + + + @ + @ @ @ @ + @ $ @ @ + @ @ # # @ @ @ @ @ @ @ + @ + @ + . ", ". . . . . . . . + + . . . . . . . . . . . . . . + + + + + + + + . + + # # + + @ @ @ @ + + + @ * % # + + @ + @ # $ @ @ + + + + . . . . . . + . . + + . + + + + + . $ - = ' ; $ # # $ $ @ # % = = # + + + . . . . + + + . . + @ # $ & + + + + # @ + + + + + @ @ + + + + + + + + . . . + + . + @ $ @ + + + + + @ @ @ # % $ % $ $ & - ~ ; # % ~ / ~ @ @ + + + + + @ @ + + + + . . . . . . . + + + + + + . @ + # # $ # + @ $ @ @ @ # # # # @ @ @ @ @ @ + + + @ @ + . ", ". . . . . . . . + . . . . . . . . . . + . . . . . . + + + @ + . . + @ % # + + @ + @ + + @ + # % & $ + + + @ @ @ + + @ + . . + . . . . . . + + + + + + $ $ + + + + & { { = * % & % $ $ & % % & $ @ @ + . . . . . . + + . . . + @ $ @ + @ + + + + + + + . + + + + + . + + + + + + . + @ + . # @ @ + + + + + + + @ # % & & & @ % ; ~ ( = $ & { ] * + + + . + + + + @ + + + . . . . . . . + + + + + + . + + @ @ + # @ + @ @ @ + + @ # # # @ @ @ @ @ @ + @ + # + + . ", ". . . . . . . . . . . . . . . . . . . + + . . + + . + + @ # + + + % & * @ @ + @ @ @ @ + @ @ # & * # # @ + @ + + + + + + + + + . . . . . + + + @ + + # ; % + @ @ @ * { - { * & & * $ $ & * $ @ @ @ + . . . . + + + + + + + + + @ # + + + + + @ @ @ + . . . + + + . + + . + + + + + . . . # $ + + + + + . + + + @ # * = = ; $ % ' ] ] = $ ; ] * + + + + + + + + + + + + + . . . . . . . + + @ + + + . + @ @ + @ @ + + @ @ + + @ $ & # # # @ # # + + + + + @ @ @ . ", ". . . . . . . . . . . . . . . . . . . + . . . + + . + + # @ + + @ $ $ # + + + . + + @ @ @ # % & # + @ @ + + + + + + + + . + @ + . . . + + . + + . + @ $ @ + @ + + % - { ' ; % $ $ + @ @ # + + + + . . . + + # @ + + @ + + . + # # @ @ @ + @ # $ @ + + . + . + . . . + . . . . + + . + + # # + + @ @ + . @ @ # @ $ % * & * * % ; - % $ % ' / & + + + @ + @ + + + + + @ + . . . . . . . + @ + @ @ + + + @ @ @ $ # @ @ # # @ @ @ # $ $ # @ # @ # + + @ + + + + + . ", ". . . . . . . . . . . + + . . . . . . . . + + + + + + @ # + @ @ + + + @ + . . . + + + # @ @ # # + + + + + @ + + + + + + @ + . + . . . . . + + @ @ . + . + . + @ @ $ ; ' { = $ + . + . + @ @ + + + + + + + @ + + + @ # . . . + @ + @ @ @ + + @ # # @ + . . + + + + + + + + + + + + . . + + + @ @ @ # @ . + # # % & % & * & ; = * * % $ & ( ~ + + + + + + + + @ + @ + . . . . . . + . . + + + # # @ + @ @ # # # $ # # # @ @ # # $ # @ @ $ @ @ @ @ + + @ + + @ + . ", ". . . . . . . . . . . . . . . . . . . . . . . @ + + . + + + + @ + . . @ @ + . + + @ @ @ @ + + + . . + # @ @ + @ @ + + # $ @ . + + + + . . + @ @ + + . . . . + + + # * - ^ { % + + + + + + + + + + + + @ @ + + + + @ + . . . + + . . + + + + # # @ @ + . . + + + + @ + + @ + + @ + + . . + + @ % # # @ . + # $ $ & % * & & * = = = * $ ; ; # + + + + + + + + + @ + + + . . . . . + . . + + # $ # @ + + # $ # @ @ @ @ @ @ @ % & % # @ # @ $ $ @ @ @ + @ @ + @ @ . ", ". . . . . . . . . . . . . . . . . . + . . . + + + . . + + + + . + + + @ @ + + @ # # # $ # + + + + + @ $ @ + + @ # @ @ @ # @ @ + + + + . . @ $ # + . + + + + + + @ # ; ~ ] ~ ; @ + + + + + + + + + + # @ @ @ @ + + + @ + + + + + + + + + + @ @ # $ # + . + + + . + @ + @ @ + + + + + . . + @ # $ # @ + + @ $ % $ % % & & & * = { { * & ; % @ + . + + + + + . + @ + + . . . . . . . . + + + # @ # # # + # % # # # # # @ @ $ & & $ # $ # $ # # @ @ @ @ @ @ + @ # . ", ". . . . . . . . . . . . . . . . . + + . . + @ + + + + + # + + + + @ @ + + + @ @ $ % $ # @ @ @ @ @ @ $ # @ . + . + @ @ + . + @ + . . . . @ $ # @ + + @ + + + + + @ $ % ] > ( & @ + . . . . . . . + @ # + + # # + + # + . + @ + + @ @ + + @ @ + @ # # + @ @ + + + + + + + + + @ # + + + + + % % # $ @ + + # $ % % & & & * * & = ; = * * $ @ . . . + + + . + + + + + + . . . . . . . + + . + # $ # # $ # # @ # $ # # # # $ $ & & $ # @ @ @ @ + @ @ + + + + + @ $ . ", ". . . . . . . . . . . . . + . . . + + + . + + + + + + @ @ + + + @ @ @ @ + @ @ @ @ # # # + + # @ @ @ + + + + . . + @ + + . + + . . + + # $ % $ @ + @ @ @ # # + + + + . * ' { * @ + . . . . . . . . + + . . @ # @ + @ + . . + + + + @ @ + + + + # # @ + + + + + + @ @ + + + + @ + + + @ @ @ @ # # # @ @ @ $ $ $ $ $ & % & & * ; % $ & & + + + + + + . + + + + + + + + . . . . . . . + . + @ % = $ @ @ @ # @ @ # $ # # % % & * % % $ + @ @ + @ + @ + + + + @ $ $ . ", ". . . . . . + . . . . . + @ + . + + @ @ + @ + + + + @ # # + . . + @ @ @ + @ @ @ @ @ + + . + @ + . + + + + + . + # @ + @ + @ + + + @ @ @ @ $ $ @ + $ & * { * + . . . . + # % # + + . . . . . . . . . . . + + + + + + . + @ @ . + + + + + + + + @ # + . + + + + @ # + @ # . . . . . + + @ # @ + # + @ + + $ $ # # $ % & & % ; & # @ @ # + . + + + + + + + @ + + + + . . . . . . . + + . + # $ % @ @ @ $ $ @ @ @ @ @ # % & * & $ $ @ + @ + + # @ + + @ @ # @ @ # . ", ". . . . . . + . . . . . + # + + + + + + + @ + . + @ # # @ @ + @ + @ + @ + @ # # @ + @ + . @ # + + + + + + + + @ $ # @ @ # $ # + + @ # @ @ @ @ + @ * - { ] % . . . . . . + + + + + . + . . . . . . + @ + + + @ @ @ + + + @ @ . + . + + . + + + @ # + + + + @ + + @ @ $ # . . . . . + . + # + + + + + + + @ @ % % & * * & % ; * @ + + + + + + + + . . + . + + + + + . + . + + + + + . . + @ # # @ @ # * % $ & # + @ $ $ $ $ # @ @ @ + + + + @ @ @ @ # @ @ @ @ # . ", ". . . . . . + + . . . + + @ + . . + + + + + + . + # # # + + @ @ @ @ + @ @ # @ @ + + # + . @ # + @ + + + . + + @ # % # + # @ @ + + + # @ @ + . . + & % % = % . . . . . . + + + . + . + . + . . = ~ & & # + + @ # + @ @ + + + @ @ . + + . . + + + + + + + + + @ + @ # # @ . . . . . + + @ + + + + . . + + @ # % * $ % ; * $ $ # + . + # . . + + + + + + + + + . + . . + @ @ + + + + + . . + + # # @ % * $ $ * $ @ $ % $ # % $ @ @ @ + + + + + + + @ @ + @ @ @ # . ", ". . . . . . + + . . . + + + + . . . . + + + # @ @ $ $ @ @ + @ @ @ @ + + @ # @ + @ + $ $ @ # @ @ # @ @ + + + @ $ % & % $ # @ @ # @ @ @ # # . . . . + + + @ # + . . . . . . . + + . . . . . ; , 8 9 { $ # @ @ @ + + + + @ @ @ # @ + + + + $ $ + . . + + + + + + @ @ # $ + . . + + + + + + + + + + + . . + @ # & % # % ; ; % # + . + . @ + + . + . . + + + + + . . . . % # + @ + + + + + + @ # $ # & = - & - * $ # & % # $ % @ @ @ @ # @ + + + + + @ + @ @ + # # . ", ". . . . . . + + . . + + + + . . . . . + # # # + @ @ + + @ $ @ @ @ + . + # # # @ + @ % % @ @ @ @ @ + + . @ # # # # # # # % $ @ @ $ $ @ # # . . . . . . . . + . . . + + + + + + # @ + . + = ! 4 0 } * # @ # $ # @ + + + @ @ @ @ # @ @ + = { @ . . . + . + + @ @ @ + @ @ + . . + + @ + + . . . . + + . . . + @ $ $ # % * & % @ + + + . . + . . + + . + + . . + + . . + = $ + + + . . . + + @ % % $ * ~ { * ~ * $ & % # % % $ # # + + # # + + @ + @ $ + + @ + # @ . ", ". . . . . . . + + . . + . . . + + @ + + # # + + + + + + @ # @ @ @ + . + + + + + + @ @ + + + @ + + + + + # # $ # + + + + @ @ + + @ @ @ @ + + + . . . . . . . . . . + + @ @ @ % ; $ @ + # { ! 4 1 # + + + # @ + + + + + + + + + + @ $ * ( { @ + + @ @ @ # @ @ @ # + + + + . + . + + + . . + + + + + . . . + # $ # $ % & $ @ + . . . + . . . + . . + + + . + + + . . ' ' # + + . . . . . @ # % $ $ * / ] = = & % & $ # % % $ % # + + # # @ + + + # + + + @ @ @ @ . ", "+ + . . . . . . . . . . . . . + + + + + + + + + + + + + @ @ @ + + + . @ @ . . + @ # + + + + + + + + + @ & $ # # + + + + + . + . + + + + + @ + . . . . . . . . . . + + @ @ @ $ % $ @ + + # ; ~ * . . . . + . . . . + + + . . . + # * = = & $ @ @ $ $ # @ + + + + + + + @ + . + + + + + + + + + . . . . + + @ # @ $ $ $ @ . . . . . . + . . . + . + + . . . . . . $ ] { # + . . . . . + $ * ; & $ { ! > { = % $ % % # # # $ @ @ @ @ @ @ # # @ @ @ + + @ @ @ @ + . ", "+ + . . . . . . . + . . + + + + . + + + + + + + + + + + + + + + . . . . @ @ + @ # $ @ @ @ + + + + + # % % @ + + + @ @ + + + @ @ # # @ + . . + . . . . . . . . . . . . . + # @ @ + . + @ $ # + + . . . . . . + + . . + + + + + # # $ % # # % # @ # $ @ + . + . + + + + + + + + + + + + + . . . + . . . . + + # # # @ + . . . . + . . + + + . + + . . + + + . . + - ( ; @ + . . . + + + % - * # % _ 3 > ^ { # @ $ $ # # $ # # @ # # # # $ @ # @ + + @ @ @ @ @ + . ", "+ + . . . + . . . . + + @ + . . + . + + + + + + + + + + + + @ @ . + + + @ @ @ @ $ $ # # # . + + + + % * $ + + @ # $ $ # + + # $ % % # . . @ + . . . . . . + + . . . + . . $ # @ + + @ % * * @ . . . . . . . + + + @ # % $ % $ $ # $ & & # @ . @ @ @ + . . + . + + + @ @ + @ + + . + + + + . . + . + + + . + % % $ @ . . . + + + + + . . . . . . + + + + . . . . { ( % + + . . + + + # & & @ + % : a _ ] { # @ $ # & * # @ # # $ $ $ % # @ @ @ @ # # @ @ @ + + . ", ". . . . . . . . . + + + @ + . . . # # + + # $ + + + + @ + + + + + @ # # + + @ # $ * % $ # @ @ @ . . # $ # + . + + @ # $ + @ # # # @ + + + + + . . . . . + # $ # $ $ % * # # $ # $ % % + & { ; + + . . . + . + @ $ % * ; { ] & # $ * & * $ + . + + + + @ + + + + + @ $ # + + + . + + + . + @ + + + + + + + @ % % $ @ . + @ & # + + + . . + . + . . + . . . . . + = ' @ + + . + + + @ % ; $ + + # ; ; = { = % % % & % $ @ # @ % ; % % $ $ # @ # $ # $ # @ + + @ . ", "+ . . . . . . . + + + + + + + + @ * # + + $ % + + @ # $ $ @ $ @ + @ # # + @ # # @ % $ $ # @ # # . . # # @ + . + + + @ @ # @ $ & # . + + . . + . . . . . @ * * ; ' = ' ] & @ # # $ * $ @ % = = @ # + . + + + @ # % ; { - { = & % & & @ + @ + + + + . + # @ + . + + @ # @ @ + . + + + + + + + + + + + + . + @ # $ # @ + @ $ & # + + + + + . . . . + + . . . . . + # # + + . + . + + $ & % # # @ @ # $ * = ; & * * $ $ # # # # * ; * ; $ # @ $ $ $ $ # $ @ + + + . ", "+ + + . . . . . + + + + + + @ # % % @ + + $ ; $ # # $ & # $ & @ + + + + @ $ $ + + + + @ + + @ + + + $ # + + . + + + @ # % $ $ & # @ @ @ + . . . . + . . @ - ] ~ ( ~ ! ) = # + + + @ + + + $ # + + . + + + . + # * { { ; ; ; ; - * @ . . . . + + + + + + @ @ + . . + @ + # @ + + + + @ + + + . + + + + . . + + + @ @ # $ % $ + + . . . . . . . . + . . . . . + + + + @ . + + . + @ $ $ @ @ $ $ $ % * * & * & % % $ $ $ @ @ # & & ; - * # @ # # @ # @ # @ + + + . ", ". + + . . . . + + + + . + + + + + + + + @ * - % @ @ @ @ + @ # + . . + @ % % @ + + + # # + + + + + # * & % + . + @ @ @ @ $ % # # $ % $ + . . . . . . . + @ ] ) ^ / ( ^ ' & @ + . . . . . + # . . . . . + . . + # & & & & * = * * # + . . . . . + + # @ # # @ + + + + + + + + + + + + @ + . . . . . . . . + + @ + . + @ % & # + + . . . . . . . . + . . . . . . + + + . . + + . + @ $ # + @ % { - ' = = * ; & & $ $ $ $ # # $ % % = * $ # $ # @ @ @ @ @ @ @ @ + . ", ". . . . . . + + . . . + + + + + . + + . @ & * % @ @ . . . @ # + . @ @ # % % @ + # # @ # + . . + . # $ % % + + @ @ # # # $ & % # # # # . . + . . . . . . + ' / ] ~ ' - $ . . + . + . . . . . . . . + + + . @ $ & $ # $ & ; % % % # + . . . . . . + @ @ # + + + + + + + + + + @ + @ + @ @ + . . . . . . . + + + . . . + # $ $ + + . . . . + . . + + . . . . . + @ @ + . . @ @ + $ $ @ @ + $ ; = - ~ = { - { = & % # @ # @ # $ % % = & @ $ $ @ @ @ @ @ + @ @ @ @ . ", ". . . . . + + + + . . + + + . . + @ @ + + + @ @ @ + + . . # $ + @ $ # + $ $ @ @ # + . + . . . . . . + @ + + @ # $ % & * $ $ & # @ @ @ . . . . . . . . . . % ; - ; % @ . . . . . + . . . . @ + @ + + + . @ % - { # + + @ # + @ @ + + + . . . + . @ + + + @ @ . + . . + + @ + + + @ + + + + + + . . . + + + + + . . . + @ # $ + . . . . + + . . + + + + . . . @ % % @ + . + + # * * # + @ $ % * - ( ^ { - = ; % $ # # # # % % % ; = & $ # # @ # @ + @ + @ @ @ @ . ", ". . . . + @ + + + + . . + . . + + + + + . + @ @ @ @ + . + # % @ @ # # @ $ % # # # @ # $ + + @ + @ @ @ + @ # * ; & * * & $ # % $ $ % @ + + + . + . . . . . @ @ @ @ + . . . . @ $ % $ + . + $ & % + + + @ - ~ / ~ + . . . + + + + + + + . + % @ @ @ + . + @ @ @ + + + @ + + . . + # + + + + @ + . . + + + + + + . . . . @ # @ + . + + . + . . + + + + + . . . # = & + . . @ # % & $ + + + % # & / : , ^ - { = % # $ $ @ $ $ $ % - ~ = % $ # @ @ @ @ @ @ @ @ @ @ . ", ". + . + $ & + . + + + . . . . . + + . . . + @ @ @ @ + . + # $ @ + @ $ $ * & % # + @ & # @ @ @ @ # # @ + + $ - = % @ # % % # % % $ $ $ + + . . . . . . . . . . . . . . . + # * - ^ ' # . @ * { $ + + & ; , ) ^ & @ + . + $ & # # @ . . . + @ + # @ . + # # # $ @ # # + + + + + + + . . + + + + . + @ + + + + + + + . . + @ + . . + + . . . . . + + . . . . + & / * + . . @ $ ; & $ + + @ # % ; _ _ ~ ~ ; ; % @ @ # % % & % $ - { ' ; % $ # @ @ @ + @ @ # + + @ . ", "+ + + @ $ % @ + + @ + . . . . . + . . . + # ; # @ + . . + @ # # # # $ $ = & # @ . @ # @ + + + @ @ # + + @ # & & @ + @ % & & # @ + @ # + + + . + + . . + . . . . . . . . @ & = { ] { # @ # $ # . + # - { _ ) ' # @ @ @ @ % * $ $ @ . . . + + . + @ $ * = % % % # + + + . + + + + . . . . + + . + @ + + + @ + . . + + . . + + . . . + + + + + + + + + . . . . { [ & . . @ @ $ ; ; $ @ # & * % ' ^ ( - = ; = ; @ @ $ % % * ; * { { = % # # # @ + @ @ @ @ + @ @ @ . ", "+ + + + + @ @ + + + + . . . + . + + . . + % - % @ + + + + @ @ # $ # $ $ % @ + + + @ @ + + . . @ @ @ @ + @ @ $ $ @ # $ & = * @ + + + @ + + @ + + . . . + + . . . . . . . + @ # # $ + + + + + . . . @ ; - = ; % $ % % * # @ @ + + + + . . + . . . + & ' - & % $ @ + @ + + + + + @ + + + + + . . + @ + + + # @ . . + + + . . . . + + . + + + + + . . . . . . + _ 6 - . . + # % ] = % % % * ' { ] , _ / { - ; # @ $ # # & ; * & ; - - % @ $ % @ + @ @ @ @ + + @ # . ", "@ + + + + + + + + + + . . . . + + @ # # $ & * & @ + @ # + . . @ @ # % $ + + + @ + + @ + . + + @ # @ @ @ @ $ * % @ % = ; * & @ + $ $ % @ + + + + . . . + + . . . . . + + + . @ + . . . + . . . . . + # % # + @ & * & & @ + . . . . . . . + + + + @ * ' = & # $ @ + + + # # + + @ @ + + . . . . + . . + + @ @ + + + + + + + . . + + . . . . + + . . . . . . # ( , & . . + @ & ] & $ * * - ' ' ] > , ( ~ { & @ $ * & # $ ; = & ; { = * % # $ $ # $ # @ @ + + @ @ . ", "@ + . + + + @ @ + + + + + + + + + @ $ % * * & $ @ . @ # @ . . @ # $ * % + + @ # + # # + . + @ @ @ + @ @ + # * ; % & % % & # @ # # $ $ + + # @ + . . . . . . . . . . + + @ @ @ + . + @ $ @ . . . . . # # + + & { & # @ + . . + + . . . + + + + # & { - & # * * # @ + $ % @ . . + + . . . . . . . + + + @ + + + + + + + + + . . . . + + + . . . . . . . . . * ( ] $ + + + + * { @ + $ ' ' ~ ~ > [ / / ( ] % # & * ; % % = - - ~ ^ ~ * % $ $ $ $ % $ @ + @ @ . + . ", "@ . . + @ @ @ @ + + . . + + + # @ + @ % ; & $ # @ . + @ @ + + @ # & ; # + + & & @ $ % + . + @ @ + + + @ @ % { ~ & & + @ @ @ @ + . + + . @ # $ # . . . . . . . @ $ & # @ @ $ # # $ # % ^ * . + + # % $ # @ & - ; # @ + + + + @ @ + . . + + . . @ ; ' & # @ * { - & % % $ @ . . . . . . . . . . . @ @ + + @ + + + . + + + . . . . . . . . . . . . . . . . + ~ b ) @ . + @ @ & $ @ @ % ' ( ^ > : [ > ( ^ ] = % * = ; % & * - { ' ' ; % & % $ $ # @ $ @ + @ @ + @ . ", "+ + + + @ @ # + + . . + + + + @ @ @ @ & & & @ @ @ . + + @ @ + @ # % # + + @ { - # ; & + + + + @ # @ + + $ - { ; $ $ @ @ @ # + . . + + + # * ^ { . + + . . . @ & ~ < ^ $ # # @ # % - - ; @ + + $ ; = % + + # $ + + @ + + + @ # # + + + + + + + + * & + + $ & ' ' & # # @ + . . + . + + . . @ # + @ @ @ + + . + + + @ + . . . . . . . . . . . + . . . . . # < 4 > . + # # $ * $ @ $ ; , ^ ) ) [ 5 a ) ~ ; * % * { ' = % { ^ ' * % % # % $ $ # # # @ @ @ + + + @ . ", "+ @ + + + + + + . + + @ + + + @ # $ % & # @ @ @ + . . . @ $ # @ $ # + + . + * ; & ' % + + + + # $ @ @ $ ; - ] & # @ @ # @ @ @ + + # + @ % ~ , ; . + + + . + % = , 3 3 ^ - % $ * ; = % . . . $ % % $ % @ + + @ @ + + + + + @ $ # @ + + + @ @ @ @ & * @ # & * * * # + @ @ + + @ + # # @ + + # $ @ @ @ + + . . + + @ + . + . . . . . . + + @ + + . . . . . { 2 8 ~ . . @ # $ % # # & ^ / ' , > b c [ , ) ] * $ $ = ' - * = ~ ( = % $ # $ % % $ # # # @ @ + + + + . ", "+ @ @ + + . + + + + + + + + . + @ # # # @ + . . . . . + @ $ # @ # # + . . @ & & $ # + + + + @ # # # # & ' ^ ( & + @ @ @ @ @ # @ # # @ $ ' ' $ + . . . . . + & = = ( b : , - % % # + . . + @ % @ # # $ % # @ # $ # % # + @ $ $ # @ + + @ @ @ + + & & $ # # % & # + + @ + + @ # @ $ @ + + @ + @ + + + + + + + . . + + . . . . . + @ . + + + . . . . . . . ( d e * . + + @ # $ % % = - ' _ : > a [ ^ ( ) = & * % - { * = - = ; ; * * $ % % # $ @ # # @ @ # + + @ . ", "+ + + + + . + # @ + @ + + + . . . @ @ @ + . . + . . + $ % ; % @ % # + + @ ; = & + . + . . . @ # # # $ ; - = $ @ + + $ $ # @ @ # # # @ * ) ' + . + . . + . @ & = = ] : ) : ] ; & + + @ # $ % $ # # # # $ # + + $ $ = $ + @ # @ @ + . + + @ + + @ % @ @ @ @ @ @ + . + @ + @ # # $ @ + @ # @ + + + + . + # @ + + + + + + . . . . + + . . . . . . . . . . + ) f 4 $ + @ @ + # % $ $ - - _ ! > ! 3 [ ^ ) > ; = - = = * $ $ ; - - ] = & % % $ # $ + @ $ @ + @ + + @ . ", "+ + + + + + + @ # # + . . + + + + @ @ + . . . + + $ & & & % % # # @ @ @ # = { * + . + + + # @ @ % - & * ; ; & + . + % % @ + + # @ @ @ & ^ - . . + . + + + # & - ' ^ / , / - = # @ + # ; ' ; % @ # + + @ @ + @ @ @ # # @ @ + . . . + @ + + . + % = $ . . @ + . . + + @ + @ # & ; @ + @ # + + . + + . + + + @ # + + + + . . . . . . . . . . . . . . . . # g h 2 ; @ @ $ @ # $ % = ~ ~ > ! 7 i j k : [ , ' { { - ; & $ % & - ~ _ = $ % % % # @ @ + @ + @ @ + + + . ", "+ + + + @ @ + @ + + + + + + # @ @ @ + + + . . @ % = { & # # @ @ @ + @ @ $ & * % + + @ + # # # % ; = - = & * & @ + # % % + + @ # # # @ @ + + . . . . . + + @ % * * - = ~ ~ # # @ @ $ * - ] = * @ . . . . . + $ @ + + + . . . . . . + @ @ + + @ & ; $ @ @ + + . . + + + + + + % $ @ @ + # @ + + + . . + + @ @ + . . . . . . . + . . . . . . . . . . . . & | l 2 ' $ & $ # % $ & { = ] ! 7 c m n o b / ] = { ~ { * % $ & ; ~ / ' { % # # $ # $ # $ + . @ @ + @ @ . ", "+ + @ + # # % $ + + @ + + + $ @ + . + @ + . . # ; ] ~ * # # @ @ @ + + + @ # @ # $ @ + @ @ @ # % $ & = * * $ $ @ + % # + + # % % % & @ + + + . . . + . . . @ & & % # + ; ; + $ # @ $ & * % = = + . . . . . + + . . + . . . . . + + + $ # + + + * & + + @ @ + + + + @ + + . + + + @ @ @ + + . . . + + @ + + + . . . . + . . . . . . . . . . . . . . . + ; g e > * % = & % ; % & { ] < < 1 p q l r g & % * ( / / ^ = ; ; = , , - ; & % % # $ % $ # @ + @ @ + @ + . ", ". + # + + # % # + + @ @ . . @ + . . + $ # . + % * ' { - $ # % @ + + @ $ $ # @ % ' % . @ # # % % # & ; * % @ @ # # % $ @ @ & * & ; - % + + + + . + . . . . + @ @ @ + . @ # @ @ # + . + @ $ ] ^ + . . . . + + . . + . . + + + + + @ # # # @ + & = # + . + + . + # @ @ + + . + . + + + + . + . + + + + @ @ + + . . . . + + . . . . . . . + . . . . + + # - ! ( * & = - * & % ; = ' ( a ) 7 s p t 2 ' # # & ^ , ! , = ; - ] } > ' & * * % % & $ $ @ @ + + + + + + . ", "+ + # # + + # + + + + + . . . . . + + ; = @ + % & % * * % # # + + @ & ; * @ + @ $ @ + + # & * * # $ % % # + @ # % % % % % % % # & % # @ + @ + + + . . . + @ @ + + + + @ @ + + + + + . @ * ~ = . . + $ # # + . . . . + + + + + @ # # $ = < 7 / ; @ @ # + . + @ # # @ @ @ + + @ @ @ + @ + + + + + . + + + @ + . . . . . . . . + . . . . + . . . + + . # = ' = % & ^ ~ = = & * { ( ^ , [ 8 o 0 4 > & @ # & ^ ) ! _ ; = { ~ ( ~ ; % % & & & % $ $ # # @ + @ # + @ . ", "# $ @ # + + + + . . . . . . . . + @ @ & ; @ # # @ $ # # @ @ + + # $ - - % @ + @ + . . @ & = * & $ @ # & & @ # $ $ $ # % & $ # @ # @ @ @ # @ + + + . . . + * & + + + + @ @ @ + # % # + % = * + . . @ % - * + @ @ @ + + @ @ @ + + @ # $ < q q g = % % * # + @ # @ @ # $ % $ # % @ + + # @ . + + + . . . + @ + + . . . . . . . . . . . . . . . . . @ # - ; * { & ^ < / ] ] ' { ' / ^ ^ 6 u v 0 | { $ + # = ) : [ ( = & ~ ^ ^ ~ { ; & & % % # # @ @ @ @ @ + # @ @ . ", "& & @ + . . . . . . . . . . . + @ # # $ $ # + + + # % $ @ + + + @ % & & % @ + @ @ + @ % ~ - * * * $ & - - % # $ * $ # # @ @ # @ @ # $ $ $ @ + + + . . . + * ] { % $ @ $ % + + # = & + $ % @ @ + + # & ; $ $ = ~ = @ @ @ + + . . + # & , i c < * $ % & # @ @ # # # # @ $ $ # @ # @ + + + + + + + . . + @ + . . . @ + . . + + . . . . . . . . + + . - ) * & % * , 3 _ , < ( ] / ) } } w o x j g ; @ + @ _ 6 a < ] - = ^ ~ ^ ^ ~ { - = & % % # @ + @ # @ # $ # + . ", "= & + + . . . . . . . . . + + @ # $ - # @ @ @ . + @ & & @ + # @ @ $ # + @ @ @ # # + % ' - & = = * & * = = & % $ # # @ @ @ @ $ @ @ * & % $ # + + + + . . + % ] / - % @ & = @ . @ $ + . + @ $ & % @ # % # # % = ' % @ # + . . . . + # @ $ - ~ & $ $ # @ @ $ $ $ # @ @ + # # + + @ # # @ # + @ # @ + + + + + + @ # # # @ + + + + . . . . . . . + @ @ ~ ~ = ~ & = ^ ( ~ / < ) : } } } 2 s y q p > @ + . % ) 7 [ < _ ( : > _ , ~ ~ ' ^ - ; % $ # # @ + # @ @ @ @ + . ", "$ $ + + . . . . . . . + . + @ @ # & = @ . @ @ . + # - - + + # @ + # # + + + @ # + + & ~ ' = ; * % # # # @ @ % $ @ # @ + + @ $ @ @ & * $ $ @ @ @ @ + + + + & - - ; * ; * $ + . . . . . + & ' ^ ; # + + @ % - & $ . . + . . . + + . . . + % ; # @ # @ + @ $ $ $ % $ # @ @ + + + + @ # $ $ + + @ # + + + + + @ # $ $ # + . . . . + + + + . . . @ + # & $ ; ~ - { ] ' ^ _ < a e 2 3 e w s y z 4 / + . + & ] < < ) , , b b : : ( ' / / - & $ # # @ @ @ # # # @ @ + . ", "+ @ + + . . . . . + . + + @ @ # # $ $ + . @ @ . % - ^ ; @ $ * # + % * @ + + # $ + % = ~ ] { & # + . . . . + # # @ $ @ @ @ @ @ @ + # % = % @ @ + @ + + + @ % % $ # * { $ + . . . . . . @ { : , $ @ + . $ = ; % + . . + + + + + + + . . + @ # + . + + + @ # # # # # @ @ @ + + . + + + + + + + + + + . . # @ $ $ # % @ # @ . . . + . . . . . @ # + + # $ - ( : 3 / ^ ( _ ! 2 5 g 7 2 5 A t 4 a { . . + = / } } > b [ w A > } ! ~ ' - - ; % # @ @ @ @ # # # # # # . ", "# + + + + + + . . + + + + @ # # # # % @ . @ @ + % ~ ~ & % ; * $ $ % $ @ . @ * & % - { * * % % # . . . + + @ % @ @ $ @ @ # # $ # + @ # & * % + . + + @ # $ % # @ # $ $ + . . . . + + . @ = , ~ + + . + * ; $ # @ @ $ & & * % # $ # $ # $ * # + . + + + + # @ + + + + @ + + + + + + + . + # @ + + + + + % * & # + # # # @ + . . . . . . . . + + + @ # $ / [ 9 w ' ] ' / < 6 5 k 2 6 9 7 g 8 1 & . . + - < < [ 3 6 5 9 1 < b : / ] { ; ; & % # # # @ @ # @ @ $ # . ", "# # . . . + . . + + + + + @ # % - % $ $ + @ @ + % ] = % % * # & - $ @ @ @ $ % & & * $ # # # & $ . . . @ $ & * # @ # $ & $ @ # @ @ # @ # ; * + . + + @ $ % # + + @ + . . . + + . . @ % * = ~ ; @ @ + # * % # # # ~ 6 7 / ] ' ) : > _ { & % # + . @ + + @ # @ + + + + . + + + . . . . + @ + + + . + + + $ & # @ + + + + + . . . . . . . . + + + + # $ * / 1 0 e ( ~ = ' ( g k w a | 4 5 9 v 5 $ + @ @ - ! ) > b 4 i 9 7 ! 6 g 3 ) ' { - * % $ # # # @ @ + + @ # . ", "@ + + . . . . . . . + @ + @ $ % ; % $ # + # % # $ - ~ % # $ # % % @ + $ = * $ @ @ + + @ @ @ # + + + @ # $ $ @ + # & ] ] & + + . @ # + @ * ' + + + . @ * $ @ . . . . + . . . . + + % ; ' - { ; % & @ * * $ % $ * 7 B 4 , { ~ , a 2 } ] % + $ @ @ * $ @ # # + + + + + + + + + + + + + # @ + @ + @ @ + + . @ % $ + + . . . . . . . + . . . @ @ + + # % = _ b c 6 _ { = ; / g 5 3 > 7 2 C d t , . @ & * _ } > 6 [ 3 A 2 1 6 4 w 1 , - = ; * % # $ # $ # @ @ @ + @ . ", "+ + + + + . . . . . . + + + $ % $ $ # + @ & ' ; # # * # $ $ @ @ . . @ # @ @ + . . . + @ @ $ # + . @ $ $ # @ # @ # % / : & + @ @ # # # # & ; # + $ % # $ @ + . + . + + . + . $ # @ $ $ $ % % # % & $ ; & $ ; = { : ! , { & & * / _ ( ~ - = ; @ $ > : * # @ + + + + + + + + + + + + # % @ + @ @ @ + + @ + + # % @ + . . . . . . + . . . + # + + @ # % { } 4 h 5 ~ { = = > k B b b 5 c p 8 2 = . $ ' ( g 2 e e 1 6 1 7 6 2 g [ ! ( - * % % # # # & % # % $ @ # @ . ", "+ + + + . . . . . + + + . + % * # + + + @ % ' ] % + @ + + # @ + . . $ * + . . . + @ % % @ % ; $ + @ & & % & % % + @ ' { @ @ # + @ # # $ % & $ + % ; $ # @ + . . + @ @ + . $ : ^ * @ + + . . . + @ $ * $ # - * % * - * @ + @ % - / ] ] ] ' ' % $ < b ~ + + + + @ + # ; - ; # . . + % & # + + @ @ + @ @ @ @ @ @ + + + + + + . . . . . . + # + + @ # * / A h D k { ~ - / 3 C 0 g | 8 i d 2 g - . % ~ : w A A c 2 1 , ] b 2 < : , > ' * % $ # # $ & # # % $ @ # @ . ", "+ + + . . . . + + $ # # # & ^ ~ $ . . . + # * ' $ + . . . @ # + . @ $ * # + + + + # - { # * ; @ . @ & & % # # @ + @ ; * + & - $ + # $ % $ # @ + # % # + @ . . . @ # + . . ' 4 A ~ @ . . . + # @ $ & & @ + @ # $ + @ # + . + $ = / { - ; = * $ # ( / ' @ # # + @ # % * = ~ & + . + # $ # # % * # @ @ @ @ + . @ . + + @ $ @ . . . . . . + @ + + @ @ { [ 5 E F t : { ~ [ e c e 6 | 9 w g a } = # { : g d c 1 c k > _ ] 1 7 > ) ) ! ] = * & & $ % % # # # # @ # @ . ", "+ @ @ . . . . + + # # # & ^ } / * @ + + + @ # $ @ + + . @ # $ @ + $ * & $ @ # # + % - = # $ # + . @ % @ + . + @ @ @ & = $ * ] { + # % ; % # + @ @ + @ + . + . . . + . . # - e w ~ . . + - ~ ( , / { & + . . @ % @ . . . . . . @ % # @ = { % @ # $ $ % @ $ $ @ @ @ @ . + @ + + + + @ @ # & ; = & @ + + + + + + + + @ # $ + . . + . . . @ @ # @ # = [ k 8 G H I 2 , , g 8 2 c } 6 6 e [ ! _ ~ ] : e d u z k C 0 , / | r k [ > < > , = = { ; $ # % $ @ @ # # + + . ", "@ @ @ + + . . + + . + @ $ * ' - $ + + + @ @ + + # + + + @ $ # # # $ % $ $ + @ # $ & & * # + . . @ $ % @ . . . + @ # # % & @ & = $ @ @ * * $ @ + + + + + . . . . . . . . $ ' 2 4 { . + = > : } 1 1 < ] ; + + @ # # + . . + . + @ @ + + { ) { = & @ @ # # # @ @ + + + . . + @ @ . + + + @ & & $ @ + + + . + + + + + # # @ + . . . . . . @ @ @ + # _ e 8 t G J K k ( / 5 5 c C 3 [ 2 t 5 [ ~ , | e t p f G G L m [ [ 8 B 6 b b _ : , ] _ ^ * & $ $ # @ @ $ # @ + . ", "@ + . . . . . . . . . + @ # $ % & % + + + @ + # & # + . @ $ # # $ $ # # $ + @ # % % % & $ @ + @ % ; % . . . $ @ @ @ # % @ @ % & & # @ @ $ # @ + . . + + . . . . . . . + # - > > # . & > } [ a g e 3 / { # # @ % % @ + + + + & ' & . @ ; ~ ' ] ; # $ { ' $ + $ / - @ + + # * # + + + # $ $ + @ @ + @ + + + . . + # # @ @ + . . . . . . . + + @ % : 5 i d u M F 3 / ) 5 g 1 7 _ 3 c 8 e } ^ ] k 4 w G G N O P l 3 e p 8 2 2 | 3 [ ] ( > ' ; - % $ $ $ # $ $ + + . ", "@ @ . . . . . . . + @ $ & $ * - ' ; @ + @ # % & & & # + @ # # @ @ # $ % & # + $ % $ % & = * # $ $ % % @ . # ' ' { % # @ + # ; ~ ~ # @ @ @ + # + . # % @ . . . . . . + @ @ & ; # + @ { [ < > , ^ ] ] - & $ @ @ # $ @ @ + . + $ * # $ _ ) ( ' & # @ % [ a $ @ & ' { # . + $ $ + . + * = & % $ # + @ @ @ @ + . + # $ # # @ . . . . . . . . + + & ' [ 8 d C x Q C < ) 7 5 g 6 : , d o C 5 > ~ a C u 9 N l N R O o w t S B e k 2 b ! / ^ { * = { & @ @ # # # # @ # . ", "@ + + + . . . + . @ # * = % ; { - = @ + $ $ $ ; = - & # $ % $ @ @ % & % & % @ # # @ # & ; * # & * # # @ . @ ' : ) ~ & # # $ * ; * # @ % { ~ & # # ' ~ @ . . . . + @ @ @ % & @ . . . & ' ^ - ; % % ; # @ + + @ + + . @ @ . . # $ # / t 4 ( & @ + . $ ~ ] @ + + @ @ . . . + + . + ^ 7 ! { * % @ + @ + + @ @ + $ & % @ + @ + . . . . . . . . @ ' : 2 d w 9 m w 3 1 | k 4 | A < _ 4 o s e , , w G F l G m n T Q 4 8 j x p c i | 3 < _ ( - & = - & # # % $ # @ @ @ . ", "@ @ + . . . . . . # & % % & ; { ] & + # * % $ = - { ' & % & ; $ # = * # # # @ + # $ # ; % + $ & % % % $ @ . : 6 b ! / ( = $ % $ $ # # * ] / - $ - ^ * + + . . . . @ # @ $ % @ + + + @ # $ @ % % $ # + + + @ # @ + . @ @ . . # # @ { ! ! & + + + + $ @ . . . @ @ @ @ + + @ + + { 6 c ( * # @ % # + + + + @ # % % $ @ + + . . . . . + @ + + # ' 3 c t | 2 2 [ 7 e A 5 7 2 2 ! a 4 9 i 2 1 | j q Q U H Q H D I 2 t m S l z j c a ! ! ) ( ; ; ; * % % & $ @ @ @ + . ", "@ @ + + . . . . . % { ' = = ' { { $ + % { % - - = & ; # @ $ = & % = % $ @ $ # + * = * # + + & ; # ~ ] - # @ ^ | 7 3 [ < { & # % $ + + # { ' { & * = @ . . . . . @ @ # @ # * $ + @ # @ @ $ % * * % @ + + @ @ @ + + + @ @ @ + + + @ + + @ @ . . . + @ + + . + * $ @ @ + + + + % ~ > } & $ # # & * $ @ @ @ @ % = * * # + . . . . . . @ # + @ & ' ) 1 2 5 2 1 | t g e 5 } 7 7 } 5 c 9 9 6 5 5 j V K T W U X x j s 8 u y D j r 4 b a } / ^ ' * & & % % & $ @ # # @ . ", "+ # # + . . . . . % - ' ~ - ~ ^ ^ & @ ; ] - { * @ + . + + @ % $ $ % @ @ + @ # % ~ ) ~ @ . @ - = % ) : % @ $ ) k 1 _ / ( > : ^ * # . . # * ; ; $ @ + . . . . . . + # @ + % ^ ; @ # # # # * = - { ; % # & * $ @ + @ @ @ $ % + . + + + + . + . . . . @ # @ + @ # + @ @ + @ + . @ + + . + # $ # # ; * % @ @ # $ = - ; % # . . . . . . & $ . + $ - { : 6 6 2 | 7 2 1 3 g [ 2 a 1 0 A d o 3 | t j N Y M P P X v v m o d y Z u p 9 9 5 a _ ( { * % & & & % # $ # @ # . ", "+ # $ + + + + + @ # ; ^ ^ / ] / - # @ ' / ( ; @ + . . $ = & $ # # @ . + # % ; { ~ _ ~ # . & ' & & { * + @ @ > 2 ) = ~ ^ 7 2 [ * + + @ & $ @ # $ + . . . . + + . + @ @ @ = / - + . + @ = ~ - ~ ; - / b b ' & @ @ + + + # # @ # @ . + . . . . # $ + @ $ # % # @ @ + @ @ # + . . . . . + + @ + + + @ @ + @ @ @ @ $ $ & @ + . . . . @ ( % + # { ] ~ 7 6 e k A 5 | 3 ) < w d | A 9 4 d 8 9 c z N ` X H .E B v B y r h ..n o 9 t i 2 ) ) / ' ; & $ % % $ # # $ @ + . ", "@ @ # + . . . # & $ $ ~ ] , / = % + @ = ] - @ . . . + = _ ' & % $ . . + * = ~ ) ^ - - $ @ = ~ & & $ . . + + % ~ = @ # = > g , $ + @ % ; & # # $ @ . . + $ * & $ + # % # ; ' * + . + # ; ' ~ ; % ~ < k A { # @ * $ + @ + + $ ( ^ % + . . + . + % $ + # $ = ; @ + + # @ @ @ @ + . . + + . + + . . . . . @ @ @ $ # + # @ . . . . . $ - $ + % ~ ^ > a g | e k p t 6 _ ( A d d t 9 S f d 4 2 d ` D F T +.V I z e 5 i V P f 9 5 c g < > _ _ ' * % % % $ % $ $ # @ @ . ", "@ + + + . + @ - ~ ; $ # & { ] % + + + . # $ . . . . # ( < ~ ; * $ + + @ % = ] ( , ^ * + @ * = # # # @ . + # ; ' % + + ; ~ - & + + % / ^ % # $ & % @ # ~ : , ; $ + # # $ & & $ + + # * - & * % % % ; { ~ & @ # % % + + + @ { / ( = # . . @ @ @ # @ + @ $ & % @ # # ; = @ @ $ @ + @ @ @ + @ + . . . . + . + @ # # + @ + . . . . . # % + + $ = ( < b 1 k c t j p A > ! e 0 d 0 l V H i A A N @.V X #... .Z s g A 9 n n q p 8 e g < > : , / ; & * * $ $ % $ $ # @ . ", "+ + + + . # # % ; % $ @ $ - = # . . . . + + + . . . $ { ( ( { * $ @ $ $ $ * * - , : * . @ { - $ $ # # . + & ^ ] # + + & ~ = % # % ; ] - # @ $ & % $ ; ) [ ) $ + + + + @ # # @ + @ $ - = & & & ; $ @ # * & # # @ @ @ + + + ; = & # + . # * % $ @ + . + @ + + # % ' / - $ $ # @ + @ $ # + + + . . + + . . + + + + @ @ + . . . . . # $ + # % { ) ! } e 9 9 4 C j r < ! d j 8 w p Z v 3 2 A q @.` Y $.%.F I 2 w l n &.*.n j i 7 a a } < , ^ - { = * * & $ $ % # # . ", "+ + + . . @ % # @ # # @ $ $ # + + . + # @ . . + + + % - { ~ ~ = $ % % $ # # @ - , ! ' + # ; - = ; ; * # $ ( < ] # + @ % = = & ~ / ; ; # # & * * ; = * * - * . . . + . + @ . + @ @ # % % % ; ; * % # $ & $ $ $ @ + + + + + @ @ # + . . # & % % # # @ @ + . + # $ ~ a > ; ; % # @ @ @ + + + + . & ' # . . @ # # + % % + . . . . . + @ @ $ ' _ ) ! } 2 4 d z l S G 2 _ o F B C z C 0 k 5 d l L =.M .J N I 0 q P -.;.>.n S i e 7 b [ [ : ) ) _ { - - * $ $ $ $ $ . ", "+ + + + . + # # # # + + @ + . @ # + + @ + + . + # * { _ / _ _ % @ # # @ # # $ ' , > ' @ # & - - { ~ ] - - , { & # @ # & ; = * ^ , * @ @ ; , - - ] - @ + # + . . . + + + @ . @ % $ # % * = & % # % % ; $ @ $ $ @ . . + $ ' $ + # # @ @ % * ; * % * * % @ + * & @ $ ^ / & % # @ + + . . + + @ + ( ! % + # % @ @ + % $ + . . + . . + + @ % { _ > : a 6 6 8 f V p I z } 0 ,.h x d w C s t s I D $.'.).!.K ,.K ~.-.{.].W p p o 4 6 } > _ > < ) _ - - - % $ $ % $ @ . ", "+ + . . + + + + # @ + . . # @ & ; # . . . . . + & ' ) [ ! < ~ + @ + @ $ & % % ] _ ( = @ @ & - ; = ~ ] ] / & @ @ @ $ $ * ~ = * ( , % @ $ * ' & : 3 / # + # @ + + + . + + . . @ % $ $ % ; { ; $ # & & ~ = # % % % $ @ = ! ! $ @ # # @ # ^ / * ; & * = * # $ - % + . + @ @ . . + + + + @ # ; ' * { - $ & ; ; % # # $ # @ . . . . . + + # $ { ! 7 b 7 7 | i q n C p p 6 t D ,.H B B x u h S x @.^.,.J J .O )./.(._./.D q v u | k g ) , ) - - = & ; * $ # & % + + . ", "@ . . . . + # $ $ $ # + + # % * = $ + . . . @ ; ~ ] ( ! [ - # @ # + + = = # # $ { ^ = @ # % - ; = ~ , , { @ + @ # $ $ % - - & { ] ~ - & = { * ^ : ^ % # $ # @ @ @ . + @ + + @ # * ; * - ' - * * ] - ' - % * * * & $ ! A ^ @ # # # % $ * * % - = * $ % @ + @ + . + @ . + + + @ # % # @ $ ' / * $ @ @ & & & = { = % # # . . . + + @ @ # $ - 7 | } [ b | s v I p z i g c F :.).N l m X ^.h q E L P U <.#.~.[.}.|.1.2.,.y j 0 c 4 } ( ^ ( { = % $ * & & & * * # @ . ", "@ + . + + # * ; & % * % $ * * ; ; # + . . + % - ~ = ; ^ ( # . + % # @ > ) @ . . & ' * # @ $ * & $ = ) _ % + + $ & $ $ & ' ~ % # = , ' $ $ ; * * = * # # # @ + # # + @ @ @ @ # % { ~ ~ - - - - ' ~ = ; * = = = * $ $ e k - $ = % # % $ + + # ; ^ ( & # @ + + . @ $ # + # # @ @ % $ # $ $ ~ - @ + + @ % & $ - ~ ^ * $ $ + + . . + @ # $ & = ! 6 } | t i B j S p r i 3 5 V X ` f l q T V f Q I J .P 3.{.4.5.6.7.8.9.K x y s s A } ^ ' ' ~ & $ * * * $ & % % & $ . ", "# + + + + # - ' % @ & * & = - { * % $ + + # $ $ & $ $ ~ ^ # . + & % $ ) / + . . % ] - $ + @ # # + + & = @ . + # % % ; ~ / ] * $ - ; & # % % $ * & # # # + + @ * $ + @ @ # @ # = ~ ( ( - - { ' ' - - ; * ] ' ; - & * b k % & - $ @ # @ @ $ = ^ - = ; # + @ * ~ * $ @ + # @ @ @ $ # . + + + + + + $ & * = - = ; { % @ + . . . + @ # $ % = ] b 6 g 2 0 l s p f V h d } 8 Q U h N u y T Y v 8 n P !.T ~.0.a.b.c.d.{.e.f.f r f p 2 b ) ] - - * & ; & $ * & # # $ # . ", "# # + + + @ % ; @ . # $ % % $ & * ; - # + % $ + # $ ' : ) = . + $ % % * & . . @ % = { # . + + # + . + = = . . + # % ^ ! 3 , = ; % @ + $ ; % % $ @ + @ # @ $ # - & . + @ @ @ # = ( ' ] { = - ~ ] - - - ; = - - - & % - { # & & @ . . + @ ; ~ ] = % $ # + + * { $ + . + . . . @ # + + . . . . . @ ; - * # % ; * & @ + + . . . + @ # % ~ ] , g 7 3 e 0 G o B I l j 0 | w q X l Q h I Q ^.U G ` f.=.).9.g.h.i.b.j.d.k.f.y f m p t | ! , ^ - - = { ; & & $ # @ $ $ . ", "$ @ + + @ + + + . . + # $ # # # # & ; $ @ # # + + ; b 2 > = . + % ; ; # . + @ % ; = = + + # * { $ . @ < ! $ . . @ ; ( > < ^ * $ % * % # @ @ @ @ . + # % % % % { ] # + @ @ # @ & ( ( - { - = ' - ' ~ - ; * - * # @ @ # # @ + @ . . . + $ % & # # @ @ @ @ + + @ . . . . . . + @ + + + . . . . . # / [ * . . @ & % + + + + . . + + # - / ~ b 4 w } 4 0 o j m p z o z 0 I h q q V u f I h h q +.#.l.e.b.m.n.>.o._.p.2.T P V l l u e : ! > ' ; ; ' = & % & & $ $ # . ", "* @ @ @ @ + . + . + # # # # # @ @ % $ $ @ @ @ + + = a 1 / # . # - ] ^ ' = # $ $ % & & @ % - ~ ] $ . $ } a - . . @ ; , ! > { * @ & * & # + + . . . @ / b ^ * $ ; ' ' & @ @ # @ # * ; ; { { - ^ ^ _ _ ] ] = * @ . . . + @ # . . . . . + # @ + . . . + + # $ + . . . . . . . . # + + + . . @ @ # % ' , # . + + @ + + @ # + . . + + % ~ ' ( 4 r i 9 u v p v r p r w 4 t q f m V h s 9 l X V ` M '.n.q.r.q.i.s.j.t.q.o.u.!.V j V y w 3 ) _ ; & & ; ; & $ % & & $ # . ", "& # @ @ # + + + @ + # & ; ; % @ + # & & % $ + + @ & = { % . + ; _ < ~ ' { @ + @ # & * # * ' - = + + # / _ ; + . @ ~ 3 [ ) & + + # % % @ + + @ % # % ( 6 | = $ * = ] _ = # + + + + @ $ % & & ~ / _ / _ ' * @ + @ @ + @ @ @ % $ . . . @ $ % . . . . . . + + + . . . . . . . . . . . . . . # $ # $ @ + . + # + + + % ; $ + . . . . * { = / s x s 4 h V j s i u B | | e r m s S r t 4 l V Y D T ).=.v.w.x.y.|.z.A.m.A.[.*. .G V G 9 a _ ~ * & ; = * % # $ $ # % & . ", "% # # + + + + # % @ # & { = % @ + @ % & ; % + + # # @ $ @ + @ * { ; $ @ # + . + @ * ' = ; ' ' * @ # % ' ; + . . $ / b a ) # . + + * ; # + . # ; * % $ ^ | / & ; ; ' , ' $ @ # @ @ + + @ @ + $ - ^ ^ ) ' . # = ~ ^ : , * & / % . + + + $ $ . . . . . . . . . . . . . . . . . . . . . + . . . . + + . . + $ ; { * * * $ + . . . + = - & a d s d | r j r B i 4 9 2 1 ! : w 8 o 0 A 5 o h n ` #.B.i.4.C.v.<.j.D.E._.m.s.O .l I m w } / - * & * * & * & % $ # $ $ . ", "@ # $ @ . + + ; ; @ # % & # @ # % $ @ & = ; @ + @ + + @ # $ # @ @ @ + # % # + + . % , ] = , ) { $ * & $ @ @ & ' ' ] > ! ' + + . # ~ ; + . . . @ $ % $ $ ' ' * % * = ; % $ # $ $ $ # + + + + + $ * - ( = @ ; ~ ( < w 3 - ~ { @ . @ * ; $ + . . . . . . . . . . . . . + + + + + + + + . . . @ & ; @ + + # : 9 v 3 % @ . . . . + # = { ] 7 8 c 5 4 9 z 4 1 8 d 8 7 1 1 [ w 0 z w k C 0 f I Z F.8.G.g.H.(.;.I.m.J.K.|.n.J h j F G 5 } ) ^ ; $ % $ % = ; $ $ & = $ . ", "@ + @ + + + @ % $ + @ $ $ + + # ; % + # % * $ + + @ @ % & & $ @ + + @ & % + + + + + , : - ( ~ & $ # @ @ # ; , : ' ~ ) < * . @ @ + & $ . . . @ % - { & @ @ & # $ % % $ $ $ $ @ # % % # + . @ @ @ + # % $ * , [ [ 4 5 _ = ( ] @ + # a d : . . . . . . . . . . . . . . @ @ @ $ % # + . . + # ; ] { & & # = 8 N T l ; + . . . . + % ] { ] a w e | A i C d t s o e 7 6 3 8 v 4 0 t A C p j j n B./.5.}.o.L.o.%.:.3.0.h.=.!.F u i k k 5 } / ' = - ; * % $ % % % = $ . ", "+ + + + # @ + + . . + @ @ + + $ { * @ + # $ $ @ + $ $ % & & $ @ + + + # @ . @ @ @ + $ ; $ & % + + . @ & = ~ ( ] $ % ] ~ $ . @ # + @ * * # $ ; ~ ' ] - $ ; { & $ # @ @ % $ # @ $ & & * # + @ % $ $ @ # @ * 6 8 s x 3 & & ] / ; @ & 3 9 , . . . . . . . . . . . . . + @ # @ % % # + + # = ^ ] ( / - * & , t i Y Q , @ + + . . + % { * { b k k | 2 C i i x o p 2 b ! } s x v B p d d j r G H R ~.x.M.9._.I.w ) F ).%.N.O.,.x 5 w k | ! ! _ ( ' ' * & $ $ $ % & % . ", "+ + @ @ # @ + + . . @ + @ + + = ' $ + + # = * $ @ & ' - % & $ @ . . + @ % & $ @ % @ . + # $ # . . + # % & * - % @ + @ # + . + # + @ * { = & & * ; = ; ; ) _ ; # # + # & % % * ; * & * $ @ & { * % % # + + : i i } ; + @ - ^ & @ & - $ . . . . . . . . + + + @ . + @ @ + + @ % @ + ; _ : : , < > ; $ & > c g i v b $ @ @ . . + & ' - ( a | 2 6 5 9 A 4 o j q A 3 1 a k I S o r k c j m F K <.y.d.P N b.1.< & 8 O M M M ..X w a 3 b } 1 ) ^ ( ~ * * * & # $ & $ . ", "@ + + @ $ @ @ + . + % # @ # & = % . . . @ = - - $ % ~ ' % % * & . . . $ / , { & # + . # ( > ' + $ # + @ # # & & @ + $ % @ + + # & & * { ' $ @ @ . + % { ! - * % $ @ $ ; & ; { = * ; * & @ ; ^ - - ' { # . ; [ ^ + @ + + * % + + + . . . . . . . . . % $ @ @ @ @ # # @ . . + + + . = < b > > ( ; $ # & ~ ( ; ^ 1 / $ % + . . @ ~ _ { _ a A i 5 c 9 d f u h v 5 a 3 a t h z v u A c r x q ` h.=.<., / y W w > 5 n ..+.D X j 6 7 a ! ! _ ^ / ^ ' * & * * % & * % . ", "+ . . + # @ + . . + # # @ # % $ + . . . # * - ' ; $ & % # # & $ . + + & ] , } [ % . # ( ! | } * ; # . # & = ; % # $ - ; $ @ % ; - ; $ # ; % + # $ - , } ! * $ $ # # $ % * = & $ * ~ = $ $ * = * ) 5 a # . + % % . . + @ & $ @ + + @ . . . . . . . % - $ % - ; * * $ + . @ * & @ + # ' , : b > & # # $ % $ # $ * % # $ + . . $ , , ] 3 6 6 e k i s 9 s p G u } b | k i z s B B d z y x p Q {.#.r ' . # w S } g S +.!.O h z k c g : < ] ~ ! , ( = & ; = % * * & . ", ". + @ $ $ # + + + @ # @ + + + + . . . . $ ; & % % # $ % @ # @ + . + @ % { ] < b & . & ( ] ( ) ' $ . + $ * ~ { ' = ' - * * ; & * ; $ + # ; & $ * ~ } p A < * $ % $ $ % % = & $ # % & $ % % $ $ $ ' < ] + . . . . . . + . + & % + + @ . . . . . . @ = * # * ) _ - ; % $ $ * | s ; # $ { ] ' ( ( * $ # $ @ + # & @ + @ @ + . + & } > > e 5 2 e 2 9 5 5 | 0 r t 7 | 4 s i 9 s o k c f Q f l W (.P g # . . 2 n } b V +.+.&.` v p m 4 ! > , ] ^ , ( ' ; * & $ & % & . ", "+ + # & * @ . . @ $ $ @ + @ @ . . . . + $ % $ # @ # & & # + @ + . % ~ - ; * ] _ * $ # # * { ^ - @ . $ = = - ' : , ! > * = ] ~ % @ # $ * ; % * { ' : a > ' * % * $ # $ % % & $ # % % $ % % % $ # $ & # . . & * . . + # @ # ' ; + . . . . . . . + # $ # # - ) : { & * - } g 0 &.8 % * = = $ # # & @ + + + # { ^ $ + @ % # + + = ! > : 6 9 d A 6 6 2 5 c i d k 5 2 5 C 9 w v f d 9 j I l q R ;.F : @ . # c 8 < d @.O...L @.x u u c 3 : ) ( _ : ( ( - % & - & % & . ", "@ # % * & + . + @ $ $ # # & # + + . . + # # $ $ # % = % @ + @ $ @ - a 7 ( - - { { ; @ # & = - ; @ + & ' = & ' / ( ) ( ; - ' { # @ $ % % % # @ $ - ] ] { & * & ; $ # # # @ $ # # % # # $ % & # # $ + . . . 6 t + . . # $ ~ _ # . . . . . . . . @ @ $ = ' ) > / = % & , m x e 8 9 * + @ # $ # @ @ @ . . . @ ^ < > = ~ ] $ + @ = , < ( 2 8 c 5 e | 6 k i 8 8 e k A 0 t A 4 C I m i 5 C v f h.#.I , . . ; 4 8 b H P.=.$.'.F.F z d 1 ! a ! _ ) ) ( ~ - & & ~ - % % . ", "# & & & & + + + + # $ # * ~ * % # . + # % # % $ $ $ @ + + @ @ # @ ; _ ] = = ; * * * $ $ * = { ; @ + $ & % % ] / ) , ~ { & # # $ % & % @ @ + + # & - ^ ] % @ . # ; % & # # $ # $ & # % ; % ; % @ @ . . . + = ~ @ . + # & , > + . . . # # + . + @ # * ' ! 6 [ ^ - / 1 l x 3 ~ ; ; # + @ # @ # $ # # # @ . . @ ; ] ' ~ - @ @ % ' > ) ] a A e k 7 g w k o v t 1 e | e g e i 5 o x t w i m K 9.N.K w > , } | 7 ] } Z 3.s.B.9.Y 0 i w 6 b > ) < ( = - * ; ; { - & $ . ", "$ & % % # @ . . . + + # - { & # @ . @ $ % $ $ # # @ . + @ + + $ # @ # @ # & $ @ # $ & $ & ; ; $ + + + + + # ~ _ ) } : ; $ + @ # & = % @ + . + # & % ' { $ + # * ] - & # @ + + @ # # % * & $ # @ + . . . . . . + + + # % ; % + . . * g < . . + + % - ~ < 7 } ) > B H J w * % @ + # % * & & % # $ % $ $ # + . . + + @ # + @ * ( ^ ~ ' [ 6 g A a 2 8 k s v i 2 c 2 < 7 | v r p l C i t h J 9.B.M J N.n S v S 1 ] s W O.!.T n C e 7 a ) ( _ / - ; ; * = { ^ ; $ & . ", "& $ $ @ + + . . . + . + & % @ + + . + & ; $ # @ $ @ + @ % @ . = ^ ; @ % ; ; & + + # ; & # $ # + . + + . . + $ ^ < b _ ; # # # # @ @ + . . + # $ & * - * + + % , 1 ( # + + . . + # $ % $ @ . + + . . . . . . # { % $ % $ $ @ . . $ p n 1 . . . @ { ~ ; / : < g k W &.U 6 & # # @ $ = { { - = & % & % $ & # + + + . . + + + & ' = - ( b 7 g 1 [ 1 6 1 4 4 k 4 c 6 a e e p x S r p 4 0 U $.N.n.M V 9.%.n W h.'.f B z C q h h s g 1 3 : - & = - { = ; ; ; ] & # $ . ", "; & # . . . + + . + @ + % * + + . . + % $ # @ + + + + # $ @ + - > , : [ b b ( @ @ # * & + + . . . . . . . . % , , , % # $ $ $ $ + . . . + @ # % @ # % # + + # ( ! - # . . . @ # * * $ + . . . . . . . . . @ * ( ; & & $ + @ . . , O j ; . . + % / _ { / ! 3 8 z I E t = # $ $ % ; ' ] / ~ ~ ^ , ^ - ' = ; # # # $ + + + + * ^ ' ' < a b a < [ 1 2 e 0 8 3 A 4 | a e 5 z G r z d w u ,.:.P.#.#.&.&...o v +. .u r 9 _ u y u t 6 A A < - ; ( , ] ; - = ' { $ $ # . ", "- - $ + + + # % + + + . + # $ $ . . + + + . + + + + @ ; = * = { ^ 3 w 4 9 0 ! # + @ @ % $ . . . . . . . . & ! A ) = # % , = # $ % @ . + @ # # @ + + . + # # # # $ $ $ + + . + # ; * @ + . . . @ $ # . + * ' = * - % @ @ # + . % 6 v / . . + @ * ^ ^ > c r 0 B p o ( + + + % & = ~ ( / ) < [ < } : , ( = $ $ & ; ; % # @ * ^ ^ ] ^ < } 7 a , [ 5 9 t j 4 6 5 d 9 g 1 c B h B 4 8 i o ` +.F.$.{.v.I.4.I } 1 e 4 C r 4 0 I j u o c [ ( ^ < [ , / ] { ' ( - % # $ . ", "- ] $ . . . # # . . . . . . & { % . . + + . . + + @ % = ' ( { ; - 7 c A A 5 : # + + + # ; @ . . . . . . { 7 t 8 b % + . * & # # & # . + & & @ @ $ @ . @ * & # + . . # % . . # * & # + . + # $ ; & @ . + $ ; * # % % & ; $ + . ; c k + . . # & ~ ( , | S S u v g ; . . @ @ # % = ~ ( _ _ : [ } : , ( { * $ % - - = ; * & { _ ^ ^ ' , } 1 a / ( | k i d 6 5 0 s 6 2 c B B s A b A c 0 I W K L G.c.Q.R.n.p + ~ 9 p S y u v v l m 4 a : , ! ) ^ ( _ { ' - { % # # . ", "# & $ . . . . . . . . . . . ; ^ ~ $ . + @ # @ @ @ $ % * - / { & % { ! b } [ ~ # @ + + $ & @ . . . . . ~ s y N q c ~ + . @ # @ $ % $ # $ & $ @ $ - # . + # % @ . . . $ * # . # % @ + + + @ # $ $ @ . . . + $ $ # = ^ ] ; @ . $ ' _ _ # + + % - ] ( : j :.Y 0 i ) . + % $ $ @ @ = ' ^ ( ! b } ( ' { * % % % ; { ; * = ; & { ( ( = ~ ! 3 > ( , ! a A s A 7 w d t 2 6 5 4 c u w c 0 t B K @.q k ` S.w.A.T.~.! ] 9 S p J q s S j I B 6 < [ } ] ~ ^ ~ = - - - $ # @ . ", ". $ = # . . . . . . . . . @ = < | 1 & $ ; - & @ # % ; - - ' { $ $ ; ( : ^ ' = = # . + & % . . . . . % B @.n f E z _ @ + @ # @ $ $ * - ; @ + @ & - # . + $ $ + . . . ; = % + @ . . + + + + . . + # + . . + & * $ { ] ~ @ + ; / [ - * # + # * - - ^ b O |.l.8 , ; @ # = - = { ] ' ^ ( / g 1 1 < ^ ~ ' * % % ; - & % % # % = ( - * ^ [ [ / ~ / [ 1 A o 3 7 i u c c A 8 w 4 5 | p m 8 B Q Y :.y ,.U.V.W.X.Y.&.a 3 k e v S C v x j 9 < > ! / ( ~ ~ = * ' - ; # @ # . ", "+ % { $ # + . . . . + . . = ) s f 0 1 , ; - - $ $ % = ] ' - & @ @ % { ] ' { ] * @ + @ $ + . . . . # : h ,.y f E C ) # + @ # # # & & & # . @ % ^ ] + . + % = & + . @ $ & $ % { $ + % & # + @ @ $ / ; . . + # ; ; = ; # . % < > ( % @ + . @ & ; - ] c J %.s - . + @ * ~ / : a ! > < a 6 5 c A | } : ( { * * & & & $ # @ $ = ' ; - ] ) : ^ ~ / : a | 5 e | o q 8 t z 8 t i a > e z t r X ..R %.@.Z.w.`.E.R.#.i 2 p 0 g z z z l z k g 1 } , / ( ~ = - { - ; $ # @ . ", "+ % ; ~ - @ . . . . . . + ( 8 S S C C 3 = - { % % % = ^ ; $ # # + + ; ] ^ ~ { @ . + # # . . . . # ] 9 ,.P.*.Z G o ! % # ; % % & % @ + . + # ( 2 ) . . @ & { ' & + + @ % # ; , _ * * % @ % = ; { ) * + + $ * { { * & + . ; b / ; # . . . . + & / , i D s $ . . + ; = ( < b } } > } 9 t g A 1 1 2 6 / ' ; * ; & $ % @ @ % = - * - ] , > ( ] , < 3 2 9 8 w 0 s c 8 i 8 0 0 3 _ : 5 i y U Z :.%.N. +`..+++@+$.6 | n E 2 S G v z t 2 w e 1 ! _ ( / > > ^ = - & # # . ", ". $ = , = @ . . + + . . # : C G v B f t ] % * $ % ; ~ ) ; + @ % + . & _ ! ! % . . + % % + . . . * [ r .F.*.p 0 s ( $ # ; ; % & $ + . + % { e 9 > . . # = ' { { $ @ % ' = & ( / ~ % @ % ( ^ - = - # . + @ * ' ( ~ % . . ' > ' ; $ . . . . . ] A g i u _ . + @ - ~ ' ( > ) _ > ^ 1 c w A 1 k 9 | A e < - % & & % % & % ; ' ~ & { / ! < ( ] : b 1 | A e 8 p c 2 8 c w d B 9 3 ) e z Y M Q %.).{.#+.+++$+%+{./ ] k g ] t y x z i b 6 w c b < [ < ) _ ^ - = * # @ . ", "+ @ ; _ ; + . . . . + + # > z l B z f u < # @ + # - _ : = @ + @ + . + { _ ] # + @ - = & & + . + ( A j V z a = _ , # @ + $ ] * + . + . . = ) A i ] . . + % ' ( ^ $ @ * , - @ $ & # @ $ * ) < { * - ; # @ % ^ ! } a [ * @ < 3 * % # . . . . - c q N j > @ + + % { ' { ] / ] ^ ~ _ : 7 A g 1 0 C 2 6 d d : { % % = - ; * ; - - * _ ! [ , / ( [ < < b g 1 e 9 4 5 e A i 0 t k | > 7 o N W F X $.1.r.&+*+=+q.u.2 [ t 5 | 0 j p o A a a 6 1 } [ a > _ ( ( ' = * $ # . ", "$ % * & # + + + . . . . ; 3 8 r p S m m > + + + @ = , < ^ @ + . + @ # * ; & # # & ] { * * $ . . ' 5 w : & . . - 1 = % # # = $ + + @ * ~ ^ } 7 } ; @ + + @ * ] ' @ + @ % # + . + @ # _ 5 a ~ @ & _ _ ' ^ / ) } 1 i z ^ % e e & . . . . + < p @.T P X 3 . . $ = ~ ' ^ ) ) / ] ^ ) ! / _ ) > 3 5 ) > b 6 b ! ^ ~ = ' { # @ % = ^ ! < < > ^ ] 1 < 6 | 1 e 2 e i 2 e g w 4 6 k 1 a k v D M W R (.-+;+>+,+E.S.0.G w C n x s d y l u 0 w 2 5 5 1 < 3 b > / { - ; % $ . ", "{ ^ ; . + + + . . . . . ~ 1 g k i z z p ( # + + $ { _ b _ # + @ # - ] ' = % + @ * ; * & ; ; & + # ~ = . . . + / d 5 3 / & $ + + + & a 1 : ! ] * & $ # + + @ % @ . . + # # # + $ * / t 0 b & . # ] - $ ; % % ' ! o z - = A > % . . . @ g Y U L U y l 7 $ $ & = ' ' : a a : ~ / : : / < : _ / _ ~ ^ [ ) ( , > ) - & # + $ * & = _ ! } _ ~ _ < : | A k | k 5 8 A | | t A g 1 b 8 y i m W P &.n.v.'+)+!+S.t.v.I ; _ c k v B l l l i A A i k 6 a a [ < ) ^ - * % # . ", "- ^ % + + + + . . . . + ; > : [ | 7 5 a - $ @ + ; / < < ^ % $ * - ] / ( - # . + = ' # # { ' ; @ + + . . . . # 2 f o 9 > { ; # @ . ~ e a _ ~ # # * # @ + + . . . . . + & $ % & $ * b r v A b * * ; $ . . @ $ @ * ' ' $ & ; & - # . . ~ s J @.y F 5 ^ / > ) = & & ; ] ! } : ) > } : , [ 1 7 3 | A 2 6 [ ( ] / , * $ . + @ # @ $ ' < > _ ] ~ , [ 1 | g 3 g e 4 2 b b 1 6 e } ! c x 9 d I H P =.M.~+w.m.M._.{+B = & ; 7 Z q v v o 2 8 t o 7 e c 3 } < < , % % % $ . ", "$ $ @ + + + + + + + + + % ~ _ , b a 5 3 * % & = ^ > [ > * @ & ; - ] = ~ ~ # @ @ ] [ & # - { $ + . . . . . . ~ Y X 2 1 _ * % # @ + ] > ~ & $ # # @ + + # @ . . . . + # * % # & % ; } t j h f g ( = @ . + ; > / ( ~ - ' ~ $ $ - # . + } ` @.I k ' + @ { / ' ; @ @ & - / : [ a ) > 3 2 8 A d j t v B c a : / { ~ ; @ @ # $ $ @ $ { ^ ] / ] ' [ b 3 g e 2 g c 0 w > [ 3 7 g b b d u i p I W 3.j.z.A.H.n.#.$.` 9 [ , ^ 6 u S y V o e d d d i k 1 [ 2 a / ' * % & % . ", "$ # . + + . + @ # $ @ @ @ @ = > ! ] ) , ~ = - ^ _ ~ / ^ @ . @ = ; = & & = & $ # ; ! ' + $ % + . . . . . + . 6 =.P.k & $ # $ % & $ - ; # @ - & @ + @ @ # + . . . + % * ^ - # $ & * ' [ t q j e / = + . . ~ 6 A 6 z | 6 1 * % $ + + # } l g - $ . . . . + @ ; % @ $ ; ) [ 7 k A 2 9 0 x 0 o F 4 < ~ _ > : / ; - # @ % & ] _ ' < < % % - { ' : [ | A 6 g 6 A w b < < 7 [ ! : 3 8 k w p h D ~.2.c.]+&+$+5.u.f.m ! : 5 s B f X ,.G 0 p z 0 m 2 1 A 6 3 , ~ = & % $ . ", "& # . + . . + # % $ @ # $ # $ ~ ' % & ' ( ' = - { - & & @ . @ * ; $ @ # # # @ + % ~ * . . . . . . . . . # ' i ~.0.x . . + ] , { * # $ + . / i ] . # * @ . + @ @ & ' ~ : } { @ * - ; ] 4 0 < ' { % . . + ] [ b 2 o w [ ' @ @ + . . $ & % @ . . . . ; 7 b ) , ( { = { : k o j l u 4 } ) ~ ] ~ & + + ; & * { & % # % * = ^ ' * & & . . . @ = , ! e 8 6 3 6 A 7 < < } b [ _ , t i 5 t p E Y #.u.|.^+/+(+Q.A._+B.V _ 3 t u G V n h t s m r 9 w e 6 6 [ _ ^ ] { $ @ . ", "* @ . . . + + + $ @ @ $ & & & # # @ # ; - & % * ; $ @ % $ + # $ = ; ; # . + $ & & # . . . . . . . . . + = 7 s F !.0 . + - a ( ; $ @ @ + . - .V * & } } ^ * = / / _ < < > ] * ; ; * ; ' ' # $ * + . . $ ) 7 7 | 3 ) = . . . + . . + . . . . @ $ ( A 0 2 a [ [ > , [ 6 B V d k 1 ; . . . # # & ] [ A ( { ^ { % % $ @ + + . . . . . . . . & ' b 4 t g ! < 1 ! > < 1 A 3 : 3 S I o C G q K F.i.4.*+:+<+)+[+}+T._+n 6 c S l F E I C v v o 5 6 6 | k b / _ ( ' # + . ", "$ @ + + . + + . . @ # % = ^ & # @ @ $ # # # @ # $ # # # @ $ & # & * * @ $ * ' - # + + . + . + . . . + { [ k 5 g 7 [ * % 1 5 = . @ @ + @ @ % 5 l ~ ; c o j b ( < ) < [ > ~ - , 6 / % ; = & @ % ~ ; @ + # ( 5 c k 9 _ & + . . . . @ # + . + % { _ d o e 3 > > g 7 3 9 u s o | ~ $ . . + = ^ ^ < k t w e 9 C 5 ] % + + + + . . . . . . + + @ & } i e 1 b ! [ [ < : b 3 3 6 s l n p A S q X @.9.j.C.|+1+(+2+[+ +*+M.G z m V f Z F u F x u 9 | | k c | _ , { & @ # . ", "+ + @ # % + . . + @ # $ & ; # # # @ @ # @ @ + + $ & # + . % & $ * = # + ; ^ ; & . . + + + . . . . . & e I C : { { ] & $ ( ' @ . . @ % { - # @ ; # $ e 0 8 a ) ! b 3 < : _ a v S [ & ( g = * ^ : ( ; @ + ) c i o 2 , % . . . . + # # + @ & 1 1 A f r 5 e [ b w 2 8 x W 9 & + . . . @ { a 2 e C p u v o G W X ! + . . + + + . $ { , ^ = @ + @ - [ | 1 e a < > ! 7 3 1 g o r B B 4 c z x J =.d.a.`.|+3+4+:+5+`.E._.G b C ` W ,.V j f m r 9 c c 4 | } _ / ; # + @ . ", ". . + # % @ . . + @ % & $ $ $ # # # # # + + @ @ $ $ # @ . + = { ] { # @ & ; # @ . + @ + . . . . . + ^ t Q l ' % = % . + # % + . + @ & > ( . . @ % + [ 0 4 b > } 2 < ] / _ i I g ( $ * ' $ - > > : { $ + ' b 1 3 ' % + . . . . @ + . + % / 7 5 9 B 8 e 8 A C Q B m E ` 3 . . . . $ { 7 j U U %.f f S u ^.O z ' . . . + $ ~ , 3 r l 6 _ ^ ~ * % < 2 c 2 [ ) ( ) 1 6 b 3 z S z u r l r h +.{+8.O [.>+/+:+4+6+7+8+k.I ! k x V Q y p j j x u 0 A g [ : > ~ = @ @ # . ", ". + + + + @ @ + . @ % * * = * * % % # # @ $ # # # @ + + # * ' , ~ $ @ + & % + + . . + + + . . . . % 2 p I t ; & ~ % . @ $ + + . @ % { ! ' + + * - . ] 8 s 7 ) 7 w ) { ; ~ 5 > * & # . . @ - > ! > * @ . + * * & @ . . . . . . + + . + * : 2 c 5 t 9 9 o i d x y N m 6 . . . . + ( 2 n #.8.].s.Z x h X :.y ! + . . . . $ < 0 E l j t c j F x 9 e A 1 6 } > / _ a 7 g 2 0 u p I m S l l %.o.l.8 +.9+0+4+a+,+C.I.@.H d | p E n X f X Z v C d k 7 < a [ { % @ # $ . ", "$ % @ . . # % # + + # & - ^ ( ( _ ( = * & ; * # @ . . # * ; $ $ # # + + @ @ # @ + + + + + + . + . ] s l 8 ) * & ; $ @ @ @ . . + % ; / : ; = - ] _ ; = 2 A b 7 c k ] * & & & @ . + $ # @ # * _ / * . . . . . . . . . . . . . . @ # @ @ { 1 8 8 2 A k 5 2 3 ] = a < - + . . . + ; g E a.R.Y.R.$.,.D f.F.L f < & . . . @ * ! y W f 0 w I :.R +.n.V c g b ) : : _ b 1 2 g k i d m V G f F $.8.r A O.b+/+c+b+!+C.e.z y B 1 s F K V E D ^.f o B s 5 3 ! ^ & # @ # # . ", "~ ' % + . # $ % # @ + % ' ] - ^ / ^ ' & & * ; $ @ + . @ # + . . . $ ; & + @ * * + @ + + . . . + # a s c a _ _ & + @ $ % @ + @ % ' : a : - ) ! _ g g ] _ : < b 4 ! * ; $ % ; @ + @ & * = = = / ; + . . . . . . . . . . . + # { ' * $ $ ~ g w g 3 | 8 i _ $ @ # ; # . . . . . ; 8 f.{+E.++q.A.R Q P #.#.D G z _ . . . & w ,.J ^.r < 5 %.<.!.+.F.h | : / ( > ) : a 1 } g | 5 9 H P h x x :.P 8 p ~.K.3+0+'+++A...> g 5 a l Y E h E N I x 4 l o g : ~ & # @ # $ @ . ", "& = & + . + @ % $ # $ ; ( = @ & $ % * * $ % ; # + @ # + + . . @ + # = - % @ ; ; + + @ . . + + % , i o 2 ) ] _ { # # * { = @ % , 5 5 A [ ' < g ! 7 g > ] ~ { ' ~ = ; = & & = # + @ * ; / 1 b , & . . . . . . . . . . @ & % & ' ~ ; % * ) 5 4 c w 0 u c = @ ] ^ & @ . . + = e <.Y.w.J.E.%+x.R !.+.!.k.P Q ` X 1 . . + , G L U ` t , e G v X n 2 b 7 [ ) : ! ! b 7 3 7 a 6 5 z P P H r j f C G n !.p.}+1+}+7+H.f.d g : 3 r m V J D N Q 0 C j i 2 b ~ & # # # # # . ", "+ # % # . + + # @ $ { ] ~ ; # $ % $ # $ + # * $ + + $ = % @ $ # @ + $ ~ ] $ % $ + + + . . + + % 9 I C ! - ] / - # + ; 5 1 = ; ! A e 5 | ^ ! A a / a b 6 > , ] * ; ' = % $ # . . $ = & } 9 k 5 : $ . . . . . + + * % ' ^ * & ; ^ ^ ^ [ 9 r z C j N ,.4 - ; _ { + . / B J N.(.c..+d+++q.w.-+ .*.'.(.{+P V O o ' + @ > d f ^.x s | 5 C t [ t 6 b 1 3 ! / [ a > [ a 3 6 3 4 i v H ,.E x G u G L <.e.A.Q.e+b+f+K.[.U h A 6 S T H Y J K h j C S i 2 < ~ & $ % @ # $ . ", "@ + % & @ . @ # @ % ' ~ = % & ~ { $ # @ + + $ @ @ + # - * @ % @ + + $ * / ] = ; # + + + . + . ; 5 j z / $ = & # # + + [ 3 ~ & & : g g 3 / ^ : > ; ~ ! 6 ! ( ~ ^ { - & + + . . # ' - # ~ | i o 6 * . . . . . . ; 7 < ( ~ / ( ] } 2 b e 4 0 C x ` .W 3 & % @ + . ' Y -+C.Z.v.|.Y.`.}.G.1.I.N.G.g.1.'.K x c ( & + % | S j y d 2 8 G s g b ! : w d 3 _ ~ , ! ! a 2 | : 3 t w C Z F p o N F W :.$.d.E.>+g+>+&+h+-.G X B 0 +.k.).+.^.V f G m G w w b = # @ # # # # . ", "$ + @ & * $ @ @ + @ % & & $ ; ( { & ' * @ % ; & @ . . + + @ $ @ + @ @ % ~ ) : , $ . + + + + + = / < : ~ @ $ @ + % # . * [ ' + $ , 2 7 ^ ' { = { % + + ' _ ; - ( ] % @ + . . + $ ^ 3 ] $ [ A A 6 ~ . . . . . . $ ] ! < 7 w A 9 k a e t t w B ,.*.%.t % + . . & S h.L.z.A.g.L.|.H.t.R.;.-.p.H.b.b.&.f 2 ] ; & ; ~ ^ > c C o 8 k s C } g w g 1 C v 7 , ( / ) ! a e 6 , a 5 8 v K n C 4 m Z +.O.F.G.~+<+3+>+&+X.9.u Q y s W $.&.!.M X q u s | g g / $ # # @ # # @ . ", "$ @ + * ] * @ . . + @ # % & = ' ~ ^ > = # * = * # + + + + + @ # + + + % { > } > # . @ + . + @ & * ' { = ' [ 6 ^ @ @ . $ / = & < d 9 b ( - ~ ~ ; $ . . ( l i , { * $ # # + . @ ; ! 3 ) & & < e c g ( @ . . . . * ' / < 2 p u S 8 w 8 5 C x W f.:.s & . + . ( Y 7.J.T.p.q.W.c.H.v.i+H.a._.~+U.*.E k b ' ] 7 } , [ [ < b b / ' ] g B 0 w 8 t 0 0 t | ) ^ ^ > [ } 7 a / } 4 m ` M Y r o v X ,.U :.8.E.j+g+j+k+7+H.P :.*.q n O.).:.l.J V S 8 9 | > ; # # # # @ # # . ", "% @ + $ = * @ + + + @ & & - ' = % * - ; $ $ % $ # @ + + + + + @ # $ @ # - / > , & . + . . . + @ @ ; { ; _ 2 z 7 $ $ # # - * - ! e c 4 A : : < ; % # + ^ K @.C e ] % # @ + + # _ a > _ ( % ' 7 | w e - . + . . ~ > / : | z n S G U n f H &.4.z.^.* . . . { Q H.X.E.Z. +E.%+*+D.U.z._.5.X.J.o.p e 2 ) ' _ g C d e a b ! / @ . & 1 p G v l B o 0 s 2 , ^ , ! : < a / _ b s q F U y p j m n P .:.>._.l+g+m+m+r.E.s.&.L Q D L Y X ^.Q f C t i 8 ~ @ @ @ # @ + # $ . ", "& $ @ + # & $ @ $ # % ; = = ' ; + + & - ; $ $ # # + . + @ + @ + @ # $ $ % - ] ^ ; + . . . . . . . - , ' ' , g ^ = = & @ # & % - ~ 7 s t 3 / ; * = * ; ; ! g e n I / % + + @ ; & * _ [ a { & - < | < * # @ + + @ ; ~ b t r W e.L.M.x.L.[.n+ +I.A . . . . 3 %.b.d+f+r.Q.r.Z.5.H.6.}.-+j.-.q b / | S s a > 2 V y k g : > } - . = 2 r Q W f d C B l o b / / < , b ! ( ) a d C r S i i C S +.(.{.:.*.1.}+o+m+p+&+7+z.P T D ..<.O ^.` K Q C c d e ; @ @ @ @ @ + $ $ . ", "* & @ + @ % % $ $ # & { ^ ^ / * @ % % & & @ @ # @ . . @ @ # @ . . . # - { & # + + . . + + . . . # ( < { - { ( ( [ ^ @ + @ & = ; - b t A : ; # & ^ { ' ' ; # % ! c ^ @ . + @ $ # # , 2 2 , = * - ~ { * # + . . . # ~ 1 s x T x.6.5.q.8+M.i.Z } @ . . . { B O.-+Y.A.6.W.~+Q.H.[._.U.j.).k @ @ - < 6 7 > ( z ^.l | 6 / ( 8 r % % k n J ^.x G X H n m 4 / ] ^ _ [ : , > g e 4 f y 9 t d N !.>.n.;.8.m.p+<+q+j+]+7+p.:.L R l...P W U Q G l B A { $ @ @ @ @ # @ @ @ . ", "; % @ + @ % & $ # $ & ] ~ ' { & $ # + . + + # & @ + @ $ # @ + + . . @ ~ / ; @ + . . . # ' _ _ @ & ~ * # % - ( ) ' ; . . + $ = ' ] 3 2 ) { $ @ $ * = = & @ + . . & > ' . . + . . + , A A [ ( ' # @ - $ + . . . . & / } 4 j N -.L.X l u C 3 $ . . . . . < V N.i+{.#.n.G.[._.{.f.*.i.` t ) { = ' ( _ ) ^ _ s f 4 , ( / / G ,.$ @ 4 :. .N q ,.).>.&.,.d ! ( : ) ) ] ~ > | 4 z Q N o p u F J %.!.s./.}.$+e+b+e+d+r.b.f.*.%.$.+.X H D G h I l [ $ @ @ @ @ @ # # # @ . ", "% # # @ # * ; $ # & = ~ ] * + + + + . . . @ * - $ @ $ # @ + . . . . + % = % @ @ . . + $ > 1 b $ # # + # ' > g 3 & . + ] 6 b ] ] = - ^ @ + . + + $ ; = & + + + * _ 7 8 ] . . . . . $ b 8 e 2 / $ $ $ @ . . . . + # { e B p k o s ; . . # & % $ # + . $ 4 +.2.g.=.P.i.i.Y u z Z V o g b 7 : / ( ( ] < A | a g | ) ' _ < l Z ^ @ c @.M D L ).).<.u.!.l a / ^ _ / ' [ e 4 0 r p t s o s V T ).f.i.;.=.U.m+h+r+d+`.n+M I h &.:.F q Q n Q q i ~ $ $ @ @ + + @ @ # # . ", "% $ $ $ = ' = % # & ] ^ ] & . . . . . . . # ' ( - $ $ # . . . . . . + # ; * $ # . + + @ ^ 3 / @ + + + % , b A 1 ; . ~ C Q 9 , : ^ = & + . . . + * ' ~ ^ + . @ ^ 3 4 S } + . . . . . , 4 9 m 2 & $ # @ . . + + @ $ = 2 B v 1 ; # . + % ' 5 B 1 ( - @ % w f.N.B.B.{.=.V A i ` J Z 0 g 6 5 1 3 6 1 6 9 C 0 i t k < % # < q f ; $ m L l.T ^.F.M T 9.l.q [ ] ( / ] ) g | e r f z s k c f M T +.l.h.4.v.V.&+)+h+d+_.9.+.r s N ^.x x H T H f g & $ % @ @ + @ + @ # @ . ", "% $ % * { ^ - * - ] > ( - @ . . . . . . . + $ ' ~ ; ; ; * * $ . + + % ; { ] - ; # + @ - b t t b * + . - 8 5 g k 2 k o h S 1 - } > ; $ + + + + % ' ^ ) ! ^ # + ~ 6 x E a + . . . . . - 9 V M ` p 1 { + . . + + + @ = ! 7 6 } * @ @ ; ) g H F u c ) $ = B '.#.f.P. .t { [ T h.l.O .P F V f x N r u r r q Q l 2 - = , E M d $ % 9 ` ..L T J :. .W +.y a ( ) , ' a 6 7 A 0 o z z i C W h.$.l.$.2.m.S.#+}+<+6+@+{+d.~.G u y ^.` I ` W Z S ! $ # $ $ @ + @ + + + @ . ", "$ % ' ~ ] ^ { { [ 3 : ~ % . . . . . . . . . # { { ; ~ _ > _ { # . # ' _ ^ , ~ ~ & + @ { g l 8 i ! + . * 5 w a 1 p E v p 4 _ % ^ { = % + + * * = ' { ! 3 | ' . - 2 f Z g . . . . . . ) q Z +...H f < . . . . + . + ; : ! > / # . + { ! 5 W ^.Q n s ; = m F.M L +.B & ' F 4.N.9.h.l.R O ,.&.R ).j 5 2 A B u i a ( < m N 8 < # @ ( C n G V W M P @.f.n | = ~ ' { a | e 9 t 4 9 0 C z ,.9.P. .~.].S.R.q.X.Q.j+d+&.$.f.j I D ,.D n E V m w { # # @ @ + + @ @ # # @ . ", "% & ( , ( ' = ' [ } ^ ; @ . . . . . . . . . = ( = * ' _ } ! > ~ $ # = ( ' ~ ' - ; # @ % ~ a ) k d = . # g A a , 8 G 9 7 > = & & $ ] ] + . - ] $ # @ = _ > = . @ ) 6 ! ; # + . . . . 3 V n O W Z F : . . . . . . . * 1 < * + + . + ] k d q Z T O i - > D ).M T T 0 + ) F.a.=.+.K F ` ^.U T :.&.E o i o d 6 7 1 8 2 c 7 < ( # . , t B m F n q q K D f a - - ' _ } 7 | B d B p w S ` +.k.$.@.%.n+v.[._+X.r+)+%+9.=.n.z n <.O Q h N H l / # $ # + @ + + @ # # @ + . ", "* - , ) / ] { { _ ) ' @ . . . . . . . . . + & ' ; * ] , < [ b ) = $ ' ^ * - ] & & $ + + + . . g u _ . + b w b / } 2 _ ' ~ - { ; # { ] # . # # + + % * { : _ 6 / & & @ + + # % @ . . 3 K O <.T ,.X d { @ . . . . . & b a * . . @ * < 2 t v O <.L t ) d J T ,.T P t . & Q %.^.m l V +.<.@. .T T m 7 e o a A Q F r | w 0 l s > < p l v S S p 0 r I Q ` i , ~ ~ 7 A 2 c G x I z e f f.L #.L M $.L.4.k._+~+Q.}+q.N.s+~.y n O O W Q X ` o * # $ $ @ @ + + @ # @ + + . ", "= _ ) / > ! _ ] ( ' # + . . . . . . . . . . = - & - ' { ] ) , ( ; = < ) & = ] { ; * # + . . @ - < - + . ~ 6 > ' 6 A - @ $ { = { @ + $ # + + . $ * ] { = 6 v Q o % . + + + ; ] % . . [ q Z E Y D I v e * . . . . . ' 1 c / . . $ ] 3 1 8 S 9.i+'.l k Z M ).Q K N _ . . k H O H D .).W @.F.!.F d , 3 N h I ` O U 0 0 S f v 8 u v x n I v m t 2 } e s 8 a ' , 3 e s B p I q p B q ..M F.n.P.a.8+/.G.}.7+@+w.j.P.[.J I q !.P D X T H 7 # # $ # # @ @ @ # @ @ @ @ . ", "{ ~ { { : [ ) _ ~ $ . . . . . . . . . . . . # * ; , ( , b [ < / ~ ~ a b ] ~ > _ ~ ) ] + + + - ; & $ + + ; ] ' ^ w 2 = + % { > d _ . . + = ( @ $ ; ' ] ' 5 D %.G - . + @ + ; : ; . + [ t c 7 t h E j o ! @ . . . @ ) k 4 > @ . * ) 3 c s K 8+f+o.^.Z ..T O z 1 , # . . ^ v q X T ).:.Q l F ` i [ = ( G q E G H F.d k j Y S s G N y h l 0 O B ^ % { ! g ! ] a 2 A k o h F.h.O y F ` .R R '.=.s+s+].i+E.i+A.{+M R ).f t F X K Q Q 4 { # # $ # @ @ # @ @ @ + + @ . ", "- % @ # & $ * ; $ @ . . . . . . . . . . . . . @ ' [ ^ < k 2 g [ / - ^ [ 3 1 _ ( < ! ( = % @ # ; * + + @ # # % ^ e _ $ $ - _ 0 0 ^ + + & 3 6 - # % ' ' ' d P.9.i $ @ { * ; / 2 ) . % 3 | : 6 d r v q z 3 % + . . % 3 c c < # . ~ 7 6 s K R U.=+_++.B G q A ) ~ * # @ + @ : k x N j s 8 C y m t $ . ' S n p k C C } e B E j 9 h J ` Q E V W o = # ( ! g 7 [ 6 2 d s 8 M ^+(+t+V g j ..$.3.h.>.~.3.L.Y..+S. +I.<.+.f.Q v x X X X q } # $ # $ $ $ @ @ @ @ @ @ + + . ", "; # + + . . $ # + + . . + . . . . . . . . . . + * ] = ; ) : _ ^ ' { & : k 7 / > } ~ * < ~ @ @ ; * + + @ @ . $ ' < ' . % - b 5 ] @ + ; b o s 6 = * * { b m '.Q = . % ~ { ~ 1 o > . # } b < } 7 c B C > $ # % + . = b 2 | , @ & < 1 i B f.i.5.t+T.l.b # % # + @ + . . + . . @ ; ; % & { 3 4 3 , # @ , n (.).S s e < c o m m p h X W P L Y H u b < 7 1 w 5 a b 6 9 p v ).,+1+#+d . ^ F B.e.#.h.9.8.1.S.w.Z.d+U.l.....f d q F l ` f > % % % $ $ @ # @ # # @ + . + . ", "$ + . + . . @ @ + . . + # $ @ @ @ . . . . . . + # = ; $ # * & & ~ ' * ( ^ ; & * = + $ ~ * + * - & @ + # @ + # = ~ * @ @ { > ; # . # b w z v i _ * % = k r d ( . . = / ] , 2 C _ . * ! > * - _ ! C A , = * ) & @ / 7 5 [ * + % ^ 3 m ,.U &.2.w.D.<.( . . . . . . . . . . . . . . . . . . . . + ; 9 F .a.N.^.l d e d l u i 0 q V ).F.@.` T %.C g k 4 u c 3 7 d p r v K @.m ( + . + 8 u.u.N.8./.U.H.m.*+.+D.7.<.L ~.v d V ^.q x 5 { ; $ & * $ @ $ % # $ # + + + . ", "+ + + + . + + % $ . @ $ % $ & % % + . . . . . . @ = = @ + + + % / > - = + . . . # % & $ + + * * @ @ + $ # + # ; @ # ' ' ; $ # @ + @ ) 3 w B c ] + # = 1 4 ^ + . . ; ' ' ! 4 w = # [ , % % ( a e 4 z s / ( 1 ' & < 7 > $ . . + , z T .K +.>.@.0 ) + . . . . . . . . . . . . . . + ; + . { > 3 C s+Y.I.u.<.S i i 7 3 w 7 3 i q L y.O.&.@.U R X 8 k r X 4 < 6 C r 0 B F p ^ . + . * u k.s.n.v.H.R.}.8+8+q.Y.s+f.#.B.H x Z Q X ` ! & & & & $ # # @ # @ @ # @ @ + . ", ". + + + . . . ; ^ { & - ~ & * = & + + + . . + @ = { ' # . + # = ) : = @ @ + + + . & ( ' + + # @ + . @ % ; = * - { ] k e ] % @ # + @ ~ : _ { { - * { ^ 3 ! $ . . . % ' _ 2 z 7 @ * } ] + & | z B x m s / [ k b = - & @ + . . { C H M T Z O Z ; . . . . . . . . . . ; ! # + + % $ 7 P.f.l M u.d.5.,+&+7+}.k.%.<.V q r c b ) v *.~.R B.;.9.+.P Q k c I I d } 2 o l o 0 j z 3 % . . > <.d.8.8.g.H.i+b.U.8+H.R.1.>.$.l.Q Q Z I j u _ * & % % # @ # @ @ + @ + # @ + . ", ". . . + + . @ = ( _ - - ~ - ' = # + @ + . + @ $ ' ^ ^ & . # { ^ , ^ * + . + & { # $ ] - @ + @ + @ # ; ; - = * { < 3 u 8 { * $ # + @ * * @ . { o Q q C a { & + . + & - ) 2 4 ~ . @ % % . . ; [ k l r , ; b w 7 ; . . + & $ - A @. .` h 6 _ * . . . . . . . . . . . 2 ~.d = & a t :.`.)+W._./.1.~+X.J.G.>...4.p.e.e.:.p : ^ u !.J ).G.i.N.K x d i x G o 0 k o B G I y h f C ] + . 7 9.k.o.g.v.z.q.v.-+s+0.j.e...'.X X L n x 0 [ & ; & $ $ $ # # # # + + @ + + + . ", ". . + + # @ & { ~ ] ; # % & # + + + @ @ + + @ # ' / ^ & @ * ) , , ] $ + . + % ' % + & * % + + + . % = & $ @ + + = < 2 } % $ @ @ @ @ + . . . | e.H.H.i. .g $ . # % % ; > a _ % + @ . . . . + % _ 1 : # $ _ | ] @ . . # A u j r N j 5 / . . . . . . . . . . + + ~ / G F.X A ( g f v.`.6+b+V.6. +Q.m.P.W V ,.s.d.z./.'.m ) / m l. .@.Y E D W S i p x h I o 4 i x N Z X U <.,.b $ . , H n.M._+o.g.I.(.L.8.3.N.X K &.E h X n p 2 ^ = ; $ % & % # @ @ @ . + @ + . . . ", ". . + + # % ~ ~ = * % + + @ + + + . + + + + + # = ' & $ % ~ < ! ) ^ % + @ + + @ @ + + @ $ + # # # # % # . . . + & _ 7 ( % + + + # * # . . ; 4 P.R.V.g.>.v { $ % $ @ [ Z z * @ % # + . . @ ] 5 u p } # $ ^ w / + . . - S ,.y | ( & . . . . . . . . . . % 7 5 I M M C ,.J 5 / e y l.4..+}+$+m+c+6+n+N.~.J N.-+d.i.8.!.Y J f.` J M B 2 s ^.W F C u B i t t k 2 o I ,.K q q s ^ @ + + * 2 !.s+j.I.5.g.s+R s.d.J I J N y I ^.n a ; * # # $ $ $ # @ @ . . + . . + . . ", ". . . + $ ; ( ) = @ + # * & + + + . + + + + @ - ] / * + $ ( < < : ~ % * % + . . + + + + + @ % % # @ @ + . . + * g l S 0 ~ @ + + + $ + . + ( g G '.k.1.K a ( ^ % . . G ).h , ~ % + + + + * L b.A._+Z ) * { ( - + . @ b h 0 > $ . . . . . . . . . . * | G *.>.N.N.V W /.h ~ | p Y '.(.|.J.f+)+u+1+e+I.<.'.M.W.Y.R.].-.1.T.0.=.8.O.O E W ^.K l d f Y x 0 s 9 c t h J M n | - + + + + . . = Q I.s+}.n+4.B._+T.[.R #.n E ,...Z ) # # @ # @ + @ @ . + . . . . . + . . ", ". . + @ ; ] ~ ~ * # * ^ > ( @ . . + . + + # ; _ _ , = + $ ; ) } < { $ ; $ . . . @ # @ + + @ $ & $ # @ . . . # ^ i h 0 e ] @ . . . . . . + & ' : 9 C w { * - ' - # { n U 8 , ] # . + + . A Y.6+t+}+k+P # % # + . + ) A > @ . . . . . + + . . . . $ 9 J f.L R M W q {+N.~ * 4 I K O >.9./.|.Y.m+v+[+L.3.6.*+X.~+A.S.E.E.4.H !.j.d.;.i.W X Q h p I U M v z n x o V M W 9 $ . . + + . + + . } '.a.z.Y.}.}.6.J.N.l.R F q W O w % @ + @ @ + + + + . + . . . . . @ # . ", ". . . # = ^ * % { ~ ] ] ~ = @ . . . . + + # * ] ' ' ; % * ' _ 6 a % % ; + + . . + @ @ # @ @ % ; $ @ + . . + * a v h : # + + . + $ % % @ + % ] , / & . . . # < S f F K S ! ; ; @ + + . = e.j+'+5+p+^+%.. . . . + ] [ * . . . . . + + + . . . . ; c U %.f...:.<.1.p.'.a . & c ` .@.O._.Y.J.!+5+,+5.8+d+@+=+%+E.K.}+w. +n 2 h O.;.a.d.M G B 0 z q Q Z l i j d z Z M F = . + . + + + + . . . T h+m+}.n+U.6.Y.l.W U ` N U v { @ @ @ # @ @ + + + . . . . . . + @ $ . ", "@ + . # * $ + # - _ ] * # # @ + . . . . # & $ * $ # * ~ ) } : : { $ * = @ . . + + @ @ $ @ $ - ' & @ @ @ + + # ' } [ ; @ $ = - ; ~ ~ ) - + % ^ < - ; / { & - ) B y.8.0 > % + $ & @ . . } _+g+X.A.j.f { . . . * 3 A ' + + + + + + + + + . . . . > U 3.i.a.B.;.-+p.(.1 . % _ C ..;.a.k.c.&+!+,+5+,+J.l+/+t+<+=+-+Z.*+$+E.:.K H D .l.y.~.E t k m K O h z m j o d E .o + . . . . + . . . . . B.w+/+w.R.V.Y.8.Z H #.'.J ,.c # @ + @ # @ + . . . . . . . + @ @ @ # . ", "$ # + + $ @ + @ $ { & @ @ + $ % . . . . # = $ + . . * ) } b ^ ^ * # & ; + . . + + + + @ @ $ _ b { & ; * . . . . # & - * = ] = * = ( , _ # - ' % . ! P T Q 5 * - A v > # + + # & & = ~ 3 X F.F A ] + . . . & 0 V } @ . + + . + + + . . . . . $ q 8.|.J.r.A.5.M.E % $ - ' 4 O n.2.'.J b.r+^+m+'+l+*+>+e+t+c+~+|.E.6+e+=+1.'.@.j y l.9.$.J x m F Q E B C r m p t m v ) + . . . . . . . . . + e.x+4+t+%+,+W.L o D ~.&.V 8 { @ + + + . . . . . . . + + + @ $ # @ # . ", "& * $ # @ + # & % @ + + % * & # + + . . + @ @ % + . @ , > , - = & @ + # @ . . + + @ @ # + # , ! * * # + + . . . @ @ $ # # @ @ % * % ; * * ( ( @ + { f N.n.K g % + ; * = { $ # & _ | i I H } . . - - . . . ^ I t % . + + . . + + + . . . . . k s+q.~+r+X.x.e.:.a + = ^ b r P y.B.k.4.@+)+g+j+e+;+l+c+1+9+[+&+++m+;+r+X.-+F.n.$.O.!.:.h.f.$.P.T S k m X S E S 0 o ! . . . . + + + . . + . . =.0+x+(+u+9+i+c 4 U J W I [ # . + + + . + . . . + + + @ + # $ $ # # . ", "# % % $ % @ # = ' # . + $ & # . + + + + . + - [ ~ . # ' ' * ; { ' + . $ $ + . + + . @ $ # # ' _ * % + . + . . . @ @ @ + . + # % & % @ $ ; : , % + % g Y s.B.Q ; @ $ * ( , % # ) 5 s j X Q ( . @ / ( + + . { 4 b # . + + + + + + + . . . . % V -+5.7+.+8+J ) ' ; # + } F.B.h.{.k.d+v+9+v+3+c+^+'+u+a+:+v+t+!+m+j+m+E.#+q.~.u.9.2.%.Z L <.;.P.T n p n +.^.Y U m 0 ( . + . . + . . . . . . . #.|+3+y+>+t.<.} D ..y p } & @ + + + + . . . . + @ @ @ $ # $ # @ # # . ", "# # # % = & + & ] & + @ @ # # + + @ @ + + $ / 3 < * ; / } ; + * & + @ & & + . . . . . + @ + # % & @ . . . @ + + + @ * * - * % $ $ $ + + % { - # . % ^ | @...q & % { > ^ & + - 3 o 9 5 t 2 # . $ { < $ . . - ) ; @ + + + + + + . . . . + . : N.].s+_.}.h.u _ % # . & z u.{.B.g.++1+z+z+3+|+[+)+1+z+1+|+u+<+[+l+!+m+,+*+M.#.P.$.v.B.%.L <.0.s+N.y.h.O.y.#.Z Y W ^.3 + . . . . . . . . @ b F ++0+2+0+q+n+).F.h.P 0 ) + + + + + . . . . . @ # # @ @ $ $ # # $ # @ . ", "% $ % % & * # $ ' & + @ @ @ @ $ $ # ; $ @ * ) ! ' = ' ) ) - @ @ # @ @ $ & + . . . . + @ + . . + + . . . . $ # + . * ! : 5 5 A _ + + . . @ # # # @ * / ! g 7 ) @ = 8 a @ . @ ] [ c t i 0 / . @ { - ] # . # 7 , @ + @ + + + + . . . . + + . a l.N.2.$.d.v ~ - # # $ A @.[.b.Z.b+A+2+A+a+g+c+u+a+B+2+3+z+1+C+<+;+&+%+f+!+o.!.n.l.y.4.n+{.y.4.m.t.H.g.(.<.J .l.0.K.3.{ # @ . . . . . . C }+z+D+:+x+4+>+m+$+&+5.R I - . + @ . . . . + + + @ # + + @ # $ # $ # @ @ . ", "# $ & % & * % # @ + + @ @ + @ $ % % = - = ~ _ ~ ' ; $ ; ~ ~ % $ @ + + # # + + + @ . + % # . . . + # # # @ + + . + % $ = s n o > . . + # # # # $ - ~ / ! a ] # . * k , . . * ] ' ^ 9 j m _ . + & $ + @ + * 6 ] . . + + . . . . . . + + + , V !.~.~.&.M 7 % * ' & 7 M ;.}.b+(+y+:+z+|+c+5+q+9+o+|+3+/+u+o+z+z+q+l+]+X.[+C.d.[.P.R -./.(.h.a.H.g.g.{+F.K ~.8.|.K.m+5.d b - . . . . . . ` x+D+E+E+E+:+B+2+m+M.8.:.k # + @ @ . . . + + + # # @ + @ @ @ # # # # # # . ", "$ % % & & & % & @ . . + @ # % % % & ; ; - _ / ( ( % . # / ^ & # @ + # $ # # + + @ * < ~ $ . . + + # # # & & @ . + $ * + - a / + + . # & ; $ @ @ - , ! ) } , # . % , ! ! ~ $ @ @ < u d | , @ # ~ % + @ @ * - @ + . + + . + . . . + . # 6 D ~.%.Q t ) ; % ' d l p J *.i._+q+4+a+a+2+2+(+(+a+g+o+g+|+a+c+z+4+F+F+o+Q.,+c+z+C+G+h+D.-+B.'.=.G.s+(.9.^.z n.t.}.6.++m+i+>.T = . + + + . . d q+D+E+E+x+4+B+v+Z.O.F.k + + + @ + . + . @ @ + @ # @ # $ @ # $ $ $ @ @ @ . ", "% % % # $ % % $ @ . . . # * = ; * * { & * ' ' = # + + # = & # @ . + # # @ ; * @ & > b ~ # . . + $ % & * & * - ~ # @ - $ . . . . + % & & % @ + $ = / : } [ ) - @ @ ( 1 2 < $ . # b 5 ) ~ / % = < ; . . + $ @ @ + . . . . + . . . $ - 9 <.f.l 9 e * . . @ 7 F ~.(.P.%.$._+c+g+b+p+2+0+A+A+|+(+C+<+q+t+a+y+4+^+w.m+u+w.f+y+F+w+w+D+4+r.0.g.W.@+w.q.z.i+l+5+k+_+b.5.z.V.2.- . + + + + . $ o.D+x+A+2+2+(+^+W.3.V - + + + @ + + + + @ + # @ # + @ # + @ # # # @ @ @ . ", "# $ $ @ @ $ * & @ . . . $ ' ^ ~ ' ] ^ { % # @ + + . . + @ + @ $ # + + . + & { = = % @ $ + . . @ ; ; * & # . ; C C & @ + . . . . + - { & # + # ' | e } e 2 ^ $ # . ' < ! _ # . # - * % / } / ~ { # . . . + + @ + . . + . . . . + ( r O.Q 0 [ > ] # + @ / z .j.g.;.f.v ].4+E+B+A+x+E+E+:+2+v+l+[+9+c+G+*+R.M ^.e+y+q.k+0+E+E+E+E+F+D+x+z+:+w+D+D+D+D+D+x+'+$+r.6+u+w+D.{ . . + + + @ . e r+w+4+2+A+v+l+++u./ . + @ + + + + @ # @ # # @ + + @ @ # @ # @ # $ $ # . ", "@ @ # # # $ % & # + + . # ' { ( ( ( / ( - @ . . + . . + . . @ { - + . . @ ~ ^ = % + + . . . + $ ; & # @ + . & s n b $ + . . . . @ % % $ $ * > 6 f x S y S ) + . + & _ : < - # @ @ % ( k 9 } = @ + . . . . # @ + + + + . . + # ~ | Z <.A ) ~ % { { % ; a q :.>.P.%.U A -.1+4+z+g+o+B+x+E+x+|+C+|+x+!+).8 H f %.g+F+B+w+0+x+0+0+E+0+E+E+F+E+E+x+0+0+E+:+x+x+:+0+F+F+w+r+! . + + . . + + . J 2+0+x+4+2+(+m+D @ + + @ @ @ # @ + # @ # @ @ + + + @ @ @ # @ $ $ # # . ", "@ # # & % % * & @ . . . + % % ~ > : < ) _ = $ + . . . . . . $ ~ ^ ; + # { a b $ + + + . . . + $ * $ # . . . * [ : ) ' # + . . + $ $ @ $ ] < 8 j x G E T m ( + . @ { < } 1 i | # . # [ o 3 $ + + . . . . . + + + + + . + . + - 1 4 S j } ^ % & > < ~ ] t Z J O '.2.^.f.r+1+(+o+'+^+l+6+u+H+u+4+D+;+S . # W C.`.;+B+F+E+x+B+H+0+E+0+0+0+E+0+0+E+0+E+x+|+:+0+E+:+0+x+D+^+k . . ~ :. .~ @ . b }+D+x+y+y+a+u.' . @ @ + @ # # @ @ $ $ # @ + @ @ # # @ # # + # % # # . ", "@ $ $ % $ & % # @ . . . . @ # % ] < [ _ / / ( * . . . . . . $ / , ~ ; ^ 1 5 7 { + + + . . . @ # + @ @ + + + % # * ( > & + + + + % & $ ' 1 d ` H o 9 S ^.r * $ ' ] , [ | N %.F & . # | A # . . . . . . . . + + + + . + + + . - 2 A B e & @ & _ k 1 > [ e f ..u.U.n+w 0.E+x+4+z+9+'+b+r.$+6+<+:+D+v.% . . #./+Q.W.v+w+0+0+;+5+w+0+0+E+E+E+E+E+E+0+E+0+:+0+:+:+:+x+x+D+[+6 . . i 2+D+a.@ . . (.B+H+3+0+W.^ . @ # @ # @ $ # @ # @ # # @ + @ # @ % $ % $ @ # # $ $ . ", "$ & * % @ % * @ . . . . . + @ + & , [ / > _ , ' . . . . . . & , ( ; ' b 4 2 } ~ ; & @ @ @ + @ # $ % @ + @ % * % - / , ' @ + + + $ ; } C r C G B 4 i f G 3 = ^ : < < [ 8 +.N.F * . % , = + + . . . + . . . + + + + + + + + . ^ s c w - . ; b g w 6 | b b D L.#+w.H ) 7+D+:+x+E+0+/+q+m+q+5+3+E+D+++< . . 9.D+t+7.9+D+E+:+>+2+E+0+0+E+E+E+0+0+E+E+0+x+x+x+x+0+0+0+0+D+B+x . . u /+D+v+S . . s D.>+B+r.l + + + @ @ + @ @ # $ # @ @ @ @ @ @ + @ # # # @ + @ @ # $ . ", "$ $ & % @ # # . . . . . . . + @ * / : < 3 : ^ % . . . + + + # % % & - ! b ( ~ = - * & $ $ # $ @ # - & @ % & * % & ^ , ! & + + + . ; G .V z i w 6 e z w ; & ] , ! a w m T +.t $ + # % + . . . . + + + . . . + + + + + @ + @ ( e : & . @ ( b b 5 s 4 c V 4.h+l+e.a *.(+y+y+:+0+0+:+/+(+<+5+v+0+D+V.] . . l (+:+Z.e+D+D+0+F+E+0+0+0+E+E+E+E+E+x+/+A+y+4+y+:+0+0+0+0+w+0+n . . x 2+w+D+c.; . { i+D+>+^.. + # # # + @ + # $ $ # @ @ @ @ @ @ @ $ # # # @ @ + @ # $ . ", "$ % & $ # @ . . + + + . . . + # * { < a a < { @ . . . @ & % # % * - ^ > ^ ; * & & ; ; & ; & & % ' ' = % % & & @ $ ( } 6 ) + + + . ; s ^.J l p 4 7 , ( & + % ' ! ! 2 I P J Q | . . $ ; # . . . + + + + . . . + @ @ + + @ + + = ] = + . # ) _ 6 t F n J {+D.v.H.E p ++4+/+0+y+:+x+0+v+B+B+|+9+(+D+D.= . . = H.o+t.&+f+T.A+w+E+0+0+E+x+x+E+0+F+(+u+B+0+E+E+0+0+0+E+0+F+F+L . . l A+w+F+(+v . # u.H+i+} . @ # $ # + # # $ & @ @ @ @ @ @ + + @ @ $ $ % & @ + + @ # . ", "@ # % % # @ . + + . + . . . . @ $ ; ) ! a / % + + + + % ] * @ * / ( : ) ' ; & % % = * & & $ & ' _ , / = * ; & + @ ~ 7 7 > @ + + $ ' ! z z } ~ ~ { ~ ' # . % 8 O q I T @.O z ~ + . ; ~ # + + . . + + + . . . . + @ + . @ + . @ $ # + . ' , * | J ).~.-.q.n+5 M j *.B+E+/+0+:+x+0+0+y+:+0+x+B+A+0+)+3.c 0 V q.A+f+]+8.< /.x+F+0+E+E+x+x+x+E+E+A+x+E+0+x+E+E+E+E+E+0+0+D+/.. . A t+F+E+D+-.. . 0 -+H * @ + @ @ @ + @ $ & % + @ $ # @ # @ + + @ $ % & $ @ @ # # $ . ", "+ @ % $ @ + . + + + + . + @ . . @ * ~ / > ] $ . + + @ # ) ] # = , : } ) ~ * % % $ * & # # % ' / ) [ / ; % & $ . + { < [ / $ . + * ) < b , $ . @ * , ( # . $ l 3.%. .@.J F e ~ $ . % * @ + + . + + . + . . . . . . . + + + . . + + . $ [ 3 _ v ~.v.a.o.4.u.S 1 z q.o+2+3+x+x+0+0+y+E+0+E+0+E+y+y+x+y+<+1+4+:+:+a+1+q+m.K d.F+F+E+E+0+E+0+E+y+0+F+x+0+E+E+0+0+E+0+E+E+D+~+{ . 2 X.0+E+D+p+8 . = w _ @ @ @ @ @ @ @ # # & $ @ # $ $ @ # @ + + $ % % % & % # # # $ . ", "@ % % @ + . . + + @ . + # % + . + $ - ( : : % . . @ # # : 7 & - _ ) ( ~ - % $ % $ & $ @ @ * ] _ ^ ] ~ * @ @ @ . . % ( ) ( % + . ; k d k _ + + @ ~ / ' # . $ n G.=.J W V T j 2 * . @ @ @ + + + @ . . . . . . . . . . + . . + . @ + + ' 1 x E 8.z.p.-+[.s+a.G ~ s 8.p.T.z+0+:+B+B+3+E+0+E+0+E+0+0+x+E+w+w+w+F+:+3+a+z+D+'+R Y.w+E+E+0+0+F+9+!+A+y+B+1+:+0+E+E+0+E+E+0+D+u+5 . Y :+E+F+D+B+K . + @ + @ @ @ + + @ # @ @ @ # # # # # @ # # @ + @ # # # # # @ @ @ # . ", "# * * + . . . . + + @ @ @ # # + + @ % = ] b ^ . + % % $ , 2 ' = ' ' - = $ @ $ $ $ $ # $ % ] / ^ - = / ( ; . . . + + @ * % + . + ' 0 Z 9 = . + { > / = % . & y d.v.9.L J R y.T 5 # . . + + + . . . . . . . . . . . . . . . . ( ) # + ) Z B.s+-+A.5.{+/._.P ( + & , s.'+E+0+A+H+1+4+E+0+x+0+:+0+0+:+E+E+0+E+E+F+0+H+|+D+c+Y E a+D+E+0+E+w+i+j.q+:+A+g+A+F+0+0+0+0+E+0+D+[+7 . Y D+x+E+D+[+I . + @ # @ @ @ @ + @ @ @ @ @ # # @ # # @ # $ @ + + $ $ # # $ @ + + @ . ", "# * % . . . + @ # @ $ & @ + # # # + $ - ^ } ( + + % * ; = ) / - ; - - { $ + + # # $ $ # = _ ' - = ; { ^ ' % # + . . . . @ + . + ) G q _ . . $ ) } > ^ ; & % a L i.N.P U U k.v.2.v # . . + . . . . . . . . . . . . . . . . . { { @ % e s+m+E.s+z.S.;.O.y , . + . 5 &+D+E+x+0+C+(+E+:+3+B+4+A+x+0+0+0+0+E+B+:+0+F+B+l+6+c.e * a.|+0+x+0+D+i+!._+1+y+y+:+E+F+0+0+0+E+F+D+U.@ . 1 f+B+6.a.W ) + + @ # + @ @ @ @ @ # # # @ + + @ # # # @ @ @ + @ # $ $ @ # # @ . + . ", "@ $ + . . . @ ; ' - ] ~ ; # + @ $ # # * ; # @ @ & { ' - ; { _ ! ( - ( / { % . + @ $ % ; = ] { ; - * # # ^ ^ - - . . . . + . . . ^ l t $ . . ; 3 | 6 | ! ~ * . - z Z L n P (.S.E.*.# . . + . . . . . + $ - $ . . . . . . + + + . . + ] s.d+|.&.n+1.&.i % . + + . K u+D+0+x+:+3+4+0+x+B+z+3+y+:+0+0+E+:+/+9+v+:+F+c+R C M.-+e g ]+E+y+x+E+E+@+i.t+B+4+0+G+g+w+0+E+E+|+H+n+@ . % 7.D+^+8+-+m @ + @ @ @ @ @ @ @ @ # $ @ # @ + @ # @ % # # @ @ @ # # # @ # @ @ + + . ", "+ . + . . @ % ' ~ ^ , ^ ^ ~ % . @ + + @ # # # $ ( , / ^ - ~ _ [ > ^ ^ , _ { @ + + # & * { / ^ { - - + + : > & % + . . . . . . + ; _ = + . @ / e 5 w k | : < { + . ; 4 n P k._.S.X . . . . + . . . . . - 7 | ' . . . . . + + + . . . a {..+s+9.z.[.T ' . + + . ^ b.3+E+E+0+B+o+x+x+E+E+2+A+E+E+E+0+0+0+(+@+W.q+4+3+~+<.v.D+G.z l+:+B+0+0+E+4+5+A+F+x+q+}.>+D+E+E+D+]+1.-.~ . @ 1.C+z.8.O / + + @ @ @ @ + @ # # @ @ @ @ + + + @ @ $ $ @ # @ + @ @ # # % @ # @ @ . ", ". . . . . @ & { ' ^ _ ~ ^ [ ~ + . . . . $ = * - ^ ) ! _ = - _ : _ ] { ~ ] - $ # # @ $ & ^ ^ = & $ * ' ( ~ * @ + + . . . @ + + # $ @ + . + - b A A 1 g A 1 } ) # . . . ] 7 O a.l./ . . . . . . . . . . / p j ] . . . + + + + . + + + 6 >.8+L.{+7.q./.t @ + . . w E.(+4+/+4+0+/+2+y+E+0+:+y+3+x+x+x+0+F+F+2+b+ +$+:+D+:+f+j.Y P.'+x+0+E+E+0+F+D+w+4+5+2+4+0+0+E+E+0+D+>+-.[ . @ O {+d > * @ + + @ @ @ + + @ @ # @ @ @ + + + + @ @ # $ # # + + + # # # $ # @ @ # . ", ". . . . . + & = - ~ ^ ^ / ] - # . . . . @ ; = - ] , / ^ ] { , ) ' * / < ) ] % $ & @ # { ] ] & @ . & ~ / * & & & $ . . + - - $ @ @ + . . $ < 1 5 e 3 e d k : ] & % ; @ . . ( f } . + + . . . . . . . . ] D N - . . + + + + + + @ @ = , p ~.9.4.5.*+h+L.] . . ; e.)+3+(+5+|+A+B+B+x+0+E+E+x+B+u+e+9+v+z+x+0+4+'+>+B+E+F+E+h+T.,+B+x+0+E+E+0+E+D+g+`.B+0+E+0+E+w+E+y+k+{.f > + . ~ < { # @ . + + @ # % @ @ # @ @ # # @ + + + @ @ @ # # @ @ @ @ @ @ @ # # $ # # @ . ", ". . . . . + # * ; = ; { = & % # . . . . . % - _ ( ~ - ' ( ~ { = % @ ] ! ) ^ & % % $ % { { ; * @ . % - % @ % = ~ - @ + + ^ > # + + + . # / 3 7 | 2 } e 5 | / & - ^ a = @ @ . + + . + + . . . . . . @ % [ K p # . . . + + + . + . $ B q 0 Z &._.-+@+^+|.[ . . _ S.y+B+3+z+2+y+4+a+:+D+E+E+0+E+z+[+[+e+]+3+y+v+y+4+0+F+E+0+w+D+F+F+F+F+w+0+E+E+D+j+c.u+x+w+E+x+/+m+;.p ] - & @ . + . . . . + + # $ @ @ @ @ @ + @ @ @ # + + @ $ # # # # + @ @ + @ # # @ $ & $ # @ . ", ". . . . . . + & - ; & & % # $ @ + . . . . + { ) ^ - * ' ~ ' = ; * @ ; ) / ' * % % & * % % % ; % + @ % + @ % ' / ] % + $ ^ ' + # % + . @ / a b 1 w w 5 e 3 ~ % # % ; % $ + + . + + + . . . . . . . . # _ 9 ) @ @ * @ + + . . . & 2 L =.%.~.1.U.5.r+%+8+B . . [ T.(+G+[+q+p+}+p+}+%+}+(+0+F+:+C+h+9+w.'+0+0+:+3+o+H+x+w+D+D+E+y+A+o+G+4+F+x+0+E+/+p+X.b+a+F+b+L y S 9 _ % @ + . + + + + + . + @ % # @ # + @ @ @ @ @ + + @ @ % # @ @ @ @ @ @ + @ $ % $ % $ $ @ @ . ", ". . . . . . . $ = = - % % @ @ @ + + + . . . @ ; ' - ; - = & ; ' ^ * = ' ~ ' { * & ; = * & % ; ; % + + + # * ^ ) ~ $ @ $ { * + # / ~ . . $ ~ : 7 | 2 | [ , & + + . . . . + . . . . . + . . . . . . * ; % ; # @ - e ' . . . . . 1 D 9.2.e.|.j.L.R.D.D.7+l.= . d ]+]+H.n+Z.c.0.j.4.v.I.]+;+o+>+++=+J.E.(+w+E+x+o+p+)+y+[+@+~+^+Q.6.R.-+V.1+y+F+D+F+q+X. +@+#+8.7 & [ , & @ + + + + + + + + @ @ @ # # + + @ @ + + + @ @ + # $ $ # @ + + + @ @ @ @ # # # # # @ @ $ . ", ". . . . + @ # $ ; ; ; % $ # @ + . + . + + + + $ ; % & % @ @ = > A b ] ' = ; ; * ; = * & % % ; = ; $ + + + = , ~ = & % $ % # + @ [ 8 ^ . . @ = ) } < ) < ( $ . + . . . . . . . . . . . . . . . + $ { { @ . + @ ' / # . . . + ~ m O l.s.{+{+/._._+R.&+G+Y.~.w a s.#+D.v.-+E._+s+-.0._._+B.%.k+3+'+{.Y.1+F+0+a+[+q+2+y+B.< 4 l.|.e.<.~.L.#+u+H+U.k.8.%+]+e+R r 9 < , % + + . . . + + + + + + @ # # @ + + @ + + + @ @ @ # # $ & # + @ + @ # # # # # # @ @ @ @ @ # . ", ". . . . + & & & - ; % % + + + . + . . + & { = ; & # $ % + ; > 1 t a - * $ * & & ; = * $ % # % ^ [ 3 ~ @ + $ * $ @ * , ~ + + . + , 3 [ & . . + $ ~ ~ ^ ~ $ . . . . . . . . . . + + . . . . . + . # & # . . + @ $ # + . . . @ v ).~.[.-+G.s+R.S._.,+c+G+m+)+I., ^ G O d.E.k+=+f+C.4._.'.b Q [+D+(+j.A.6+v+w+/+m+|+D+D+x.g a B P R n y 9.U.7+-+w : U 7+++s+o : [ / % + + + . . + + + @ @ + + + @ @ # @ + + @ # @ + + + # # # @ @ @ @ + + @ # # # # @ @ # # @ @ @ . ", ". . . + # ; - * ; & # @ + + + @ @ + + @ ^ > _ ^ * & @ . # ] < e a * $ * $ $ $ & { ' = % # + @ ) 5 d , $ # @ + + . $ 7 3 # + # & % ] ] & # + . . + * ~ & @ + + . . . . + . . . . + + . + . . . . . + + . . . + + + . . + + & g v !.|.Y.g.a.o.4.o.w.^+e+<+H+3+|.s ; 5 0.C+v+z+F+3+=+1.l | t.0+x+0+G+f+c+t+b+o+p+Q.F+|+_+` o v C !.<.8 W o.(.r Z I.W h h 3 ( = $ # @ + + + + + @ + @ @ @ @ + + @ + @ # @ @ @ # # @ + + @ @ @ + + @ + + + + $ # # $ $ $ % % $ $ % . ", ". . . + % & * * & % @ + . . . $ - $ + * ] ( , ^ = % . . & _ ! g ~ . . & * $ % % { ' = * * $ # = ) _ ' = ; % + + + # / ] % . & ^ _ : - $ % # + . + ' ^ = ) } ] ; + . + + + + . + . . + . . . . + . . . . + + @ + + . . + . / A k S F.I.i+1.z.-.[.S.h+g+G+t+r+6+X._+$+A+0+F+E+2+W.N A ; < $.e+x+w+(+]+l+]+a.&+^+;.O.F C J H f n {.7.S ^ j J +.=+B.$ . # - # # + + + + @ @ + + + + @ @ @ @ @ + + @ @ @ @ # # @ # $ + + @ @ + + @ @ @ + + # # @ # $ $ & * $ # # # . ", ". . . + % * & % % $ # + . . @ - ~ * . & ~ - = = = @ + $ ' : > ~ * @ . @ & & % * { * & { % # % & { ( ' ~ ( * + + @ $ & * # . + & ) g { & # + . @ @ * ] > 8 o c k _ . . . + + + . . . . . . . + + . . . . . + + + + + . + $ k v o k o <.9.].z.d.(.R.g+c+b+#+r.*+h+E+E+F+w+E+y+v+_.< . . . ) 5.1+v+A+<+C+v+<+u+o+c+E.r ' z I I N y.q.<.3 a h H.a.^ . + # * & # + + + + + + + + + @ + @ @ + + @ @ + + @ @ + @ @ @ # @ + + + @ @ @ @ @ @ + # @ @ $ # $ % & % # # # . ", "+ + . . % % @ @ # % $ + + + # - ' - % % % % $ # # + # ^ , > ] % # $ % % * ; % - { & & ( ; % % % ~ < { ] _ ; + @ & ; * * ~ * + + = / * + . . . + . @ / A 0 p o c 1 $ . @ + + + . . . . . . . . . . . . . . . . @ @ + . $ a 9 i t i o G f L ].c.Z.r+^+l+`.b.p. .r E.D+F+H+w.w.g+e+h . b f c P m.Q.a+D+E+:+w+w+x+F+D+b+V c l Z Z h *.%.w A H U ) . + + + + @ + + @ + + + @ @ + + @ @ @ @ + @ @ @ @ @ @ @ # + + @ @ + + + + + @ @ @ @ @ @ @ @ # $ % # % # # @ $ # . ", "@ . . . @ @ + . + $ @ @ + @ $ - ' = / ' @ + + + . @ = _ > ^ & # % ; ; * ; { = = { * * { = - & - ( ] ; ~ ( $ @ % & ; = & > > $ @ $ # # + . . . . $ ] 1 l l H V n o & . # . . . . . . . . . . . . . . . . . . + + + + . & C C 4 d t 5 v l V '.q.`.m+7+}.|.h.).F ! G 0.z.*.g M g+D+g.g e..+p . ) ~.b+4+/+c+|+<+^+c+y+D+p+F e 0 c { ( k 3 4 B ^ . * & @ + @ @ @ @ + @ @ + + @ @ + + + + + @ # @ + @ # @ @ @ + + @ # @ @ # $ @ @ # @ # @ @ @ @ # # # # @ @ # $ $ # . ", "+ . . # # @ . . + + + + @ $ & { { - ] ] $ . . . . * , ( ; $ $ % * - = = ; * * ; & # + $ ; > ) ( ^ ; & { ; @ # ' ^ - = ; % % % % % . + @ . . . * [ w r I I O H r k ] + . . . . . . . . . . + + . . . . . . . + + + + & ~ 2 w c s z c 0 Z q ,.u.$.+.].R.J.].x Y -.L.L ' . . '.A+D+R.P p.O.( . & A u.W.e+++T.!+h+;+u+:+E+[.' g f t 4 ] ~ | g - $ & % # # $ @ @ @ @ % # # + @ @ + + + + + @ # # @ @ @ @ # # + + @ $ # @ % & # @ @ @ @ # # # @ # + @ # # # # % $ # . ", ". + # = - * % # + . . @ $ - - { ' { ' = $ . . . @ ^ ) ; + @ % & * { ] = $ $ * % + + + @ ( 6 2 } ^ % @ & ; $ $ { ~ ; { * + . . & ' - # . . . . _ t r G B 5 5 | ! ! 3 6 % . . + + . . . . + + + + . . . . . . + + . $ [ k 6 e e 9 5 e V D h !.L 6 = T q.&+M.o n g.1+D+]._ J u+B+7.d 7 2 = . @ ; > ^.(.g.9.>.9.|.5.W.h+;+^+D u B.T.b.A * & # $ $ # @ # @ $ # @ $ # % $ @ + + # + @ + + @ # @ # + @ # $ @ @ @ $ & % # @ $ # # # # # % % $ # @ # # @ # % # # $ # # . ", ". . # * = - { = $ @ @ $ = = = - { = - % + . . @ * _ ( # . . # $ % ' - % $ % # + . + # % > A w 3 ] & % # % % # $ $ # % # + + . & ] _ / _ ] $ . } p m 9 , ^ > b 7 b 0 I ^ . . . . . . . . + + + . . . . . . . + + @ ; 6 s A z B 5 ] 2 Y H e 8 b q o.D.r+j+m.K y e.(+D+x+]+q+A+i.; . = = . @ ; ; ( n &.Y K :.O.=.4.].j.c.`.s+H ).d.&.A & $ @ # $ # $ $ # # # # $ # # # @ @ + + + @ + # @ + + # # # # $ $ # # % $ $ # @ + $ # # $ $ # $ & % $ # $ $ $ $ $ # @ @ # . ", ". . + @ % & = ' ; @ $ & ; * & = ; * = # . + + @ - ( { # . . . . + * * $ % * # . . + $ $ ~ } b , * ; = $ + + + . . . . . + + @ $ ' ) > b w k ~ / g [ _ ~ - ~ } d w 4 } % @ . . + + . + . . . . . . + + . . . . . * ) [ t t t p A a w | } # . m r.x+z+o+c+#+x _ t +F+E+D+D+[+j . + @ @ + - [ , 7 W W K O l.-.{.].g.d.` %.O z 9 5 | , @ + # * ; % $ $ # # # # # # $ # @ @ + + @ @ + @ # + + # # @ # # @ # # $ % $ @ + + + @ @ # # # % % % * % # & * $ @ @ # # @ . ", ". . . . + # & * ; @ # % & ; = = % * * @ + + @ $ * ; { ~ = % @ # $ & ; # # $ @ . + # # ; ~ < b ) ; ; & + + . . . . . . . + $ % # % { ^ ) 7 8 ! % % ; / < _ _ 3 d 4 | ~ + + . . . . + + . . . . . + + + + + + + @ { > ) A j S G l u 6 ; + + G +3+2+1+v+y+6+p . . O 9+F+:+y+H+Z . @ + @ + ; , l .. .P W W O =.8.*.~.K } w A ! : ' # $ @ + % = * $ $ $ # # @ @ # # # # # @ + @ @ @ @ @ @ @ @ # + @ # # @ @ # % % @ + + + + @ $ $ # $ % $ $ & $ & & $ $ @ # @ @ @ . ", ". . . . . + @ @ @ @ # # % { : / & % $ + . + + # % * { _ ) = % % & & ; @ + + + + + # % ] ) ! > > ^ ' $ . . . . . . . . . + % & $ @ # = / ( & $ % * ~ < < b e 4 z t c g * . . . . . + . . # ; + + + + + + + + + % ^ ' ) 8 m q >.P e & . . w /.f+<+;+]+_+L f ( . ~ B.;+|+1+|+/+2.@ @ + + + # ~ s q U ~.<.h c p q m 6 / 1 [ { # ] = + @ # # & = * $ # % # # @ @ @ @ $ @ # @ @ + + + + + @ + @ @ @ @ + @ @ @ @ $ # @ + + @ + @ % % @ # $ % % $ $ % # # # # $ # @ # . ", ". + + + + + . . . . @ @ * / ! > ^ = @ + . . . @ $ % % / > * & & & ; = % + . . + # $ ; ] ( / _ ' ^ / % + . . + . . . . + @ $ $ % $ @ % ; & @ # { ^ > 7 3 6 8 i C C 9 8 , . + % $ . . . . / j / . + + + + + + + ; ' > 2 z I S n 8 * . . - m [.V.!+1.i ; . . . $ ).Q.t+q+g+|+F+q.; . + + @ & { a c S V I i < / _ , ; @ ; ' * . + # + @ $ # % # $ $ @ # # # @ # @ @ + + @ + + + + + + + + @ + @ @ # @ + + # # # $ @ @ @ @ @ @ @ @ + @ % % & # # @ # % # # $ % $ % . ", "+ + + + + . . . . . . + - / / > _ ] $ + . . . + @ @ + ; - $ # ; ^ ~ - & + . . @ # % ; / , ~ ' = ' { $ + + . . . . . . . & * + @ % ; { * ; ; * ( [ < g 7 7 4 4 9 e 7 ) * + - B 5 + . . * > 4 / . . + + + + + @ = ; > 4 w 2 5 , # . @ ^ 4 @.8.R.Q.>.# . . . + n #+'+t+j+[+z+4+d.# . @ @ + # % ^ 7 c 4 3 ( = * * $ @ @ $ = ; @ + @ @ @ $ & & # # @ @ @ # # # # + # @ @ + + @ @ @ @ + + # @ @ @ @ @ @ @ # # $ # @ + + @ @ @ + + + + @ # # $ # $ # @ # # # # # # # . ", "+ . . + . . . . . . + @ ; _ ( < _ ) ( $ + + # + . + + $ & + + # - ^ ' $ @ + + + $ & $ ; ! k ] { ' & # + + . . . . . . . % $ + . # = , / ] - ; ' } g k | a | 8 5 , ] $ @ - 7 B b + + . * < / % . + + @ + . + + $ % ; : : = # . . . } Z D @.B.J.b+k.% . . . < g.;+^+c+^+9+(+;+I . + + + + + @ # % { , { # + . . . + @ # # # % @ # # @ @ $ $ $ # @ @ @ # # + # @ + @ + @ @ # @ + @ # @ # + + @ @ @ + + $ # @ + + # @ # # + + + . + @ + + # $ $ @ @ $ $ @ # @ @ # . ", "+ . + + . . . . . @ # + $ ' ( : : ! < ' * ' = @ + # @ @ # + @ % = ' ; # * - $ % ; & # * { ~ - = ^ - $ % # + . . . . . . + @ + + $ = ' ) ~ = * - _ 6 k g 7 | 4 3 ; + + ; ^ a ) + + @ @ + ; { @ + + + + + + + . @ $ * ] $ . . . ; e <.u.+.F n.;.n.c . . . : d F.V.;+l+]+f+e+T.8 . + + . @ @ @ # + @ @ + + . $ - $ + + # @ + @ @ + @ @ @ # # $ $ @ # @ @ + + + @ @ + @ @ + @ # @ @ + @ + + . + + + + + @ @ # + + # $ + @ @ @ + + @ @ + @ + + + + + $ # @ @ + + @ . ", "+ + . . . . . . . + # + + ; ~ ] ! ) ) / ~ _ - + @ # + @ @ + @ % - ' $ @ - , - ; = * * & ; & $ @ % ; * * $ + @ + . . . . + + . @ = { / , ^ ^ { ] _ ! 7 3 } 9 0 _ . . + ; ~ ( * . + @ @ . @ # + + @ + + + + @ + + $ # $ - ) 6 z H ,...!.,.W ^.w & . . @ 1 &.,.l |.k+V.=+K.$+E.u . + + + + + + + @ @ + + . * a 3 & + + @ @ + + @ @ + + + # # # @ + + @ + @ # + + @ + + + + + + + @ + + + + + + + + + + + # + @ + + + + + # @ @ # + + + + @ + . + @ @ + + + + @ @ . ", "+ . . + . . . + + + + + + % = / , ( / ] ~ ' & @ + @ + + @ # @ $ = { % + # ( ) - % # % & * % + + @ ; * % @ + # @ + @ . . . . . @ = ~ > : > ! _ / _ , a e 1 4 e & . . + % = { & + . . . . + + + + + + + + + @ . . . @ { c x :.3...E U T P.F.7 + . . + ) M -.F.f ,./.Y.V.E.*+_.a . + + + + . . + @ + $ / 7 u 4 = @ + + + + + @ @ + + + @ # # $ @ + + + + @ @ + + + + + + + + @ @ # @ + + @ + + + @ + + @ @ @ @ @ + + @ . + + # # + @ @ @ @ + @ @ @ + . + @ + $ # . ", ". . . . . + @ @ # # @ # $ & % * ' - ~ ; ; * % + + @ @ # # # + $ ; % # @ . $ / ] * $ $ % & ; * * % % $ # + . + . + + + + . . . . % ' , ) < > / ~ ] , < 2 b } ^ # + . + & ~ ; $ . . . + + + + + @ + + + + . . . . . ^ w X !. .N G V W W O 9 @ . . @ ) 8 n M @.u C E h.|.i+w.k.{ . + + . . . . @ # + % 3 t k ^ # # + + + + + + + . . + # # @ + + + + @ @ @ @ + @ @ @ + + + @ + @ @ @ @ + + + + + # @ @ @ + @ @ @ @ @ @ @ + + @ @ # # # # # # @ + @ @ @ @ @ @ @ @ . ", ". . . . . @ $ $ $ $ % ; { ; = ~ & % = % % * * $ # # $ % $ $ @ $ & # @ + + + # % & * * * & ; ; ; # + @ + . . . . . + + + . . . . $ - / , ! > ~ - ^ ] ( : > : ( % . . . ; [ { @ . . . . + + . + + . . + + . . . . & 7 v K !.y r z z G G w # . . @ > S O S i r u t u E u.7.c.u.> . . . . . . + @ + + = ) ^ # + # @ + + @ + + + . . + + + @ @ + + + # @ @ @ @ + + @ @ + + + @ # + @ + + + + + + + + @ @ @ + + + + @ @ + + + @ @ @ # # @ + @ $ $ @ # @ @ @ @ # + @ . ", ". . . . . + = = * { ' ~ ^ { / / ~ = ] ^ & # % - % # * * $ # @ # # @ @ # @ @ @ @ # # + & * $ . . . . . + . . . . . + . . . . . . # - ^ , ] { ^ ( ^ - = ^ > [ / - $ $ = { } a & . . . + + . . + + + + + . . . . @ ( 2 h U Q r m j C t _ # . . . b y ..R E w t 8 e s f ,.W n H s ' # + . . . . . . + - ' % . + % # @ + + . . . + + . . . @ + + + + @ @ @ @ @ + + @ + + @ # @ @ + + + + @ + + . @ + + + + + # # @ # @ @ @ @ @ @ @ # $ @ + + @ $ @ $ # @ + @ # + + . ", ". . . . . + ; - = ~ ' ] ^ ~ , [ ) : : _ { # # % $ @ % & # + + + & { $ $ $ # @ + + . . + @ + . . + + @ @ + . . . . + . . . . . . . + = ~ = = ~ > > ~ * = ] : _ _ _ 5 S t A g ; . . . . + + + . . + + + . . . . { < w q U h z z 4 | ] . . . . * t m ,.J I 9 4 5 i y N t : # & [ 1 _ % @ + . . . . + & & # + @ $ @ + + . . . . + @ + + @ + + + + + + @ @ @ + @ @ @ % @ @ @ + + @ + @ + + + + + + + + + @ @ # # $ # # # @ + @ % @ @ @ @ @ + + + + # # @ @ @ + + + . ", ". . . . . + & * * & * ' { - ^ ) , , : ] & $ $ # # * % $ # + # * { ] % % * % & % # $ $ $ # + . . @ * = { - # + . . . . . . . . . . . # ' { % ( } / ; @ @ % > < < i O &.&.H [ + . + . . + . + + . . . + . . . $ > 6 j y G 0 p C [ * . . . + ' | q m B p 9 t 8 d d I N 6 ; # % = = - * { } ~ % # # # + @ @ @ @ + + + + + . + + + @ $ # @ # + + + + @ + + @ @ # @ @ # @ + + @ + @ + + + @ + + + @ + @ $ @ # # % $ @ @ @ @ @ @ $ # @ @ @ @ @ @ @ @ @ @ # @ + + + + . ", "+ . . . + + + $ % % % & & ; { ^ ) { ' * & & = ; % % @ @ @ . % ) ^ $ $ % $ $ * * & ; ' ) ' @ . . @ $ * = = = & + . . . . + + + + . . . # ; % { / { # . + $ ] / 9 D J &...X [ . + + + . . + + . . + + + . . . ' 6 i Y V C i 7 ( & @ + + + ] i o z d d c t i 5 i w 3 [ ' % $ ; * @ $ $ ; > ^ ~ / ^ ; # + @ + + + + + . + + @ + @ @ % % # # @ # # @ + + @ + @ # + + @ + + + @ # @ + + @ @ + + + + + # # # # + @ @ + @ @ @ @ @ @ @ @ + @ $ $ $ % & # # @ + . + + + . ", "+ . + + + . . @ $ % % $ @ @ ^ : - $ * * = ' - - & $ @ @ + . ; [ { + @ + . @ $ $ % ~ ! 3 : $ . . + @ % & & * * # + . . + + + + + . . . + $ & % $ # . . . @ % ! 0 ` ` W .Q / . + + + + . + + + + + @ + + . . ~ 2 o N h C e { + + + + # # ) 8 4 k e | } 8 t e A ! * # $ & ; & # % - & % & ' , : { % @ @ @ @ + + + + + + @ @ @ @ + @ @ # + + # # + + + + @ @ + + + . . + @ @ @ @ + + @ $ @ + + @ # # @ # # @ @ + @ # @ # @ @ @ @ # + + # $ @ $ % @ # # + + + + + . ", "# @ + + . . . . @ # $ # @ + = ' @ @ * { { ~ { ; % # # # # # ; - $ . . . . + @ # * ' : ! | { . . . @ & % $ $ & & # . . . + + @ . . . . + $ & @ + . . . . . @ , C n f v h i = + @ . . . . + + @ + + + . . . @ / 7 p N p 7 ~ $ + . . + @ % * , 7 g e 2 1 2 9 4 | ~ $ # * - ; @ $ ; ] / ' - > ^ % @ + + + + + + + + + + @ # # $ @ + + + + + @ # # + + + + + + + + . . . + + + + @ + + @ @ + + # @ # % # # # # @ # # @ + @ @ # @ + + @ @ # # @ # # + @ # # # @ + @ . ", "% * @ + . . . . @ # $ # @ + . + + @ & = = { ] ; # # $ % & ~ { . . . . + . . + $ % ' ! 1 w _ @ + . + * * % * * & @ + . . + . + + . . . . @ $ + . . . . . . . ( 4 C ! / { @ # - = # + . . . . . . . . . . + # _ 6 N V 7 & $ + . . . + + @ # { < A w e 7 b 6 w < # + # % $ # $ - ~ ( / * ; ~ $ . + + + + + + + @ @ + @ @ $ # # @ @ @ + + + + + @ @ + + + + + . . . + . . . + + + + + + + + + $ # @ # @ # # $ # # @ # # @ # # @ + @ # # $ # @ @ @ @ @ # * % @ @ + . ", "$ % # + . . . . + % & # @ + . . + @ $ * - ; - { * # # * = = % + . . . . . . + @ $ = ) w 4 } * # @ $ % # # * * % # + + . . . . . . . . + + . . . + + $ ; & . * > < ' * @ @ * ; - * @ . . . . . . . . . . + & > | 5 g = @ + . . . . . + + + @ ' } 2 e } : 3 a ( $ + # # $ * ; ^ > ^ ' @ $ $ + + + + + + + + + # @ + + # $ $ # @ @ # + + + + + + + + + # + + + + + @ + . . . . + + + + + @ + @ @ @ @ # # # # @ @ + # # @ # # + @ # # @ # # $ # @ # $ # # # # @ @ . ", "# $ # + . + + . + % & * % + . . . + $ & ; * % ; ' ; # & % @ # $ & & $ + + + + . # * ' } ) ~ = & & ' ; . + @ # $ $ # $ # + + # @ $ $ # & # . + + # & ] : b > , < } b } _ & = # @ # + + + + + + . . . . + . - 7 k , # @ . . . . . . . + + @ + + % * - { ( < , ) ] @ + $ ; * * ( > ~ * & @ @ + + + + @ + @ + + + + + + # $ # # # @ @ + @ + + + + @ @ @ @ + + + @ @ @ + + + + + + + + @ + + @ @ @ @ @ # $ # @ + + + @ # @ @ # @ # # # $ $ $ % % $ @ # $ # @ @ @ @ . ", "# % % @ . . . . + + * ] & + . . . @ % & * * * - ] - * # + + # & { ~ / ' ; % $ # + @ $ # # $ % * ~ _ ~ + . . + + @ * ; $ @ # ; ; - { $ ; @ + @ @ + @ { > 1 g } 2 w 6 1 ( & # + . . + + + + + + + . . . + + _ d [ * @ . . . . . + + + + + @ + + . * ~ # * { { < ; . + ; ' @ $ ' ] = ; & # + + + @ # # @ + . + + # # @ @ $ $ @ @ @ @ + @ # @ @ @ @ # @ + + + + @ + @ # + + + + @ + + + @ + + @ # @ @ # # # # # @ @ @ @ @ @ @ @ @ @ # % % $ # $ $ $ # @ # @ @ @ @ . ", "@ @ $ # + . . . . % ) [ ( . . . . @ & % & ; ; = - * $ @ . . $ - ] ( / ( ' { ~ { = # + . + + @ % ] , ' @ + + + + @ % ; { > _ ; % % ; ' % + + + + . . # = / _ < a 7 3 : $ . . . . . + + + . . + @ . . + + * 1 k = . . . . + @ # @ @ + + + + + . # ^ ( % @ @ % - $ + # ; { + + # % $ # @ . + + + + # @ + + + + @ @ @ # # $ # @ @ + + @ # @ @ # + @ @ @ + @ @ @ @ @ @ + + + + + + + + + + + + @ @ @ # # @ @ # @ @ # # + @ # $ @ # # $ $ # # # # $ % # @ @ # # # @ . ", "@ @ # # + + + . # ~ [ 7 ( # . . . # $ % & ; * & @ + + + + # * - ] ( = = ~ ' ' ~ ] = # + + . @ % ' ] * + + @ $ $ # $ ] } g 1 * . @ % * @ . . . @ . . + + ; _ / b 7 ] $ . . . . . . + @ + + . . + . . + # ( ) * + . . . + % = = % * & # @ + . @ ~ _ ^ % @ # % = = % $ = = # + + @ @ @ + + + + @ @ # @ + + + $ % # @ @ # # @ @ @ + + @ $ # @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ + @ + + + + @ + $ $ # # # @ # # # $ # # $ @ # $ $ % % $ % % # # # @ @ @ @ @ @ . ", "@ + + @ % # # # & ] [ [ { @ . . . + $ % $ ; $ . . . . . @ % ; ~ , ^ ^ ~ ' - - - ' ] & . + @ $ % ; * # @ + @ $ & * ' b c g 3 - . . + + . + + + . . . . . + * / c 3 @ . . . . . . . . + + . . . . + . @ ( > ; . . . . . # = ' ' { ] ~ ~ ' & @ ; ] ] ^ = ; _ ) ; # # # { ] % @ + . + + + + + + @ $ $ # + $ ; ' - ; $ # $ # @ @ @ + + + + @ + @ $ + + + @ @ @ @ + + + @ + + + + + + . @ + @ @ @ @ @ # @ @ $ $ # $ # @ % $ $ % @ @ # $ @ $ $ $ $ $ # @ @ + @ + + @ . ", "@ + + + # $ # % - , b ) @ . . . . + $ % $ + + . . + . . + % - ^ > ] / ] { ; - ; ' ] = * @ # & * $ + + $ & % % % = ) g e k : $ + + + + + + + . . + + . . . % ) b - . . . . . . . + . . . . . + . . + * ] * + . . . . @ = { * ; ~ ' ' ^ ^ * * { ~ ' & { ] 7 ) + . + # { ' % + + + + + + + @ # # # # @ + ; ~ ] { ] ~ ' ; $ # $ # @ + + @ @ @ @ @ + . + @ @ @ + + + + # @ + . + @ + + + + @ @ # @ + @ # @ # @ # $ % % % # # # # @ # # # @ # $ & $ # + @ $ $ + + + . ", "+ . + + @ $ # $ * ' ] & . . . . . . @ # + + . . + + . + % = ] , / _ / ~ ~ ' ; { ] - { ' $ $ = ] = + # & = * % & , ! w w | = + . . + + + @ . . . + + . + % _ > ^ & + . + . . . . . + . . . . . . . @ * ; + . . . . + * ] - = - - ; * & & & - = % $ # * ~ ] * + . + # * & $ + + + + + + + + # # + @ + . & / ' ] , ^ { = & $ # @ @ @ + @ @ @ + + + + + + + @ + + + + + + @ @ @ @ @ @ @ @ + # $ # @ $ $ @ # # @ # $ $ $ $ @ # # @ @ @ @ # # # # # @ @ # # @ + @ + . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ @ # # # $ # # $ $ @ # $ # # $ $ $ % # @ @ @ # @ @ # @ @ @ . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # $ $ $ # $ $ @ $ # % $ + # # $ % @ @ @ # $ @ @ @ # @ @ . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; therion-5.4.1/loch/icons/camera.xpm000066400000000000000000000007661307545355600172350ustar00rootroot00000000000000/* XPM */ static const char * camera_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 6 1", " c black", ". c #002E70", "X c #CDCDCD", "o c #C4E9F5", "O c gray100", "+ c None", /* pixels */ "++++++++++++++++", "+++ + ++++++", "++ ooo ooo +++++", "++ ooo ooo +++++", "++ ooo ooo +++++", "+++ + ++ ++", "++++ + ++", "++++ .... ++", "++++ .... ++", "++++ .... ++", "+++++ ++ ++", "++++ .++. ++ ++", "++++ .++. ++++++", "+++ .++++. +++++", "+++ .++++. +++++" }; therion-5.4.1/loch/icons/fit.xpm000066400000000000000000000007271307545355600165640ustar00rootroot00000000000000/* XPM */ static const char * fit_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0000BB", ". c #009BFF", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oo ooooo o", "oo ...ooooo... o", "oo .ooooooooo. o", "oo .ooooooooo. o", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oo .ooooooooo. o", "oo .ooooooooo. o", "oo ...ooooo... o", "oo ooooo o", "oooooooooooooooo" }; therion-5.4.1/loch/icons/fly.xpm000066400000000000000000000007441307545355600165730ustar00rootroot00000000000000/* XPM */ static const char * fly_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c black", ". c #ACA899", "X c #ECE9D8", "o c gray100", "O c None", /* pixels */ "OOOOOOO OOOOOOO", "OOOOOO o. OOOOOO", "OOOOOO oX OOOOOO", "OOOOOO oX OOOOOO", " oX ", " XooooXoo.XoooX ", "O XXXXoo.XXX O", "OOO oX OOO", "OOOOOO oX OOOOOO", "OOOOOO oX OOOOOO", "OOOO o OOOO", "OOOO o.o XX OOOO", "OOOOO o OOOOO", "OOOOOOO OOOOOOO", "OOOOOOOOOOOOOOOO" }; therion-5.4.1/loch/icons/fullscreen.xpm000066400000000000000000000007521307545355600201420ustar00rootroot00000000000000/* XPM */ static const char *fullscreen_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c gray30", ". c #4DFFFF", "X c gray65", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OO O", "O OOOOOOOOOOOOO ", "O O O ", "O O .o.o.o.o. O ", "O O oXXXo.o.o O ", "O O .o.o.o.o. O ", "O O oXXXXXXXo O ", "O O .o.o.o.o. O ", "O O oXXXXXXXo O ", "O O .o.o.o.o. O ", "O O O ", "O OOOOOOOOOOOOO ", "OO O", "OOOOOOOOOOOOOOOO" }; therion-5.4.1/loch/icons/home.xpm000066400000000000000000000007771307545355600167370ustar00rootroot00000000000000/* XPM */ static const char * home_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 7 1", " c black", ". c #6AFFFF", "X c #BE0000", "o c #9B601A", "O c red", "+ c gray100", "@ c None", /* pixels */ "@@@@@@@@@@@@@@@@", "@@@@@@@XXX@@@@@@", "@@@@@@XOOOX@ @@", "@@@@@XOOOOOX @@", "@@@@XOOOOOOOX @@", "@@@XOOOOOOOOOX@@", "@@XOOOOOOOOOOOX@", "@XXXXXXXXXXXXXXX", "@@@ +++++++++ @@", "@@@ + + + @@", "@@@ + . + o + @@", "@@@ + + o + @@", "@@@ +++++ o + @@", "@@@ +++++ o + @@", "@@@ @@" }; therion-5.4.1/loch/icons/lockrot.xpm000066400000000000000000000007531307545355600174560ustar00rootroot00000000000000/* XPM */ static const char * lockrot_xpm [] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c #0060A2", ". c #00A5E4", "X c #DE0000", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOO......OOOOO", "OOOO.......OOOOO", "OOO .......OOOOO", "OOO ..OOOOOOOOOO", "OXX OOXXOOOOOOO", "OXXX OXXXO OOOO", "OOXXXXXXOO OOO", "OOOXXXX OO", "OOOXXXX O", "OOXXXXXX OO", "OXXXOOXXXO OOO", "OXXOOOOXXO OOOO", "OOOOOOOOOOOOOOOO" }; therion-5.4.1/loch/icons/open.xpm000066400000000000000000000007431307545355600167410ustar00rootroot00000000000000/* XPM */ static const char *open_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c None", ". c Black", "X c Yellow", "o c Gray100", "O c #bfbf00", /* pixels */ " ", " ... ", " . . .", " ..", " ... ...", " .XoX....... ", " .oXoXoXoXo. ", " .XoXoXoXoX. ", " .oXoX..........", " .XoX.OOOOOOOOO.", " .oo.OOOOOOOOO. ", " .X.OOOOOOOOO. ", " ..OOOOOOOOO. ", " ........... ", " " }; therion-5.4.1/loch/icons/orto.xpm000066400000000000000000000007061307545355600167620ustar00rootroot00000000000000/* XPM */ static const char *orto_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 3 1", " c black", ". c gray100", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XXX XXXXXXXXXXXX", "XX XXXXXXXXX", "XXX ... XXXXXXX", "XXX ..... XXXXXX", "XXX ...... XXXXX", "XXX .. .. XXXXX", "XXX .. ... XXXX", "XXX ....... XXXX", "XXX ....... XXXX", "XXX ", "XXXXXXXXXXX XXXX" }; therion-5.4.1/loch/icons/persp.xpm000066400000000000000000000007311307545355600171260ustar00rootroot00000000000000/* XPM */ static const char * persp_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0060A2", ". c #00A5E4", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooo ooo oo", "oooooooo o oooo", "oooooooo oooooo", "oooooo . oooooo", "oooo .... ooooo", "oo ...... ooooo", "o ........ ooooo", "oo ...... ooooo", "oooo .... ooooo", "oooooo . oooooo", "oooooooo oooooo", "oooooooo o oooo", "oooooooo ooo oo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/plan.xpm000066400000000000000000000007251307545355600167320ustar00rootroot00000000000000/* XPM */ static const char *plan_xpm[] = { /* columns rows colors chars-per-pixel */ "15 16 4 1", " c black", ". c red", "X c #FFCC00", "o c None", /* pixels */ "ooooo.....ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "ooooo.XXX.ooooo", "oo...XXXXX...oo", "ooo.XXXXXXX.ooo", "oooo.XXXXX.oooo", "ooooo.XXX.ooooo", "oooooo.X.oooooo", "ooooooo.ooooooo", "ooooooooooooooo" }; therion-5.4.1/loch/icons/profile.xpm000066400000000000000000000007271307545355600174420ustar00rootroot00000000000000/* XPM */ static const char * profile_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c red", ". c #FFCC00", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "ooooooooo oooooo", "ooooooooo ooooo", "ooooooooo . oooo", "o ... ooo", "o ........... oo", "o ............ o", "o ........... oo", "o ... ooo", "ooooooooo . oooo", "ooooooooo ooooo", "ooooooooo oooooo", "oooooooooooooooo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/reload.xpm000066400000000000000000000007301307545355600172420ustar00rootroot00000000000000/* XPM */ static const char * reload_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #008D00", ". c green", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "ooooooooooo oooo", "ooooo ooo", "oooo oo", "ooo ooo", "ooo ooooo oooo", "ooo oooooooooo", "oooooooooooooooo", "oooooooooo ooo", "oooo ooooo ooo", "ooo ooo", "oo oooo", "ooo ooooo", "oooo ooooooooooo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/render.xpm000066400000000000000000000007451307545355600172610ustar00rootroot00000000000000/* XPM */ static const char *render_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c None", ". c Black", "X c Gray100", "o c #808000", "O c Yellow", /* pixels */ " ", " ......... ", " .XXXXXXXX. ", " .X.....X. ", " .XXXXXXXX. ", " .X.....X.... ", " .XXXXXXXX. . .", " .......... . ..", ". . . .", "............. .", ". ooo . . ", ". OOO ... ", "............. . ", " . . . ", " ........... " }; therion-5.4.1/loch/icons/rendersetup.xpm000066400000000000000000000007341307545355600203400ustar00rootroot00000000000000/* XPM */ static const char *rendersetup_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c black", ". c #505050", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "o ....o", "o XXXXXXXX Xo oo", "o X......X o o", "o XXXXXXXX oo oo", "o X......X oo oo", "o XXXXXXXX oo oo", "o X......X o o", "o XXXXXXXX oo oo", "o ....o", "o.oooooooo.ooooo", "o.o oooo o.ooooo", "o. .ooooo", "o.o oooo o.ooooo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/rotation.xpm000066400000000000000000000007341307545355600176370ustar00rootroot00000000000000/* XPM */ static const char * rotation_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #0060A2", ". c #00A5E4", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "ooooo......ooooo", "oooo.......ooooo", "ooo .......ooooo", "ooo ..oooooooooo", "ooo ooooooooooo", "ooo ooooo oooo", "ooo oooo ooo", "ooo oo", "oooo o", "ooooo oo", "oooooooooo ooo", "oooooooooo oooo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/scene.xpm000066400000000000000000000007641307545355600171000ustar00rootroot00000000000000/* XPM */ static const char *scene_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 6 1", " c black", ". c #3A3A3A", "X c #0101C6", "o c #BBCEFD", "O c gray100", "+ c None", /* pixels */ "++++++++++++++++", "++ ++", "++ OOOOOOOO o ++", "++ O.....OO ++", "++ OOOOOOOO O ++", "++ OXO....O o ++", "++ OOOOOOOO o ++", "++ OXO....O o ++", "++ OOOOOOOO O ++", "++ OXO....O O ++", "++ OOOOOOOO O ++", "++ OOOOOOOO ++", "++ OOOOOOOO o ++", "++ ++", "++++++++++++++++" }; therion-5.4.1/loch/icons/stereo.xpm000066400000000000000000000007411307545355600172770ustar00rootroot00000000000000/* XPM */ static const char * stereo_xpm [] = { /* columns rows colors chars-per-pixel */ "16 15 5 1", " c black", ". c cyan", "X c red", "o c gray100", "O c None", /* pixels */ "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", " ", " oooooooooooooo ", " o.....ooXXXXXo ", " o.....ooXXXXXo ", " o.....ooXXXXXo ", " o....ooooXXXXo ", " oooooo oooooo ", " OO ", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO", "OOOOOOOOOOOOOOOO" }; therion-5.4.1/loch/icons/visbbox.xpm000066400000000000000000000007131307545355600174510ustar00rootroot00000000000000/* XPM */ static const char *visbbox_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 3 1", " c #E81B1B", ". c gray100", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX", "XXX X", "XX XXXXXXXXXX X", "X XXXXXXXXXX X X", " XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX XX X", " XXXXXXXXXX X XX", " XXXXXXXXXX XXX", " XXXX" }; therion-5.4.1/loch/icons/viscline.xpm000066400000000000000000000007311307545355600176110ustar00rootroot00000000000000/* XPM */ static const char *viscline_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c black", ". c #FFD800", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "ooooooooooo...oo", "ooooooooooo...oo", "oooooooooo ...oo", "ooooooooo oooo", "oooooooo ooooo", "ooooooo oooooo", "oooooo ooooooo", "ooooo oooooooo", "oooo ooooooooo", "ooo oooooooooo", "o... ooooooooooo", "o...oooooooooooo", "o...oooooooooooo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/visentrance.xpm000066400000000000000000000006111307545355600203130ustar00rootroot00000000000000/* XPM */ static const char * visentrance_xpm[] = { "16 15 2 1", " c None", ". c #1A4C1A", " ", " ...... ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " .. .. ", " ... ... ", " ", " "}; therion-5.4.1/loch/icons/visfix.xpm000066400000000000000000000006041307545355600173040ustar00rootroot00000000000000/* XPM */ static const char * visfix_xpm[] = { "16 15 2 1", " c None", ". c #500000", " ", " ", " . ", " . ", " ... ", " . . ", " . . ", " ... . ... ", " . . ", " . . ", " ... ", " . ", " . ", " ", " "}; therion-5.4.1/loch/icons/visinds.xpm000066400000000000000000000011231307545355600174500ustar00rootroot00000000000000/* XPM */ static const char *visinds_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 12 1", " c #0009C4", ". c #1D00FF", "X c #00FF02", "o c #00CCFF", "O c #00F5FE", "+ c #FF3100", "@ c #FD00FD", "# c #FFBA00", "$ c #F3FF00", "% c #FFEA3A", "& c gray100", "* c None", /* pixels */ "****************", "**+ *ooo********", "**# ************", "**$ *ooo********", "**X ************", "**O *ooo********", "**. ************", "**@ *ooo********", "****************", "** * *******", "** % * % **o****", "** * * ***", "***o***o********", "**ooooooooooo***", "****************" }; therion-5.4.1/loch/icons/vislabel.xpm000066400000000000000000000006251307545355600176000ustar00rootroot00000000000000/* XPM */ static const char * vislabel_xpm[] = { "16 15 3 1", " c None", ". c #000000", "+ c #9E7B00", " ", " . .. . ", " . . . . . . ", " ... .. . ", " . . . . . . ", " . . .. . ", " ", " ", " + ", " + ", " +++++ ", " + ", " + ", " ", " "}; therion-5.4.1/loch/icons/visstation.xpm000066400000000000000000000006101307545355600201740ustar00rootroot00000000000000/* XPM */ static const char * visstation_xpm[] = { "16 15 2 1", " c None", ". c #9E7B00", " ", " ", " ", " .. ", " .. ", " .. ", " ........ ", " ........ ", " .. ", " .. ", " .. ", " ", " ", " ", " "}; therion-5.4.1/loch/icons/vissurface.xpm000066400000000000000000000007351307545355600201530ustar00rootroot00000000000000/* XPM */ static const char *vissurface_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 4 1", " c #41B800", ". c #98F963", "X c gray100", "o c None", /* pixels */ "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooooooooooooooo", "oooo ooooo.ooooo", "ooo ooo...oooo", "oo o.....ooo", "o ......oo", " .....oo", " ....oo", " ...oo", " ..oo", " .oo", " oo", "oooooooooooooooo" }; therion-5.4.1/loch/icons/viswalls.xpm000066400000000000000000000017311307545355600176420ustar00rootroot00000000000000/* XPM */ static const char *viswalls_xpm[] = { /* columns rows colors chars-per-pixel */ "16 15 39 1", " c black", ". c gray43", "X c #717171", "o c #777777", "O c gray48", "+ c #7E7E7E", "@ c #838383", "# c #848484", "$ c gray53", "% c gray55", "& c gray56", "* c #909090", "= c gray57", "- c #939393", "; c #959595", ": c gray59", "> c #989898", ", c #9A9A9A", "< c #9B9B9B", "1 c gray61", "2 c #9D9D9D", "3 c gray62", "4 c #A0A0A0", "5 c gray63", "6 c #A2A2A2", "7 c gray64", "8 c #A4A4A4", "9 c #A5A5A5", "0 c #A7A7A7", "q c gray66", "w c #A9A9A9", "e c #AAAAAA", "r c gray67", "t c #B7B7B7", "y c #B9B9B9", "u c gray73", "i c #BBBBBB", "p c gray100", "a c None", /* pixels */ "aaaaaaaaaaaaaaaa", "aaaaaaaaaaaa aa", "aaaaaaaaaa 6r a", "aaaaaaaa  E P [g   '2:@GK i w     (3\p   C %/@#)H _j:| (   &9H"b)00&.?n# ?c!^*+- Ydt%"2- F e 0z 5 # -!/3!/c!-!!!! !""-"B"Y"'p"P""# # # $# 1#>#Y#l## #.#)#$42$*g$0$$!$+$+"%N% _%"%,% % %%&&.&M&i&!&%&&$& '%'C'X'i''/''#' (( $(*/( Z(h((+(/())6)P) n)|)))E)*WzN0<`  G;KXD_Cj=&tawFYoZi+M]~c.V'*|:$PHs8 (?Bn5@^Q97,L uElJhpTR x-![)3m4/r61OkAf>bv%gd\y"{qU 2e#SI} Camera Scene%+03d°%.14e%03d°%ld&About...&Bugs&Camera&Contents... F1&Control&East&File&Help&North&Open... Ctrl+O&Options...&Plan&Reload Ctrl+R&Render to file Ctrl+P&Rendering&Reset&Scene&South&Tools&View&West(mm)00 x 00 (00.0 MB)1 :3D visualization tool for cavesAbout LochActionAll supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3dAltitudeAltitude (m)Applies toBounding boxBrowse...Building 3D model, please wait...CameraCamera setupCancelCenterCenterlineCenterline visibilityCloseColor channelsColor modeDefaultDefault data files directoryDefault stereo colorsDisable color texturesDistance (m)Do not extrapolate wallsE&xit Ctrl+QEasting (m)Enable rotationEnable stereo modeErrorError reading input fileExtrapolate all missing walls informationExtrapolate only files without walls informationEye separationFacing (deg)Fit zoomFocusFocus (mm)Full screenFull screen F11General optionsImage heightImage optionsImage size:Image widthIndicatorsLock rotationLock rotation speedLower viewpoint UpMove down Shift+UpMove left Shift+RightMove right Shift+LeftMove up Shift+DownNo file openNorthing (m)OKOpenOpen fileOptionsOrientationOrthoOrthogonalOrthogonal viewPDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmpPPM files (*.ppm)|*.ppmPlanPlan viewPro&fileProfileProfile viewProject titleReloadReload fileRenderRender to fileRendering &setup...Rendering (%d x %d, %.1f MB) ...Rendering at %.1f fps.Rendering resolution (dpi)Rendering setupRendering to bitmapResetReset viewpointRotate left RightRotate right LeftRotationRotation centerRotation speedSave rendering asScaleSceneScene itemsScene setupScreen shotShow bounding boxShow centerlineShow indicatorsShow surfaceShow wallsSize and scalingStereoStereo modeSurfaceTextureTilt (deg)TransparencyUnable to open file for output.UndergroundUpper viewpoint DownVersion: VisibilityWallsWalls extrapolationWhite backgroundZoom in Ctrl+UpZoom out Ctrl+DownZoom to fitZoom to fit Spaceblue & redblue & yellowcyan & redgreen & rednonamered & bluered & cyanred & greenremember last used channelsyellow & blueProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2011-05-06 10:31+0100 Last-Translator: Language-Team: bulgarian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Slovak X-Poedit-Country: SLOVAKIA X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. Plural-Forms: и X-Poedit-SearchPath-0: . КамераСцена%+03d°%.14e%03d°%ldЗа &програмата...&Бъгове&Камера&Съдържание... F1&Контрол&Изток&ФайлПо&мощ&Север&Отвори... Ctrl+O&Настройки...&План&Презареди Ctrl+R&Рендирай във файл Ctrl+P&Рендиране&Нулиране&Сцена&Юг&Инструменти&Изглед&Запад(mm)00 x 00 (00.0 MB)1 :Програма за 3D визуализация на пещериЗа LochДействиеВсички поддържани файлове (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлове (*.lox)|*.lox|Compass PLT файлове (*.plt)|*.plt|Survex 3D файлове (*.3d)|*.3dНадморска височинаНадм. височина (m)Отнася се заРамкаПреглед...Създавам 3D model, моля, изчакайте...КамераНастройки на камератаОтказЦентърАнтенаВидимост на антенатаЗатвориЦветни каналиРежим на цветоветеСтандартниСтандартна директорияСтандартни стерео цветовеИзключи цветните текстуриРазстояние (m)Не екстраполирай стените&Изход Ctrl+QX - изток (m)Включи ротацияСтерео изображениеГрешкаГрешка при четене на входният файлЕкстраполирай всичката липстваща информация за стениЕкстраполирай само файлове без информация за стениРаздалеченост на очитеАзимут (градуси)Оптимално приближаванеФокусФокус (mm)Цял екранЦял екран F11Генерални настройкиВисочина на снимкаНастройки на изображениетоРазмер на изображението:Ширина на снимкаИндикаториЗаключване на завъртанетоЗаключи скоростта на ротацияПоглед от долу ГореДвижение на долу Shift+ГореДвижение на ляво Shift+ДясноДвижение на дясно Shift+ЛявоДвижение на горе Shift+ДолуНе е отворен файлY - север (m)OKОтвориОтвори файлНастройкиОриентацияОртогоналнаОртогоналнаОртогонална проекцияPDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmpPPM файл (*.ppm)|*.ppmПланПланПро&филПрофилПрофилИме на проектаПрезаредиПрезареди файлРендирайРендирай във файлНа&стройки на рендиране...Рендиране (%d x %d, %.1f MB) ...Рендиране (%.1f fps).Резолюция на рендирането (dpi)Настройки на рендиранеРендиране към изображениеНулиранеСтандартен изгледЗавъртане на ляво ДясноЗавъртане на дясно ЛявоавъртанеЦентър на ротацияСкорост на ротацияЗапиши рендираното катоРазмерСценаОбекти в сценатаНастройки на сценатаСнимка на екранаПокажи рамкатаПокажи антенатаПокажи индикаториПокажи повърхносттаПокажи стенитеРазмер и мащабиранеСтереоСтерео изобразяванеПОвърхностТекстураНаклон (градуси)ПрозрачностНеуспех при запис на файл.ПодземятаПоглед от горе ДолуВерсия:ВидимостСтениЕкспраполация на стениБял фонПриближи Ctrl+ГореОтдалечи Ctrl+ДолуОптимално приближаванеОптимално приближение Spaceсиньо & червеносиньо & жълтоциян & червенозелено & червенобез имечервено & синьочервено & циянчервено & зеленозапомни последно използваните каналижълто & синьоtherion-5.4.1/loch/locale/bg/loch.po000066400000000000000000000521521307545355600172540ustar00rootroot00000000000000# # Alexander Yanev , 2011. # msgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2011-05-06 10:31+0100\n" "Last-Translator: \n" "Language-Team: bulgarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Slovak\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "Plural-Forms: и\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "За Loch" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "Програма за 3D визуализация на пещери" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "Версия:" #: lxData.cxx:84 msgid "No file open" msgstr "Не е отворен файл" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "Рендиране (%.1f fps)." # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "%03d°" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "%+03d°" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 #: lxSScene.cxx:273 msgid "Altitude" msgstr "Надморска височина" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "без име" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 #: lxGUI.cxx:575 msgid "Open" msgstr "Отвори" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "Отвори файл" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "Презареди" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "Презареди файл" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "Рендирай" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "Рендирай във файл" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 #: lxRender.cxx:236 msgid "Rendering setup" msgstr "Настройки на рендиране" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 #: lxGUI.cxx:275 #: lxGUI.cxx:283 #: lxSView.cxx:262 msgid "Rotation" msgstr "авъртане" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 #: lxGUI.cxx:276 #: lxGUI.cxx:284 #: lxSView.cxx:405 #: lxSView.cxx:532 msgid "Lock rotation" msgstr "Заключване на завъртането" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "Ортогонална" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 #: lxSView.cxx:380 msgid "Orthogonal view" msgstr "Ортогонална проекция" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "Стерео" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 #: lxSView.cxx:263 msgid "Stereo mode" msgstr "Стерео изобразяване" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Профил" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Профил" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "Оптимално приближаване" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "Оптимално приближаване" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "Нулиране" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "Стандартен изглед" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 #: lxSScene.cxx:218 #: lxSScene.cxx:249 #: lxSScene.cxx:286 msgid "Centerline" msgstr "Антена" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Покажи антената" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 #: lxSScene.cxx:219 #: lxSScene.cxx:250 #: lxSScene.cxx:287 msgid "Walls" msgstr "Стени" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "Покажи стените" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 #: lxSScene.cxx:220 #: lxSScene.cxx:251 #: lxSScene.cxx:300 msgid "Surface" msgstr "ПОвърхност" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "Покажи повърхността" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 #: lxSScene.cxx:253 msgid "Bounding box" msgstr "Рамка" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "Покажи рамката" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 #: lxSScene.cxx:223 #: lxSScene.cxx:255 msgid "Indicators" msgstr "Индикатори" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "Покажи индикатори" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "Настройки на камерата" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "Настройки на сцената" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "Цял екран" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "&Отвори...\tCtrl+O" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "&Презареди\tCtrl+R" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "&Рендирай във файл\tCtrl+P" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "На&стройки на рендиране..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "&Изход\tCtrl+Q" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "Завъртане на ляво\tДясно" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "Завъртане на дясно\tЛяво" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "Поглед от горе\tДолу" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "Поглед от долу\tГоре" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "Движение на горе\tShift+Долу" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "Движение на долу\tShift+Горе" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "Движение на ляво\tShift+Дясно" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "Движение на дясно\tShift+Ляво" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "Приближи\tCtrl+Горе" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "Отдалечи\tCtrl+Долу" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "Оптимално приближение\tSpace" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "&План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "Про&фил" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "&Север" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "&Запад" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "&Изток" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "&Юг" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "&Нулиране" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "Камера" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "Сцена" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "Действие" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 #: lxSView.cxx:259 msgid "Orientation" msgstr "Ориентация" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "Ортогонална" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "Цял екран\tF11" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "&Камера" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "&Сцена" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "&Настройки..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "&Съдържание...\tF1" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "&Контрол" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "&Рендиране" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "&Бъгове" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "За &програмата..." # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "&Файл" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "&Изглед" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "&Инструменти" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "По&мощ" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "Всички поддържани файлове (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлове (*.lox)|*.lox|Compass PLT файлове (*.plt)|*.plt|Survex 3D файлове (*.3d)|*.3d" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "Създавам 3D model, моля, изчакайте..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "Грешка при четене на входният файл" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 #: lxRender.cxx:664 msgid "Error" msgstr "Грешка" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "Настройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "Генерални настройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "Стандартна директория" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "Преглед..." # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Стандартни стерео цветове" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 #: lxSView.cxx:435 msgid "red & cyan" msgstr "червено & циян" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 #: lxSView.cxx:436 msgid "red & green" msgstr "червено & зелено" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 #: lxSView.cxx:437 msgid "red & blue" msgstr "червено & синьо" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 #: lxSView.cxx:438 msgid "yellow & blue" msgstr "жълто & синьо" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 #: lxSView.cxx:439 msgid "cyan & red" msgstr "циян & червено" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 #: lxSView.cxx:440 msgid "green & red" msgstr "зелено & червено" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 #: lxSView.cxx:441 msgid "blue & red" msgstr "синьо & червено" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 #: lxSView.cxx:442 msgid "blue & yellow" msgstr "синьо & жълто" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "запомни последно използваните канали" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "Експраполация на стени" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "Не екстраполирай стените" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "Екстраполирай само файлове без информация за стени" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "Екстраполирай всичката липстваща информация за стени" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 #: lxRender.cxx:321 msgid "OK" msgstr "OK" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 #: lxRender.cxx:322 msgid "Cancel" msgstr "Отказ" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "Размер и мащабиране" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "Снимка на екрана" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "Ширина на снимка" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 #: lxRender.cxx:270 msgid "(mm)" msgstr "(mm)" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "Височина на снимка" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "Размер" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "1 :" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "Настройки на изображението" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "Резолюция на рендирането (dpi)" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "Размер на изображението:" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "00 x 00 (00.0 MB)" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "Бял фон" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "Запиши рендираното като" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "PPM файл (*.ppm)|*.ppm" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "PDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmp" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "Неуспех при запис на файл." # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "Рендиране (%d x %d, %.1f MB) ..." # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "Рендиране към изображение" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr "Сцена" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "Видимост" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 #: lxSScene.cxx:271 msgid "Color mode" msgstr "Режим на цветовете" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "Обекти в сцената" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "Стандартни" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "Отнася се за" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "Видимост на антената" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "Подземята" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 #: lxSScene.cxx:330 msgid "Transparency" msgstr "Прозрачност" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "Текстура" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "Име на проекта" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 #: lxSView.cxx:470 msgid "Close" msgstr "Затвори" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr "Камера" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Център" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "Фокус" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "Азимут (градуси)" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "Наклон (градуси)" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Център на ротация" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "X - изток (m)" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "Y - север (m)" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "Надм. височина (m)" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "Разстояние (m)" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "Фокус (mm)" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "Включи ротация" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "Скорост на ротация" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "Стерео изображение" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "Раздалеченост на очите" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "Изключи цветните текстури" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Цветни канали" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "Заключи скоростта на ротация" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "%ld" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "%.14e" therion-5.4.1/loch/locale/en_GB/000077500000000000000000000000001307545355600163445ustar00rootroot00000000000000therion-5.4.1/loch/locale/en_GB/loch.mo000066400000000000000000000020551307545355600176300ustar00rootroot00000000000000 01Q Xcy  ka       3D visualization tool for cavesCenterCenterlineCenterline visibilityColor channelsColor modeDefault stereo colorsDisable color texturesProfileProfile viewRotation centerShow centerlineProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2017-01-27 02:09+0000 Last-Translator: aa Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: British English X-Poedit-Country: UK X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. X-Poedit-SearchPath-0: . 3D visualisation tool for cavesCentreCentrelineCentreline visibilityColour channelsColour modeDefault stereo coloursDisable colour texturesElevationElevation viewRotation centreShow centrelinetherion-5.4.1/loch/locale/en_GB/loch.po000066400000000000000000000415221307545355600176350ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2017-01-27 02:09+0000\n" "Last-Translator: aa \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: British English\n" "X-Poedit-Country: UK\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "3D visualisation tool for caves" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "" #: lxData.cxx:84 msgid "No file open" msgstr "" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "" # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 #: lxSScene.cxx:273 msgid "Altitude" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 #: lxGUI.cxx:575 msgid "Open" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 #: lxRender.cxx:236 msgid "Rendering setup" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 #: lxGUI.cxx:275 #: lxGUI.cxx:283 #: lxSView.cxx:262 msgid "Rotation" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 #: lxGUI.cxx:276 #: lxGUI.cxx:284 #: lxSView.cxx:405 #: lxSView.cxx:532 msgid "Lock rotation" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 #: lxSView.cxx:380 msgid "Orthogonal view" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 #: lxSView.cxx:263 msgid "Stereo mode" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Elevation" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Elevation view" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 #: lxSScene.cxx:218 #: lxSScene.cxx:249 #: lxSScene.cxx:286 msgid "Centerline" msgstr "Centreline" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Show centreline" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 #: lxSScene.cxx:219 #: lxSScene.cxx:250 #: lxSScene.cxx:287 msgid "Walls" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 #: lxSScene.cxx:220 #: lxSScene.cxx:251 #: lxSScene.cxx:300 msgid "Surface" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 #: lxSScene.cxx:253 msgid "Bounding box" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 #: lxSScene.cxx:223 #: lxSScene.cxx:255 msgid "Indicators" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 #: lxSView.cxx:259 msgid "Orientation" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "" # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 #: lxRender.cxx:664 msgid "Error" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Default stereo colours" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 #: lxSView.cxx:435 msgid "red & cyan" msgstr "" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 #: lxSView.cxx:436 msgid "red & green" msgstr "" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 #: lxSView.cxx:437 msgid "red & blue" msgstr "" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 #: lxSView.cxx:438 msgid "yellow & blue" msgstr "" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 #: lxSView.cxx:439 msgid "cyan & red" msgstr "" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 #: lxSView.cxx:440 msgid "green & red" msgstr "" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 #: lxSView.cxx:441 msgid "blue & red" msgstr "" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 #: lxSView.cxx:442 msgid "blue & yellow" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 #: lxRender.cxx:321 msgid "OK" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 #: lxRender.cxx:322 msgid "Cancel" msgstr "" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 #: lxRender.cxx:270 msgid "(mm)" msgstr "" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "" # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "" # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 #: lxSScene.cxx:271 msgid "Color mode" msgstr "Colour mode" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "Centreline visibility" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 #: lxSScene.cxx:330 msgid "Transparency" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 #: lxSView.cxx:470 msgid "Close" msgstr "" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr "" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Centre" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Rotation centre" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "Disable colour textures" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Colour channels" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "" therion-5.4.1/loch/locale/ru/000077500000000000000000000000001307545355600160205ustar00rootroot00000000000000therion-5.4.1/loch/locale/ru/loch.mo000066400000000000000000000250511307545355600173050ustar00rootroot00000000000000                , CNU\cjpv{ P Y f q ~!    2H _l  )0 ; JW` f q}      #9O b o|   G # (2; C P^ eqx (:LUet      $, 4 ?L lx      ' 2> E P [g {  '/5<@ Z hv     " 8Y m y B:K1GVLh    -:Tj05408i|!# =cm)" LWi##)$ #6 Z %o < & & * !&K!"r!!!!!!!"".")G"Pq"""" " " ##7#!P#r##+#)#!#'$'D$,l$ $*$9$/ %9%J%!f%&%% %%%&,&$K&%p&'&&& &''3'D'b'A{''&''( (+&(R("d( ((((( )-)M)e)))M)*WzN0<`  G;KXD_Cj=&tawFYoZi+M]~c.V'*|:$PHs8 (?Bn5@^Q97,L uElJhpTR x-![)3m4/r61OkAf>bv%gd\y"{qU 2e#SI} Camera Scene%+03d°%.14e%03d°%ld&About...&Bugs&Camera&Contents... F1&Control&East&File&Help&North&Open... Ctrl+O&Options...&Plan&Reload Ctrl+R&Render to file Ctrl+P&Rendering&Reset&Scene&South&Tools&View&West(mm)00 x 00 (00.0 MB)1 :3D visualization tool for cavesAbout LochActionAll supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3dAltitudeAltitude (m)Applies toBounding boxBrowse...Building 3D model, please wait...CameraCamera setupCancelCenterCenterlineCenterline visibilityCloseColor channelsColor modeDefaultDefault data files directoryDefault stereo colorsDisable color texturesDistance (m)Do not extrapolate wallsE&xit Ctrl+QEasting (m)Enable rotationEnable stereo modeErrorError reading input fileExtrapolate all missing walls informationExtrapolate only files without walls informationEye separationFacing (deg)Fit zoomFocusFocus (mm)Full screenFull screen F11General optionsImage heightImage optionsImage size:Image widthIndicatorsLock rotationLock rotation speedLower viewpoint UpMove down Shift+UpMove left Shift+RightMove right Shift+LeftMove up Shift+DownNo file openNorthing (m)OKOpenOpen fileOptionsOrientationOrthoOrthogonalOrthogonal viewPDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmpPPM files (*.ppm)|*.ppmPlanPlan viewPro&fileProfileProfile viewProject titleReloadReload fileRenderRender to fileRendering &setup...Rendering (%d x %d, %.1f MB) ...Rendering at %.1f fps.Rendering resolution (dpi)Rendering setupRendering to bitmapResetReset viewpointRotate left RightRotate right LeftRotationRotation centerRotation speedSave rendering asScaleSceneScene itemsScene setupScreen shotShow bounding boxShow centerlineShow indicatorsShow surfaceShow wallsSize and scalingStereoStereo modeSurfaceTextureTilt (deg)TransparencyUnable to open file for output.UndergroundUpper viewpoint DownVersion: VisibilityWallsWalls extrapolationWhite backgroundZoom in Ctrl+UpZoom out Ctrl+DownZoom to fitZoom to fit Spaceblue & redblue & yellowcyan & redgreen & rednonamered & bluered & cyanred & greenremember last used channelsyellow & blueProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2017-04-10 17:01+0100 Last-Translator: Language-Team: russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. Plural-Forms: и; Language: ru X-Generator: Poedit 2.0 X-Poedit-SearchPath-0: . Камера Сцена%+03d°%.14e%03d°%ldО &программе...&Ошибки&Камера&Содержание... F1&Управление&Восток&Файл&Помощь&Север&Открыть... Ctrl+O&Настройки...&План&Перезагрузить Ctrl+R&Рендер в файл Ctrl+P&Рендеринг&Сброс&Сцена&Юг&Инструменты&Просмотр&Запад(mm)00 x 00 (00.0 MB)1 :Инструмент для 3D визуализации пещерО программе LochДействиеВсе поддерживаемые форматы (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлы (*.lox)|*.lox|Compass PLT файлы (*.plt)|*.plt|Survex 3D файлы (*.3d)|*.3dАльтитудаАльтитуда (м)Применить кГраницыВыбрать...Создание 3D модели, пожалуйста подождите...КамераНастройки камерыОтменаЦентрНитка ходаПоказ нитки ходаЗкрытьКаналы цветовРежим цветаПо умолчаниюПуть к данным по умолчаниюСтандартные цвета для стереоОтключить цветовые текстурыРасстояние (м)Не экстраполировать стены&Выход Ctrl+QX - В-З (м)Включить вращениеСтерео изображениеОшибкаОщибка рендеринга входного файлаЭкстраполировать всю недостающую информацию о стенахЭкстраполировать только для файлов без информации о стенахРазнос глазАзимут (градусы)Оптимально приблизитьФокусФокус (мм)На весь экранНа весь экран F11Основные настройкиВысота изображенияНастройки изображенияРазмер изображения:Ширина изображенияИндикаторыБлокировка вращенияЗафиксировать скорость вращенияПросмотр снизу ВверхСдвиг вверх Shift+ВверхСдвиг вправо Shift+ВправоСдвиг влево Shift+ВлевоСдвиг вниз Shift+ВнизФайл не загруженY - С-Ю (м)OKОткрытьОткрыть файлНастройкиОриентацияОртогональноОртогональноОртогонально проекцииPDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmpPPM файл (*.ppm)|*.ppmПланПлан&РазрезРазрезРазрезНазвание проектаПрезагрузитьПрезагрузить файлРендеритьРендерить в файлНастройка &рендеринга...Рендеринг (%d x %d, %.1f MB) ...Рендеринг на %.1f fps.Разрешние рендера (dpi)Настройки РендерингаРендеринг в изображениеСбросСброс точки наблюдентяВращение против часовой ВправоВращение по часовой ВлевоВращениеЦентр вращенияСкорость вращенияСохранить рендер какМасштабСценаОбъекты в сценеНастройки сценыСнимок экранаПоказать границы моделиПоказать нитку ходаПоказать индикаторыПоказать поверхностьПоказать стеныРазмер и масшабСтереоСтерео режимПоверхностьТекстураНаклон (градусы)ПрозрачностьНевозможно открыть файл для записи.ПодземельеПросмотр сверху ВнизВерсия: ВидимостьСтеныЭкстраполировать стеныБелый фонУвеличить Ctrl+ВверхУменьшить Ctrl+ВнизВместитьВместить Пробелсиний & красныйсиний & желтыйголубой & красныйзеленый & красныйнет названиякрасный & синийкрасный & голубойкрасный & зеленыйзапомнить последние изпользованые каналыжелтый & синийtherion-5.4.1/loch/locale/ru/loch.po000066400000000000000000000517611307545355600173170ustar00rootroot00000000000000# # Andrey Kozhenkov , 2017. # msgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2017-04-10 17:01+0100\n" "Last-Translator: \n" "Language-Team: russian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "Plural-Forms: и;\n" "Language: ru\n" "X-Generator: Poedit 2.0\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "О программе Loch" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "Инструмент для 3D визуализации пещер" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "Версия: " #: lxData.cxx:84 msgid "No file open" msgstr "Файл не загружен" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "Рендеринг на %.1f fps." # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "%03d°" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "%+03d°" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 lxSScene.cxx:273 msgid "Altitude" msgstr "Альтитуда" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "нет названия" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 lxGUI.cxx:575 msgid "Open" msgstr "Открыть" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "Открыть файл" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "Презагрузить" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "Презагрузить файл" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "Рендерить" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "Рендерить в файл" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 lxRender.cxx:236 msgid "Rendering setup" msgstr "Настройки Рендеринга" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 lxGUI.cxx:275 lxGUI.cxx:283 lxSView.cxx:262 msgid "Rotation" msgstr "Вращение" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 lxGUI.cxx:276 lxGUI.cxx:284 lxSView.cxx:405 lxSView.cxx:532 msgid "Lock rotation" msgstr "Блокировка вращения" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "Ортогонально" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 lxSView.cxx:380 msgid "Orthogonal view" msgstr "Ортогонально проекции" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "Стерео" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 lxSView.cxx:263 msgid "Stereo mode" msgstr "Стерео режим" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Разрез" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Разрез" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "Оптимально приблизить" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "Вместить" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "Сброс" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "Сброс точки наблюдентя" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 lxSScene.cxx:218 lxSScene.cxx:249 lxSScene.cxx:286 msgid "Centerline" msgstr "Нитка хода" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Показать нитку хода" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 lxSScene.cxx:219 lxSScene.cxx:250 lxSScene.cxx:287 msgid "Walls" msgstr "Стены" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "Показать стены" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 lxSScene.cxx:220 lxSScene.cxx:251 lxSScene.cxx:300 msgid "Surface" msgstr "Поверхность" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "Показать поверхность" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 lxSScene.cxx:253 msgid "Bounding box" msgstr "Границы" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "Показать границы модели" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 lxSScene.cxx:223 lxSScene.cxx:255 msgid "Indicators" msgstr "Индикаторы" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "Показать индикаторы" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "Настройки камеры" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "Настройки сцены" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "На весь экран" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "&Открыть...\tCtrl+O" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "&Перезагрузить\tCtrl+R" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "&Рендер в файл\tCtrl+P" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "Настройка &рендеринга..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "&Выход\tCtrl+Q" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "Вращение против часовой\tВправо" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "Вращение по часовой\tВлево" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "Просмотр сверху\tВниз" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "Просмотр снизу\tВверх" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "Сдвиг вниз\tShift+Вниз" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "Сдвиг вверх\tShift+Вверх" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "Сдвиг вправо\tShift+Вправо" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "Сдвиг влево\tShift+Влево" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "Увеличить\tCtrl+Вверх" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "Уменьшить\tCtrl+Вниз" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "Вместить\tПробел" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "&План" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "&Разрез" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "&Север" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "&Запад" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "&Восток" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "&Юг" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "&Сброс" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "Камера" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "Сцена" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "Действие" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 lxSView.cxx:259 msgid "Orientation" msgstr "Ориентация" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "Ортогонально" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "На весь экран\tF11" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "&Камера" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "&Сцена" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "&Настройки..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "&Содержание...\tF1" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "&Управление" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "&Рендеринг" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "&Ошибки" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "О &программе..." # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "&Файл" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "&Просмотр" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "&Инструменты" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "&Помощь" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "Все поддерживаемые форматы (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch файлы (*.lox)|*.lox|Compass PLT файлы (*.plt)|*.plt|Survex 3D файлы (*.3d)|*.3d" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "Создание 3D модели, пожалуйста подождите..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "Ощибка рендеринга входного файла" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 lxRender.cxx:664 msgid "Error" msgstr "Ошибка" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "Настройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "Основные настройки" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "Путь к данным по умолчанию" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "Выбрать..." # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Стандартные цвета для стерео" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 lxSView.cxx:435 msgid "red & cyan" msgstr "красный & голубой" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 lxSView.cxx:436 msgid "red & green" msgstr "красный & зеленый" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 lxSView.cxx:437 msgid "red & blue" msgstr "красный & синий" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 lxSView.cxx:438 msgid "yellow & blue" msgstr "желтый & синий" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 lxSView.cxx:439 msgid "cyan & red" msgstr "голубой & красный" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 lxSView.cxx:440 msgid "green & red" msgstr "зеленый & красный" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 lxSView.cxx:441 msgid "blue & red" msgstr "синий & красный" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 lxSView.cxx:442 msgid "blue & yellow" msgstr "синий & желтый" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "запомнить последние изпользованые каналы" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "Экстраполировать стены" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "Не экстраполировать стены" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "Экстраполировать только для файлов без информации о стенах" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "Экстраполировать всю недостающую информацию о стенах" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 lxRender.cxx:321 msgid "OK" msgstr "OK" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 lxRender.cxx:322 msgid "Cancel" msgstr "Отмена" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "Размер и масшаб" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "Снимок экрана" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "Ширина изображения" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 lxRender.cxx:270 msgid "(mm)" msgstr "(mm)" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "Высота изображения" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "Масштаб" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "1 :" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "Настройки изображения" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "Разрешние рендера (dpi)" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "Размер изображения:" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "00 x 00 (00.0 MB)" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "Белый фон" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "Сохранить рендер как" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "PPM файл (*.ppm)|*.ppm" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "PDF файл (*.pdf)|*.pdf|PNG файл (*.png)|*.png|BMP файл (*.bmp)|*.bmp" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "Невозможно открыть файл для записи." # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "Рендеринг (%d x %d, %.1f MB) ..." # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "Рендеринг в изображение" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr " Сцена" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "Видимость" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 lxSScene.cxx:271 msgid "Color mode" msgstr "Режим цвета" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "Объекты в сцене" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "По умолчанию" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "Применить к" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "Показ нитки хода" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "Подземелье" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 lxSScene.cxx:330 msgid "Transparency" msgstr "Прозрачность" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "Текстура" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "Название проекта" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 lxSView.cxx:470 msgid "Close" msgstr "Зкрыть" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr " Камера" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Центр" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "Фокус" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "Азимут (градусы)" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "Наклон (градусы)" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Центр вращения" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "X - В-З (м)" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "Y - С-Ю (м)" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "Альтитуда (м)" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "Расстояние (м)" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "Фокус (мм)" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "Включить вращение" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "Скорость вращения" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "Стерео изображение" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "Разнос глаз" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "Отключить цветовые текстуры" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Каналы цветов" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "Зафиксировать скорость вращения" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "%ld" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "%.14e" therion-5.4.1/loch/locale/sk/000077500000000000000000000000001307545355600160075ustar00rootroot00000000000000therion-5.4.1/loch/locale/sk/loch.mo000066400000000000000000000213161307545355600172740ustar00rootroot00000000000000                , CNU\cjpv{ P Y f q ~!    2H _l  )0 ; JW` f q}      #9O b o|   G # (2; C P^ eqx (:LUet      $, 4 ?L lx      ' 2> E P [g h #29 A NZckry    1$5Zbh) 2 ?(Iry   !-CTds'*" 5AQ Yfv  -BXr     M-{  4Um   + A H O _ q       !! !! *!K!T!k! s!!! !!!!!""$"="Q"Z"m""#""WzN0<`  G;KXD_Cj=&tawFYoZi+M]~c.V'*|:$PHs8 (?Bn5@^Q97,L uElJhpTR x-![)3m4/r61OkAf>bv%gd\y"{qU 2e#SI} Camera Scene%+03d°%.14e%03d°%ld&About...&Bugs&Camera&Contents... F1&Control&East&File&Help&North&Open... Ctrl+O&Options...&Plan&Reload Ctrl+R&Render to file Ctrl+P&Rendering&Reset&Scene&South&Tools&View&West(mm)00 x 00 (00.0 MB)1 :3D visualization tool for cavesAbout LochActionAll supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3dAltitudeAltitude (m)Applies toBounding boxBrowse...Building 3D model, please wait...CameraCamera setupCancelCenterCenterlineCenterline visibilityCloseColor channelsColor modeDefaultDefault data files directoryDefault stereo colorsDisable color texturesDistance (m)Do not extrapolate wallsE&xit Ctrl+QEasting (m)Enable rotationEnable stereo modeErrorError reading input fileExtrapolate all missing walls informationExtrapolate only files without walls informationEye separationFacing (deg)Fit zoomFocusFocus (mm)Full screenFull screen F11General optionsImage heightImage optionsImage size:Image widthIndicatorsLock rotationLock rotation speedLower viewpoint UpMove down Shift+UpMove left Shift+RightMove right Shift+LeftMove up Shift+DownNo file openNorthing (m)OKOpenOpen fileOptionsOrientationOrthoOrthogonalOrthogonal viewPDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmpPPM files (*.ppm)|*.ppmPlanPlan viewPro&fileProfileProfile viewProject titleReloadReload fileRenderRender to fileRendering &setup...Rendering (%d x %d, %.1f MB) ...Rendering at %.1f fps.Rendering resolution (dpi)Rendering setupRendering to bitmapResetReset viewpointRotate left RightRotate right LeftRotationRotation centerRotation speedSave rendering asScaleSceneScene itemsScene setupScreen shotShow bounding boxShow centerlineShow indicatorsShow surfaceShow wallsSize and scalingStereoStereo modeSurfaceTextureTilt (deg)TransparencyUnable to open file for output.UndergroundUpper viewpoint DownVersion: VisibilityWallsWalls extrapolationWhite backgroundZoom in Ctrl+UpZoom out Ctrl+DownZoom to fitZoom to fit Spaceblue & redblue & yellowcyan & redgreen & rednonamered & bluered & cyanred & greenremember last used channelsyellow & blueProject-Id-Version: Loch POT-Creation-Date: PO-Revision-Date: 2007-07-12 09:21+0100 Last-Translator: aa Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Slovak X-Poedit-Country: SLOVAKIA X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: ../.. X-Poedit-SearchPath-0: . Kamera Scéna%+03d°%.14e%03d°%ldO &programe...&Chyby&Kamera&Obsah... F1O&vládanie&Východ&SúborPo&moc&Sever&Otvoriť... Ctrl+O&Nastavenia...&Pôdorys&Znovu načítať Ctrl+R&Rendrovať do súboru Ctrl+P&Rendrovanie&Reset&Scéna&Juh&Nástroje&Pohľad&Západ(mm)00 x 00 (00.0 MB)1 :Program na 3D vizualizáciu jaskýňO LochuAkciaVšetky podporované súbory (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch súbory (*.lox)|*.lox|Compass PLT súbory (*.plt)|*.plt|Survex 3D súbory (*.3d)|*.3dNadmorská výškaNadm. výška (m)Týka saOhraničenieNájdi...Spracúvam 3D model, prosím čakajte...KameraNastavenie kameryZrušiťStredPolygónViditeľnosť polygónuZatvoriťFarebné kanályFarebný módŠtandardnéŠtandardný adresár so súbormiŠtandardné stereo farbyČiernobiele textúryVzdialenosť (m)Neextrapolovať&Koniec Ctrl+QX - východ (m)Automatické otáčanieStereo zobrazenieChybaChyba pri čítaní súboruExtrapolovať všetky chýbajúce stenyExtrapolovať len súbory úplne bez stienVzdialenosť očíAzimut (st)Optimálny zoomOhniskoOhnisko (mm)Celá obrazovkaCelá obrazovka F11Všeobecné nastaveniaVýška obrázkuNastavenia obrázkuVeľkosť obrázku:Šírka obrázkuIndikátoryZamknúť otáčanieUzamknúť rýchlosť otáčaniaZmenšiť sklon HorePosun dolu Shift+HorePosun vľavo Shift+VpravoPosun vpravo Shift+VľavoPosun hore Shift+DoleNie je otvorený súborY - sever (m)OKOtvoriťOtvoriť súborNastaveniaOrientáciaOrtogonálneOrtogonálneOrtogonálne zobrazeniePDF súbory (*.pdf)|*.pdf|PNG súbory (*.png)|*.png|BMP súbory (*.bmp)|*.bmpPPM súbory (*.ppm)|*.ppmPôdorysPôdorysBoko&rysBokorysBokorysNázov projektuZnovu načítaťZnovu načíať súborRendrovaťRendrovať do súboruNa&stavenie rendrovania...Rendrujem (%d x %d, %.1f MB) ...Rendrovanie (%.1f fps).Rozlíšenie (dpi)Nastavenie rendrovaniaRendrovanie do súboruResetŠtandardný pohľadOtočiť doľava VpravoOtočiť doprava VľavoOtáčanieStred otáčaniaRýchlosť otáčaniaUložiť obrázok akoMierkaScénaPoložky scényNastavenie scényKópia obrazovkyZobraz ohraničenieZobraz polygónZobraz indikátoryZobraz povrchZobraz stenyVeľkosť a mierkaStereoStereo zobrazeniePovrchTextúrySklon (st)PriehľadnosťNemôžem zapisovať do súboru.PodzemieZväčšiť sklon DoleVerzia:ViditeľnosťStenyExtrapolácia stienBiele pozadieZväčši zoom Ctrl+HoreZmenši zoom Ctrl+DoleOptimálny zoomOptimálny zoom Medzeramodrá & červenámodrá & žltázelenomodrá & červenázelená & červenábez menačervená & modráčervená & zelenomodráčervená & zelenápamätať naposledy použité farbyžltá & modrátherion-5.4.1/loch/locale/sk/loch.po000066400000000000000000000463261307545355600173070ustar00rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: Loch\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-07-12 09:21+0100\n" "Last-Translator: aa \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Slovak\n" "X-Poedit-Country: SLOVAKIA\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: ../..\n" "X-Poedit-SearchPath-0: .\n" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:53 #: lxAboutDlg.cxx:54 msgid "About Loch" msgstr "O Lochu" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:76 #: lxAboutDlg.cxx:77 msgid "3D visualization tool for caves" msgstr "Program na 3D vizualizáciu jaskýň" # C:/Projects/MSVCProjects/loch/lxAboutDlg.cxx:78 #: lxAboutDlg.cxx:79 msgid "Version: " msgstr "Verzia:" #: lxData.cxx:84 msgid "No file open" msgstr "Nie je otvorený súbor" # c:/cave/loch/loch/lxGLCs.cxx:381 #: lxGLCs.cxx:412 #, c-format msgid "Rendering at %.1f fps." msgstr "Rendrovanie (%.1f fps)." # c:/cave/loch/loch/lxGLCx.cxx:542 #: lxGLCx.cxx:605 #, c-format msgid "%03d°" msgstr "%03d°" # c:/cave/loch/loch/lxGLCx.cxx:633 #: lxGLCx.cxx:696 #, c-format msgid "%+03d°" msgstr "%+03d°" # c:/cave/loch/loch/lxSScene.cxx:222 # c:/cave/loch/loch/lxSScene.cxx:324 #: lxGLCx.cxx:736 #: lxSScene.cxx:273 msgid "Altitude" msgstr "Nadmorská výška" # c:/cave/loch/loch/lxGUI.cxx:94 #: lxGUI.cxx:155 msgid "noname" msgstr "bez mena" # c:/cave/loch/loch/lxGUI.cxx:98 # c:/cave/loch/loch/lxGUI.cxx:354 #: lxGUI.cxx:206 #: lxGUI.cxx:575 msgid "Open" msgstr "Otvoriť" # c:/cave/loch/loch/lxGUI.cxx:98 #: lxGUI.cxx:206 msgid "Open file" msgstr "Otvoriť súbor" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload" msgstr "Znovu načítať" # c:/cave/loch/loch/lxGUI.cxx:99 #: lxGUI.cxx:207 msgid "Reload file" msgstr "Znovu načíať súbor" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render" msgstr "Rendrovať" # c:/cave/loch/loch/lxGUI.cxx:100 #: lxGUI.cxx:209 msgid "Render to file" msgstr "Rendrovať do súboru" # c:/cave/loch/loch/lxPrint.cxx:291 # c:/cave/loch/loch/lxRender.cxx:237 #: lxGUI.cxx:210 #: lxRender.cxx:236 msgid "Rendering setup" msgstr "Nastavenie rendrovania" # c:/cave/loch/loch/lxGUI.cxx:102 # c:/cave/loch/loch/lxGUI.cxx:152 # c:/cave/loch/loch/lxSView.cxx:257 #: lxGUI.cxx:212 #: lxGUI.cxx:275 #: lxGUI.cxx:283 #: lxSView.cxx:262 msgid "Rotation" msgstr "Otáčanie" # c:/cave/loch/loch/lxGUI.cxx:103 # c:/cave/loch/loch/lxGUI.cxx:153 # c:/cave/loch/loch/lxSView.cxx:400 # c:/cave/loch/loch/lxSView.cxx:526 #: lxGUI.cxx:213 #: lxGUI.cxx:276 #: lxGUI.cxx:284 #: lxSView.cxx:405 #: lxSView.cxx:532 msgid "Lock rotation" msgstr "Zamknúť otáčanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 #: lxGUI.cxx:214 msgid "Ortho" msgstr "Ortogonálne" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:217 # C:/Projects/MSVCProjects/loch/lxSView.cxx:380 #: lxGUI.cxx:214 #: lxSView.cxx:380 msgid "Orthogonal view" msgstr "Ortogonálne zobrazenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:218 #: lxGUI.cxx:215 msgid "Stereo" msgstr "Stereo" # c:/cave/loch/loch/lxGUI.cxx:107 # c:/cave/loch/loch/lxSView.cxx:258 #: lxGUI.cxx:215 #: lxSView.cxx:263 msgid "Stereo mode" msgstr "Stereo zobrazenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan" msgstr "Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:220 #: lxGUI.cxx:217 msgid "Plan view" msgstr "Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile" msgstr "Bokorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:221 #: lxGUI.cxx:218 msgid "Profile view" msgstr "Bokorys" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Fit zoom" msgstr "Optimálny zoom" # c:/cave/loch/loch/lxGUI.cxx:104 #: lxGUI.cxx:219 msgid "Zoom to fit" msgstr "Optimálny zoom" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset" msgstr "Reset" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:223 #: lxGUI.cxx:220 msgid "Reset viewpoint" msgstr "Štandardný pohľad" # c:/cave/loch/loch/lxSScene.cxx:169 # c:/cave/loch/loch/lxSScene.cxx:200 # c:/cave/loch/loch/lxSScene.cxx:231 # c:/cave/loch/loch/lxSScene.cxx:362 #: lxGUI.cxx:222 #: lxSScene.cxx:218 #: lxSScene.cxx:249 #: lxSScene.cxx:286 msgid "Centerline" msgstr "Polygón" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:225 #: lxGUI.cxx:222 msgid "Show centerline" msgstr "Zobraz polygón" # c:/cave/loch/loch/lxSScene.cxx:170 # c:/cave/loch/loch/lxSScene.cxx:201 # c:/cave/loch/loch/lxSScene.cxx:232 # c:/cave/loch/loch/lxSScene.cxx:363 #: lxGUI.cxx:223 #: lxSScene.cxx:219 #: lxSScene.cxx:250 #: lxSScene.cxx:287 msgid "Walls" msgstr "Steny" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:226 #: lxGUI.cxx:223 msgid "Show walls" msgstr "Zobraz steny" # c:/cave/loch/loch/lxSScene.cxx:171 # c:/cave/loch/loch/lxSScene.cxx:202 # c:/cave/loch/loch/lxSScene.cxx:233 # c:/cave/loch/loch/lxSScene.cxx:245 # c:/cave/loch/loch/lxSScene.cxx:364 #: lxGUI.cxx:224 #: lxSScene.cxx:220 #: lxSScene.cxx:251 #: lxSScene.cxx:300 msgid "Surface" msgstr "Povrch" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:227 #: lxGUI.cxx:224 msgid "Show surface" msgstr "Zobraz povrch" # c:/cave/loch/loch/lxSScene.cxx:204 # c:/cave/loch/loch/lxSScene.cxx:365 #: lxGUI.cxx:225 #: lxSScene.cxx:253 msgid "Bounding box" msgstr "Ohraničenie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:228 #: lxGUI.cxx:225 msgid "Show bounding box" msgstr "Zobraz ohraničenie" # c:/cave/loch/loch/lxSScene.cxx:174 #: lxGUI.cxx:226 #: lxSScene.cxx:223 #: lxSScene.cxx:255 msgid "Indicators" msgstr "Indikátory" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:229 #: lxGUI.cxx:226 msgid "Show indicators" msgstr "Zobraz indikátory" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:231 #: lxGUI.cxx:228 msgid "Camera setup" msgstr "Nastavenie kamery" # c:/cave/loch/loch/lxGUI.cxx:110 #: lxGUI.cxx:229 msgid "Scene setup" msgstr "Nastavenie scény" # c:/cave/loch/loch/lxGUI.cxx:112 #: lxGUI.cxx:231 msgid "Full screen" msgstr "Celá obrazovka" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:236 msgid "&Open...\tCtrl+O" msgstr "&Otvoriť...\tCtrl+O" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:240 #: lxGUI.cxx:237 msgid "&Reload\tCtrl+R" msgstr "&Znovu načítať\tCtrl+R" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:242 #: lxGUI.cxx:239 msgid "&Render to file\tCtrl+P" msgstr "&Rendrovať do súboru\tCtrl+P" # c:/cave/loch/loch/lxGUI.cxx:121 #: lxGUI.cxx:240 msgid "Rendering &setup..." msgstr "Na&stavenie rendrovania..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:245 #: lxGUI.cxx:242 msgid "E&xit\tCtrl+Q" msgstr "&Koniec\tCtrl+Q" # c:/cave/loch/loch/lxGUI.cxx:126 #: lxGUI.cxx:247 msgid "Rotate left\tRight" msgstr "Otočiť doľava\tVpravo" # c:/cave/loch/loch/lxGUI.cxx:127 #: lxGUI.cxx:248 msgid "Rotate right\tLeft" msgstr "Otočiť doprava\tVľavo" # c:/cave/loch/loch/lxGUI.cxx:129 #: lxGUI.cxx:250 msgid "Upper viewpoint\tDown" msgstr "Zväčšiť sklon\tDole" # c:/cave/loch/loch/lxGUI.cxx:130 #: lxGUI.cxx:251 msgid "Lower viewpoint\tUp" msgstr "Zmenšiť sklon\tHore" # c:/cave/loch/loch/lxGUI.cxx:132 #: lxGUI.cxx:253 msgid "Move up\tShift+Down" msgstr "Posun hore\tShift+Dole" # c:/cave/loch/loch/lxGUI.cxx:133 #: lxGUI.cxx:254 msgid "Move down\tShift+Up" msgstr "Posun dolu\tShift+Hore" # c:/cave/loch/loch/lxGUI.cxx:134 #: lxGUI.cxx:255 msgid "Move left\tShift+Right" msgstr "Posun vľavo\tShift+Vpravo" # c:/cave/loch/loch/lxGUI.cxx:135 #: lxGUI.cxx:256 msgid "Move right\tShift+Left" msgstr "Posun vpravo\tShift+Vľavo" # c:/cave/loch/loch/lxGUI.cxx:137 #: lxGUI.cxx:258 msgid "Zoom in\tCtrl+Up" msgstr "Zväčši zoom\tCtrl+Hore" # c:/cave/loch/loch/lxGUI.cxx:138 #: lxGUI.cxx:259 msgid "Zoom out\tCtrl+Down" msgstr "Zmenši zoom\tCtrl+Dole" # c:/cave/loch/loch/lxGUI.cxx:139 #: lxGUI.cxx:260 msgid "Zoom to fit\tSpace" msgstr "Optimálny zoom\tMedzera" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:266 #: lxGUI.cxx:263 msgid "&Plan" msgstr "&Pôdorys" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:267 #: lxGUI.cxx:264 msgid "Pro&file" msgstr "Boko&rys" # c:/cave/loch/loch/lxGUI.cxx:144 #: lxGUI.cxx:266 msgid "&North" msgstr "&Sever" # c:/cave/loch/loch/lxGUI.cxx:145 #: lxGUI.cxx:267 msgid "&West" msgstr "&Západ" # c:/cave/loch/loch/lxGUI.cxx:146 #: lxGUI.cxx:268 msgid "&East" msgstr "&Východ" # c:/cave/loch/loch/lxGUI.cxx:147 #: lxGUI.cxx:269 msgid "&South" msgstr "&Juh" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:274 #: lxGUI.cxx:271 msgid "&Reset" msgstr "&Reset" # c:/cave/loch/loch/lxSView.cxx:256 #: lxGUI.cxx:278 msgid "Camera" msgstr "Kamera" # c:/cave/loch/loch/lxGUI.cxx:161 #: lxGUI.cxx:279 msgid "Scene" msgstr "Scéna" # c:/cave/loch/loch/lxGUI.cxx:151 #: lxGUI.cxx:282 msgid "Action" msgstr "Akcia" # c:/cave/loch/loch/lxSView.cxx:254 #: lxGUI.cxx:285 #: lxSView.cxx:259 msgid "Orientation" msgstr "Orientácia" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:289 #: lxGUI.cxx:286 msgid "Orthogonal" msgstr "Ortogonálne" # c:/cave/loch/loch/lxGUI.cxx:157 #: lxGUI.cxx:288 msgid "Full screen\tF11" msgstr "Celá obrazovka\tF11" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:294 #: lxGUI.cxx:291 msgid "&Camera" msgstr "&Kamera" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:295 #: lxGUI.cxx:292 msgid "&Scene" msgstr "&Scéna" # c:/cave/loch/loch/lxGUI.cxx:117 #: lxGUI.cxx:294 msgid "&Options..." msgstr "&Nastavenia..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:300 #: lxGUI.cxx:297 msgid "&Contents...\tF1" msgstr "&Obsah...\tF1" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:301 #: lxGUI.cxx:298 msgid "&Control" msgstr "O&vládanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:302 #: lxGUI.cxx:299 msgid "&Rendering" msgstr "&Rendrovanie" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:303 #: lxGUI.cxx:300 msgid "&Bugs" msgstr "&Chyby" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:305 #: lxGUI.cxx:302 msgid "&About..." msgstr "O &programe..." # c:/cave/loch/loch/lxGUI.cxx:165 #: lxGUI.cxx:305 msgid "&File" msgstr "&Súbor" # c:/cave/loch/loch/lxGUI.cxx:166 #: lxGUI.cxx:306 msgid "&View" msgstr "&Pohľad" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:310 #: lxGUI.cxx:307 msgid "&Tools" msgstr "&Nástroje" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:311 #: lxGUI.cxx:308 msgid "&Help" msgstr "Po&moc" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:581 #: lxGUI.cxx:578 msgid "All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d" msgstr "Všetky podporované súbory (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch súbory (*.lox)|*.lox|Compass PLT súbory (*.plt)|*.plt|Survex 3D súbory (*.3d)|*.3d" # C:/Projects/MSVCProjects/loch/lxGUI.cxx:870 #: lxGUI.cxx:867 msgid "Building 3D model, please wait..." msgstr "Spracúvam 3D model, prosím čakajte..." # C:/Projects/MSVCProjects/loch/lxGUI.cxx:899 #: lxGUI.cxx:896 msgid "Error reading input file" msgstr "Chyba pri čítaní súboru" # c:/cave/loch/loch/lxData.cxx:360 # c:/cave/loch/loch/lxPrint.cxx:466 # c:/cave/loch/loch/lxPrint.cxx:995 # c:/cave/loch/loch/lxRender.cxx:655 #: lxGUI.cxx:896 #: lxRender.cxx:664 msgid "Error" msgstr "Chyba" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:43 #: lxOptDlg.cxx:43 msgid "Options" msgstr "Nastavenia" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:50 #: lxOptDlg.cxx:50 msgid "General options" msgstr "Všeobecné nastavenia" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:54 #: lxOptDlg.cxx:54 msgid "Default data files directory" msgstr "Štandardný adresár so súbormi" # c:/cave/loch/loch/lxPrint.cxx:349 #: lxOptDlg.cxx:60 msgid "Browse..." msgstr "Nájdi..." # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:65 #: lxOptDlg.cxx:64 msgid "Default stereo colors" msgstr "Štandardné stereo farby" # c:/cave/loch/loch/lxSView.cxx:430 #: lxOptDlg.cxx:68 #: lxSView.cxx:435 msgid "red & cyan" msgstr "červená & zelenomodrá" # c:/cave/loch/loch/lxSView.cxx:431 #: lxOptDlg.cxx:69 #: lxSView.cxx:436 msgid "red & green" msgstr "červená & zelená" # c:/cave/loch/loch/lxSView.cxx:432 #: lxOptDlg.cxx:70 #: lxSView.cxx:437 msgid "red & blue" msgstr "červená & modrá" # c:/cave/loch/loch/lxSView.cxx:433 #: lxOptDlg.cxx:71 #: lxSView.cxx:438 msgid "yellow & blue" msgstr "žltá & modrá" # c:/cave/loch/loch/lxSView.cxx:434 #: lxOptDlg.cxx:72 #: lxSView.cxx:439 msgid "cyan & red" msgstr "zelenomodrá & červená" # c:/cave/loch/loch/lxSView.cxx:435 #: lxOptDlg.cxx:73 #: lxSView.cxx:440 msgid "green & red" msgstr "zelená & červená" # c:/cave/loch/loch/lxSView.cxx:436 #: lxOptDlg.cxx:74 #: lxSView.cxx:441 msgid "blue & red" msgstr "modrá & červená" # c:/cave/loch/loch/lxSView.cxx:437 #: lxOptDlg.cxx:75 #: lxSView.cxx:442 msgid "blue & yellow" msgstr "modrá & žltá" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:77 #: lxOptDlg.cxx:76 msgid "remember last used channels" msgstr "pamätať naposledy použité farby" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:85 #: lxOptDlg.cxx:84 msgid "Walls extrapolation" msgstr "Extrapolácia stien" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:89 #: lxOptDlg.cxx:88 msgid "Do not extrapolate walls" msgstr "Neextrapolovať" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:92 #: lxOptDlg.cxx:91 msgid "Extrapolate only files without walls information" msgstr "Extrapolovať len súbory úplne bez stien" # C:/Projects/MSVCProjects/loch/lxOptDlg.cxx:95 #: lxOptDlg.cxx:94 msgid "Extrapolate all missing walls information" msgstr "Extrapolovať všetky chýbajúce steny" # c:/cave/loch/loch/lxPrint.cxx:387 # c:/cave/loch/loch/lxRender.cxx:322 #: lxOptDlg.cxx:102 #: lxRender.cxx:321 msgid "OK" msgstr "OK" # c:/cave/loch/loch/lxPrint.cxx:388 # c:/cave/loch/loch/lxPrint.cxx:775 # c:/cave/loch/loch/lxRender.cxx:323 #: lxOptDlg.cxx:103 #: lxRender.cxx:322 msgid "Cancel" msgstr "Zrušiť" # c:/cave/loch/loch/lxRender.cxx:247 #: lxRender.cxx:246 msgid "Size and scaling" msgstr "Veľkosť a mierka" # c:/cave/loch/loch/lxRender.cxx:251 #: lxRender.cxx:250 msgid "Screen shot" msgstr "Kópia obrazovky" # c:/cave/loch/loch/lxRender.cxx:257 #: lxRender.cxx:256 msgid "Image width" msgstr "Šírka obrázku" # c:/cave/loch/loch/lxRender.cxx:260 # c:/cave/loch/loch/lxRender.cxx:271 #: lxRender.cxx:259 #: lxRender.cxx:270 msgid "(mm)" msgstr "(mm)" # c:/cave/loch/loch/lxRender.cxx:268 #: lxRender.cxx:267 msgid "Image height" msgstr "Výška obrázku" # c:/cave/loch/loch/lxRender.cxx:279 #: lxRender.cxx:278 msgid "Scale" msgstr "Mierka" # c:/cave/loch/loch/lxRender.cxx:282 #: lxRender.cxx:281 msgid "1 :" msgstr "1 :" # c:/cave/loch/loch/lxRender.cxx:293 #: lxRender.cxx:292 msgid "Image options" msgstr "Nastavenia obrázku" # c:/cave/loch/loch/lxPrint.cxx:302 # c:/cave/loch/loch/lxRender.cxx:297 #: lxRender.cxx:296 msgid "Rendering resolution (dpi)" msgstr "Rozlíšenie (dpi)" # c:/cave/loch/loch/lxRender.cxx:307 #: lxRender.cxx:306 msgid "Image size:" msgstr "Veľkosť obrázku:" # c:/cave/loch/loch/lxRender.cxx:310 #: lxRender.cxx:309 msgid "00 x 00 (00.0 MB)" msgstr "00 x 00 (00.0 MB)" # c:/cave/loch/loch/lxPrint.cxx:295 # c:/cave/loch/loch/lxRender.cxx:315 #: lxRender.cxx:314 msgid "White background" msgstr "Biele pozadie" # c:/cave/loch/loch/lxRender.cxx:437 #: lxRender.cxx:436 msgid "Save rendering as" msgstr "Uložiť obrázok ako" # c:/cave/loch/loch/lxPrint.cxx:183 # c:/cave/loch/loch/lxRender.cxx:439 #: lxRender.cxx:438 msgid "PPM files (*.ppm)|*.ppm" msgstr "PPM súbory (*.ppm)|*.ppm" # c:/cave/loch/loch/lxRender.cxx:441 #: lxRender.cxx:440 msgid "PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp" msgstr "PDF súbory (*.pdf)|*.pdf|PNG súbory (*.png)|*.png|BMP súbory (*.bmp)|*.bmp" # c:/cave/loch/loch/lxPrint.cxx:627 # c:/cave/loch/loch/lxPrint.cxx:647 # c:/cave/loch/loch/lxPrint.cxx:872 # c:/cave/loch/loch/lxPrint.cxx:892 # c:/cave/loch/loch/lxRender.cxx:455 #: lxRender.cxx:454 msgid "Unable to open file for output." msgstr "Nemôžem zapisovať do súboru." # c:/cave/loch/loch/lxPrint.cxx:921 # c:/cave/loch/loch/lxRender.cxx:493 #: lxRender.cxx:492 #, c-format msgid "Rendering (%d x %d, %.1f MB) ..." msgstr "Rendrujem (%d x %d, %.1f MB) ..." # c:/cave/loch/loch/lxRender.cxx:494 #: lxRender.cxx:493 msgid "Rendering to bitmap" msgstr "Rendrovanie do súboru" # c:/cave/loch/loch/lxSScene.cxx:147 #: lxSScene.cxx:196 msgid " Scene" msgstr " Scéna" # c:/cave/loch/loch/lxSScene.cxx:167 # c:/cave/loch/loch/lxSScene.cxx:335 #: lxSScene.cxx:216 msgid "Visibility" msgstr "Viditeľnosť" # c:/cave/loch/loch/lxSScene.cxx:168 #: lxSScene.cxx:217 #: lxSScene.cxx:271 msgid "Color mode" msgstr "Farebný mód" # c:/cave/loch/loch/lxSScene.cxx:199 #: lxSScene.cxx:248 msgid "Scene items" msgstr "Položky scény" # c:/cave/loch/loch/lxSScene.cxx:224 #: lxSScene.cxx:279 msgid "Default" msgstr "Štandardné" # c:/cave/loch/loch/lxSScene.cxx:230 #: lxSScene.cxx:285 msgid "Applies to" msgstr "Týka sa" # c:/cave/loch/loch/lxSScene.cxx:243 #: lxSScene.cxx:298 msgid "Centerline visibility" msgstr "Viditeľnosť polygónu" # c:/cave/loch/loch/lxSScene.cxx:244 #: lxSScene.cxx:299 msgid "Underground" msgstr "Podzemie" # c:/cave/loch/loch/lxSScene.cxx:265 # c:/cave/loch/loch/lxSScene.cxx:278 #: lxSScene.cxx:317 #: lxSScene.cxx:330 msgid "Transparency" msgstr "Priehľadnosť" # c:/cave/loch/loch/lxSScene.cxx:282 #: lxSScene.cxx:334 msgid "Texture" msgstr "Textúry" # C:/Projects/MSVCProjects/loch/lxSScene.cxx:398 #: lxSScene.cxx:392 msgid "Project title" msgstr "Názov projektu" # c:/cave/loch/loch/lxSScene.cxx:389 # c:/cave/loch/loch/lxSView.cxx:464 #: lxSScene.cxx:424 #: lxSView.cxx:470 msgid "Close" msgstr "Zatvoriť" # C:/Projects/MSVCProjects/loch/lxSView.cxx:228 #: lxSView.cxx:228 msgid " Camera" msgstr " Kamera" # c:/cave/loch/loch/lxSView.cxx:255 #: lxSView.cxx:260 msgid "Center" msgstr "Stred" # C:/Projects/MSVCProjects/loch/lxSView.cxx:261 #: lxSView.cxx:261 msgid "Focus" msgstr "Ohnisko" # c:/cave/loch/loch/lxSView.cxx:287 #: lxSView.cxx:292 msgid "Facing (deg)" msgstr "Azimut (st)" # c:/cave/loch/loch/lxSView.cxx:298 #: lxSView.cxx:303 msgid "Tilt (deg)" msgstr "Sklon (st)" # c:/cave/loch/loch/lxSView.cxx:323 #: lxSView.cxx:328 msgid "Rotation center" msgstr "Stred otáčania" # c:/cave/loch/loch/lxSView.cxx:327 #: lxSView.cxx:332 msgid "Easting (m)" msgstr "X - východ (m)" # c:/cave/loch/loch/lxSView.cxx:335 #: lxSView.cxx:340 msgid "Northing (m)" msgstr "Y - sever (m)" # c:/cave/loch/loch/lxSView.cxx:343 #: lxSView.cxx:348 msgid "Altitude (m)" msgstr "Nadm. výška (m)" # c:/cave/loch/loch/lxSView.cxx:364 #: lxSView.cxx:369 msgid "Distance (m)" msgstr "Vzdialenosť (m)" # c:/cave/loch/loch/lxSView.cxx:379 #: lxSView.cxx:384 msgid "Focus (mm)" msgstr "Ohnisko (mm)" # c:/cave/loch/loch/lxSView.cxx:399 #: lxSView.cxx:404 msgid "Enable rotation" msgstr "Automatické otáčanie" # c:/cave/loch/loch/lxSView.cxx:401 #: lxSView.cxx:406 msgid "Rotation speed" msgstr "Rýchlosť otáčania" # c:/cave/loch/loch/lxSView.cxx:422 #: lxSView.cxx:427 msgid "Enable stereo mode" msgstr "Stereo zobrazenie" # c:/cave/loch/loch/lxSView.cxx:423 #: lxSView.cxx:428 msgid "Eye separation" msgstr "Vzdialenosť očí" # C:/Projects/MSVCProjects/loch/lxSView.cxx:445 #: lxSView.cxx:445 msgid "Disable color textures" msgstr "Čiernobiele textúry" # c:/cave/loch/loch/lxSView.cxx:441 #: lxSView.cxx:447 msgid "Color channels" msgstr "Farebné kanály" # c:/cave/loch/loch/lxSView.cxx:524 #: lxSView.cxx:530 msgid "Lock rotation speed" msgstr "Uzamknúť rýchlosť otáčania" # c:/cave/loch/loch/lxWX.cxx:200 #: lxWX.cxx:200 #, c-format msgid "%ld" msgstr "%ld" # c:/cave/loch/loch/lxWX.cxx:206 #: lxWX.cxx:206 #, c-format msgid "%.14e" msgstr "%.14e" therion-5.4.1/loch/loch.app/000077500000000000000000000000001307545355600156375ustar00rootroot00000000000000therion-5.4.1/loch/loch.app/Contents/000077500000000000000000000000001307545355600174345ustar00rootroot00000000000000therion-5.4.1/loch/loch.app/Contents/Info.plist000066400000000000000000000027441307545355600214130ustar00rootroot00000000000000 CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier org.wxwindows.. CFBundleDevelopmentRegion English CFBundleExecutable loch CFBundleDocumentTypes CFBundleTypeName Therion loch files. CFBundleTypeIconFile loch.icns CFBundleTypeExtensions lox CFBundleTypeRole Viewer CFBundleIconFile loch.icns CFBundleName loch CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 1.0 CFBundleShortVersionString 1.0 CFBundleGetInfoString loch, (c) 2001-2012 Stacho Mudrak CFBundleLongVersionString loch, (c) 2001-2012 Stacho Mudrak NSHumanReadableCopyright Copyright 2001-2012 Stacho Mudrak LSRequiresCarbon CSResourcesFileMapped therion-5.4.1/loch/loch.app/Contents/PkgInfo000066400000000000000000000000101307545355600207030ustar00rootroot00000000000000APPL????therion-5.4.1/loch/loch.app/Contents/Resources/000077500000000000000000000000001307545355600214065ustar00rootroot00000000000000therion-5.4.1/loch/loch.app/Contents/Resources/loch.icns000066400000000000000000002501511307545355600232150ustar00rootroot00000000000000icnsPiTOC His32`s8mkil32l8mkit32 t8mk@ic08.ic09is32`   s8mk˲ߑridȰUil32͂Ddփu4~U ĝ&)I݀ )H Rݜ )) RUKݜRU K & }} R +ڀ֝ H. .H }Y.Ȁ2] 6DU݈}ݗ)U{KUR`&+ ŷ ǿۑ͂Ddփu4~U ĝ&)I݀ )H Rݜ )) RUKݜRU K & }} R +ڀ֝ H. .H }Y.Ȁ2] 6DU݈}ݗ)U{KUR`&+ ŷ ǿۑ͂Ddփu4~U ĝ&)I݀ )H Rݜ )) RUKݜRU K & }} R +ڀ֝ H. .H }Y.Ȁ2] 6DU݈}ݗ)U{KUR`&+ ŷ ǿۑl8mk   +   W]S5  `    ]  +  ' '& ++ +  & '    a]05 ]  i  I5, ]a + ,IṖ`ù ,,   it32 t8mk@ic08.PNG  IHDR\rf$iCCPICC Profile8UoT>oR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqxl+*pIDATx]ݯǕ ̇`xKȮc kK, 7a"'>XZ(y/_"k%Xo+ {meeot؉q,͗kLꙪss{ouկ9uꉙ(lZP #`;_11*Ƹ銀 #`;_11*Ƹ銀 #`;_11*Ƹ銀 #`;_ܡ%s+ _qk劰nnыg W-V5PyZcEF  zj@Uu"2F^kz+V :Yrp h#7H7`Шwj|򚞅YQECˀU}*FU?5>v~fW%uMoϨߋ,ePb`U `W6sFw) kT0>ày` Y߀ A#NsWS-]v DE@@r*%ҨyᮣEp%HDgr Ȱ5߿ЈaE(HD-)+|6vTC4CF A:w%)7]* m1}5Rh B~HO>(=POQ3j~ޅo=E>t}_7/-on֮]k|ˉܨ(I@nwZߧ׹~]*-gϚ={@G0| G;@z#Qy?D"#-s皝;w*|0r^2PG/~DEᄏ(>Tc՚+ |W= .ĸ@* GJzt}[G}h0`BL P0s|xkVcUV{Gy>y;F %P0Ȣd/xyfwk[,W3999kΛ!(_x[s \H1>@@qATcΝ;g|Ms1XU#Dv޽޷^nCUu- ڣH﴾Ϣ)8g5I2+Wu~(sf֭jr%R| E_i}oy3Mv*4zՖ~>h3yˡ.@)i\WlFzn@RYiQqlTCiڟ*4*>*xW^10C/c*C1Ҹ[j]ǪB8H_nFsSjJs}jcgnj ,[K/]s~Vki`U תZ7Is>5!U5:}U`/Y ^D-@;%Yu91F7_4=BCjt\J*d9m 8 TickU &X,zquyj-ÇgYhUe-a4F*Xy?fgx݇,7PjXtiJwyҠ0h9_۩qNj[fN:-ZY Я M/6Ϸf0~ MPc`Q6ŧԉf [W/^lTwnC4%8.MȈs }C]M }EpFnUmaܢlܸ\v-h|wa0]F<@#c8WԄ9= 6#O`CO_@9s%K.mN?VSA5~4;!q=8vc/~y饗˗" K+\/IǪ9`+h~j릚H92>@}J}j)(uP: `dC2??B~yfw^tl9j~!@ P]W?;vIdK_% O#*Pʎb]1{g_@ q"|bg&`8)>'Nbn-" V~}A) s5XC&UҖu" PR@ `?jhc=fV^mi9l?9E VR:۷o^dQc,"5 @JY~HJ@R.:fa`hkn-|]FŮ*i?8PRBK,1U7 忮zhy@hb#CG#B;-?bVBGތI+CGK$@@V*1KfhkE]HR؋cWh_/"9i#/\`\pH#fA'RF =e4nֽ$_#ZпڄnXsnW'oذ(a8%E.jmۊb[E*pXuXvP*:s5?HrA VHkKP՛@ VH@ ] X@#9%=%O"":z'u)]sJQKiOƟ4_R 4Gz5ݾcR@۰1E&NJ4 {,H+k?iY=d\[@#'M|^I`[kq HIN-xYq OEhj?aܩ!YøS cS~@=޺*d…'4g@,7~O.^h>2g k`J}ǟ˺w}||wg,Ǩ v;RZƝ A4 XڲYxMAs 8,[}|S@9XO[~=/ [;(|NK"@9ĚXOa'|b855e|+ 8 b:R¹<[-s!) nFFxUXJcϝ;g|Msر]z>|׮]3Jck* E_sJJ^ox_z%333c֯_o̓G ~ agO +SG ayw? !u1VЕ BB`'W<gϚe˖NSTUc]E#5øZ(|Cc0I녃R2۷o^Cs55~j7X<7Sf {~NZc]o]XwD xUse˖tּ޹m1e偉]}xw::Ң¹?z-1e{4@ V>tDŋ '4-TD /%zL k5"H:q$:ߵj\:KbD.]<fӦM{UN"@)-ڜ/(.p̏j\bEm~(4K3~`}Qޟǎ|\ !pZ'c*51gm+d0.sQ!u³BĘǺ`}k9b8o%T\S,am> ?$?֍Ǥ@@Б%)e:uڳXG `m `ΝĪ^4?>oo! s#?Xc9˗/v%Dru?۷>|kQrcM(YVc*1Ŝl,FJ_|Lad{ P3 `G\׳ݟ~%?8-~UؚOƍ ,<| ݂9;b<Ǽܟ]~]0`|#B1`8}/u Lnut(uh& 93RIVG|1;sN#ҺsH*-ě:J,GH_P:]7݂Yw+߰]6TnKMt)'BE}2*-#hd []/ƠPq㖰` AQaYV@1_``p5 Td[u5=Tϑ^kT=4pq5 Td "|,A] `_;fq?)_To42AXHW,8E͏5|BsR/ U @] (N;i~zCZP+ )\  Հ0;5?LBbQ*P0!랁EytKw߿l?V s%UFtX (]f@GGС amlK420Tj#` ta( , SܟRи#$Të͛g?3gJ7:u(st|IlgYXix³Fg?Y) _ ӧ~:[kswR|gF69BWMs-uvBe >?ر#%c}:үfMs-*KP 0 v#xOL!WZ:?c[@WT*KP 0 v,]M Vawrrl߾=|ϱ+1^d-Z @r`TH?^͛7{NßGZؠmlg#YHWxk FA\2kRTߕ}i(t U~׿4scǎ6[^ϒX;,u?+?Mf Z p (ڧ>=kXlpW89j8-=/A ps?8Q[@iD Sɓ'97z'le9׵6l`OI[٥mvB·UƷ5P@*ҹ[k燿f!Rp?==m%hHo՜_Gm8#Š# 5CK15A|. CtQ6-k?zx' ,b~{ښSݻwg;"798'vD9DѲeʶ(uk~pI:}]}}:G!c,V@[# [aX9?58eYuvxt*LEW6?&Vx ˎ[l#)%<_+ A2zzg; a/e}\qY$fe{]@3/_<{o~^Fq>V}υ!R`7`'qX V Ec_V[Jwaq$֟KqcC&J;wT` `'}z?/}P>JabJ04n!Wz9{*{0xss:.jg׿dƅBpZmR[ݭښ `m.`P<"$U Ǟ+_A+s=~<3ٻ,2am;aTCFv@h'XK m<}paEwd , ~9Rf R_ҥن/O~b]DfB(?Y""J禾{gPy9,fzNAೕX"[́=wRre<* ;IzM\87u75 vN>ӈN9'5|1YJu JͿly1?A7-q 3"0&$GcL\%2E0D3h}͘tdKW`9K#Gzgtԩl?d^>S<Ȅht:bC@Kdh>|4k8Ffz7f0x=T `M5\LYpSA+\ΗJ|AAWKDhp\`c 䲪Id4יv̙ Ak< H?Lpf9YgH4cїWB{sKSRo9q]:'HДX85VXk,#0= /Qd!EAˮuqpMGx\'"-V`8H#-8 #?#``@s1H(ZdK2" MJ|,s?8cR;41Fbr=~_.e}K![hخI-{7 p9v\v(I%θ; 5Z [WoA]6"x%  R.} ËW~)?V_ K87UܗざΝ;m탏L.4x;R9TN%R8b*Dp`%r^tz:Hb?M'NvUvqW%c$),Dlfc\tmju:Wk/+a(Ճ#I%X_i&:EC?Jr#I(c.`Va:PjGh(s:^r\0/҉|/qxeBWC 3"U]c'Wa͚5az1>4O_h؉Uرc T||: 3Ю< ޭGK1{n:_`eAnذa19_weaVt- 7BW^o<ڶm[4 C WJvwYp4z pZxUp_9߫qIuj%G PHs<~S޽۬\Ptpu؉}q199i`(AV%Mt7ס.d/yv| m\7a=06؜ߜbժUYV e5`UN^xB:0- o[~rIB3_xJ+-V֭[ߑ& /lZO[qCKӺr{߬\ Ӂs>{*B+r a1~#m8BzuYrR%޽{l_>/t!@Jdž vIAF[%}/:?C?4ynI !cxEAGx֗ 6lzrtUŃ/oĠc.#9O%=p;!ٝM; }}xYS³,x^oV—]Jw(t~`(ߐlO%=`O$HKa0ZoR? XGůUS[IJ*$:7鶪O{7@Hkk?<kktq݋m6nƶد-mR;`zv x#=\% oYRڱ#&?>ҹЪn_;j;$}*}+(}'}/LtY"$].9⦅%{_a݊]hk5'SN{<_ t jM{-4%TńtY۟R6#v\喊x:'HO3^&0::m,L%3:qVE t]~Iv6Wٯ) |ʸ2]G4(6w‹$"AEv m[D;Vh[}چN|3HS:KtxU'D;77;_"e?Yqxl+@IDATx݋.W$4 d N6!dc$$w{]+)f4]=SݝS5UO擗ookJ B( B`uu@!P@!"@!P+@uɅ@!P@z B( D B( B@=@!P "P`oz]r!P@!PB( B`(7.( B(P@!P@!X^\@!Pg( BXAMK. B(3P@!P EV%@!PE( B(V"+x B( " @!P+@uɅ@!P@z B( D B( B@=@!P "P`oz]r!P@!PB( B`(7.( B(P@!P@!X^\@!Pg( BXAMK. B(3P@!P EV%@!P* B`e@σ5_ BwC~a+gB_gLckzI!0wBW0=C9wB EB n@Ы4Bn9([ۂ@m~B v(cDYABCE֪kv0ſ&J f <Խ^R"s~ ?39h(PYyBz4tOhX]qͮB~Xm j?J@c\PB **'SQu(T4`U k.ϡ >%_QPQDВB`;!ЦFWHa0H,ı *T3=$pU(v0 fcXݒq<4#6KV"+x뒗ex3̸=sK>Oc[4$i?ݖp! qNC81jxb?Da3 KVhI!P,УrI;O_>ǡ*Ug'$P"B|wVc!YsN"%+.r>3>%D (Zz=X ~za*EAh.vjϰυy34s.'??|.2x~o~<_á[޻ Ǧ-IF6(>ܬ oD>gU3%"'uF@"}2ׁ,c 7?ɂfeLP[/h>/KKޜ.&kvk;N3f`#fȮ5y#f`Ezzc @`cN`3ԑ[:_g}ּ~|Wg`(H~?~yGݻq @ךHEHIT@LR`f]˲!9gu1X'|\x9sLsڵ?oCV?m{i|oY*| 9p#۲}?ϖ}_TIpg(\o܌I줷wN^ޜ ͯ~W^i>G`~GC y 2{5.9sNg䳷#'IF6 3pMuvuoĆqf){V`? z5 Hb%}B -) n 5NnT񓢽ޏߘgx/zN>a8R30>G >jI }- (!EzxSzЧC|_~?Ï/CN>Ae\VO5j`ziE>J>ޕ:>! u:?P!͊PWnjϰ4u@Nx,zN~hoj d" ![ף= Ɇj+7 AnƌzWl'EEC@?Py+KǦ=,g) 0mظ{$ dbևS#0f`b5s/T[S &р7 @ݨs<P{Cw\67Υew` l̩fFY 5o@)З;QGsm9s/۸^@'1`jf&yz Vx+–`n2BHTT2fpe~A3W;,q. kx"gϞ]<$` ؈] U(X`r3, !IL f}0w*89qfHr㐪ϧA`c̀cx2sϬw oyl2yPK @'u!˸~|/l?d6Ɇ))ƚ,3|ܹ xÇC$@djJlzN"U.:&'9:qs:Ԛk:a5jzۯo>vX- ؂?uR57q"s3ׯУ3/̙3{k@diP#Qo߾ƨ-A|g "3"ss< :qPwtƍW^i^}v \P*Y?ٳ(o@"tkl˚ N%[AVЫr3/_|tRs6OK)WξK(R mM]737`cMSP5jDrnX-"ӠVY6%NЙgyov/7^ X< I@zU"] g0oS y ozP4P(꫽G`0x4V߶qnl%*  ` oTYV @؊ z>"0~!?uT_͍/"%#~z;UxހjD.j%[D qS}ۜhI!* v2X2yL0`y;\f!Efb/Cq[׸:"0Gi+00[ W-@ت*>!03<'ӭsY46`yi.Ŵ_R%3@ @Cla~m% BEy wv,F"ټ6oɃc@@ SCgH!_ͣ(0_x^{D%mC :_B`Fl7Bݻ)$DcHŸ)ñ&j5 @FLZ}g 5O'`R^{C'ŘʷO ]}@P8裏6SiN/\PBTF`&)Zaf"8B}@}Uha)0 jDWw"ϡB: :`e_wFv,#` mlK@ѣpGB <?j. (Thb>E}B{ϳtr5tS!01C_rD('qlڻHPJ @t@@jC`\<'Bo9s{_I!P"FxtA( 'CA~EhItv1=z4P=39k׮55L#P+' w& J#֋>|C[B,Tkp?#`؟>j \yjScd"hN#Y8)?Bd0V'OW] Djߣ;C5F x: ïѿ&(Y/%(PAЈU1xLrqdK @$AF5?O @85 зB? @M%(PA!D>w߽=οr3u2knN(o){m0!lQB)5C> 5paP Q;LrBB:K'RC_nN:Uw.wMa7o;_s/ v>yJ&Cf˗۶_Hļ/lV p)& ڴmh'u*9"Bo}kl믿NB7^Tb ao@2=_!h8[d=FvXCq={T$!(vП+@meͤfԶBdr:{\zM㯓֡X^{ow]v33ّ7C#)$*؋LI{W@cǎ59rd3 8K6 P` "0;s Z׫=zO(Æ:}Z7?OգgM@k3dkrex9Sͯm9Uʔg_nA7DXWO )C[j>"t^RtE~g=lbgCbt@ub4Ϲs;&^,U6_[a,l~3ת0d`gtu#U7 sv>룾;?Xs@T@:LA!%YwyM.*5A W6bP`VPjqܫ>3<~}k.Dh%_TUs=qWijwBmX B0"^Md =<c[+ , 1FdTjmm7 CX!PT`e^x?tйcLCS/X2nx7xvH#

2G:ia3yЯB@l= RY5`q:dۋ"= #̓i3E ғG8RiAq+@$4qݭH$j σ.sgn vbفao/EMz; "w`|,~b$] fMk}b@bP *Gr =Kx%0(%B 8Y{["S{l{]=q?picPC~=IhLL$]FY` n /K氦^{pun[{_$Eg98׾ڟu^8 &C) "#`]$@J@:g4f!139` ?O{D&L) xg[2CDhZ7_I"Ztg&"q`\?Ï&r8q707kr2}FBvI^(P3hM!~ǺÖH6L5 !`]{A2 Yf(Cv[En:n`:ZǙxw5ٸ˗4dae]7|:~VLoag#åSg';OLHП o5G3qHf.Ѹ* ,B2 Ý\IȀ5jBI{ҳ~~~0k ]B |݇Ĺ;*0'`{zX-9h3X1_'1:a`,އ!)MnagpCW> gV75V^%Y.X"jF&X @^km~颉!K$w-I~\Sfv>WCNk7~w5ǿBk\٘Wͬ#߳gO;Ys_?; ۝L糅`Wn!DKe@d6QЃB' yD %ƴӁ{5:@qpO'Umϩ+:qq / ^ þ\>$NS{S#_ FзCExLp$;Md.Ea؊d+T{֮$b:\<_Hiy;zß8u KF\DWFK,= (w{E@У<'Bg2?5K~zBe /s3> k!0Xm4Owkk}K 8/y~ъ|Tb@7+ݡm'vƱƂ) 7iz y-pFL9}tSo!a1K~5J9~!J8Jyn.'xIcu "xмiUaM|GdACïmSl!+3/@OE?i_/ܼ{m%mw4wfػwo "ٿs({w:ې?ݝ $WZr4dлC; OYA?RoE/F=+h9p^Sde(w2ל*wې_QPR{B9 @@^uYhX " 1y`ff):W @( RvrvB_ ſdpaqoD_x I.#mY>rS>g  +eVoE6?oq^]q~D$] /.d zgC =LTij8r@3j}L9$ Sks錫) }P (b^K~B}"t-Zˉe8Oa'ë%k~Fkk/kÆcʰ_ @`0/92¥Ks!qSY,SC<TáBySq OW{>3>H5bdm=z޿BE P-2V[aCyP;K;C5t>Xl6  5j9E#GZ`8z Ɂ,3I2t)~H$v~xeܜ)OX/Ѩ=*? l P.b+JС?>kR9; hO<;v}7woAaYi8XH `"@q q"JT2,UbZHi^c)K!E6fXR? %u/GBY׼_рUdHTo~:ǿRV7"S/*ߎWȳL@J鷥k? gg$r2FU8 !ޞݦ_=y=͌srL4r%!FnhCEInJd]‘"qA<@J[1c3QX()=$쿥q< .ܞH kgߔ3o|:u߈Ll!3@dR7R&R'E;ȼhqov of;!nJ] 6'"'";AFiPcdI_X;'>fcE:K7}媌2_㝡}3gD!BK I裨PeaɎy՝3L!"$T$ٯ-X* )mPک(.9P?hݟ_(2yZk׮5wn>r(3XH)0遭ă|0}ȧWԷja\?πk9'o[ۡѰ^!@ˎ睁z)ӟo6bE&&@OjrDDYGt"8qL,dߟYeތѿ?X mׯC[}'tXه%"1 ҏ)^֯aX]$}燜(PDÇz%l!"qa˅4q-,-pٞCOj@">ϦWm 9()VPȱ3ܔ筌sYF޾Ɋ,E^** A6t^ovJqzsy" F?Py06ʸ?䓍a}?ZFcC h va?硕J M@AvQpf*НvF^_ @{ﵑGb}|]1v|PNE4_[7x\ǼF%f~D,rj侵)2+\4yTX8՛ HT u)~m~XQ ]6٘饗g}vVha5H@e֍! / ?AxoANtj0fEgԺh@g{e1翶:4~GaL}ֺm%@!0\*he_kx١ K % eD0ha3g6 Tr0+/* .BI!EsbD4G %flqJUչQF ƢooPCZqɲب}ۢ?or 7/$/$QՒB耀,g#.|1PF&zs-HI| 3f5^`hR2wϛPB`r{^?ri\KWoe`7HJ@O* l9yoB:K=]5)0;_ 44XԀ}6e4̚oo8T(_HoDB`hw3?x (0'qg5mexiܿ4ꕛvjsr ׿cT[ B@P5$+Pe?=z9rH /4=V{=5ӓU;@!0"ñ᱿5v&o;GdU߿1ů5g0CN1R%@!P"P`BFfLWx& /ChLoآ '*suWB|VR@!0!E&lY#Te￿%=X{61ro?B( (0!`#vgDƾ#+(\v9w\sҥ7h\Ҿb,GvŸ={LV9Ch_N(@#%yW={}˗ۑYP#:2o8k}7J B(@-9o$ `ӧSN禮|,HqsO?m6adREX}TV(.k~?۔sCkϵHsxfk3'Q"?3J B%Eff'?d" 6Q~bOB зB+ @!0K ^>ߎgDҦ?1?/0wPcuB( #TgLr8!N#򠌾1#)@IDATA-7E^*{o;Y !z/C#%@!P3Fle@,)xy衇a&@]}/T*%@!P"AUhLx-`;p0&1??n\A(1K B(@+TMƟS,"w>h3>&` ޠ"J- BEuѺ?ԛ2~u O<3͉'~Iq$@J@]@!P,4E} i}X(|PFl$H#~9Ǐ7B/R6`"a"W;@!09E&7wy=SZ(B೑ >_ܾ;v- R`B( Hw^>\OC3 %0҃crqs7r!s'Ol~9/QO?5௡SSR@(0Ay>PE ƿwJ94crwd8WMf׮]mxꩧڜ??u.i Lj?s+@!P " ;QWEe9'qoJNs=|ȑ# /z/bsV qM*5J"FI!PBt2b j}o\/vZ7.]j>ƛ󐃾JFxH@7EE2 7Bχ"Ll-K B(@eDxC OSsε̙3͕+Wڈ@Pͅ^cQ#A( C"B( mDV?Rx[… ٳgu?}!("eJYj=Tn[I!P6#P`k"_~esͩSпmϥ,H _4~i;h2Ϝ  () Bfl¿??6%g 1O8l+3=2[eEvv/@!pE7zܶh{ュ׿0'Ol#A}Ϙ'NwJ B(@5,?7ǏoxرE@3@5"( B'~#2m)}}]*:<͋/FDF1.%@!P 2\sïнo۾49Ç{ٽ{wK ƘïH@PR@_(N0h*}X(|PQ G,0@x O_$Ip[0@!Pl##6G NƳ ] }Zgc\r&E9,%@!Pt;/. LU֏ɝǡ!gO?m6?HS%@!P=B@0B*wwJu9Θ-0iػF3H׋onB( P(D@nZ/Z}!t;@c}PˡEB(@w"ߙ ctٝݳcq˵P\(p!!Y( P,C'1ˣ[ _~qF?i\8=aSǜgτ24RJ BE F3-/o]ּͥKO>}rDbжβ( B'~#0QP&g___osZ̙ʕ+mD`LN=pGDKJ B`9Bg˒%A7rl;pBsv!ϗ1Exr˃ؾoy.u5dYHM/9|sԩSm6C벺~)4YEDKJ B`\\/0{.?n=?M GLy̍`9vf%à.XV<貂U`NwꫯڐrX$@K# gPR{#gKt 3$@+$ͮK]r̅/eM4+ ,7.qcDjSd<ޥs9y/( @@g6cuy ]2 s/"H"3'갅@!Ow#zb>P(H95]YEgI˜ogXw9= SZhF| +YEc 61_$&@!Ɲ?ЌH L0컬rWOEvFO;yjXS+|V*wE|~W~I(/X‰VQ@ן|}5w}w;J Te~ߙ>?5K~n7f`/.( _t@߽]Ev d=cBX)g?P4`hG nȒG}ƍ҉}jB>>;rNurw]wC=<G D 'Kl*aiCQk׮@tR45r'ݨ@:>{[mm5'Ol#yӰ,) F@;Ηqᇶks53g+W$/])rW/O߿sͱcǚ={Sw Ӆ zI{/;{ .4gϞm?#S@_TW)*}`ءCg}y㯢W1ϘNJM]2#3?؋|ӧO7NjC >< /s9 KZ] )d)"Se 6ͧ~21שS*` 7B? ՚*) H۱w 5YZtF7-fHMQ9*ݤQ'b#Kߍc@Fǰ1wh p!au57N(6Eg o3^sֺCEFXDI6ܷo_pKSպaQfF;=r(@Xw^??BC %Yk𳘸CѰl8qD9}(Х,;ذ59k PB(B"BI!~b{BBPE8a_l㏷RRwEy/2cNq3gB)J% ^3'B*`C~ѧmqPs:4c}"qK&F`y ٦jI!P,HaBo{j)0;#tt"<М Fę z)4#Y.X[֛k(almSRCqF:^ y;p{lq5 9}oed^gᯮ.` HCZR&tF&6윣0 b$BmY'eㅳQP(^kϢCA5Z4{ 7) !zy~yN2҉$L4@T`R  w2',Lȭ-&F w.O߾Pχ o޴)uo O>wosr~,d?)p$зb]Y{$)BR @@3\RzCIߛ>jΝ;3g4W\i_ MwNr6DAx9X_5H#wqRJIp$( !0{B?gT24.\hΞ=F/Oc7nl7g8I$hM/Sc8'8rov0r)D\GI!0kf4`1oSNQ?8f$#HLBRsR`(cO5!9\)E~BEB`A@>M25V7]zB@}]{ka"IK7M)>Y2:"%@!PI ?׼NwWvYds24mɄU"K(l,K*R:{%f\ Q$I=]J)0۪Q`H4L$B~j0X(D<>gF_(MWq&LǮ<'Kciă>K׀9g .r)"=pF> ]wH' cLp#ӡWB?-) "ˑ<>/'89[ "j|ZoK,wxBP8" c{orܿO"<ݡ!ŀR~Z @()z@zz9/6Oz}\^>w\ew3#7Oy}Zxlǚ_2?={:?rL jxPCB32`D jI!P0#?4r"җϟoN>ݎLiuH6eb[#{/ db<ӐzD,5 ك)J1KB,D`b|GT2-mCk,) g? ݦϻFT)?ocH}ck~#Oۈ,][ J7*Qd<@Kra|wݾ[eIRd7z2Tmvs!μjLm%##_;]2rj2090k(Y$dOQy)No "F?XxBEI.^ !NX!K'P򟃷GON@F>hB ~f{!+h=z?UW{U5W2 %  ƄI3wc$o_9>#O~6tvaPK@=gBI!C0h$o鿞˺X\pr:M[e"̮]Z ~I;TaN}:n3S̆x@-Ѝ}Pư8HF)!2!3ErZ@D2O"kؽFF8 oehшL(0닱{n jhŦƄ1?uN;Ƃg WD U>23q]zl! 1fП ČMșR~I°k>Lm+QjxKRt n-jT$aaE,(oHA`Nj/FX8NX!m9C=5V_{gP<6lqnIR 㰘Mùf⼘[ ߿ul*E6eӍ}PO=F =Dz6E?ͳ>ێ0űF3"A4&K sn'AsL=/NǞN յO8Ѯsp;=r(}NKwrD}&!R`֯$] uEI!P<"&D:gaGym㏷H 5^ PBhnZ (U#xH 3_!5n=1a"c 9 08+~zr))#DdP?'TI:tR&@ƌ#_|*Y)L4N4gy9ns Ρ(z/sV)$&]ob0m0as#j]RC z)4=ScuRO PrdF#֯S0QI < Cٸbe}_;___o>ܹs?sLsʕ×wLQ JTIvrK_̰h03Fmh"&aY[8f" gS?… S'ohMHBzDtZ Xz)0-ΰP'JԔT-xNP_ )8Aѐyhޤj]oT@!P0pYj]4ȡgR(120wcD@>Ko[g *5EoF;VJ_E~-u [W!R/ߒ".4%T]HB( Xqq_"_?Xrh\CE' @Ο?߾tGZauA9hՎ@!0OGmyܿ?) :9&>ױiByrd:x9těGɐd!]N{ (Z `c%˒B}~ =qRɝ"@Q@Cqr"#[N$ Ƶ ["+-Qwv+DtܿW Oާ @6E&v9dA`C:)N&2VUBظ2J!5!}!e!b0(^7 4\N%@!0{oZ 44")Jdk@T:mo{{"rH[68"wH=>ES##G4{m'ö3cm-; 6(wF^s0IF!eܿ}gӟP4[˶^`;ʘaB7w,T#ľ1IXփ7aUz}'oڲD1"Ð]9v\Rl  >HM@'Yqyq)T"k`֑Ytq[KM @|/:we?nxvB#. 8ђB/Hw)iӋ8?d=+cJ.S++EJGׯ2zC * hНv$ުG?j0r% HVrM\wI!0oGqD,s>XSIysK^":%) z'H+t79 scCFYNGbMN(4^Շ{$#F_9yKQrBӬL޷>ϫ2󻿅A8)vZ;YFuGi߲u}#@V%{ƤBC 0WTI!Pl ?@|&ϝ;\ttgq~[Zv!7%R /s>.tAIFhLf3"@#71B% dǶ)[?_Hvv}Qg׿4ǎk-ʹ13W [Er^!=/>qF4 :]cF p+P^Ѕ&IUԟB`Ў5T4 @ME~ԩS_{=ϥ,o^x11DcbTeL#Q [ 9.!6Z ];<42\D8B/h_ڕdmK[-v~]D?})Fo??4F'o;r,U=:~T`,DvM(: v: F\-=F`P=B%_,) 0_DГn,8%$]vREl';vܱgm91Lon> o0n6bɧ8D}(''C+*0o&2N_4A`D%?ێɄ#Qb>QUP[0YU a7ط1lwǐoןQsXW4nI!0RB?ǡ'4mxt(`gQk}DE]0qLTrrϊl)g EL\Ќxw7XtQf*bּBI!0mG_]a--},b$rSAO=\u,"|/yB~h#y ^_/N ?m߃Ќ`0BsPJ \CMbMgfE7}>:ՉռBI!G#χ4T*Xw<&2 H)Ⱦ gc yt/CESEm@1žMCSr5FE:}K 8pW^mC\2FjPf  @c8T*@[Ҷ:v+h `gTo tyA¸2 jmOrr0BX kGQZ޴汲QN"0[ :ύۑu,b #׏I W mc9Bߋ|0q}웩MCG$`)YFic"Y&̀"Ccq1[iE+9p^CGdE`?U+Ro4W^yyh|OwkG9?gv94#[;%vČ3o-B=d1>yT=z&3\WQR4Z 6}Jͩ'pB3g{E øwM Y_١ir^+ŋU+ME8p2㯑p^S x&C9K UG@hMBE!^{9uTVtmwSQ1{ N ב ȺVJ@* @D'w1T^Ck(ⳒB`@ #!oi#]ָ߭"к.iBv ػ5;$+{v;!xNǹO1/\Vp%* -=z$dPh %W..B?,^tL59@$} jgy%sM#BJ8p@;a5Εa]yG8cB`'.Rd("ɢC @|֊"ctE}R{ɘ/4~j vpС'.GiI4*xU諨[rH*PUlowSy?ǡ'T$@ % m{F(bF!*"HK; R`6 3g0lqk|a/7/_nzE">̤Qhde`iz[X, I妢@# jCju.V$ |FF,5ޡh$iĹ}{ybOkֺhbgCoy';"(o3sE懹vCvDю!=},:8/F-D:9% # }8T?"W= Uf#c:*F<8/GGye#&EU< CL!'YRl?p8P[j{gOn0@Cqov,03(8eiuBy!0r3k[jΕWt>sL~á&7B\( ,%BD@[:ܴwv'rb8voqۍzE8C_7v,TÖtX h# " <cy  P.o">$Nϡ װN9/_Wk0b}G#ΏÀԸ۷s[V*05dZhoo5M @lo0ҰEXر1#rIywbi+, ,%oCj]4`"͹s皋/QL!=Iq\`&0q zG~  :UcB 1!NDVlrb$!4$z%! /ԟNAb QAy嗛W_}]~GmA}P~5!"ʚJ'A_OdEF< ={@- `j 1衇Z&FF^\m#D'YdzOC/j#ݳ"<a0 zί^چ|Ͷ`@0SԸzNhUS6({챶n!=0>z$ZaKǰkj%nD,VK @}8d R0ysLٳW^i iT`FM[V Pz+W! C\~2O^}e!0_Dе['F>Gy"'#5?KBr ,GNsCd]ȯK3ڵkݻT!R$g2q|-Ɵ?\C^k~Ep aJg # O" _Ɠ~뭷1qhwF7:{$?:f">/)//\賡ҁ"<3g ~;U`{AQ D.QJ2ًьz%n>XnKFuIS\E,^>m׮]m7sXd"ENdկD{o0M nn}<H*G6HbhW&0}>MߦiBI1bZ7BɄ)wWOB*dScNQ0ۼ7D @wy_kJ 0a\1}!T @*,ڻΤ <>K)=$s z{BWnا͗KdQ> 3 .sO( tїZFp K*=*`h߱P9@MbkkkK$E #HNjFA0T4%E`&9/\ИLjlg_ߖRܜ`g|gy7,34Z?h} 0wr+Jz6圿+6?-=W 5w"sON!+ q(?[ñ>4g49Ғ{}jX0-L^ B:QI!0g`]u W\iBl]2b `DLs#c!cex@RE,Pel'|kaz#LS]'|cv=47ovOY9_Qq*]Ez[JֵF7/)B A_<Ǣ?TԑQ̃&Zg?{l̾kCظNΉ5@fOO(ן .t-;G{gB:]D_Jg00դG""JyL6 p~H~Ub%3v{e ?7IwG#LyS<՝!#.mn 2`vȯ+Z]EI!4Nd߅H4ޱ@O}xfwAk?b'逹QY`fD;w (W… G!Gt`7 "BB@De?~ʕϾ N"@18Sc@~&f4vKD@h[uޅ8 ?` FED.(Gl?~|l0-PmI= 0uhտJ? U0u Ovw3رcM>}Ȟk#3< ߄ ^"_ƬH@жmur{N1J.wmk0-й-^ăp\1u 0ܺvv|@@9cm޻gϞ&7Hg04!Y2EZtΟKE|ߺ_ pBc F\Y B`*5B༜j\P1\>ܬ":L#aҗA ΟoܢF.5Vq` ^L=J4= ouF22 i)f60_=ZJv'B,ݻEdK6YSL#<~*h?tƙ3g6N8|$gA?|7S [c@uN[a˂"/SHN4[vqnmf@B-~?dt;|R)(td2#ڟc)ڝwGvF0SO=٤SD,%@]xΟLj j^40MEE:dן r!&Fexo-3ˡf"pO|1U3O<4۞ >:"~{z_2E'Buw ?pK(""IG`.YEpw: M5 2COEeg&DشT+BZDA/ m}_'1 j/w ]EE LF`DMR,0cɰ/RؕeԁзT =e)v'6mWOM5Xv/*}J͹z[z>~$d(/Pam󍏆2Dr&Im"+$]k+}~"bo38B_6ExǿõE4?e^ڿے% P` O/AAb89?҉`˨gt֬IHEf-ϥK8?/ZmN khjK@%?"Nńxy`#:CyCA(@9wBBIEQ"f4<_}7hjmi޿|4\ k:"N~@7ހ$B ] i= rɢQn-##ŠjڭBBo_l_R9ygXSoB* ,K, WΑ_`%1 eKsc4 Fm5$ 'C mC FJK^~YO>8{l -k_~ygZWrdҎ:"uFӗ:ǔ ۆj{C%yF* D۱-5VƆ?_ԕEg@_ELG6)jDS}%KFo^vʱ"ԘMBTmX)^bj!(Tv€dyHͶweW;4y^8D&?vX/~ʱֿfQL, Qz ̒%"P`ujpF/³k˝ .u#_gCE#,5vʕ+ y.ͨ[~?~3FE^-Ͽ?(Nv@?.؎Fy%J#ܔ=X<á<#DCSh%~WkO ,ˡQaR`w`?u,_-;|6p#o/)#ND?`߱Ehܣ9Ћ[MlļdX S'~b:Q%^uVH[~zS8@=˜Oτ ԂhuQ6v+;uF 9㯵nM`cQ(R!]|rCeǒU9<fjU Dd}؞識'3h}]}`TG#;#9B.J.ޕ甞؁K~7tMQxbS: e^\g0To"<ˆM" sBfԺšI+9Ĭk :th̙3'NgBO}ϡ J:H sSGDx:^g籨RZ#R@|5 H3F  'yrr.@ qv}]?gXg޽B?nqms r}J:@ޘ!ūj&_Q'! KvY:l Dd#G\ ~ =.@ W~_z7ϟ0pH2v*xvZur-[z=Ira?xC֩CR2 rak-E0A+u&o#:E~H(B=me*2KM!Zl"aQ#G4+9>lS޿"@)YE63o m |x=#&އu zåjydi8 KVVsK5ϝ;k5DokGl@)56bu+#.dK aۦ3 Eђo 5αXѪd2wl.믛B?pC4ڵk] P ԰ s`_rhs_2PrTl7B:RTcPat׋챤Ӯ<[ݾȀ KunnBBz&ty3R2onȀ4<龈~LUFL'.ZZ9RwMM3cٟb Ⱥo|k3lCD!Fb{opD7cʟ⿓'O6"ilaDˮ~q([ؖ"i: OUDx9߆ZIx:="Ȑg,|$Ŵ@Du`0'&@c1zAC L<}|D^˜0_𩧞jO<ha ra(;B_@? [5h}ʫq0v7!x~l >̥3 fZ!\ p_\k2d,pLݒ pO#p P-u|&AԚ|T7xi{r} Xs5+YMs0aߍcyCygBݒ>"PwM?"`!u@GJ} osP֩F|.a`vu TP$WX\ B$OT\Wҧ f̢O l~3GJ9-;z+2 F ,@m]_t)cxvKx##׃9=*ˋqJ/%G!6}/TJ}KdmJ }] ȽAyl6_b_(9E{:?3@ ad5͹.剏2p>~'~P}}cnѦDl_Z 2l7p.9Ey1r 6uȓ$0y^3誌Z`L'CESX/B5h= %  *!~HDd`)%@P8(H u W:C#Iu~Fa0#P7O{Cu҉"`4Ns9.ea2`a&JIc]}j6q%M;?*KyQbD2 ~W"rAM3_51~bKSo̕;{+7XxГTACV`X҇ly4d36 af m!7cxdhڽ4@`MSH>j_&R`ʩ~$4߱cǚ~qf&?gŠ&\B .EyuPP)y QgE3],Pu:F۴&Ό /<g\̀"q.Y?m耵s_ވ^x'Thٳ OAҾG> EwyNI({ ]zЋ#،P6O(5vƐ3x<]{2 UDyq4N @ D6|v9m. tH j7tC">KK.5[TX8FmI弶 7?Jػwz Q>޽AnkR*H~E4QuH9oޏv^;/:3x]x|]lv>/G]àٍ!{"O \!n [xl&نf_@泍 1? ry#Pwoz hBD 5/Z]b5E ^w]27@ m}ن XY$oC3 uxՎ'CԒyڹC.KR/ű3K `_>^/wjc|LP<~%qD@3<ޗ_v9P" ,:3xg?S\ }B=jd,ڃzkIh?zhS+0 \댈EVz  YMп * /!P(Z/79bz`@#bV@ÔBQnjؖ,8\苡9E{y~_g L͜S6~_4)0~`T;?B < %+@q)|CsFP \~4gt;ta|-`G &408?w1Y$R$ @X <}ڴ{Ku|*іERC)%ɰ\?1ʚ 6h~jvP΄X.@:+`+wF #7MW5xŦ& >C2r rTs"!#j*L8gN|q/˦m:}ph_СCSN8,r W[ߕCQn*!P`"4J^!a=3. +W/)=;Ew_!2Bs @xA#X @XL塩}рĴќҥ&5%A3eLEs=C޷}{>SbXu9IQ )WS," Ӥ$£ru@3\:\(U9z$*>[;~@dP*"@>R@7nx7xf;k"}$饗? 02? }?PėhX?EV~[V9#ƿ膤Z4$3#6pB 2p=D.+=܏6~ ~ZX!kE -n}R /x;쫃|+(EV%% pӓy GyO(cq-RC? _@ep9'0+à2`PEHAޫؽSx X=+ͬO>dٳ}$6Gj; CE* XŻ5)S4JoѼ|! 2'k3UhQQ KіCH#_j "ġ;$?/ttSRXQ@/0򺪾y~xI}a()gr0 "ӡڹ]0xQaGE)Żs2` 8TW5}VWi =z +aםi-< 2qش߿ ;,5r?>Q5,Z#ls ^(HPo0+=le`A/MSͧ*$?O}[… M: "1 U ^W۪ D[>NS=*L|$T{)or6Eߢ?` ȀЏ:[|xf6BlJ}Ο=G!h/`J Y34X!"c!r<-_dq2ȀV2 V烡B ݱ TOKߪ  &/B> |6M.E躧(i ᓡ/n^E.]Ԭܹ^{!}__Ebi 5 kV Rmyo$_|G*NH\D0 7>elCvgMBuEM \>8xm@3LFVƅ@R4 ɐr7?C&5!ѹNKT9b.%s4Z``VN[Ǿeq=h>?}JOYYxUMVbA0Hh7{7o E?v=4oC Vob!]?9Phl #i߇ F@0SC)20Qӈz͘PއuϞ=;1!E2*lК3ê f̑j5MpLHOM] y=0y.P~ o)Wƫxڬ.@oڪ~NkP؉G|0ڻA;^k~ a~OC"Eۑ6$Hxң_7olEO﭂dO[s5>F@0^ub qB).VH+<*\:W0W2 )J^M5C>1":w+iؒȫYQeD r4,3\ lT(\ (TxZJ_A7/ pIKV/? m5'SGn;޿#_v !L8~}? kB"GB5g8@7w0[2:qxL7˿>[%޳-:lvl3ZW\koxeT}`bGC\@'FCZ }L9@M$xD'=5l~ VC1߬1cb D@*g8$^o[lTa4Fl]3{%-!›j*z뭦'F]Xu 8b<ޛUhųD|l2}H Y5":p04k5U/ L[`+p*B o+ n^1}!5MMacS5i/kܻo@l`N։ӜLӣ `^xY4^i~F LÇG|簈[0f^u3#EXrd;_7`agྤ1K 1ؑk"텾^B1qU;mIIS^GWdf苡O%A掁07WjV 4t?=̊l?6:x;??5Ët1շ@g8jN C*ƺ  ^'%@TCЍn,v&BHAҘBy}e ݄&pªÏ|p7n!גD %&f6) NK*Ќ`›c %jfׯPuX&~d ,w_R>HEΚa'"^#IGK4:[ 3!:; |dvySW\'쿸 ݻ6yEөV_I+':A z0[EQmUʺ#,5?v@Uj"aw DI{DEh߆)\hk0*'3ay 0M `AmlxB FZ2͚Fkӎ <#"B9`/Ua[DD]JjTT?՗C E`6y@DH s\~B`! :v\j(쌕(ĺ}!T1߯"0$ #B ^+T2AB݃nZ6qF~e_! @c:}^"?^Kf +)v*4mlkؑOma?FgJ "P]˜P*mx07c SE?YR,9TW E:fD=޿`AWe$|F`/8 Pb<؟҉PSӪa(DeB:|߄J aw":t&{Q<6AJN %@ЎճkpB71LL.˗NkU cg#g1B$kiw~ J JyBbǏo;It2f& !" iI!7v@*B`\i-D@;ȝq'u;!M^bXy5wuhEڹMhVH+,)A8wƍ&e7Nm BpiLipkLK0@yܒL!^3Pir,k4#]9^A&%j2nmB?$^ wzYxMS}( B` @vH`b^AK,v'b/%W :"m3s<߉P C ) @W]3X VҕuDBY̾M_ ⵵]H4!Xf2KC@} Xf*m7KCq!tI;Ѷ%@!,,P|wfX +iWWz縫f\7CB! u.7zD2T:8ͧn4:0( v`̎c~CTay kG?jE-@": Xfޣ OSy?acL~76|4ǂ{TxF\Fz ] #=7uT  79{oDKXb?F0xye=Vu,|xj> ?P.d#l8sg`[&؏aۅ HGy |曍k.@Max`駟8ydU3Bڷ2-7ˡBqw j"\Ioܪcɺ2J` eyt5sv)1 ) Ɔ .} sP6ԵcO? ~H ,^J H0"%@@Zgaa+,2;xR"56x/Ry37;Ԡʂ+_~w 9̈R M)QeE@.S,;.[㟔6ODrLjL!J`b^ Lko~EY9;^h줱cOyWC *-?a쮜0^G\/`}9{ i/.¢K׮]k~mPy!X^Uw 5gh_;93U5c.QV?f>Sm:>]P a߱v"޻CQcxY +a\zh[~"ol{潽E!C *mPO~򓍗_~]1LF C eC"J@^B'v仡ٹuJL +׫^ V0 -rp3࿿c$dCk!W.bo({1UkwF)x cgJ @0  [gi^kIr.)H"4)jU [? } P%j~FXHOŔ*ȕ:Y?i Y3?#cdPvc0.iv^"x" T_xf9 3bfoDّ4|BPὑk2GF4+*C.~YCy.} >$~LGa*+hTdڀ~,@/m@5SvN3E73z:Ԡ \ssI# ]v)gu諡H15 Y|=o^ u0 ` K0 ()FO+ C1n+Be4^$@[MP`QP':r^~ Úg*⩜JD`9ANGڼ r]HV w U5bo`SRR`ƴ?d`놤^_C5`?Awdh"Oމ #`rs鍄ޘ \X;zݕ1^F[9z'4Ǒ?,iSFٕP,}oݐB߇fu&F ί}0guxMǮy7 ٙNnxLmR3QP6d.+)`.nr*8حz{MN/z@gC*wb,0g0x<[˚T% Һ'YR6ڲvm`O";ێ:N"<<R9;;D`A9;uկ3jRl2@wC*8NRBo\A;CP$InP;H6.Oaϓ<3~IێH-`rnP8Ž>*P'7HPBpeGL6jB  ]E`9X,$ b{B`>$M%Ds 9Ž褽'WGٵշ B( BOvJ B( B`(f7.( B@%?QIDATj@!P"P` oz]r!P@!P@!P@!XÛ^\@!P6P@!P!E%@!PE @!Pk@5uɅ@!P@j@!P"P` oz]r!P@!P@!P@!XÛ^\@!P6P@!P!E%@!PE @!Pk@5uɅ@!P@j@!P"P` oz]r!P@!P@!P@!XÛ^\@!P6P@!P!E%@!PE @!Pk@5uɅ@!P@j@!P"P` oz]r!P@!P@!P@!XÛ^\@!P6P@!P!E%@!PE @!Pk@5uɅ@!P@j@!P"P` oz]r!P@!P@!P@!XÛ^\@!P6P@!P!y|&㩝IENDB`icnV therion-5.4.1/loch/loch.ico000066400000000000000000000260361307545355600155630ustar00rootroot00000000000000(V ~00hf@@h ``6( ( @??????~?(0`????????(@???????????????????????????(`???????????therion-5.4.1/loch/loch.rc000066400000000000000000000000611307545355600154030ustar00rootroot00000000000000LOCHICON ICON "loch.ico" #include "wx/msw/wx.rc" therion-5.4.1/loch/loch.res000066400000000000000000000616221307545355600156020ustar00rootroot00000000000000L|c.rsrca<La8@CHhX XC(@Xp     C H C X C h C x C  C  C  C  C  C  C  C  C  C  C8PC ( C 8 C 8Ph     (@C H C X C h C x C  C  C  C  C  C  C  C  C  C  C ( CpC 8 C * N8lPh 0 P p  ( @C H C X C h C x C  C  C  C  C  C  C  C  C C C   F r  ( @ X pC (C 8C HC XC hC xC C C CC CSQUERYWXBITMAP_STD_COLOURS WXWINDOWMENUWXCURSOR_BLANKWXCURSOR_BULLSEYEWXCURSOR_CROSS WXCURSOR_HANDWXCURSOR_MAGNIFIERWXCURSOR_NO_ENTRYWXCURSOR_PBRUSHWXCURSOR_PENCILWXCURSOR_PLEFTWXCURSOR_PRIGHTWXCURSOR_QARROWWXCURSOR_RIGHT_ARROWWXCURSOR_ROLLERWXCURSOR_WATCHLOCHICONWXICON_SMALL_CDROMWXICON_SMALL_CLOSED_FOLDERWXICON_SMALL_COMPUTERWXICON_SMALL_DRIVEWXICON_SMALL_FILEWXICON_SMALL_FLOPPYWXICON_SMALL_OPEN_FOLDERWXICON_SMALL_REMOVEABLE4404d444444h444484l4` l (!$hD+h 5L|O(P(QT(U(W(,X(TY(|Z([X\l\\\\\\\\ ] ]4]H]\]p]L]]"]^^"@^T^h^|^ ( @??_lh`@( @ ` cFDDFc  `?>????>?( @4:@t:? ( @0H @ ?( @ C  D @A@B"@DB@H@1@"1C ?> ?<?8|=߼=߼{?{{{k{{{==6l~}s}???????? ( @U@U@U@ ( @_?x~??`` ( @py8~( @         Gf~AAAA~A|x@p `@???800x|( @( @ x8sc( @( X  wwwwwwwwpwwwwpwwwwwwwwwwpwwwwpwwwwwwwwppwwppwwwwwwwwwww(( ( @??????~?(0`????????(@???????????????????????????(`???????????( @( {{{{{{{{{{{{{{{{{{{{{{( {{{{{{{{{x{{?( @( ?( wwwwwwwwwpwwwxfffxhxgwxhxxwwwww( xxwwwwwxwwwwxwwwwww( w{pwx{|{xGwpwxwpwpxwwww{wp{x( wwwwwwwwwwwwwppwwpwwp( wwwwwxwxwxxwwwwwxwwwwww&Window&CascadeTile &HorizontallyTile &Vertically&Arrange Icons&Next @4  @4 @4 @4 @4 @4 @4 @4 @4  @4  @4  @4  @4 @4( 00h@@h ``(  (( (   ( ((( wxWindows application H X h x           ( 8 H X h x           ( 8 H X h x         (8HXhx.rsrctherion-5.4.1/loch/loch.xpm000066400000000000000000000023261307545355600156110ustar00rootroot00000000000000/* XPM */ static const char * loch_xpm[] = { "32 32 2 1", " c None", "+ c #000000", " ", " ", " ", " ++++++++ ", " +++++++++++++ ", " ++++++++++++++++ ", " ++++++++++++++++++ ", " +++++++++ +++++ ", " +++++++ +++++ ", " +++++ ++++ ", " +++++ ++++ ", " ++++ ++++ ", " +++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ ++++ ", " ++++ +++++ ", " ++++ ++++ ", " ++++ +++++ ", " ++++ +++++ ", " ++++ +++++ ", " ++++ +++++ ", " +++++++ ++++++++++++ ", " +++++++++++ +++++++++++++ ", " ++++++++++++ +++++++++++++ ", " +++++++++++ ++++++++++++ ", " ++++++ ", " ", " ", " "}; therion-5.4.1/loch/lochfile.ico000066400000000000000000000042761307545355600164250ustar00rootroot00000000000000 ( @ 3JL68VVou* 46)>?O-rveeerrTT'[[[VV=MMMy~Hbc$7df Fgh #endif //LXDEPCHECK - standard libraries class lxAboutDlg : public wxDialog { public: lxAboutDlg(wxWindow * parent); ~lxAboutDlg(); void OnKeyPress(wxKeyEvent&); void OnMouseDown(wxMouseEvent&); DECLARE_EVENT_TABLE(); }; enum { lxABDG_TEXT1 = 6000, lxABDG_TEXT2, lxABDG_TEXT3, lxABDG_BMP, }; BEGIN_EVENT_TABLE(lxAboutDlg, wxDialog) EVT_KEY_DOWN(lxAboutDlg::OnKeyPress) EVT_LEFT_DOWN(lxAboutDlg::OnMouseDown) END_EVENT_TABLE() void lxAboutDlg::OnKeyPress(wxKeyEvent& WXUNUSED(event)) { this->Destroy(); } void lxAboutDlg::OnMouseDown(wxMouseEvent&WXUNUSED(event)) { this->Destroy(); } lxAboutDlg::lxAboutDlg(wxWindow * parent) : wxDialog(parent, wxID_ANY, wxString(_("About Loch"))) //, wxDefaultPosition, wxDefaultSize, //#if defined(__WXX11__) // wxTHICK_FRAME //#else // wxSIMPLE_BORDER //#endif // | wxFRAME_TOOL_WINDOW) { wxBitmap bmp(about_xpm); wxStaticBitmap * pbmp; wxFont tmpFont; this->SetBackgroundColour(wxColour(_T("black"))); this->SetForegroundColour(_T("white")); pbmp = new wxStaticBitmap(this, lxABDG_BMP, bmp); wxBoxSizer * sizerBmp = new wxBoxSizer(wxHORIZONTAL); sizerBmp->AddSpacer(100); sizerBmp->Add(pbmp, 0, wxALL | wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0); wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT1,_T("Loch")), 0, wxALL, lxBORDER); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT2,_("3D visualization tool for caves")), 0, lxNOTTOP, lxBORDER); wxString lxVer; lxVer = _T("Version: "); lxVer += _T(THVERSION); sizerAll->Add(new wxStaticText(this, lxABDG_TEXT3, lxVer), 0, lxNOTTOP, lxBORDER); wxBoxSizer * sizerAllAbove = new wxBoxSizer(wxHORIZONTAL); sizerAllAbove->Add(sizerAll, 0, wxALL, 2 * lxBORDER); SetSizer(sizerAllAbove); sizerBmp->SetSizeHints(this); sizerBmp->Fit(this); tmpFont = lxFStaticText(lxABDG_TEXT1)->GetFont(); tmpFont.SetWeight(wxFONTWEIGHT_BOLD); lxFStaticText(lxABDG_TEXT1)->SetFont(tmpFont); wxSize tmpsize = this->GetClientSize(); pbmp->SetSize(tmpsize.x - bmp.GetWidth(), tmpsize.y - bmp.GetHeight(), -1, -1); this->CentreOnParent(); #if wxCHECK_VERSION(3,0,0) FindWindow(lxABDG_TEXT1)->Bind(wxEVT_KEY_DOWN, &lxAboutDlg::OnKeyPress, this); FindWindow(lxABDG_TEXT2)->Bind(wxEVT_KEY_DOWN, &lxAboutDlg::OnKeyPress, this); FindWindow(lxABDG_TEXT3)->Bind(wxEVT_KEY_DOWN, &lxAboutDlg::OnKeyPress, this); FindWindow(lxABDG_BMP)->Bind(wxEVT_KEY_DOWN, &lxAboutDlg::OnKeyPress, this); FindWindow(lxABDG_TEXT1)->Bind(wxEVT_LEFT_DOWN, &lxAboutDlg::OnMouseDown, this); FindWindow(lxABDG_TEXT2)->Bind(wxEVT_LEFT_DOWN, &lxAboutDlg::OnMouseDown, this); FindWindow(lxABDG_TEXT3)->Bind(wxEVT_LEFT_DOWN, &lxAboutDlg::OnMouseDown, this); FindWindow(lxABDG_BMP)->Bind(wxEVT_LEFT_DOWN, &lxAboutDlg::OnMouseDown, this); #else FindWindow(lxABDG_TEXT1)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_TEXT2)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_TEXT3)->SetEventHandler(this->GetEventHandler()); FindWindow(lxABDG_BMP)->SetEventHandler(this->GetEventHandler()); #endif delete sizerBmp; } lxAboutDlg::~lxAboutDlg() { //delete this->m_bmp; } void lxShowAboutDialog(wxWindow * parent) { lxAboutDlg ad(parent); ad.ShowModal(); } therion-5.4.1/loch/lxAboutDlg.h000066400000000000000000000005271307545355600163550ustar00rootroot00000000000000/** * @file lxAbout.h * Loch about dialog. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxAboutDlg_h #define lxAboutDlg_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries void lxShowAboutDialog(wxWindow * parent); #endif therion-5.4.1/loch/lxData.cxx000066400000000000000000000500641307545355600161010ustar00rootroot00000000000000/** * @file lxData.cxx * Loch model data. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef LXMACOSX #include #else #include #endif #include #endif //LXDEPCHECK - standard libraries #include "lxData.h" #include "lxLRUD.h" lxData::lxData() { this->m_centerline = NULL; this->scrapWalls = NULL; this->scrapWallsNormals = vtkPolyDataNormals::New(); this->lrudWalls = NULL; this->allWalls = vtkAppendPolyData::New(); this->allWallsTriangle = vtkTriangleFilter::New(); this->allWallsSorted = vtkDepthSortPolyData::New(); this->allWallsSorted->SetDirectionToSpecifiedVector(); this->allWallsSorted->SetVector(0.0, 0.0, -1.0); this->allWallsSorted->SetDepthSortModeToBoundsCenter(); this->allWallsStripped = vtkStripper::New(); this->surface = NULL; this->surfaceNormals = vtkPolyDataNormals::New(); this->surfaceTriangle = vtkTriangleFilter::New(); this->surfaceSorted = vtkDepthSortPolyData::New(); this->surfaceSorted->SetDirectionToSpecifiedVector(); this->surfaceSorted->SetDepthSortModeToBoundsCenter(); this->surfaceSorted->SetVector(0.0, 0.0, -1.0); this->luTable = vtkLookupTable::New(); this->luTable->SetHueRange(0.93,0.0); this->luTable->SetValueRange(1.0,1.0); this->luTable->SetSaturationRange(1.0,1.0); this->luTable->Build(); this->title = _("No file open"); } void lxData::Clear() { this->shots.clear(); this->stations.clear(); this->surveys.clear(); if (this->scrapWalls != NULL) { this->scrapWalls->Delete(); this->scrapWalls = NULL; } if (this->lrudWalls != NULL) { this->lrudWalls->Delete(); this->lrudWalls = NULL; } if (this->surface != NULL) { this->surface->Delete(); this->surface = NULL; } if (this->m_centerline != NULL) { this->m_centerline->Delete(); this->m_centerline = NULL; } this->m_textureSurface.Clear(); } void lxDataTexture::Clear() { lxImageRGBFree(this->image); this->ClearTexImages(); } lxDataTexture::~lxDataTexture() { this->Clear(); } lxData::~lxData() { this->Clear(); this->scrapWallsNormals->Delete(); this->allWallsStripped->Delete(); this->allWallsSorted->Delete(); this->allWallsTriangle->Delete(); this->allWalls->Delete(); this->surfaceTriangle->Delete(); this->surfaceSorted->Delete(); this->surfaceNormals->Delete(); this->luTable->Delete(); } bool lxDataTexture::InitCalibInverse(double idx, double idy, double ixx, double ixy, double iyx, double iyy) { #define invmen (iyy*ixx - ixy*iyx) if (invmen == 0.0) return false; this->xx = iyy / invmen; this->xy = -ixy / invmen; this->yx = -iyx / invmen; this->yy = ixx / invmen; this->dx = -1.0 * (this->xx * idx + this->xy * idy); this->dy = -1.0 * (this->yx * idx + this->yy * idy); return true; } bool lxDataTexture::InitCalibNormal(double idx, double idy, double ixx, double ixy, double iyx, double iyy) { this->dx = idx; this->dy = idy; this->xx = ixx; this->xy = ixy; this->yx = iyx; this->yy = iyy; return true; } void lxDataTexture::ClearTexImages() { #define lxDataTextureClear(i) \ do { \ delete [] this->i; \ this->i = NULL; \ } while (false) lxDataTextureClear(texS); lxDataTextureClear(texSbw); lxDataTextureClear(texO); lxDataTextureClear(texObw); } bool lxDataTexture::SetImage(lxImageRGB img) { this->Clear(); this->image = img; if (this->image.data == NULL) return false; else return true; } void lxDataTexture::CreateTexImages(int sizeS, int sizeO) { this->ClearTexImages(); if (this->image.data == NULL) return; unsigned char * psrc, * pdst; long pidx, pidn; this->iw = double(this->image.width); this->ih = double(this->image.height); // resize the image int newSize = this->image.width; if (this->image.height > this->image.width) newSize = this->image.height; while (sizeS >= (2 * newSize)) sizeS /= 2; this->texS = new unsigned char [3 * sizeS * sizeS]; this->texSbw = new unsigned char [3 * sizeS * sizeS]; gluScaleImage(GL_RGB, this->image.width, this->image.height, GL_UNSIGNED_BYTE, this->image.data, sizeS, sizeS, GL_UNSIGNED_BYTE, this->texS); pidn = 3 * sizeS * sizeS; for(pidx = 0, psrc = this->texS, pdst = this->texSbw; pidx < pidn; pidx += 3, psrc += 3, pdst += 3) { pdst[2] = pdst[1] = pdst[0] = (unsigned char) (0.2989*double(psrc[0]) + 0.5870*double(psrc[1]) + 0.1140*double(psrc[2])); } this->texSizeS = sizeS; while (sizeO >= (2 * newSize)) sizeO /= 2; this->texO = new unsigned char [3 * sizeO * sizeO]; this->texObw = new unsigned char [3 * sizeO * sizeO]; gluScaleImage(GL_RGB, this->image.width, this->image.height, GL_UNSIGNED_BYTE, this->image.data, sizeO, sizeO, GL_UNSIGNED_BYTE, this->texO); pidn = 3 * sizeO * sizeO; for(pidx = 0, psrc = this->texO, pdst = this->texObw; pidx < pidn; pidx += 3, psrc += 3, pdst += 3) { pdst[2] = pdst[1] = pdst[0] = (unsigned char) (0.2989*double(psrc[0]) + 0.5870*double(psrc[1]) + 0.1140*double(psrc[2])); } this->texSizeO = sizeO; } struct lxDataRebuildStationStruct { lxFileStation * m_pst; size_t m_pos; }; void lxData::Rebuild() { wxString inpln, flags, filename; wxUint32 id1, id2, nid, scrapWallsNpt, currentXpt = 0, surfaceNpt; double fpos[3], norm[3]; lxLRUD lrud; lxDataStation st; lxDataShot sh; lxDataSurvey sv; this->Clear(); this->title = _T(""); this->scrapWalls = vtkPolyData::New(); this->lrudWalls = vtkPolyData::New(); this->surface = vtkPolyData::New(); this->m_centerline = vtkPolyData::New(); //vtkVoidArray * cldata_array = vtkVoidArray::New(); vtkIntArray * cldata_array = vtkIntArray::New(); cldata_array->SetName("Temp"); surfaceNpt = 0; lxVec tmpVec; vtkPoints * sWpoints = vtkPoints::New(), * lWpoints = vtkPoints::New(), * spoints = vtkPoints::New(), * cl_points = vtkPoints::New(); vtkCellArray * sWpolys = vtkCellArray::New(), * lWpolys = vtkCellArray::New(), * sWstrips = vtkCellArray::New(), * spolys = vtkCellArray::New(), * cl_cells = vtkCellArray::New(); vtkFloatArray * lWnorms = vtkFloatArray::New(); lWnorms->SetName("Normals"); // * tmpCA; std::map stationMap; std::map surveyMap; size_t st_num; lxDataRebuildStationStruct stR; lxFileSurvey_list::iterator sv_it; lxFileStation_list::iterator st_it; lxFileShot_list::iterator sh_it; lxFileSurvey_list::iterator su_it = this->m_input.m_surveys.begin(); if (su_it != this->m_input.m_surveys.end()) { this->title = wxConvUTF8.cMB2WX(this->m_input.m_surveysData.GetString(su_it->m_titlePtr)); if (this->title.Length() == 0) this->title = wxConvUTF8.cMB2WX(this->m_input.m_surveysData.GetString(su_it->m_namePtr)); } for(sv_it = this->m_input.m_surveys.begin(), st_num = 0; sv_it != this->m_input.m_surveys.end(); sv_it++, st_num++) { sv.m_id = sv_it->m_id; sv.m_name = this->m_input.m_surveysData.GetString(sv_it->m_namePtr); sv.m_title = this->m_input.m_surveysData.GetString(sv_it->m_titlePtr); sv.m_parent = sv_it->m_parent; sv.m_level = 0; sv.m_full_name = sv.m_name; this->surveys.push_back(sv); surveyMap[sv_it->m_id] = st_num; } lxDataSurvey * csv, * psv; for(st_num = 0; st_num < this->surveys.size(); st_num++) { csv = &(this->surveys[st_num]); if (surveyMap.find(csv->m_parent) == surveyMap.end()) csv->m_level = 0; else if (csv->m_parent == csv->m_id) csv->m_level = 0; else { psv = &(this->surveys[surveyMap[csv->m_parent]]); if (psv->m_full_name.size() > 0) csv->m_full_name += "."; csv->m_full_name += psv->m_full_name; csv->m_level = psv->m_level + 1; } } for(st_it = this->m_input.m_stations.begin(), st_num = 0; st_it != this->m_input.m_stations.end(); st_it++, st_num++) { st.pos.x = st_it->m_c[0]; st.pos.y = st_it->m_c[1]; st.pos.z = st_it->m_c[2]; st.m_name = this->m_input.m_stationsData.GetString(st_it->m_namePtr); st.m_comment = this->m_input.m_stationsData.GetString(st_it->m_commentPtr); st.m_temporary = (strcmp(st.m_name,".") == 0) || (strcmp(st.m_name,"-") == 0); st.m_fix = st_it->GetFlag(LXFILE_STATION_FLAG_FIXED); st.m_entrance = st_it->GetFlag(LXFILE_STATION_FLAG_ENTRANCE); st.m_surface = st_it->GetFlag(LXFILE_STATION_FLAG_SURFACE); st.m_survey_idx = surveyMap[st_it->m_surveyId]; stR.m_pos = st_num; stR.m_pst = &(*st_it); stationMap[st_it->m_id] = stR; this->stations.push_back(st); cl_points->InsertNextPoint(st_it->m_c[0], st_it->m_c[1], st_it->m_c[2]); } lxFileDbl * tmpDbl; double fc[3], tc[3], fd[4], td[4]; for(sh_it = this->m_input.m_shots.begin(); sh_it != this->m_input.m_shots.end(); sh_it++) { sh.from = stationMap[sh_it->m_from].m_pos; sh.to = stationMap[sh_it->m_to].m_pos; sh.surface = sh_it->GetFlag(LXFILE_SHOT_FLAG_SURFACE); sh.invisible = sh_it->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE); sh.splay = sh_it->GetFlag(LXFILE_SHOT_FLAG_SPLAY); sh.duplicate = sh_it->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE); this->shots.push_back(sh); cldata_array->InsertNextValue(sh.from); //cldata_array->InsertNextVoidPointer(&(*sh_it)); cl_cells->InsertNextCell(2); cl_cells->InsertCellPoint(sh.from); cl_cells->InsertCellPoint(sh.to); if (sh_it->m_sectionType != LXFILE_SHOT_SECTION_NONE) { tmpDbl = stationMap[sh_it->m_from].m_pst->m_c; fc[0] = tmpDbl[0]; fc[1] = tmpDbl[1]; fc[2] = tmpDbl[2]; tmpDbl = stationMap[sh_it->m_to].m_pst->m_c; tc[0] = tmpDbl[0]; tc[1] = tmpDbl[1]; tc[2] = tmpDbl[2]; tmpDbl = sh_it->m_fLRUD; fd[0] = tmpDbl[0]; fd[1] = tmpDbl[1]; fd[2] = tmpDbl[2]; fd[3] = tmpDbl[3]; tmpDbl = sh_it->m_tLRUD; td[0] = tmpDbl[0]; td[1] = tmpDbl[1]; td[2] = tmpDbl[2]; td[3] = tmpDbl[3]; lrud.SetVThreshold(sh_it->m_threshold); lrud.InsertShot(fc, tc, fd, td, NULL); } } this->m_centerline->SetPoints(cl_points); this->m_centerline->SetLines(cl_cells); vtkCellData * cdt; cdt = this->m_centerline->GetCellData(); cdt->SetScalars(cldata_array); cldata_array->Delete(); cl_points->Delete(); cl_cells->Delete(); // walls scrapWallsNpt = 0; lxFileScrap_list::iterator sw_it; lxFile3Point * sw_pts; lxFile3Angle * sw_tri; for(sw_it = this->m_input.m_scraps.begin(); sw_it != this->m_input.m_scraps.end(); sw_it++) { sw_pts = (lxFile3Point *) this->m_input.m_scrapsData.GetData(sw_it->m_pointsPtr); currentXpt = scrapWallsNpt; for(id1 = 0; id1 < sw_it->m_numPoints; id1++) { sWpoints->InsertPoint(scrapWallsNpt, sw_pts[id1].m_c[0], sw_pts[id1].m_c[1], sw_pts[id1].m_c[2]); scrapWallsNpt++; } sw_tri = (lxFile3Angle *) this->m_input.m_scrapsData.GetData(sw_it->m_3AnglesPtr); for(id1 = 0; id1 < sw_it->m_num3Angles; id1++) { sWpolys->InsertNextCell(3); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[0]); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[2]); sWpolys->InsertCellPoint(currentXpt + sw_tri[id1].m_v[1]); } } this->scrapWalls->SetPoints(sWpoints); this->scrapWalls->SetPolys(sWpolys); // single surface surfaceNpt = 0; lxFileSurface_list::iterator sf_it = this->m_input.m_surfaces.begin(); lxFileDbl * sf_a; if (sf_it != this->m_input.m_surfaces.end()) { sf_a = (lxFileDbl *) this->m_input.m_surfacesData.GetData(sf_it->m_dataPtr); currentXpt = surfaceNpt; nid = 0; for(id1 = 0; id1 < sf_it->m_height; id1++) { for(id2 = 0; id2 < sf_it->m_width; id2++) { spoints->InsertPoint(surfaceNpt, sf_it->m_calib[0] + sf_it->m_calib[2] * double(id2) + sf_it->m_calib[3] * double(id1), sf_it->m_calib[1] + sf_it->m_calib[4] * double(id2) + sf_it->m_calib[5] * double(id1), sf_a[nid]); surfaceNpt++; nid++; } } wxUint32 r1, r2; for(id1 = 1; id1 < sf_it->m_height; id1++) { for(id2 = 1; id2 < sf_it->m_width; id2++) { r2 = (id1 * sf_it->m_width) + id2; r1 = r2 - sf_it->m_width; spolys->InsertNextCell(4); spolys->InsertCellPoint(currentXpt + r1 - 1); spolys->InsertCellPoint(currentXpt + r1); spolys->InsertCellPoint(currentXpt + r2); spolys->InsertCellPoint(currentXpt + r2 - 1); } } } this->surface->SetPoints(spoints); this->surface->SetPolys(spolys); // texture for first surface object lxFileSurfaceBitmap_list::iterator sfb_it = this->m_input.m_surfaceBitmaps.begin(); if ((sfb_it != this->m_input.m_surfaceBitmaps.end()) && (sfb_it->m_surfaceId == 0) && (sfb_it->m_type == LXFILE_BITMAP_JPEG)) { this->m_textureSurface.SetImage(lxRead_JPEG_file("", this->m_input.m_surfaceBitmapsData.GetTmpFile(sfb_it->m_dataPtr))); this->m_textureSurface.InitCalibInverse(sfb_it->m_calib[0], sfb_it->m_calib[1], sfb_it->m_calib[2], sfb_it->m_calib[3], sfb_it->m_calib[4], sfb_it->m_calib[5]); } // insert LRUD into walls lrud.Calculate(); long i, ni; ni = lrud.GetPointsN(); lWnorms->SetNumberOfComponents(3); for (i = 0; i < ni; i++) { lrud.GetPoint(i, fpos, norm); lWpoints->InsertPoint(i, fpos[0], fpos[1], fpos[2]); lWnorms->InsertTuple(i, norm); } ni = lrud.GetTrianglesN(); long triv[3]; for (i = 0; i < ni; i++) { lrud.GetTriangle(i, triv); lWpolys->InsertNextCell(3); lWpolys->InsertCellPoint(triv[0]); lWpolys->InsertCellPoint(triv[1]); lWpolys->InsertCellPoint(triv[2]); } this->lrudWalls->SetPoints(lWpoints); this->lrudWalls->SetPolys(lWpolys); this->lrudWalls->GetPointData()->SetNormals(lWnorms); // rescale image if too large double * bnds, x1, y1, x2, y2, x3, x4, y3, y4, tmp1, tmp2; int ix1, iy1, ix2, iy2, nsx, nsy; if ((this->surface != NULL) && (this->surface->GetNumberOfPoints() > 0) && (this->m_textureSurface.image.data != NULL)) { bnds = this->surface->GetBounds(); x1 = this->m_textureSurface.xx * bnds[0] + this->m_textureSurface.xy * bnds[2] + this->m_textureSurface.dx; x2 = this->m_textureSurface.xx * bnds[1] + this->m_textureSurface.xy * bnds[2] + this->m_textureSurface.dx; x3 = this->m_textureSurface.xx * bnds[0] + this->m_textureSurface.xy * bnds[3] + this->m_textureSurface.dx; x4 = this->m_textureSurface.xx * bnds[1] + this->m_textureSurface.xy * bnds[3] + this->m_textureSurface.dx; y1 = this->m_textureSurface.yx * bnds[0] + this->m_textureSurface.yy * bnds[2] + this->m_textureSurface.dy; y2 = this->m_textureSurface.yx * bnds[1] + this->m_textureSurface.yy * bnds[2] + this->m_textureSurface.dy; y3 = this->m_textureSurface.yx * bnds[0] + this->m_textureSurface.yy * bnds[3] + this->m_textureSurface.dy; y4 = this->m_textureSurface.yx * bnds[1] + this->m_textureSurface.yy * bnds[3] + this->m_textureSurface.dy; tmp1 = x1; tmp2 = x1; if (x2 < tmp1) tmp1 = x2; else if (x2 > tmp2) tmp2 = x2; if (x3 < tmp1) tmp1 = x3; else if (x3 > tmp2) tmp2 = x3; if (x4 < tmp1) tmp1 = x4; else if (x4 > tmp2) tmp2 = x4; x1 = tmp1; x2 = tmp2; tmp1 = y1; tmp2 = y1; if (y2 < tmp1) tmp1 = y2; else if (y2 > tmp2) tmp2 = y2; if (y3 < tmp1) tmp1 = y3; else if (y3 > tmp2) tmp2 = y3; if (y4 < tmp1) tmp1 = y4; else if (y4 > tmp2) tmp2 = y4; y1 = tmp1; y2 = tmp2; ix1 = int(floor(x1)) - 1; if (ix1 < 0) ix1 = 0; iy1 = int(floor(y1)) - 1; if (iy1 < 0) iy1 = 0; ix2 = int(ceil(x2)) + 1; if (ix2 > this->m_textureSurface.image.width) ix2 = this->m_textureSurface.image.width; iy2 = int(ceil(y2)) + 1; if (iy2 > this->m_textureSurface.image.height) iy2 = this->m_textureSurface.image.height; nsx = ix2 - ix1; nsy = iy2 - iy1; if ((((ix2 - ix1) < this->m_textureSurface.image.width) || ((iy2 - iy1) < this->m_textureSurface.image.height)) && (nsx > 0) && (nsy > 0)) { // skopirujeme data unsigned char * nd = (unsigned char *)malloc(3 * nsx * nsy); int rr, rs, ors, dcs; rs = 3 * nsx; dcs = 3 * ix1; ors = 3 * this->m_textureSurface.image.width; for(rr = 0; rr < nsy; rr++) { memcpy( nd + ((nsy-rr-1) * rs), this->m_textureSurface.image.data + ((this->m_textureSurface.image.height - 1 - iy1 - rr) * ors + dcs), rs); } lxImageRGBFree(this->m_textureSurface.image); this->m_textureSurface.image.data = nd; this->m_textureSurface.image.width = nsx; this->m_textureSurface.image.height = nsy; this->m_textureSurface.iw = (double) nsx; this->m_textureSurface.ih = (double) nsy; this->m_textureSurface.dx -= (double) ix1; this->m_textureSurface.dy -= (double) iy1; } } else { this->m_textureSurface.Clear(); } #if VTK_MAJOR_VERSION > 5 this->scrapWallsNormals->SetInputData(this->scrapWalls); #else this->scrapWallsNormals->SetInput(this->scrapWalls); #endif this->scrapWallsNormals->SetFeatureAngle(360.0); this->scrapWallsNormals->SetAutoOrientNormals(false); this->scrapWallsNormals->Update(); // COUNTER needed #if VTK_MAJOR_VERSION > 5 this->allWalls->RemoveAllInputs(); this->allWalls->AddInputData(this->scrapWallsNormals->GetOutput()); this->allWalls->AddInputData(this->lrudWalls); #else this->allWalls->RemoveAllInputs(); this->allWalls->AddInput(this->scrapWallsNormals->GetOutput()); this->allWalls->AddInput(this->lrudWalls); #endif this->allWalls->Update(); #if VTK_MAJOR_VERSION > 5 this->allWallsTriangle->SetInputConnection(this->allWalls->GetOutputPort()); this->allWallsSorted->SetInputConnection(this->allWallsTriangle->GetOutputPort()); #else this->allWallsTriangle->SetInput(this->allWalls->GetOutput()); this->allWallsSorted->SetInput(this->allWallsTriangle->GetOutput()); #endif this->allWallsSorted->Update(); #if VTK_MAJOR_VERSION > 5 this->allWallsStripped->SetInputConnection(this->allWallsTriangle->GetOutputPort()); #else this->allWallsStripped->SetInput(this->allWallsTriangle->GetOutput()); #endif this->allWallsStripped->Update(); #if VTK_MAJOR_VERSION > 5 this->surfaceNormals->SetInputData(this->surface); #else this->surfaceNormals->SetInput(this->surface); #endif this->surfaceNormals->SetFeatureAngle(360); this->surfaceNormals->Update(); #if VTK_MAJOR_VERSION > 5 this->surfaceTriangle->SetInputConnection(this->surfaceNormals->GetOutputPort()); this->surfaceSorted->SetInputConnection(this->surfaceTriangle->GetOutputPort()); #else this->surfaceTriangle->SetInput(this->surfaceNormals->GetOutput()); this->surfaceSorted->SetInput(this->surfaceTriangle->GetOutput()); #endif this->surfaceSorted->Update(); sWpoints->Delete(); sWpolys->Delete(); sWstrips->Delete(); lWpoints->Delete(); lWpolys->Delete(); lWnorms->Delete(); spoints->Delete(); spolys->Delete(); } void lxData::ExportVTK(wxString fileName) { vtkPolyDataWriter * w = vtkPolyDataWriter::New(); w->SetFileName(fileName.mbc_str()); w->SetFileTypeToBinary(); #if VTK_MAJOR_VERSION > 5 w->SetInputConnection(this->allWallsStripped->GetOutputPort()); #else w->SetInput(this->allWallsStripped->GetOutput()); #endif w->Write(); w->Delete(); } therion-5.4.1/loch/lxData.h000066400000000000000000000065621307545355600155320ustar00rootroot00000000000000/** * @file lxData.h * Loch model data. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxData_h #define lxData_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #endif //LXDEPCHECK - standard libraries #include "lxMath.h" #include "lxImgIO.h" #include "lxImgIO.h" #include "lxFile.h" struct lxDataSurvey { size_t m_id, m_parent, m_level; const char * m_name, * m_title; std::string m_full_name; }; struct lxDataStation { lxVec pos; size_t m_survey_idx; const char * m_name, * m_comment; bool m_temporary, m_entrance, m_fix; double m_screen_x, m_screen_y, m_screen_z, m_surface; lxDataStation() : m_name(NULL), m_temporary(false), m_entrance(false), m_fix(false), m_surface(false) {} }; struct lxDataTexture { double dx, dy, xx, xy, yx, yy, iw, ih; unsigned texSizeS, texSizeO; lxImageRGB image; unsigned char * texS, * texSbw, * texO, * texObw; lxDataTexture() : dx(0.0), dy(0.0), xx(1.0), xy(0.0), yx(0.0), yy(1.0), iw(1.0), ih(1.0), image(), texS(NULL), texSbw(NULL), texO(NULL), texObw(NULL) {} ~lxDataTexture(); bool SetImage(lxImageRGB img); void Clear(); void ClearTexImages(); void CreateTexImages(int sizeS, int sizeO); bool InitCalibInverse(double idx, double idy, double ixx, double ixy, double iyx, double iyy); bool InitCalibNormal(double idx, double idy, double ixx, double ixy, double iyx, double iyy); }; struct lxDataShot { unsigned long from, to; bool surface, invisible, splay, duplicate; }; typedef std::vector lxDataStationVec; typedef std::vector lxDataShotVec; typedef std::vector lxDataSurveyVec; struct lxData { lxFile m_input; lxDataStationVec stations; lxDataShotVec shots; lxDataSurveyVec surveys; wxString title; vtkPolyData * scrapWalls, * lrudWalls, * surface, * m_centerline; vtkTriangleFilter * allWallsTriangle, * surfaceTriangle; vtkDepthSortPolyData * allWallsSorted, * surfaceSorted; vtkAppendPolyData * allWalls; vtkStripper * allWallsStripped; vtkPolyDataNormals * scrapWallsNormals, * surfaceNormals; vtkLookupTable * luTable; lxDataTexture m_textureSurface; lxData(); ~lxData(); void Clear(); void Rebuild(); void InitTextures(); void ExportVTK(wxString fileName); }; #endif therion-5.4.1/loch/lxFNT10x20_bdf.h000066400000000000000000130203111307545355600166060ustar00rootroot00000000000000FT_Byte lxFNT10x20_bdf[] = { 83,84,65,82,84,70,79,78,84,32,50,46,49,10,67,79, 77,77,69,78,84,32,34,36,73,100,58,32,49,48,120,50, 48,46,98,100,102,44,118,32,49,46,56,55,32,50,48,48, 51,45,48,50,45,49,52,32,49,56,58,49,49,58,48,52, 43,48,48,32,109,103,107,50,53,32,69,120,112,32,109,103, 107,50,53,32,36,34,10,67,79,77,77,69,78,84,32,34, 83,101,110,100,32,98,117,103,32,114,101,112,111,114,116,115, 32,116,111,32,77,97,114,107,117,115,32,75,117,104,110,32, 60,104,116,116,112,58,47,47,119,119,119,46,99,108,46,99, 97,109,46,97,99,46,117,107,47,126,109,103,107,50,53,47, 62,34,10,70,79,78,84,32,45,77,105,115,99,45,70,105, 120,101,100,45,77,101,100,105,117,109,45,82,45,78,111,114, 109,97,108,45,45,50,48,45,50,48,48,45,55,53,45,55, 53,45,67,45,49,48,48,45,73,83,79,49,48,54,52,54, 45,49,10,83,73,90,69,32,50,48,32,55,53,32,55,53, 10,70,79,78,84,66,79,85,78,68,73,78,71,66,79,88, 32,49,48,32,50,48,32,48,32,45,52,10,83,84,65,82, 84,80,82,79,80,69,82,84,73,69,83,32,50,50,10,70, 79,78,84,78,65,77,69,95,82,69,71,73,83,84,82,89, 32,34,34,10,70,79,85,78,68,82,89,32,34,77,105,115, 99,34,10,70,65,77,73,76,89,95,78,65,77,69,32,34, 70,105,120,101,100,34,10,87,69,73,71,72,84,95,78,65, 77,69,32,34,77,101,100,105,117,109,34,10,83,76,65,78, 84,32,34,82,34,10,83,69,84,87,73,68,84,72,95,78, 65,77,69,32,34,78,111,114,109,97,108,34,10,65,68,68, 95,83,84,89,76,69,95,78,65,77,69,32,34,34,10,80, 73,88,69,76,95,83,73,90,69,32,50,48,10,80,79,73, 78,84,95,83,73,90,69,32,50,48,48,10,82,69,83,79, 76,85,84,73,79,78,95,88,32,55,53,10,82,69,83,79, 76,85,84,73,79,78,95,89,32,55,53,10,83,80,65,67, 73,78,71,32,34,67,34,10,65,86,69,82,65,71,69,95, 87,73,68,84,72,32,49,48,48,10,67,72,65,82,83,69, 84,95,82,69,71,73,83,84,82,89,32,34,73,83,79,49, 48,54,52,54,34,10,67,72,65,82,83,69,84,95,69,78, 67,79,68,73,78,71,32,34,49,34,10,68,69,70,65,85, 76,84,95,67,72,65,82,32,48,10,70,79,78,84,95,68, 69,83,67,69,78,84,32,52,10,70,79,78,84,95,65,83, 67,69,78,84,32,49,54,10,88,95,72,69,73,71,72,84, 32,56,10,67,65,80,95,72,69,73,71,72,84,32,49,51, 10,67,79,80,89,82,73,71,72,84,32,34,80,117,98,108, 105,99,32,100,111,109,97,105,110,32,102,111,110,116,46,32, 32,83,104,97,114,101,32,97,110,100,32,101,110,106,111,121, 46,34,10,95,88,77,66,68,70,69,68,95,73,78,70,79, 32,34,69,100,105,116,101,100,32,119,105,116,104,32,120,109, 98,100,102,101,100,32,52,46,53,46,34,10,69,78,68,80, 82,79,80,69,82,84,73,69,83,10,67,72,65,82,83,32, 53,48,49,51,10,83,84,65,82,84,67,72,65,82,32,99, 104,97,114,48,10,69,78,67,79,68,73,78,71,32,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,52,48,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,52,48,56,48,10,55,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,112,97,99,101,10,69,78,67,79,68, 73,78,71,32,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,120,99,108, 97,109,10,69,78,67,79,68,73,78,71,32,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,10,69,78,67, 79,68,73,78,71,32,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,117, 109,98,101,114,115,105,103,110,10,69,78,67,79,68,73,78, 71,32,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,51,70,67,48,10,49,66,48,48, 10,49,66,48,48,10,49,66,48,48,10,55,70,56,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,111,108,108,97,114, 10,69,78,67,79,68,73,78,71,32,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,51,70,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,54,68, 56,48,10,54,70,48,48,10,51,66,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,66,56,48,10,49,69,67,48,10,51,54,67,48,10, 51,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,109,112,101,114, 115,97,110,100,10,69,78,67,79,68,73,78,71,32,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,51,54, 48,48,10,51,67,48,48,10,49,56,48,48,10,51,56,48, 48,10,54,67,48,48,10,54,54,67,48,10,54,51,56,48, 10,54,51,48,48,10,55,55,56,48,10,51,67,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,113,117,111,116,101,115,105,110,103,108, 101,10,69,78,67,79,68,73,78,71,32,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,97,114,101,110,108,101,102,116,10,69,78,67, 79,68,73,78,71,32,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,115,116,101,114,105, 115,107,10,69,78,67,79,68,73,78,71,32,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,55,70,56,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,112,108,117,115,10,69,78,67,79,68,73,78, 71,32,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,99,111,109,109,97,10, 69,78,67,79,68,73,78,71,32,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,69,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,104,121,112,104,101,110,10,69,78,67,79,68,73,78,71, 32,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,112,101,114,105,111,100,10, 69,78,67,79,68,73,78,71,32,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,122,101,114,111,10,69,78,67, 79,68,73,78,71,32,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,111,110, 101,10,69,78,67,79,68,73,78,71,32,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,67,48,48,10,51,67,48,48,10,54,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,119,111,10,69,78,67,79,68,73,78,71,32, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,69,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,104,114,101,101,10,69,78, 67,79,68,73,78,71,32,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,69,48,48,10,48,51,48,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 111,117,114,10,69,78,67,79,68,73,78,71,32,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,51,48,48,10,48,55,48,48,10,48,70,48, 48,10,49,66,48,48,10,51,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,55,70,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,105,118,101,10,69,78,67,79,68,73, 78,71,32,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,105,120,10,69, 78,67,79,68,73,78,71,32,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,118,101,110,10,69,78,67,79,68,73,78,71,32,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,105,103,104,116,10,69,78,67, 79,68,73,78,71,32,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,105, 110,101,10,69,78,67,79,68,73,78,71,32,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,48,49,56,48,10,50, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,111,108,111,110,10,69,78,67,79,68,73, 78,71,32,53,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,101,109,105,99, 111,108,111,110,10,69,78,67,79,68,73,78,71,32,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,69,48,48,10,48,69,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,101,115,115,10,69,78,67,79,68, 73,78,71,32,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,113,117,97, 108,10,69,78,67,79,68,73,78,71,32,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,101,97,116,101,114,10,69,78,67,79,68, 73,78,71,32,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,50,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,113,117,101,115, 116,105,111,110,10,69,78,67,79,68,73,78,71,32,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,116,10,69,78,67,79,68,73,78, 71,32,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,55,56,48,10,54,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,70,48,48,10, 54,54,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,10,69,78,67,79, 68,73,78,71,32,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,66,10,69, 78,67,79,68,73,78,71,32,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 67,10,69,78,67,79,68,73,78,71,32,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,68,10,69,78,67,79,68,73,78,71,32,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,54,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,10,69,78,67,79,68,73,78,71, 32,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,70,10,69,78,67,79,68, 73,78,71,32,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,71,10,69,78, 67,79,68,73,78,71,32,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,55,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 10,69,78,67,79,68,73,78,71,32,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,10,69,78,67,79,68,73,78,71,32,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,74,10,69,78,67,79,68,73,78,71,32, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,67,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,54,48,48,10,49,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,75,10,69,78,67,79,68,73, 78,71,32,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,10,69,78,67, 79,68,73,78,71,32,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,77,10, 69,78,67,79,68,73,78,71,32,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,51,56,48,10,55,51,56,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,78,10,69,78,67,79,68,73,78,71,32,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,55,49,56,48,10,55,49,56,48,10,55,57,56,48, 10,55,57,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,55,56,48,10,54,55,56,48,10,54,51,56,48,10,54, 51,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,10,69,78,67,79,68,73,78,71,32,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,80,10,69,78,67,79,68,73,78, 71,32,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,81,10,69,78,67,79, 68,73,78,71,32,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,54,55,56,48,10,51,51,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,82,10,69, 78,67,79,68,73,78,71,32,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,10,69,78,67,79,68,73,78,71,32,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,69,48,48,10,48, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,84,10,69,78,67,79,68,73,78,71,32,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,10,69,78,67,79,68,73,78,71, 32,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,86,10,69,78,67,79,68, 73,78,71,32,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,87,10,69,78, 67,79,68,73,78,71,32,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,51,56,48,10,55,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,88, 10,69,78,67,79,68,73,78,71,32,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,10,69,78,67,79,68,73,78,71,32,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,90,10,69,78,67,79,68,73,78,71,32, 57,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,98,114,97,99,107,101,116,108, 101,102,116,10,69,78,67,79,68,73,78,71,32,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,97,99,107,115,108,97,115,104,10,69, 78,67,79,68,73,78,71,32,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 98,114,97,99,107,101,116,114,105,103,104,116,10,69,78,67, 79,68,73,78,71,32,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,115, 99,105,105,99,105,114,99,117,109,10,69,78,67,79,68,73, 78,71,32,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,100,101,114, 115,99,111,114,101,10,69,78,67,79,68,73,78,71,32,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,10, 69,78,67,79,68,73,78,71,32,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,48,49,56, 48,10,51,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,98,10,69,78,67,79,68,73,78,71,32,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,51,48,48,10,54,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,10,69,78,67,79,68,73,78,71,32,57, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,100,10,69,78,67,79,68,73,78, 71,32,49,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,49,68,56, 48,10,51,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,10,69,78,67, 79,68,73,78,71,32,49,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 10,69,78,67,79,68,73,78,71,32,49,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,49,57,56,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,10,69,78,67,79,68,73,78,71,32,49,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,56,48,10,54,51, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,69,48,48,10,54,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,104,10,69,78,67,79,68,73,78, 71,32,49,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,10,69,78,67, 79,68,73,78,71,32,49,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,106, 10,69,78,67,79,68,73,78,71,32,49,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,55,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,49,70,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,107,10,69,78,67,79,68,73,78,71,32,49,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,67,48,48,10,55,56,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,108,10,69,78,67,79,68,73,78, 71,32,49,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,10,69,78,67, 79,68,73,78,71,32,49,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,53,66,48,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,110, 10,69,78,67,79,68,73,78,71,32,49,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,10,69,78,67,79,68,73,78,71,32,49,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,10,69,78,67,79,68,73,78, 71,32,49,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,10,69,78,67, 79,68,73,78,71,32,49,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,68,56,48,10,51,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 10,69,78,67,79,68,73,78,71,32,49,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,70,48,48,10,51,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,10,69,78,67,79,68,73,78,71,32,49,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,10,69,78,67,79,68,73,78, 71,32,49,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,55,69,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,57,56,48,10, 48,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,10,69,78,67, 79,68,73,78,71,32,49,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,118, 10,69,78,67,79,68,73,78,71,32,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,10,69,78,67,79,68,73,78,71,32,49,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,120,10,69,78,67,79,68,73,78, 71,32,49,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,121,10,69,78,67, 79,68,73,78,71,32,49,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,122, 10,69,78,67,79,68,73,78,71,32,49,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,98,114,97,99,101,108,101,102,116,10,69,78,67, 79,68,73,78,71,32,49,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,55,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,56,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 97,114,10,69,78,67,79,68,73,78,71,32,49,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,114,97,99,101,114,105,103,104,116,10, 69,78,67,79,68,73,78,71,32,49,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,115,99,105,105,116,105,108,100,101,10,69,78,67, 79,68,73,78,71,32,49,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,115, 112,97,99,101,10,69,78,67,79,68,73,78,71,32,49,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,99,108,97,109,100,111,119, 110,10,69,78,67,79,68,73,78,71,32,49,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,49,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,49,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,115,116,101,114,108, 105,110,103,10,69,78,67,79,68,73,78,71,32,49,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,56,48,48,10,49,56,48,48,10,55,69,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,67,48,48,10,53,54,67,48,10,55,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,99,117,114,114,101,110,99,121,10,69, 78,67,79,68,73,78,71,32,49,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,56,48,56,48,10,68,68, 56,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,55,70,48,48,10,68,68,56,48, 10,56,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,121,101,110,10,69,78,67,79,68,73,78,71,32,49,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,48,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,51,70, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,114,111,107,101,110,98,97,114, 10,69,78,67,79,68,73,78,71,32,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,101,99,116,105,111,110,10,69,78,67,79,68, 73,78,71,32,49,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,51,48,48,10,51,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,51,51,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,51,48,48,10,51,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,105,101, 114,101,115,105,115,10,69,78,67,79,68,73,78,71,32,49, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,111,112,121,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,49,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,53,69,56,48,10,53,50,56,48,10, 53,48,56,48,10,53,50,56,48,10,53,69,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,114,100,102,101,109,105,110,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,48,48,10, 50,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,69,56,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,117,105,108,108,101,109,111,116,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,49,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,52,56,48,10,48,68,56,48,10,49, 66,48,48,10,51,54,48,48,10,54,67,48,48,10,68,56, 48,48,10,54,67,48,48,10,51,54,48,48,10,49,66,48, 48,10,48,68,56,48,10,48,52,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,111,103,105,99,97,108,110,111,116,10,69,78,67, 79,68,73,78,71,32,49,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,104, 121,112,104,101,110,10,69,78,67,79,68,73,78,71,32,49, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,101,103,105,115,116,101,114, 101,100,10,69,78,67,79,68,73,78,71,32,49,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,53,69,56,48,10,53,50,56,48, 10,53,69,56,48,10,53,52,56,48,10,53,54,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,49,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,101, 103,114,101,101,10,69,78,67,79,68,73,78,71,32,49,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,108,117,115,109,105,110,117,115, 10,69,78,67,79,68,73,78,71,32,49,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,119,111,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,49,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,104,114,101,101,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,49,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,48,54, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 49,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,109,117,10,69,78,67,79, 68,73,78,71,32,49,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,55,55, 48,48,10,55,68,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,97,103,114,97,112,104,10,69,78,67,79,68,73,78,71, 32,49,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,56,48,10,55,70,56,48,10,55,68,56, 48,10,55,68,56,48,10,55,68,56,48,10,51,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,101,114,105,111,100, 99,101,110,116,101,114,101,100,10,69,78,67,79,68,73,78, 71,32,49,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,99,101,100,105,108, 108,97,10,69,78,67,79,68,73,78,71,32,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,54,48,48,10,51,54,48,48,10,49,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,51,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,114,100,109,97,115,99,117,108,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,48, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,117,105,108,108,101,109,111,116,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,49,56,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,56,48,48,10,54,67,48,48,10, 51,54,48,48,10,49,66,48,48,10,48,68,56,48,10,48, 54,67,48,10,48,68,56,48,10,49,66,48,48,10,51,54, 48,48,10,54,67,48,48,10,52,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,113,117,97,114,116,101,114,10,69,78, 67,79,68,73,78,71,32,49,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,54,48, 48,48,10,50,48,56,48,10,50,49,48,48,10,55,50,48, 48,10,48,52,48,48,10,48,57,48,48,10,49,51,48,48, 10,50,53,48,48,10,52,70,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,110,101,104,97,108,102,10,69,78,67,79,68,73,78,71, 32,49,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,54,48,48,48,10,50,48,56, 48,10,50,49,48,48,10,55,50,48,48,10,48,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,48,56,48,10, 52,49,48,48,10,48,50,48,48,10,48,55,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,113, 117,97,114,116,101,114,115,10,69,78,67,79,68,73,78,71, 32,49,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,48,48,48,10,48,56,48,48,10,51,48,56, 48,10,48,57,48,48,10,55,50,48,48,10,48,52,48,48, 10,48,57,48,48,10,49,51,48,48,10,50,53,48,48,10, 52,70,56,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,113,117,101,115,116,105, 111,110,100,111,119,110,10,69,78,67,79,68,73,78,71,32, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,49,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,49,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,65,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 49,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,116,105,108,100,101,10, 69,78,67,79,68,73,78,71,32,49,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,49,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,65,114, 105,110,103,10,69,78,67,79,68,73,78,71,32,49,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,65,69,10,69,78,67,79,68,73,78, 71,32,49,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,56,48,10,49,69,48,48,10,51,54, 48,48,10,51,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,70,56,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,67,99,101,100,105, 108,108,97,10,69,78,67,79,68,73,78,71,32,49,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,69, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,69,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,69,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,103,114,97,118,101,10,69,78,67,79,68,73,78, 71,32,50,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,73,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,50,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,99,105,114,99,117,109,102,108,101,120,10, 69,78,67,79,68,73,78,71,32,50,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,50,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,116, 104,10,69,78,67,79,68,73,78,71,32,50,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,70,57,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,78,116,105,108,100,101,10,69,78,67,79,68, 73,78,71,32,50,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,48,48,48,48,10, 54,49,56,48,10,55,49,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,68,56,48,10,54,68,56,48,10,54,55, 56,48,10,54,55,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,50,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,79,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,116,105, 108,100,101,10,69,78,67,79,68,73,78,71,32,50,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,79,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,109,117,108,116,105,112,108,121,10,69,78,67,79,68, 73,78,71,32,50,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,49,67,48,48,10,51,54,48,48,10,54,51,48, 48,10,52,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,115,108, 97,115,104,10,69,78,67,79,68,73,78,71,32,50,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,49, 70,48,48,10,51,51,48,48,10,54,51,56,48,10,54,51, 56,48,10,54,53,56,48,10,54,53,56,48,10,54,53,56, 48,10,54,57,56,48,10,54,57,56,48,10,54,57,56,48, 10,55,49,56,48,10,51,51,48,48,10,51,69,48,48,10, 52,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,85,100,105,101,114,101,115,105,115,10, 69,78,67,79,68,73,78,71,32,50,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,50,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,84,104,111,114,110, 10,69,78,67,79,68,73,78,71,32,50,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,70,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,70,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,101,114,109,97,110,100,98,108,115,10,69,78, 67,79,68,73,78,71,32,50,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,66, 48,48,10,51,49,56,48,10,51,49,56,48,10,51,51,48, 48,10,55,54,48,48,10,51,54,48,48,10,51,51,48,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,51,48,48,10,51,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,103,114,97,118,101,10,69,78,67,79,68,73,78,71,32, 50,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,50,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,51,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,69,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,48,49,56,48, 10,51,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,116,105,108,100,101,10,69,78,67,79,68,73,78,71,32, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,114,105,110,103,10,69,78,67,79,68, 73,78,71,32,50,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,48,49,56,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,101,10, 69,78,67,79,68,73,78,71,32,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,66,48,48,10,52,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,67,56,48,10,51,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,99,99,101,100,105,108,108,97,10,69,78,67,79,68, 73,78,71,32,50,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,67,48,48,10,48,54,48,48, 10,51,54,48,48,10,49,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,50,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,51,49,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,50,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,105,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,50,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 50,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,116,104,10,69,78,67,79,68,73,78, 71,32,50,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,52,48,48,10,54,67,48,48,10,51,56, 48,48,10,51,56,48,48,10,54,67,48,48,10,52,54,48, 48,10,49,70,48,48,10,51,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,110,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,50,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,99,105,114,99,117,109,102,108,101, 120,10,69,78,67,79,68,73,78,71,32,50,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,116,105,108,100,101,10,69,78,67,79,68, 73,78,71,32,50,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,105,118,105,100,101,10, 69,78,67,79,68,73,78,71,32,50,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,115,108,97,115,104,10,69,78,67,79,68,73,78, 71,32,50,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,56,48,10,49,70,48, 48,10,51,51,48,48,10,54,53,56,48,10,54,53,56,48, 10,54,57,56,48,10,54,57,56,48,10,51,51,48,48,10, 51,69,48,48,10,52,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,50,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,50,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,121,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,50,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,104,111,114,110,10,69,78,67,79,68,73,78,71,32,50, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 69,48,48,10,51,51,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,51,48,48,10,51,69,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,121,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,50,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,65,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,65,98,114,101,118,101,10,69, 78,67,79,68,73,78,71,32,50,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,98,114,101,118,101,10,69,78,67,79,68,73,78,71, 32,50,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,50,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,51, 56,48,10,48,51,48,48,10,48,49,67,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,67,48,10,48,49,67, 48,10,48,49,56,48,10,48,48,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,99,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,70,48,48,10,51,49,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 67,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,54,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,51,49,56,48, 10,49,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,67,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,100,111,116,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,50,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,67,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,49,56,48,10,49,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,68,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,50,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,100,99,97,114,111,110,10,69,78,67,79,68,73,78,71, 32,50,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,54,54,48,48,10,51,67, 48,48,10,49,57,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,68,99,114,111,97,116, 10,69,78,67,79,68,73,78,71,32,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,70,57,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,100,99,114,111,97,116,10,69,78,67,79,68,73, 78,71,32,50,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,55,67,48,10,48,49,56,48,10,49,68, 56,48,10,51,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,69,109,97,99, 114,111,110,10,69,78,67,79,68,73,78,71,32,50,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,109,97,99,114,111,110,10,69,78, 67,79,68,73,78,71,32,50,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,98,114,101,118,101,10,69,78,67,79,68,73,78,71,32, 50,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,98,114,101,118,101,10, 69,78,67,79,68,73,78,71,32,50,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,69,100,111,116,97,99,99,101,110,116,10,69,78,67, 79,68,73,78,71,32,50,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,50,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,49,56,48, 10,49,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,69,111,103,111, 110,101,107,10,69,78,67,79,68,73,78,71,32,50,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,51,48,48,10,48,55,48,48,10,48,54,48,48,10,48, 51,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,111,103,111,110,101,107,10,69,78, 67,79,68,73,78,71,32,50,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 51,49,56,48,10,49,70,48,48,10,48,54,48,48,10,48, 69,48,48,10,48,67,48,48,10,48,55,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,50,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,55,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 103,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,69,56,48,10,54,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,69,48,48,10,54,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,71,98, 114,101,118,101,10,69,78,67,79,68,73,78,71,32,50,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,50,49,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,69,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,98,114,101,118,101,10,69,78, 67,79,68,73,78,71,32,50,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,49, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,51,69,56,48,10,54,51,56,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 54,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 71,100,111,116,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,50,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,55,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,103,100,111, 116,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,69,56,48, 10,54,51,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,54,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,71,99,111,109,109,97, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,55,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,69, 56,48,10,48,67,48,48,10,48,54,48,48,10,49,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,103,99,111,109,109,97,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,50, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,49,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,51,69,56,48,10,54, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,69,48,48,10,54,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,70,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,72,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,99,105,114,99,117,109,102,108,101, 120,10,69,78,67,79,68,73,78,71,32,50,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,72,98,97,114,10,69,78,67,79,68,73,78, 71,32,50,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,70,70, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,104,98,97,114,10, 69,78,67,79,68,73,78,71,32,50,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,70,56,48,48,10,54, 48,48,48,10,54,69,48,48,10,55,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,50,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,50, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,48,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,73,98,114,101,118,101,10,69, 78,67,79,68,73,78,71,32,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 50,49,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,98,114,101,118,101,10,69,78,67,79,68,73,78,71, 32,51,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,51,48,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,51, 48,48,10,48,55,48,48,10,48,54,48,48,10,48,51,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,51,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,51,56, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,100,111,116,108,101, 115,115,105,10,69,78,67,79,68,73,78,71,32,51,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,73,74,10,69,78,67,79,68,73,78, 71,32,51,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 70,68,56,48,10,48,49,56,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,106,10,69,78, 67,79,68,73,78,71,32,51,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,49,56,48,10,51,49,56,48,10,48,48,48, 48,10,70,55,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,70,68,56,48,10,48,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,49,70,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 74,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,51,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,49,57,56,48,10,48,48,48,48, 10,49,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,67,51,48,48,10,67,51,48,48,10,54,54, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,106,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,51,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 70,48,48,10,49,57,56,48,10,48,48,48,48,10,48,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,75,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,107,99,111,109,109, 97,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,51,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,67,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 49,56,48,10,55,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,107,103,114,101,101,110, 108,97,110,100,105,99,10,69,78,67,79,68,73,78,71,32, 51,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,54,48,48,10, 54,67,48,48,10,55,56,48,48,10,55,48,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,99,111,109,109, 97,97,99,99,101,110,116,10,69,78,67,79,68,73,78,71, 32,51,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,51,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,99,111,109,109,97, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 51,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,49,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,51,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,67,67,48,48,10,55,56,48,48,10,51,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,76,100,111,116,10, 69,78,67,79,68,73,78,71,32,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,54,48,48,10,54,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,100,111,116,10,69,78,67,79,68,73,78,71,32, 51,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,57,56,48,10,49,57,56,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,70,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,76,115,108,97,115,104,10, 69,78,67,79,68,73,78,71,32,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,67,48,48,10,55,48,48,48,10,69,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,115,108,97,115,104,10,69,78,67,79,68,73,78, 71,32,51,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,51,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,54,49,56,48,10,55,49,56,48,10,55,49,56,48, 10,55,57,56,48,10,55,57,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 51,56,48,10,54,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,51,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,78,99,111, 109,109,97,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,50,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,55,57,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,110,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,99,97,114,111, 110,10,69,78,67,79,68,73,78,71,32,51,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,67,48, 48,10,54,49,56,48,10,55,49,56,48,10,55,49,56,48, 10,55,57,56,48,10,55,57,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 51,56,48,10,54,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,99,97,114,111,110,10,69,78,67,79,68, 73,78,71,32,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,110,97,112, 111,115,116,114,111,112,104,101,10,69,78,67,79,68,73,78, 71,32,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,52,48, 48,48,10,56,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,110,103,10,69, 78,67,79,68,73,78,71,32,51,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,55, 49,56,48,10,55,49,56,48,10,55,57,56,48,10,55,57, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,55,56, 48,10,54,55,56,48,10,54,51,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,110,103,10,69,78,67,79,68,73,78,71,32,51,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,79,109,97,99,114,111,110,10,69, 78,67,79,68,73,78,71,32,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,109,97,99,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,79,98,114,101,118, 101,10,69,78,67,79,68,73,78,71,32,51,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,51,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,49,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,104,117, 110,103,97,114,117,109,108,97,117,116,10,69,78,67,79,68, 73,78,71,32,51,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,57,56,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,104,117, 110,103,97,114,117,109,108,97,117,116,10,69,78,67,79,68, 73,78,71,32,51,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,57,56,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,79,69,10, 69,78,67,79,68,73,78,71,32,51,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 51,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,55,56,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,54,48,48,10,49,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,101,10,69,78,67,79,68,73,78,71,32,51,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,68,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,51,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 114,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 51,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,82,99,111,109,109,97,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,51, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,55,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,70,48,48,10,51,57, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,99,97,114,111,110,10,69,78, 67,79,68,73,78,71,32,51,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 114,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,48,48,48,10,49,69, 48,48,10,48,51,48,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,99,105,114,99, 117,109,102,108,101,120,10,69,78,67,79,68,73,78,71,32, 51,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,48,48,48,10,49,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,115,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,99,101,100,105,108,108,97,10, 69,78,67,79,68,73,78,71,32,51,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,69,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,99,101,100,105,108,108,97,10,69,78,67,79,68, 73,78,71,32,51,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,48,48,48,10,51,70, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,49,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,48,48,48,10,51,48,48, 48,10,49,69,48,48,10,48,51,48,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,70,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 99,111,109,109,97,97,99,99,101,110,116,10,69,78,67,79, 68,73,78,71,32,51,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,99, 111,109,109,97,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,51,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,69,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,84,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,54,54, 48,48,10,51,67,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 98,97,114,10,69,78,67,79,68,73,78,71,32,51,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,98,97,114,10,69,78,67,79,68, 73,78,71,32,51,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,51,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,85,116,105, 108,100,101,10,69,78,67,79,68,73,78,71,32,51,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,116,105,108,100,101,10,69,78,67, 79,68,73,78,71,32,51,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,51,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,85,98,114,101,118,101,10,69,78,67,79,68,73, 78,71,32,51,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,50,49,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,98,114,101, 118,101,10,69,78,67,79,68,73,78,71,32,51,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,114,105,110,103,10,69,78,67,79,68, 73,78,71,32,51,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,114,105, 110,103,10,69,78,67,79,68,73,78,71,32,51,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,104,117,110,103,97,114,117,109,108,97, 117,116,10,69,78,67,79,68,73,78,71,32,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,57,56,48,10,51,51,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,104,117,110,103,97,114,117,109,108,97, 117,116,10,69,78,67,79,68,73,78,71,32,51,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,56,48,10,51,51,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,111,103,111,110,101,107,10,69,78,67, 79,68,73,78,71,32,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,54,48,48,10,48,69, 48,48,10,48,67,48,48,10,48,55,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 111,103,111,110,101,107,10,69,78,67,79,68,73,78,71,32, 51,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,51,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,87,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,51,56, 48,10,55,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,119,99,105,114,99,117,109,102,108, 101,120,10,69,78,67,79,68,73,78,71,32,51,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,89,99,105,114,99,117,109,102,108,101,120, 10,69,78,67,79,68,73,78,71,32,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,121,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,51,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,89,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,51,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,90,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,51,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,51,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,90, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,51,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,122,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 51,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,51,70,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,90,99,97,114,111,110,10, 69,78,67,79,68,73,78,71,32,51,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,122,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,108,111,110,103,115, 10,69,78,67,79,68,73,78,71,32,51,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,48,10,69,78,67,79,68, 73,78,71,32,51,56,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 70,56,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,51,48, 48,10,54,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,49,10,69,78,67,79,68,73,78,71,32,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,66,54,48,48,10,66,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,54,48,48,10,51,69, 48,48,10,51,51,48,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,51,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,50,10,69, 78,67,79,68,73,78,71,32,51,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,51,10,69,78,67,79,68,73,78, 71,32,51,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,67,48, 48,10,55,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,55,54,48,48,10, 54,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,52,10,69,78,67,79,68,73,78,71,32,51,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,69,48,48,48,10,69,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,53,10,69,78,67, 79,68,73,78,71,32,51,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,54,48,48,10,51,66,48,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 66,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,54,10,69,78,67,79,68,73,78,71,32, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,55, 10,69,78,67,79,68,73,78,71,32,51,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,67,48,10,48,49,56,48,10,49,70,48,48, 10,51,51,48,48,10,54,49,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,56,10,69,78,67,79,68, 73,78,71,32,51,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,67,48,10,48,49,56,48,10,48,49,48,48,10,49, 70,48,48,10,51,49,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,57,10,69,78,67,79,68,73,78,71,32,51,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,70,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,65,10,69, 78,67,79,68,73,78,71,32,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,66, 51,48,48,10,66,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,66,10,69,78,67,79,68,73,78, 71,32,51,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,49,70,56, 48,10,51,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,49,56,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,67,10,69,78,67,79,68,73,78,71,32,51,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,49,66,48,48,10,51,55,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,55,48,48,10,49,66,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,68,10,69,78,67, 79,68,73,78,71,32,51,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,54,48,48,10,48,51, 48,48,10,51,49,56,48,10,49,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,69,10,69,78,67,79,68,73,78,71,32, 51,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 49,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,70, 10,69,78,67,79,68,73,78,71,32,51,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,57,48,10,69,78,67,79,68, 73,78,71,32,52,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,51,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 48,48,48,10,49,70,48,48,10,51,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,57,49,10,69,78,67,79,68,73,78,71,32,52,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,108,111,114,105,110,10,69,78, 67,79,68,73,78,71,32,52,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,48,48,10,49,57, 56,48,10,49,57,56,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,68, 56,48,48,10,55,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,51,10,69,78,67,79,68,73,78,71, 32,52,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,67,48,10,48,49, 56,48,10,49,70,48,48,10,51,51,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 52,10,69,78,67,79,68,73,78,71,32,52,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,53,10,69,78,67,79, 68,73,78,71,32,52,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,57,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,57,54,10,69,78,67,79,68,73,78,71,32,52, 48,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,57,55,10, 69,78,67,79,68,73,78,71,32,52,48,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,57,56,10,69,78,67,79,68,73, 78,71,32,52,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,51,56,48,10,54,54,67,48,10,54, 54,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,55,56,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,57,57,10,69,78,67,79,68,73,78,71,32,52,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,51,48,48,10,54,54,48, 48,10,54,67,48,48,10,55,56,48,48,10,55,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,57,65,10,69,78, 67,79,68,73,78,71,32,52,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,66,10,69,78,67,79,68,73,78,71, 32,52,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,54,54,48,48,10,51,67,48, 48,10,51,56,48,48,10,55,56,48,48,10,67,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 67,10,69,78,67,79,68,73,78,71,32,52,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,54,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,68,10,69,78,67,79, 68,73,78,71,32,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,55,49,56,48, 10,55,49,56,48,10,55,57,56,48,10,55,57,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,55,56,48,10,54, 55,56,48,10,54,51,56,48,10,54,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,67,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,57,69,10,69,78,67,79,68,73,78,71,32,52, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,57,70,10, 69,78,67,79,68,73,78,71,32,52,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,79,104,111,114,110,10,69,78,67,79,68,73,78,71, 32,52,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,67,48,10,51,54,67,48,10,54,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,104,111,114,110,10, 69,78,67,79,68,73,78,71,32,52,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,67,48,10,51,54,67,48,10,54,51, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,50,10,69,78,67,79,68,73, 78,71,32,52,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,55,48,48,10,55,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,55,57,56,48, 10,51,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,51,10,69,78,67,79,68,73,78,71,32,52,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,55,48,48,10,55,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,55,57,56,48,10,51,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,52,10,69,78, 67,79,68,73,78,71,32,52,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,66,51, 48,48,10,66,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,51,48,48,10,51,69,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,53,10,69,78,67,79,68,73,78,71, 32,52,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,67,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,48,48,10,54, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 54,10,69,78,67,79,68,73,78,71,32,52,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 67,48,10,48,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,65,55,10,69,78,67,79, 68,73,78,71,32,52,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,51,48,48,10,49,69,48,48,10,51,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,65,56,10,69,78,67,79,68,73,78,71,32,52, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,48,49,56,48,10,51,70,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,65,57,10, 69,78,67,79,68,73,78,71,32,52,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,54,67,48,48,10,52, 52,48,48,10,54,67,48,48,10,51,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,51,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,66,10,69,78,67,79,68,73,78,71,32,52,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,55,69,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,49, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,67,10,69,78, 67,79,68,73,78,71,32,52,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,67,67, 48,48,10,67,67,48,48,10,67,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,68,10,69,78,67,79,68,73,78,71, 32,52,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,48,48,10,49,57,56, 48,10,49,56,48,48,10,49,56,48,48,10,55,69,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,57,56,48,10,48, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 69,10,69,78,67,79,68,73,78,71,32,52,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,55,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,85,104,111,114,110,10,69,78,67,79,68,73, 78,71,32,52,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,67,48,10,54,54,67,48,10,54, 55,56,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,104,111,114, 110,10,69,78,67,79,68,73,78,71,32,52,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,54,67,48,10,54,54,67,48,10, 54,55,56,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,51,69,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,49,10,69,78,67,79, 68,73,78,71,32,52,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,49,50,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,50,10,69,78,67,79,68,73,78,71,32,52, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,51,10, 69,78,67,79,68,73,78,71,32,52,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,57,56,48,10, 68,57,56,48,10,68,57,56,48,10,49,57,56,48,10,48, 70,48,48,10,48,70,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,52,10,69,78,67,79,68,73, 78,71,32,52,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,67,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,55,48,48, 10,49,66,48,48,10,48,51,48,48,10,54,51,48,48,10, 51,54,48,48,10,49,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,53,10,69,78,67,79,68,73,78,71,32,52,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,51,70,48, 48,10,49,56,48,48,10,51,48,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,54,10,69,78, 67,79,68,73,78,71,32,52,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,56,48,10,48,49,56,48,10,48,51,48,48, 10,49,70,56,48,10,48,67,48,48,10,49,56,48,48,10, 51,48,48,48,10,51,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,66,55,10,69,78,67,79,68,73,78,71, 32,52,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,66, 56,10,69,78,67,79,68,73,78,71,32,52,52,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,57,10,69,78,67,79, 68,73,78,71,32,52,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,49,69,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,65,10,69,78,67,79,68,73,78,71,32,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,49,70, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,55,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,66,48,48, 10,48,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,66,10, 69,78,67,79,68,73,78,71,32,52,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,55,70, 56,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,67,10,69,78,67,79,68,73, 78,71,32,52,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,68,10,69,78,67,79,68,73,78,71,32,52,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,49,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,69,48,48,10,51,66,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,69,10,69,78, 67,79,68,73,78,71,32,52,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,66,70,10,69,78,67,79,68,73,78,71, 32,52,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,54, 69,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 48,10,69,78,67,79,68,73,78,71,32,52,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,49,10,69,78,67,79, 68,73,78,71,32,52,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,50,10,69,78,67,79,68,73,78,71,32,52, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,51,10, 69,78,67,79,68,73,78,71,32,52,53,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,52,10,69,78,67,79,68,73, 78,71,32,52,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,54,67,48,10, 48,51,56,48,10,48,48,48,48,10,70,51,67,48,10,68, 56,67,48,10,68,56,67,48,10,68,56,67,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,70,51,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,53,10,69,78,67,79,68,73,78,71,32,52,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 48,48,48,10,68,56,48,48,10,68,69,67,48,10,68,66, 56,48,10,68,56,48,48,10,68,66,67,48,10,68,56,67, 48,10,68,56,67,48,10,68,57,56,48,10,68,57,56,48, 10,68,66,48,48,10,68,66,48,48,10,70,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,54,10,69,78, 67,79,68,73,78,71,32,52,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,69,67,48,10,49,66,56,48,10,49,56,48, 48,10,55,66,67,48,10,68,56,67,48,10,68,56,67,48, 10,68,57,56,48,10,68,57,56,48,10,68,66,48,48,10, 68,66,48,48,10,55,66,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,55,10,69,78,67,79,68,73,78,71, 32,52,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,55,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,68,56,48,10,70, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 56,10,69,78,67,79,68,73,78,71,32,52,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,48,48,48,10,67,55,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,57,56,48,10,48,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,49,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,57,10,69,78,67,79, 68,73,78,71,32,52,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,49,56,48,10,51,49,56,48,10,51,48,48,48,10, 51,55,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,70,68,56,48,10,48,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,49,70,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,65,10,69,78,67,79,68,73,78,71,32,52, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 69,68,56,48,10,69,68,56,48,10,69,68,56,48,10,70, 68,56,48,10,68,68,56,48,10,68,68,56,48,10,68,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,48,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,66,10, 69,78,67,79,68,73,78,71,32,52,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,67,48,48,10, 67,67,48,48,10,67,68,56,48,10,69,68,56,48,10,69, 67,48,48,10,69,68,56,48,10,70,68,56,48,10,68,68, 56,48,10,68,68,56,48,10,68,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,48,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,67,10,69,78,67,79,68,73, 78,71,32,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,48,48,48,10,68,57, 56,48,10,69,68,56,48,10,67,68,56,48,10,67,68,56, 48,10,67,68,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,48,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,68,10,69,78,67,79,68,73,78,71,32,52,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,69,10,69,78, 67,79,68,73,78,71,32,52,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,70,48,48,10,51,49,56,48,10,48,49,56,48, 10,51,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,69,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,70,10,69,78,67,79,68,73,78,71, 32,52,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 48,10,69,78,67,79,68,73,78,71,32,52,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,49,10,69,78,67,79, 68,73,78,71,32,52,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,50,10,69,78,67,79,68,73,78,71,32,52, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,51,10, 69,78,67,79,68,73,78,71,32,52,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,52,10,69,78,67,79,68,73, 78,71,32,52,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,53,10,69,78,67,79,68,73,78,71,32,52,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,54,10,69,78, 67,79,68,73,78,71,32,52,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,55,10,69,78,67,79,68,73,78,71, 32,52,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 56,10,69,78,67,79,68,73,78,71,32,52,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,57,10,69,78,67,79, 68,73,78,71,32,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,66,48,48,10,48,69,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,65,10,69,78,67,79,68,73,78,71,32,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,56,48,10,49,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,66,10, 69,78,67,79,68,73,78,71,32,52,55,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,67,10,69,78,67,79,68,73, 78,71,32,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,68,10,69,78,67,79,68,73,78,71,32,52,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,69,10,69,78, 67,79,68,73,78,71,32,52,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,55,70,56,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,70,10,69,78,67,79,68,73,78,71, 32,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,69, 48,10,69,78,67,79,68,73,78,71,32,52,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,70, 56,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,69,49,10,69,78,67,79, 68,73,78,71,32,52,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,69,50,10,69,78,67,79,68,73,78,71,32,52, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,70,56,48,10,49,69,48,48,10,51,54,48,48,10, 51,54,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 70,56,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,51,10, 69,78,67,79,68,73,78,71,32,52,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,51,66,48,48,10,52,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,67,56,48,10,51,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,52,10,69,78,67,79,68,73, 78,71,32,52,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,55,67,48,10,54,49,56,48,10,51,51,56,48, 10,49,69,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,53,10,69,78,67,79,68,73,78,71,32,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,56,48,10,54,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,69,48,48,10,54,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,54,55,67,48,10,54,49,56,48,10,51, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,71,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,52,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,55,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,103, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,69,56,48,10,54, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,69,48,48,10,54,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,70,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,56,10, 69,78,67,79,68,73,78,71,32,52,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,57,10,69,78,67,79,68,73, 78,71,32,52,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,56,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,65,10,69,78,67,79,68,73,78,71,32,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,66,10,69,78, 67,79,68,73,78,71,32,52,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,69,67,10,69,78,67,79,68,73,78,71, 32,52,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,69, 68,10,69,78,67,79,68,73,78,71,32,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,69,69,10,69,78,67,79, 68,73,78,71,32,52,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,49,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,69,70,10,69,78,67,79,68,73,78,71,32,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,70,48,10, 69,78,67,79,68,73,78,71,32,52,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,67,48,10,48,55,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,70,49,10,69,78,67,79,68,73, 78,71,32,52,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,51,67,48,10,68,56,67,48,10,68, 56,67,48,10,68,56,67,48,10,68,57,56,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,70,51,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,70,50,10,69,78,67,79,68,73,78,71,32,52,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 48,48,48,10,68,56,48,48,10,68,56,48,48,10,68,56, 48,48,10,68,56,48,48,10,68,66,67,48,10,68,56,67, 48,10,68,56,67,48,10,68,57,56,48,10,68,57,56,48, 10,68,66,48,48,10,68,66,48,48,10,70,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,70,51,10,69,78, 67,79,68,73,78,71,32,52,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,66,67,48,10,68,56,67,48,10,68,56,67,48, 10,68,57,56,48,10,68,57,56,48,10,68,66,48,48,10, 68,66,48,48,10,55,66,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,70,52,10,69,78,67,79,68,73,78,71, 32,53,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,70, 53,10,69,78,67,79,68,73,78,71,32,53,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,51,69,56,48,10,54,51,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 69,48,48,10,54,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,70,54,10,69,78,67,79, 68,73,78,71,32,53,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,68,56,48,10,55,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,70,55,10,69,78,67,79,68,73,78,71,32,53, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,69,48,48,10,55,66,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,52,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,70,56,10, 69,78,67,79,68,73,78,71,32,53,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 57,56,48,10,55,57,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,55,56,48,10,54,55,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,70,57,10,69,78,67,79,68,73, 78,71,32,53,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,114,105,110, 103,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 53,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,54,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,105,110,103,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,53,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,50,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,48,49,56,48,10,51,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,69,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,65,69,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,53,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,70, 56,48,10,49,69,48,48,10,51,54,48,48,10,51,54,48, 48,10,54,54,48,48,10,55,70,56,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,101,97,99,117,116,101,10,69,78,67,79,68,73,78,71, 32,53,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,66,48,48, 10,52,68,56,48,10,48,68,56,48,10,48,70,48,48,10, 51,67,48,48,10,54,67,48,48,10,54,67,56,48,10,51, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,79,115,108,97,115,104, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,49,48,48,10,49,70,48,48,10,51,51,48,48,10, 54,51,56,48,10,54,53,56,48,10,54,53,56,48,10,54, 53,56,48,10,54,57,56,48,10,54,57,56,48,10,54,57, 56,48,10,55,49,56,48,10,51,51,48,48,10,51,69,48, 48,10,52,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,115,108,97,115,104,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,53,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,56,48,10,49,70,48,48,10,51,51,48, 48,10,54,53,56,48,10,54,53,56,48,10,54,57,56,48, 10,54,57,56,48,10,51,51,48,48,10,51,69,48,48,10, 52,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,48,10,69,78, 67,79,68,73,78,71,32,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,49,10,69,78,67,79,68,73,78,71, 32,53,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 50,10,69,78,67,79,68,73,78,71,32,53,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,51,10,69,78,67,79, 68,73,78,71,32,53,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,52,10,69,78,67,79,68,73,78,71,32,53, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,53,10, 69,78,67,79,68,73,78,71,32,53,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,51,49,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,54,10,69,78,67,79,68,73, 78,71,32,53,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,69,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,55,10,69,78,67,79,68,73,78,71,32,53,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,56,10,69,78, 67,79,68,73,78,71,32,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,57,10,69,78,67,79,68,73,78,71, 32,53,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 65,10,69,78,67,79,68,73,78,71,32,53,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,66,10,69,78,67,79, 68,73,78,71,32,53,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,67,10,69,78,67,79,68,73,78,71,32,53, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,68,10, 69,78,67,79,68,73,78,71,32,53,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,69,10,69,78,67,79,68,73, 78,71,32,53,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,70,10,69,78,67,79,68,73,78,71,32,53,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,49,48,10,69,78, 67,79,68,73,78,71,32,53,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,49,49,10,69,78,67,79,68,73,78,71, 32,53,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,70,48,48, 10,51,57,56,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,49, 50,10,69,78,67,79,68,73,78,71,32,53,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,50,49,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,49,51,10,69,78,67,79, 68,73,78,71,32,53,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,50,49,48,48,10,48,48,48,48,10, 54,70,48,48,10,51,57,56,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,49,52,10,69,78,67,79,68,73,78,71,32,53, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,54,54,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,49,53,10, 69,78,67,79,68,73,78,71,32,53,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,51,51,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,54,10,69,78,67,79,68,73, 78,71,32,53,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,50,49,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,55,10,69,78,67,79,68,73,78,71,32,53,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,50,49, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,99,111,109,109,97,97,99,99,101, 110,116,10,69,78,67,79,68,73,78,71,32,53,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,48,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,69,48,48,10,48,69,48,48,10,49,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,53,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,48,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,84,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,69,48,48,10,48,69,48,48,10,49,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,99,111,109,109,97,97,99,99,101,110,116,10, 69,78,67,79,68,73,78,71,32,53,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,55,69,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,57,56,48,10,48,70,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,69,48,48,10,49,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,67,10,69,78,67,79,68,73, 78,71,32,53,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,69, 48,48,10,49,66,48,48,10,51,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,49,67,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,68,10,69,78,67,79,68,73,78,71,32,53,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,69,48,48,10,49,66,48,48,10,51,49,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,51, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,49,69,10,69,78, 67,79,68,73,78,71,32,53,52,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,49,70,10,69,78,67,79,68,73,78,71, 32,53,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 48,10,69,78,67,79,68,73,78,71,32,53,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,49,10,69,78,67,79, 68,73,78,71,32,53,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,54,48,48,10,51,69,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,55,56,48,10,51,69, 56,48,10,49,69,56,48,10,48,51,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,50,10,69,78,67,79,68,73,78,71,32,53, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,51,48,48,10,51,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,51,10, 69,78,67,79,68,73,78,71,32,53,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,52,10,69,78,67,79,68,73, 78,71,32,53,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,67,48,10,48,49,56,48,10, 48,49,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,53,10,69,78,67,79,68,73,78,71,32,53,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,51,70,56,48,10, 48,48,67,48,10,48,49,56,48,10,48,49,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,54,10,69,78, 67,79,68,73,78,71,32,53,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,55,10,69,78,67,79,68,73,78,71, 32,53,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,48,49,56,48,10,51,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 56,10,69,78,67,79,68,73,78,71,32,53,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,54,48,48,10,51,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,57,10,69,78,67,79, 68,73,78,71,32,53,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,51,49, 56,48,10,49,70,48,48,10,48,67,48,48,10,48,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,65,10,69,78,67,79,68,73,78,71,32,53, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,55,70,56,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,66,10, 69,78,67,79,68,73,78,71,32,53,53,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,67,10,69,78,67,79,68,73, 78,71,32,53,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,55,70,56,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,54,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,68,10,69,78,67,79,68,73,78,71,32,53,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,69,10,69,78, 67,79,68,73,78,71,32,53,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,70,10,69,78,67,79,68,73,78,71, 32,53,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,51, 48,10,69,78,67,79,68,73,78,71,32,53,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,70, 56,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,51,49,10,69,78,67,79, 68,73,78,71,32,53,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,51,50,10,69,78,67,79,68,73,78,71,32,53, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,51,51,10, 69,78,67,79,68,73,78,71,32,53,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,51,52,10,69,78,67,79,68,73, 78,71,32,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,57,48,48,10,49,65,56,48, 10,48,67,56,48,10,48,55,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,51,53,10,69,78,67,79,68,73,78,71,32,53,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,67,48,48,10,55,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,55,56,48,10,54,54,56,48,10, 48,54,56,48,10,48,51,48,48,10,48,52,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,51,54,10,69,78, 67,79,68,73,78,71,32,53,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,57,48,48,10, 49,69,56,48,10,48,67,56,48,10,48,55,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,48,10,69,78,67,79,68,73,78,71, 32,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,53,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,48,48,10,54,48,48,48,10,54,51,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 49,10,69,78,67,79,68,73,78,71,32,53,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,51,55,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,55,48,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,50,10,69,78,67,79, 68,73,78,71,32,53,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,51,66,48,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,66, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,51,10,69,78,67,79,68,73,78,71,32,53, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,48,48,10,54,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,52,10, 69,78,67,79,68,73,78,71,32,53,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,51,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,53,10,69,78,67,79,68,73, 78,71,32,53,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,53,56,48,10,51,53,56,48, 10,49,70,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,54,10,69,78,67,79,68,73,78,71,32,53,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,49,68,56,48,10,51,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,68,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,67,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,55,10,69,78, 67,79,68,73,78,71,32,53,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,49,67,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,49,66,48,48,10,51,55,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,55,48,48,10,49,66,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,56,10,69,78,67,79,68,73,78,71, 32,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,51,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 57,10,69,78,67,79,68,73,78,71,32,54,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 48,49,56,48,10,48,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,65,10,69,78,67,79, 68,73,78,71,32,54,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,67,48,48,10,54,54,67,48,10,48,51,52,48,10,48, 70,48,48,10,55,51,48,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,66,10,69,78,67,79,68,73,78,71,32,54, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,67,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,67,10, 69,78,67,79,68,73,78,71,32,54,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,48,70,48,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,68,10,69,78,67,79,68,73, 78,71,32,54,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,67, 48,48,10,54,55,52,48,10,48,54,56,48,10,49,67,48, 48,10,48,54,48,48,10,48,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,69,10,69,78,67,79,68,73,78,71,32,54,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,55,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,70,10,69,78, 67,79,68,73,78,71,32,54,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,70,56,48,10,48,54,48,48,10,48,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,51,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,48,10,69,78,67,79,68,73,78,71, 32,54,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,67, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 49,10,69,78,67,79,68,73,78,71,32,54,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,68,56,48,10,51,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,50,10,69,78,67,79, 68,73,78,71,32,54,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 48,48,48,10,54,55,56,48,10,54,49,56,48,10,51,51, 56,48,10,49,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,51,10,69,78,67,79,68,73,78,71,32,54, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,49,69,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,52,10, 69,78,67,79,68,73,78,71,32,54,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,49,67,48,48,10,49,67,48,48,10,51,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,53,10,69,78,67,79,68,73, 78,71,32,54,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,54,10,69,78,67,79,68,73,78,71,32,54,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,55,10,69,78, 67,79,68,73,78,71,32,54,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,56,10,69,78,67,79,68,73,78,71, 32,54,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 57,10,69,78,67,79,68,73,78,71,32,54,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,65,10,69,78,67,79, 68,73,78,71,32,54,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,66,10,69,78,67,79,68,73,78,71,32,54, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,56,48,10,55, 70,56,48,10,52,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,67,10, 69,78,67,79,68,73,78,71,32,54,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,67,48,48,10,54,67,48,48,10,51,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,68,10,69,78,67,79,68,73, 78,71,32,54,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,69,10,69,78,67,79,68,73,78,71,32,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,70,67,48,10,51,48,67, 48,10,51,48,67,48,10,51,49,56,48,10,51,51,48,48, 10,51,49,56,48,10,51,48,67,48,10,55,56,67,48,10, 48,48,67,48,10,51,48,67,48,10,49,57,56,48,10,48, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,70,10,69,78, 67,79,68,73,78,71,32,54,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,54,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,48,10,69,78,67,79,68,73,78,71, 32,54,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 55,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 49,10,69,78,67,79,68,73,78,71,32,54,50,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,53,66,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,50,10,69,78,67,79, 68,73,78,71,32,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,67,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,51,10,69,78,67,79,68,73,78,71,32,54, 50,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,67,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,52,10, 69,78,67,79,68,73,78,71,32,54,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,55,49,56,48,10,55,57, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,53,10,69,78,67,79,68,73, 78,71,32,54,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,54,10,69,78,67,79,68,73,78,71,32,54,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,70,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,51,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,55,10,69,78, 67,79,68,73,78,71,32,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,56,10,69,78,67,79,68,73,78,71, 32,54,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 57,10,69,78,67,79,68,73,78,71,32,54,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,54,55,48,48,10,51,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,65,10,69,78,67,79, 68,73,78,71,32,54,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,55, 48,48,10,51,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,66,10,69,78,67,79,68,73,78,71,32,54, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,54,69,48,48,10,51,69,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,56,48, 10,48,51,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,67,10, 69,78,67,79,68,73,78,71,32,54,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,70,48,48,10,51,57,56,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,68,10,69,78,67,79,68,73, 78,71,32,54,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,70, 48,48,10,51,57,56,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,50,48,48,10,49,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,69,10,69,78,67,79,68,73,78,71,32,54,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,48,48,10,49,57,56, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,70,10,69,78, 67,79,68,73,78,71,32,54,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,48,10,69,78,67,79,68,73,78,71, 32,54,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 49,10,69,78,67,79,68,73,78,71,32,54,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,50,10,69,78,67,79, 68,73,78,71,32,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,48,48,48,10,51, 70,48,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,48,48,48,10,49,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,51,10,69,78,67,79,68,73,78,71,32,54, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,51,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,52,10, 69,78,67,79,68,73,78,71,32,54,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,49,70,56,48,10,48,54,48,48,10,48,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,51,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,53,10,69,78,67,79,68,73, 78,71,32,54,52,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,55,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,54,10,69,78,67,79,68,73,78,71,32,54,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,51, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,55,10,69,78, 67,79,68,73,78,71,32,54,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,49,70,56,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,56,10,69,78,67,79,68,73,78,71, 32,54,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,55,69,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 57,10,69,78,67,79,68,73,78,71,32,54,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,70,70,67,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,65,10,69,78,67,79, 68,73,78,71,32,54,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,51,56,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,66,10,69,78,67,79,68,73,78,71,32,54, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,56,48,10,55,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,67,10, 69,78,67,79,68,73,78,71,32,54,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,68,10,69,78,67,79,68,73, 78,71,32,54,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,55,70,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,69,10,69,78,67,79,68,73,78,71,32,54,53,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,55,48,48,10,48,68,56,48,10,48,68, 56,48,10,49,56,48,48,10,49,56,48,48,10,49,67,48, 48,10,51,69,48,48,10,51,54,48,48,10,51,51,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,70,10,69,78, 67,79,68,73,78,71,32,54,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,48,10,69,78,67,79,68,73,78,71, 32,54,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,51, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 49,10,69,78,67,79,68,73,78,71,32,54,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 66,48,48,10,51,52,56,48,10,51,70,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,50,10,69,78,67,79, 68,73,78,71,32,54,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,51,10,69,78,67,79,68,73,78,71,32,54, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,70,48,48,10,48,49,56,48,10,51,57,56, 48,10,54,68,56,48,10,54,55,48,48,10,51,51,48,48, 10,49,68,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,52,10, 69,78,67,79,68,73,78,71,32,54,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,53,10,69,78,67,79,68,73, 78,71,32,54,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,51,48, 48,48,10,49,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,54,10,69,78,67,79,68,73,78,71,32,54,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,69,48, 48,10,48,51,48,48,10,48,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,55,10,69,78, 67,79,68,73,78,71,32,54,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,56,10,69,78,67,79,68,73,78,71, 32,54,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 57,10,69,78,67,79,68,73,78,71,32,54,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,65,10,69,78,67,79, 68,73,78,71,32,54,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 57,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,66,10,69,78,67,79,68,73,78,71,32,54, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,67,48,10, 48,49,56,48,10,48,49,56,48,10,49,70,56,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,55, 56,48,10,54,49,56,48,10,51,51,56,48,10,49,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,67,10, 69,78,67,79,68,73,78,71,32,54,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,68,10,69,78,67,79,68,73, 78,71,32,54,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,66,48,48,10,54,70,48,48,10,54,55,48,48,10, 54,51,56,48,10,51,69,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,69,10,69,78,67,79,68,73,78,71,32,54,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,48,70,56,48,10,48,55,56,48, 10,48,68,56,48,10,49,57,56,48,10,51,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,70,10,69,78, 67,79,68,73,78,71,32,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,48,10,69,78,67,79,68,73,78,71, 32,54,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,67,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 49,10,69,78,67,79,68,73,78,71,32,54,55,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,50,10,69,78,67,79, 68,73,78,71,32,54,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,48,48,48,10, 51,48,48,48,10,49,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,51,10,69,78,67,79,68,73,78,71,32,54, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,54,70,67,48,10,68, 67,67,48,10,67,67,67,48,10,67,68,56,48,10,67,68, 56,48,10,67,70,48,48,10,68,70,48,48,10,54,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,52,10, 69,78,67,79,68,73,78,71,32,54,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,54,70,67,48,10,68,67,67,48,10,67,67, 67,48,10,67,68,56,48,10,67,70,48,48,10,67,68,56, 48,10,68,67,67,48,10,54,67,67,48,10,48,48,67,48, 10,48,48,67,48,10,49,57,56,48,10,48,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,53,10,69,78,67,79,68,73, 78,71,32,54,55,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,70, 67,48,10,68,56,67,48,10,68,57,56,48,10,68,66,48, 48,10,68,69,56,48,10,68,68,52,48,10,68,57,52,48, 10,55,70,56,48,10,48,50,48,48,10,48,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,54,10,69,78,67,79,68,73,78,71,32,54,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,70,70,48,48,10,54,68,56, 48,10,54,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,65,55,10,69,78, 67,79,68,73,78,71,32,54,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,67,48,10,48,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,70,70,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,66,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,56,10,69,78,67,79,68,73,78,71, 32,54,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,70,70,56,48, 10,54,54,67,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,56,48,10,54,68,52,48,10,54,53,52,48,10,51, 70,56,48,10,48,50,48,48,10,48,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 57,10,69,78,67,79,68,73,78,71,32,54,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,48,48,48, 10,54,48,48,48,10,70,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,65,10,69,78,67,79, 68,73,78,71,32,54,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,55,48,48,10,51,68,56,48,10,51,67,48,48,10,51, 55,48,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,66,10,69,78,67,79,68,73,78,71,32,54, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,70,56,48,10,51, 49,56,48,10,51,51,48,48,10,51,51,48,48,10,51,54, 48,48,10,51,54,48,48,10,51,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,67,10, 69,78,67,79,68,73,78,71,32,54,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,68,10,69,78,67,79,68,73, 78,71,32,54,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,69,10,69,78,67,79,68,73,78,71,32,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,49,56,48,10,53,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,66,56,48,10,48,53,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,65,70,10,69,78, 67,79,68,73,78,71,32,54,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,50,50,48,48,10,53,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,54,48,48,10,48,65,48,48,10,48,50,48,48,10,48, 50,48,48,10,48,50,56,48,10,48,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,48,10,69,78,67,79,68,73,78,71, 32,54,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,67,48,48,10,55,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 49,10,69,78,67,79,68,73,78,71,32,54,56,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,67,48,48,10,55,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,50,10,69,78,67,79, 68,73,78,71,32,54,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,51,10,69,78,67,79,68,73,78,71,32,54, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,55,54,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,66,52,10, 69,78,67,79,68,73,78,71,32,54,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,54,69,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,66,53,10,69,78,67,79,68,73, 78,71,32,54,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,54,69, 48,48,10,51,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,66,54,10,69,78,67,79,68,73,78,71,32,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,51,48,48,10,54,51,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,66,55,10,69,78, 67,79,68,73,78,71,32,54,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,56,10,69,78,67,79,68,73,78,71, 32,54,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,70,48,48,10,48,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 57,10,69,78,67,79,68,73,78,71,32,54,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,65,10,69,78,67,79, 68,73,78,71,32,54,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,67,48,10,49,57,56,48, 10,51,51,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,66,10,69,78,67,79,68,73,78,71,32,54, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,67,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,57,50, 57,10,69,78,67,79,68,73,78,71,32,55,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,54,52,57,51,55,10,69,78, 67,79,68,73,78,71,32,55,48,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,66,69,10,69,78,67,79,68,73,78,71, 32,55,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,66, 70,10,69,78,67,79,68,73,78,71,32,55,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,67,48,10,69,78,67,79, 68,73,78,71,32,55,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,67,49,10,69,78,67,79,68,73,78,71,32,55, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,50,10, 69,78,67,79,68,73,78,71,32,55,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,69,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,67,51,10,69,78,67,79,68,73, 78,71,32,55,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,67,48,48,10,48, 55,48,48,10,49,67,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,67,52,10,69,78,67,79,68,73,78,71,32,55,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,67,48,48,10,49,52, 48,48,10,51,54,48,48,10,50,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,53,10,69,78, 67,79,68,73,78,71,32,55,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,50,48,48,10,51,54, 48,48,10,49,52,48,48,10,49,67,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,55,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,55,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,67,56,10,69,78,67, 79,68,73,78,71,32,55,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 97,99,114,111,110,10,69,78,67,79,68,73,78,71,32,55, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,65,10, 69,78,67,79,68,73,78,71,32,55,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,67,66,10,69,78,67,79,68,73, 78,71,32,55,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,67,67,10,69,78,67,79,68,73,78,71,32,55,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,68,10,69,78, 67,79,68,73,78,71,32,55,49,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,67,69,10,69,78,67,79,68,73,78,71, 32,55,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,67, 70,10,69,78,67,79,68,73,78,71,32,55,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,68,48,10,69,78,67,79, 68,73,78,71,32,55,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,67, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,68,49,10,69,78,67,79,68,73,78,71,32,55, 50,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,49, 67,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,68,50,10, 69,78,67,79,68,73,78,71,32,55,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,68,51,10,69,78,67,79,68,73, 78,71,32,55,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,68,52,10,69,78,67,79,68,73,78,71,32,55,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,68,53,10,69,78, 67,79,68,73,78,71,32,55,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,68,54,10,69,78,67,79,68,73,78,71, 32,55,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 51,69,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,68, 55,10,69,78,67,79,68,73,78,71,32,55,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,50,48,48,10,51,69,48,48,10,50, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,98,114,101,118,101,10,69,78,67,79,68,73, 78,71,32,55,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,100,111,116,97, 99,99,101,110,116,10,69,78,67,79,68,73,78,71,32,55, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,105,110,103,10,69,78,67, 79,68,73,78,71,32,55,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 103,111,110,101,107,10,69,78,67,79,68,73,78,71,32,55, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,105,108,100,101,10,69,78, 67,79,68,73,78,71,32,55,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,57,48,48,10,51,70, 48,48,10,50,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 104,117,110,103,97,114,117,109,108,97,117,116,10,69,78,67, 79,68,73,78,71,32,55,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 56,48,10,51,51,48,48,10,54,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,68,69,10,69,78,67,79,68,73,78,71,32, 55,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 51,56,48,48,10,54,67,56,48,10,52,70,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,68,70, 10,69,78,67,79,68,73,78,71,32,55,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,54,51,48,48,10,51,54,48,48,10,49,67,48,48, 10,51,54,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,69,48,10,69,78,67,79,68, 73,78,71,32,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 51,54,48,48,10,49,67,48,48,10,49,67,48,48,10,51, 54,48,48,10,51,54,48,48,10,49,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,49,10,69,78,67,79,68,73,78,71,32,55,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,50,10,69, 78,67,79,68,73,78,71,32,55,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 67,48,48,10,54,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,55,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,51,10,69,78,67,79,68,73,78, 71,32,55,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,51,56,48,48,10,54,67,48, 48,10,54,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,52,10,69,78,67,79,68,73,78,71,32,55,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,54,54, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,53,10,69,78,67, 79,68,73,78,71,32,55,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,54,10,69,78,67,79,68,73,78,71,32, 55,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,55, 10,69,78,67,79,68,73,78,71,32,55,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,51,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,69,56,10,69,78,67,79,68, 73,78,71,32,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,57,10,69,78,67,79,68,73,78,71,32,55,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,65,10,69, 78,67,79,68,73,78,71,32,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,66,10,69,78,67,79,68,73,78, 71,32,55,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,69,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,67,10,69,78,67,79,68,73,78,71,32,55,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,68,10,69,78,67, 79,68,73,78,71,32,55,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,69,10,69,78,67,79,68,73,78,71,32, 55,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,51,49,56,48, 10,54,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,70, 10,69,78,67,79,68,73,78,71,32,55,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,50,48,48,10,51,54,48,48,10,49,52,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,70,48,10,69,78,67,79,68, 73,78,71,32,55,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,49,67,48,48,10,49,52,48,48, 10,51,54,48,48,10,50,50,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,70,49,10,69,78,67,79,68,73,78,71,32,55,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,69,48,48,10,51,56,48,48,10,48,69,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,70,50,10,69, 78,67,79,68,73,78,71,32,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,49,67,48,48,10, 48,55,48,48,10,49,67,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,70,51,10,69,78,67,79,68,73,78, 71,32,55,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,49, 50,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 70,52,10,69,78,67,79,68,73,78,71,32,55,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,70,53,10,69,78,67, 79,68,73,78,71,32,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,51,51,48,48,10,49,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,70,54,10,69,78,67,79,68,73,78,71,32, 55,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,56,48,10, 51,51,48,48,10,54,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,70,55, 10,69,78,67,79,68,73,78,71,32,55,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,54,68,56,48,10,54,55,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,70,56,10,69,78,67,79,68, 73,78,71,32,55,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,70,57,10,69,78,67,79,68,73,78,71,32,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,70,65,10,69, 78,67,79,68,73,78,71,32,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,48,52,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,70,66,10,69,78,67,79,68,73,78, 71,32,55,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 70,67,10,69,78,67,79,68,73,78,71,32,55,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,48,48,10,48,52,48,48,10, 48,52,48,48,10,48,52,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,70,68,10,69,78,67, 79,68,73,78,71,32,55,54,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,52,48, 56,48,10,55,70,56,48,10,55,70,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,70,69,10,69,78,67,79,68,73,78,71,32, 55,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,48,48,10,52,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,70,70, 10,69,78,67,79,68,73,78,71,32,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,48,48,48,10,51,48,48,48,10,55,70,56, 48,10,51,48,48,48,10,49,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,97,118,101,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,55,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 99,117,116,101,99,111,109,98,10,69,78,67,79,68,73,78, 71,32,55,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,50,10,69,78,67,79,68,73,78,71,32,55,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,105,108,100,101,99,111,109,98,10,69, 78,67,79,68,73,78,71,32,55,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,52,10,69,78,67,79,68,73,78, 71,32,55,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,53,10,69,78,67,79,68,73,78,71,32,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,54,10,69,78,67, 79,68,73,78,71,32,55,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,54,51,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,48,55,10,69,78,67,79,68,73,78,71,32, 55,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,48,56, 10,69,78,67,79,68,73,78,71,32,55,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,104,111,111,107,97,98,111,118,101,99,111,109,98, 10,69,78,67,79,68,73,78,71,32,55,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,49,69,48, 48,10,51,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,48,65,10,69,78,67,79,68, 73,78,71,32,55,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,67,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,66,10,69,78,67,79,68,73,78,71,32,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,49,57,56,48,10,51,51,48,48,10,54,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,48,67,10,69, 78,67,79,68,73,78,71,32,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,68,10,69,78,67,79,68,73,78, 71,32,55,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,69,10,69,78,67,79,68,73,78,71,32,55,56,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,70,10,69,78,67, 79,68,73,78,71,32,55,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,54,54,48,48,10,51,51, 48,48,10,49,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,48,10,69,78,67,79,68,73,78,71,32, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,49, 10,69,78,67,79,68,73,78,71,32,55,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,69,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,50,10,69,78,67,79,68, 73,78,71,32,55,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,49,56,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,51,10,69,78,67,79,68,73,78,71,32,55,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,49,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,52,10,69, 78,67,79,68,73,78,71,32,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 49,67,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,53,10,69,78,67,79,68,73,78, 71,32,55,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,54,10,69,78,67,79,68,73,78,71,32,55,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,55,10,69,78,67, 79,68,73,78,71,32,55,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,56,10,69,78,67,79,68,73,78,71,32, 55,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,51,69,48, 48,10,48,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,57, 10,69,78,67,79,68,73,78,71,32,55,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,69,48,48,10,51,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,65,10,69,78,67,79,68, 73,78,71,32,55,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,55,67,48,10,48,48,67,48, 10,48,48,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,66,10,69,78,67,79,68,73,78,71,32,55,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,67,48,10,48,48,67,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,67,10,69, 78,67,79,68,73,78,71,32,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,68,10,69,78,67,79,68,73,78, 71,32,55,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,69,10,69,78,67,79,68,73,78,71,32,55,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,70,10,69,78,67, 79,68,73,78,71,32,55,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,51,70,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,50,48,10,69,78,67,79,68,73,78,71,32, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,50,49, 10,69,78,67,79,68,73,78,71,32,56,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,55,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,50,50,10,69,78,67,79,68, 73,78,71,32,56,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,111,116, 98,101,108,111,119,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,56,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,52,10,69,78,67,79,68,73,78,71,32,56,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,53,10,69,78, 67,79,68,73,78,71,32,56,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,49,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,54,10,69,78,67,79,68,73,78,71, 32,56,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,69, 48,48,10,49,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 55,10,69,78,67,79,68,73,78,71,32,56,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,51,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,50,56,10,69,78,67,79, 68,73,78,71,32,56,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,56,48, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,50,57,10,69,78,67,79,68,73,78,71,32,56, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,50,65,10, 69,78,67,79,68,73,78,71,32,56,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,50,66,10,69,78,67,79,68,73, 78,71,32,56,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,67,10,69,78,67,79,68,73,78,71,32,56,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,68,10,69,78, 67,79,68,73,78,71,32,56,49,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,69,10,69,78,67,79,68,73,78,71, 32,56,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,51,69, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 70,10,69,78,67,79,68,73,78,71,32,56,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,48,10,69,78,67,79, 68,73,78,71,32,56,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,49,10,69,78,67,79,68,73,78,71,32,56, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,50,10, 69,78,67,79,68,73,78,71,32,56,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,51,10,69,78,67,79,68,73, 78,71,32,56,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 48,48,48,48,10,70,70,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,52,10,69,78,67,79,68,73,78,71,32,56,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,53,10,69,78, 67,79,68,73,78,71,32,56,50,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,54,10,69,78,67,79,68,73,78,71, 32,56,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 55,10,69,78,67,79,68,73,78,71,32,56,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,56,10,69,78,67,79, 68,73,78,71,32,56,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,51,48,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,57,10,69,78,67,79,68,73,78,71,32,56, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,49,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,65,10, 69,78,67,79,68,73,78,71,32,56,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,66,10,69,78,67,79,68,73, 78,71,32,56,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 51,51,48,48,10,51,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,67,10,69,78,67,79,68,73,78,71,32,56,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,68,68,56,48,10,48, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,68,10,69,78, 67,79,68,73,78,71,32,56,50,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,54,49,56,48,10,49, 69,48,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,69,10,69,78,67,79,68,73,78,71, 32,56,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,67,48,48,10,49,56,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 70,10,69,78,67,79,68,73,78,71,32,56,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,48,10,69,78,67,79, 68,73,78,71,32,56,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,56,48,48,10,48,67,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,49,10,69,78,67,79,68,73,78,71,32,56, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,50,10, 69,78,67,79,68,73,78,71,32,56,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,51,10,69,78,67,79,68,73, 78,71,32,56,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,49,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,52,10,69,78,67,79,68,73,78,71,32,56,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,54,68,56,48,10,55,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,53,10,69,78, 67,79,68,73,78,71,32,56,51,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,54,10,69,78,67,79,68,73,78,71, 32,56,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,51,70,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 55,10,69,78,67,79,68,73,78,71,32,56,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,56,10,69,78,67,79, 68,73,78,71,32,56,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,57,10,69,78,67,79,68,73,78,71,32,56, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,48,54,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,65,10, 69,78,67,79,68,73,78,71,32,56,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,54,48,48, 10,48,54,48,48,10,51,67,56,48,10,55,70,56,48,10, 52,70,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,66,10,69,78,67,79,68,73, 78,71,32,56,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,54,48,48,10,48,48,48,48,10, 49,66,48,48,10,51,54,48,48,10,48,48,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,67,10,69,78,67,79,68,73,78,71,32,56,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,66,48,48,10,51,54,48,48,10,48,48,48,48,10,49, 66,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,68,10,69,78, 67,79,68,73,78,71,32,56,52,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 49,48,48,10,55,70,56,48,10,50,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,69,10,69,78,67,79,68,73,78,71, 32,56,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,67,48,48,10,50,65, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 70,10,69,78,67,79,68,73,78,71,32,56,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,53,48,10,69,78,67,79, 68,73,78,71,32,56,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,67,48,48,10,48,55,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,53,49,10,69,78,67,79,68,73,78,71,32,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,53,50,10, 69,78,67,79,68,73,78,71,32,56,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,70,48,48, 10,54,49,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,53,51,10,69,78,67,79,68,73, 78,71,32,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,53,52,10,69,78,67,79,68,73,78,71,32,56,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,51,56,48,48,10,48, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,53,53,10,69,78, 67,79,68,73,78,71,32,56,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,48,69,48,48,10,51,56,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,53,54,10,69,78,67,79,68,73,78,71, 32,56,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,50,48,48,10,54,50,48,48,10,49,68, 48,48,10,54,53,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,53, 55,10,69,78,67,79,68,73,78,71,32,56,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,53,68,10,69,78,67,79, 68,73,78,71,32,56,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,50,48,52,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,53,69,10,69,78,67,79,68,73,78,71,32,56, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,53,70,10, 69,78,67,79,68,73,78,71,32,56,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,48,10,69,78,67,79,68,73, 78,71,32,56,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,67,52,48,10,50,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,49,10,69,78,67,79,68,73,78,71,32,56,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,70,56,48,10,50,48,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,50,10,69,78, 67,79,68,73,78,71,32,56,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,70,67,48,10,48,48,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,51,10,69,78,67,79,68,73,78,71, 32,56,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,50, 48,48,10,48,69,48,48,10,49,50,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 52,10,69,78,67,79,68,73,78,71,32,56,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,49,69,48, 48,10,49,48,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,53,10,69,78,67,79, 68,73,78,71,32,56,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,54,10,69,78,67,79,68,73,78,71,32,56, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,55,10, 69,78,67,79,68,73,78,71,32,56,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,56,10,69,78,67,79,68,73, 78,71,32,56,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 49,48,48,48,10,49,48,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,57,10,69,78,67,79,68,73,78,71,32,56,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,50,48,48,10,48,50,48,48,10,48,69,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,65,10,69,78, 67,79,68,73,78,71,32,56,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,48,48,48,10,49, 48,48,48,10,49,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,66,10,69,78,67,79,68,73,78,71, 32,56,55,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,65,48,48,10,49,53, 48,48,10,49,53,48,48,10,49,53,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 67,10,69,78,67,79,68,73,78,71,32,56,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,52,48,48,10,49,65,48,48,10,49,48,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,68,10,69,78,67,79, 68,73,78,71,32,56,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,56,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,70,10, 69,78,67,79,68,73,78,71,32,56,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,55,52,10,69,78,67,79,68,73, 78,71,32,56,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,55,53,10,69,78,67,79,68,73,78,71,32,56,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,55,65,10,69,78, 67,79,68,73,78,71,32,56,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,55,69,10,69,78,67,79,68,73,78,71, 32,56,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,48, 69,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,111,110,111,115,10, 69,78,67,79,68,73,78,71,32,57,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,105,101,114,101,115,105,115,116,111,110,111,115,10, 69,78,67,79,68,73,78,71,32,57,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 54,68,56,48,10,55,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,108,112,104,97,116,111,110,111,115,10,69,78,67, 79,68,73,78,71,32,57,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,54,48,48,10,54,70,48, 48,10,53,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 110,111,116,101,108,101,105,97,10,69,78,67,79,68,73,78, 71,32,57,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,112,115,105,108, 111,110,116,111,110,111,115,10,69,78,67,79,68,73,78,71, 32,57,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,68,56,48,48,10,57,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,70,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,116,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,57, 56,48,10,68,57,56,48,10,57,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,70,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,73,111,116,97,116,111,110,111,115,10,69, 78,67,79,68,73,78,71,32,57,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,67, 54,48,48,10,56,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,49,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,79,109,105,99,114,111,110,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,54,48,48,10,67,70, 48,48,10,57,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,70,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 85,112,115,105,108,111,110,116,111,110,111,115,10,69,78,67, 79,68,73,78,71,32,57,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,57,56,48,10,68,57,56, 48,10,57,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,48,70,48,48,10,48,70,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 109,101,103,97,116,111,110,111,115,10,69,78,67,79,68,73, 78,71,32,57,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,54,48,48,10,54,70,48,48,10,53, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,70,48,48,10,48,54,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,54,68, 56,48,10,55,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,68,56,48,10,48,55,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 65,108,112,104,97,10,69,78,67,79,68,73,78,71,32,57, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,66,101,116,97,10,69,78,67, 79,68,73,78,71,32,57,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,71, 97,109,109,97,10,69,78,67,79,68,73,78,71,32,57,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,68,101,108,116,97,10,69,78,67, 79,68,73,78,71,32,57,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,69, 112,115,105,108,111,110,10,69,78,67,79,68,73,78,71,32, 57,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,90,101,116,97,10,69,78, 67,79,68,73,78,71,32,57,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,116,97,10,69,78,67,79,68,73,78,71,32,57,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,84,104,101,116,97,10,69,78,67,79, 68,73,78,71,32,57,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,111, 116,97,10,69,78,67,79,68,73,78,71,32,57,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,75,97,112,112,97,10,69,78,67,79,68, 73,78,71,32,57,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,76,97,109, 98,100,97,10,69,78,67,79,68,73,78,71,32,57,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,77,117,10,69,78,67,79,68,73,78, 71,32,57,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,55,51, 56,48,10,55,51,56,48,10,55,70,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,117,10,69,78, 67,79,68,73,78,71,32,57,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,55,49, 56,48,10,55,49,56,48,10,55,57,56,48,10,55,57,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,55,56,48, 10,54,55,56,48,10,54,51,56,48,10,54,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 88,105,10,69,78,67,79,68,73,78,71,32,57,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,109,105,99,114,111,110,10,69,78,67, 79,68,73,78,71,32,57,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,80, 105,10,69,78,67,79,68,73,78,71,32,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,82,104,111,10,69,78,67,79,68,73,78,71, 32,57,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,105,103,109,97,10, 69,78,67,79,68,73,78,71,32,57,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,84,97,117,10,69,78,67,79,68,73,78,71,32,57, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,112,115,105,108,111,110,10, 69,78,67,79,68,73,78,71,32,57,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,80,104,105,10,69,78,67,79,68,73,78,71,32,57, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,104,105,10,69,78,67,79, 68,73,78,71,32,57,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,80,115, 105,10,69,78,67,79,68,73,78,71,32,57,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,109,101,103,97,10,69,78,67,79,68,73, 78,71,32,57,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,50,48,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,73,111,116,97, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,57,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,57,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,54,49,56,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,108,112, 104,97,116,111,110,111,115,10,69,78,67,79,68,73,78,71, 32,57,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,112,115,105,108,111, 110,116,111,110,111,115,10,69,78,67,79,68,73,78,71,32, 57,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 54,49,56,48,10,54,48,48,48,10,51,69,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,116,97,116,111,110,111, 115,10,69,78,67,79,68,73,78,71,32,57,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,111,116,97,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,112,115,105,108,111,110,100,105,101,114,101,115,105,115,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,54,68,56,48,10,55,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,108,112,104,97,10,69,78,67, 79,68,73,78,71,32,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,68,56,48,10,54,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 53,56,48,10,51,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,55,69,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,66,48,48,10,54,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,97,109,109,97,10,69,78,67,79, 68,73,78,71,32,57,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,101, 108,116,97,10,69,78,67,79,68,73,78,71,32,57,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,112,115,105,108,111,110,10,69,78, 67,79,68,73,78,71,32,57,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,54,48,48,48, 10,51,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 122,101,116,97,10,69,78,67,79,68,73,78,71,32,57,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,48,48,48,10,49,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,70,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,116,97,10,69,78,67,79,68, 73,78,71,32,57,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,104,101, 116,97,10,69,78,67,79,68,73,78,71,32,57,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,111,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,107,97,112,112, 97,10,69,78,67,79,68,73,78,71,32,57,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,51,48,48,10, 54,54,48,48,10,55,67,48,48,10,55,67,48,48,10,54, 54,48,48,10,54,51,48,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,97,109,98,100,97,10,69,78,67,79,68, 73,78,71,32,57,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 68,56,48,10,51,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,109,117,10, 69,78,67,79,68,73,78,71,32,57,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,56,48,10,55,68,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,117,10,69,78,67,79,68,73,78,71,32,57,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,51,51,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,120,105,10,69,78,67,79,68,73, 78,71,32,57,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,70,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,70,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,70,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,109,105,99, 114,111,110,10,69,78,67,79,68,73,78,71,32,57,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,112,105,10,69,78,67,79,68,73,78, 71,32,57,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,104,111,10,69, 78,67,79,68,73,78,71,32,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,103,109,97,49,10,69,78,67,79,68,73,78,71, 32,57,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 70,48,48,10,48,49,56,48,10,48,49,56,48,10,48,70, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,115,105,103,109,97,10, 69,78,67,79,68,73,78,71,32,57,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,70,56,48,10,51,54,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,97,117,10,69,78,67,79,68,73,78,71,32,57, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,112,115,105,108,111,110,10, 69,78,67,79,68,73,78,71,32,57,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,104,105,10,69,78,67,79,68,73,78,71,32,57, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,55,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,104,105,10,69,78,67,79, 68,73,78,71,32,57,54,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,115, 105,10,69,78,67,79,68,73,78,71,32,57,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,109,101,103,97,10,69,78,67,79,68,73, 78,71,32,57,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,57,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,68,56,48,10, 48,55,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,112,115,105,108, 111,110,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,57,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,109,105, 99,114,111,110,116,111,110,111,115,10,69,78,67,79,68,73, 78,71,32,57,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,112,115,105, 108,111,110,116,111,110,111,115,10,69,78,67,79,68,73,78, 71,32,57,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,111,109,101,103,97, 116,111,110,111,115,10,69,78,67,79,68,73,78,71,32,57, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,55,70,56,48,10,51,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,68,48,10, 69,78,67,79,68,73,78,71,32,57,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,69,48,48,10,55,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,104,101,116,97,49,10,69,78,67,79,68,73,78, 71,32,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,51,48,48,10,49,70,56, 48,10,67,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,49,10,69,78,67,79,68,73,78,71,32,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,66,51,52,48,10,49,50,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,51,10,69,78, 67,79,68,73,78,71,32,57,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,66,51, 52,48,10,49,50,48,48,10,53,69,48,48,10,67,67,48, 48,10,56,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,52,10,69,78,67,79,68,73,78,71, 32,57,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,54,49,56, 48,10,66,51,52,48,10,49,50,48,48,10,49,69,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,104,105,49,10,69, 78,67,79,68,73,78,71,32,57,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,109,101,103,97,49,10,69,78,67,79,68,73,78,71, 32,57,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,67,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,56,48,10,51,49,56,48,10, 49,66,48,48,10,49,69,48,48,10,49,67,48,48,10,51, 54,48,48,10,54,51,56,48,10,52,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,49,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,68,56,10,69,78,67,79, 68,73,78,71,32,57,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,68,57,10,69,78,67,79,68,73,78,71,32,57, 56,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,68,65,10, 69,78,67,79,68,73,78,71,32,57,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,70,48,48,10, 49,57,56,48,10,51,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,48,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,55,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,68,66,10,69,78,67,79,68,73, 78,71,32,57,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,49,70, 48,48,10,51,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,70,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,55,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,68,67,10,69,78,67,79,68,73,78,71,32,57,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,68,10,69,78, 67,79,68,73,78,71,32,57,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,56,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,70,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,69,10,69,78,67,79,68,73,78,71, 32,57,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,69,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,54,51,56,48,10,54,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,55,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 70,10,69,78,67,79,68,73,78,71,32,57,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,48,10,69,78,67,79, 68,73,78,71,32,57,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,55,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,49,10,69,78,67,79,68,73,78,71,32,57, 57,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,48,48,10,54,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,55,48,48,10,48,70, 48,48,10,49,57,56,48,10,49,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,69,50,10, 69,78,67,79,68,73,78,71,32,57,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,66,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,56, 48,10,48,49,56,48,10,51,70,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,51,10,69,78,67,79,68,73, 78,71,32,57,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,51,70,56,48,10,48,49,56,48, 10,51,70,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,69,52,10,69,78,67,79,68,73,78,71,32,57,57,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 57,56,48,10,51,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,56,48,10,51,55,56, 48,10,49,68,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,53,10,69,78, 67,79,68,73,78,71,32,57,57,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,56,48,10,51,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,51,51,56,48,10,49,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,69,54,10,69,78,67,79,68,73,78,71, 32,57,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,54,48,48, 10,51,66,48,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,55, 57,56,48,10,48,51,48,48,10,51,69,48,48,10,54,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 55,10,69,78,67,79,68,73,78,71,32,57,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,51,70,48,48,10,54,68,56,48,10, 51,57,56,48,10,48,49,56,48,10,48,49,56,48,10,51, 57,56,48,10,54,68,56,48,10,54,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,56,10,69,78,67,79, 68,73,78,71,32,49,48,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,48,51,48,48,10,49,69,48,48,10,51,48,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,69,57,10,69,78,67,79,68,73,78,71,32, 49,48,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,49,67,48,48,10,55, 48,48,48,10,49,67,48,48,10,48,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 65,10,69,78,67,79,68,73,78,71,32,49,48,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,49, 67,48,10,66,51,52,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,69,66,10,69,78,67, 79,68,73,78,71,32,49,48,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,49,67,48,10,66,51,52,48,10,49,69,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,69,67,10,69,78,67,79,68,73,78,71, 32,49,48,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,49,70,48,48,10,51,48,48,48,10,54,48, 48,48,10,54,55,48,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 69,68,10,69,78,67,79,68,73,78,71,32,49,48,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,51,70,48,48,10,54,48,48, 48,10,54,55,48,48,10,54,68,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,69,10,69,78, 67,79,68,73,78,71,32,49,48,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,54,68, 56,48,10,52,67,56,48,10,50,68,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,69,70,10,69,78,67,79,68,73,78, 71,32,49,48,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,67,56,48,10,51,70,48,48,10,52,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,70,48,10,69,78,67,79,68,73,78,71,32,49,48,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,56,48,10,51,49, 56,48,10,49,66,48,48,10,49,69,48,48,10,49,67,48, 48,10,51,54,48,48,10,54,51,48,48,10,52,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,70,49,10,69, 78,67,79,68,73,78,71,32,49,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,48,48,10,55,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,49,70,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,50,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,48,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,48,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,70,51,10,69,78,67,79,68,73,78,71,32,49,48, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,70,52,10, 69,78,67,79,68,73,78,71,32,49,48,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,70,53,10,69,78,67,79,68, 73,78,71,32,49,48,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,48,48,10,51,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,51,48, 48,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,54,48,48,10,55,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,70,55, 10,69,78,67,79,68,73,78,71,32,49,48,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,67,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 67,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,70,56,10,69,78,67,79, 68,73,78,71,32,49,48,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,55,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,70,57,10,69,78,67,79,68,73,78,71,32, 49,48,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,49,48,48,10,54,48,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,56,48,10,51,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,55,51,56,48,10,55,70,56,48,10,55,70,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,70,66,10,69,78,67, 79,68,73,78,71,32,49,48,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,55,51,56,48,10,55,51,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,48,48,10,69,78,67,79,68,73,78,71, 32,49,48,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,51,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,50,51,10,69,78,67,79,68,73,78,71,32,49,48, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,70,48,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,53,50,10,69, 78,67,79,68,73,78,71,32,49,48,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,69,48,48, 10,49,56,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,53,51,10,69,78,67,79, 68,73,78,71,32,49,48,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,53,52,10,69,78,67,79,68,73,78, 71,32,49,48,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,53,53,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 53,54,10,69,78,67,79,68,73,78,71,32,49,48,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,55,10, 69,78,67,79,68,73,78,71,32,49,48,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,53,56,10,69,78,67, 79,68,73,78,71,32,49,48,51,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,70,48,48,10,54,68,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,48,48,10,67,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,55,70,48,48,10,54,68,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,48, 48,10,54,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,54,48,10,69,78,67,79,68,73,78,71,32, 49,48,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,66,48,48,10,49,68,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,54,49,10,69,78,67,79,68,73,78,71,32,49,48,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,54,48,48,10,54,54,48,48,10,55,67, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,48,68,10,69, 78,67,79,68,73,78,71,32,49,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,55,56,48,10,54,70,56,48,10,55,68, 56,48,10,55,57,56,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,54,50,10,69,78,67,79, 68,73,78,71,32,49,48,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,52,53,10,69,78,67,79,68,73,78, 71,32,49,48,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,49,55,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 49,56,10,69,78,67,79,68,73,78,71,32,49,48,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,54,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,50,48,10,69,78,67, 79,68,73,78,71,32,49,48,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,50,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,48,48,10,49,66,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,50,50,10,69,78,67,79,68,73,78,71,32, 49,48,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,52,10,69,78,67,79,68,73,78,71,32,49,48,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,50,53, 10,69,78,67,79,68,73,78,71,32,49,48,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,51,48,48,10,48,69,48,48,10, 48,51,48,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,54,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 56,48,10,54,55,56,48,10,54,70,56,48,10,55,68,56, 48,10,55,57,56,48,10,55,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,50,55,10,69,78,67,79,68, 73,78,71,32,49,48,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,55,56,48,10,54,70,56,48,10,55,68,56,48,10,55, 57,56,48,10,55,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,50,56,10,69,78,67,79,68,73,78,71, 32,49,48,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,55,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,50,57,10,69,78,67,79,68,73,78,71,32,49,48, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,56,48,10,49,57,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,55,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,51, 48,10,69,78,67,79,68,73,78,71,32,49,48,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,51,49,10,69, 78,67,79,68,73,78,71,32,49,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,50,10,69,78,67,79, 68,73,78,71,32,49,48,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,51,51,10,69,78,67,79,68,73,78, 71,32,49,48,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,51,52,10,69,78,67,79,68,73,78,71,32,49, 48,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 51,53,10,69,78,67,79,68,73,78,71,32,49,48,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,51,54,10, 69,78,67,79,68,73,78,71,32,49,48,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,51,55,10,69,78,67, 79,68,73,78,71,32,49,48,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,56,10,69,78,67,79,68,73, 78,71,32,49,48,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,51,57,10,69,78,67,79,68,73,78,71,32, 49,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,49,69,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,52,48,10,69,78,67,79,68,73,78,71,32,49,48,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,67,48, 10,48,48,67,48,10,48,48,67,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,52,49, 10,69,78,67,79,68,73,78,71,32,49,48,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,52,50,10,69,78, 67,79,68,73,78,71,32,49,48,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,52,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,56,48,48,10,53,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,52,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,57,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,52, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,52,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,52,56,10,69,78,67,79, 68,73,78,71,32,49,48,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,55,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,52,57,10,69,78,67,79,68,73,78, 71,32,49,48,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,56,48,10,51,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,49,56,48,10,49,70,56,48,10,49,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,54,53,10,69,78,67,79,68,73,78,71,32,49, 48,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 54,54,10,69,78,67,79,68,73,78,71,32,49,48,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,48,48,10,51,69,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,55,10, 69,78,67,79,68,73,78,71,32,49,48,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,55,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,54,56,10,69,78,67, 79,68,73,78,71,32,49,48,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,54,57,10,69,78,67,79,68,73, 78,71,32,49,48,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,49,66,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,55,48,10,69,78,67,79,68,73,78,71,32, 49,48,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,55,50,10,69,78,67,79,68,73,78,71,32,49,48,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,55,51, 10,69,78,67,79,68,73,78,71,32,49,48,55,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 48,49,56,48,10,49,70,48,48,10,48,51,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,55,52,10,69,78, 67,79,68,73,78,71,32,49,48,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,51,56, 48,10,54,55,56,48,10,54,68,56,48,10,55,57,56,48, 10,55,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,55,53,10,69,78,67,79,68, 73,78,71,32,49,48,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 55,56,48,10,54,68,56,48,10,55,57,56,48,10,55,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,55,54,10,69,78,67,79,68,73,78,71, 32,49,48,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,51,48,48,10,54,54,48,48,10,55,67,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,55,55,10,69,78,67,79,68,73,78,71,32,49,48, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,70,56,48,10,49, 57,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,55, 56,10,69,78,67,79,68,73,78,71,32,49,48,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,55,51,56,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,55,57,10,69, 78,67,79,68,73,78,71,32,49,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,56,48,10,69,78,67,79, 68,73,78,71,32,49,48,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,56,49,10,69,78,67,79,68,73,78, 71,32,49,48,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,50,10,69,78,67,79,68,73,78,71,32,49, 48,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,51,48,48,10,54,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 56,51,10,69,78,67,79,68,73,78,71,32,49,48,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,49,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,56,52,10, 69,78,67,79,68,73,78,71,32,49,48,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,49,48,48,56,53,10,69,78,67, 79,68,73,78,71,32,49,48,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,56,54,10,69,78,67,79,68,73, 78,71,32,49,48,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,49,48,48,56,55,10,69,78,67,79,68,73,78,71,32, 49,48,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,56,56,10,69,78,67,79,68,73,78,71,32,49,48,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,56,57, 10,69,78,67,79,68,73,78,71,32,49,48,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,48,10,69,78, 67,79,68,73,78,71,32,49,48,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,48,57,49,10,69,78,67,79,68, 73,78,71,32,49,48,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,57,50,10,69,78,67,79,68,73,78,71, 32,49,48,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,70,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,48,57,51,10,69,78,67,79,68,73,78,71,32,49,48, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,57,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,57, 52,10,69,78,67,79,68,73,78,71,32,49,49,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,48,57,53,10,69, 78,67,79,68,73,78,71,32,49,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,70,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,57,54,10,69,78,67,79, 68,73,78,71,32,49,49,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,55,48,48,10,54,68,56,48,10,54,68,56,48,10, 55,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,48,57,55,10,69,78,67,79,68,73,78, 71,32,49,49,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,49,57,56,48,10,51,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,53,48,10,69,78,67,79,68,73,78,71,32,49,49,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,49,48,48,55,49, 10,69,78,67,79,68,73,78,71,32,49,49,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,49,56,48,10,49,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,55,69,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,54,48,48,10,51,66,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,49,48,49,48,48,10,69,78,67,79,68, 73,78,71,32,49,49,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,48,49,10,69,78,67,79,68,73,78,71, 32,49,49,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,55,67,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,48,50,10,69,78,67,79,68,73,78,71,32,49,49, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,51,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,48, 51,10,69,78,67,79,68,73,78,71,32,49,49,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,51,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,49,48,52,10,69, 78,67,79,68,73,78,71,32,49,49,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,51, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,53,10,69,78,67,79, 68,73,78,71,32,49,49,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,48,55,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,49,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,48,54,10,69,78,67,79,68,73,78, 71,32,49,49,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,67,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,48,55,10,69,78,67,79,68,73,78,71,32,49, 49,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,55,70,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,49, 48,56,10,69,78,67,79,68,73,78,71,32,49,49,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,70,56, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,49,48,57,10, 69,78,67,79,68,73,78,71,32,49,49,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,49,56,48,48,10, 48,48,48,48,10,54,51,56,48,10,54,54,48,48,10,54, 54,48,48,10,55,67,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,53,68,10,69,78,67,79,68, 73,78,71,32,49,49,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 55,56,48,10,54,68,56,48,10,55,57,56,48,10,55,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,49,48,10,69,78,67,79,68,73,78,71, 32,49,49,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,57,51,10,69,78,67,79,68,73,78,71,32,49,49, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,54,48,10, 69,78,67,79,68,73,78,71,32,49,49,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,54,49,10,69,78,67,79,68, 73,78,71,32,49,49,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,49,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,67,48,48,10,55,52, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,51,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,49, 48,49,57,52,10,69,78,67,79,68,73,78,71,32,49,49, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,55,69,48,48,10,51, 48,48,48,10,51,70,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,54,52,10, 69,78,67,79,68,73,78,71,32,49,49,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,55,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,55,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,54,53,10,69,78,67,79,68, 73,78,71,32,49,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,55,48,48,10,54,68,56,48,10,54,67,48,48,10,55, 70,48,48,10,54,67,48,48,10,54,67,48,48,10,54,68, 56,48,10,54,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,54,10,69,78,67,79,68,73,78,71,32,49, 49,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 55,51,56,48,10,55,70,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,54,55, 10,69,78,67,79,68,73,78,71,32,49,49,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,55,51,56,48,10,55,70,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,54,56,10,69,78,67,79, 68,73,78,71,32,49,49,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,52,48,48,10,52,69,48, 48,10,52,65,48,48,10,53,66,48,48,10,53,49,48,48, 10,53,49,48,48,10,55,70,48,48,10,53,53,48,48,10, 53,53,48,48,10,53,53,48,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,54,57,10,69,78,67,79,68,73,78,71,32, 49,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,52,48,48, 10,52,69,48,48,10,52,65,48,48,10,55,70,48,48,10, 53,53,48,48,10,53,53,48,48,10,53,53,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 65,10,69,78,67,79,68,73,78,71,32,49,49,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,54,66,10,69,78,67, 79,68,73,78,71,32,49,49,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,54,67,10,69,78,67,79,68,73,78,71, 32,49,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,53,70,48,48,10,53,49,48,48,10,53,49, 48,48,10,53,66,48,48,10,52,69,48,48,10,55,67,48, 48,10,52,69,48,48,10,53,70,48,48,10,53,53,48,48, 10,53,53,48,48,10,53,53,48,48,10,53,53,48,48,10, 53,53,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 54,68,10,69,78,67,79,68,73,78,71,32,49,49,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,53,70,48,48,10,53,49,48, 48,10,52,65,48,48,10,55,67,48,48,10,52,69,48,48, 10,53,53,48,48,10,53,53,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,69,10,69,78, 67,79,68,73,78,71,32,49,49,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,48,51,48,48,10,48,69,48,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,51,48,48,10,51,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,54,70,10,69,78,67,79,68,73,78, 71,32,49,49,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,51,70,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,55,48,10,69,78,67,79,68,73,78,71,32,49,49,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,70, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,55,49,10,69, 78,67,79,68,73,78,71,32,49,49,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,52,55,10,69,78,67,79, 68,73,78,71,32,49,49,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,49,48,49,57,53,10,69,78,67,79,68,73,78, 71,32,49,49,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,52,56,10,69,78,67,79,68,73,78,71,32,49, 49,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,51,67,48,48,10,51,67,48,48,10,51, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,49, 57,54,10,69,78,67,79,68,73,78,71,32,49,49,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,51,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,51,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,54,10,69,78, 67,79,68,73,78,71,32,49,49,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 54,54,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,67,48,48,10,51,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,55,55,10,69,78,67,79,68,73,78, 71,32,49,49,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 54,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,51,48,48,10,54,54,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,55,56,10,69,78,67,79,68,73,78,71,32,49,49,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,48,48,48,10,68,56,48,48,10,68,56,48,48,10,68, 56,48,48,10,68,56,48,48,10,68,69,67,48,10,68,69, 67,48,10,68,69,67,48,10,68,65,67,48,10,68,66,67, 48,10,68,57,67,48,10,68,57,56,48,10,55,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,55,57,10,69, 78,67,79,68,73,78,71,32,49,49,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,67,48,10,68,69,67,48,10,68,69, 67,48,10,68,65,67,48,10,68,66,67,48,10,68,57,67, 48,10,68,57,56,48,10,55,49,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,65,10,69,78,67,79,68,73, 78,71,32,49,49,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,55,66,10,69,78,67,79,68,73,78,71,32,49,49, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,51,70,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,55,67,10, 69,78,67,79,68,73,78,71,32,49,49,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,48,48,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,55,68,10,69,78,67,79,68, 73,78,71,32,49,49,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,48,48,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,69,10,69,78,67,79,68,73,78,71,32,49, 49,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,52,67,56, 48,10,48,48,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,55,70, 10,69,78,67,79,68,73,78,71,32,49,49,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,56,48,10,69,78,67,79, 68,73,78,71,32,49,49,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 48,48,48,10,49,69,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,56,49,10,69,78,67,79,68,73,78,71,32, 49,49,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 67,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 50,10,69,78,67,79,68,73,78,71,32,49,49,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,51,48,48,10,49,66,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,68,56,48, 10,54,67,48,48,10,51,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,56,51,10,69,78,67, 79,68,73,78,71,32,49,49,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,54,48,48,10,55, 69,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,56,52,10,69,78,67,79,68,73,78,71, 32,49,49,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,51,67,48,48,10,54,54,48,48,10,67, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 56,53,10,69,78,67,79,68,73,78,71,32,49,49,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 54,48,48,48,10,55,67,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,54,10,69,78, 67,79,68,73,78,71,32,49,49,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 55,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,56,56,10,69,78,67,79,68,73,78, 71,32,49,49,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,52,48,48,10,52,65,48,48,10, 65,48,56,48,10,48,49,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,48,48,10,65,48,56,48,10, 48,57,52,48,10,49,52,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,56,57,10,69,78,67,79,68,73,78,71,32,49,49,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,52,48,48,10,52,56,52,48,10,56,67,56,48,10, 67,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,67,48,10,52,67,52,48,10,56,52,56,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,56,65,10,69, 78,67,79,68,73,78,71,32,49,49,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,55,56,48,10,54,70,56,48,10,55,68, 56,48,10,55,57,56,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,67,48,10,48,48,67,48, 10,48,49,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,66,10,69,78,67,79,68,73, 78,71,32,49,49,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,51,56,48,10,54,55, 56,48,10,54,68,56,48,10,55,57,56,48,10,55,49,56, 48,10,54,49,67,48,10,48,48,67,48,10,48,49,56,48, 10,48,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,56,67,10,69,78,67,79,68,73,78,71,32,49,49, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,70,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,56,68,10, 69,78,67,79,68,73,78,71,32,49,49,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,70,48,48,48,10,54, 48,48,48,10,55,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,56,69,10,69,78,67,79,68, 73,78,71,32,49,49,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,55,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,70,10,69,78,67,79,68,73,78,71,32,49, 49,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,68,56,48,10,55,55,48,48,10,54,70, 48,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,49,48,48, 53,48,10,69,78,67,79,68,73,78,71,32,49,49,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,57,56,10, 69,78,67,79,68,73,78,71,32,49,49,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,57,50,10,69,78,67,79,68, 73,78,71,32,49,49,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,51,10,69,78,67,79,68,73,78,71,32,49, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,57,52, 10,69,78,67,79,68,73,78,71,32,49,49,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,57,53,10,69,78,67,79, 68,73,78,71,32,49,49,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,57,54,10,69,78,67,79,68,73,78,71,32, 49,49,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,51,70,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 55,10,69,78,67,79,68,73,78,71,32,49,49,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,67,48,10,48, 48,67,48,10,48,48,67,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,57,56,10,69,78,67, 79,68,73,78,71,32,49,49,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,57,57,10,69,78,67,79,68,73,78,71, 32,49,49,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,48,49,56,48,10,49,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 57,65,10,69,78,67,79,68,73,78,71,32,49,49,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,56,48,10,54,49,56,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,54,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,49,67,48,10,54,49,67,48,10, 48,48,67,48,10,48,48,67,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,66,10,69,78, 67,79,68,73,78,71,32,49,49,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,48,48,10,54,51,48,48,10,54,54,48, 48,10,55,67,48,48,10,55,67,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,49,67,48,10,48,48,67,48,10, 48,48,67,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,57,67,10,69,78,67,79,68,73,78, 71,32,49,49,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,66,48,48,10,54,66,48,48,10,54,66, 48,48,10,55,69,48,48,10,54,66,48,48,10,54,66,48, 48,10,54,66,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,57,68,10,69,78,67,79,68,73,78,71,32,49,49,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,57, 56,48,10,54,66,48,48,10,55,70,48,48,10,55,70,48, 48,10,54,66,48,48,10,54,57,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,57,69,10,69, 78,67,79,68,73,78,71,32,49,49,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,56,48,10, 54,49,56,48,10,70,66,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,70,10,69,78,67,79,68,73, 78,71,32,49,49,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,70,56,48,48,10,54,48,48,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,55,67,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,65,48,10,69,78,67,79,68,73,78,71,32,49,49, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,48,56,48,10,54,49,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,65,49,10, 69,78,67,79,68,73,78,71,32,49,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,49,56,48,10,54,51,48,48,10,54, 54,48,48,10,55,67,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,65,50,10,69,78,67,79,68, 73,78,71,32,49,49,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,51,10,69,78,67,79,68,73,78,71,32,49, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 67,48,10,48,48,67,48,10,48,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,65,52, 10,69,78,67,79,68,73,78,71,32,49,49,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,70,67, 48,10,67,67,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,67,48,48,10,67,67,48,48,10,70,67,48,48,10, 67,67,48,48,10,67,67,48,48,10,67,67,48,48,10,67, 67,48,48,10,67,67,48,48,10,67,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,65,53,10,69,78,67,79, 68,73,78,71,32,49,49,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,70,56,48,10,54,67,48,48,10,54,67,48,48,10, 55,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,65,54,10,69,78,67,79,68,73,78,71,32, 49,49,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,67,48,48,10,67,67,48,48,10,67,67,48, 48,10,67,67,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,70,48,48,10,67,68,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,48,49,56,48,10,48,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 55,10,69,78,67,79,68,73,78,71,32,49,49,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,65,56,10,69,78,67, 79,68,73,78,71,32,49,49,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,67,48,48,10,54,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,54,48,48,10,67,70,48,48, 10,68,57,56,48,10,68,57,56,48,10,67,70,48,48,10, 54,54,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,65,57,10,69,78,67,79,68,73,78,71, 32,49,49,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,55,48,48, 10,54,68,56,48,10,54,68,56,48,10,51,68,56,48,10, 49,70,48,48,10,48,54,48,48,10,48,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 65,65,10,69,78,67,79,68,73,78,71,32,49,49,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,66,10,69,78, 67,79,68,73,78,71,32,49,49,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,65,67,10,69,78,67,79,68,73,78, 71,32,49,49,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,65,68,10,69,78,67,79,68,73,78,71,32,49,49,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,65,69,10,69, 78,67,79,68,73,78,71,32,49,49,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,70,10,69,78,67,79,68,73, 78,71,32,49,49,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,66,48,10,69,78,67,79,68,73,78,71,32,49,50, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,66,49,10, 69,78,67,79,68,73,78,71,32,49,50,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,66,50,10,69,78,67,79,68, 73,78,71,32,49,50,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 67,48,10,54,49,67,48,10,48,48,67,48,10,48,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,51,10,69,78,67,79,68,73,78,71,32,49, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 67,48,10,48,48,67,48,10,48,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,66,52, 10,69,78,67,79,68,73,78,71,32,49,50,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,68,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,70,67,48,10,48,48, 67,48,10,48,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,66,53,10,69,78,67,79, 68,73,78,71,32,49,50,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,70,67,48,10,48,48,67,48,10,48,48, 67,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,66,54,10,69,78,67,79,68,73,78,71,32, 49,50,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 49,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 55,10,69,78,67,79,68,73,78,71,32,49,50,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,67,48,10,48, 48,67,48,10,48,48,67,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,66,56,10,69,78,67, 79,68,73,78,71,32,49,50,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,57,56,48,10,54,57,56,48,10,51,70,56,48, 10,48,57,56,48,10,48,57,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,66,57,10,69,78,67,79,68,73,78,71, 32,49,50,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,57,56,48,10,54,57,56,48, 10,51,70,56,48,10,48,57,56,48,10,48,57,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 66,65,10,69,78,67,79,68,73,78,71,32,49,50,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,70,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,66,10,69,78, 67,79,68,73,78,71,32,49,50,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,67,48,48,10,55,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,66,67,10,69,78,67,79,68,73,78, 71,32,49,50,49,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,49,66,48,48,10,51, 49,56,48,10,66,49,56,48,10,66,49,56,48,10,55,70, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,49,56,48,10,49,66,48,48, 10,48,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,66,68,10,69,78,67,79,68,73,78,71,32,49,50,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,48,48,10,57,57, 56,48,10,66,49,56,48,10,55,70,56,48,10,51,48,48, 48,10,51,48,48,48,10,49,57,56,48,10,48,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,66,69,10,69, 78,67,79,68,73,78,71,32,49,50,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,66,48,48,10,51,49,56,48,10,66,49,56,48,10,66, 49,56,48,10,55,70,56,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,49,56, 48,10,49,66,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,54,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,70,10,69,78,67,79,68,73, 78,71,32,49,50,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,57,57,56,48,10,66,49,56,48,10,55,70, 56,48,10,51,48,48,48,10,51,48,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,54,48,48,10,48,54,56,48, 10,48,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,67,48,10,69,78,67,79,68,73,78,71,32,49,50, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,67,49,10, 69,78,67,79,68,73,78,71,32,49,50,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,67,50,10,69,78,67,79,68, 73,78,71,32,49,50,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,51,10,69,78,67,79,68,73,78,71,32,49, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,56,48,10,54,49,56,48,10,54,51,48,48, 10,54,51,48,48,10,54,54,48,48,10,54,54,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,67,52, 10,69,78,67,79,68,73,78,71,32,49,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,51,48,48,10, 54,54,48,48,10,55,67,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,67,53,10,69,78,67,79, 68,73,78,71,32,49,50,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,56,48,10,49,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,55, 49,56,48,10,54,49,67,48,10,48,48,67,48,10,48,49, 56,48,10,48,51,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,67,54,10,69,78,67,79,68,73,78,71,32, 49,50,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,56,48, 10,49,57,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,54, 49,67,48,10,48,48,67,48,10,48,49,56,48,10,48,51, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 55,10,69,78,67,79,68,73,78,71,32,49,50,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,67,56,10,69,78,67, 79,68,73,78,71,32,49,50,50,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,67,57,10,69,78,67,79,68,73,78,71, 32,49,50,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,67,48,10,48,48,67,48,10,48,49,56,48,10,48, 51,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 67,65,10,69,78,67,79,68,73,78,71,32,49,50,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,67,48,10, 48,48,67,48,10,48,49,56,48,10,48,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,66,10,69,78, 67,79,68,73,78,71,32,49,50,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,51,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,67,67,10,69,78,67,79,68,73,78, 71,32,49,50,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,51,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,67,68,10,69,78,67,79,68,73,78,71,32,49,50,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,56,48,10,55, 51,56,48,10,55,70,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,67,48, 10,48,48,67,48,10,48,49,56,48,10,48,51,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,67,69,10,69, 78,67,79,68,73,78,71,32,49,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,55,51,56,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,49,56,48,10,54,49,67,48,10,48,48,67,48, 10,48,49,56,48,10,48,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,48,10,69,78,67,79,68,73, 78,71,32,49,50,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,68,49,10,69,78,67,79,68,73,78,71,32,49,50, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,48,49,56,48,10,51,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,69,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,50,10, 69,78,67,79,68,73,78,71,32,49,50,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,68,51,10,69,78,67,79,68, 73,78,71,32,49,50,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,48,49,56,48,10,51, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,69,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,52,10,69,78,67,79,68,73,78,71,32,49, 50,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,70,56,48,10,49,69,48,48,10,51,54,48,48, 10,51,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 55,70,56,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,55, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,68,53, 10,69,78,67,79,68,73,78,71,32,49,50,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,66,48,48,10,52,68,56,48,10, 48,68,56,48,10,48,70,48,48,10,51,67,48,48,10,54, 67,48,48,10,54,67,56,48,10,51,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,54,10,69,78,67,79, 68,73,78,71,32,49,50,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,68,55,10,69,78,67,79,68,73,78,71,32, 49,50,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,51,49,56,48,10,49, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 56,10,69,78,67,79,68,73,78,71,32,49,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,49,48,56,52,54,10,69, 78,67,79,68,73,78,71,32,49,50,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,65,10,69,78,67,79,68,73, 78,71,32,49,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,68,66,10,69,78,67,79,68,73,78,71,32,49,50, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,55,70, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,67,10, 69,78,67,79,68,73,78,71,32,49,50,52,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,68,68,10,69,78,67,79,68, 73,78,71,32,49,50,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,69,10,69,78,67,79,68,73,78,71,32,49, 50,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,48,51,48,48,10, 48,69,48,48,10,48,51,48,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,68,70, 10,69,78,67,79,68,73,78,71,32,49,50,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 48,49,56,48,10,48,70,48,48,10,48,55,48,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,49,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,69,49,10,69,78,67,79,68,73,78,71,32, 49,50,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 49,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,69, 50,10,69,78,67,79,68,73,78,71,32,49,50,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,55,56,48,10,54,70,56,48, 10,55,68,56,48,10,55,57,56,48,10,55,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,69,51,10,69,78,67, 79,68,73,78,71,32,49,50,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,55,56,48,10,54,68,56,48,10,55,57,56,48,10, 55,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,52,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,56,48,10,54,55,56, 48,10,54,70,56,48,10,55,68,56,48,10,55,57,56,48, 10,55,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 69,53,10,69,78,67,79,68,73,78,71,32,49,50,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,55,56,48,10,54,68,56,48, 10,55,57,56,48,10,55,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,69,54,10,69,78, 67,79,68,73,78,71,32,49,50,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,69,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,52,69,57,10,69, 78,67,79,68,73,78,71,32,49,50,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,69,65,10,69,78,67,79,68,73, 78,71,32,49,50,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,52,69,66,10,69,78,67,79,68,73,78,71,32,49,50, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,67,10, 69,78,67,79,68,73,78,71,32,49,50,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,52,69,68,10,69,78,67,79,68, 73,78,71,32,49,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,48,49,56,48,10,49, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,69,69,10,69,78,67,79,68,73,78,71,32,49, 50,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,70,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,52,69,70, 10,69,78,67,79,68,73,78,71,32,49,50,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,68,56,48,10,48,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,48,10,69,78,67,79, 68,73,78,71,32,49,50,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,52,70,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,70, 50,10,69,78,67,79,68,73,78,71,32,49,50,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,49, 57,56,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,52,70,51,10,69,78,67, 79,68,73,78,71,32,49,50,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,57,56,48,10,51,51,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,56,48,10,49,68,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,52,10,69,78,67,79,68,73,78,71, 32,49,50,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,70,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,52, 70,53,10,69,78,67,79,68,73,78,71,32,49,50,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,70,56,10,69,78, 67,79,68,73,78,71,32,49,50,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,57,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,52,70,57,10,69,78,67,79,68,73,78, 71,32,49,50,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,57,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,57,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,48,10,69,78,67,79,68,73,78,71,32,49,50,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,70,56,48,10,51,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,49,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,48,49,10,69, 78,67,79,68,73,78,71,32,49,50,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,68,56,48,10,51,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,48,50,10,69,78,67,79,68,73, 78,71,32,49,50,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 67,48,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,67,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,48,51,10,69,78,67,79,68,73,78,71,32,49,50, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,50,67,48,48,10,55, 67,48,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,67,68,56,48,10,55,68,56,48,10,51,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,52,10, 69,78,67,79,68,73,78,71,32,49,50,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,48,48,48, 10,68,56,48,48,10,67,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,55,49,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,48,53,10,69,78,67,79,68, 73,78,71,32,49,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,56,48,48,10,67,67,48,48,10,48,67,48,48,10,51, 56,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,48,54,10,69,78,67,79,68,73,78,71,32,49, 50,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,67,51,48,48, 10,67,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 49,67,48,48,10,48,54,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,48,55, 10,69,78,67,79,68,73,78,71,32,49,50,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,69,48,48,10,67,51,48,48,10, 48,51,48,48,10,51,69,48,48,10,48,54,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,56,10,69,78,67,79, 68,73,78,71,32,49,50,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,69, 70,56,48,10,67,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,48,57,10,69,78,67,79,68,73,78,71,32, 49,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,67, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,48, 65,10,69,78,67,79,68,73,78,71,32,49,50,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,55,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,48,66,10,69,78,67, 79,68,73,78,71,32,49,50,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,67,10,69,78,67,79,68,73,78,71, 32,49,50,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,55,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 48,68,10,69,78,67,79,68,73,78,71,32,49,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,55,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,48,69,10,69,78, 67,79,68,73,78,71,32,49,50,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,48,68,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,48,70,10,69,78,67,79,68,73,78, 71,32,49,50,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,68,56, 48,10,48,68,56,48,10,48,68,56,48,10,48,68,56,48, 10,48,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,49,10,69,78,67,79,68,73,78,71,32,49,51,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,55,48, 48,10,54,55,56,48,10,54,54,56,48,10,51,67,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,51,50,10,69, 78,67,79,68,73,78,71,32,49,51,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 55,51,56,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,51,51,10,69,78,67,79,68,73, 78,71,32,49,51,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,51, 54,48,48,10,49,70,48,48,10,48,55,56,48,10,48,54, 56,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,51,52,10,69,78,67,79,68,73,78,71,32,49,51, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 55,56,48,10,48,54,56,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,53,10, 69,78,67,79,68,73,78,71,32,49,51,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 56,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,51,54,10,69,78,67,79,68, 73,78,71,32,49,51,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,55,56,48,10,49,68,56,48,10,48,49,48,48,10,48, 51,48,48,10,51,69,48,48,10,54,55,48,48,10,54,68, 56,48,10,51,56,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,51,55,10,69,78,67,79,68,73,78,71,32,49, 51,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,51,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,55,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,51,56, 10,69,78,67,79,68,73,78,71,32,49,51,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,51,70,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,57,10,69,78,67,79, 68,73,78,71,32,49,51,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,70,56,48, 10,68,54,48,48,10,68,54,48,48,10,67,67,48,48,10, 67,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,51,65,10,69,78,67,79,68,73,78,71,32, 49,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,56,48, 10,55,70,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,51, 66,10,69,78,67,79,68,73,78,71,32,49,51,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,51,67,10,69,78,67, 79,68,73,78,71,32,49,51,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,70,48,48,10,48,49,56,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,68,10,69,78,67,79,68,73,78,71, 32,49,51,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,55,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 51,69,10,69,78,67,79,68,73,78,71,32,49,51,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,51,70,10,69,78, 67,79,68,73,78,71,32,49,51,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,52,48,10,69,78,67,79,68,73,78, 71,32,49,51,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,56,48,48,10,48,69,48,48, 10,48,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,49,10,69,78,67,79,68,73,78,71,32,49,51,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,55,48,48,10,51,66, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,54,54,48,48,10,54,55,48,48,10,51,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,52,50,10,69, 78,67,79,68,73,78,71,32,49,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,52,51,10,69,78,67,79,68,73, 78,71,32,49,51,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,52,52,10,69,78,67,79,68,73,78,71,32,49,51, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,55,56,48,10,54,54,56,48,10,54,54,56,48,10, 54,54,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,51,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,53,10, 69,78,67,79,68,73,78,71,32,49,51,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,57,48,48,10,49,69,48,48,10,49, 57,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,52,54,10,69,78,67,79,68, 73,78,71,32,49,51,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,56,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,52,55,10,69,78,67,79,68,73,78,71,32,49, 51,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,55,70,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,52,56, 10,69,78,67,79,68,73,78,71,32,49,51,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,57,10,69,78,67,79, 68,73,78,71,32,49,51,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,49,70,48,48,10, 48,54,48,48,10,48,52,48,48,10,48,67,48,48,10,49, 56,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,52,65,10,69,78,67,79,68,73,78,71,32, 49,51,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,52, 66,10,69,78,67,79,68,73,78,71,32,49,51,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,51,49,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,55,48,48,10,48,51,48,48,10,51,69,48,48,10, 54,55,48,48,10,54,68,56,48,10,51,56,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,52,67,10,69,78,67, 79,68,73,78,71,32,49,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,68,10,69,78,67,79,68,73,78,71, 32,49,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 52,69,10,69,78,67,79,68,73,78,71,32,49,51,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,69,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,55,56,48,10, 48,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,52,70,10,69,78, 67,79,68,73,78,71,32,49,51,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,48,48,48,10,49,69,48,48,10,48,51,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,53,48,10,69,78,67,79,68,73,78, 71,32,49,51,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,49,10,69,78,67,79,68,73,78,71,32,49,51,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,53,50,10,69, 78,67,79,68,73,78,71,32,49,51,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,49,67,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,53,51,10,69,78,67,79,68,73, 78,71,32,49,51,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,53,52,10,69,78,67,79,68,73,78,71,32,49,51, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,70,48,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,68,56,48,48,10,51,67,48,48,10,49,66, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,53,10, 69,78,67,79,68,73,78,71,32,49,51,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,53,54,10,69,78,67,79,68, 73,78,71,32,49,51,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 51,70,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,53,57,10,69,78,67,79,68,73,78,71,32,49, 51,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,53,65, 10,69,78,67,79,68,73,78,71,32,49,51,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,66,10,69,78,67,79, 68,73,78,71,32,49,51,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,49,56,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,53,67,10,69,78,67,79,68,73,78,71,32, 49,51,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,51,69,48,48,10,55,67,48, 48,10,52,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,53, 68,10,69,78,67,79,68,73,78,71,32,49,51,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,56,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,53,69,10,69,78,67, 79,68,73,78,71,32,49,51,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,50,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,70,10,69,78,67,79,68,73,78,71, 32,49,51,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,54,48, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 54,49,10,69,78,67,79,68,73,78,71,32,49,51,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,56,48,10,49,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,54,50,10,69,78, 67,79,68,73,78,71,32,49,51,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,70,48,48,10,55,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,54,51,10,69,78,67,79,68,73,78, 71,32,49,51,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,66, 48,48,10,54,55,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,54,51,48,48, 10,51,70,67,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,52,10,69,78,67,79,68,73,78,71,32,49,51,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,67,48,48,10,69,54, 48,48,10,67,51,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,67,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,54,53,10,69, 78,67,79,68,73,78,71,32,49,51,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,53,49,56,48,10,67,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,54,54,10,69,78,67,79,68,73, 78,71,32,49,51,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 66,48,48,10,54,55,48,48,10,67,51,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,54,55,48, 48,10,51,66,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,54,55,10,69,78,67,79,68,73,78,71,32,49,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,70,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,51,69,48, 48,10,48,51,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,56,10, 69,78,67,79,68,73,78,71,32,49,51,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,70,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,54,57,10,69,78,67,79,68, 73,78,71,32,49,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,55,67,48,10,54,57,56,48,10,54,57, 48,48,10,54,54,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,54,65,10,69,78,67,79,68,73,78,71,32,49, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,70,67,48,10, 54,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,54,66, 10,69,78,67,79,68,73,78,71,32,49,51,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,67,10,69,78,67,79, 68,73,78,71,32,49,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,51,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,54,68,10,69,78,67,79,68,73,78,71,32, 49,51,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,68,57,56,48, 10,69,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,67,68,56,48,10,67, 55,48,48,10,67,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,54, 69,10,69,78,67,79,68,73,78,71,32,49,51,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,54,48,48,10,49,70,56,48,10,51,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,54,70,10,69,78,67, 79,68,73,78,71,32,49,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,49,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,48,10,69,78,67,79,68,73,78,71, 32,49,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,70,48, 48,10,55,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 55,49,10,69,78,67,79,68,73,78,71,32,49,51,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,48,48,48,10,49,70,56,48,10,51,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,55,50,10,69,78, 67,79,68,73,78,71,32,49,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,67,48,48,10,69,54,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,48,48,10,67,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,55,51,10,69,78,67,79,68,73,78, 71,32,49,51,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,70,48,48,10,49,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,70, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,49,66,56,48, 10,48,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,52,10,69,78,67,79,68,73,78,71,32,49,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,55,48,48,10,51,66,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,55,53,10,69, 78,67,79,68,73,78,71,32,49,51,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,55,54,10,69,78,67,79,68,73, 78,71,32,49,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,55,55,10,69,78,67,79,68,73,78,71,32,49,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,56,10, 69,78,67,79,68,73,78,71,32,49,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,55,57,10,69,78,67,79,68, 73,78,71,32,49,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,51,48,48,48,10,49,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,53,55,65,10,69,78,67,79,68,73,78,71,32,49, 52,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,56,48,10,49,51, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,53,55,66, 10,69,78,67,79,68,73,78,71,32,49,52,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 49,56,48,10,49,66,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,67,10,69,78,67,79, 68,73,78,71,32,49,52,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,67,48,48,10,69,54,48,48,10,67,51,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,49,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,53,55,68,10,69,78,67,79,68,73,78,71,32, 49,52,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,53,55, 69,10,69,78,67,79,68,73,78,71,32,49,52,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,55,48,48,10,51,66,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,55,70,10,69,78,67, 79,68,73,78,71,32,49,52,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,68,56,48,10,67,69,67,48,10,67,67,67,48, 10,67,67,67,48,10,67,67,67,48,10,67,67,67,48,10, 68,67,67,48,10,54,67,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,48,10,69,78,67,79,68,73,78,71, 32,49,52,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,53, 56,49,10,69,78,67,79,68,73,78,71,32,49,52,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,70,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,49,56,48,10,51, 70,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,56,50,10,69,78, 67,79,68,73,78,71,32,49,52,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,56,51,10,69,78,67,79,68,73,78, 71,32,49,52,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,68,56,48,10,67,69,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,68,67,67,48, 10,54,67,67,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,52,10,69,78,67,79,68,73,78,71,32,49,52,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,67,56,48,10,48,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,53,56,53,10,69, 78,67,79,68,73,78,71,32,49,52,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,56,54,10,69,78,67,79,68,73, 78,71,32,49,52,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,67,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,51, 70,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,53,56,55,10,69,78,67,79,68,73,78,71,32,49,52, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,51,48,48,10,49,67,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,57,10, 69,78,67,79,68,73,78,71,32,49,52,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,53,56,65,10,69,78,67,79,68, 73,78,71,32,49,52,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,55,57,57,10,69,78,67,79,68,73,78,71, 32,49,52,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,56,48,49,10,69,78,67,79,68,73,78,71,32,49,52, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,48,48,48,48, 10,51,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,56,48, 48,10,69,78,67,79,68,73,78,71,32,49,52,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,55,67,48,48,10,48,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,56,48,50,10,69, 78,67,79,68,73,78,71,32,49,52,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,51,48,48,48,10,51,49,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,55,57,51,10,69,78,67,79, 68,73,78,71,32,49,52,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,55,57,52,10,69,78,67,79,68,73,78, 71,32,49,52,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,53,10,69,78,67,79,68,73,78,71,32,49, 52,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,54,48,48,10,48,48,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 57,56,10,69,78,67,79,68,73,78,71,32,49,52,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,55,57,55,10, 69,78,67,79,68,73,78,71,32,49,52,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,56,48,54,10,69,78,67, 79,68,73,78,71,32,49,52,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,55,57,54,10,69,78,67,79,68,73, 78,71,32,49,52,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,48,48,48,10,68,56,48,48, 10,49,66,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,56,48,55,10,69,78,67,79,68,73,78,71,32, 49,52,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,51,57,10,69,78,67,79,68,73,78,71,32,49,52,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,52,53, 10,69,78,67,79,68,73,78,71,32,49,52,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,70,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,56,52,49,10,69,78, 67,79,68,73,78,71,32,49,52,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,56,52,50,10,69,78,67,79,68, 73,78,71,32,49,52,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,56,48,52,10,69,78,67,79,68,73,78,71, 32,49,52,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,56,48,51,10,69,78,67,79,68,73,78,71,32,49,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,53, 56,10,69,78,67,79,68,73,78,71,32,49,52,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,51,56,48,48,10,49,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,51,56,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,53,67,52,10,69,78,67, 79,68,73,78,71,32,49,52,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,54,52,10,69,78,67,79,68,73, 78,71,32,49,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,51,56,48,10,67,51,56,48,10,54, 51,56,48,10,51,54,48,48,10,55,67,48,48,10,69,67, 48,48,10,67,54,48,48,10,67,51,48,48,10,54,49,56, 48,10,69,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,54,54,53,10,69,78,67,79,68,73,78,71,32, 49,52,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,70,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,54,54,10,69,78,67,79,68,73,78,71,32,49,52,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 56,48,48,10,55,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,69,48,48,10,54,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,54,55, 10,69,78,67,79,68,73,78,71,32,49,52,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,70,70,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,54,56,10,69,78, 67,79,68,73,78,71,32,49,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,54,57,10,69,78,67,79,68, 73,78,71,32,49,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,55,48,10,69,78,67,79,68,73,78,71, 32,49,52,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,51,69,48,48,10,48,70,48, 48,10,48,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,54,55,49,10,69,78,67,79,68,73,78,71,32,49,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,70,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,55, 50,10,69,78,67,79,68,73,78,71,32,49,52,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,48, 48,10,69,51,56,48,10,55,49,56,48,10,55,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,55,70,48,48,10,55,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,55,51,10,69, 78,67,79,68,73,78,71,32,49,52,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,56,48,48,10,51, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,55,52,10,69,78,67,79, 68,73,78,71,32,49,52,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,54,55,53,10,69,78,67,79,68,73,78, 71,32,49,52,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,48,48,10,70,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,70,70,56,48, 10,70,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,55,54,10,69,78,67,79,68,73,78,71,32,49, 53,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,67,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,54, 55,55,10,69,78,67,79,68,73,78,71,32,49,53,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 48,48,10,70,70,56,48,10,52,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,56,10, 69,78,67,79,68,73,78,71,32,49,53,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,48,48,10, 68,70,56,48,10,55,70,56,48,10,54,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,70,56,48,10,68,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,54,55,57,10,69,78,67, 79,68,73,78,71,32,49,53,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,56,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,48,10,69,78,67,79,68,73, 78,71,32,49,53,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,67,48, 48,10,51,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,54,56,49,10,69,78,67,79,68,73,78,71,32, 49,53,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,48,48,10,70,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,56,50,10,69,78,67,79,68,73,78,71,32,49,53,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 55,48,48,10,69,55,56,48,10,67,49,56,48,10,67,49, 56,48,10,54,49,56,48,10,51,49,56,48,10,49,57,56, 48,10,48,68,56,48,10,55,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,54,56,51, 10,69,78,67,79,68,73,78,71,32,49,53,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,48,48, 10,70,70,48,48,10,67,51,48,48,10,67,51,48,48,10, 69,51,48,48,10,69,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,56,52,10,69,78, 67,79,68,73,78,71,32,49,53,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,49,56, 48,10,55,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,70,70,56,48,10,70,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,56,53,10,69,78,67,79,68, 73,78,71,32,49,53,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,51,56,48,10,69,51,56,48,10, 54,51,48,48,10,54,54,48,48,10,54,67,48,48,10,55, 56,48,48,10,55,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,56,54,10,69,78,67,79,68,73,78,71, 32,49,53,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,51,56,48,10,69,51,56,48,10,55,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,70,70,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,54,56,55,10,69,78,67,79,68,73,78,71,32,49,53, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,70,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,54,56,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,56, 56,10,69,78,67,79,68,73,78,71,32,49,53,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,56,57,10,69, 78,67,79,68,73,78,71,32,49,53,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,67,68, 56,48,10,68,68,56,48,10,70,57,56,48,10,69,49,56, 48,10,70,70,48,48,10,70,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,57,48,10,69,78,67,79, 68,73,78,71,32,49,53,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,69, 49,56,48,10,69,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,55,49,54,10,69,78,67,79,68,73,78, 71,32,49,53,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,55,48,48,10,70,55,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,49,55,10,69,78,67,79,68,73,78,71,32,49, 53,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,55,48,48,10,70,55,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 49,56,10,69,78,67,79,68,73,78,71,32,49,53,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,55, 48,48,10,70,55,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,70,51,10,69,78, 67,79,68,73,78,71,32,49,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,53,70,52,10,69,78,67,79,68,73,78, 71,32,49,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,48,48,10,69,78,67,79,68,73,78,71,32,49,53,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,52,48,10,48,48,56,48,10,48,48,56,48, 10,70,70,67,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,48,49,10,69, 78,67,79,68,73,78,71,32,49,53,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,56,52,48,10,65,56,56,48, 10,57,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,48,50,10,69,78,67,79,68,73, 78,71,32,49,53,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,69,48,48,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,48,51,10,69,78,67,79,68,73,78,71,32,49,53, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,67, 48,10,56,54,52,48,10,55,66,56,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,51,56, 56,10,69,78,67,79,68,73,78,71,32,49,53,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,48,68,10,69,78,67, 79,68,73,78,71,32,49,53,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,70,48,48,10, 49,56,48,48,10,49,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,48,69,10,69,78,67,79,68,73,78,71, 32,49,53,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,57,48,52,48,10, 68,48,67,48,10,55,70,56,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 48,70,10,69,78,67,79,68,73,78,71,32,49,53,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,49,69,48,48,10,49,56,48, 48,10,49,66,48,48,10,48,69,48,48,10,49,67,48,48, 10,51,56,48,48,10,51,55,56,48,10,51,69,67,48,10, 51,56,67,48,10,55,70,56,48,10,54,70,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,49,48,10,69,78, 67,79,68,73,78,71,32,49,53,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 53,50,48,48,10,55,69,48,48,10,52,48,48,48,10,56, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,49,49,10,69,78,67,79,68,73,78, 71,32,49,53,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,67,48,48,10,53,48,48,48,10, 55,48,48,48,10,53,67,48,48,10,56,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,49,50,10,69,78,67,79,68,73,78,71,32,49,53,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,70,56,48,48,10,50,50,48,48,10,52,50,48,48,10, 52,50,48,48,10,49,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,49,51,10,69, 78,67,79,68,73,78,71,32,49,53,53,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,48,48,48, 10,49,56,48,48,10,65,53,48,48,10,70,68,48,48,10, 56,49,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,49,52,10,69,78,67,79,68,73, 78,71,32,49,53,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,56,48, 10,48,52,56,48,10,70,66,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,49,53,10,69,78,67,79,68,73,78,71,32,49,53, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,52,48,48,48,10,52,48,48,48,10,53,56,48,48, 10,54,56,48,48,10,70,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,48, 51,10,69,78,67,79,68,73,78,71,32,49,53,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,69,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,69,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,48,55,10,69, 78,67,79,68,73,78,71,32,49,53,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,48,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,48,57,10,69,78,67,79, 68,73,78,71,32,49,53,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,69,48,48,10,49,56,48,48,10, 49,70,48,48,10,51,70,48,48,10,51,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,49,48,10,69,78,67,79,68,73,78, 71,32,49,53,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,49,56,48,10, 55,70,56,48,10,54,70,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,49,49,10,69,78,67,79,68,73,78,71,32,49, 53,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,56,48,48,10,48,69,48,48,10,49,56,48,48, 10,48,52,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 49,50,10,69,78,67,79,68,73,78,71,32,49,53,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,49,56,48,48,10,48,69, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,70,48,48,10,49,57,56,48,10,49,70,56,48, 10,48,70,56,48,10,48,49,56,48,10,48,51,56,48,10, 48,55,48,48,10,49,69,48,48,10,55,67,48,48,10,55, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,49,51,10, 69,78,67,79,68,73,78,71,32,49,53,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,69,48,48,10,49,56,48, 48,10,48,69,48,48,10,49,56,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,49,52,10,69,78,67, 79,68,73,78,71,32,49,53,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,51,56,48, 48,10,54,49,67,48,10,48,51,67,48,10,48,54,48,48, 10,67,55,56,48,10,67,51,67,48,10,67,48,67,48,10, 69,48,67,48,10,55,70,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,49,53,10,69,78,67,79,68,73, 78,71,32,49,53,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,49,54,10,69,78,67,79,68,73,78,71,32, 49,53,55,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,49,55,10,69,78,67,79,68,73,78,71,32,49,53,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,55, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,49,56, 10,69,78,67,79,68,73,78,71,32,49,53,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 67,49,56,48,10,67,49,56,48,10,70,70,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,49,57,10,69,78, 67,79,68,73,78,71,32,49,53,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,50,48,10,69,78,67,79,68, 73,78,71,32,49,53,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,56,48,48,10,55,70,56,48,10,52,70,56,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,48,48,48,10,69,48,48, 48,10,55,70,56,48,10,51,70,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,50,49,10,69,78,67,79,68,73,78,71, 32,49,53,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,55,70,56,48,10,52,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,69,48,48,48,10,55, 70,56,48,10,51,70,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,52,50,50,10,69,78,67,79,68,73,78,71,32,49,53, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,51,56,48,48,10,55, 70,56,48,10,52,70,56,48,10,49,56,48,48,10,51,48, 48,48,10,54,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,69,48,48,48,10,55,70,56,48, 10,51,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,50, 51,10,69,78,67,79,68,73,78,71,32,49,53,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,50,52,10,69, 78,67,79,68,73,78,71,32,49,53,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,69,48,48,10,48,55,48,48,10,48,51, 48,48,10,48,51,48,48,10,51,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,50,53,10,69,78,67,79, 68,73,78,71,32,49,53,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,50,54,10,69,78,67,79,68,73,78, 71,32,49,53,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,56,48,48,10, 69,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,50,55,10,69,78,67,79,68,73,78,71,32,49, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,57,52,48,10,48,68,52,48,10,56, 70,67,48,10,56,55,56,48,10,56,52,48,48,10,67,67, 48,48,10,70,67,48,48,10,55,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 50,56,10,69,78,67,79,68,73,78,71,32,49,53,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,48,48, 48,48,10,48,54,67,48,10,48,54,67,48,10,48,48,48, 48,10,48,57,52,48,10,48,68,52,48,10,56,70,67,48, 10,56,55,56,48,10,56,54,48,48,10,67,67,48,48,10, 70,67,48,48,10,55,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,50,57,10, 69,78,67,79,68,73,78,71,32,49,53,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 66,67,48,10,48,69,52,48,10,56,70,67,48,10,56,55, 56,48,10,56,52,48,48,10,67,67,48,48,10,70,67,48, 48,10,55,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,51,48,10,69,78,67, 79,68,73,78,71,32,49,53,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,49,56,48,10,48,66,67,48, 10,48,69,52,48,10,56,70,67,48,10,56,55,56,48,10, 56,52,48,48,10,67,67,48,48,10,70,67,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,51,49,10,69,78,67,79,68,73, 78,71,32,49,53,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,51,50,10,69,78,67,79,68,73,78,71,32, 49,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,48,48,48,10,51,51,56,48, 10,51,55,67,48,10,51,67,67,48,10,51,56,67,48,10, 70,70,67,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,51,51,10,69,78,67,79,68,73,78,71,32,49,53,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,51,67, 48,48,10,51,48,48,48,10,51,54,48,48,10,49,67,48, 48,10,51,56,48,48,10,55,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,48,48,48,10,51,70,56,48,10, 49,70,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,51,52, 10,69,78,67,79,68,73,78,71,32,49,53,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,67,48,48,10, 51,48,48,48,10,51,54,48,48,10,49,67,48,48,10,51, 56,48,48,10,55,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,48,48,48,10,51,70,56,48,10,49,70,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,52,48,10,69,78, 67,79,68,73,78,71,32,49,54,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,52,49,10,69,78,67,79,68, 73,78,71,32,49,54,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,55,48,48,10, 48,68,56,48,10,52,68,56,48,10,67,55,56,48,10,67, 49,56,48,10,70,70,56,48,10,55,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,52,50,10,69,78,67,79,68,73,78,71, 32,49,54,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,66, 48,48,10,49,66,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,48,57,56,48,10,67,57,56,48, 10,67,70,56,48,10,67,55,56,48,10,67,49,56,48,10, 69,51,48,48,10,55,69,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,52,52,51,10,69,78,67,79,68,73,78,71,32,49,54, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,57,56,48,10, 49,57,56,48,10,51,49,56,48,10,49,57,56,48,10,51, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,52,52, 52,10,69,78,67,79,68,73,78,71,32,49,54,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,51,56,48,10,51,70,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,52,53,10,69, 78,67,79,68,73,78,71,32,49,54,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,70, 48,48,10,49,49,48,48,10,51,70,48,48,10,55,70,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,52,54,10,69,78,67,79, 68,73,78,71,32,49,54,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,57,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,69,51,56,48,10,55,70,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,52,55,48,10,69,78,67,79,68,73,78, 71,32,49,54,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,55,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,52,52,56,10,69,78,67,79,68,73,78,71,32,49, 54,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,52, 52,57,10,69,78,67,79,68,73,78,71,32,49,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,67,48,10,48,51,67, 48,10,48,54,48,48,10,67,55,56,48,10,67,51,67,48, 10,67,48,67,48,10,69,48,67,48,10,55,70,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,52,53,48,10, 69,78,67,79,68,73,78,71,32,49,54,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,67,48,10,48,51,67,48,10,48, 54,48,48,10,67,55,56,48,10,67,51,67,48,10,67,48, 67,48,10,69,48,67,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,49,66,48,48,10,49,66,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,52,53,49,10,69,78,67, 79,68,73,78,71,32,49,54,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,51,48,48,48,10,54, 48,48,48,10,68,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,52,53,50,10,69,78,67,79,68,73, 78,71,32,49,54,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,53,52,48,48,10,68,67,48,48,10, 53,67,48,48,10,55,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,52,53,51,10,69,78,67,79,68,73,78,71,32, 49,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,67,48,48,48,10,66,48,48,48,10,54,48, 48,48,10,67,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 52,53,52,10,69,78,67,79,68,73,78,71,32,49,54,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,52,53,53, 10,69,78,67,79,68,73,78,71,32,49,54,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,55,48, 48,48,10,53,48,48,48,10,55,48,48,48,10,50,48,48, 48,10,67,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,52,53,54,10,69,78, 67,79,68,73,78,71,32,49,54,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,56,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,52,53,55,10,69,78,67,79,68, 73,78,71,32,49,54,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,52,53,56,10,69,78,67,79,68,73,78,71, 32,49,54,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,57,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 53,51,10,69,78,67,79,68,73,78,71,32,49,54,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,49,56,48,10,55,70,56,48,10,54, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,53,52,10,69,78, 67,79,68,73,78,71,32,49,54,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,49,56,48,48,10,48, 69,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,53,53,10,69,78,67,79,68,73,78, 71,32,49,54,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,56,48,48,10,48,69,48,48,10, 49,56,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,53,54,10,69,78,67,79,68,73,78,71,32,49,54,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,53,55,10,69, 78,67,79,68,73,78,71,32,49,54,50,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,56,48,48,10, 49,67,48,48,10,49,52,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,53,56,10,69,78,67,79,68,73, 78,71,32,49,54,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,52,48,48,10,50, 52,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,51,57,50,10,69,78,67,79,68,73,78,71,32, 49,54,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,51,67,48,48,10,51,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 51,57,51,10,69,78,67,79,68,73,78,71,32,49,54,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,51,57,52, 10,69,78,67,79,68,73,78,71,32,49,54,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,55,49,56,48,10,51,70,56,48, 10,51,70,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,51,57,53,10,69,78, 67,79,68,73,78,71,32,49,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,54,67,48,10,54, 54,67,48,10,55,54,67,48,10,51,70,67,48,10,51,70, 56,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,51,57,54,10,69,78,67,79,68, 73,78,71,32,49,54,51,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,51,56,48,48,10,51,48,48,48,10,49,69,48,48,10, 48,69,48,48,10,49,67,48,48,10,51,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,70,48,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,51,57,55,10,69,78,67,79,68,73,78,71, 32,49,54,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,67, 48,48,10,48,69,48,48,10,49,70,48,48,10,51,51,48, 48,10,51,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,51,57,56,10,69,78,67,79,68,73,78,71,32,49,54, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,51,48,48,10,55,70,48,48,10,51,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 56,48,10,48,51,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,51,57, 57,10,69,78,67,79,68,73,78,71,32,49,54,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,52,48,48,10,69, 78,67,79,68,73,78,71,32,49,54,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,55,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,52,48,49,10,69,78,67,79, 68,73,78,71,32,49,54,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,70,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,56,48,10,48,51,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,51,56,49,10,69,78,67,79,68,73,78, 71,32,49,54,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,52,48,10,55,56,67,48,10,55,57,56,48,10,51,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,57,56, 48,10,51,51,67,48,10,54,51,67,48,10,52,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,54,66,10,69,78,67,79,68,73,78,71,32,49,54,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,54,67,10,69, 78,67,79,68,73,78,71,32,49,54,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,54,51,49,54,55,10,69,78,67,79, 68,73,78,71,32,49,54,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,55,70,48,48,10,51,69,48,48, 10,49,67,48,48,10,51,54,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,54,69,10,69,78,67,79,68,73,78,71,32, 49,54,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,54, 70,10,69,78,67,79,68,73,78,71,32,49,54,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,70,48,48, 10,48,57,56,48,10,67,57,56,48,10,67,70,56,48,10, 67,55,56,48,10,67,49,56,48,10,69,51,48,48,10,55, 69,48,48,10,51,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,55,48,10,69,78,67, 79,68,73,78,71,32,49,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,55,49,10,69,78,67,79,68,73,78,71, 32,49,54,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,49,68,48,48,10,50,70,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 55,50,10,69,78,67,79,68,73,78,71,32,49,54,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,56,48,48,10,50, 69,48,48,10,51,56,48,48,10,50,48,48,48,10,48,52, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,55,51,10,69,78, 67,79,68,73,78,71,32,49,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,56,48,48,10, 50,69,48,48,10,51,56,48,48,10,50,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,55,52,10,69,78,67,79,68,73,78, 71,32,49,54,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,69,48,48,10,49,56,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,55,53,10,69,78,67,79,68,73,78,71,32,49,54,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,57,67,48,10,49,66,48,48,10,49,57,67,48,10,49, 66,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,55,54,10,69, 78,67,79,68,73,78,71,32,49,54,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,54,48,48,10,48,51,56,48,10,48, 54,48,48,10,48,48,48,48,10,49,67,48,48,10,51,69, 48,48,10,51,51,48,48,10,51,70,48,48,10,49,70,48, 48,10,48,51,48,48,10,48,55,48,48,10,48,69,48,48, 10,51,67,48,48,10,70,56,48,48,10,69,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,55,55,10,69,78,67,79,68,73, 78,71,32,49,54,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,53,51,56,48,10, 55,54,48,48,10,50,51,56,48,10,67,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,55,56,10,69,78,67,79,68,73,78,71,32,49,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,67,48,10,48,51,48,48,10,48,49,67,48,10, 48,51,48,48,10,48,48,48,48,10,48,51,56,48,10,48, 55,56,48,10,48,67,48,48,10,67,70,48,48,10,67,55, 56,48,10,67,49,56,48,10,67,49,56,48,10,70,70,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,49, 49,10,69,78,67,79,68,73,78,71,32,49,54,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,50,67,48, 48,10,51,52,48,48,10,55,56,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,55,65,10,69,78,67, 79,68,73,78,71,32,49,54,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,55,66,10,69,78,67,79,68,73,78,71, 32,49,54,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 55,67,10,69,78,67,79,68,73,78,71,32,49,54,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,55,70,48,48,10,48,56,48,48,10,49,52,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,55,68,10,69,78, 67,79,68,73,78,71,32,49,54,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,49,56,48,48,10,68,57,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,53,48,54,10,69,78,67,79,68, 73,78,71,32,49,54,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,67, 49,56,48,10,70,70,56,48,10,55,70,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,55,70,10,69,78,67,79,68,73,78,71,32,49, 54,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,56,48, 10,69,78,67,79,68,73,78,71,32,49,54,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,67,49,56,48,10,70,70,56,48,10,55, 70,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,51,54,48,48,10,51,54,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,56,49,10,69,78,67,79, 68,73,78,71,32,49,54,54,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,48,48, 48,10,49,67,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,56,48,48,10,55,70,56,48,10,52,70,56,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,69,48, 48,48,10,55,70,56,48,10,51,70,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,56,50,10,69,78,67,79,68,73,78,71,32, 49,54,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,56,48,48, 10,55,70,56,48,10,52,70,56,48,10,49,56,48,48,10, 51,48,48,48,10,54,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,69,48,48,48,10,55,70, 56,48,10,51,70,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,56, 51,10,69,78,67,79,68,73,78,71,32,49,54,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,68,66,48,48,10,68,66,48,48,10,67, 48,48,48,10,69,48,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,56,52,10,69,78,67, 79,68,73,78,71,32,49,54,54,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,55,70,56,48,10,52,70,56,48, 10,49,56,48,48,10,51,54,48,48,10,54,54,48,48,10, 67,48,48,48,10,67,54,48,48,10,67,54,48,48,10,69, 48,48,48,10,55,70,56,48,10,51,70,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,56,53,10,69,78,67,79,68,73,78,71, 32,49,54,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,51,56,48, 48,10,55,70,56,48,10,52,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,69,48,48,48,10,55, 70,56,48,10,51,70,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,53,48,55,10,69,78,67,79,68,73,78,71,32,49,54, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,56,48,48,10,55, 70,56,48,10,52,70,56,48,10,49,56,48,48,10,51,48, 48,48,10,55,66,48,48,10,68,66,48,48,10,67,48,48, 48,10,67,67,48,48,10,69,67,48,48,10,55,70,56,48, 10,51,70,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,56,55,10, 69,78,67,79,68,73,78,71,32,49,54,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,56,48,48,10,55,70,56,48,10,52, 70,56,48,10,49,56,48,48,10,51,68,56,48,10,54,68, 56,48,10,67,48,48,48,10,67,68,56,48,10,67,68,56, 48,10,69,48,48,48,10,55,70,56,48,10,51,70,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,53,49,50,10,69,78,67, 79,68,73,78,71,32,49,54,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 48,48,48,10,49,48,48,48,10,49,54,48,48,10,49,65, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,51,70,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,56,57,10,69,78,67,79,68,73,78,71, 32,49,54,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,69,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,70,48,48,10,51,69,48,48,10,48,52,48,48,10, 48,65,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 56,65,10,69,78,67,79,68,73,78,71,32,49,54,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,69,48,48,10,48,55,48, 48,10,48,51,48,48,10,48,51,48,48,10,51,70,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,56,66,10,69,78, 67,79,68,73,78,71,32,49,54,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,49,54,48,48,10,49, 65,48,48,10,51,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,56,67,10,69,78,67,79,68,73,78, 71,32,49,54,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,66,48,48,10,49, 66,48,48,10,48,48,48,48,10,48,67,48,48,10,48,69, 48,48,10,48,55,48,48,10,48,51,48,48,10,48,51,48, 48,10,51,70,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,56,68,10,69,78,67,79,68,73,78,71,32,49,54,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,69,48,48,10,48,55, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,70,48, 48,10,51,69,48,48,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,56,69,10,69, 78,67,79,68,73,78,71,32,49,54,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,69,48,48,10,48,55,48,48,10,48,51, 48,48,10,48,51,48,48,10,51,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,56,70,10,69,78,67,79,68,73, 78,71,32,49,54,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 69,48,48,10,48,55,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,57,48,10,69,78,67,79,68,73,78,71,32,49,54, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,66,48,48,10,49,66,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,69,48,48,10,48, 55,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,49, 51,10,69,78,67,79,68,73,78,71,32,49,54,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,48,48,48,10,49,48,48,48,10,49,54,48, 48,10,49,65,48,48,10,51,67,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,57,50,10,69,78,67, 79,68,73,78,71,32,49,54,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,65,48,48,10,48,65,48,48,10,48,52,48, 48,10,48,52,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,55,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,55,48,48,10,48,69,48,48,10,51,67,48,48,10,70, 56,48,48,10,69,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,57,51,10,69,78,67,79,68,73,78,71, 32,49,54,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,48,48,10, 48,69,48,48,10,51,67,48,48,10,70,67,48,48,10,69, 65,48,48,10,48,52,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 57,52,10,69,78,67,79,68,73,78,71,32,49,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,57,56,48,10,69,49,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,57,53,10,69,78, 67,79,68,73,78,71,32,49,54,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,69,56,48,10, 70,65,56,48,10,69,49,48,48,10,48,49,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,57,54,10,69,78,67,79,68,73,78, 71,32,49,54,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,51,48,48,10,51,51,48,48,10,51,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,66,48,48,10, 69,51,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,57,55,10,69,78,67,79,68,73,78,71,32,49,54,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,48,48,10,49,66,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,55,48,48,10,48,69,48,48, 10,51,67,48,48,10,70,56,48,48,10,69,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,53,48,56, 10,69,78,67,79,68,73,78,71,32,49,54,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,66,48,48,10,49,66,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,55,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,55,48,48,10,48,69,48,48,10,51,67, 48,48,10,70,56,48,48,10,69,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,57,57,10,69,78,67,79, 68,73,78,71,32,49,54,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,49,66,48,48, 10,49,66,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,57,65,10,69,78,67,79,68,73,78,71,32, 49,54,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,57,52,48,10,48,68,52,48,10, 56,70,67,48,10,56,55,56,48,10,56,52,48,48,10,67, 68,56,48,10,70,68,56,48,10,55,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,57, 66,10,69,78,67,79,68,73,78,71,32,49,54,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,57,52,48,10,48,68,52,48,10,56,70,67,48,10, 56,70,56,48,10,56,56,48,48,10,67,69,67,48,10,70, 69,67,48,10,55,48,48,48,10,48,51,48,48,10,48,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,57,67,10,69,78,67, 79,68,73,78,71,32,49,54,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,68,56, 48,10,48,68,56,48,10,48,48,48,48,10,48,57,52,48, 10,48,68,52,48,10,56,70,67,48,10,56,70,56,48,10, 56,56,48,48,10,67,69,67,48,10,70,69,67,48,10,55, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,57,68,10,69,78,67,79,68,73,78,71, 32,49,54,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,66,67,48,10,48,69,52,48, 10,56,70,67,48,10,56,70,56,48,10,56,56,48,48,10, 67,69,67,48,10,70,69,67,48,10,55,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 57,69,10,69,78,67,79,68,73,78,71,32,49,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,48,48,48,10,48,49,56, 48,10,48,66,67,48,10,48,69,52,48,10,56,70,67,48, 10,56,55,56,48,10,56,52,48,48,10,67,67,48,48,10, 70,67,48,48,10,55,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,57,70,10,69,78, 67,79,68,73,78,71,32,49,54,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,51,51,48,48,10,51, 48,48,48,10,51,54,67,48,10,51,54,67,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,65,48,10,69,78,67,79,68,73,78, 71,32,49,54,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,48,48,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,48,48,48,10,51,56, 48,48,10,55,56,48,48,10,54,48,48,48,10,54,67,48, 48,10,51,56,48,48,10,55,48,48,48,10,69,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,69,54,48,48,10, 55,69,48,48,10,51,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,65,49,10,69,78,67,79,68,73,78,71,32,49,54,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,55,48,48,10,48,68,56,48,10,52,68, 56,48,10,67,55,56,48,10,67,49,56,48,10,70,70,56, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,65,50,10,69, 78,67,79,68,73,78,71,32,49,54,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 55,48,48,10,48,68,56,48,10,52,68,56,48,10,67,55, 56,48,10,67,49,56,48,10,70,70,56,48,10,55,70,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,65,51,10,69,78,67,79,68,73, 78,71,32,49,54,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,52,68,56,48,10,67,55,56,48,10,67,49, 56,48,10,70,70,56,48,10,55,70,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,53,48,53,10,69,78,67,79,68,73,78,71,32, 49,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,48,48,48,10,48,55,48,48,10,48,68,56,48, 10,52,68,56,48,10,67,55,56,48,10,67,49,56,48,10, 70,70,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,65, 53,10,69,78,67,79,68,73,78,71,32,49,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,54,67,48,10,48, 54,67,48,10,48,48,48,48,10,48,51,48,48,10,48,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,65,54,10,69,78,67, 79,68,73,78,71,32,49,55,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,48,48,48,10,48,68, 56,48,10,48,68,56,48,10,48,48,48,48,10,48,55,48, 48,10,48,68,56,48,10,52,68,56,48,10,67,55,56,48, 10,67,49,56,48,10,70,70,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,65,55,10,69,78,67,79,68,73,78,71, 32,49,55,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,48,57,56,48,10,67,57,56,48, 10,67,70,56,48,10,67,55,56,48,10,67,49,56,48,10, 69,51,48,48,10,55,69,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 65,56,10,69,78,67,79,68,73,78,71,32,49,55,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,66,48,48,10,49,66, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,70,48, 48,10,48,57,56,48,10,67,57,56,48,10,67,70,56,48, 10,67,55,56,48,10,67,49,56,48,10,69,51,48,48,10, 55,69,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,65,57,10,69,78, 67,79,68,73,78,71,32,49,55,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,67,48,10,48,49,67,48,10,48,51, 56,48,10,48,55,48,48,10,48,51,48,48,10,48,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,65,65,10,69,78,67,79,68,73,78, 71,32,49,55,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,55,70,56,48,10,51,70,67,48,10,56,48,52, 48,10,70,70,67,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,65,66,10,69,78,67,79,68,73,78,71,32,49,55,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,67,48,10,48,49,56,48,10,48, 51,56,48,10,48,55,52,48,10,48,69,56,48,10,48,54, 48,48,10,48,51,48,48,10,67,51,48,48,10,70,70,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,65,67,10,69, 78,67,79,68,73,78,71,32,49,55,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,57,56,48,10,49,57,56,48,10,51, 49,56,48,10,49,57,56,48,10,51,49,56,48,10,48,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,65,68,10,69,78,67,79,68,73, 78,71,32,49,55,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,68,56,48,10, 48,57,56,48,10,49,57,56,48,10,51,49,56,48,10,49, 57,56,48,10,51,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,65,69,10,69,78,67,79,68,73,78,71,32,49,55, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,57,56,48,10, 49,57,56,48,10,51,49,56,48,10,49,57,56,48,10,51, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,53,48, 57,10,69,78,67,79,68,73,78,71,32,49,55,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,66,48,10,69,78,67, 79,68,73,78,71,32,49,55,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,48,48,10,48,50, 67,48,10,48,53,56,48,10,48,66,56,48,10,49,55,52, 48,10,48,69,56,48,10,48,54,48,48,10,48,51,48,48, 10,67,51,48,48,10,70,70,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,66,49,10,69,78,67,79,68,73,78,71, 32,49,55,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,68,56,48,10,48,68,56,48,10,48, 48,48,48,10,48,48,56,48,10,48,49,48,48,10,48,50, 67,48,10,48,53,67,48,10,48,66,56,48,10,48,55,48, 48,10,48,51,48,48,10,48,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 66,50,10,69,78,67,79,68,73,78,71,32,49,55,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,49,48,48,10,48,50,67,48,10,48,53, 67,48,10,48,66,56,48,10,48,55,48,48,10,48,51,48, 48,10,48,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,55,70,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,66,51,10,69,78, 67,79,68,73,78,71,32,49,55,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,48, 49,48,48,10,48,50,67,48,10,48,53,67,48,10,48,66, 56,48,10,48,55,48,48,10,48,51,48,48,10,48,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,66,52,10,69,78,67,79,68,73,78, 71,32,49,55,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,54,67,56,48,10,54,68,48,48,10,48, 50,67,48,10,48,53,67,48,10,48,66,56,48,10,48,55, 48,48,10,48,51,48,48,10,48,49,56,48,10,67,49,56, 48,10,70,70,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,66,53,10,69,78,67,79,68,73,78,71,32,49,55,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,50,56,48,10,48,50,56,48,10,48,49,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,51,56,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,66,54,10,69, 78,67,79,68,73,78,71,32,49,55,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,51,56,48,10,51,70,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,66,55,10,69,78,67,79,68,73, 78,71,32,49,55,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,51,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,66,56,10,69,78,67,79,68,73,78,71,32,49,55, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,51,56,48,10,51,70,48,48,10,49,69,48, 48,10,49,66,48,48,10,49,66,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,66,57,10, 69,78,67,79,68,73,78,71,32,49,55,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,57,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,69,51,56,48,10,55,70,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,53,55,53,49,52,10,69,78,67, 79,68,73,78,71,32,49,55,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,69,51,56,48,10,55,70,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,66,66,10,69,78,67,79,68,73,78,71, 32,49,55,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,50,48, 48,48,10,50,67,48,48,10,51,52,48,48,10,55,56,48, 48,10,48,48,48,48,10,48,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 69,51,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 66,67,10,69,78,67,79,68,73,78,71,32,49,55,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,69,51,56,48,10, 55,70,48,48,10,51,69,48,48,10,48,65,48,48,10,48, 52,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,66,68,10,69,78, 67,79,68,73,78,71,32,49,55,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,66,69,10,69,78,67,79,68,73,78, 71,32,49,55,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,55,56,48,10,51,67,56, 48,10,70,70,56,48,10,54,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,66,70,10,69,78,67,79,68,73,78,71,32,49,55,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,51,56,48,48,10,55,70, 56,48,10,52,70,56,48,10,49,56,48,48,10,51,48,48, 48,10,55,66,48,48,10,68,66,48,48,10,67,48,48,48, 10,67,67,48,48,10,69,67,48,48,10,55,70,56,48,10, 51,70,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,67,48,10,69, 78,67,79,68,73,78,71,32,49,55,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,48,48,48,10,49,67,48,48,10,51,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,55, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,67,49,10,69,78,67,79,68,73, 78,71,32,49,55,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,51,67,48,10,49,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,67,50,10,69,78,67,79,68,73,78,71,32,49,55, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,56,48,48,10,48,69,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,49,51, 67,48,10,49,49,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,67,51,10, 69,78,67,79,68,73,78,71,32,49,55,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,66,48,48,10, 49,66,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,51,67,48,10,49,49, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,67,52,10,69,78,67,79,68, 73,78,71,32,49,55,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,48,48,10,51, 51,48,48,10,49,70,48,48,10,48,70,48,48,10,50,51, 48,48,10,53,55,48,48,10,50,69,48,48,10,51,67,48, 48,10,70,56,48,48,10,69,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,67,53,10,69,78,67,79,68,73,78,71,32,49, 55,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,67,54, 10,69,78,67,79,68,73,78,71,32,49,55,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,52,48,48,10,49,52,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,51,48,48,10,51,70,48,48,10,49, 70,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,67,55,10,69,78,67,79, 68,73,78,71,32,49,55,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,49,52,48, 48,10,49,67,48,48,10,48,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 51,51,48,48,10,51,70,48,48,10,49,70,48,48,10,48, 51,48,48,10,48,55,48,48,10,48,69,48,48,10,51,67, 48,48,10,70,56,48,48,10,69,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,67,56,10,69,78,67,79,68,73,78,71,32, 49,55,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,69,48,48,10,51,51,48,48,10, 51,70,48,48,10,49,70,48,48,10,48,51,48,48,10,48, 55,48,48,10,48,69,48,48,10,51,67,48,48,10,70,56, 48,48,10,69,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,67, 57,10,69,78,67,79,68,73,78,71,32,49,55,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,51,54,48, 48,10,50,50,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,48,48,10, 49,70,48,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,67,65,10,69,78,67, 79,68,73,78,71,32,49,55,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,54,48,48,10,51,54,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,69,48,48, 10,51,51,48,48,10,51,70,48,48,10,49,70,48,48,10, 48,51,48,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,67,66,10,69,78,67,79,68,73,78,71, 32,49,55,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,69,48,48,10,51,51,48,48, 10,51,70,48,48,10,49,70,48,48,10,48,51,48,48,10, 48,55,48,48,10,48,69,48,48,10,51,67,48,48,10,70, 56,48,48,10,69,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 67,67,10,69,78,67,79,68,73,78,71,32,49,55,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,67,48,10,48,51,67, 48,10,48,54,48,48,10,67,55,56,48,10,67,51,67,48, 10,67,48,67,48,10,69,48,67,48,10,55,70,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,67,68,10,69,78, 67,79,68,73,78,71,32,49,55,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,67,48,10,48,51,67,48,10,51,54,48, 48,10,70,55,56,48,10,65,51,67,48,10,50,48,67,48, 10,51,48,67,48,10,51,70,56,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,67,69,10,69,78,67,79,68,73,78, 71,32,49,55,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 56,48,48,10,51,56,48,48,10,49,48,48,48,10,49,49, 67,48,10,48,51,67,48,10,48,54,48,48,10,67,55,56, 48,10,67,51,67,48,10,67,48,67,48,10,69,48,67,48, 10,55,70,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,67,70,10,69,78,67,79,68,73,78,71,32,49,55,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,51,48,48,10,51,70,48, 48,10,49,70,48,48,10,48,51,48,48,10,48,55,48,48, 10,48,69,48,48,10,51,67,48,48,10,70,56,48,48,10, 69,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,68,48,10,69, 78,67,79,68,73,78,71,32,49,55,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,67,48,10,48, 51,67,48,10,48,54,48,48,10,67,55,56,48,10,67,51, 67,48,10,67,48,67,48,10,69,48,67,48,10,55,70,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,68,49,10,69,78,67,79,68,73, 78,71,32,49,55,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,67,48,10,48,51,67,48,10,48, 54,48,48,10,67,55,56,48,10,67,51,67,48,10,67,48, 67,48,10,69,48,67,48,10,55,70,56,48,10,51,70,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,53,55,53,49,57,10,69,78,67,79,68,73,78,71,32, 49,55,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 54,56,48,48,10,67,48,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,68, 51,10,69,78,67,79,68,73,78,71,32,49,55,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,67,48,48,48,10,55,48,48,48,10,67,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,54,56,48,48,10, 67,48,48,48,10,70,70,67,48,10,70,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,68,52,10,69,78,67, 79,68,73,78,71,32,49,55,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,53,51,52,10,69,78,67,79,68,73, 78,71,32,49,55,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 69,48,48,10,51,55,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,68,54,10,69,78,67,79,68,73,78,71,32,49,55, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,50,48,48,48,10,50,54,48,48,10,51,65,48,48, 10,55,69,48,48,10,56,48,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,68,55,10, 69,78,67,79,68,73,78,71,32,49,55,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,50,65,48, 48,10,50,52,48,48,10,50,65,48,48,10,55,69,48,48, 10,56,48,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,68,56,10,69,78,67,79,68, 73,78,71,32,49,55,53,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,49,56,48,48,10,51,67,48, 48,10,50,52,48,48,10,55,67,48,48,10,67,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,68,57,10,69,78,67,79,68,73,78,71,32,49, 55,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,57,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,51,48,48,48,10,69,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,68,65, 10,69,78,67,79,68,73,78,71,32,49,55,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,54,48, 48,48,10,57,48,48,48,10,54,48,48,48,10,56,48,48, 48,10,65,48,48,48,10,56,56,48,48,10,55,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,68,66,10,69,78,67,79, 68,73,78,71,32,49,55,53,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,50,48, 48,48,10,48,48,48,48,10,53,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,68,67,10,69,78,67,79,68,73,78,71,32, 49,55,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,50,65,48,48,10,66,67,48,48,10,65,48, 48,48,10,69,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,68, 68,10,69,78,67,79,68,73,78,71,32,49,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,54,49,56, 48,10,66,70,52,48,10,52,48,56,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,52,48,56,48,10,66,70,52,48,10,54, 49,56,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,68,69,10,69,78,67, 79,68,73,78,71,32,49,55,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,55,55,48,48,10,54,51,48,48,10,52,57,48,48, 10,57,52,56,48,10,52,57,48,48,10,54,51,48,48,10, 55,55,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,68,70,10,69,78,67,79,68,73,78,71, 32,49,55,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,56,48,48,10,49, 67,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 69,48,10,69,78,67,79,68,73,78,71,32,49,55,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,69,49,10,69,78, 67,79,68,73,78,71,32,49,55,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 52,56,48,48,10,49,67,48,48,10,69,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,69,50,10,69,78,67,79,68,73,78, 71,32,49,55,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,50,48,48,48,10,53,48,48,48,10, 55,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,69,51,10,69,78,67,79,68,73,78,71,32,49,55,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,53,48,48,10,53,69,48,48,10,53,48,48,48,10, 55,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,69,52,10,69, 78,67,79,68,73,78,71,32,49,55,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,56,52,48,48,10,70,56,48,48,10,56,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,69,53,10,69,78,67,79,68,73, 78,71,32,49,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,52,48,48,10,48, 65,48,48,10,48,69,48,48,10,48,50,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,69,54,10,69,78,67,79,68,73,78,71,32,49,55, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 48,48,48,10,54,56,48,48,10,56,48,48,48,10,55,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,69,55,10, 69,78,67,79,68,73,78,71,32,49,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,56,48,48,10,51,52,48,48,10,52,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,69,56,10,69,78,67,79,68, 73,78,71,32,49,55,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,50,48,48,48,10,48,56,48, 48,10,52,56,48,48,10,52,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,69,57,10,69,78,67,79,68,73,78,71,32,49, 55,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,56,48,48,10,49,52,48, 48,10,50,65,48,48,10,53,53,48,48,10,65,50,56,48, 10,53,53,48,48,10,50,65,48,48,10,50,65,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,65,48,48,10,50, 65,48,48,10,50,65,48,48,10,52,49,48,48,10,70,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,69,65, 10,69,78,67,79,68,73,78,71,32,49,55,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,52,48,48,10,50,50, 48,48,10,49,52,48,48,10,48,56,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,69,66,10,69,78,67,79, 68,73,78,71,32,49,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,49,52, 48,48,10,50,50,48,48,10,49,52,48,48,10,48,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,69,67,10,69,78,67,79,68,73,78,71,32, 49,55,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,69, 68,10,69,78,67,79,68,73,78,71,32,49,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,50,56,48,48,10,51,56,48,48,10,52, 48,48,48,10,52,48,48,48,10,52,48,48,48,10,52,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,69,69,10,69,78,67, 79,68,73,78,71,32,49,55,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,67,48,48,10,51,54, 48,48,10,50,50,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,55,48,48,10,48,51,48,48, 10,48,51,48,48,10,51,70,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,69,70,10,69,78,67,79,68,73,78,71, 32,49,55,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,52, 48,48,10,48,69,48,48,10,49,66,48,48,10,49,49,48, 48,10,48,48,48,48,10,48,54,48,48,10,48,55,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,48,48,10, 48,69,48,48,10,51,67,48,48,10,70,56,48,48,10,69, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,54, 70,48,10,69,78,67,79,68,73,78,71,32,49,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,51,67,48,48,10,51,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,54,70,49,10,69,78, 67,79,68,73,78,71,32,49,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,54,70,50,10,69,78,67,79,68,73,78, 71,32,49,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,55, 49,56,48,10,51,70,56,48,10,51,70,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 54,70,51,10,69,78,67,79,68,73,78,71,32,49,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,67,48,10,54,54,67,48,10,55,54,67,48,10,51, 70,67,48,10,51,70,56,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,54,70,52,10,69, 78,67,79,68,73,78,71,32,49,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,51,56,48,10,48,55,56,48,10, 54,54,48,48,10,55,54,48,48,10,51,70,56,48,10,49, 70,56,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,54,70,53,10,69,78,67,79,68,73, 78,71,32,49,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,54,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,55,70,56,48,10,51,66,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,54,70,54,10,69,78,67,79,68,73,78,71,32,49,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,49,70,48,48,10,51,56,48,48,10, 51,48,48,48,10,51,49,56,48,10,49,70,56,48,10,48, 70,48,48,10,48,69,48,48,10,49,67,48,48,10,51,56, 48,48,10,55,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,54,70,55,10, 69,78,67,79,68,73,78,71,32,49,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,51,56,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,54,70,56,10,69,78,67,79,68, 73,78,71,32,49,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,55,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,54,70,57,10,69,78,67,79,68,73,78,71,32,49, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,70,48,48,10,49,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,56,48,10,48,51,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,54,70,65, 10,69,78,67,79,68,73,78,71,32,49,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,48,48,48, 10,48,54,67,48,10,48,54,67,48,10,48,48,48,48,10, 48,57,52,48,10,48,68,52,48,10,56,70,67,48,10,56, 55,56,48,10,56,54,48,48,10,67,67,67,48,10,70,67, 67,48,10,55,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,54,70,66,10,69,78,67,79, 68,73,78,71,32,49,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,49,56,48,10,48,66,67,48,10, 48,69,52,48,10,56,70,67,48,10,56,55,56,48,10,56, 52,48,48,10,67,68,56,48,10,70,68,56,48,10,55,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,54,70,67,10,69,78,67,79,68,73,78,71,32, 49,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,67,48,48,10,51,48,48,48,10,51,54,48,48,10, 49,67,48,48,10,51,56,48,48,10,55,54,48,48,10,54, 54,48,48,10,54,48,48,48,10,55,48,48,48,10,51,70, 56,48,10,49,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,54,70, 68,10,69,78,67,79,68,73,78,71,32,49,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,49,56,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,56,48,48,10,48,48,48,48,10,48,65,48,48,10,48, 65,48,48,10,48,65,48,48,10,48,65,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,54,70,69,10,69,78,67, 79,68,73,78,71,32,49,55,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,70,48,48, 10,49,49,48,48,10,51,70,48,48,10,55,70,48,48,10, 54,48,48,48,10,54,65,48,48,10,54,65,48,48,10,54, 65,48,48,10,54,65,48,48,10,54,65,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,54,70,70,10,69,78,67,79,68,73,78,71, 32,49,55,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,69,48,48,10,49,66,48,48,10,49,49, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,55,56,48,10,51,67,56,48, 10,70,70,56,48,10,54,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 48,49,10,69,78,67,79,68,73,78,71,32,51,53,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,50,49,48,48,10,52,48,56, 48,10,54,48,56,48,10,50,48,56,48,10,50,48,56,48, 10,50,48,56,48,10,50,48,56,48,10,50,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,50,10,69,78, 67,79,68,73,78,71,32,51,53,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,48, 56,48,10,56,56,56,48,10,67,56,56,48,10,65,56,56, 48,10,52,56,56,48,10,48,56,56,48,10,48,56,56,48, 10,48,56,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,48,51,10,69,78,67,79,68,73,78, 71,32,51,53,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,48,56,48,10,65,56, 56,48,10,67,56,56,48,10,65,56,56,48,10,52,56,56, 48,10,48,56,56,48,10,48,56,56,48,10,48,56,56,48, 10,48,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,48,52,10,69,78,67,79,68,73,78,71,32,51,53,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,56,56,48,10,53,52,56,48,10,53,52,56, 48,10,50,56,56,48,10,52,48,56,48,10,52,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,48,53,10,69, 78,67,79,68,73,78,71,32,51,53,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 50,48,48,10,50,68,48,48,10,52,48,56,48,10,52,56, 56,48,10,53,52,56,48,10,53,52,56,48,10,50,56,56, 48,10,52,48,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,54,10,69,78,67,79,68,73, 78,71,32,51,53,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,65,48,56,48,10,68, 48,56,48,10,57,48,56,48,10,53,48,56,48,10,49,48, 56,48,10,51,48,56,48,10,53,56,56,48,10,53,52,56, 48,10,50,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,48,55,10,69,78,67,79,68,73,78,71,32,51,53, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,50,48,48,10,48,53,48,48,10,48, 53,48,48,10,48,51,48,48,10,52,49,48,48,10,50,49, 48,48,10,49,49,48,48,10,48,57,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,48,56,10, 69,78,67,79,68,73,78,71,32,51,53,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,50,49,48,48,10,52,56,56,48,10,49, 52,56,48,10,49,52,56,48,10,48,67,56,48,10,48,52, 56,48,10,48,52,56,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,48,57,10,69,78,67,79,68, 73,78,71,32,51,53,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 56,52,48,48,10,48,50,48,48,10,52,50,48,48,10,65, 50,48,48,10,65,51,48,48,10,54,54,56,48,10,50,65, 56,48,10,49,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,65,10,69,78,67,79,68,73,78,71,32,51, 53,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,56,48,10,55,48,56,48,10,56,66,48,48,10, 67,56,56,48,10,65,56,56,48,10,52,56,56,48,10,48, 56,56,48,10,48,56,56,48,10,48,56,56,48,10,48,55, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,48,66, 10,69,78,67,79,68,73,78,71,32,51,53,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,53,48,56,48,10,65,66,48,48,10,67,56,56,48,10, 65,56,56,48,10,52,56,56,48,10,48,56,56,48,10,48, 56,56,48,10,48,56,56,48,10,48,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,48,67,10,69,78,67,79, 68,73,78,71,32,51,53,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,56,48, 10,56,50,56,48,10,52,50,56,48,10,56,50,56,48,10, 56,50,56,48,10,67,54,56,48,10,65,66,56,48,10,65, 65,56,48,10,52,52,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,48,68,10,69,78,67,79,68,73,78,71,32, 51,53,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,56,56,48,10,56,52,56,48, 10,52,52,56,48,10,56,52,56,48,10,56,52,56,48,10, 67,52,56,48,10,65,52,56,48,10,65,52,56,48,10,52, 55,56,48,10,48,48,48,48,10,48,67,56,48,10,48,55, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 69,10,69,78,67,79,68,73,78,71,32,51,53,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,48,56,48,10,54,48,56,48, 10,50,48,56,48,10,50,48,56,48,10,54,48,56,48,10, 65,48,56,48,10,65,52,56,48,10,53,69,56,48,10,50, 53,56,48,10,49,56,56,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,48,70,10,69,78,67, 79,68,73,78,71,32,51,53,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,52,48,56,48,10,54,48,56,48,10,50,48,56,48, 10,50,48,56,48,10,54,48,56,48,10,65,48,56,48,10, 65,56,56,48,10,53,65,56,48,10,50,68,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,49,48,10,69,78,67,79,68,73,78,71, 32,51,54,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,56,48,10,52,49,48, 48,10,55,70,48,48,10,48,56,56,48,10,49,52,56,48, 10,49,52,56,48,10,48,67,56,48,10,48,52,56,48,10, 48,66,48,48,10,49,57,56,48,10,50,65,56,48,10,49, 53,56,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 49,49,10,69,78,67,79,68,73,78,71,32,51,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,65,51,48,48,10,68,52,56,48,10,57,52,56, 48,10,53,56,56,48,10,49,56,56,48,10,49,48,56,48, 10,49,48,56,48,10,49,48,56,48,10,49,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,50,10,69,78, 67,79,68,73,78,71,32,51,54,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 56,48,10,57,50,56,48,10,57,50,56,48,10,65,65,56, 48,10,65,65,56,48,10,57,54,56,48,10,65,66,56,48, 10,67,65,56,48,10,56,52,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,49,51,10,69,78,67,79,68,73,78, 71,32,51,54,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,50,48,48,10,56,65, 48,48,10,52,65,48,48,10,56,65,48,48,10,56,65,48, 48,10,67,66,48,48,10,65,69,56,48,10,65,65,56,48, 10,52,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,49,52,10,69,78,67,79,68,73,78,71,32,51,54,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,56,56,48,10,53,52,56,48,10,53,52,56, 48,10,52,56,56,48,10,53,48,56,48,10,50,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,49,53,10,69, 78,67,79,68,73,78,71,32,51,54,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 50,48,48,10,50,68,48,48,10,52,48,56,48,10,52,56, 56,48,10,53,52,56,48,10,53,52,56,48,10,52,56,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,54,10,69,78,67,79,68,73, 78,71,32,51,54,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,48,56,48,10,54,48,56,48,10,50,48, 56,48,10,51,48,56,48,10,50,56,56,48,10,50,56,56, 48,10,49,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,49,55,10,69,78,67,79,68,73,78,71,32,51,54, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,51,48,48,10,65,52,56,48,10,65, 52,56,48,10,54,56,56,48,10,50,56,56,48,10,51,48, 56,48,10,51,48,56,48,10,50,48,56,48,10,50,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,49,56,10, 69,78,67,79,68,73,78,71,32,51,54,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,56,48,10,52,49,48,48,10,52,48,48,48,10,55, 70,48,48,10,48,48,56,48,10,50,48,56,48,10,50,48, 56,48,10,50,48,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,49,57,10,69,78,67,79,68, 73,78,71,32,51,54,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,50,48,48,10, 65,50,48,48,10,65,50,48,48,10,54,50,48,48,10,50, 50,48,48,10,50,55,48,48,10,50,65,56,48,10,51,50, 56,48,10,50,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,65,10,69,78,67,79,68,73,78,71,32,51, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,65,48,56,48,10, 65,48,56,48,10,54,48,56,48,10,50,48,56,48,10,50, 48,56,48,10,50,48,56,48,10,50,48,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,49,66, 10,69,78,67,79,68,73,78,71,32,51,54,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,56,48,10,48,48,56,48, 10,52,48,56,48,10,65,48,56,48,10,65,48,56,48,10, 54,48,56,48,10,50,48,56,48,10,50,48,56,48,10,50, 48,56,48,10,50,48,56,48,10,49,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,49,67,10,69,78,67,79, 68,73,78,71,32,51,54,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,65,48,56,48,10,65,48,56,48,10,67,48,56,48,10, 56,48,56,48,10,56,56,56,48,10,57,52,56,48,10,65, 50,56,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,49,68,10,69,78,67,79,68,73,78,71,32, 51,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,48,48,56,48,10,52,48,56,48,10,65,48,56,48, 10,65,48,56,48,10,67,48,56,48,10,56,48,56,48,10, 56,56,56,48,10,57,52,56,48,10,65,50,56,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 69,10,69,78,67,79,68,73,78,71,32,51,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,65,48,56,48,10,65,52,56,48, 10,54,52,56,48,10,50,65,56,48,10,50,65,56,48,10, 51,49,56,48,10,51,49,56,48,10,50,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,49,70,10,69,78,67, 79,68,73,78,71,32,51,54,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,52,48,56, 48,10,65,48,56,48,10,65,52,56,48,10,54,52,56,48, 10,50,65,56,48,10,50,65,56,48,10,51,49,56,48,10, 51,49,56,48,10,50,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,50,48,10,69,78,67,79,68,73,78,71, 32,51,54,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,54,48,56,48,10,50,48,56,48, 10,54,48,56,48,10,65,48,56,48,10,65,48,56,48,10, 52,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 50,49,10,69,78,67,79,68,73,78,71,32,51,54,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,56,48,10,53,48,56,48,10,53,48,56, 48,10,51,48,56,48,10,49,48,56,48,10,51,48,56,48, 10,53,56,56,48,10,53,52,56,48,10,50,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,50,10,69,78, 67,79,68,73,78,71,32,51,54,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,48, 56,48,10,53,48,56,48,10,53,48,56,48,10,54,48,56, 48,10,51,56,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,50,51,10,69,78,67,79,68,73,78, 71,32,51,54,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,56,48,10,52,49, 48,48,10,52,48,48,48,10,55,70,48,48,10,48,48,56, 48,10,48,49,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,50,52,10,69,78,67,79,68,73,78,71,32,51,54,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,54,48,56,48,10,50,48,56,48,10,51,48,56, 48,10,50,56,56,48,10,50,56,56,48,10,49,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,50,53,10,69, 78,67,79,68,73,78,71,32,51,54,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,48,48,56,48,10,51,67, 56,48,10,52,50,56,48,10,54,49,56,48,10,53,48,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,54,10,69,78,67,79,68,73, 78,71,32,51,54,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,48,56,48,10,54,48,56,48,10,50,48, 56,48,10,54,48,56,48,10,65,48,56,48,10,65,48,56, 48,10,52,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,50,55,10,69,78,67,79,68,73,78,71,32,51,54, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 48,56,48,10,48,48,56,48,10,48,48,56,48,10,48,49, 56,48,10,48,50,56,48,10,48,50,56,48,10,48,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,50,56,10, 69,78,67,79,68,73,78,71,32,51,54,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,56,48,10,48,48,56,48,10, 49,70,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 56,56,48,10,53,52,56,48,10,53,52,56,48,10,50,56, 56,48,10,52,48,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,50,57,10,69,78,67,79,68, 73,78,71,32,51,54,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 65,48,56,48,10,65,52,56,48,10,54,65,56,48,10,50, 65,67,48,10,50,55,56,48,10,50,48,56,48,10,50,48, 56,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,65,10,69,78,67,79,68,73,78,71,32,51, 54,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,48,48,56,48,10,51,70,48,48,10,52,49,48,48,10, 48,48,56,48,10,51,67,56,48,10,52,50,56,48,10,54, 49,56,48,10,53,48,56,48,10,53,48,56,48,10,50,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,50,66, 10,69,78,67,79,68,73,78,71,32,51,54,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,49,48,48,10,65,50,56,48,10,65,50,56,48,10, 54,49,48,48,10,50,50,56,48,10,50,52,56,48,10,50, 56,56,48,10,51,48,56,48,10,50,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,50,67,10,69,78,67,79, 68,73,78,71,32,51,54,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,48,54,56,48,10,48,57,48,48,10,52,54,56,48, 10,65,48,56,48,10,65,52,56,48,10,54,52,56,48,10, 50,65,56,48,10,50,65,56,48,10,51,49,56,48,10,51, 49,56,48,10,50,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,50,68,10,69,78,67,79,68,73,78,71,32, 51,54,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,49,48,48, 10,48,48,56,48,10,50,48,56,48,10,53,48,56,48,10, 53,48,56,48,10,54,48,56,48,10,52,48,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 69,10,69,78,67,79,68,73,78,71,32,51,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,56, 48,10,51,69,56,48,10,52,49,48,48,10,51,69,56,48, 10,50,48,56,48,10,53,48,56,48,10,53,48,56,48,10, 54,48,56,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,50,70,10,69,78,67, 79,68,73,78,71,32,51,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,50,49,56, 48,10,53,50,56,48,10,53,52,56,48,10,51,56,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,51,48,10,69,78,67,79,68,73,78,71, 32,51,54,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,48,48,48,10,53,48,56, 48,10,53,49,48,48,10,51,69,48,48,10,48,48,48,48, 10,50,48,48,48,10,53,48,56,48,10,53,49,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 51,49,10,69,78,67,79,68,73,78,71,32,51,54,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 48,56,48,10,53,49,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,50,10,69,78, 67,79,68,73,78,71,32,51,54,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,50,49,48,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,51,51,10,69,78,67,79,68,73,78, 71,32,51,54,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,48,48,10,65,48,48,48,10,65, 48,48,48,10,52,48,48,48,10,48,69,48,48,10,49,49, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,51,52,10,69,78,67,79,68,73,78,71,32,51,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,52,49,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,51,53,10,69, 78,67,79,68,73,78,71,32,51,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,56,48,10, 52,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,54,10,69,78,67,79,68,73, 78,71,32,51,54,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,57,48,48,10,52,54,56,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,51,55,10,69,78,67,79,68,73,78,71,32,51,54, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,65,56,48,10,52,54,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,51,56,10, 69,78,67,79,68,73,78,71,32,51,54,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,51,57,10,69,78,67,79,68, 73,78,71,32,51,54,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,56, 48,10,48,54,56,48,10,48,51,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,65,10,69,78,67,79,68,73,78,71,32,51, 54,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,51,70, 10,69,78,67,79,68,73,78,71,32,51,54,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,55,70,48,48,10,50,52,56,48,10,50,52,56,48,10, 50,52,56,48,10,51,70,48,48,10,50,52,56,48,10,50, 52,56,48,10,50,52,56,48,10,55,70,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,52,48,10,69,78,67,79, 68,73,78,71,32,51,54,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,49,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,48,48,48,10,49,56,48,48,10,49,52,48,48,10,49, 52,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,52,49,10,69,78,67,79,68,73,78,71,32, 51,54,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,52,48,48,10,52,52,48,48, 10,52,52,48,48,10,52,52,48,48,10,52,52,48,48,10, 54,54,48,48,10,53,53,48,48,10,53,53,48,48,10,50, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 50,10,69,78,67,79,68,73,78,71,32,51,54,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,69,56,48,10,56,49, 48,48,10,56,48,48,48,10,70,67,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,51,48,48,10, 48,50,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,52,51,10,69,78,67, 79,68,73,78,71,32,51,54,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,50,52,48,48,10,54,50, 48,48,10,53,50,48,48,10,53,50,48,48,10,50,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,51,48,48,10,48,50,56,48,10, 48,50,56,48,10,48,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,52,52,10,69,78,67,79,68,73,78,71, 32,51,54,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,52, 52,48,48,10,50,65,48,48,10,49,50,48,48,10,48,50, 48,48,10,48,50,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,51,48,48,10,48,50,56,48,10,48,50,56,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 52,53,10,69,78,67,79,68,73,78,71,32,51,54,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,67,48,48,10,52,50,48,48,10,48,49,48, 48,10,48,49,48,48,10,48,49,48,48,10,48,49,48,48, 10,48,49,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,54,10,69,78, 67,79,68,73,78,71,32,51,54,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,66, 48,48,10,52,52,56,48,10,54,48,56,48,10,53,48,56, 48,10,53,48,56,48,10,50,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,49,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,52,55,10,69,78,67,79,68,73,78, 71,32,51,54,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,49,48,48,10,51,69,48,48,10,52,57,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,52,56,10,69,78,67,79,68,73,78,71,32,51,54,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,52,57,10,69, 78,67,79,68,73,78,71,32,51,54,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,51,49,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,65,10,69,78,67,79,68,73, 78,71,32,51,54,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,54,67,56,48,10,53,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,52,66,10,69,78,67,79,68,73,78,71,32,51,54, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,49,48,48,10,48,51,56,48,10,48,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,69,52,67,10, 69,78,67,79,68,73,78,71,32,51,54,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,51,56,56, 48,10,51,55,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,69,52,68,10,69,78,67,79,68, 73,78,71,32,51,54,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,65,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,69,10,69,78,67,79,68,73,78,71,32,51, 54,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,51,48,48,10,48,52,48, 48,10,48,69,48,48,10,49,48,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,69,52,70, 10,69,78,67,79,68,73,78,71,32,51,54,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,67,56,48,10,53,50,56,48,10,53,50,56,48,10,52, 67,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,69,53,48,10,69,78,67,79, 68,73,78,71,32,51,54,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,50,49,48,48,10,52,48,56,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,50, 49,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,69,53,49,10,69,78,67,79,68,73,78,71,32, 51,54,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,53,48,56,48,10,54,56,56,48,10, 54,56,56,48,10,51,48,56,48,10,48,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 50,10,69,78,67,79,68,73,78,71,32,51,54,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,56,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,52,57,48,48,10,53,54,56,48, 10,53,56,56,48,10,53,52,56,48,10,53,52,56,48,10, 52,56,56,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,69,53,51,10,69,78,67, 79,68,73,78,71,32,51,54,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,66,48,48,10,52,52,56,48,10,52,52,56,48, 10,52,52,56,48,10,54,52,56,48,10,53,48,56,48,10, 53,48,56,48,10,50,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,69,53,52,10,69,78,67,79,68,73,78,71, 32,51,54,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,48,56,48,10,48,49,48,48,10,49,69,48, 48,10,50,48,48,48,10,52,50,48,48,10,52,53,48,48, 10,52,53,48,48,10,52,54,48,48,10,50,51,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,69, 53,53,10,69,78,67,79,68,73,78,71,32,51,54,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,56,48,10,48,56, 56,48,10,49,53,48,48,10,49,69,48,48,10,50,48,48, 48,10,52,50,48,48,10,52,53,48,48,10,52,53,48,48, 10,52,54,48,48,10,50,51,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,54,10,69,78, 67,79,68,73,78,71,32,51,54,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,48,48,10,52,48, 48,48,10,50,69,48,48,10,51,49,48,48,10,48,48,56, 48,10,48,48,56,48,10,49,48,56,48,10,50,56,56,48, 10,50,57,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,69,53,55,10,69,78,67,79,68,73,78, 71,32,51,54,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,52,48,10,48, 48,56,48,10,48,48,56,48,10,48,48,56,48,10,54,67, 56,48,10,57,50,56,48,10,57,50,56,48,10,57,50,56, 48,10,67,50,56,48,10,65,50,56,48,10,65,50,56,48, 10,52,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 69,53,56,10,69,78,67,79,68,73,78,71,32,51,54,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,56,48,10,48,48,56,48,10,51,70,48,48,10,52,48, 48,48,10,56,49,48,48,10,56,50,56,48,10,56,50,56, 48,10,66,49,56,48,10,54,67,56,48,10,50,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,69,53,57,10,69, 78,67,79,68,73,78,71,32,51,54,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,52,48,10,48,49,52,48,10,51,65,56,48,10,52,54, 48,48,10,52,52,48,48,10,53,50,48,48,10,54,65,48, 48,10,50,57,48,48,10,49,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,65,10,69,78,67,79,68,73, 78,71,32,51,54,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,53,48,48,10,65, 65,56,48,10,65,65,56,48,10,55,50,56,48,10,48,50, 56,48,10,48,50,56,48,10,48,50,56,48,10,48,50,56, 48,10,48,53,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,69,53,66,10,69,78,67,79,68,73,78,71,32,51,54, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,53,48,48,48,10,57, 52,48,48,10,66,53,48,48,10,68,53,67,48,10,65,53, 48,48,10,56,65,48,48,10,52,56,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,65,48,10, 69,78,67,79,68,73,78,71,32,52,50,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,65,49,10,69,78,67,79,68, 73,78,71,32,52,50,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,55,48,48,10,49,66,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,65,50,10,69,78,67,79,68,73,78,71,32,52, 50,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 67,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,65,51, 10,69,78,67,79,68,73,78,71,32,52,50,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,65,52,10,69,78,67,79, 68,73,78,71,32,52,50,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,65,53,10,69,78,67,79,68,73,78,71,32, 52,50,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,51,67,48, 10,48,51,52,48,10,48,51,52,48,10,48,51,52,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,65, 54,10,69,78,67,79,68,73,78,71,32,52,50,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,66,48,48,10,49,70,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,65,55,10,69,78,67, 79,68,73,78,71,32,52,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,48,48,10,51,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,67,48,10,54,51,52,48,10,54,51,52,48, 10,54,51,52,48,10,54,51,48,48,10,54,51,48,48,10, 51,51,48,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,65,56,10,69,78,67,79,68,73,78,71, 32,52,50,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 65,57,10,69,78,67,79,68,73,78,71,32,52,50,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,56,48, 10,49,68,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,65,65,10,69,78, 67,79,68,73,78,71,32,52,50,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,48,48,48,10,66, 48,48,48,10,66,48,48,48,10,66,48,48,48,10,51,48, 48,48,10,51,69,48,48,10,51,66,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,49,66,48,48,10,48,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,65,66,10,69,78,67,79,68,73,78, 71,32,52,50,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,49,70, 67,48,10,51,51,48,48,10,54,51,48,48,10,52,51,48, 48,10,52,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,65,67,10,69,78,67,79,68,73,78,71,32,52,50,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,65,68,10,69, 78,67,79,68,73,78,71,32,52,50,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,54,52,48,10,49,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,65,69,10,69,78,67,79,68,73, 78,71,32,52,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,49,66,48, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,65,70,10,69,78,67,79,68,73,78,71,32,52,50, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,49, 66,56,48,10,48,68,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,66,48,10, 69,78,67,79,68,73,78,71,32,52,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,67,48,10,48,51,52,48,10,48,51,52,48,10,54, 51,52,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,66,49,10,69,78,67,79,68, 73,78,71,32,52,50,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,66,50,10,69,78,67,79,68,73,78,71,32,52, 50,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,66,51, 10,69,78,67,79,68,73,78,71,32,52,50,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,56,48,10,51,55,52,48,10,49,67,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,66,52,10,69,78,67,79, 68,73,78,71,32,52,50,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,68,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,50,68,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,66,53,10,69,78,67,79,68,73,78,71,32, 52,50,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,70,56,48,10,48,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,66, 54,10,69,78,67,79,68,73,78,71,32,52,50,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,66,55,10,69,78,67, 79,68,73,78,71,32,52,50,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,66,56,10,69,78,67,79,68,73,78,71, 32,52,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,56,48,10,49,68,56,48,10,48,49,56,48, 10,52,49,56,48,10,52,49,56,48,10,54,51,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 66,57,10,69,78,67,79,68,73,78,71,32,52,50,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,66,65,10,69,78, 67,79,68,73,78,71,32,52,50,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,48,48,10,51, 49,56,48,10,54,48,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,56,48, 10,51,49,56,48,10,49,70,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,50,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,66,66,10,69,78,67,79,68,73,78, 71,32,52,50,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,49,70, 67,48,10,51,51,52,48,10,54,51,52,48,10,54,51,52, 48,10,54,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,66,67,10,69,78,67,79,68,73,78,71,32,52,50,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,54,48, 48,48,10,55,67,48,48,10,54,52,48,48,10,54,52,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,66,68,10,69, 78,67,79,68,73,78,71,32,52,50,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,49,69,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,66,69,10,69,78,67,79,68,73, 78,71,32,52,50,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,66,70,10,69,78,67,79,68,73,78,71,32,52,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,51,49,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 70,48,48,10,49,57,56,48,10,51,48,67,48,10,54,48, 52,48,10,67,48,48,48,10,56,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,67,48,10, 69,78,67,79,68,73,78,71,32,52,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,48,48,48, 10,66,48,48,48,10,66,48,48,48,10,66,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,49,56,48,10,51,49, 56,48,10,49,66,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,67,49,10,69,78,67,79,68, 73,78,71,32,52,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,67,48,48,10,54,55,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,67,50,10,69,78,67,79,68,73,78,71,32,52, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,48,48,10,54,48,48,48,10,51,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,67,51, 10,69,78,67,79,68,73,78,71,32,52,50,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,67,52,10,69,78,67,79, 68,73,78,71,32,52,50,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,67,53,10,69,78,67,79,68,73,78,71,32, 52,50,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,70,48,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,70,48,48, 10,49,56,48,48,10,55,69,48,48,10,68,66,48,48,10, 68,57,56,48,10,68,56,48,48,10,68,56,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 48,10,69,78,67,79,68,73,78,71,32,52,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,54,49,56,48,10, 54,48,56,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,68,49,10,69,78,67, 79,68,73,78,71,32,52,51,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,56,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,68,50,10,69,78,67,79,68,73,78,71, 32,52,51,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,56,48,48,10,54,67,48, 48,10,54,52,48,48,10,48,52,48,48,10,48,52,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 68,51,10,69,78,67,79,68,73,78,71,32,52,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,50,57,56, 48,10,54,57,56,48,10,54,57,56,48,10,54,57,56,48, 10,54,55,48,48,10,54,48,48,48,10,54,48,48,48,10, 51,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,52,10,69,78, 67,79,68,73,78,71,32,52,51,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,52,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,51,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,68,53,10,69,78,67,79,68,73,78, 71,32,52,51,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,52,49,56,48,10,48,49,56, 48,10,48,55,48,48,10,48,55,48,48,10,50,49,56,48, 10,54,49,56,48,10,52,49,56,48,10,52,49,56,48,10, 54,51,48,48,10,51,69,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,68,54,10,69,78,67,79,68,73,78,71,32,52,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,48,48,48,10,68,56,48,48,10,68,56,48,48,10,68, 57,56,48,10,68,57,48,48,10,55,65,48,48,10,49,67, 48,48,10,49,70,48,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,68,55,10,69, 78,67,79,68,73,78,71,32,52,51,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,48,48,10,68,66,56,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,57,56,48,10,55,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,56,10,69,78,67,79,68,73, 78,71,32,52,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,68,57,10,69,78,67,79,68,73,78,71,32,52,51, 49,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 51,48,48,10,48,49,56,48,10,48,49,56,48,10,48,55, 48,48,10,48,55,48,48,10,50,49,56,48,10,54,49,56, 48,10,52,49,56,48,10,52,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,68,65,10, 69,78,67,79,68,73,78,71,32,52,51,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,66,48,48,10,68,53,56,48,10,68, 53,56,48,10,68,53,56,48,10,68,53,56,48,10,67,49, 56,48,10,67,51,48,48,10,67,48,48,48,10,67,48,48, 48,10,55,67,48,48,10,48,54,48,48,10,48,51,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,68,66,10,69,78,67,79,68, 73,78,71,32,52,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,49,70,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,67,10,69,78,67,79,68,73,78,71,32,52, 51,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,54,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,67,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,68,68, 10,69,78,67,79,68,73,78,71,32,52,51,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,53,66,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,68,69,10,69,78,67,79, 68,73,78,71,32,52,51,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,54,48,48,48, 10,51,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,55,48,48,10,48,55,48,48,10,50, 49,56,48,10,54,49,56,48,10,52,49,56,48,10,52,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,68,70,10,69,78,67,79,68,73,78,71,32, 52,51,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,51,56,48,10,67,57,56,48,10,67,68,56,48,10, 67,68,56,48,10,67,68,56,48,10,55,57,56,48,10,48, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,49,70,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 48,10,69,78,67,79,68,73,78,71,32,52,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,51,48,48,10,51,69,48,48,10,54,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,53,66,48,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,69,49,10,69,78,67, 79,68,73,78,71,32,52,51,50,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,52,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,69,50,10,69,78,67,79,68,73,78,71, 32,52,51,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,54,48,48,10,50,50, 48,48,10,51,54,48,48,10,49,67,48,48,10,51,54,48, 48,10,65,50,56,48,10,66,54,56,48,10,57,67,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,55, 70,48,48,10,51,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 69,51,10,69,78,67,79,68,73,78,71,32,52,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,65,69,48,48,10,68,66,48, 48,10,49,49,56,48,10,49,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,51,49,56,48,10,54,49,56,48,10, 52,49,56,48,10,52,49,56,48,10,54,51,48,48,10,51, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,52,10,69,78, 67,79,68,73,78,71,32,52,51,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,54,48,48,10,57,66,48,48,10,57,49,56, 48,10,57,49,56,48,10,54,55,48,48,10,48,55,48,48, 10,50,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,69,53,10,69,78,67,79,68,73,78, 71,32,52,51,50,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,70,56,48,10,49,49,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,69,54,10,69,78,67,79,68,73,78,71,32,52,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,66,48,48,10,55,70, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,51,70,48,48,10, 48,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,69,55,10,69, 78,67,79,68,73,78,71,32,52,51,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,56,10,69,78,67,79,68,73, 78,71,32,52,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,70,70,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,48,48,10,67, 51,48,48,10,48,51,48,48,10,49,70,67,48,10,51,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,69,57,10,69,78,67,79,68,73,78,71,32,52,51, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,55,67,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,48,69,65,10, 69,78,67,79,68,73,78,71,32,52,51,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,54,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,48,69,66,10,69,78,67,79,68, 73,78,71,32,52,51,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,70,56,48,10,51,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,67,10,69,78,67,79,68,73,78,71,32,52, 51,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,53,66,48,48,10,55,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,48,69,68, 10,69,78,67,79,68,73,78,71,32,52,51,51,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,48,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,51,66,52,48,10, 52,55,56,48,10,52,55,56,48,10,51,66,52,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,48,69,69,10,69,78,67,79, 68,73,78,71,32,52,51,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,56,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,48,69,70,10,69,78,67,79,68,73,78,71,32, 52,51,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,49,56,48, 10,57,56,56,48,10,67,57,48,48,10,48,69,48,48,10, 48,67,48,48,10,49,67,67,48,10,69,54,52,48,10,67, 51,56,48,10,50,48,48,48,10,50,48,48,48,10,67,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 48,10,69,78,67,79,68,73,78,71,32,52,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,69,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,69,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,69,48,48,10,48,51,48,48,10, 48,51,48,48,10,54,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,48,70,49,10,69,78,67, 79,68,73,78,71,32,52,51,51,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,55,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,55,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,55,48,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,48,70,50,10,69,78,67,79,68,73,78,71, 32,52,51,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,48, 70,51,10,69,78,67,79,68,73,78,71,32,52,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,52,10,69,78, 67,79,68,73,78,71,32,52,51,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,55,48,48,10,48,55,48,48, 10,50,49,56,48,10,54,49,56,48,10,52,49,56,48,10, 52,49,56,48,10,54,51,48,48,10,51,69,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,48,70,53,10,69,78,67,79,68,73,78, 71,32,52,51,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,51,48,48,10,49,70, 67,48,10,48,51,48,48,10,49,70,67,48,10,51,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 48,70,54,10,69,78,67,79,68,73,78,71,32,52,51,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,50,68, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,50,68,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,48,70,55,10,69, 78,67,79,68,73,78,71,32,52,51,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,67,48,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,56,10,69,78,67,79,68,73, 78,71,32,52,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,48,70,66,10,69,78,67,79,68,73,78,71,32,52,51, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,48,48,48,10,51,56,48,48,10,49, 49,48,48,10,48,51,56,48,10,49,49,48,48,10,51,56, 48,48,10,49,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,48,48,10, 69,78,67,79,68,73,78,71,32,52,54,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,55,48,48,10,54,54, 48,48,10,55,69,48,48,10,51,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,48,49,10,69,78,67,79,68, 73,78,71,32,52,54,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,55,67,48,10,67,54,67,48,10,67,54,67,48,10,67, 54,48,48,10,67,69,48,48,10,67,67,48,48,10,70,67, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,48,50,10,69,78,67,79,68,73,78,71,32,52, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,51,70,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,56,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,48,51, 10,69,78,67,79,68,73,78,71,32,52,54,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,54,48,48,10,55,69,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,48,52,10,69,78,67,79, 68,73,78,71,32,52,54,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,54,48,48, 10,55,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,48,70,48,48,10,49,57,56,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,48,53,10,69,78,67,79,68,73,78,71,32, 52,54,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,48, 54,10,69,78,67,79,68,73,78,71,32,52,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,55, 56,48,10,67,54,52,48,10,67,54,52,48,10,67,55,56, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,55,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,48,56,10,69,78,67, 79,68,73,78,71,32,52,54,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,56,48,48,10,51,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,48,57,10,69,78,67,79,68,73,78,71, 32,52,54,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,55,48,48,48,10,55,56,48,48,10,67,67,48, 48,10,67,54,48,48,10,67,55,67,48,10,67,54,67,48, 10,67,54,67,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 48,65,10,69,78,67,79,68,73,78,71,32,52,54,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,55,48, 48,48,10,55,56,48,48,10,67,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,67,48,10,67,54,67,48,10,67,55,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,48,66,10,69,78, 67,79,68,73,78,71,32,52,54,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,56,48,48,10,51,67, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,48,67,10,69,78,67,79,68,73,78, 71,32,52,54,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,55,48,48,48,10,55,56,48,48,10,67,67, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,55,56,48,10,67,54,52,48,10,67,54,52,48, 10,67,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,48,68,10,69,78,67,79,68,73,78,71,32,52,54,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,51,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,57,56, 48,10,54,53,56,48,10,54,53,56,48,10,55,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,48,69,10,69, 78,67,79,68,73,78,71,32,52,54,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,55,48,48,48,10,55, 56,48,48,10,67,67,48,48,10,67,55,56,48,10,67,54, 52,48,10,67,54,52,48,10,67,55,56,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,48,70,10,69,78,67,79,68,73, 78,71,32,52,54,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,56,48,48,10, 51,48,48,48,10,55,48,48,48,10,55,56,48,48,10,67, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,70,56,48,10,49,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,49,48,10,69,78,67,79,68,73,78,71,32,52,54, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,49,49,10, 69,78,67,79,68,73,78,71,32,52,54,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,55,69,48,48,10,68, 66,67,48,10,68,66,67,48,10,68,66,52,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,49,50,10,69,78,67,79,68, 73,78,71,32,52,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,67,48,48,10,55,69,48,48,10,68,66,48,48,10,68, 66,48,48,10,68,66,48,48,10,68,66,52,48,10,68,66, 67,48,10,68,66,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,49,51,10,69,78,67,79,68,73,78,71,32,52, 54,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,49,52, 10,69,78,67,79,68,73,78,71,32,52,54,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,67,48,48,10,55,69,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,56,48,10,68, 56,67,48,10,68,56,67,48,10,68,66,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,49,53,10,69,78,67,79, 68,73,78,71,32,52,54,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,49,54,10,69,78,67,79,68,73,78,71,32, 52,54,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,49, 55,10,69,78,67,79,68,73,78,71,32,52,54,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,67,48,48,10,55,69,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,66,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,49,56,10,69,78,67, 79,68,73,78,71,32,52,54,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,57,52,56,48,10,57,52,56,48, 10,57,52,56,48,10,57,52,56,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,49,57,10,69,78,67,79,68,73,78,71, 32,52,54,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,52,52, 48,48,10,65,65,48,48,10,65,65,48,48,10,65,66,56, 48,10,65,65,56,48,10,65,65,48,48,10,65,65,48,48, 10,65,65,48,48,10,52,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 49,65,10,69,78,67,79,68,73,78,71,32,52,54,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,56,48,10,48,48,56,48,10,48,49,48,48, 10,48,50,48,48,10,48,52,48,48,10,48,57,56,48,10, 48,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,49,66,10,69,78, 67,79,68,73,78,71,32,52,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,54,51,56, 48,10,48,48,56,48,10,48,49,48,48,10,48,49,48,48, 10,48,49,48,48,10,48,49,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,49,67,10,69,78,67,79,68,73,78, 71,32,52,54,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,54,51,48,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,54,51,56,48,10,48,49,48, 48,10,48,50,48,48,10,48,55,48,48,10,48,52,56,48, 10,48,52,56,48,10,48,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,49,68,10,69,78,67,79,68,73,78,71,32,52,54,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,55,51,48,48,10,49,48,48,48,10,50,48,48, 48,10,50,48,48,48,10,52,48,48,48,10,52,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,49,69,10,69, 78,67,79,68,73,78,71,32,52,54,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 54,51,48,48,10,57,52,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,55,51, 48,48,10,49,48,48,48,10,49,48,48,48,10,49,48,48, 48,10,49,48,48,48,10,49,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,49,70,10,69,78,67,79,68,73, 78,71,32,52,54,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 57,52,56,48,10,57,52,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,54,51,56,48,10,48,49, 48,48,10,48,49,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,70,56,48,10,48,56,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,50,48,10,69,78,67,79,68,73,78,71,32,52,54, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,70,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,50,49,10, 69,78,67,79,68,73,78,71,32,52,54,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,66,48,48,10, 68,66,48,48,10,68,66,56,48,10,68,66,56,48,10,68, 69,56,48,10,68,56,56,48,10,68,56,48,48,10,55,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,50,50,10,69,78,67,79,68, 73,78,71,32,52,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,70,48,48,10,51,66,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,68,56,48,10,48,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,50,51,10,69,78,67,79,68,73,78,71,32,52, 54,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,70,56,48,10,51,57,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,50,52, 10,69,78,67,79,68,73,78,71,32,52,54,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,66,48, 48,10,68,66,48,48,10,68,66,48,48,10,68,66,48,48, 10,68,66,48,48,10,68,66,48,48,10,68,69,48,48,10, 55,54,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 70,48,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,50,53,10,69,78,67,79, 68,73,78,71,32,52,54,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,70,48,48,10,55,56,48,48,10,69,48,48,48,10, 67,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,50,54,10,69,78,67,79,68,73,78,71,32, 52,54,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,70,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,50, 55,10,69,78,67,79,68,73,78,71,32,52,54,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,68,66,48, 48,10,68,66,48,48,10,68,66,48,48,10,68,70,48,48, 10,55,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,50,56,10,69,78,67, 79,68,73,78,71,32,52,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,69,49,56,48,10, 55,70,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,50,57,10,69,78,67,79,68,73,78,71, 32,52,54,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,70,70,48,48, 10,55,70,56,48,10,48,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 50,65,10,69,78,67,79,68,73,78,71,32,52,54,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,67,51,48,48,10,67,49,56,48, 10,69,49,56,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,50,66,10,69,78, 67,79,68,73,78,71,32,52,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,67,48,48,48,10,67,51,56,48,10,69,55,56,48, 10,55,69,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,50,67,10,69,78,67,79,68,73,78, 71,32,52,54,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,48,48,48,10,67,51,48, 48,10,67,52,56,48,10,69,52,56,48,10,55,70,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,50,68,10,69,78,67,79,68,73,78,71,32,52,54,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,67,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 48,48,48,10,67,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,51,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,50,69,10,69, 78,67,79,68,73,78,71,32,52,54,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,48,48,10,67,52,56,48,10,67, 52,56,48,10,67,51,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,50,70,10,69,78,67,79,68,73, 78,71,32,52,54,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,50,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,67,48, 48,48,10,67,51,56,48,10,69,55,56,48,10,55,69,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,51,48,10,69,78,67,79,68,73,78,71,32,52,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,51,49,10, 69,78,67,79,68,73,78,71,32,52,54,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,67,48,48,10, 55,69,48,48,10,67,51,48,48,10,67,51,67,48,10,67, 51,67,48,10,67,51,52,48,10,67,51,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,51,50,10,69,78,67,79,68, 73,78,71,32,52,54,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,67,48,48,10,55,69,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,67,51,48,48,10,67,51,52,48,10,67,51, 67,48,10,67,51,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,51,51,10,69,78,67,79,68,73,78,71,32,52, 54,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,51,52, 10,69,78,67,79,68,73,78,71,32,52,54,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,51,67,48,48, 10,55,69,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,67,51,48,48,10,67,51,56,48,10,67, 50,52,48,10,67,50,52,48,10,67,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,51,53,10,69,78,67,79, 68,73,78,71,32,52,54,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,51,54,10,69,78,67,79,68,73,78,71,32, 52,54,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,51, 55,10,69,78,67,79,68,73,78,71,32,52,54,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,67,48, 48,10,55,69,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,48,48,10,67,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 70,67,48,10,48,56,52,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,51,56,10,69,78,67, 79,68,73,78,71,32,52,54,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,51,57,10,69,78,67,79,68,73,78,71, 32,52,54,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,67,48,48,10,55,69,48,48,10,67,51,48, 48,10,67,51,67,48,10,67,51,67,48,10,67,51,52,48, 10,67,51,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 51,65,10,69,78,67,79,68,73,78,71,32,52,54,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,51,67, 48,48,10,55,69,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,67,51,48,48, 10,67,51,52,48,10,67,51,67,48,10,67,51,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,51,66,10,69,78, 67,79,68,73,78,71,32,52,54,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,70, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,51,67,10,69,78,67,79,68,73,78, 71,32,52,54,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,67,48,48,10,55,69,48,48,10,67,51, 48,48,10,67,51,48,48,10,67,51,48,48,10,67,51,48, 48,10,67,51,56,48,10,67,50,52,48,10,67,50,52,48, 10,67,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,51,68,10,69,78,67,79,68,73,78,71,32,52,54,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,48,48,10,49,56,48,48,10,48,56,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,51,69,10,69, 78,67,79,68,73,78,71,32,52,54,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,51,70,10,69,78,67,79,68,73, 78,71,32,52,54,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,55,69,48,48,10,67, 51,48,48,10,67,51,48,48,10,67,51,48,48,10,67,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,70,67,48,10,48,56,52,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,52,48,10,69,78,67,79,68,73,78,71,32,52,54, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,52,49,10, 69,78,67,79,68,73,78,71,32,52,54,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,68,56,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,52,50,10,69,78,67,79,68, 73,78,71,32,52,54,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,68, 56,48,10,48,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,52,51,10,69,78,67,79,68,73,78,71,32,52, 54,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,52,52, 10,69,78,67,79,68,73,78,71,32,52,54,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 67,56,48,10,48,67,56,48,10,48,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,52,53,10,69,78,67,79, 68,73,78,71,32,52,54,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,52,54,10,69,78,67,79,68,73,78,71,32, 52,54,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,52, 56,10,69,78,67,79,68,73,78,71,32,52,54,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,51,70,48,48,10,48,68,56,48,10,48,69,52,48,10, 48,69,52,48,10,48,68,56,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,52,65,10,69,78,67, 79,68,73,78,71,32,52,54,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,56,48,10,49,56,56,48,10,55,69,56, 48,10,68,66,56,48,10,68,66,56,48,10,68,66,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,52,66,10,69,78,67,79,68,73,78,71, 32,52,54,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,50,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 52,67,10,69,78,67,79,68,73,78,71,32,52,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,51,70, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,48,67,48,48,10,48,70,48,48, 10,48,67,56,48,10,48,67,56,48,10,51,70,48,48,10, 50,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,52,68,10,69,78, 67,79,68,73,78,71,32,52,54,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,69, 48,48,10,68,66,48,48,10,68,66,56,48,10,68,66,56, 48,10,55,69,56,48,10,49,56,56,48,10,49,56,56,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,53,48,10,69,78,67,79,68,73,78, 71,32,52,54,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,53,49,10,69,78,67,79,68,73,78,71,32,52,54,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,70,48,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,70,56,48,10,48,68,56,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,53,50,10,69, 78,67,79,68,73,78,71,32,52,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,70,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,68,56,48,10,48,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,53,51,10,69,78,67,79,68,73, 78,71,32,52,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,51,70,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,53,52,10,69,78,67,79,68,73,78,71,32,52,54, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,70, 48,48,10,48,67,56,48,10,48,67,56,48,10,48,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,53,53,10, 69,78,67,79,68,73,78,71,32,52,54,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,49,48,48,10,70,70,48,48, 10,49,56,48,48,10,48,56,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,53,54,10,69,78,67,79,68, 73,78,71,32,52,54,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,55,70,56,48,10,49,50,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,53,56,10,69,78,67,79,68,73,78,71,32,52, 54,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,51,70,48,48,10,48,68,56,48,10,48, 69,52,48,10,48,69,52,48,10,48,68,56,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,53,65, 10,69,78,67,79,68,73,78,71,32,52,54,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,49,48,48,10,70,70,48, 48,10,49,56,48,48,10,49,56,56,48,10,49,56,56,48, 10,55,69,56,48,10,68,66,56,48,10,68,66,56,48,10, 68,66,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,53,66,10,69,78,67,79, 68,73,78,71,32,52,54,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,51,70,48,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,50,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,53,67,10,69,78,67,79,68,73,78,71,32, 52,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,52,48, 56,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,51,70,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,48,67,48,48,10, 48,70,48,48,10,48,67,56,48,10,48,67,56,48,10,51, 70,48,48,10,50,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,53, 68,10,69,78,67,79,68,73,78,71,32,52,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,49,48,48,10,70,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,55,69,48,48,10,68,66,48,48,10,68,66,56,48, 10,68,66,56,48,10,55,69,56,48,10,49,56,56,48,10, 49,56,56,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,54,48,10,69,78,67, 79,68,73,78,71,32,52,55,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,70, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,54,49,10,69,78,67,79,68,73,78,71, 32,52,55,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,54,54, 48,48,10,54,54,48,48,10,67,54,48,48,10,67,55,67, 48,10,67,54,67,48,10,67,54,67,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 54,50,10,69,78,67,79,68,73,78,71,32,52,55,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,69,48,48,10,54,54,48,48,10,54,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,67,48,10,67,54,67,48,10,67,55,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,54,51,10,69,78, 67,79,68,73,78,71,32,52,55,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 70,48,48,10,51,51,48,48,10,51,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,54,52,10,69,78,67,79,68,73,78, 71,32,52,55,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,48,48,10,54, 54,48,48,10,54,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,55,56,48,10,67,54,52,48,10,67,54,52,48, 10,67,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,54,53,10,69,78,67,79,68,73,78,71,32,52,55,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,48,48,10,48,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,51,49,56,48,10,70,49,56,48,10,70,49, 56,48,10,66,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,54,54,10,69, 78,67,79,68,73,78,71,32,52,55,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,70,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,54,55,10,69,78,67,79,68,73, 78,71,32,52,55,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,49,70,56,48,10,49,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,54,56,10,69,78,67,79,68,73,78,71,32,52,55, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,49,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,69,48,48,10, 49,70,48,48,10,51,51,48,48,10,51,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,54,57,10, 69,78,67,79,68,73,78,71,32,52,55,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,50,48,48,10,70,69,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,67,54,48,48,10,67, 55,67,48,10,67,54,67,48,10,67,54,67,48,10,67,54, 48,48,10,67,54,48,48,10,67,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,54,65,10,69,78,67,79,68, 73,78,71,32,52,55,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,50,48,48,10,70,69,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,69,48,48,10,54,54,48,48,10, 54,54,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,67,48,10,67,54, 67,48,10,67,55,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,54,66,10,69,78,67,79,68,73,78,71,32,52, 55,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,69,48,48, 10,49,70,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,54,67, 10,69,78,67,79,68,73,78,71,32,52,55,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,50,48,48,10,70,69,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,69,48,48, 10,54,54,48,48,10,54,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,55,56,48,10,67, 54,52,48,10,67,54,52,48,10,67,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,54,68,10,69,78,67,79, 68,73,78,71,32,52,55,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,50,48,56,48,10,51,70,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,70,56,48,10,49,57,56,48, 10,49,57,56,48,10,55,49,56,48,10,70,49,56,48,10, 66,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,54,69,10,69,78,67,79,68,73,78,71,32, 52,55,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,70,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,54, 70,10,69,78,67,79,68,73,78,71,32,52,55,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,50,48,48,10,70,69, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,54,54,48,48,10,54,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,49, 70,56,48,10,49,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,55,48,10,69,78,67, 79,68,73,78,71,32,52,55,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,55,49,10,69,78,67,79,68,73,78,71, 32,52,55,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,52,67,56,48,10,48,67,48,48,10,48,70,48,48, 10,48,68,56,48,10,48,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 55,50,10,69,78,67,79,68,73,78,71,32,52,55,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,52,67,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,68,56,48,10,48,68,56,48,10,48,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,55,51,10,69,78, 67,79,68,73,78,71,32,52,55,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,55,52,10,69,78,67,79,68,73,78, 71,32,52,55,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,48,67,56,48,10,48,67,56,48, 10,48,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,55,53,10,69,78,67,79,68,73,78,71,32,52,55,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,55,54,10,69, 78,67,79,68,73,78,71,32,52,55,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,52,67, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,55,55,10,69,78,67,79,68,73, 78,71,32,52,55,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,70,48,48,10,50,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,55,56,10,69,78,67,79,68,73,78,71,32,52,55, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,52, 67,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,55,57,10, 69,78,67,79,68,73,78,71,32,52,55,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,52,67,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,52,67,56,48,10,48, 67,48,48,10,48,70,48,48,10,48,68,56,48,10,48,68, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,55,65,10,69,78,67,79,68, 73,78,71,32,52,55,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,52,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,68,56,48,10,48,68, 56,48,10,48,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,55,66,10,69,78,67,79,68,73,78,71,32,52, 55,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 52,67,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,55,67, 10,69,78,67,79,68,73,78,71,32,52,55,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,67,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 67,56,48,10,48,67,56,48,10,48,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,55,68,10,69,78,67,79, 68,73,78,71,32,52,55,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,48,48,10,57,57,48, 48,10,48,56,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,55,69,10,69,78,67,79,68,73,78,71,32, 52,55,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,53,50,56,48,10,49,50,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,55, 70,10,69,78,67,79,68,73,78,71,32,52,55,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,55,70,56,48,10,52,67,56,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,51, 70,48,48,10,50,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,56,48,10,69,78,67, 79,68,73,78,71,32,52,55,51,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,70,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,70,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,56,49,10,69,78,67,79,68,73,78,71, 32,52,55,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,70,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,70,48,48,10,48,51,48, 48,10,48,51,56,48,10,48,51,67,48,10,48,51,52,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 56,50,10,69,78,67,79,68,73,78,71,32,52,55,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,70,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,70,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,52,48,10,48,51,67,48,10,48,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,56,51,10,69,78, 67,79,68,73,78,71,32,52,55,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,55, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,55, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,56,52,10,69,78,67,79,68,73,78, 71,32,52,55,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,70,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,55,56,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,56,53,10,69,78,67,79,68,73,78,71,32,52,55,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,55,67,48,48,10,67,67,48,48,10,67, 67,48,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,56,54,10,69, 78,67,79,68,73,78,71,32,52,55,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,69,52,48,10, 55,69,52,48,10,67,68,56,48,10,67,67,48,48,10,48, 55,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,56,56,10,69,78,67,79,68,73, 78,71,32,52,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,70,57,56,48,10, 49,65,52,48,10,49,65,52,48,10,48,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,56,65,10,69,78,67,79,68,73,78,71,32,52,55, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,70,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,70,48,48,10,48,51,52,48,10,48, 51,52,48,10,48,51,67,48,10,48,51,52,48,10,48,51, 52,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,56,66,10, 69,78,67,79,68,73,78,71,32,52,55,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,70,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,70,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,70,67, 48,10,48,56,52,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,56,67,10,69,78,67,79,68, 73,78,71,32,52,55,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,70,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,69,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,55,56,48,10,48,54,52,48,10,48,54, 52,48,10,51,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,56,68,10,69,78,67,79,68,73,78,71,32,52, 55,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,70,56,48,48,10,49,56,48,48, 10,49,56,56,48,10,48,69,56,48,10,48,55,56,48,10, 48,54,56,48,10,48,54,56,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,57,48, 10,69,78,67,79,68,73,78,71,32,52,55,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,57,49,10,69,78,67,79, 68,73,78,71,32,52,55,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,70,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,68,56,48,10, 48,68,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,57,50,10,69,78,67,79,68,73,78,71,32, 52,55,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,70,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,57, 51,10,69,78,67,79,68,73,78,71,32,52,55,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,48,48, 48,10,51,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,57,52,10,69,78,67, 79,68,73,78,71,32,52,55,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,70,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,67,56,48,10, 48,67,56,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,57,53,10,69,78,67,79,68,73,78,71, 32,52,55,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,67,48,48,10,67,67,48,48,10,67,67, 48,48,10,48,67,48,48,10,48,70,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 57,54,10,69,78,67,79,68,73,78,71,32,52,55,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,67, 57,56,48,10,67,57,56,48,10,67,55,48,48,10,67,48, 48,48,10,55,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,57,55,10,69,78, 67,79,68,73,78,71,32,52,55,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,48,48,48,10,51,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,70,56,48,10, 49,48,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,57,56,10,69,78,67,79,68,73,78, 71,32,52,55,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 56,49,48,48,10,70,70,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,57,57,10,69,78,67,79,68,73,78,71,32,52,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,52,48,48,10, 70,67,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,69,48,48,10,48,54, 48,48,10,48,55,56,48,10,48,54,67,48,10,48,54,67, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,57,65,10,69, 78,67,79,68,73,78,71,32,52,55,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,52,48,48,10,70,67,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 69,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,67, 48,10,48,54,67,48,10,48,55,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,57,66,10,69,78,67,79,68,73, 78,71,32,52,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 51,70,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,48,48,48,10,51,69,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,57,67,10,69,78,67,79,68,73,78,71,32,52,55, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,52,48,48, 10,70,67,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,69,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,55, 56,48,10,48,54,52,48,10,48,54,52,48,10,48,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,57,68,10, 69,78,67,79,68,73,78,71,32,52,55,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,49,48,48,10,70,70,48,48, 10,49,56,48,48,10,70,67,48,48,10,67,67,48,48,10, 67,67,48,48,10,48,67,48,48,10,48,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,57,69,10,69,78,67,79,68, 73,78,71,32,52,55,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,49,48,48,10,70,70,48,48,10,49,56,48,48, 10,55,70,48,48,10,67,57,56,48,10,67,57,56,48,10, 67,55,48,48,10,67,48,48,48,10,55,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,57,70,10,69,78,67,79,68,73,78,71,32,52, 55,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,67,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,48,48,48,10,51,69,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,49,70,56,48,10,49,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,65,48, 10,69,78,67,79,68,73,78,71,32,52,55,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,56,48,48,10,49,56,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,65,49,10,69,78,67,79, 68,73,78,71,32,52,55,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,55,48,48,48,10,51,48,48,48,10,55,56,48,48, 10,67,67,48,48,10,67,55,56,48,10,67,54,67,48,10, 67,54,67,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,65,50,10,69,78,67,79,68,73,78,71,32, 52,55,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,55,48,48, 48,10,51,48,48,48,10,55,56,48,48,10,67,67,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,67,48,10,67,54,67,48,10,67, 55,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,65, 51,10,69,78,67,79,68,73,78,71,32,52,55,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,56,48,48,10,49,56,48, 48,10,51,67,48,48,10,54,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,65,52,10,69,78,67, 79,68,73,78,71,32,52,55,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,55,48,48,48,10,51,48,48,48,10,55,56,48, 48,10,67,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,55,56,48,10,67,54,52,48,10, 67,54,52,48,10,67,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,65,53,10,69,78,67,79,68,73,78,71, 32,52,55,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,48,48,48,10,51,56,48,48,10,49,67, 48,48,10,49,56,48,48,10,51,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 65,54,10,69,78,67,79,68,73,78,71,32,52,55,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,51,56,48,48,10,49,56, 48,48,10,51,67,48,48,10,54,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,65,55,10,69,78, 67,79,68,73,78,71,32,52,55,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,56,52,48,48,10,70,67,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,65,56,10,69,78,67,79,68,73,78, 71,32,52,55,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,48,48,10,52,48,48,48,10,53, 70,48,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,65,57,10,69,78,67,79,68,73,78,71,32,52,55,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,66,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,56,48,10,54,51, 67,48,10,54,51,52,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,65,65,10,69, 78,67,79,68,73,78,71,32,52,55,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 66,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,52, 48,10,54,51,67,48,10,54,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,65,66,10,69,78,67,79,68,73, 78,71,32,52,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,48,48,10,52,48,48,48,10,53,70,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,65,67,10,69,78,67,79,68,73,78,71,32,52,55, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,66,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 56,48,10,54,50,52,48,10,54,50,52,48,10,54,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,65,68,10, 69,78,67,79,68,73,78,71,32,52,55,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,66,69,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,65,69,10,69,78,67,79,68, 73,78,71,32,52,55,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,66,69,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,66,48,10,69,78,67,79,68,73,78,71,32,52, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,56,51,56, 48,10,56,52,67,48,10,66,67,67,48,10,54,51,56,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,66,50, 10,69,78,67,79,68,73,78,71,32,52,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,66,69,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,52,48,10,54,51,52,48,10, 54,51,67,48,10,54,51,52,48,10,54,51,52,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,66,51,10,69,78,67,79, 68,73,78,71,32,52,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,66,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,70,67,48,10,48,56, 52,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,66,52,10,69,78,67,79,68,73,78,71,32, 52,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,66,69,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,51,48,48,10, 48,51,56,48,10,48,50,52,48,10,48,50,52,48,10,48, 70,56,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,66, 53,10,69,78,67,79,68,73,78,71,32,52,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,66,69,52,48,10,54,51,52,48,10,54,51,67, 48,10,54,51,52,48,10,54,51,52,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,66,56,10,69,78,67, 79,68,73,78,71,32,52,55,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,69,48,48,48,10,56,48, 48,48,10,66,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,66,57,10,69,78,67,79,68,73,78,71, 32,52,55,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,56,48,48,10,51, 48,48,48,10,69,48,48,48,10,56,48,48,48,10,66,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,56, 48,10,54,51,67,48,10,54,51,52,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 66,65,10,69,78,67,79,68,73,78,71,32,52,55,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,56,48,48,10,51,48,48,48,10,69, 48,48,48,10,56,48,48,48,10,66,69,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,52,48,10,54,51,67,48,10,54,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,66,66,10,69,78, 67,79,68,73,78,71,32,52,55,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,67,48,48,10,49,56,48,48,10,55,48,48,48,10,52, 48,48,48,10,53,70,48,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,66,67,10,69,78,67,79,68,73,78, 71,32,52,55,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,56,48,48,10, 51,48,48,48,10,69,48,48,48,10,56,48,48,48,10,66, 69,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,56,48,10,54,50,52,48,10,54,50,52,48, 10,54,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,66,68,10,69,78,67,79,68,73,78,71,32,52,55,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 69,48,48,48,10,56,48,48,48,10,66,69,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,66,69,10,69, 78,67,79,68,73,78,71,32,52,55,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,51,48,48,48,10,69,48,48,48,10, 56,48,48,48,10,66,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,67,48,10,69,78,67,79,68,73, 78,71,32,52,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,51,48,48,48,10,69,51,56,48,10,56,54,52,48,10, 66,69,52,48,10,54,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,67,50,10,69,78,67,79,68,73,78,71,32,52,56, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,56,48,48,10,51,48,48,48, 10,69,48,48,48,10,56,48,48,48,10,66,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,52,48,10,54, 51,52,48,10,54,51,67,48,10,54,51,52,48,10,54,51, 52,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,67,51,10, 69,78,67,79,68,73,78,71,32,52,56,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,51,48,48,48,10,69,48,48,48, 10,56,48,48,48,10,66,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,70,67, 48,10,48,56,52,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,67,52,10,69,78,67,79,68, 73,78,71,32,52,56,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,56,48, 48,10,51,48,48,48,10,69,48,48,48,10,56,48,48,48, 10,66,69,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,48,51,56,48,10,48,51,52,48,10,48,50, 52,48,10,48,70,56,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,67,53,10,69,78,67,79,68,73,78,71,32,52, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,51,48,48, 48,10,69,48,48,48,10,56,48,52,48,10,66,69,52,48, 10,54,51,67,48,10,54,51,52,48,10,54,51,52,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,67,56, 10,69,78,67,79,68,73,78,71,32,52,56,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,66,48,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,56,48,10,67,57,56,48,10,54,66,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,67,57,10,69,78,67,79, 68,73,78,71,32,52,56,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,66,48, 48,10,67,57,56,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,67,48,10,54,66,67,48,10,51,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,67,65,10,69,78,67,79,68,73,78,71,32, 52,56,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,68,56,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,54,68,56,48, 10,51,70,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,68,56,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,67, 66,10,69,78,67,79,68,73,78,71,32,52,56,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,68,56,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,54,68,56,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,67,67,10,69,78,67, 79,68,73,78,71,32,52,56,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,68, 56,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,54,68,56,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,70,48,48,10,48,67,56,48,10, 48,67,56,48,10,48,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,67,68,10,69,78,67,79,68,73,78,71, 32,52,56,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,54,66, 48,48,10,67,57,56,48,10,67,57,56,48,10,67,57,67, 48,10,67,57,67,48,10,67,57,67,48,10,67,57,56,48, 10,67,57,56,48,10,54,66,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 67,69,10,69,78,67,79,68,73,78,71,32,52,56,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,54,68,56,48,10,67,67,67,48,10,67,67, 67,48,10,67,67,67,48,10,54,68,56,48,10,51,70,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,68,48,10,69,78, 67,79,68,73,78,71,32,52,56,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,49, 66,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,70,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,68,49,10,69,78,67,79,68,73,78, 71,32,52,56,49,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,49,66,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 56,48,10,54,51,67,48,10,54,51,52,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,70,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,68,50,10,69,78,67,79,68,73,78,71,32,52,56,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,56,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,68,51,10,69, 78,67,79,68,73,78,71,32,52,56,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,68,52,10,69,78,67,79,68,73, 78,71,32,52,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,69,48,48,10,49,57,48,48,10,49,57,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,68,53,10,69,78,67,79,68,73,78,71,32,52,56, 50,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,69,48,48,10,49,66,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,70,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,68,54,10, 69,78,67,79,68,73,78,71,32,52,56,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,68,56,10,69,78,67,79,68, 73,78,71,32,52,56,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,55,70,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,68,57,10,69,78,67,79,68,73,78,71,32,52, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,70,69,48,48,10,67,54,48,48,10, 67,55,56,48,10,67,54,67,48,10,67,54,67,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,68,65, 10,69,78,67,79,68,73,78,71,32,52,56,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,70,69,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,67,48,10,67,54,67,48,10,67,55,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,68,66,10,69,78,67,79, 68,73,78,71,32,52,56,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,68,67,10,69,78,67,79,68,73,78,71,32, 52,56,50,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,67,54,48,48,10,70,69,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,55,56,48,10,67,54,52,48,10,67,54,52,48,10,67, 55,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,68, 68,10,69,78,67,79,68,73,78,71,32,52,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,49, 56,48,10,70,49,56,48,10,66,49,56,48,10,51,49,56, 48,10,51,70,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,68,69,10,69,78,67, 79,68,73,78,71,32,52,56,51,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,68,70,10,69,78,67,79,68,73,78,71, 32,52,56,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,54,48,48,10,70,69,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,49,70,56,48,10,49,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 69,48,10,69,78,67,79,68,73,78,71,32,52,56,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 51,56,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,69,49,10,69,78, 67,79,68,73,78,71,32,52,56,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,51,56,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,55,70, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,67, 48,10,54,51,52,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,69,50,10,69,78,67,79,68,73,78, 71,32,52,56,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,51,56,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,52,48,10,54,51,67,48, 10,54,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,69,51,10,69,78,67,79,68,73,78,71,32,52,56,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,51,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,55,70,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,69,52,10,69, 78,67,79,68,73,78,71,32,52,56,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,51,56,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,55, 70,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,52, 48,10,54,50,52,48,10,54,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,69,53,10,69,78,67,79,68,73, 78,71,32,52,56,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,56,56,48,48, 10,70,56,48,48,10,50,51,56,48,10,50,51,48,48,10, 69,51,48,48,10,54,51,48,48,10,55,70,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,69,54,10,69,78,67,79,68,73,78,71,32,52,56, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,55,70,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,69,55,10, 69,78,67,79,68,73,78,71,32,52,56,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 70,69,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,49,70,56, 48,10,49,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,69,56,10,69,78,67,79,68, 73,78,71,32,52,56,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,69,57,10,69,78,67,79,68,73,78,71,32,52, 56,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,70,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,69,65, 10,69,78,67,79,68,73,78,71,32,52,56,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,54,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,54,54,48,48,10,51,67,48,48,10, 49,56,48,48,10,49,66,48,48,10,49,70,48,48,10,49, 57,56,48,10,49,57,56,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,69,66,10,69,78,67,79, 68,73,78,71,32,52,56,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,69,67,10,69,78,67,79,68,73,78,71,32, 52,56,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,49,56,48,48,10,49,70,48,48,10, 49,67,56,48,10,49,68,56,48,10,49,66,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,69, 68,10,69,78,67,79,68,73,78,71,32,52,56,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,67,67,48,10,48,67,67,48,10, 55,70,56,48,10,67,48,48,48,10,67,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,69,69,10,69,78,67, 79,68,73,78,71,32,52,56,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,51,54, 48,48,10,54,51,48,48,10,54,51,56,48,10,54,51,67, 48,10,51,51,52,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,50,70,48,10,69,78,67,79,68,73,78,71, 32,52,56,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,51,67,48, 48,10,51,48,48,48,10,49,56,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,50, 70,49,10,69,78,67,79,68,73,78,71,32,52,56,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,67,48,48,10,55,56,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,67,56,48,10,54,54,67,48, 10,67,51,52,48,10,67,51,48,48,10,67,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,50,70,50,10,69,78, 67,79,68,73,78,71,32,52,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,54,48,48,10,67,67, 48,48,10,55,56,48,48,10,54,48,48,48,10,51,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,67,51,52,48, 10,67,51,67,48,10,67,51,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,50,70,51,10,69,78,67,79,68,73,78, 71,32,52,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,54,48,48,10,51,67, 48,48,10,51,48,48,48,10,49,56,48,48,10,49,69,48, 48,10,51,51,48,48,10,55,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 50,70,52,10,69,78,67,79,68,73,78,71,32,52,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,67,54,48,48,10,67,54,48,48,10,67, 54,48,48,10,67,67,48,48,10,55,56,48,48,10,54,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,54,55,56, 48,10,67,50,52,48,10,67,51,52,48,10,67,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,50,70,53,10,69, 78,67,79,68,73,78,71,32,52,56,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 67,54,48,48,10,67,55,56,48,10,67,54,67,48,10,67, 67,67,48,10,55,56,48,48,10,54,48,48,48,10,51,48, 48,48,10,51,67,48,48,10,54,54,48,48,10,67,51,48, 48,10,67,51,48,48,10,67,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,50,70,54,10,69,78,67,79,68,73, 78,71,32,52,56,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,51, 67,48,48,10,51,48,48,48,10,49,56,48,48,10,49,69, 48,48,10,51,51,56,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,50,70,55,10,69,78,67,79,68,73,78,71,32,52,56, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,67,48,48,10,67,54,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,67,48,48,10,55,56,48,48,10,54, 48,48,48,10,51,48,48,48,10,51,67,48,48,10,69,54, 48,48,10,67,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,70,67,48,10,48,56,52,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,50,70,56,10, 69,78,67,79,68,73,78,71,32,52,56,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,54,51,48,48,10,55,70,48,48,10,54,51,48,48,10, 54,54,48,48,10,51,67,48,48,10,51,48,48,48,10,49, 56,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,50,70,57,10,69,78,67,79,68, 73,78,71,32,52,56,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,67,54,48,48, 10,70,69,48,48,10,67,54,48,48,10,67,67,48,48,10, 55,56,48,48,10,54,48,48,48,10,51,48,48,48,10,51, 67,56,48,10,54,54,67,48,10,67,51,52,48,10,67,51, 48,48,10,67,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,50,70,65,10,69,78,67,79,68,73,78,71,32,52, 56,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,67,48,48,10,67,54,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,67,48,48,10,55,56,48,48,10, 54,48,48,48,10,51,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,67,51,52,48,10,67,51,67,48,10,67,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,50,70,66, 10,69,78,67,79,68,73,78,71,32,52,56,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,55,70,48,48,10,54,51,48,48, 10,54,54,48,48,10,51,67,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,51,51,48,48,10,55, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,50,70,67,10,69,78,67,79, 68,73,78,71,32,52,56,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,70,69,48,48,10,67,54,48,48,10,67,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,51,48,48,48,10, 51,67,48,48,10,54,55,56,48,10,67,50,52,48,10,67, 51,52,48,10,67,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,50,70,68,10,69,78,67,79,68,73,78,71,32, 52,56,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,67,48,48,10,67,54,48,48,10,70,70,56, 48,10,67,54,67,48,10,67,67,67,48,10,55,56,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,48,48,10,67,51,48,48,10,67, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,50,70, 69,10,69,78,67,79,68,73,78,71,32,52,56,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,48,48,48, 10,49,56,48,48,10,49,69,48,48,10,51,51,56,48,10, 54,49,56,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,50,70,70,10,69,78,67, 79,68,73,78,71,32,52,56,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,67,54, 48,48,10,70,69,48,48,10,67,54,48,48,10,67,67,48, 48,10,55,56,48,48,10,54,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,69,54,48,48,10,67,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,70,67,48,10,48, 56,52,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,48,48,10,69,78,67,79,68,73,78,71, 32,52,56,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,52, 48,56,48,10,55,70,56,48,10,48,67,48,48,10,51,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,54,48, 48,10,51,67,48,48,10,51,48,48,48,10,49,56,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 48,49,10,69,78,67,79,68,73,78,71,32,52,56,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,56,49,48,48,10,70, 70,48,48,10,49,56,48,48,10,55,67,48,48,10,67,54, 48,48,10,67,54,48,48,10,67,67,48,48,10,55,56,48, 48,10,54,48,48,48,10,51,48,48,48,10,51,67,56,48, 10,54,54,67,48,10,67,51,52,48,10,67,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,48,50,10,69,78, 67,79,68,73,78,71,32,52,56,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,56,49,48,48,10,70,70,48,48,10,49, 56,48,48,10,55,67,48,48,10,67,54,48,48,10,67,54, 48,48,10,67,67,48,48,10,55,56,48,48,10,54,48,48, 48,10,51,48,48,48,10,51,67,48,48,10,54,54,52,48, 10,67,51,52,48,10,67,51,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,48,51,10,69,78,67,79,68,73,78, 71,32,52,56,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,67,48,48,10,51, 69,48,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,51,67,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,48,52,10,69,78,67,79,68,73,78,71,32,52,56,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,49,48,48,10, 70,70,48,48,10,49,56,48,48,10,55,67,48,48,10,67, 54,48,48,10,67,54,48,48,10,67,67,48,48,10,55,56, 48,48,10,54,48,48,48,10,51,48,48,48,10,51,68,56, 48,10,54,54,52,48,10,67,51,52,48,10,67,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,48,53,10,69, 78,67,79,68,73,78,71,32,52,56,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,49,48,48,10,70,70,48,48,10, 49,56,48,48,10,55,67,48,48,10,67,55,56,48,10,67, 54,67,48,10,67,67,67,48,10,55,56,48,48,10,54,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,54,54,48, 48,10,67,51,48,48,10,67,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,48,54,10,69,78,67,79,68,73, 78,71,32,52,56,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,67,48,48,10, 51,69,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 54,48,48,10,51,67,48,48,10,51,48,48,48,10,49,56, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,48,55,10,69,78,67,79,68,73,78,71,32,52,56, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,56,49,48,48, 10,70,70,48,48,10,49,56,48,48,10,55,67,48,48,10, 67,54,48,48,10,67,54,48,48,10,67,67,48,48,10,55, 56,48,48,10,54,48,48,48,10,51,48,48,48,10,51,67, 48,48,10,69,54,48,48,10,67,51,48,48,10,48,51,48, 48,10,48,70,67,48,10,48,56,52,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,48,56,10, 69,78,67,79,68,73,78,71,32,52,56,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,48,57,10,69,78,67,79,68, 73,78,71,32,52,56,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,67,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,55,56,48,10,48,54,67,48,10,48,54,67,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,48,65,10,69,78,67,79,68,73,78,71,32,52, 56,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,67,48,10,48,54,67,48,10,48,55, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,48,66, 10,69,78,67,79,68,73,78,71,32,52,56,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,48,67,10,69,78,67,79, 68,73,78,71,32,52,56,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,55,56,48,10,48,54,52,48,10,48, 54,52,48,10,48,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,48,68,10,69,78,67,79,68,73,78,71,32, 52,56,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,57,56,48,10,67,57,56, 48,10,55,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,48, 69,10,69,78,67,79,68,73,78,71,32,52,56,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,69,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,49,48,10,69,78,67, 79,68,73,78,71,32,52,56,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,67,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,55,56,48,10,48,54,52,48,10,48,54,52,48, 10,48,55,56,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,49,50,10,69,78,67,79,68,73,78,71, 32,52,56,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,56, 48,10,48,54,56,48,10,48,55,56,48,10,48,54,56,48, 10,48,54,56,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 49,51,10,69,78,67,79,68,73,78,71,32,52,56,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,54, 67,48,48,10,48,67,48,48,10,51,70,48,48,10,51,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,49,52,10,69,78, 67,79,68,73,78,71,32,52,56,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,55,56,48,10,48,54,52,48,10,48,54,52, 48,10,48,55,56,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,49,53,10,69,78,67,79,68,73,78, 71,32,52,56,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,67,48,48,10,48,54,56,48,10,48, 54,56,48,10,48,55,56,48,10,48,54,56,48,10,48,54, 56,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,49,56,10,69,78,67,79,68,73,78,71,32,52,56,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 55,70,48,48,10,49,56,48,48,10,55,69,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,49,57,10,69, 78,67,79,68,73,78,71,32,52,56,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,56,50,48,48,10,70,69,48,48,10, 51,48,48,48,10,70,67,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,55,56,48,10,48,54,67,48,10,48,54, 67,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,49,65,10,69,78,67,79,68,73, 78,71,32,52,56,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,56,50,48,48,10,70,69,48,48,10,51,48,48,48,10, 70,67,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,67,48,10,48,54,67, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,49,66,10,69,78,67,79,68,73,78,71,32,52,56, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,52,49,48,48, 10,55,70,48,48,10,49,56,48,48,10,55,69,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,49,56,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,49,67,10, 69,78,67,79,68,73,78,71,32,52,56,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,56,50,48,48,10,70,69,48,48, 10,51,48,48,48,10,70,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,55,56,48,10,48,54, 52,48,10,48,54,52,48,10,48,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,49,68,10,69,78,67,79,68, 73,78,71,32,52,56,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,50,48,56,48,10,51,70,56,48,10,48,54,48,48, 10,55,70,48,48,10,67,57,56,48,10,67,57,56,48,10, 55,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,49,69,10,69,78,67,79,68,73,78,71,32,52, 56,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,55,70,48,48,10,49,50,48,48,10,49,50,48,48, 10,55,69,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,50,48, 10,69,78,67,79,68,73,78,71,32,52,56,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,52,57,48,48,10,52,57,48,48,10,52,57,48,48, 10,52,57,48,48,10,52,57,48,48,10,52,57,48,48,10, 52,57,48,48,10,52,57,48,48,10,52,57,48,48,10,52, 57,48,48,10,52,57,48,48,10,52,57,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,50,49,10,69,78,67,79, 68,73,78,71,32,52,56,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,67,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,51,56,48,10,57,50,56,48,10,57,50,56,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,48,48,10,57, 50,48,48,10,57,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,50,50,10,69,78,67,79,68,73,78,71,32, 52,56,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,67,48,48,10,57,50,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,56,48,10,57, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,50, 51,10,69,78,67,79,68,73,78,71,32,52,56,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,52,57,48,48,10,52,57,48,48, 10,52,57,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,49,48,48,10,48,49,48,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,50,52,10,69,78,67, 79,68,73,78,71,32,52,57,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,57,50,48,48,10,57,50,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,51,56,48,10,57,50,52,48,10, 57,50,52,48,10,57,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,50,53,10,69,78,67,79,68,73,78,71, 32,52,57,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,57,48,48,10,52,57, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,48,56,48,48,10,48,52,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,52,48,48,10, 48,52,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 50,54,10,69,78,67,79,68,73,78,71,32,52,57,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,57,48,48,10,52,57,48,48,10,52,57, 48,48,10,52,57,48,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,52,48,48,48,10,52,48,48,48, 10,52,48,48,48,10,52,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,50,55,10,69,78, 67,79,68,73,78,71,32,52,57,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,50,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,70,56,48,10, 48,56,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,50,56,10,69,78,67,79,68,73,78, 71,32,52,57,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,67,48,48,10,68,54,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,48,48,10,57,50,48, 48,10,68,66,48,48,10,66,54,56,48,10,66,54,56,48, 10,68,66,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,50,57,10,69,78,67,79,68,73,78,71,32,52,57,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,67,48,48,10,68,54,48,48,10,57,50,48,48,10,57, 50,48,48,10,57,50,48,48,10,57,50,48,48,10,57,50, 48,48,10,57,50,48,48,10,57,50,52,48,10,68,66,52, 48,10,66,54,67,48,10,66,54,56,48,10,68,66,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,50,65,10,69, 78,67,79,68,73,78,71,32,52,57,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,67,48,48,10, 68,54,48,48,10,57,50,48,48,10,57,50,48,48,10,57, 51,56,48,10,57,50,56,48,10,57,50,56,48,10,57,50, 48,48,10,57,50,48,48,10,68,66,48,48,10,66,54,56, 48,10,66,54,56,48,10,68,66,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,50,66,10,69,78,67,79,68,73, 78,71,32,52,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,68,54,48,48,10, 57,50,48,48,10,57,50,48,48,10,57,50,48,48,10,68, 65,48,48,10,66,54,48,48,10,66,54,48,48,10,68,65, 48,48,10,48,51,48,48,10,48,50,56,48,10,48,50,56, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,50,67,10,69,78,67,79,68,73,78,71,32,52,57, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,68,51,48,48,10,57,49,48,48,10, 57,49,48,48,10,57,49,48,48,10,57,49,48,48,10,57, 49,48,48,10,57,49,48,48,10,57,49,48,48,10,68,57, 56,48,10,66,54,52,48,10,66,54,52,48,10,68,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,50,68,10, 69,78,67,79,68,73,78,71,32,52,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,67,48,48, 10,68,54,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,50,48,48,10,68,51,48,48,10,66,50,56,48,10,66, 50,56,48,10,68,51,48,48,10,49,56,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,50,69,10,69,78,67,79,68, 73,78,71,32,52,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,67,48,48,10,68,54,48,48, 10,57,50,48,48,10,57,50,48,48,10,57,50,48,48,10, 57,66,48,48,10,57,54,56,48,10,57,54,56,48,10,57, 66,48,48,10,67,48,48,48,10,65,48,48,48,10,65,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,50,70,10,69,78,67,79,68,73,78,71,32,52, 57,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,67,48,48,10,68,54,48,48,10,57,50,48,48, 10,57,50,48,48,10,57,50,48,48,10,68,65,48,48,10, 66,54,48,48,10,66,54,48,48,10,68,65,48,48,10,48, 50,48,48,10,48,50,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,70,56,48,10,48,56,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,51,48, 10,69,78,67,79,68,73,78,71,32,52,57,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,51,69,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,51,67,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,51,49,10,69,78,67,79, 68,73,78,71,32,52,57,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,55,67,48, 48,10,67,54,48,48,10,67,54,48,48,10,67,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,51,48,48,48,10, 51,67,56,48,10,54,54,67,48,10,67,51,52,48,10,67, 51,48,48,10,67,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,51,50,10,69,78,67,79,68,73,78,71,32, 52,57,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,55,67,48,48,10,67,54,48, 48,10,67,54,48,48,10,67,67,48,48,10,55,56,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,67,48,48,10, 54,54,48,48,10,67,51,52,48,10,67,51,67,48,10,67, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,51, 51,10,69,78,67,79,68,73,78,71,32,52,57,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,48,48,48, 10,49,56,48,48,10,49,69,48,48,10,51,51,48,48,10, 55,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,51,52,10,69,78,67, 79,68,73,78,71,32,52,57,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,55,67, 48,48,10,67,54,48,48,10,67,54,48,48,10,67,67,48, 48,10,55,56,48,48,10,54,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,54,55,56,48,10,67,50,52,48,10, 67,51,52,48,10,67,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,51,53,10,69,78,67,79,68,73,78,71, 32,52,57,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,67,48,48,10,67,55, 56,48,10,67,54,67,48,10,67,67,67,48,10,55,56,48, 48,10,54,48,48,48,10,51,48,48,48,10,51,67,48,48, 10,54,54,48,48,10,67,51,48,48,10,67,51,48,48,10, 67,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 51,54,10,69,78,67,79,68,73,78,71,32,52,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,69,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,54,48,48,10,51,67,48,48,10,51,48,48, 48,10,49,56,48,48,10,49,69,48,48,10,51,51,56,48, 10,54,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,51,55,10,69,78, 67,79,68,73,78,71,32,52,57,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,55, 67,48,48,10,67,54,48,48,10,67,54,48,48,10,67,67, 48,48,10,55,56,48,48,10,54,48,48,48,10,51,48,48, 48,10,51,67,48,48,10,69,54,48,48,10,67,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,70,67,48,10, 48,56,52,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,51,56,10,69,78,67,79,68,73,78, 71,32,52,57,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,51,57,10,69,78,67,79,68,73,78,71,32,52,57,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,51,54,67,48,10,54,51,52, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,51,65,10,69, 78,67,79,68,73,78,71,32,52,57,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,51,54,48,48,10,49,67, 48,48,10,51,54,48,48,10,54,51,48,48,10,67,49,56, 48,10,67,49,67,48,10,67,49,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,51,66,10,69,78,67,79,68,73, 78,71,32,52,57,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,55,54, 48,48,10,54,51,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,51,67,10,69,78,67,79,68,73,78,71,32,52,57, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 54,48,48,10,49,67,48,48,10,51,54,48,48,10,54,51, 56,48,10,67,51,52,48,10,67,50,52,48,10,67,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,51,68,10, 69,78,67,79,68,73,78,71,32,52,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,54,48,48,10,54,51,48,48,10,54,51,56,48,10, 54,51,67,48,10,54,51,52,48,10,51,54,48,48,10,49, 67,48,48,10,51,54,48,48,10,54,51,48,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,51,69,10,69,78,67,79,68, 73,78,71,32,52,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,49,67,48,48,10,51, 55,48,48,10,54,51,48,48,10,67,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,51,70,10,69,78,67,79,68,73,78,71,32,52, 57,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,54,67,48,48,10,67,54,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,54,48,48,10, 54,67,48,48,10,51,56,48,48,10,69,67,48,48,10,67, 54,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,70,67,48,10,48,56,52,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,52,48, 10,69,78,67,79,68,73,78,71,32,52,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,49,66,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,55,70,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,70,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,52,49,10,69,78,67,79, 68,73,78,71,32,52,57,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,49,66,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,55,70,56,48,10,54,51,67,48,10,54,51,52,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 70,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,52,50,10,69,78,67,79,68,73,78,71,32, 52,57,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,51,70,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,52, 51,10,69,78,67,79,68,73,78,71,32,52,57,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,51,48,48,10,51,70,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,52,52,10,69,78,67, 79,68,73,78,71,32,52,57,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,54,51, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,51,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,69,48,48,10,49,57,48,48,10, 49,57,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,52,53,10,69,78,67,79,68,73,78,71, 32,52,57,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,69,48,48,10,49,66, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,70,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,70,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 52,54,10,69,78,67,79,68,73,78,71,32,52,57,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,51,69,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,52,56,10,69,78, 67,79,68,73,78,71,32,52,57,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,70,56,48,48,10,67,67,48,48,10,67,68,56,48, 10,55,70,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,52,57,10,69,78,67,79,68,73,78, 71,32,52,57,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,70,56, 48,48,10,67,67,48,48,10,67,68,56,48,10,55,70,56, 48,10,51,70,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,52,65,10,69,78,67,79,68,73,78,71,32,52,57,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,51,48,48,10,70,57,56,48,10,67,68,56, 48,10,67,68,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,52,66,10,69, 78,67,79,68,73,78,71,32,52,57,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,70,56,48,48,10,67,67,48,48,10,67,68, 56,48,10,55,70,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,52,67,10,69,78,67,79,68,73, 78,71,32,52,57,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,70, 56,48,48,10,67,67,48,48,10,67,68,56,48,10,55,70, 56,48,10,51,70,48,48,10,48,67,56,48,10,48,67,56, 48,10,48,55,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,52,68,10,69,78,67,79,68,73,78,71,32,52,57, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,51,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,55,56,48,10,51,55, 48,48,10,49,69,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,52,69,10, 69,78,67,79,68,73,78,71,32,52,57,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,55,48,48,10,67,52,56,48,10,67,52,56,48,10, 67,51,48,48,10,67,48,48,48,10,70,56,48,48,10,67, 67,48,48,10,67,70,48,48,10,54,69,48,48,10,51,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,52,70,10,69,78,67,79,68, 73,78,71,32,52,57,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 70,56,48,48,10,67,67,48,48,10,67,68,56,48,10,55, 70,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,50,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,53,48,10,69,78,67,79,68,73,78,71,32,52, 57,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,53,49, 10,69,78,67,79,68,73,78,71,32,52,57,52,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,57,57,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,56,48,10, 49,57,56,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,53,50,10,69,78,67,79, 68,73,78,71,32,52,57,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,48,48,10,57,57,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,49,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,53,51,10,69,78,67,79,68,73,78,71,32, 52,57,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,67,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,53, 52,10,69,78,67,79,68,73,78,71,32,52,57,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,67,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,48,48,10, 48,67,56,48,10,48,67,56,48,10,48,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,53,53,10,69,78,67, 79,68,73,78,71,32,52,57,52,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,52,67, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,53,54,10,69,78,67,79,68,73,78,71, 32,52,57,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,52,67,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,51,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 53,55,10,69,78,67,79,68,73,78,71,32,52,57,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,50,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,53,56,10,69,78, 67,79,68,73,78,71,32,52,57,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,55,70,48,48,10,48, 56,48,48,10,51,69,48,48,10,54,51,48,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,53,57,10,69,78,67,79,68,73,78, 71,32,52,57,53,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 52,50,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,48,48,48,10,67,51,48, 48,10,67,49,56,48,10,69,49,56,48,10,55,70,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,53,65,10,69,78,67,79,68,73,78,71,32,52,57,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,52,50,48,48,10, 55,69,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,54,51,48,48,10,70,57,56,48,10,67,68,56, 48,10,67,68,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,54,49,10,69, 78,67,79,68,73,78,71,32,52,57,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,54,50,10,69,78,67,79,68,73, 78,71,32,52,57,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,54,51,10,69,78,67,79,68,73,78,71,32,52,57, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,55,70,56,48,10, 54,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,54,52,10, 69,78,67,79,68,73,78,71,32,52,57,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,55,70,56,48,10,54,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,49, 56,48,10,55,70,56,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,54,53,10,69,78,67,79,68, 73,78,71,32,52,57,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,49,56,48,10,55,70,56,48,10,54,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,54,54,10,69,78,67,79,68,73,78,71,32,52, 57,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,54,55, 10,69,78,67,79,68,73,78,71,32,52,57,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,54,56,10,69,78,67,79, 68,73,78,71,32,52,57,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,67,48,48,10,48,67,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,54,57,10,69,78,67,79,68,73,78,71,32, 52,57,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,49,48,48,10,55,70,48,48,10,48,48,48, 48,10,51,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,55,70,48,48,10,52,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,54, 65,10,69,78,67,79,68,73,78,71,32,52,57,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,69,48,48,10,48,48,48,48,10,55, 70,48,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,54,66,10,69,78,67, 79,68,73,78,71,32,52,57,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,49,48,48,10,55,70, 48,48,10,48,48,48,48,10,55,70,48,48,10,54,51,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,55,70,48,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,54,67,10,69,78,67,79,68,73,78,71, 32,52,57,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,49,48,48,10,55,70,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,55,70,48,48,10,52,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,51, 54,68,10,69,78,67,79,68,73,78,71,32,52,57,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,55,70,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,70,48,48,10,55,51,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,55,48,48,10,51,69,48,48,10,48,48,48,48,10, 55,70,48,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,51,54,69,10,69,78, 67,79,68,73,78,71,32,52,57,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,49,48,48,10,55, 70,48,48,10,48,48,48,48,10,51,67,48,48,10,54,54, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,56,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,55,70,48,48,10, 52,49,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,51,54,70,10,69,78,67,79,68,73,78, 71,32,52,57,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,55,70,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,51,51,48,48,10,51,70,48,48, 10,48,48,48,48,10,55,70,48,48,10,52,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 51,55,48,10,69,78,67,79,68,73,78,71,32,52,57,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,52,67,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,52,48,56,48,10,48,48,48,48, 10,55,70,56,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,51,55,49,10,69, 78,67,79,68,73,78,71,32,52,57,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 55,70,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,55,70,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,50,48, 48,10,51,67,48,48,10,48,48,48,48,10,55,70,48,48, 10,52,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,51,55,50,10,69,78,67,79,68,73, 78,71,32,52,57,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,55,70,56,48,10,52,48,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,51,55,51,10,69,78,67,79,68,73,78,71,32,52,57, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,48,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,52,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,52,48,56,48,10,48,48,48, 48,10,55,70,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,51,55,52,10, 69,78,67,79,68,73,78,71,32,52,57,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,48,48,48,10,54,55,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,51,57,56,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,51,55,53,10,69,78,67,79,68, 73,78,71,32,52,57,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,55,70,56,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,55,70,56,48,10,52,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,51,55,54,10,69,78,67,79,68,73,78,71,32,52, 57,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,55,70,56,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,70,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,51,55,55, 10,69,78,67,79,68,73,78,71,32,52,57,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,52,67,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,55, 70,56,48,10,52,48,56,48,10,48,48,48,48,10,55,70, 56,48,10,52,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,51,55,56,10,69,78,67,79, 68,73,78,71,32,52,57,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,56,48,10,55,70,56, 48,10,48,48,48,48,10,49,70,48,48,10,51,67,56,48, 10,54,51,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,49,56,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,55,70,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,51,55,57,10,69,78,67,79,68,73,78,71,32, 52,57,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,53,50,56,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,55,70,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,51,55, 65,10,69,78,67,79,68,73,78,71,32,52,57,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,49, 48,48,10,55,70,48,48,10,48,48,48,48,10,55,67,48, 48,10,54,54,48,48,10,48,54,48,48,10,48,70,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,55, 70,48,48,10,52,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,51,55,66,10,69,78,67, 79,68,73,78,71,32,52,57,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,55,70, 56,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,69,48,48, 10,51,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,55,70,56,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,51,55,67,10,69,78,67,79,68,73,78,71, 32,52,57,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,48,56,48,10,70,70,56,48,10,48,48, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,70,70,48,48,10,56,52,48,48, 10,56,52,48,48,10,56,52,48,48,10,52,50,48,48,10, 48,48,48,48,10,70,70,56,48,10,56,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 56,48,10,69,78,67,79,68,73,78,71,32,53,55,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,49,10,69,78, 67,79,68,73,78,71,32,53,55,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,56,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,56,50,10,69,78,67,79,68,73,78, 71,32,53,55,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,50,56,48,10,48,50,56,48,10,48,50,56, 48,10,48,50,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,50,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,56,51,10,69,78,67,79,68,73,78,71,32,53,55,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,67,48,10,48,65, 56,48,10,48,65,56,48,10,48,65,56,48,10,48,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,56,52,10,69, 78,67,79,68,73,78,71,32,53,55,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,50,65,56,48,10,50,65, 56,48,10,50,65,56,48,10,50,65,56,48,10,50,65,56, 48,10,50,65,56,48,10,50,65,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,53,10,69,78,67,79,68,73, 78,71,32,53,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,56,54,10,69,78,67,79,68,73,78,71,32,53,55, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,56,48,10,48,48,56,48, 10,48,48,56,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,70,70,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,56,55,10, 69,78,67,79,68,73,78,71,32,53,55,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,50,56,48,10,48,50,56,48,10,48,50,56,48, 10,48,50,56,48,10,48,50,56,48,10,48,50,56,48,10, 48,50,56,48,10,70,70,67,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,56,56,10,69,78,67,79,68, 73,78,71,32,53,55,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,65,56,48,10,48,65,56,48,10,48,65,56,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,57,10,69,78,67,79,68,73,78,71,32,53, 55,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,50,65,56,48,10,50,65,56, 48,10,50,65,56,48,10,50,65,56,48,10,50,65,56,48, 10,50,65,56,48,10,50,65,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,56,65, 10,69,78,67,79,68,73,78,71,32,53,55,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,65,65,56,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,56,66,10,69,78,67,79, 68,73,78,71,32,53,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,70,70,67,48,10,48,48,56,48,10,48,48,56,48,10, 48,48,56,48,10,48,48,56,48,10,48,48,56,48,10,48, 48,56,48,10,48,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,56,67,10,69,78,67,79,68,73,78,71,32, 53,55,55,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,49,52,48,10,48,49, 52,48,10,48,49,52,48,10,48,49,52,48,10,48,49,52, 48,10,48,49,52,48,10,48,49,52,48,10,70,70,67,48, 10,48,50,56,48,10,48,50,56,48,10,48,50,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,50,56,48,10,48, 50,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 68,10,69,78,67,79,68,73,78,71,32,53,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,53,52,48,10,48,53,52,48,10,48,53, 52,48,10,48,53,52,48,10,48,53,52,48,10,48,53,52, 48,10,48,53,52,48,10,70,70,67,48,10,48,65,56,48, 10,48,65,56,48,10,48,65,56,48,10,48,65,56,48,10, 48,65,56,48,10,48,65,56,48,10,48,65,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,56,69,10,69,78,67, 79,68,73,78,71,32,53,55,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 53,52,48,10,49,53,52,48,10,49,53,52,48,10,49,53, 52,48,10,49,53,52,48,10,49,53,52,48,10,49,53,52, 48,10,70,70,67,48,10,50,65,56,48,10,50,65,56,48, 10,50,65,56,48,10,50,65,56,48,10,50,65,56,48,10, 50,65,56,48,10,50,65,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,56,70,10,69,78,67,79,68,73,78,71, 32,53,55,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,53,53,52,48,10,53, 53,52,48,10,53,53,52,48,10,53,53,52,48,10,53,53, 52,48,10,53,53,52,48,10,53,53,52,48,10,70,70,67, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,65,65,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 57,48,10,69,78,67,79,68,73,78,71,32,53,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,70,70,67,48,10,48,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,49,10,69,78, 67,79,68,73,78,71,32,53,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,50, 56,48,10,70,70,67,48,10,48,50,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,57,50,10,69,78,67,79,68,73,78, 71,32,53,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,65,56,48,10,70,70, 67,48,10,48,65,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,57,51,10,69,78,67,79,68,73,78,71,32,53,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,65,56,48,10,70,70,67,48,10,50,65, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,57,52,10,69, 78,67,79,68,73,78,71,32,53,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,65, 65,56,48,10,70,70,67,48,10,65,65,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,53,10,69,78,67,79,68,73, 78,71,32,53,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,50,48,56,48,10,50,48,56,48,10,49,49,48,48,10, 49,49,48,48,10,48,65,48,48,10,48,65,48,48,10,70, 70,67,48,10,48,65,48,48,10,48,65,48,48,10,49,49, 48,48,10,49,49,48,48,10,50,48,56,48,10,50,48,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,57,54,10,69,78,67,79,68,73,78,71,32,53,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,65,48,48,10,49,49,48,48,10,50,48,56,48,10, 52,48,52,48,10,52,48,52,48,10,70,70,67,48,10,52, 48,52,48,10,52,48,52,48,10,50,48,56,48,10,49,49, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,57,55,10, 69,78,67,79,68,73,78,71,32,53,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,50,48,48,48,10,50, 48,48,48,10,50,70,48,48,10,50,49,48,48,10,50,49, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,57,56,10,69,78,67,79,68, 73,78,71,32,53,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,57,10,69,78,67,79,68,73,78,71,32,53, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,53,48,48,10,51,70,56, 48,10,49,53,48,48,10,51,70,56,48,10,49,53,48,48, 10,51,70,56,48,10,49,53,48,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,57,65, 10,69,78,67,79,68,73,78,71,32,53,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,57,66,10,69,78,67,79, 68,73,78,71,32,53,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,48, 48,10,50,48,48,48,10,49,48,48,48,10,48,56,48,48, 10,48,55,67,48,10,48,56,48,48,10,49,48,48,48,10, 50,48,48,48,10,52,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,57,67,10,69,78,67,79,68,73,78,71,32, 53,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,56,48,10,48,49,48, 48,10,48,50,48,48,10,48,52,48,48,10,70,56,48,48, 10,48,52,48,48,10,48,50,48,48,10,48,49,48,48,10, 48,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 48,10,69,78,67,79,68,73,78,71,32,53,55,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,51, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,57,48, 48,10,55,51,48,48,10,54,54,48,48,10,54,67,48,48, 10,55,56,48,48,10,55,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,65,49,10,69,78,67, 79,68,73,78,71,32,53,55,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,54,66,48,48,10,54,54, 48,48,10,54,67,48,48,10,55,57,48,48,10,55,51,48, 48,10,54,54,48,48,10,54,67,48,48,10,55,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,65,50,10,69,78,67,79,68,73,78,71, 32,53,55,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,56,48,48,10,51,67, 48,48,10,51,54,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 65,51,10,69,78,67,79,68,73,78,71,32,53,55,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,55,48,48,48,10,55,56,48,48,10,54,67, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,57,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,52,10,69,78, 67,79,68,73,78,71,32,53,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,55, 48,48,48,10,55,56,48,48,10,54,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,65,53,10,69,78,67,79,68,73,78, 71,32,53,55,57,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,55,48,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,55,51, 48,48,10,55,57,56,48,10,55,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,65,54,10,69,78,67,79,68,73,78,71,32,53,55,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,55,70,48,48,10,54,51,56,48,10,54,49, 56,48,10,54,51,56,48,10,55,70,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,65,55,10,69, 78,67,79,68,73,78,71,32,53,55,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,55,70,48,48,10,54, 51,56,48,10,54,57,56,48,10,54,68,56,48,10,54,57, 56,48,10,54,51,56,48,10,55,70,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,56,10,69,78,67,79,68,73, 78,71,32,53,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,55,56,48,48,10, 54,67,48,48,10,54,54,48,48,10,55,50,48,48,10,55, 56,48,48,10,54,67,48,48,10,54,54,48,48,10,54,50, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,65,57,10,69,78,67,79,68,73,78,71,32,53,56, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,55,51,48,48,10,55,69,48,48,10, 54,67,48,48,10,54,49,56,48,10,55,51,48,48,10,55, 69,48,48,10,54,67,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,65,65,10, 69,78,67,79,68,73,78,71,32,53,56,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,55,51,48,48,10,55,69,48,48,10,54,67,48,48,10, 54,48,48,48,10,55,56,48,48,10,55,69,48,48,10,54, 54,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,65,66,10,69,78,67,79,68, 73,78,71,32,53,56,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,51,48,48,48, 10,51,56,48,48,10,51,67,48,48,10,51,54,48,48,10, 51,51,48,48,10,51,57,48,48,10,51,67,48,48,10,51, 54,48,48,10,51,51,48,48,10,51,49,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,67,10,69,78,67,79,68,73,78,71,32,53, 56,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,50,67,48,48,10,51,67,48,48, 10,49,67,48,48,10,48,69,48,48,10,50,70,48,48,10, 51,68,48,48,10,49,67,48,48,10,48,69,48,48,10,48, 70,48,48,10,48,68,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,65,68, 10,69,78,67,79,68,73,78,71,32,53,56,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,67,48,48, 10,49,69,48,48,10,49,66,48,48,10,49,57,48,48,10, 49,67,48,48,10,49,69,48,48,10,49,66,48,48,10,49, 57,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,65,69,10,69,78,67,79, 68,73,78,71,32,53,56,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,67,48,48,10,51,67,48,48, 10,54,67,48,48,10,52,67,48,48,10,49,67,48,48,10, 51,67,48,48,10,54,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,65,70,10,69,78,67,79,68,73,78,71,32, 53,56,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,68,48,48,10,48,70,48, 48,10,48,69,48,48,10,49,67,48,48,10,51,68,48,48, 10,50,70,48,48,10,48,69,48,48,10,49,67,48,48,10, 51,67,48,48,10,50,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 48,10,69,78,67,79,68,73,78,71,32,53,56,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,68,48,48,10,48,70,48,48,10,48,69,48, 48,10,49,67,48,48,10,51,67,48,48,10,50,67,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 50,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,66,49,10,69,78,67, 79,68,73,78,71,32,53,56,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,51,67, 48,48,10,51,54,48,48,10,51,51,48,48,10,51,49,56, 48,10,51,51,48,48,10,51,54,48,48,10,51,67,48,48, 10,51,54,48,48,10,51,51,48,48,10,51,49,56,48,10, 51,48,56,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,66,50,10,69,78,67,79,68,73,78,71, 32,53,56,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 66,51,10,69,78,67,79,68,73,78,71,32,53,56,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,48,48,48,10,55,56,48,48,10,54,67,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,52,10,69,78, 67,79,68,73,78,71,32,53,56,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 54,48,48,10,54,67,48,48,10,55,56,48,48,10,55,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,66,53,10,69,78,67,79,68,73,78, 71,32,53,56,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,54,66,48,48,10,54,54,48,48,10,54, 67,48,48,10,55,56,48,48,10,55,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,66,54,10,69,78,67,79,68,73,78,71,32,53,56,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,54,48,48,10,54,67,48,48,10,70, 56,48,48,10,70,48,48,48,10,70,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,66,55,10,69, 78,67,79,68,73,78,71,32,53,56,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 54,51,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,49,67,48,48,10,49,67,48,48,10,51,54, 48,48,10,51,54,48,48,10,51,54,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,56,10,69,78,67,79,68,73, 78,71,32,53,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,51,48,48,10,54,51,48,48,10, 51,54,48,48,10,55,55,48,48,10,70,55,56,48,10,68, 68,56,48,10,68,68,56,48,10,70,55,56,48,10,55,55, 48,48,10,51,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,66,57,10,69,78,67,79,68,73,78,71,32,53,56, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,56,48,48,10,55,69,48,48,10,54,55,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,55,48,48,10,55, 69,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,66,65,10, 69,78,67,79,68,73,78,71,32,53,56,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,57,56,48,10,51,68,56,48,10,51,55,56,48,10,51, 51,56,48,10,51,49,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,66,66,10,69,78,67,79,68, 73,78,71,32,53,56,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,57,56,48,10,51,68,56,48,10, 51,55,56,48,10,51,66,56,48,10,51,68,56,48,10,51, 55,56,48,10,51,51,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,67,10,69,78,67,79,68,73,78,71,32,53, 56,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,52,67,56,48,10,54,68,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,70,48,48,10,54,68,56,48,10,52, 67,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,66,68, 10,69,78,67,79,68,73,78,71,32,53,56,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,66,69,10,69,78,67,79, 68,73,78,71,32,53,56,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,52,67,48, 48,10,54,67,48,48,10,51,67,48,48,10,49,67,48,48, 10,48,67,48,48,10,48,69,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,66,70,10,69,78,67,79,68,73,78,71,32, 53,56,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,69,48,48,10,48,70,48,48, 10,48,68,56,48,10,48,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 48,10,69,78,67,79,68,73,78,71,32,53,56,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,52,67,48,48,10,54,67,48,48,10,51,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,49,69,48,48, 10,48,70,48,48,10,48,68,56,48,10,48,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,67,49,10,69,78,67, 79,68,73,78,71,32,53,56,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,67,50,10,69,78,67,79,68,73,78,71, 32,53,56,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,69,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 67,51,10,69,78,67,79,68,73,78,71,32,53,56,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,52,48,48,10,51,54,48, 48,10,49,66,48,48,10,48,57,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,52,10,69,78, 67,79,68,73,78,71,32,53,56,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,51,70, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,67,53,10,69,78,67,79,68,73,78, 71,32,53,56,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,69,48,48,10,48,67, 48,48,10,49,67,48,48,10,51,67,48,48,10,54,67,48, 48,10,52,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,67,54,10,69,78,67,79,68,73,78,71,32,53,56,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,67,48,48,10,51,67,48,48,10,54,67, 48,48,10,52,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,67,55,10,69, 78,67,79,68,73,78,71,32,53,56,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,67,48,48,10,48,69,48,48,10,48,70,48,48,10,48, 68,56,48,10,48,67,56,48,10,48,67,48,48,10,52,67, 48,48,10,54,67,48,48,10,51,67,48,48,10,49,67,48, 48,10,48,67,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,56,10,69,78,67,79,68,73, 78,71,32,53,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,48,56,48,10,54,49,56,48,10, 55,51,48,48,10,55,69,48,48,10,54,67,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,67, 48,48,10,55,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,52,48,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,67,57,10,69,78,67,79,68,73,78,71,32,53,56, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,68,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,67,65,10, 69,78,67,79,68,73,78,71,32,53,56,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,67,66,10,69,78,67,79,68, 73,78,71,32,53,56,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,55,56,48,10,54,68,56,48,10,55,57,56,48,10,55, 49,56,48,10,54,49,56,48,10,52,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,67,10,69,78,67,79,68,73,78,71,32,53, 56,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,67,68, 10,69,78,67,79,68,73,78,71,32,53,56,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,67,69,10,69,78,67,79, 68,73,78,71,32,53,56,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,52,67,56,48,10,54,68,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,67,70,10,69,78,67,79,68,73,78,71,32, 53,56,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,68,56,48,10,52,67,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 48,10,69,78,67,79,68,73,78,71,32,53,56,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,67,48,48,10,51,67,48,48,10,54,67,48, 48,10,52,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,68,49,10,69,78,67, 79,68,73,78,71,32,53,56,52,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,67, 48,48,10,51,67,48,48,10,54,67,48,48,10,52,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,68,50,10,69,78,67,79,68,73,78,71, 32,53,56,52,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,56,48,48,10,55,69,48,48,10,54,55, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,55,48, 48,10,55,67,48,48,10,54,55,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,55,48,48,10,55,69,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 68,51,10,69,78,67,79,68,73,78,71,32,53,56,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,48,48,10,49,66, 48,48,10,49,69,48,48,10,49,67,48,48,10,49,57,48, 48,10,49,66,48,48,10,49,69,48,48,10,49,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,52,10,69,78, 67,79,68,73,78,71,32,53,56,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,55, 69,48,48,10,54,55,48,48,10,54,57,56,48,10,54,57, 56,48,10,54,55,48,48,10,55,67,48,48,10,54,55,48, 48,10,54,57,56,48,10,54,57,56,48,10,54,55,48,48, 10,55,69,48,48,10,55,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,68,53,10,69,78,67,79,68,73,78, 71,32,53,56,52,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,56,48,10,54,49,56,48,10,54, 51,48,48,10,54,54,48,48,10,54,67,48,48,10,55,56, 48,48,10,55,48,48,48,10,55,56,48,48,10,54,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,68,54,10,69,78,67,79,68,73,78,71,32,53,56,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,54,49,56,48,10,55,51,56,48,10,55, 70,56,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,68,55,10,69, 78,67,79,68,73,78,71,32,53,56,52,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 54,49,56,48,10,55,51,56,48,10,55,70,56,48,10,54, 68,56,48,10,55,70,56,48,10,55,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,56,10,69,78,67,79,68,73, 78,71,32,53,56,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,70,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,68,57,10,69,78,67,79,68,73,78,71,32,53,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,68,65,10, 69,78,67,79,68,73,78,71,32,53,56,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,67,48,48,10,48,69,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,67,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,68,66,10,69,78,67,79,68, 73,78,71,32,53,56,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,48,67,48,48, 10,48,69,48,48,10,48,70,48,48,10,48,68,56,48,10, 48,67,56,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,67,10,69,78,67,79,68,73,78,71,32,53, 56,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,68,68, 10,69,78,67,79,68,73,78,71,32,53,56,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,68,69,10,69,78,67,79, 68,73,78,71,32,53,56,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,51,56,48, 10,55,70,56,48,10,54,68,56,48,10,55,70,56,48,10, 55,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,68,70,10,69,78,67,79,68,73,78,71,32, 53,56,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 48,10,69,78,67,79,68,73,78,71,32,53,56,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,56,67, 52,48,10,68,69,67,48,10,55,70,56,48,10,50,68,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,54,69,49,10,69,78,67, 79,68,73,78,71,32,53,56,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,54,69,50,10,69,78,67,79,68,73,78,71, 32,53,56,53,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,52,48,10,48,69,67,48,10,48,70, 56,48,10,48,68,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,50,67,48,48,10,55,67,48,48,10,68,67,48,48,10, 56,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,54, 69,51,10,69,78,67,79,68,73,78,71,32,53,56,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,52,10,69,78, 67,79,68,73,78,71,32,53,56,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,51,70, 48,48,10,55,70,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,70,48,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,54,69,53,10,69,78,67,79,68,73,78, 71,32,53,56,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,48,56,48,10,54,49,56,48,10,55, 51,56,48,10,55,70,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,68,56, 48,10,55,70,56,48,10,55,51,56,48,10,54,49,56,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 54,69,54,10,69,78,67,79,68,73,78,71,32,53,56,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,55,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,54,69,55,10,69, 78,67,79,68,73,78,71,32,53,56,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,56,10,69,78,67,79,68,73, 78,71,32,53,56,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,70,48,48,10,54,68,56,48,10,52,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,52,67, 56,48,10,54,68,56,48,10,51,70,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,54,69,57,10,69,78,67,79,68,73,78,71,32,53,56, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,56,48,10,49,70,56,48,10,51,57,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,57,56,48,10,49, 70,56,48,10,48,55,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,54,69,65,10, 69,78,67,79,68,73,78,71,32,53,56,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,70,56,48,48,10,70,56,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,55,56,48,10,54,68,56,48,10,55, 57,56,48,10,55,49,56,48,10,54,49,56,48,10,52,55, 67,48,10,48,55,67,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,54,69,66,10,69,78,67,79,68, 73,78,71,32,53,56,54,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,67,10,69,78,67,79,68,73,78,71,32,53, 56,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,54,69,68, 10,69,78,67,79,68,73,78,71,32,53,56,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,49,67,48,48,10,54,66,48,48,10,55,70,48,48,10, 54,66,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,54,69,69,10,69,78,67,79, 68,73,78,71,32,53,56,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,48,67,48, 48,10,48,69,48,48,10,48,70,48,48,10,48,68,56,48, 10,48,67,56,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,52,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,54,69,70,10,69,78,67,79,68,73,78,71,32, 53,56,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,70, 48,10,69,78,67,79,68,73,78,71,32,53,56,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,48,48,10,55,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,48,48,10,69,78,67, 79,68,73,78,71,32,55,52,50,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,48,49,10,69,78,67,79,68,73,78,71, 32,55,52,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,56, 48,10,49,69,48,48,10,51,54,48,48,10,51,70,56,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 48,50,10,69,78,67,79,68,73,78,71,32,55,52,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,66,48,48,10,52,68,56, 48,10,48,68,56,48,10,48,70,48,48,10,55,67,48,48, 10,54,67,48,48,10,54,67,56,48,10,51,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,48,51,10,69,78, 67,79,68,73,78,71,32,55,52,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,51,48, 48,10,70,70,67,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,48,52,10,69,78,67,79,68,73,78, 71,32,55,52,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,48,53,10,69,78,67,79,68,73,78,71,32,55,52,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,48,54,10,69, 78,67,79,68,73,78,71,32,55,52,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,70,57,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,48,55,10,69,78,67,79,68,73, 78,71,32,55,52,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,48,56,10,69,78,67,79,68,73,78,71,32,55,52, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,70, 48,48,10,48,49,56,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,48,57,10, 69,78,67,79,68,73,78,71,32,55,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,48,65,10,69,78,67,79,68, 73,78,71,32,55,52,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,56,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,51,54,48,48,10,49,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,48,66,10,69,78,67,79,68,73,78,71,32,55, 52,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 54,54,48,48,10,54,67,48,48,10,55,56,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,51,48,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,48,67, 10,69,78,67,79,68,73,78,71,32,55,52,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,54,48,48,10,51,56,48,48,10,55, 48,48,48,10,51,48,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,48,68,10,69,78,67,79, 68,73,78,71,32,55,52,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,55,51,56,48,10,55,51,56,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,48,69,10,69,78,67,79,68,73,78,71,32, 55,52,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,51,56,48,10,54,55,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,57,56,48,10,55,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,48, 70,10,69,78,67,79,68,73,78,71,32,55,52,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,49,48,10,69,78,67, 79,68,73,78,71,32,55,52,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,49,49,10,69,78,67,79,68,73,78,71, 32,55,52,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,70,48,48,10,54,49,56,48,10,52,48,56,48, 10,52,48,56,48,10,54,49,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 49,50,10,69,78,67,79,68,73,78,71,32,55,52,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,49,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,54,49,56,48,10,50,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,49,51,10,69,78, 67,79,68,73,78,71,32,55,52,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,53,69,48,48,10,51,70,48,48,10,55,49,56, 48,10,52,56,56,48,10,52,52,56,48,10,54,51,56,48, 10,51,70,48,48,10,49,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,49,52,10,69,78,67,79,68,73,78, 71,32,55,52,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,55,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,49,53,10,69,78,67,79,68,73,78,71,32,55,52,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,51,48,48,10,51,49,48,48,10,50,49, 48,48,10,51,51,48,48,10,49,69,48,48,10,51,51,48, 48,10,50,49,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,49,54,10,69, 78,67,79,68,73,78,71,32,55,52,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,49,55,10,69,78,67,79,68,73, 78,71,32,55,52,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,49,56,10,69,78,67,79,68,73,78,71,32,55,52, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,54, 49,56,48,10,54,48,56,48,10,54,49,56,48,10,55,70, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,49,57,10, 69,78,67,79,68,73,78,71,32,55,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,49,70,56,48,10,51,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,49,65,10,69,78,67,79,68, 73,78,71,32,55,52,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,49, 70,56,48,10,51,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,49,66,10,69,78,67,79,68,73,78,71,32,55, 52,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,49,67, 10,69,78,67,79,68,73,78,71,32,55,52,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,49,68,10,69,78,67,79, 68,73,78,71,32,55,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,49,48,48,10, 48,48,56,48,10,48,48,56,48,10,48,49,56,48,10,55, 70,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,49,69,10,69,78,67,79,68,73,78,71,32, 55,52,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,53,70,56,48, 10,52,49,48,48,10,48,48,56,48,10,48,48,56,48,10, 52,49,56,48,10,53,70,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,49, 70,10,69,78,67,79,68,73,78,71,32,55,52,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,48,48, 10,48,49,56,48,10,55,70,56,48,10,55,70,48,48,10, 48,49,56,48,10,55,70,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,50,48,10,69,78,67, 79,68,73,78,71,32,55,52,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,50,49,10,69,78,67,79,68,73,78,71, 32,55,52,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,55,51,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 50,50,10,69,78,67,79,68,73,78,71,32,55,52,53,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,51,56, 48,10,48,55,48,48,10,48,69,48,48,10,49,67,48,48, 10,51,56,48,48,10,55,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,50,51,10,69,78, 67,79,68,73,78,71,32,55,52,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,56,48,10,48,49,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,70,48,48,10,48,49,56,48, 10,50,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,50,52,10,69,78,67,79,68,73,78, 71,32,55,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,51,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,50,53,10,69,78,67,79,68,73,78,71,32,55,52,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,70,48,48,10,51,70,48,48,10,49,69,48, 48,10,52,67,56,48,10,54,68,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,50,54,10,69, 78,67,79,68,73,78,71,32,55,52,54,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,50,55,10,69,78,67,79,68,73, 78,71,32,55,52,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,50,56,10,69,78,67,79,68,73,78,71,32,55,52, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,50,57,10, 69,78,67,79,68,73,78,71,32,55,52,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,54,49,56,48,10,54, 48,56,48,10,54,49,56,48,10,55,70,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,50,65,10,69,78,67,79,68, 73,78,71,32,55,52,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,50,66,10,69,78,67,79,68,73,78,71,32,55, 52,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,50,67, 10,69,78,67,79,68,73,78,71,32,55,52,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,70,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,50,68,10,69,78,67,79, 68,73,78,71,32,55,52,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,70,56,48,10,49,69,48,48,10,51,54,48, 48,10,51,70,56,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,50,69,10,69,78,67,79,68,73,78,71,32, 55,52,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,51,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,55,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,50, 70,10,69,78,67,79,68,73,78,71,32,55,52,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,70,70,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,51,48,10,69,78,67, 79,68,73,78,71,32,55,52,55,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,55,67,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,51,49,10,69,78,67,79,68,73,78,71, 32,55,52,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,54,48,48,48,10,54,48,48,48,10,55,67, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 51,50,10,69,78,67,79,68,73,78,71,32,55,52,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,49,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,51,51,10,69,78, 67,79,68,73,78,71,32,55,52,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,54,48,48,48,10,54,70,48,48,10,54,51, 48,48,10,51,55,48,48,10,49,68,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,51,52,10,69,78,67,79,68,73,78, 71,32,55,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,55, 70,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,51,53,10,69,78,67,79,68,73,78,71,32,55,52,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,55,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,51,54,10,69, 78,67,79,68,73,78,71,32,55,52,55,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,49,70,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,52,54,48,48,10,54,67,48,48,10,51,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,51,55,10,69,78,67,79,68,73, 78,71,32,55,52,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,54,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,48,48,48,10,55,56,48,48,10,54,67,48,48,10,54, 54,48,48,10,54,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,51,56,10,69,78,67,79,68,73,78,71,32,55,52, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,51,57,10, 69,78,67,79,68,73,78,71,32,55,52,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,55,55,48,48, 10,55,55,48,48,10,55,70,48,48,10,54,66,48,48,10, 54,66,48,48,10,54,51,48,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,51,65,10,69,78,67,79,68, 73,78,71,32,55,52,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,54,51,48,48,10,55,51,48,48,10,55,51,48,48, 10,54,66,48,48,10,54,66,48,48,10,54,55,48,48,10, 54,55,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,51,66,10,69,78,67,79,68,73,78,71,32,55, 52,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,51,48, 48,10,54,55,48,48,10,54,55,48,48,10,54,66,48,48, 10,54,66,48,48,10,55,51,48,48,10,55,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,51,67, 10,69,78,67,79,68,73,78,71,32,55,52,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,51,68,10,69,78,67,79, 68,73,78,71,32,55,52,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,54,50,48,48,10,52,50,48, 48,10,54,54,48,48,10,51,67,48,48,10,54,54,48,48, 10,52,50,48,48,10,54,54,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,51,69,10,69,78,67,79,68,73,78,71,32, 55,52,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,48,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,51, 70,10,69,78,67,79,68,73,78,71,32,55,52,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,55,67,48, 48,10,54,54,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,52,48,10,69,78,67, 79,68,73,78,71,32,55,52,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,52,49,10,69,78,67,79,68,73,78,71, 32,55,52,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 52,50,10,69,78,67,79,68,73,78,71,32,55,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,66,48,48,10,54,66, 48,48,10,55,70,48,48,10,55,55,48,48,10,54,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,52,51,10,69,78, 67,79,68,73,78,71,32,55,52,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 67,48,48,10,48,54,48,48,10,51,69,48,48,10,54,54, 48,48,10,54,54,48,48,10,51,65,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,52,52,10,69,78,67,79,68,73,78, 71,32,55,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,53,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,55,67,48,48,10,54,48, 48,48,10,51,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,52,53,10,69,78,67,79,68,73,78,71,32,55,52,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,51,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,52,54,10,69, 78,67,79,68,73,78,71,32,55,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,66,48,48,10,52,68,56,48,10,48,70,48,48,10,55, 67,48,48,10,54,67,56,48,10,51,55,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,52,55,10,69,78,67,79,68,73, 78,71,32,55,52,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,67,48,48,10, 55,54,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 54,48,48,10,54,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,52,56,10,69,78,67,79,68,73,78,71,32,55,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,51,54,48,48,10,54,69,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,69,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,52,57,10, 69,78,67,79,68,73,78,71,32,55,52,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,55,69,48,48,10, 54,48,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,52,65,10,69,78,67,79,68, 73,78,71,32,55,52,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,54,48,48,10,48,54,48,48,10,55,69,48,48,10, 54,54,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,52,66,10,69,78,67,79,68,73,78,71,32,55, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,67,48,48,10,54,50,48,48, 10,51,56,48,48,10,54,48,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,52,67, 10,69,78,67,79,68,73,78,71,32,55,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,54,48,48,10,48,54,48,48, 10,49,67,48,48,10,52,54,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,52,68,10,69,78,67,79, 68,73,78,71,32,55,53,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,54,67,48,48,10,54,67,48,48,10,51,56,48,48, 10,54,48,48,48,10,51,67,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,52,69,10,69,78,67,79,68,73,78,71,32, 55,53,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,52, 70,10,69,78,67,79,68,73,78,71,32,55,53,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,67,48,48,10,55,56,48,48,10,55,48,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,53,48,10,69,78,67, 79,68,73,78,71,32,55,53,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,53,66, 48,48,10,55,70,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,53,49,10,69,78,67,79,68,73,78,71, 32,55,53,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,67,48,48,10,55,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 53,50,10,69,78,67,79,68,73,78,71,32,55,53,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,51,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,53,51,10,69,78, 67,79,68,73,78,71,32,55,53,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,54,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,54,67,48,48,10,51,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,53,52,10,69,78,67,79,68,73,78, 71,32,55,53,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,53,53,10,69,78,67,79,68,73,78,71,32,55,53,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,54,48,48,10,54,54,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,53,54,10,69, 78,67,79,68,73,78,71,32,55,53,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,67,48,48,10,55,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,54,48,48,10,54,67,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,53,55,10,69,78,67,79,68,73, 78,71,32,55,53,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,55,56,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 50,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,53,56,10,69,78,67,79,68,73,78,71,32,55,53, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,69,48,48,10,49, 65,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,53,57,10, 69,78,67,79,68,73,78,71,32,55,53,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,55,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,55,67,48,48,10,55,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,53,65,10,69,78,67,79,68, 73,78,71,32,55,53,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,54,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,53,66,10,69,78,67,79,68,73,78,71,32,55, 53,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,54,48,48,10,54,54,48,48, 10,51,67,48,48,10,51,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,68,53,67, 10,69,78,67,79,68,73,78,71,32,55,53,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,55,69,48,48,10,51,67,48,48, 10,53,65,48,48,10,55,69,48,48,10,50,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,68,53,68,10,69,78,67,79, 68,73,78,71,32,55,53,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,68,53,69,10,69,78,67,79,68,73,78,71,32, 55,53,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,54,48,48,10,54,54,48, 48,10,50,52,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,68,53, 70,10,69,78,67,79,68,73,78,71,32,55,53,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,51,67,48,48,10,54,48,48,48,10,49,48, 48,48,10,51,67,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,68,54,48,10,69,78,67, 79,68,73,78,71,32,55,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,67,48,48,10,55,69, 48,48,10,53,65,48,48,10,53,65,48,48,10,55,69,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,68,54,49,10,69,78,67,79,68,73,78,71, 32,55,53,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,52,48,48,10,52,52, 48,48,10,54,67,48,48,10,51,56,48,48,10,51,56,48, 48,10,54,67,48,48,10,52,52,48,48,10,52,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,68, 54,50,10,69,78,67,79,68,73,78,71,32,55,53,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,51,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,51,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,68,54,51,10,69,78, 67,79,68,73,78,71,32,55,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,55,54,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,68,54,52,10,69,78,67,79,68,73,78, 71,32,55,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,51,69,48,48,10,49,65,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 68,54,53,10,69,78,67,79,68,73,78,71,32,55,53,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,54,48, 48,10,54,54,48,48,10,51,67,48,48,10,51,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,68,54,54,10,69, 78,67,79,68,73,78,71,32,55,53,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,54,67,48,48,10,54,67,48,48, 10,55,56,48,48,10,54,48,48,48,10,54,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,68,54,55,10,69,78,67,79,68,73, 78,71,32,55,53,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,54,48,48,10,54,54,48,48,10,50,52,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,68,54,56,10,69,78,67,79,68,73,78,71,32,55,53, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,67, 48,48,10,54,54,48,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,55,67,48,48,10,52,48,48,48, 10,51,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,68,54,57,10, 69,78,67,79,68,73,78,71,32,55,53,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,67,48,48,10,55,69,48,48,10,53,65, 48,48,10,53,65,48,48,10,55,69,48,48,10,51,67,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,68,54,65,10,69,78,67,79,68, 73,78,71,32,55,53,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,52,48,48,10,52,52,48,48,10,54,67, 48,48,10,51,56,48,48,10,51,56,48,48,10,54,67,48, 48,10,52,52,48,48,10,52,52,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,68,54,66,10,69,78,67,79,68,73,78,71,32,55, 53,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,54,70,56,48,10,54, 67,48,48,10,54,67,48,48,10,54,68,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,48,48, 10,69,78,67,79,68,73,78,71,32,55,54,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,48,49,10,69,78,67,79, 68,73,78,71,32,55,54,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,48,50,10,69,78,67,79,68,73,78,71,32, 55,54,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,67,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,54,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 51,10,69,78,67,79,68,73,78,71,32,55,54,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,51,48,48,10,54,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,48,52,10,69,78,67, 79,68,73,78,71,32,55,54,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,54,54, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,54,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,48,48,10,55,69,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,48,53,10,69,78,67,79,68,73,78,71, 32,55,54,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 48,54,10,69,78,67,79,68,73,78,71,32,55,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 67,48,48,10,54,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,55,10,69,78, 67,79,68,73,78,71,32,55,54,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,54,69,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,48,56,10,69,78,67,79,68,73,78, 71,32,55,54,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,52,48,48,10, 49,50,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,48,57,10,69,78,67,79,68,73,78,71,32,55,54,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,67,48,48,10,48,52,48,48,10,49,50,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,48,65,10,69, 78,67,79,68,73,78,71,32,55,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 55,69,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,66,10,69,78,67,79,68,73, 78,71,32,55,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 68,56,48,10,51,51,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,48,67,10,69,78,67,79,68,73,78,71,32,55,54, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,51,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,48,68,10, 69,78,67,79,68,73,78,71,32,55,54,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,49,68,56,48,10,51,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,48,69,10,69,78,67,79,68, 73,78,71,32,55,54,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,51, 48,48,10,55,69,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,70,10,69,78,67,79,68,73,78,71,32,55, 54,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,49,68,56,48,10, 51,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,49,48, 10,69,78,67,79,68,73,78,71,32,55,54,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,54,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,51,48,48,10,55,69,48,48,10,49,56, 48,48,10,48,56,48,48,10,50,52,48,48,10,49,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,49,49,10,69,78,67,79, 68,73,78,71,32,55,54,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,49,68,56,48,10,51,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,67,48,48,10,48,52, 48,48,10,49,50,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,49,50,10,69,78,67,79,68,73,78,71,32, 55,54,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 51,10,69,78,67,79,68,73,78,71,32,55,54,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,49,68,56,48,10,51,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,49,52,10,69,78,67, 79,68,73,78,71,32,55,55,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,49,53,10,69,78,67,79,68,73,78,71, 32,55,55,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,49,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 49,54,10,69,78,67,79,68,73,78,71,32,55,55,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,55,10,69,78, 67,79,68,73,78,71,32,55,55,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,49,56,10,69,78,67,79,68,73,78, 71,32,55,55,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,49,57,10,69,78,67,79,68,73,78,71,32,55,55,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,49,65,10,69, 78,67,79,68,73,78,71,32,55,55,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,69,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,66,10,69,78,67,79,68,73, 78,71,32,55,55,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,49,57,48,48, 10,51,70,48,48,10,50,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,49,67,10,69,78,67,79,68,73,78,71,32,55,55, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,50,49,48,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,52,48,48,10,49,50,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,49,68,10, 69,78,67,79,68,73,78,71,32,55,55,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,49,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,67,48, 48,10,48,52,48,48,10,49,50,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,49,69,10,69,78,67,79,68, 73,78,71,32,55,55,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,70,10,69,78,67,79,68,73,78,71,32,55, 55,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,70,48,48,10,49,57,56,48, 10,49,57,56,48,10,49,56,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,50,48, 10,69,78,67,79,68,73,78,71,32,55,55,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,55,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,56,48,10,49,69,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,50,49,10,69,78,67,79, 68,73,78,71,32,55,55,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,51,69,56,48,10,54,51,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,51,69,48,48,10,54, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,70,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,50,50,10,69,78,67,79,68,73,78,71,32, 55,55,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 51,10,69,78,67,79,68,73,78,71,32,55,55,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,50,52,10,69,78,67, 79,68,73,78,71,32,55,55,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,50,53,10,69,78,67,79,68,73,78,71, 32,55,55,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 50,54,10,69,78,67,79,68,73,78,71,32,55,55,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,51,48,48,10,51,51,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,55,10,69,78, 67,79,68,73,78,71,32,55,55,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,50,56,10,69,78,67,79,68,73,78, 71,32,55,55,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,48,48,48,10,50,48,48,48,10, 57,48,48,48,10,54,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,50,57,10,69,78,67,79,68,73,78,71,32,55,55,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,48,48,48,10,50,48,48,48,10,57,48,48,48,10, 54,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,50,65,10,69, 78,67,79,68,73,78,71,32,55,55,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,66,10,69,78,67,79,68,73, 78,71,32,55,55,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,50,67,10,69,78,67,79,68,73,78,71,32,55,55, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,55,70,56, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,50,68,10, 69,78,67,79,68,73,78,71,32,55,55,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,51,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,50,69,10,69,78,67,79,68, 73,78,71,32,55,55,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,70,10,69,78,67,79,68,73,78,71,32,55, 55,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,51,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,51,48, 10,69,78,67,79,68,73,78,71,32,55,55,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,51, 48,48,10,48,54,48,48,10,48,67,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,54,48,48,10,54,54,48,48,10,55,67,48,48,10, 54,54,48,48,10,54,54,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,51,49,10,69,78,67,79, 68,73,78,71,32,55,55,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,67,48,48,10,49,56, 48,48,10,51,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,51,48,48,10,54,54,48,48,10,54,67,48,48,10, 55,56,48,48,10,55,67,48,48,10,54,54,48,48,10,54, 51,48,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,51,50,10,69,78,67,79,68,73,78,71,32, 55,55,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,54,48,48,10,54,54,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 51,10,69,78,67,79,68,73,78,71,32,55,55,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,51,48,48,10,54,54,48,48, 10,54,67,48,48,10,55,56,48,48,10,55,67,48,48,10, 54,54,48,48,10,54,51,48,48,10,54,49,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,51,52,10,69,78,67, 79,68,73,78,71,32,55,55,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,54,48, 48,10,54,54,48,48,10,55,67,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,51,53,10,69,78,67,79,68,73,78,71, 32,55,55,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,51,48, 48,10,54,54,48,48,10,54,67,48,48,10,55,56,48,48, 10,55,67,48,48,10,54,54,48,48,10,54,51,48,48,10, 54,49,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 51,54,10,69,78,67,79,68,73,78,71,32,55,55,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,55,10,69,78, 67,79,68,73,78,71,32,55,55,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,51,56,10,69,78,67,79,68,73,78, 71,32,55,55,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,55,70,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,51,57,10,69,78,67,79,68,73,78,71,32,55,55,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,55,70,48,48,10,48,48,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,51,65,10,69, 78,67,79,68,73,78,71,32,55,55,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,66,10,69,78,67,79,68,73, 78,71,32,55,55,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,51,67,10,69,78,67,79,68,73,78,71,32,55,55, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,51,68,10, 69,78,67,79,68,73,78,71,32,55,55,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,51,69,10,69,78,67,79,68, 73,78,71,32,55,55,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,56,48,10,55,51,56,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,70,10,69,78,67,79,68,73,78,71,32,55, 55,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,53,66,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,52,48, 10,69,78,67,79,68,73,78,71,32,55,55,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,55,51,56,48, 10,55,51,56,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,52,49,10,69,78,67,79, 68,73,78,71,32,55,55,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,53,66,48,48,10,55,70,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,52,50,10,69,78,67,79,68,73,78,71,32, 55,55,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,70,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 51,10,69,78,67,79,68,73,78,71,32,55,55,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,66,48,48,10,55,70,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,52,52,10,69,78,67, 79,68,73,78,71,32,55,55,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,55,49,56,48,10,55,49,56,48,10,55,57,56, 48,10,55,57,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,55,56,48,10,54,55,56,48,10,54,51,56,48,10, 54,51,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,52,53,10,69,78,67,79,68,73,78,71, 32,55,55,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 52,54,10,69,78,67,79,68,73,78,71,32,55,55,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,55,49,56,48,10,55,49,56,48,10,55,57, 56,48,10,55,57,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,55,56,48,10,54,55,56,48,10,54,51,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,55,10,69,78, 67,79,68,73,78,71,32,55,55,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,52,56,10,69,78,67,79,68,73,78, 71,32,55,55,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,55,57,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,52,57,10,69,78,67,79,68,73,78,71,32,55,55,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,52,65,10,69, 78,67,79,68,73,78,71,32,55,55,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 55,49,56,48,10,55,49,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,68,56,48,10,54,68,56,48,10,54,55, 56,48,10,54,55,56,48,10,54,51,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,66,10,69,78,67,79,68,73, 78,71,32,55,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 69,48,48,10,55,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,52,67,10,69,78,67,79,68,73,78,71,32,55,55, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,57,48,48,10,50,54,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,52,68,10, 69,78,67,79,68,73,78,71,32,55,55,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,52,69,10,69,78,67,79,68, 73,78,71,32,55,55,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,57,48,48,10,50,54,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,70,10,69,78,67,79,68,73,78,71,32,55, 55,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,53,48, 10,69,78,67,79,68,73,78,71,32,55,55,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,53,49,10,69,78,67,79, 68,73,78,71,32,55,55,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,53,50,10,69,78,67,79,68,73,78,71,32, 55,55,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 51,10,69,78,67,79,68,73,78,71,32,55,55,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,53,52,10,69,78,67, 79,68,73,78,71,32,55,55,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,55,69, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,53,53,10,69,78,67,79,68,73,78,71, 32,55,55,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,51,48,48,10, 54,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 53,54,10,69,78,67,79,68,73,78,71,32,55,55,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,55,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,55,10,69,78, 67,79,68,73,78,71,32,55,55,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,48,48,10,54,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,53,56,10,69,78,67,79,68,73,78, 71,32,55,55,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,69,48,48,10,54, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,51,48,48,10,55,69,48,48,10,54,54,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,53,57,10,69,78,67,79,68,73,78,71,32,55,55,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,70,48,48,10,51,57, 56,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,53,65,10,69, 78,67,79,68,73,78,71,32,55,55,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 54,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,51,48,48,10,55,69, 48,48,10,54,54,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,66,10,69,78,67,79,68,73, 78,71,32,55,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 70,48,48,10,51,57,56,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,53,67,10,69,78,67,79,68,73,78,71,32,55,55, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,69,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,48,48,10,55,69,48,48,10,54,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,53,68,10, 69,78,67,79,68,73,78,71,32,55,55,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,70,48,48,10,51,57,56,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,53,69,10,69,78,67,79,68, 73,78,71,32,55,55,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,69,48,48,10,54,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,48,48,10,55,69,48,48,10,54, 54,48,48,10,54,51,48,48,10,54,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,70,10,69,78,67,79,68,73,78,71,32,55, 55,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 51,57,56,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,54,48, 10,69,78,67,79,68,73,78,71,32,55,55,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,48,48,48,10,49,69,48,48,10, 48,51,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,54,49,10,69,78,67,79, 68,73,78,71,32,55,55,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,70,48,48,10,48,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,54,50,10,69,78,67,79,68,73,78,71,32, 55,55,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 51,10,69,78,67,79,68,73,78,71,32,55,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,70,48,48,10,48,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,54,52,10,69,78,67, 79,68,73,78,71,32,55,55,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 56,48,48,10,49,57,56,48,10,48,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,69,48,48, 10,48,51,48,48,10,48,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,54,53,10,69,78,67,79,68,73,78,71, 32,55,55,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,51,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,70,48,48, 10,48,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 54,54,10,69,78,67,79,68,73,78,71,32,55,55,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,67,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,48,48,48,10,49,70, 48,48,10,51,49,56,48,10,54,48,48,48,10,51,48,48, 48,10,49,69,48,48,10,48,51,48,48,10,48,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,55,10,69,78, 67,79,68,73,78,71,32,55,55,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,48,48, 48,10,51,70,48,48,10,48,49,56,48,10,48,49,56,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,54,56,10,69,78,67,79,68,73,78, 71,32,55,55,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,48,48,48,10,51,48, 48,48,10,49,69,48,48,10,48,51,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,54,57,10,69,78,67,79,68,73,78,71,32,55,55,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,54,48,48,48,10,51,70,48,48,10,48,49,56, 48,10,48,49,56,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,54,65,10,69, 78,67,79,68,73,78,71,32,55,55,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,66,10,69,78,67,79,68,73, 78,71,32,55,55,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 69,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,57,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,54,67,10,69,78,67,79,68,73,78,71,32,55,55, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,54,68,10, 69,78,67,79,68,73,78,71,32,55,55,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,69,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,57,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,54,69,10,69,78,67,79,68, 73,78,71,32,55,55,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,70,10,69,78,67,79,68,73,78,71,32,55, 55,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,55,69,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,55,48, 10,69,78,67,79,68,73,78,71,32,55,55,57,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,55,49,10,69,78,67,79, 68,73,78,71,32,55,55,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,69,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 57,56,48,10,48,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,55,50,10,69,78,67,79,68,73,78,71,32, 55,55,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 51,10,69,78,67,79,68,73,78,71,32,55,55,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,55,52,10,69,78,67, 79,68,73,78,71,32,55,55,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 57,48,48,10,51,70,48,48,10,50,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,55,53,10,69,78,67,79,68,73,78,71, 32,55,55,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 55,54,10,69,78,67,79,68,73,78,71,32,55,55,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,55,10,69,78, 67,79,68,73,78,71,32,55,55,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,55,56,10,69,78,67,79,68,73,78, 71,32,55,56,48,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,57,48,48,10,50,54,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,55,57,10,69,78,67,79,68,73,78,71,32,55,56,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,55,65,10,69, 78,67,79,68,73,78,71,32,55,56,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,66,10,69,78,67,79,68,73, 78,71,32,55,56,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,51,51,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,55,67,10,69,78,67,79,68,73,78,71,32,55,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,55,68,10, 69,78,67,79,68,73,78,71,32,55,56,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,54,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,55,69,10,69,78,67,79,68, 73,78,71,32,55,56,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,70,10,69,78,67,79,68,73,78,71,32,55, 56,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,87,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,55,56,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,52,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,51,56,48,10,55,51, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,103,114,97,118,101,10,69,78,67,79,68,73, 78,71,32,55,56,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,87,97,99, 117,116,101,10,69,78,67,79,68,73,78,71,32,55,56,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 48,56,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,51,56, 48,10,55,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,119,97,99,117,116,101,10,69,78, 67,79,68,73,78,71,32,55,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,87,100,105,101,114,101,115,105,115,10,69,78,67,79,68, 73,78,71,32,55,56,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,51,56,48,10,55,51,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,119,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,55,56,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 56,54,10,69,78,67,79,68,73,78,71,32,55,56,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,51,56,48, 10,55,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,55,10,69,78, 67,79,68,73,78,71,32,55,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,56,56,10,69,78,67,79,68,73,78, 71,32,55,56,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,51,56,48,10,55,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,56,57,10,69,78,67,79,68,73,78,71,32,55,56,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,56,65,10,69, 78,67,79,68,73,78,71,32,55,56,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,66,10,69,78,67,79,68,73, 78,71,32,55,56,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,56,67,10,69,78,67,79,68,73,78,71,32,55,56, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,51,51, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,56,68,10, 69,78,67,79,68,73,78,71,32,55,56,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,51,48,48,10,51,51,48,48,10, 48,48,48,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,56,69,10,69,78,67,79,68, 73,78,71,32,55,56,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,70,10,69,78,67,79,68,73,78,71,32,55, 56,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,57,48, 10,69,78,67,79,68,73,78,71,32,55,56,50,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,51, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,57,49,10,69,78,67,79, 68,73,78,71,32,55,56,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,70,48,48,10,49,57,56,48,10,48,48,48,48, 10,51,70,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 48,48,48,10,51,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,57,50,10,69,78,67,79,68,73,78,71,32, 55,56,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 51,10,69,78,67,79,68,73,78,71,32,55,56,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,56,48,10,48,49,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,51,70,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,57,52,10,69,78,67, 79,68,73,78,71,32,55,56,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,57,53,10,69,78,67,79,68,73,78,71, 32,55,56,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,70,56,48,10,48,48,48,48,10,51,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 57,54,10,69,78,67,79,68,73,78,71,32,55,56,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,55,10,69,78, 67,79,68,73,78,71,32,55,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,55,69,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,57,56,48,10,48,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,57,56,10,69,78,67,79,68,73,78, 71,32,55,56,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,49, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,57,57,10,69,78,67,79,68,73,78,71,32,55,56,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,57,65,10,69, 78,67,79,68,73,78,71,32,55,56,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,48,49, 56,48,10,51,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,69,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,66,10,69,78,67,79,68,73, 78,71,32,55,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,70,48,48,10,49,57,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,55, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,65,48,10,69,78,67,79,68,73,78,71,32,55,56, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,65,49,10, 69,78,67,79,68,73,78,71,32,55,56,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,48,48,10,51,49,56,48,10,48, 49,56,48,10,51,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,69,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,65,50,10,69,78,67,79,68, 73,78,71,32,55,56,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,69,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,51,10,69,78,67,79,68,73,78,71,32,55, 56,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,51,48,48,10,48,54,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,65,52, 10,69,78,67,79,68,73,78,71,32,55,56,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,51, 48,48,10,48,54,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,65,53,10,69,78,67,79, 68,73,78,71,32,55,56,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,65,54,10,69,78,67,79,68,73,78,71,32, 55,56,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 55,10,69,78,67,79,68,73,78,71,32,55,56,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,65,56,10,69,78,67, 79,68,73,78,71,32,55,56,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,49, 67,48,48,10,48,54,48,48,10,49,67,48,48,10,51,54, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,65,57,10,69,78,67,79,68,73,78,71, 32,55,56,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,67,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,49,56,48,10,48,49,56,48,10,51,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,69,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 65,65,10,69,78,67,79,68,73,78,71,32,55,56,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,57,48,48,10,50,54,48,48,10,49, 67,48,48,10,51,54,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,66,10,69,78, 67,79,68,73,78,71,32,55,56,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,54,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,70,48,48,10,51,49,56,48,10,48,49,56, 48,10,51,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,69,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,65,67,10,69,78,67,79,68,73,78, 71,32,55,56,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,65,68,10,69,78,67,79,68,73,78,71,32,55,56,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,48,48,48,48,10,49,70,48,48,10,51,49, 56,48,10,48,49,56,48,10,51,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,69,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,65,69,10,69, 78,67,79,68,73,78,71,32,55,56,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,70,10,69,78,67,79,68,73, 78,71,32,55,56,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 70,48,48,10,51,49,56,48,10,48,49,56,48,10,51,70, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,69,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,66,48,10,69,78,67,79,68,73,78,71,32,55,56, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,50,49,48,48,10,49,69,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,66,49,10, 69,78,67,79,68,73,78,71,32,55,56,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,48,48,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,49,70,48,48,10,51,49,56,48,10,48, 49,56,48,10,51,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,69,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,66,50,10,69,78,67,79,68, 73,78,71,32,55,56,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,56,48, 48,10,48,52,48,48,10,50,53,48,48,10,49,69,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,51,10,69,78,67,79,68,73,78,71,32,55, 56,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,54,48,48,10,48,48,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,49,70,48,48,10, 51,49,56,48,10,48,49,56,48,10,51,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,69, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,66,52, 10,69,78,67,79,68,73,78,71,32,55,56,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,57,48,48,10,50,54,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,66,53,10,69,78,67,79, 68,73,78,71,32,55,56,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,48,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,48,49,56,48,10, 51,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,69,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,66,54,10,69,78,67,79,68,73,78,71,32, 55,56,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,50,49,48,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 55,10,69,78,67,79,68,73,78,71,32,55,56,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,49,56,48, 10,48,49,56,48,10,51,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,69,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,66,56,10,69,78,67, 79,68,73,78,71,32,55,56,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,66,57,10,69,78,67,79,68,73,78,71, 32,55,56,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,49,56,48,10, 49,70,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 66,65,10,69,78,67,79,68,73,78,71,32,55,56,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,67,48,48,10,50,54,48,48,10,48, 67,48,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,69,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,66,10,69,78, 67,79,68,73,78,71,32,55,56,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,51,49,56,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,66,67,10,69,78,67,79,68,73,78, 71,32,55,56,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,54,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,69,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,66,68,10,69,78,67,79,68,73,78,71,32,55,56,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,55,70,56,48,10,54,48,48, 48,10,54,48,48,48,10,51,49,56,48,10,49,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,66,69,10,69, 78,67,79,68,73,78,71,32,55,56,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,48,48,10,48,54,48,48,10,49,67,48,48,10, 51,54,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,69, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,70,10,69,78,67,79,68,73, 78,71,32,55,56,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,49,56, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,67,48,10,69,78,67,79,68,73,78,71,32,55,56, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,51,48,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,67,49,10, 69,78,67,79,68,73,78,71,32,55,56,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,55,70,56,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,67,50,10,69,78,67,79,68, 73,78,71,32,55,56,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,56,48, 48,10,52,67,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,69,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,51,10,69,78,67,79,68,73,78,71,32,55, 56,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,67,48,48,10,50,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,55,70,56,48,10,54, 48,48,48,10,54,48,48,48,10,51,49,56,48,10,49,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,67,52, 10,69,78,67,79,68,73,78,71,32,55,56,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,57,48,48,10,50,54,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,67,53,10,69,78,67,79, 68,73,78,71,32,55,56,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 55,70,56,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,67,54,10,69,78,67,79,68,73,78,71,32, 55,56,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,55,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 55,10,69,78,67,79,68,73,78,71,32,55,56,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,51,49,56,48,10,49,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,67,56,10,69,78,67, 79,68,73,78,71,32,55,56,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,67,48,48,10,50, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,67,57,10,69,78,67,79,68,73,78,71, 32,55,56,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,54,48,48,10,48,54, 48,48,10,48,67,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 67,65,10,69,78,67,79,68,73,78,71,32,55,56,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,66,10,69,78, 67,79,68,73,78,71,32,55,56,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,67,67,10,69,78,67,79,68,73,78, 71,32,55,56,56,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,67,68,10,69,78,67,79,68,73,78,71,32,55,56,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,67,69,10,69, 78,67,79,68,73,78,71,32,55,56,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,49,67,48,48,10,50,54,48,48,10,48,67,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,70,10,69,78,67,79,68,73, 78,71,32,55,56,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,54,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,68,48,10,69,78,67,79,68,73,78,71,32,55,56, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,51,48,48,10,48,54,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,68,49,10, 69,78,67,79,68,73,78,71,32,55,56,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,68,50,10,69,78,67,79,68, 73,78,71,32,55,56,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,51,10,69,78,67,79,68,73,78,71,32,55, 56,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,51,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,68,52, 10,69,78,67,79,68,73,78,71,32,55,56,57,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,49,67,48,48,10,48,54,48,48,10,49,67,48, 48,10,51,54,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,68,53,10,69,78,67,79, 68,73,78,71,32,55,56,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,49,67, 48,48,10,48,54,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,51,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,68,54,10,69,78,67,79,68,73,78,71,32, 55,56,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,57,48,48,10,50,54, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 55,10,69,78,67,79,68,73,78,71,32,55,56,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,51,48, 48,10,48,48,48,48,10,49,69,48,48,10,51,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,68,56,10,69,78,67, 79,68,73,78,71,32,55,56,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,68,57,10,69,78,67,79,68,73,78,71, 32,55,56,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 68,65,10,69,78,67,79,68,73,78,71,32,55,56,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,68,56,48,10,49, 56,67,48,10,48,48,67,48,10,49,70,56,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,66,10,69,78, 67,79,68,73,78,71,32,55,56,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,51,48,48,10,48,49,56,48,10,48,49, 56,48,10,49,70,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,68,67,10,69,78,67,79,68,73,78, 71,32,55,57,48,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,57,56,48,10, 48,67,67,48,10,48,48,67,48,10,49,70,56,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,68,68,10,69,78,67,79,68,73,78,71,32,55,57,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,51,48,48,10,49, 57,56,48,10,48,49,56,48,10,49,70,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,68,69,10,69, 78,67,79,68,73,78,71,32,55,57,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,57,56,48,10,52,67,67,48,10,49,56,67,48,10, 49,70,56,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,70,10,69,78,67,79,68,73, 78,71,32,55,57,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,53,56,48,48,10, 49,66,48,48,10,51,49,56,48,10,48,49,56,48,10,49, 70,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,69,48,10,69,78,67,79,68,73,78,71,32,55,57, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,51,50,48,48,10,55,70,56,48, 10,52,67,67,48,10,48,48,67,48,10,49,70,56,48,10, 51,51,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,69,49,10, 69,78,67,79,68,73,78,71,32,55,57,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,54,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,49,56,48,10,49,70,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,69,50,10,69,78,67,79,68, 73,78,71,32,55,57,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,49,56, 48,10,48,48,67,48,10,48,48,67,48,10,49,70,56,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,51,10,69,78,67,79,68,73,78,71,32,55, 57,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,49,56,48,10,48,49,56,48,10,49,70,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,69,69,52, 10,69,78,67,79,68,73,78,71,32,55,57,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,69,53,10,69,78,67,79, 68,73,78,71,32,55,57,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,56,48,10,49,68,56,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,69,69,54,10,69,78,67,79,68,73,78,71,32, 55,57,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,67,48,48,10,51,54, 48,48,10,48,54,48,48,10,48,67,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 55,10,69,78,67,79,68,73,78,71,32,55,57,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,56,48,10,49,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,69,69,56,10,69,78,67, 79,68,73,78,71,32,55,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 52,48,48,10,48,67,48,48,10,49,57,56,48,10,49,48, 67,48,10,48,48,67,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,69,57,10,69,78,67,79,68,73,78,71, 32,55,57,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,67,48,48,10,49,56,48,48,10,49,49, 56,48,10,48,48,67,48,10,48,48,67,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,56,48,10, 49,68,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,69, 69,65,10,69,78,67,79,68,73,78,71,32,55,57,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,48,48,48,10,49,57,56,48,10,48, 67,67,48,10,48,48,67,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,66,10,69,78, 67,79,68,73,78,71,32,55,57,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,49,57,56,48,10,48,67,67,48,10,48,48, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,69,69,67,10,69,78,67,79,68,73,78, 71,32,55,57,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,67,56,48,10, 50,54,52,48,10,48,67,67,48,10,48,57,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,69,68,10,69,78,67,79,68,73,78,71,32,55,57,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,50,54,56,48,10,48, 67,52,48,10,48,56,67,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,69,69,10,69, 78,67,79,68,73,78,71,32,55,57,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,50,56,48,10,55,69,52,48,10,52,67,67,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,70,10,69,78,67,79,68,73, 78,71,32,55,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,50,48,48,10,55,69,48,48,10, 52,67,56,48,10,48,48,52,48,10,48,48,67,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,70,48,10,69,78,67,79,68,73,78,71,32,55,57, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,49,56,48,10,48,48,67,48, 10,48,48,67,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,49,10, 69,78,67,79,68,73,78,71,32,55,57,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,48,67,48,10, 48,48,67,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,89,103,114,97,118,101,10,69,78,67,79,68,73, 78,71,32,55,57,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,121,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,55,57,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,56,48,10,49,68,56,48, 10,48,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,69,70,52,10,69, 78,67,79,68,73,78,71,32,55,57,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,70,53,10,69,78,67,79,68,73, 78,71,32,55,57,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,56, 48,10,49,68,56,48,10,48,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,69,70,54,10,69,78,67,79,68,73,78,71,32,55,57, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,49,67,48,48,10,51,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,51,51,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,55,10, 69,78,67,79,68,73,78,71,32,55,57,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,56,48,10,49,68,56,48,10,48,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,69,70,56,10,69,78,67,79,68, 73,78,71,32,55,57,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,70,57,10,69,78,67,79,68,73,78,71,32,55, 57,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,57,48,48,10,51,70,48,48, 10,50,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,56,48,10,49,68, 56,48,10,48,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,48,48, 10,69,78,67,79,68,73,78,71,32,55,57,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,50,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,68,56,48,10,54,51,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 51,56,48,10,54,53,56,48,10,51,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,49,10,69,78,67,79, 68,73,78,71,32,55,57,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,56,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,68,56,48,10,54,51,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,56,48,10,54, 53,56,48,10,51,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,48,50,10,69,78,67,79,68,73,78,71,32, 55,57,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,54,48,48,10,49,51,48,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,48, 51,10,69,78,67,79,68,73,78,71,32,55,57,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,54, 48,48,10,52,51,48,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,48,52,10,69,78,67, 79,68,73,78,71,32,55,57,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,48,66, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,53,10,69,78,67,79,68,73,78,71, 32,55,57,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,49,56,48,10,52,51,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 48,54,10,69,78,67,79,68,73,78,71,32,55,57,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,69,48,48,10,48,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,48,55,10,69,78, 67,79,68,73,78,71,32,55,57,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 69,48,48,10,48,56,48,48,10,48,54,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,48,56,10,69,78,67,79,68,73,78, 71,32,55,57,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,54,48,48,10,52,70,48,48,10,57, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,70,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,57,10,69,78,67,79,68,73,78,71,32,55,57,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,54,48,48,10,56,70,48,48,10,53,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,70,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,48,65,10,69, 78,67,79,68,73,78,71,32,55,57,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,51,48,48,10, 53,55,56,48,10,56,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,70, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,48,66,10,69,78,67,79,68,73, 78,71,32,55,57,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,51,48,48,10,57,55,56,48,10, 52,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,70,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,48,67,10,69,78,67,79,68,73,78,71,32,55,57, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,54,48,48,10,54,70,48,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,68,10, 69,78,67,79,68,73,78,71,32,55,57,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,68,54,48,48, 10,65,70,48,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 70,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,48,69,10,69,78,67,79,68, 73,78,71,32,55,57,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,54,48,48,10,48,70,48,48, 10,68,57,56,48,10,53,57,56,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,70,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,48,70,10,69,78,67,79,68,73,78,71,32,55, 57,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,54,48,48,10,48,70,48,48,10,68,57,56,48, 10,57,57,56,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,49,48, 10,69,78,67,79,68,73,78,71,32,55,57,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,50,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,54,49,56,48,10, 54,48,48,48,10,51,69,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,49,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,49,10,69,78,67,79, 68,73,78,71,32,55,57,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,56,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,49,56,48,10,54,48,48,48,10, 51,69,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,49,50,10,69,78,67,79,68,73,78,71,32, 55,57,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,54,48,48,10,49,51,48,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,54,48,48,48,10,51,69,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,49, 51,10,69,78,67,79,68,73,78,71,32,55,57,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,54, 48,48,10,52,51,48,48,10,51,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,54,49,56,48, 10,54,48,48,48,10,51,69,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,49,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,49,52,10,69,78,67, 79,68,73,78,71,32,55,57,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,48,66, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,54,49,56,48,10,54,48,48,48, 10,51,69,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,49,56,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,53,10,69,78,67,79,68,73,78,71, 32,55,57,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,49,56,48,10,52,51,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,54,48,48,48,10,51,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,49,56,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 49,56,10,69,78,67,79,68,73,78,71,32,55,57,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,68, 70,56,48,10,53,56,48,48,10,57,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,49,57,10,69,78, 67,79,68,73,78,71,32,55,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,70,56,48,10,57, 56,48,48,10,53,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,70,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,49,65,10,69,78,67,79,68,73,78, 71,32,55,57,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,70,67,48,10,53,67,48,48,10,56, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,66,10,69,78,67,79,68,73,78,71,32,55,57,54, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,70,67,48,10,57,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,49,67,10,69, 78,67,79,68,73,78,71,32,55,57,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,67,48,10, 54,67,48,48,10,56,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,49,68,10,69,78,67,79,68,73, 78,71,32,55,57,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,70,67,48,10,65,67,48,48,10, 52,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,50,48,10,69,78,67,79,68,73,78,71,32,55,57, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,50,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,69,48,48,10,55, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,49,10, 69,78,67,79,68,73,78,71,32,55,57,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,69,48,48,10,55,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,50,50,10,69,78,67,79,68, 73,78,71,32,55,57,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 54,69,48,48,10,55,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,50,51,10,69,78,67,79,68,73,78,71,32,55, 57,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,54,69,48,48,10, 55,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,50,52, 10,69,78,67,79,68,73,78,71,32,55,57,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,48,66,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,69,48,48,10,55,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,53,10,69,78,67,79, 68,73,78,71,32,55,57,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,69,48,48,10,55,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,50,54,10,69,78,67,79,68,73,78,71,32, 55,57,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,69,48,48,10,48,50,48, 48,10,48,67,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,50, 55,10,69,78,67,79,68,73,78,71,32,55,57,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,57,48,48,10,51,70, 48,48,10,50,69,48,48,10,48,56,48,48,10,48,54,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,50,56,10,69,78,67, 79,68,73,78,71,32,55,57,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,57,56,48,10,53,57, 56,48,10,57,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,70,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,57,10,69,78,67,79,68,73,78,71, 32,55,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,57,56,48,10,57,57,56,48,10,53,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,70,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 50,65,10,69,78,67,79,68,73,78,71,32,55,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 67,67,48,10,53,67,67,48,10,56,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,70,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,50,66,10,69,78, 67,79,68,73,78,71,32,55,57,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,67,67,48,10,57, 67,67,48,10,52,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,70,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,50,67,10,69,78,67,79,68,73,78, 71,32,55,57,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,67,67,48,10,54,67,67,48,10,56, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,70,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,68,10,69,78,67,79,68,73,78,71,32,55,57,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,67,67,48,10,65,67,67,48,10,52,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,70, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,50,69,10,69, 78,67,79,68,73,78,71,32,55,57,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,57,56,48,10, 49,57,56,48,10,68,57,56,48,10,53,57,56,48,10,57, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,50,70,10,69,78,67,79,68,73, 78,71,32,55,57,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,57,56,48,10,49,57,56,48,10, 68,57,56,48,10,57,57,56,48,10,53,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,51,48,10,69,78,67,79,68,73,78,71,32,55,57, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,48,52,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,66,48,48,10,48,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,49,10, 69,78,67,79,68,73,78,71,32,55,57,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,49,48,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,66,48,48,10,48,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,51,50,10,69,78,67,79,68, 73,78,71,32,55,57,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,66, 48,48,10,48,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,51,51,10,69,78,67,79,68,73,78,71,32,55, 57,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,66,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,51,52, 10,69,78,67,79,68,73,78,71,32,55,57,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,51,48, 48,10,49,54,48,48,10,54,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,53,10,69,78,67,79, 68,73,78,71,32,55,57,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 66,48,48,10,48,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,51,54,10,69,78,67,79,68,73,78,71,32, 55,57,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,50, 48,48,10,55,69,48,48,10,53,67,48,48,10,48,52,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,66,48,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,51, 55,10,69,78,67,79,68,73,78,71,32,55,57,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,50,48,48,10,55,69, 48,48,10,53,67,48,48,10,49,48,48,48,10,48,67,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,66,48,48,10,48,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,51,56,10,69,78,67, 79,68,73,78,71,32,55,57,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,68,69,48,48,10,52,67, 48,48,10,56,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,57,10,69,78,67,79,68,73,78,71, 32,55,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,69,48,48,10,56,67,48,48,10,52,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 51,65,10,69,78,67,79,68,73,78,71,32,55,57,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 55,56,48,10,53,51,48,48,10,56,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,55,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,51,66,10,69,78, 67,79,68,73,78,71,32,55,57,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,55,56,48,10,57, 51,48,48,10,52,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,51,67,10,69,78,67,79,68,73,78, 71,32,55,57,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,55,56,48,10,54,51,48,48,10,56, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,68,10,69,78,67,79,68,73,78,71,32,55,57,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,55,56,48,10,65,51,48,48,10,52,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,51,69,10,69, 78,67,79,68,73,78,71,32,55,57,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,70,48,48,10, 48,54,48,48,10,67,54,48,48,10,52,54,48,48,10,56, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,51,70,10,69,78,67,79,68,73, 78,71,32,55,57,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,69,48,48,10,48,67,48,48,10, 67,67,48,48,10,56,67,48,48,10,52,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,52,48,10,69,78,67,79,68,73,78,71,32,56,48, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,69,48,48,10,48,50,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,49,10, 69,78,67,79,68,73,78,71,32,56,48,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,52,50,10,69,78,67,79,68, 73,78,71,32,56,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,54,48,48,10,49,51,48,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,52,51,10,69,78,67,79,68,73,78,71,32,56, 48,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,54,48,48,10,52,51,48,48,10,51,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,52,52, 10,69,78,67,79,68,73,78,71,32,56,48,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,57,56, 48,10,48,66,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,53,10,69,78,67,79, 68,73,78,71,32,56,48,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,49,56,48,10,52,51,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,52,56,10,69,78,67,79,68,73,78,71,32, 56,48,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,52,70,48,48,10,57,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,52, 57,10,69,78,67,79,68,73,78,71,32,56,48,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,54, 48,48,10,56,70,48,48,10,53,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,52,65,10,69,78,67, 79,68,73,78,71,32,56,48,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,51,48,48,10,53,55, 56,48,10,56,52,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,55,56,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,66,10,69,78,67,79,68,73,78,71, 32,56,48,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,51,48,48,10,57,55,56,48,10,52,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,55,56,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 52,67,10,69,78,67,79,68,73,78,71,32,56,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,68, 51,48,48,10,54,55,56,48,10,56,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,55,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,52,68,10,69,78, 67,79,68,73,78,71,32,56,48,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,51,48,48,10,65, 55,56,48,10,52,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,53,48,10,69,78,67,79,68,73,78, 71,32,56,48,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,69,48,48,10,48,50,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,49,10,69,78,67,79,68,73,78,71,32,56,48,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,69,48,48,10,48,56,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,51,51,48,48,10,49,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,53,50,10,69, 78,67,79,68,73,78,71,32,56,48,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,54,48,48,10, 49,51,48,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,53,51,10,69,78,67,79,68,73, 78,71,32,56,48,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,54,48,48,10,52,51,48,48,10, 51,49,56,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,53,52,10,69,78,67,79,68,73,78,71,32,56,48, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,57,56,48,10,48,66,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,53,10, 69,78,67,79,68,73,78,71,32,56,48,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,49,56,48, 10,52,51,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,53,54,10,69,78,67,79,68, 73,78,71,32,56,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,69,48,48, 10,48,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,53,55,10,69,78,67,79,68,73,78,71,32,56, 48,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,69,48,48,10,48,56,48,48, 10,48,54,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,53,57, 10,69,78,67,79,68,73,78,71,32,56,48,50,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,57,56, 48,10,57,57,56,48,10,53,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,70,48,48,10,48,70,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,66,10,69,78,67,79, 68,73,78,71,32,56,48,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,67,67,48,10,57,67,67, 48,10,52,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,55,56,48,10,48,55,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,53,68,10,69,78,67,79,68,73,78,71,32, 56,48,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,67,67,48,10,65,67,67,48,10,52,67,67, 48,10,48,67,67,48,10,48,67,67,48,10,48,55,56,48, 10,48,55,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,53, 70,10,69,78,67,79,68,73,78,71,32,56,48,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,67, 67,48,10,48,67,67,48,10,67,67,67,48,10,56,67,67, 48,10,52,67,67,48,10,48,55,56,48,10,48,55,56,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,54,48,10,69,78,67, 79,68,73,78,71,32,56,48,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,48,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,49,10,69,78,67,79,68,73,78,71, 32,56,48,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,48,56,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 54,50,10,69,78,67,79,68,73,78,71,32,56,48,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 54,48,48,10,49,51,48,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,51,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,54,51,10,69,78, 67,79,68,73,78,71,32,56,48,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,54,48,48,10,52, 51,48,48,10,51,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,54,52,10,69,78,67,79,68,73,78, 71,32,56,48,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,57,56,48,10,48,66,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,53,10,69,78,67,79,68,73,78,71,32,56,48,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,49,56,48,10,52,51,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,54,54,10,69, 78,67,79,68,73,78,71,32,56,48,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,49,57,48,48,10,51,70,48,48,10, 50,69,48,48,10,48,50,48,48,10,48,67,48,48,10,48, 48,48,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,55,70,56,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,54,55,10,69,78,67,79,68,73, 78,71,32,56,48,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,69,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,55,70,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,54,56,10,69,78,67,79,68,73,78,71,32,56,48, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,54,48,48,10,52,70,48,48,10,57,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,54,48,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,57,10, 69,78,67,79,68,73,78,71,32,56,48,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,54,48,48, 10,56,70,48,48,10,53,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,54,48,48,10,49,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,54,65,10,69,78,67,79,68, 73,78,71,32,56,48,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,51,48,48,10,53,55,56,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,55,56,48,10,48,51, 48,48,10,48,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,54,66,10,69,78,67,79,68,73,78,71,32,56, 48,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,51,48,48,10,57,55,56,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,55,56,48,10,48,51,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,54,67, 10,69,78,67,79,68,73,78,71,32,56,48,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,68,51,48, 48,10,54,55,56,48,10,56,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 55,56,48,10,48,51,48,48,10,48,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,68,10,69,78,67,79, 68,73,78,71,32,56,48,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,68,51,48,48,10,65,55,56, 48,10,52,67,67,48,10,48,67,67,48,10,48,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,55,56,48,10,48, 51,48,48,10,48,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,54,69,10,69,78,67,79,68,73,78,71,32, 56,48,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,54,48,48,10,48,70,48,48,10,68,57,56, 48,10,53,57,56,48,10,57,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,54, 70,10,69,78,67,79,68,73,78,71,32,56,48,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,54, 48,48,10,48,70,48,48,10,68,57,56,48,10,57,57,56, 48,10,53,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,70,48,48,10,48,54,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,55,48,10,69,78,67, 79,68,73,78,71,32,56,48,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,49,10,69,78,67,79,68,73,78,71, 32,56,48,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 55,50,10,69,78,67,79,68,73,78,71,32,56,48,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,55,51,10,69,78, 67,79,68,73,78,71,32,56,48,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,54,49,56,48,10,54,48,48, 48,10,51,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,55,52,10,69,78,67,79,68,73,78, 71,32,56,48,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,53,10,69,78,67,79,68,73,78,71,32,56,48,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,55,54,10,69, 78,67,79,68,73,78,71,32,56,48,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,66,48,48,10,48,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,55,55,10,69,78,67,79,68,73, 78,71,32,56,48,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,66,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,55,56,10,69,78,67,79,68,73,78,71,32,56,48, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,57,10, 69,78,67,79,68,73,78,71,32,56,48,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,55,65,10,69,78,67,79,68, 73,78,71,32,56,48,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,55,66,10,69,78,67,79,68,73,78,71,32,56, 48,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,55,67, 10,69,78,67,79,68,73,78,71,32,56,48,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,68,10,69,78,67,79, 68,73,78,71,32,56,48,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,56,48,10,69,78,67,79,68,73,78,71,32, 56,48,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,56, 49,10,69,78,67,79,68,73,78,71,32,56,48,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,56,50,10,69,78,67, 79,68,73,78,71,32,56,48,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,51,10,69,78,67,79,68,73,78,71, 32,56,48,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 56,52,10,69,78,67,79,68,73,78,71,32,56,48,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,56,53,10,69,78, 67,79,68,73,78,71,32,56,48,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,56,54,10,69,78,67,79,68,73,78, 71,32,56,48,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,51,68, 56,48,10,54,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,56,48,10,54,53,56,48, 10,51,57,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,55,10,69,78,67,79,68,73,78,71,32,56,48,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,51,68,56,48,10,54,51, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,51,56,48,10,54,53,56,48,10,51,57,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,56,56,10,69, 78,67,79,68,73,78,71,32,56,48,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,54,48,48,10, 52,70,48,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,70, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,56,57,10,69,78,67,79,68,73, 78,71,32,56,48,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,54,48,48,10,56,70,48,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,56,65,10,69,78,67,79,68,73,78,71,32,56,48, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,48,48,10,53,55,56,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,70,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,66,10, 69,78,67,79,68,73,78,71,32,56,48,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,51,48,48, 10,57,55,56,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 70,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,56,67,10,69,78,67,79,68, 73,78,71,32,56,48,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,54,48,48,10,54,70,48,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,70,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,48,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,56,68,10,69,78,67,79,68,73,78,71,32,56, 48,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,54,48,48,10,65,70,48,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,56,69, 10,69,78,67,79,68,73,78,71,32,56,48,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,54,48, 48,10,48,70,48,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,70,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,70,10,69,78,67,79, 68,73,78,71,32,56,48,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,54,48,48,10,48,70,48, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,57,48,10,69,78,67,79,68,73,78,71,32, 56,48,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,69,48,48, 10,55,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,49,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,57, 49,10,69,78,67,79,68,73,78,71,32,56,48,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,57,50,10,69,78,67, 79,68,73,78,71,32,56,48,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,51,10,69,78,67,79,68,73,78,71, 32,56,48,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 57,52,10,69,78,67,79,68,73,78,71,32,56,48,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,57,53,10,69,78, 67,79,68,73,78,71,32,56,48,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,57,54,10,69,78,67,79,68,73,78, 71,32,56,48,56,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,69, 48,48,10,55,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,49,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,55,10,69,78,67,79,68,73,78,71,32,56,48,56, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,54,69,48,48,10,55,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,57,56,10,69, 78,67,79,68,73,78,71,32,56,48,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,57,56,48,10, 53,57,56,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,57,57,10,69,78,67,79,68,73, 78,71,32,56,48,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,68,57,56,48,10,57,57,56,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,57,65,10,69,78,67,79,68,73,78,71,32,56,48, 57,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,67,67,48,10,53,67,67,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 70,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,67,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,66,10, 69,78,67,79,68,73,78,71,32,56,48,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,67,67,48, 10,57,67,67,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,70,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,67,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,57,67,10,69,78,67,79,68, 73,78,71,32,56,48,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,67,67,48,10,54,67,67,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,70,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,67,67,48,10,48,48,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,57,68,10,69,78,67,79,68,73,78,71,32,56, 48,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,67,67,48,10,65,67,67,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,70,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,48,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,57,69, 10,69,78,67,79,68,73,78,71,32,56,48,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,57,56, 48,10,49,57,56,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,70,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,70,10,69,78,67,79, 68,73,78,71,32,56,48,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,57,56,48,10,49,57,56, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,70,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,65,48,10,69,78,67,79,68,73,78,71,32, 56,48,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,65, 49,10,69,78,67,79,68,73,78,71,32,56,48,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,69, 48,48,10,48,56,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,51,51,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,65,50,10,69,78,67, 79,68,73,78,71,32,56,48,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,54,48,48,10,49,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,51,51,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,51,10,69,78,67,79,68,73,78,71, 32,56,48,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,54,48,48,10,52,51,48,48,10,51,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,54,49,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,55,70,56,48,10, 51,51,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 65,52,10,69,78,67,79,68,73,78,71,32,56,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 57,56,48,10,48,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,55,70,56,48,10,51,51,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,65,53,10,69,78, 67,79,68,73,78,71,32,56,49,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,49,56,48,10,52, 51,48,48,10,51,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,70,56,48,10,51,51,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,65,54,10,69,78,67,79,68,73,78, 71,32,56,49,48,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 49,57,48,48,10,51,70,48,48,10,50,69,48,48,10,48, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,55,10,69,78,67,79,68,73,78,71,32,56,49,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,49,57,48,48,10, 51,70,48,48,10,50,69,48,48,10,48,56,48,48,10,48, 54,48,48,10,48,48,48,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,55,70,56,48,10,51,51,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,54,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,65,56,10,69, 78,67,79,68,73,78,71,32,56,49,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,67,54,48,48,10, 52,70,48,48,10,57,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,48,70,48, 48,10,48,54,48,48,10,49,70,56,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,65,57,10,69,78,67,79,68,73, 78,71,32,56,49,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,54,48,48,10,56,70,48,48,10, 53,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,70,48,48,10,48,54,48, 48,10,49,70,56,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,51,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,65,65,10,69,78,67,79,68,73,78,71,32,56,49, 48,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,51,48,48,10,53,55,56,48,10,56,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,67, 67,48,10,48,55,56,48,10,48,51,48,48,10,48,70,67, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,49,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,66,10, 69,78,67,79,68,73,78,71,32,56,49,48,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,51,48,48, 10,57,55,56,48,10,52,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,67,67,48,10,48,55, 56,48,10,48,51,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,65,67,10,69,78,67,79,68, 73,78,71,32,56,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,51,48,48,10,54,55,56,48, 10,56,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,67,67,48,10,48,55,56,48,10,48,51, 48,48,10,48,70,67,48,10,48,48,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,49,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,65,68,10,69,78,67,79,68,73,78,71,32,56, 49,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,51,48,48,10,65,55,56,48,10,52,67,67,48, 10,48,67,67,48,10,48,67,67,48,10,48,67,67,48,10, 48,67,67,48,10,48,67,67,48,10,48,67,67,48,10,48, 67,67,48,10,48,55,56,48,10,48,51,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,49,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,65,69, 10,69,78,67,79,68,73,78,71,32,56,49,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,54,48, 48,10,48,70,48,48,10,68,57,56,48,10,53,57,56,48, 10,57,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,48, 70,48,48,10,48,54,48,48,10,49,70,56,48,10,48,48, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,51,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,70,10,69,78,67,79, 68,73,78,71,32,56,49,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,54,48,48,10,48,70,48, 48,10,68,57,56,48,10,57,57,56,48,10,53,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,49,70,56,48,10,48,48,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,51,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,66,48,10,69,78,67,79,68,73,78,71,32, 56,49,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,49,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,68,56,48, 10,54,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,54,53,56,48,10,51, 57,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,66, 49,10,69,78,67,79,68,73,78,71,32,56,49,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,68,56,48,10,54,51,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,51,56,48,10,54,53,56,48,10,51,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,66,50,10,69,78,67, 79,68,73,78,71,32,56,49,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,68,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,51,56,48,10, 54,53,56,48,10,51,57,56,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,54,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,51,10,69,78,67,79,68,73,78,71, 32,56,49,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,54,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 66,52,10,69,78,67,79,68,73,78,71,32,56,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,68,56,48,10,54,51,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,53,56,48,10,51,57,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,66,54,10,69,78, 67,79,68,73,78,71,32,56,49,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,66,55,10,69,78,67,79,68,73,78, 71,32,56,49,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,48,48,10,51,70,48,48,10,50, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,51,68, 56,48,10,54,51,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,51,56,48,10,54,53,56,48, 10,51,57,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,56,10,69,78,67,79,68,73,78,71,32,56,49,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,50,49,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,66,57,10,69, 78,67,79,68,73,78,71,32,56,49,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,66,65,10,69,78,67,79,68,73, 78,71,32,56,49,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,56,54,48,48,10,67,70,48,48,10, 55,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,66,66,10,69,78,67,79,68,73,78,71,32,56,49, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,54,70,48,48,10,53,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,67,10, 69,78,67,79,68,73,78,71,32,56,49,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,69,48,48,10,51,51,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,66,68,10,69,78,67,79,68, 73,78,71,32,56,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,48,52,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,66,69,10,69,78,67,79,68,73,78,71,32,56, 49,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,65,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,66,70, 10,69,78,67,79,68,73,78,71,32,56,49,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,48,52,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,48,10,69,78,67,79, 68,73,78,71,32,56,49,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,48,48,10,51,70,48, 48,10,50,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,67,49,10,69,78,67,79,68,73,78,71,32, 56,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,57,48,48,10,51,70,48,48,10,50,54,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,67, 50,10,69,78,67,79,68,73,78,71,32,56,49,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,69,48,48,10,55,51,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,49, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,67,51,10,69,78,67, 79,68,73,78,71,32,56,49,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,69,48,48,10,55,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,48,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,49,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,52,10,69,78,67,79,68,73,78,71, 32,56,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,69,48, 48,10,55,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 67,54,10,69,78,67,79,68,73,78,71,32,56,49,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 57,48,48,10,51,70,48,48,10,50,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,69,48,48,10,55,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,67,55,10,69,78, 67,79,68,73,78,71,32,56,49,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,57,48,48,10,51, 70,48,48,10,50,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,69,48,48,10,55,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,49,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,67,56,10,69,78,67,79,68,73,78, 71,32,56,49,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,70,56,48,10,55,56,48,48,10,51, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,70,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,57,10,69,78,67,79,68,73,78,71,32,56,49,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,68,56,48,48,10,57,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,70, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,67,65,10,69, 78,67,79,68,73,78,71,32,56,49,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,57,56,48,10, 55,57,56,48,10,51,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,70,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,67,66,10,69,78,67,79,68,73, 78,71,32,56,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,57,56,48,10,68,57,56,48,10, 57,57,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,70,56,48,10,49,57,56,48,10,49,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,67,67,10,69,78,67,79,68,73,78,71,32,56,49, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,68,10, 69,78,67,79,68,73,78,71,32,56,49,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,54,48,48, 10,49,51,48,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,67,69,10,69,78,67,79,68, 73,78,71,32,56,49,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,57,56,48,10,48,66,48,48, 10,51,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,67,70,10,69,78,67,79,68,73,78,71,32,56, 49,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,57,48,48,10,51,70,48,48,10,50,69,48,48, 10,48,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,68,48, 10,69,78,67,79,68,73,78,71,32,56,49,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,50,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,49,10,69,78,67,79, 68,73,78,71,32,56,49,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 66,48,48,10,48,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,68,50,10,69,78,67,79,68,73,78,71,32, 56,49,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,54,68,56,48,10,54,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,68,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,68, 51,10,69,78,67,79,68,73,78,71,32,56,49,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,54,68,56,48,10,55,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,68,56,48,10,48,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,68,54,10,69,78,67, 79,68,73,78,71,32,56,49,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,50,48,48,10,55,69, 48,48,10,52,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,48,48,10,48,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,55,10,69,78,67,79,68,73,78,71, 32,56,49,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,51, 50,48,48,10,55,69,48,48,10,52,67,48,48,10,54,54, 48,48,10,54,54,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,66,48,48,10, 48,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 68,56,10,69,78,67,79,68,73,78,71,32,56,49,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,50,49,48,48,10,49,69,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,68,57,10,69,78, 67,79,68,73,78,71,32,56,49,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,68,65,10,69,78,67,79,68,73,78, 71,32,56,49,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,70,56,48,10,54,54,48,48,10,50, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,49,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,66,10,69,78,67,79,68,73,78,71,32,56,49,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,67,54,48,48,10,56,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,68,68,10,69, 78,67,79,68,73,78,71,32,56,49,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,54,48,48,10, 52,51,48,48,10,51,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,68,69,10,69,78,67,79,68,73, 78,71,32,56,49,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,49,56,48,10,52,51,48,48,10, 51,54,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,68,70,10,69,78,67,79,68,73,78,71,32,56,49, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,57,48,48,10,51,70,48,48,10,50,69,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,48,10, 69,78,67,79,68,73,78,71,32,56,49,54,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,49,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,69,49,10,69,78,67,79,68, 73,78,71,32,56,49,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,69,50,10,69,78,67,79,68,73,78,71,32,56, 49,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,54,68,56,48,10,54,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,69,51, 10,69,78,67,79,68,73,78,71,32,56,49,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,54,68,56,48,10,55,57,56,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,52,10,69,78,67,79, 68,73,78,71,32,56,49,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,48,50,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,69,53,10,69,78,67,79,68,73,78,71,32, 56,49,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,56,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,51,48,48,10,55, 69,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,69, 54,10,69,78,67,79,68,73,78,71,32,56,49,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,57, 48,48,10,51,70,48,48,10,50,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,69,55,10,69,78,67, 79,68,73,78,71,32,56,49,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,49,57,48,48,10,51,70,48,48,10,50,54, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,51,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,56,10,69,78,67,79,68,73,78,71, 32,56,49,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,54,49,56,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 69,57,10,69,78,67,79,68,73,78,71,32,56,49,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,69,65,10,69,78, 67,79,68,73,78,71,32,56,49,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,68,57,56,48,10,55, 57,56,48,10,51,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,70,48,48,10,48,70,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,69,66,10,69,78,67,79,68,73,78, 71,32,56,49,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,57,56,48,10,68,57,56,48,10,57, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,48,70, 48,48,10,48,70,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,67,10,69,78,67,79,68,73,78,71,32,56,49,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,69,48,48,10,57,66,48,48,10,53,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,66, 48,48,10,49,69,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,49,70,69,68,10,69, 78,67,79,68,73,78,71,32,56,49,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 54,68,56,48,10,54,55,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,70,69,69,10,69,78,67,79,68,73, 78,71,32,56,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,54,68,56,48,10, 55,57,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 49,70,69,70,10,69,78,67,79,68,73,78,71,32,56,49, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,50,10, 69,78,67,79,68,73,78,71,32,56,49,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,54,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,49,70,70,51,10,69,78,67,79,68, 73,78,71,32,56,49,55,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,51,51,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,70,70,52,10,69,78,67,79,68,73,78,71,32,56, 49,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,70,56,48,10,51,51, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,49,70,70,54, 10,69,78,67,79,68,73,78,71,32,56,49,56,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,70,48,48,10,50,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,55,70,56,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,55,10,69,78,67,79, 68,73,78,71,32,56,49,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,57,48,48,10,51,70,48, 48,10,50,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,51,51,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,54,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,49,70,70,56,10,69,78,67,79,68,73,78,71,32, 56,49,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,54,48,48,10,54,70,48,48,10,51,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,49,57,56,48,10,48,70,48,48,10,48, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,70,70, 57,10,69,78,67,79,68,73,78,71,32,56,49,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,54,70,48,48,10,53,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,70,48,48,10,48,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,49,70,70,65,10,69,78,67, 79,68,73,78,71,32,56,49,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,54,48,48,10,54,70, 48,48,10,51,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,49,57,56,48,10,48,70,48,48,10, 48,54,48,48,10,49,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,66,10,69,78,67,79,68,73,78,71, 32,56,49,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,54,48,48,10,54,70,48,48,10,53,57, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,49,57,56,48,10,49,57,56,48,10,49,57,56,48, 10,49,57,56,48,10,48,70,48,48,10,48,54,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,49,70, 70,67,10,69,78,67,79,68,73,78,71,32,56,49,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,51,51,48,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,50,48,48,10,55,51,56,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,70,70,68,10,69,78, 67,79,68,73,78,71,32,56,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,49,70,70,69,10,69,78,67,79,68,73,78, 71,32,56,49,57,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,49,48,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,48,10,69,78,67,79,68,73,78,71,32,56,49,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,48,49,10,69, 78,67,79,68,73,78,71,32,56,49,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,48,50,10,69,78,67,79,68,73, 78,71,32,56,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,48,51,10,69,78,67,79,68,73,78,71,32,56,49, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,52,10, 69,78,67,79,68,73,78,71,32,56,49,57,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,48,53,10,69,78,67,79,68, 73,78,71,32,56,49,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,48,54,10,69,78,67,79,68,73,78,71,32,56, 49,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,48,55, 10,69,78,67,79,68,73,78,71,32,56,49,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,56,10,69,78,67,79, 68,73,78,71,32,56,50,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,48,57,10,69,78,67,79,68,73,78,71,32, 56,50,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,48, 65,10,69,78,67,79,68,73,78,71,32,56,50,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,49,48,10,69,78,67, 79,68,73,78,71,32,56,50,48,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,49,49,10,69,78,67,79,68,73,78,71, 32,56,50,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,103,117,114, 101,100,97,115,104,10,69,78,67,79,68,73,78,71,32,56, 50,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,110,100,97,115,104,10, 69,78,67,79,68,73,78,71,32,56,50,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,109,100,97,115,104,10,69,78,67,79,68,73, 78,71,32,56,50,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,48,48,50,48,56,10,69,78,67,79,68,73,78,71,32, 56,50,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,49, 54,10,69,78,67,79,68,73,78,71,32,56,50,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,100,101,114,115,99,111,114,101,100, 98,108,10,69,78,67,79,68,73,78,71,32,56,50,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,113,117,111,116,101,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,56,50,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,117,111,116,101,114,105,103,104,116,10,69,78, 67,79,68,73,78,71,32,56,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,113,117,111,116,101,115,105,110,103,108,98,97,115,101,10, 69,78,67,79,68,73,78,71,32,56,50,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,117,111,116,101,114,101,118,101,114,115,101,100, 10,69,78,67,79,68,73,78,71,32,56,50,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,69,48,48,10,48,67,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,108,101,102,116, 10,69,78,67,79,68,73,78,71,32,56,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,56, 48,10,51,51,48,48,10,51,66,56,48,10,51,66,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,100,98,108,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,56,50,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,55, 48,48,10,55,55,48,48,10,51,51,48,48,10,54,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,113,117,111,116,101,100,98,108,98,97,115, 101,10,69,78,67,79,68,73,78,71,32,56,50,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,51, 51,48,48,10,54,54,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,49,70,10,69,78,67, 79,68,73,78,71,32,56,50,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,66,56,48,10,51,66, 56,48,10,51,51,48,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,97,103,103,101,114,10,69,78,67,79,68,73,78,71,32, 56,50,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,48,56,48, 48,10,52,57,48,48,10,70,70,56,48,10,52,57,48,48, 10,48,56,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,97,103,103,101,114, 100,98,108,10,69,78,67,79,68,73,78,71,32,56,50,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,48,56,48,48,10,52, 57,48,48,10,70,70,56,48,10,52,57,48,48,10,48,56, 48,48,10,52,57,48,48,10,70,70,56,48,10,52,57,48, 48,10,48,56,48,48,10,49,67,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,117,108,108,101,116,10,69,78, 67,79,68,73,78,71,32,56,50,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,69,48,48,10,51,69,48,48,10,51,69,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,50,51,10,69,78,67,79,68,73,78, 71,32,56,50,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,51,67, 48,48,10,51,70,48,48,10,51,67,48,48,10,51,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,110,101,100, 111,116,101,110,108,101,97,100,101,114,10,69,78,67,79,68, 73,78,71,32,56,50,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,119, 111,100,111,116,101,110,108,101,97,100,101,114,10,69,78,67, 79,68,73,78,71,32,56,50,50,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,108,108,105,112,115,105,115,10,69,78,67,79,68,73,78, 71,32,56,50,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,68,56,48, 10,54,68,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,50,55,10,69,78,67,79,68,73,78,71,32,56,50,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,50,70,10,69, 78,67,79,68,73,78,71,32,56,50,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,116,104,111,117,115,97,110,100,10,69,78, 67,79,68,73,78,71,32,56,50,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 49,56,48,10,50,57,48,48,10,50,66,48,48,10,49,50, 48,48,10,48,54,48,48,10,48,52,48,48,10,48,67,48, 48,10,48,56,48,48,10,49,65,56,48,10,49,53,52,48, 10,51,53,52,48,10,50,50,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,49,10,69,78,67,79,68,73,78, 71,32,56,50,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,48,48,48,10,50, 56,48,48,10,50,56,48,48,10,49,48,67,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,54,48,48, 48,10,48,65,56,48,10,49,53,52,48,10,49,53,52,48, 10,48,65,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,109,105,110,117, 116,101,10,69,78,67,79,68,73,78,71,32,56,50,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,51,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,101,99,111,110,100,10,69,78,67, 79,68,73,78,71,32,56,50,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,67,48,10,49,57, 56,48,10,51,51,48,48,10,54,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,51,52,10,69,78,67,79,68,73,78,71, 32,56,50,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,52,48,10,51,54,67,48,10,54,68, 56,48,10,68,66,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 51,53,10,69,78,67,79,68,73,78,71,32,56,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,51,54,10,69,78, 67,79,68,73,78,71,32,56,50,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,67,67,48,48,10,54,54,48,48,10,51, 51,48,48,10,49,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,55,10,69,78,67,79,68,73,78, 71,32,56,50,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 66,54,48,48,10,68,66,48,48,10,54,68,56,48,10,51, 54,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,51,56,10,69,78,67,79,68,73,78,71,32,56,50,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,52,48,48,10,50,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,103,117,105,108,115,105,110,103,108, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,50, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,67,48,48,10,49, 56,48,48,10,51,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,54,48,48,10,48,51,48,48,10,48,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,117,105,108,115,105,110,103, 108,114,105,103,104,116,10,69,78,67,79,68,73,78,71,32, 56,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,50,48,48, 48,10,51,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,50, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 66,10,69,78,67,79,68,73,78,71,32,56,50,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,52,67,56,48,10,50,49,48,48,10,49,50,48,48, 10,67,67,67,48,10,67,67,67,48,10,49,50,48,48,10, 50,49,48,48,10,52,67,56,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,120,99,108,97,109,100,98,108,10,69, 78,67,79,68,73,78,71,32,56,50,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,51,68,10,69,78,67,79,68,73, 78,71,32,56,50,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 70,48,48,10,48,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,51,69,10,69,78,67,79,68,73,78,71,32,56,50, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,51,70,10, 69,78,67,79,68,73,78,71,32,56,50,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,54,49,56,48,10,51,70,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,52,48,10,69,78,67,79,68, 73,78,71,32,56,50,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,69,48, 48,10,50,49,48,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,49,10,69,78,67,79,68,73,78,71,32,56, 50,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,48, 50,48,48,10,48,52,48,48,10,48,52,48,48,10,48,56, 48,48,10,49,52,48,48,10,49,52,48,48,10,50,50,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,50, 10,69,78,67,79,68,73,78,71,32,56,50,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,50,48,48,10,49,67,48,48, 10,51,69,48,48,10,49,67,48,48,10,50,50,48,48,10, 48,48,48,48,10,57,52,56,48,10,54,51,48,48,10,70, 55,56,48,10,54,51,48,48,10,57,52,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,52,51,10,69,78,67,79, 68,73,78,71,32,56,50,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 114,97,99,116,105,111,110,10,69,78,67,79,68,73,78,71, 32,56,50,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,67,48,10,48,48,67,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,48,48,48,10, 51,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 52,53,10,69,78,67,79,68,73,78,71,32,56,50,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,54,10,69,78, 67,79,68,73,78,71,32,56,50,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,51,69,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,52,55,10,69,78,67,79,68,73,78, 71,32,56,50,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,66,56,48,10,70,70,67,48,10,67, 67,67,48,10,67,67,67,48,10,67,67,67,48,10,49,57, 56,48,10,49,57,56,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,52,56,10,69,78,67,79,68,73,78,71,32,56,50,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,68,56,48,10,55,70,56,48,10,54,55,56,48,10,54, 55,56,48,10,54,55,56,48,10,48,68,56,48,10,48,68, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,57,56, 48,10,48,48,48,48,10,49,57,56,48,10,49,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,52,57,10,69, 78,67,79,68,73,78,71,32,56,50,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,70,48,48,10, 55,70,56,48,10,55,57,56,48,10,55,57,56,48,10,55, 57,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,48,48,48, 48,10,54,54,48,48,10,54,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,52,66,10,69,78,67,79,68,73,78,71,32,56,50, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,48,48,10,55,70,56,48,10,54,70,56,48,10, 54,70,56,48,10,54,70,56,48,10,54,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,52,67,10, 69,78,67,79,68,73,78,71,32,56,50,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,70,56,48,10,51,67,56,48,10,55,67,56,48,10,55, 67,56,48,10,55,67,56,48,10,51,67,56,48,10,49,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,52,68,10,69,78,67,79,68, 73,78,71,32,56,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,69,48,48,10, 52,70,48,48,10,52,70,56,48,10,52,70,56,48,10,52, 70,56,48,10,52,70,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,69,10,69,78,67,79,68,73,78,71,32,56, 50,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,55,70,56,48,10,49, 69,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,70, 10,69,78,67,79,68,73,78,71,32,56,50,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,49,67,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,53,48,10,69,78,67,79, 68,73,78,71,32,56,50,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,53,49,10,69,78,67,79,68,73,78,71,32, 56,50,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,51,48,48,10,51,51, 48,48,10,49,69,48,48,10,55,70,56,48,10,49,69,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,51,51,48,48,10,51,51,48,48,10,49,69,48,48,10, 55,70,56,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 50,10,69,78,67,79,68,73,78,71,32,56,50,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,51,49,56,48,10,51,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,67,48,48,10,49,56,48,48,10, 49,57,56,48,10,51,49,56,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,53,51,10,69,78,67, 79,68,73,78,71,32,56,50,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,56,67,48,10,67,67,67,48,10,67,55,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,53,52,10,69,78,67,79,68,73,78,71, 32,56,50,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,52,48,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 53,55,10,69,78,67,79,68,73,78,71,32,56,50,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 53,52,48,10,50,65,56,48,10,50,65,56,48,10,53,53, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,53,70,10,69,78, 67,79,68,73,78,71,32,56,50,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,54,48,10,69,78,67,79,68,73,78, 71,32,56,50,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,54,49,10,69,78,67,79,68,73,78,71,32,56,50,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,54,50,10,69, 78,67,79,68,73,78,71,32,56,50,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,54,51,10,69,78,67,79,68,73, 78,71,32,56,50,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,122,101,114, 111,115,117,112,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,55,49,10,69,78,67,79,68,73,78,71,32,56,51, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,111,117,114,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,55,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,105,118,101,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 48,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,69,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,67,48,48,10,48,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,115,105,120,115,117,112,101,114, 105,111,114,10,69,78,67,79,68,73,78,71,32,56,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,54,48,48,10,51,48,48,48,10,51, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,101,118,101,110,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,101,105,103,104,116,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,105,110,101,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,69,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,55,65, 10,69,78,67,79,68,73,78,71,32,56,51,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,51,69,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,55,66,10,69,78,67,79, 68,73,78,71,32,56,51,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,55,67,10,69,78,67,79,68,73,78,71,32, 56,51,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,48,48,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,97,114,101,110,108, 101,102,116,115,117,112,101,114,105,111,114,10,69,78,67,79, 68,73,78,71,32,56,51,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,112, 97,114,101,110,114,105,103,104,116,115,117,112,101,114,105,111, 114,10,69,78,67,79,68,73,78,71,32,56,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,110,115,117,112,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,67,48,48,10,51,54,48,48,10,51, 54,48,48,10,51,54,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,122,101,114,111,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,51,54,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,111,110,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,51,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,119,111,105,110,102,101,114,105,111,114,10,69,78,67, 79,68,73,78,71,32,56,51,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,104,114,101,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,111,117,114,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,67,48,48,10,51,67,48,48, 10,54,67,48,48,10,55,69,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,118,101,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,67,48,48,10,48,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,120,105,110,102,101,114,105,111,114,10,69,78,67, 79,68,73,78,71,32,56,51,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,48,48,48,10, 51,67,48,48,10,51,54,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,118,101,110,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,105,103,104,116,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,49,67,48,48,10,51,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,105,110,101,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,54,48,48,10,51,54,48, 48,10,49,69,48,48,10,48,54,48,48,10,51,54,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,56,65,10,69,78,67,79,68,73, 78,71,32,56,51,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,51,69,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,56,66,10,69,78,67,79,68,73,78,71,32,56,51, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,56,67,10, 69,78,67,79,68,73,78,71,32,56,51,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,48,48,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,97,114,101,110,108,101,102,116,105,110,102,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,97,114,101,110,114,105,103, 104,116,105,110,102,101,114,105,111,114,10,69,78,67,79,68, 73,78,71,32,56,51,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,65,48,10,69,78,67,79,68,73,78,71,32,56, 51,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,48,48,48,10, 54,70,56,48,10,54,67,48,48,10,51,67,48,48,10,49, 70,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,111,108,111,110,109,111, 110,101,116,97,114,121,10,69,78,67,79,68,73,78,71,32, 56,51,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,51, 52,48,10,49,70,52,48,10,51,55,67,48,10,54,55,67, 48,10,54,68,56,48,10,54,68,56,48,10,55,66,48,48, 10,55,66,48,48,10,55,54,48,48,10,55,54,48,48,10, 54,67,48,48,10,54,68,56,48,10,70,66,48,48,10,68, 69,48,48,10,66,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,65, 50,10,69,78,67,79,68,73,78,71,32,56,51,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,48,48, 48,10,54,48,48,48,10,54,66,56,48,10,54,54,67,48, 10,54,54,67,48,10,54,54,48,48,10,54,54,48,48,10, 54,55,56,48,10,51,55,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,114,97,110,99,10,69,78,67,79,68, 73,78,71,32,56,51,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,69,48,48,10,54,48,48,48,10,54, 70,48,48,10,54,68,56,48,10,54,70,48,48,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,108,105, 114,97,10,69,78,67,79,68,73,78,71,32,56,51,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,56,48,48,10,55,69,48,48,10,49,56,48, 48,10,55,69,48,48,10,49,56,48,48,10,49,56,48,48, 10,55,67,48,48,10,53,54,67,48,10,55,51,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,65,53,10,69,78, 67,79,68,73,78,71,32,56,51,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,67,48,10,48,48,67,48,10,48,49, 56,48,10,53,66,56,48,10,55,70,56,48,10,54,70,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,68,56,48, 10,55,68,56,48,10,55,68,56,48,10,51,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,54,10,69,78,67,79,68,73,78, 71,32,56,51,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,55,49,56,48,10,55, 49,56,48,10,55,57,56,48,10,70,70,67,48,10,54,68, 56,48,10,54,68,56,48,10,70,70,67,48,10,54,55,56, 48,10,54,51,56,48,10,54,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,112,101,115,101, 116,97,10,69,78,67,79,68,73,78,71,32,56,51,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,54,51,48,48,10,54,49,56,48,10,70,70, 67,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,55,69,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,65,56,10,69,78, 67,79,68,73,78,71,32,56,51,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,48,48,48,10,68, 56,48,48,10,67,67,48,48,10,67,67,48,48,10,67,67, 48,48,10,67,67,48,48,10,68,57,67,48,10,70,51,48, 48,10,68,66,48,48,10,68,57,56,48,10,67,67,67,48, 10,67,67,67,48,10,67,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,57,10,69,78,67,79,68,73,78, 71,32,56,51,54,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,68,56,48,10,70,70, 67,48,10,54,68,56,48,10,70,70,67,48,10,54,68,56, 48,10,55,51,56,48,10,55,51,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,51,54,10,69,78,67,79,68,73,78,71,32,56, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,56,48,48,10, 52,52,48,48,10,53,53,48,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,49,49,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,111,110,103,10,69,78, 67,79,68,73,78,71,32,56,51,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,49,68,56,48,10,51,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,51,51,56,48,10,49,68,56,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,69,117,114,111,10,69,78,67,79,68,73,78,71,32,56, 51,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,70,48,48, 10,49,57,56,48,10,51,48,48,48,10,51,48,48,48,10, 55,70,48,48,10,51,48,48,48,10,55,69,48,48,10,51, 48,48,48,10,51,48,48,48,10,49,57,56,48,10,48,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,65,68, 10,69,78,67,79,68,73,78,71,32,56,51,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,56, 48,10,49,57,56,48,10,49,66,48,48,10,49,66,48,48, 10,49,69,48,48,10,49,69,48,48,10,55,70,56,48,10, 49,69,48,48,10,49,69,48,48,10,49,66,48,48,10,49, 66,48,48,10,49,57,56,48,10,49,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,69,10,69,78,67,79, 68,73,78,71,32,56,51,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,70,48,48,10,51,67,48,48,10,48,70,48,48,10, 51,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,65,70,10,69,78,67,79,68,73,78,71,32, 56,51,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,69,48,48,10,55,51,48, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,55,57,56,48,10,53,68,56,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,66, 48,10,69,78,67,79,68,73,78,71,32,56,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,49,70,48,48,10,48,69,48,48,10,48,54,48,48, 10,48,55,48,48,10,48,68,56,48,10,50,68,56,48,10, 50,68,56,48,10,51,57,56,48,10,53,49,56,48,10,52, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,66,49,10,69,78,67, 79,68,73,78,71,32,56,51,54,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,69,48,48,10,54,51, 48,48,10,54,49,56,48,10,70,70,67,48,10,54,49,56, 48,10,70,70,67,48,10,54,51,48,48,10,55,69,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,48,10,69,78,67,79,68,73,78,71, 32,56,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,49,56,48,48,10,51,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 68,49,10,69,78,67,79,68,73,78,71,32,56,52,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,54,48,48,10,48,51,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,68,50,10,69,78, 67,79,68,73,78,71,32,56,52,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,68,51,10,69,78,67,79,68,73,78, 71,32,56,52,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,52,10,69,78,67,79,68,73,78,71,32,56,52,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,53,69,48,48,10,54,49,48,48,10,55,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,68,53,10,69, 78,67,79,68,73,78,71,32,56,52,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,69,56,48, 10,50,49,56,48,10,52,51,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,68,54,10,69,78,67,79,68,73, 78,71,32,56,52,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,48,48,48,10,51,48,48,48, 10,55,70,56,48,10,51,48,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,68,55,10,69,78,67,79,68,73,78,71,32,56,52, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,50,48,48,10,48,51,48,48,10,55,70,56,48, 10,48,51,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,56,10, 69,78,67,79,68,73,78,71,32,56,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,50, 49,48,48,10,50,49,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,68,57,10,69,78,67,79,68, 73,78,71,32,56,52,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,50,48,48,10,50,70,56,48,10,50, 55,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,68,65,10,69,78,67,79,68,73,78,71,32,56, 52,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,50,48,48,10,50,55,48,48,10,50,70,56,48,10,49, 50,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,68,66, 10,69,78,67,79,68,73,78,71,32,56,52,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,54,68, 56,48,10,54,68,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,67,10,69,78,67,79, 68,73,78,71,32,56,52,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,53,53,48,48,10,53,53, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,68,68,10,69,78,67,79,68,73,78,71,32, 56,52,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,49,69,48,48,10,50,49,48,48,10,52,48, 56,48,10,52,48,56,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,52,48,56,48,10,52,48,56,48,10,50,49, 48,48,10,49,69,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,68, 69,10,69,78,67,79,68,73,78,71,32,56,52,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,70,70,67,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,70,70,67,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,68,70,10,69,78,67, 79,68,73,78,71,32,56,52,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,67,48,48,10,49, 50,48,48,10,50,49,48,48,10,52,48,56,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,56,48,52,48,10,52,48,56,48,10,50, 49,48,48,10,49,50,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,48,10,69,78,67,79,68,73,78,71, 32,56,52,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,49,69,48,48,10,50,49,48,48,10,54, 48,56,48,10,54,48,56,48,10,57,48,52,48,10,57,48, 52,48,10,57,48,52,48,10,56,56,52,48,10,56,56,52, 48,10,56,56,52,48,10,56,52,52,48,10,56,52,52,48, 10,56,52,52,48,10,56,50,52,48,10,56,50,52,48,10, 56,50,52,48,10,52,49,56,48,10,52,49,56,48,10,50, 49,48,48,10,49,69,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 69,49,10,69,78,67,79,68,73,78,71,32,56,52,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 49,50,48,48,10,51,51,48,48,10,55,70,56,48,10,51, 51,48,48,10,49,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,69,50,10,69,78, 67,79,68,73,78,71,32,56,52,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,56,48,52,48,10, 56,48,52,48,10,55,70,56,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,69,51,10,69,78,67,79,68,73,78, 71,32,56,52,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,70,70,67,48,10,56,48,52,48,10, 70,70,67,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,70,70,67,48,10,56,48,52,48,10, 70,70,67,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,52,10,69,78,67,79,68,73,78,71,32,56,52,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,50,49,48,48,10,50,49,48,48,10,50,49, 48,48,10,50,49,48,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,70,70,67,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,69,53,10,69, 78,67,79,68,73,78,71,32,56,52,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,50,48,48,48,10,49,48,48,48,10,49, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,49,48,48,10,48,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,69,54,10,69,78,67,79,68,73, 78,71,32,56,52,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,52,48,48, 10,49,52,48,48,10,49,52,48,48,10,49,52,48,48,10, 49,52,48,48,10,49,52,48,48,10,49,52,48,48,10,49, 52,48,48,10,49,52,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,52,48,48,10,49,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,69,55,10,69,78,67,79,68,73,78,71,32,56,52, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,70,70,67,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,56,10, 69,78,67,79,68,73,78,71,32,56,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,68,56,48,10,54,68,56,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,69,57,10,69,78,67,79,68, 73,78,71,32,56,52,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,67,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,69,65,10,69,78,67,79,68,73,78,71,32,56, 52,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 52,48,48,48,10,70,70,56,48,10,52,48,48,48,10,50, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,48,48, 10,69,78,67,79,68,73,78,71,32,56,52,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,49,48,48,10,48,57,48,48,10,51,65,48,48, 10,52,65,48,48,10,51,67,48,48,10,48,52,48,48,10, 48,56,48,48,10,48,66,48,48,10,49,52,56,48,10,49, 52,48,48,10,50,52,56,48,10,50,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,49,10,69,78,67,79, 68,73,78,71,32,56,52,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,49,48, 48,10,48,57,48,48,10,51,65,48,48,10,52,65,48,48, 10,51,67,48,48,10,48,52,48,48,10,48,56,48,48,10, 48,66,56,48,10,49,52,48,48,10,49,51,48,48,10,50, 48,56,48,10,50,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,48,50,10,69,78,67,79,68,73,78,71,32, 56,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,51,66,48,48,10,55,57,56, 48,10,68,56,48,48,10,68,56,48,48,10,68,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,55,57,56,48,10,51,66,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 51,10,69,78,67,79,68,73,78,71,32,56,52,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,54,48,48,48,10,57,48,48,48,10,57,55, 48,48,10,54,68,56,48,10,49,56,67,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,67,48,10,48,68,56,48,10,48,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,48,52,10,69,78,67, 79,68,73,78,71,32,56,52,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,70,48,48,10,54,68,56, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,68,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,50,52,56,10,69,78,67,79,68,73, 78,71,32,56,52,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,49,48,48,10, 52,57,48,48,10,52,50,48,48,10,52,65,48,48,10,51, 52,48,48,10,48,52,48,48,10,48,56,48,48,10,48,66, 48,48,10,49,52,56,48,10,49,52,56,48,10,50,52,56, 48,10,50,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,48,54,10,69,78,67,79,68,73,78,71,32,56,52, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,49,48,48,10,52,57,48,48,10, 52,50,48,48,10,52,65,48,48,10,51,52,48,48,10,48, 52,48,48,10,48,56,48,48,10,48,67,56,48,10,49,52, 56,48,10,49,52,56,48,10,50,52,56,48,10,50,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,48,55,10, 69,78,67,79,68,73,78,71,32,56,52,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,70,56,48, 10,51,49,56,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,48,48,10,51, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,51,49,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,48,56,10,69,78,67,79,68, 73,78,71,32,56,52,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,67,48,48,10,55,54,48,48, 10,54,51,48,48,10,48,49,56,48,10,48,49,56,48,10, 49,49,56,48,10,49,70,56,48,10,49,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,57,10,69,78,67,79,68,73,78,71,32,56, 52,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,54,48,48,48,10,57,48,48, 48,10,57,70,67,48,10,54,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,48,65, 10,69,78,67,79,68,73,78,71,32,56,52,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,49,56,67,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,49, 70,48,48,10,48,55,67,48,10,49,69,48,48,10,51,54, 48,48,10,54,67,48,48,10,55,56,48,48,10,51,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,66,10,69,78,67,79, 68,73,78,71,32,56,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,57,56,48,10,56,65,56, 48,10,48,65,56,48,10,48,65,56,48,10,48,65,56,48, 10,48,65,56,48,10,49,70,48,48,10,50,65,48,48,10, 52,65,48,48,10,53,50,48,48,10,53,52,48,48,10,53, 52,56,48,10,50,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,48,67,10,69,78,67,79,68,73,78,71,32, 56,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,51,67,48,10,55,51,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,51,56,48,10,55,51,56,48, 10,55,70,56,48,10,55,51,56,48,10,55,51,56,48,10, 55,51,56,48,10,55,51,56,48,10,70,51,56,48,10,55, 51,67,48,10,50,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 68,10,69,78,67,79,68,73,78,71,32,56,52,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,68,57, 56,48,10,68,57,56,48,10,68,57,56,48,10,68,57,56, 48,10,68,57,56,48,10,68,57,56,48,10,68,70,56,48, 10,68,57,56,48,10,68,57,56,48,10,68,57,56,48,10, 68,57,56,48,10,68,57,56,48,10,68,57,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,48,69,10,69,78,67, 79,68,73,78,71,32,56,52,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,51,48,48, 48,10,51,69,48,48,10,51,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,67,54,48,48,10, 67,54,48,48,10,67,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,48,70,10,69,78,67,79,68,73,78,71, 32,56,52,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,67,48,48,10,48,70, 48,48,10,55,67,48,48,10,49,56,48,48,10,49,70,48, 48,10,49,57,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 49,48,10,69,78,67,79,68,73,78,71,32,56,52,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,50,49,48,48,10,50,49,48,48,10,48,49, 48,48,10,48,50,48,48,10,48,50,48,48,10,48,50,48, 48,10,48,50,48,48,10,48,52,48,48,10,48,52,48,48, 10,48,52,48,48,10,50,52,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,73,102,114,97,107,116,117,114,10,69, 78,67,79,68,73,78,71,32,56,52,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 55,70,48,48,10,54,54,48,48,10,54,54,48,48,10,55, 54,48,48,10,50,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,55,48,48,10,50,51,56,48,10,55,49,56, 48,10,51,70,56,48,10,49,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,49,50,10,69,78,67,79,68,73, 78,71,32,56,52,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,52,56,48,10, 48,52,56,48,10,52,52,56,48,10,51,70,48,48,10,48, 52,48,48,10,48,52,48,48,10,48,56,48,48,10,48,56, 48,48,10,51,56,48,48,10,52,56,56,48,10,52,67,56, 48,10,51,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,102,105, 105,54,49,50,56,57,10,69,78,67,79,68,73,78,71,32, 56,52,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,48,54,56,48,10,48,54,56, 48,10,48,54,56,48,10,48,67,56,48,10,48,68,48,48, 10,48,68,48,48,10,48,68,48,48,10,49,65,48,48,10, 49,67,48,48,10,51,56,56,48,10,53,66,48,48,10,48, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,49, 52,10,69,78,67,79,68,73,78,71,32,56,52,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,70,70,56,48,10,54,67,48, 48,10,54,67,48,48,10,54,70,48,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,49,53,10,69,78,67, 79,68,73,78,71,32,56,52,54,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,49,56,48,10,70,49, 56,48,10,70,49,56,48,10,70,57,56,48,10,68,57,56, 48,10,68,68,56,48,10,68,68,56,48,10,68,70,56,48, 10,68,70,56,48,10,68,66,56,48,10,68,66,56,48,10, 68,57,56,48,10,68,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,51,53,50,10,69,78,67,79,68,73, 78,71,32,56,52,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,67,48,48,10,67,67,48,48,10, 67,67,48,48,10,69,67,48,48,10,69,67,48,48,10,70, 70,56,48,10,70,69,67,48,10,68,69,67,48,10,68,69, 67,48,10,67,69,67,48,10,67,70,56,48,10,67,67,48, 48,10,67,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,55,10,69,78,67,79,68,73,78,71,32,56,52, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 51,51,48,48,10,54,49,56,48,10,53,67,56,48,10,53, 50,56,48,10,53,67,56,48,10,53,48,56,48,10,53,48, 56,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,119,101,105,101,114,115,116,114, 97,115,115,10,69,78,67,79,68,73,78,71,32,56,52,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,56,69,48,48,10,57,49, 48,48,10,65,48,56,48,10,52,48,56,48,10,52,48,56, 48,10,54,56,56,48,10,65,57,48,48,10,65,54,48,48, 10,65,48,48,48,10,65,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,57,10,69, 78,67,79,68,73,78,71,32,56,52,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,69,48,48,10, 68,66,48,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,57,56,48,10,68,66,48,48,10,68,69, 48,48,10,68,56,48,48,10,68,56,48,48,10,68,56,48, 48,10,68,56,48,48,10,68,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,49,65,10,69,78,67,79,68,73, 78,71,32,56,52,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,66,48,48,10, 55,57,56,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,57,56,48,10,68,57,56,48,10,68,57, 56,48,10,68,57,56,48,10,55,70,56,48,10,51,66,48, 48,10,49,70,48,48,10,48,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,66,10,69,78,67,79,68,73,78,71,32,56,52, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,52,56,56,48,10,52,56,56,48,10, 48,56,56,48,10,49,48,56,48,10,49,49,48,48,10,49, 69,48,48,10,49,52,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,65,50,56,48,10,52,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,82,102,114,97,107,116,117,114, 10,69,78,67,79,68,73,78,71,32,56,52,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,50,68,56,48,10,48,70,48,48,10,48,70,48,48,10, 48,68,56,48,10,48,68,56,48,10,50,68,56,48,10,55, 68,56,48,10,51,68,67,48,10,49,57,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,49,68,10,69,78,67,79, 68,73,78,71,32,56,52,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,69,48,48,10,68,66,48, 48,10,68,57,56,48,10,68,57,56,48,10,68,57,56,48, 10,68,57,56,48,10,68,66,48,48,10,68,69,48,48,10, 68,69,48,48,10,68,66,48,48,10,68,66,48,48,10,68, 57,56,48,10,68,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,112, 114,101,115,99,114,105,112,116,105,111,110,10,69,78,67,79, 68,73,78,71,32,56,52,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,69,48,48,10,54,51,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,55,69,48,48,10, 54,54,56,48,10,54,51,48,48,10,54,51,48,48,10,54, 53,56,48,10,54,57,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,49,70,10,69,78,67,79,68,73,78,71,32, 56,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,54,55,56,48,10,54,55,56,48,10,54,55,56,48, 10,54,70,48,48,10,55,69,48,48,10,54,69,48,48,10, 55,66,48,48,10,55,66,48,48,10,55,57,56,48,10,55, 49,56,48,10,51,48,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,50, 48,10,69,78,67,79,68,73,78,71,32,56,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,52,52,48,10,52,54, 67,48,10,50,53,52,48,10,49,52,52,48,10,54,52,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,50,49,10,69,78,67, 79,68,73,78,71,32,56,52,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,69,68,48,48,10,52,57,48,48,10,52,68, 48,48,10,52,57,48,48,10,52,68,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,114,97,100,101,109,97,114,107,10,69,78,67,79,68,73, 78,71,32,56,52,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,55,52,52,48,10,50,54,67,48,10,50,53,52,48,10, 50,52,52,48,10,50,52,52,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,51,10,69,78,67,79,68,73,78,71,32,56,52, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,55,48,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,54,48,48,10,54,55,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,51, 66,48,48,10,51,66,48,48,10,49,69,48,48,10,51,69, 48,48,10,51,69,48,48,10,51,67,48,48,10,54,67,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,50,52,10, 69,78,67,79,68,73,78,71,32,56,52,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,48,68,56,48,10,48,68,56,48,10,49,66,48,48,10, 49,66,48,48,10,49,66,48,48,10,51,54,48,48,10,51, 54,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,68,56,48,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,53,10,69,78,67,79,68, 73,78,71,32,56,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,70,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,54,48,48,10,49,70,56,48,10, 48,49,56,48,10,48,51,48,48,10,48,51,48,48,10,48, 54,48,48,10,49,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 101,103,97,10,69,78,67,79,68,73,78,71,32,56,52,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,51,51,48, 48,10,49,50,48,48,10,53,50,56,48,10,55,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,50,55,10,69, 78,67,79,68,73,78,71,32,56,52,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,51,56,48,10, 53,50,56,48,10,49,50,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,50,56,10,69,78,67,79,68,73, 78,71,32,56,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,69,48,48,10,55,70,48,48,10, 50,51,56,48,10,48,49,56,48,10,49,51,56,48,10,51, 70,48,48,10,55,69,48,48,10,50,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,51,70,56,48,10,55,70,48, 48,10,50,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,57,10,69,78,67,79,68,73,78,71,32,56,52, 56,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 66,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,50,65,10, 69,78,67,79,68,73,78,71,32,56,52,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,54,48,48,10,54,54,48,48,10,55,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,66,10,69,78,67,79,68, 73,78,71,32,56,52,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,67,48, 48,10,49,50,48,48,10,49,50,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,50,67,10,69,78,67,79,68,73,78,71,32,56, 52,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,56,56,48,10,52,56,56,48, 10,48,56,56,48,10,49,48,56,48,10,49,49,48,48,10, 49,69,48,48,10,49,49,48,48,10,50,49,48,48,10,50, 49,48,48,10,50,49,48,48,10,65,50,48,48,10,53,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,68, 10,69,78,67,79,68,73,78,71,32,56,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,66,56,48,10,55,54,48,48,10,54,54,48,48, 10,54,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,55,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,115,116,105,109,97,116,101,100,10,69,78, 67,79,68,73,78,71,32,56,52,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,69,51,56, 48,10,70,70,56,48,10,69,48,48,48,10,69,51,56,48, 10,54,51,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,70,10,69,78,67,79,68,73,78, 71,32,56,52,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 48,48,10,49,57,56,48,10,51,49,56,48,10,51,55,48, 48,10,55,67,48,48,10,54,48,48,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,51,48,10,69,78,67,79,68,73,78,71,32,56,52,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,48,48,10,49,57,56,48,10,51,49,56,48,10,51, 51,48,48,10,49,56,48,48,10,48,69,48,48,10,49,56, 48,48,10,51,48,48,48,10,54,55,48,48,10,54,68,56, 48,10,54,49,56,48,10,54,51,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,49,10,69, 78,67,79,68,73,78,71,32,56,52,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,67,48,10,67,54,48,48,10,54,67,48,48,10,48, 67,56,48,10,55,70,56,48,10,68,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,66,48,48, 48,10,66,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,51,50,10,69,78,67,79,68,73, 78,71,32,56,52,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,49,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,51,10,69,78,67,79,68,73,78,71,32,56,52, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,48,67,48,10,51,49,67,48,10,51,49,67,48,10, 51,66,67,48,10,51,66,67,48,10,51,70,67,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,67,48,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,51,52,10, 69,78,67,79,68,73,78,71,32,56,53,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,51,66,52,48,10,51, 55,56,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,51,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,108,101,112,104,10,69,78,67,79,68,73,78, 71,32,56,53,48,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,51,48,48,10,67,51,56,48,10,54,49, 56,48,10,51,50,48,48,10,55,67,48,48,10,56,67,48, 48,10,56,54,48,48,10,52,51,48,48,10,54,49,56,48, 10,69,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,51,54,10,69,78,67,79,68,73,78,71,32,56,53,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,56, 48,48,48,10,70,69,48,48,10,55,70,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,55,70,56,48,10,70,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,55,10,69, 78,67,79,68,73,78,71,32,56,53,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,48,48,48,10,51, 56,48,48,10,49,67,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,52,48,48,10,48,67,48, 48,10,51,69,48,48,10,55,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,51,56,10,69,78,67,79,68,73, 78,71,32,56,53,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,56,48,48,48,10,70,70,56,48,10,55, 70,56,48,10,48,49,48,48,10,48,49,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,57,10,69,78,67,79,68,73,78,71,32,56,53, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,51,65,10, 69,78,67,79,68,73,78,71,32,56,53,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,52,48,10,55,70,67,48,10,67, 51,56,48,10,56,54,56,48,10,56,52,56,48,10,67,49, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,51,66,10,69,78,67,79,68, 73,78,71,32,56,53,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,57,52,48,10,57,53,52,48, 10,57,53,52,48,10,57,53,52,48,10,57,52,56,48,10, 57,52,56,48,10,68,52,56,48,10,57,67,56,48,10,57, 52,56,48,10,57,53,52,48,10,57,53,52,48,10,57,53, 52,48,10,57,53,52,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,51,68,10,69,78,67,79,68,73,78,71,32,56, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,65,48,56,48,10, 65,48,56,48,10,65,48,56,48,10,53,49,48,48,10,53, 49,48,48,10,50,65,48,48,10,50,65,48,48,10,49,52, 48,48,10,49,52,48,48,10,50,56,48,48,10,50,56,48, 48,10,53,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,69, 10,69,78,67,79,68,73,78,71,32,56,53,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,53,50,56,48,10,53,50,56,48,10,53,48,48,48, 10,53,48,48,48,10,53,48,48,48,10,53,48,48,48,10, 53,48,48,48,10,53,48,48,48,10,53,48,48,48,10,53, 48,48,48,10,53,48,48,48,10,53,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,51,70,10,69,78,67,79, 68,73,78,71,32,56,53,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,53,50,56, 48,10,53,50,56,48,10,53,50,56,48,10,53,50,56,48, 10,53,50,56,48,10,53,50,56,48,10,53,50,56,48,10, 53,50,56,48,10,53,50,56,48,10,53,50,56,48,10,53, 50,56,48,10,53,50,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,52,48,10,69,78,67,79,68,73,78,71,32, 56,53,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,56,48,10,65,50,56,48,10,65,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,50,56,48,48, 10,50,56,48,48,10,50,56,48,48,10,53,48,48,48,10, 53,48,48,48,10,65,48,48,48,10,65,50,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,52, 49,10,69,78,67,79,68,73,78,71,32,56,53,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,55,57,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 54,49,56,48,10,51,51,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,50,10,69,78,67, 79,68,73,78,71,32,56,53,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,52,51,10,69,78,67,79,68,73,78,71, 32,56,53,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 52,52,10,69,78,67,79,68,73,78,71,32,56,53,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,52,53,10,69,78, 67,79,68,73,78,71,32,56,53,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,53, 51,48,48,10,53,50,56,48,10,53,50,56,48,10,53,50, 56,48,10,53,50,56,48,10,53,50,56,48,10,65,53,48, 48,10,65,53,48,48,10,65,53,48,48,10,65,53,48,48, 10,65,54,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,54,10,69,78,67,79,68,73,78, 71,32,56,53,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,56,48,10,48,50,56,48,10,48, 50,56,48,10,48,50,56,48,10,48,50,56,48,10,51,69, 56,48,10,53,50,56,48,10,65,53,48,48,10,65,53,48, 48,10,65,53,48,48,10,65,53,48,48,10,65,53,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,52,55,10,69,78,67,79,68,73,78,71,32,56,53,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,53,50, 56,48,10,53,50,56,48,10,65,53,48,48,10,66,70,48, 48,10,65,48,48,48,10,65,50,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,52,56,10,69, 78,67,79,68,73,78,71,32,56,53,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,48,65,48,48,10,48,65, 48,48,10,48,65,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,52,57,10,69,78,67,79,68,73, 78,71,32,56,53,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,65,48,48,10,48,65,48,48,10,48,65, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,50,56,48,48,10,50,56,48,48, 10,50,56,48,48,10,70,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,65,10,69,78,67,79,68,73,78,71,32,56,53, 50,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 70,70,48,48,10,68,57,56,48,10,68,57,56,48,10,68, 57,56,48,10,68,70,48,48,10,68,56,48,48,10,68,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,52,66,10, 69,78,67,79,68,73,78,71,32,56,53,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,55,56,48, 10,51,68,67,48,10,49,56,67,48,10,51,56,67,48,10, 54,67,67,48,10,48,54,67,48,10,48,51,56,48,10,48, 51,48,48,10,48,55,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,116,104,105,114,100,10,69,78,67,79, 68,73,78,71,32,56,53,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,48,48,48,10,54,48,48, 48,10,50,48,56,48,10,50,49,48,48,10,55,50,48,48, 10,48,52,48,48,10,48,66,48,48,10,49,48,56,48,10, 50,51,48,48,10,52,48,56,48,10,48,48,56,48,10,48, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 119,111,116,104,105,114,100,115,10,69,78,67,79,68,73,78, 71,32,56,53,51,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,48,48,48,10,53,48,48,48,10,49, 48,56,48,10,50,49,48,48,10,52,50,48,48,10,55,52, 48,48,10,48,66,48,48,10,49,48,56,48,10,50,51,48, 48,10,52,48,56,48,10,48,48,56,48,10,48,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,53,10,69,78,67,79,68,73,78,71,32,56,53,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,54,48,48,48,10,50,48,56,48,10,50, 49,48,48,10,55,50,48,48,10,48,52,48,48,10,48,66, 56,48,10,49,50,48,48,10,50,51,48,48,10,52,48,56, 48,10,48,48,56,48,10,48,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,53,54,10,69, 78,67,79,68,73,78,71,32,56,53,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 53,48,48,48,10,49,48,56,48,10,50,49,48,48,10,52, 50,48,48,10,55,52,48,48,10,48,66,56,48,10,49,50, 48,48,10,50,51,48,48,10,52,48,56,48,10,48,48,56, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,53,55,10,69,78,67,79,68,73, 78,71,32,56,53,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,52,56,48,48,10, 49,48,56,48,10,48,57,48,48,10,52,65,48,48,10,51, 52,48,48,10,48,66,56,48,10,49,50,48,48,10,50,51, 48,48,10,52,48,56,48,10,48,48,56,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,53,56,10,69,78,67,79,68,73,78,71,32,56,53, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,48,48,48,10,51,48,48,48,10,53,48,56,48,10, 55,57,48,48,10,49,50,48,48,10,49,52,48,48,10,48, 66,56,48,10,49,50,48,48,10,50,51,48,48,10,52,48, 56,48,10,48,48,56,48,10,48,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,57,10, 69,78,67,79,68,73,78,71,32,56,53,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,48,48,48, 10,54,48,48,48,10,50,48,56,48,10,50,49,48,48,10, 55,50,48,48,10,48,52,48,48,10,48,66,48,48,10,49, 52,48,48,10,50,55,48,48,10,52,52,56,48,10,48,52, 56,48,10,48,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,53,65,10,69,78,67,79,68, 73,78,71,32,56,53,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,56,48,48,10,52,48,48,48, 10,55,48,56,48,10,48,57,48,48,10,52,65,48,48,10, 51,52,48,48,10,48,66,48,48,10,49,52,48,48,10,50, 55,48,48,10,52,52,56,48,10,48,52,56,48,10,48,51, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,111,110, 101,101,105,103,104,116,104,10,69,78,67,79,68,73,78,71, 32,56,53,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,48,48,48,10,54,48,48,48,10,50,48, 56,48,10,50,49,48,48,10,55,50,48,48,10,48,52,48, 48,10,48,66,48,48,10,49,52,56,48,10,50,51,48,48, 10,52,52,56,48,10,48,52,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,116,104,114,101,101, 101,105,103,104,116,104,115,10,69,78,67,79,68,73,78,71, 32,56,53,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,56,48,48,10,49,48, 56,48,10,48,57,48,48,10,52,65,48,48,10,51,52,48, 48,10,48,66,48,48,10,49,52,56,48,10,50,51,48,48, 10,52,52,56,48,10,48,52,56,48,10,48,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,118,101,101, 105,103,104,116,104,115,10,69,78,67,79,68,73,78,71,32, 56,53,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,52,48,48,48,10,55,48,56, 48,10,48,57,48,48,10,52,65,48,48,10,51,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,51,48,48,10, 52,52,56,48,10,48,52,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,115,101,118,101,110,101, 105,103,104,116,104,115,10,69,78,67,79,68,73,78,71,32, 56,53,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,56,48,48,10,48,56,48,48,10,49,48,56, 48,10,50,49,48,48,10,50,50,48,48,10,50,52,48,48, 10,48,66,48,48,10,49,52,56,48,10,50,51,48,48,10, 52,52,56,48,10,48,52,56,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,53, 70,10,69,78,67,79,68,73,78,71,32,56,53,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,48, 48,48,10,54,48,48,48,10,50,48,56,48,10,50,49,48, 48,10,55,50,48,48,10,48,52,48,48,10,48,56,48,48, 10,49,48,48,48,10,50,48,48,48,10,52,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,54,48,10,69,78,67, 79,68,73,78,71,32,56,53,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,49,10,69,78,67,79,68,73,78,71, 32,56,53,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 54,50,10,69,78,67,79,68,73,78,71,32,56,53,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,54,51,10,69,78, 67,79,68,73,78,71,32,56,53,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,67,67,48,10,54, 67,67,48,10,54,67,67,48,10,54,67,67,48,10,54,67, 67,48,10,54,55,56,48,10,54,55,56,48,10,54,55,56, 48,10,54,55,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,70,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,54,52,10,69,78,67,79,68,73,78, 71,32,56,53,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,53,10,69,78,67,79,68,73,78,71,32,56,53,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,70,67,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,55,57,56,48,10,55,57, 56,48,10,55,57,56,48,10,55,57,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,51,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,54,54,10,69, 78,67,79,68,73,78,71,32,56,53,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,68,70,67,48,10, 68,69,67,48,10,68,69,67,48,10,68,69,67,48,10,68, 69,67,48,10,68,69,67,48,10,55,54,67,48,10,55,54, 67,48,10,55,54,67,48,10,55,54,67,48,10,55,54,67, 48,10,50,54,67,48,10,50,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,54,55,10,69,78,67,79,68,73, 78,71,32,56,53,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,56,70,67,48,10,56,68,52,48,10, 56,68,52,48,10,56,68,52,48,10,53,53,52,48,10,53, 53,52,48,10,53,53,52,48,10,53,53,52,48,10,53,53, 52,48,10,50,53,52,48,10,50,53,52,48,10,50,53,52, 48,10,50,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,54,56,10,69,78,67,79,68,73,78,71,32,56,53, 53,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,55,48,48,10,54,55,48,48,10,54, 55,48,48,10,54,55,48,48,10,54,55,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,70,68,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,57,10, 69,78,67,79,68,73,78,71,32,56,53,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,49, 69,48,48,10,49,69,48,48,10,51,51,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,54,65,10,69,78,67,79,68, 73,78,71,32,56,53,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,68,70,56,48,10,68,66,48,48, 10,68,66,48,48,10,68,66,48,48,10,55,51,48,48,10, 55,51,48,48,10,55,51,48,48,10,55,51,48,48,10,55, 51,48,48,10,68,66,48,48,10,68,66,48,48,10,68,66, 48,48,10,68,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,54,66,10,69,78,67,79,68,73,78,71,32,56, 53,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,68,70,67,48,10,68,69,67,48,10,68,69,67,48, 10,68,69,67,48,10,55,54,67,48,10,55,54,67,48,10, 55,54,67,48,10,55,54,67,48,10,55,54,67,48,10,68, 69,67,48,10,68,69,67,48,10,68,69,67,48,10,68,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,54,67, 10,69,78,67,79,68,73,78,71,32,56,53,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,68,10,69,78,67,79, 68,73,78,71,32,56,53,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,51,48, 48,10,54,49,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,54,69,10,69,78,67,79,68,73,78,71,32, 56,53,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,69,48,48,10,54,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,51,48,48,10,55, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,54, 70,10,69,78,67,79,68,73,78,71,32,56,53,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,70,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,55,48,10,69,78,67, 79,68,73,78,71,32,56,53,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,49,10,69,78,67,79,68,73,78,71, 32,56,53,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 55,50,10,69,78,67,79,68,73,78,71,32,56,53,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,68,56,48,10,54,68, 56,48,10,48,48,48,48,10,70,70,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,55,51,10,69,78, 67,79,68,73,78,71,32,56,53,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,69,67,67,48,10,54,67,67,48,10,54,67,67, 48,10,54,55,56,48,10,54,55,56,48,10,54,51,48,48, 10,54,51,48,48,10,70,51,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,55,52,10,69,78,67,79,68,73,78, 71,32,56,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,51,51,48,48,10,51,51,48, 48,10,49,69,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,53,10,69,78,67,79,68,73,78,71,32,56,53,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,67,70,56,48,10,67,68, 56,48,10,67,68,56,48,10,55,57,56,48,10,55,57,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,51,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,55,54,10,69, 78,67,79,68,73,78,71,32,56,53,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,67,48,10,48,54,67,48,10,48, 48,48,48,10,68,70,67,48,10,68,69,67,48,10,68,69, 67,48,10,55,54,67,48,10,55,54,67,48,10,55,54,67, 48,10,50,54,67,48,10,50,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,55,55,10,69,78,67,79,68,73, 78,71,32,56,53,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,65,56,48,10,48,48,48,48,10,66, 70,56,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,52,65,56,48,10,52,65,56,48,10,52,65,56, 48,10,53,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,55,56,10,69,78,67,79,68,73,78,71,32,56,53, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,48,48,48,48,10,70,57,56,48,10,55, 57,56,48,10,54,70,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,70,48,48,10,55,57,56,48,10,70,57,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,57,10, 69,78,67,79,68,73,78,71,32,56,53,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,51,51,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,51,48,48,10,54,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,55,65,10,69,78,67,79,68, 73,78,71,32,56,53,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,48,48,48,10, 67,70,48,48,10,67,70,48,48,10,55,66,48,48,10,51, 51,48,48,10,51,51,48,48,10,55,66,48,48,10,67,70, 48,48,10,67,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,55,66,10,69,78,67,79,68,73,78,71,32,56, 53,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,67,48, 10,48,54,67,48,10,48,48,48,48,10,68,70,67,48,10, 68,69,67,48,10,68,69,67,48,10,55,54,67,48,10,55, 54,67,48,10,68,69,67,48,10,68,69,67,48,10,68,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,55,67, 10,69,78,67,79,68,73,78,71,32,56,53,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,68,10,69,78,67,79, 68,73,78,71,32,56,53,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,48,48,10,51,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,51, 49,56,48,10,49,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,55,69,10,69,78,67,79,68,73,78,71,32, 56,53,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,49,68,56,48, 10,51,51,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,51,51,56,48,10,49, 68,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,55, 70,10,69,78,67,79,68,73,78,71,32,56,53,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,53,66,48,48,10,55,70,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,56,48,10,69,78,67, 79,68,73,78,71,32,56,53,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,67,67, 67,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,67,67,67,48,10,67,67,67,48,10,67,67,67,48,10, 67,67,67,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,56,49,10,69,78,67,79,68,73,78,71, 32,56,53,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,69,48,48,10,54,51,48,48,10,54,49, 56,48,10,55,57,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,55,57,56,48,10,54,49,56,48,10,54,51,48,48,10, 70,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 56,50,10,69,78,67,79,68,73,78,71,32,56,53,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,54,66,48,48,10,67,57,56,48,10,67,57, 56,48,10,68,68,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,53,56,48,10,68,68,56,48,10,67,57,56,48, 10,67,57,56,48,10,54,66,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,56,51,10,69,78, 67,79,68,73,78,71,32,56,53,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,54,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,54,49,56,48, 10,51,51,48,48,10,49,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,114,114,111,119,108,101,102,116,10,69,78,67,79,68, 73,78,71,32,56,53,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,70,70,56,48,10,70,70,56,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,117,112,10,69,78,67,79,68,73,78,71,32,56, 53,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,70,48,48, 10,54,68,56,48,10,52,67,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,114,111,119,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,53,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,54,48,48,10,48,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,111,119,110, 10,69,78,67,79,68,73,78,71,32,56,53,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,56,48,10,54,68,56,48,10,51, 70,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,98,111,116,104,10,69,78, 67,79,68,73,78,71,32,56,53,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,50,48,48,10,51,51, 48,48,10,54,49,56,48,10,70,70,67,48,10,70,70,67, 48,10,54,49,56,48,10,51,51,48,48,10,49,50,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,114,114,111,119,117,112,100,110,10,69,78,67,79,68, 73,78,71,32,56,53,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,52, 67,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,57,54,10,69,78,67,79,68,73,78,71,32,56, 53,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,67,48,48, 10,70,69,48,48,10,70,48,48,48,10,70,56,48,48,10, 68,67,48,48,10,67,69,48,48,10,52,55,48,48,10,48, 51,56,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,57,55, 10,69,78,67,79,68,73,78,71,32,56,53,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,51,70,56,48, 10,48,55,56,48,10,48,70,56,48,10,49,68,56,48,10, 51,57,56,48,10,55,49,48,48,10,69,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,57,56,10,69,78,67,79, 68,73,78,71,32,56,54,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,67,48,48,48,10,69,48,48,48,10,55,49,48,48, 10,51,57,56,48,10,49,68,56,48,10,48,70,56,48,10, 48,55,56,48,10,51,70,56,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,57,10,69,78,67,79,68,73,78,71,32, 56,54,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,51,56,48,10,52,55,48,48,10,67,69,48,48, 10,68,67,48,48,10,70,56,48,48,10,70,48,48,48,10, 70,69,48,48,10,70,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,57, 65,10,69,78,67,79,68,73,78,71,32,56,54,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,51,48,48,10,49,66,48, 48,10,51,51,48,48,10,54,51,48,48,10,70,70,67,48, 10,70,70,67,48,10,54,51,48,48,10,51,51,48,48,10, 49,66,48,48,10,48,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,57,66,10,69,78,67, 79,68,73,78,71,32,56,54,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,54,48,48,10,51,51,48, 48,10,51,49,56,48,10,70,70,67,48,10,70,70,67,48, 10,51,49,56,48,10,51,51,48,48,10,51,54,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,57,67,10,69,78,67,79,68,73,78,71, 32,56,54,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,54,48, 48,10,70,70,56,48,10,70,57,56,48,10,54,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,68,10,69,78,67,79,68,73,78,71,32,56,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,54,48,48,10,51,51,48,48,10,70,70,56, 48,10,67,70,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,57,69,10,69,78, 67,79,68,73,78,71,32,56,54,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,54,67,48,48,10,70,70,56,48,10,70,70,56, 48,10,54,67,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,57,70,10,69,78,67,79,68,73,78, 71,32,56,54,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,54,68,56,48,10,52,67,56,48,10,49,69, 48,48,10,51,70,48,48,10,54,68,56,48,10,52,67,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,48,10,69,78,67,79,68,73,78,71,32,56,54,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,54,48,48,10,49,66,48,48,10,70,70, 56,48,10,70,70,56,48,10,49,66,48,48,10,51,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,49,10,69, 78,67,79,68,73,78,71,32,56,54,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,52, 67,56,48,10,54,68,56,48,10,51,70,48,48,10,49,69, 48,48,10,52,67,56,48,10,54,68,56,48,10,51,70,48, 48,10,49,69,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,65,50,10,69,78,67,79,68,73, 78,71,32,56,54,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,57,56,48,10,51,51,48,48,10,54, 54,48,48,10,70,67,48,48,10,70,67,48,48,10,54,54, 48,48,10,51,51,48,48,10,49,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,65,51,10,69,78,67,79,68,73,78,71,32,56,54, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,67,48,48,10,54,54,48,48,10,51,51,48,48,10,49, 70,56,48,10,49,70,56,48,10,51,51,48,48,10,54,54, 48,48,10,67,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,52,10, 69,78,67,79,68,73,78,71,32,56,54,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,57,56,48,10, 51,49,56,48,10,54,49,56,48,10,70,70,56,48,10,70, 70,56,48,10,54,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,53,10,69,78,67,79,68, 73,78,71,32,56,54,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,54,68,56,48,10,52,67,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,65,54,10,69,78,67,79,68,73,78,71,32,56, 54,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,67,48,48,10,67,54,48,48,10,67,51,48,48,10, 70,70,56,48,10,70,70,56,48,10,67,51,48,48,10,67, 54,48,48,10,67,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,65,55, 10,69,78,67,79,68,73,78,71,32,56,54,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,56,48,10,54,68,56,48,10,51, 70,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,117,112,100,110,98,115,101, 10,69,78,67,79,68,73,78,71,32,56,54,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,69,48,48,10,51,70,48,48,10,54,68,56,48, 10,52,67,56,48,10,48,67,48,48,10,52,67,56,48,10, 54,68,56,48,10,51,70,48,48,10,49,69,48,48,10,48, 67,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,65,57,10,69,78,67,79, 68,73,78,71,32,56,54,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,66,48,48,10,51,51,56,48, 10,54,49,56,48,10,70,70,56,48,10,70,70,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,65,10,69,78,67,79,68,73,78,71,32, 56,54,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,69,54,48,48,10,67,51,48,48, 10,70,70,56,48,10,55,70,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,65, 66,10,69,78,67,79,68,73,78,71,32,56,54,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,57,48, 48,10,51,51,56,48,10,54,50,56,48,10,70,70,56,48, 10,70,70,48,48,10,54,50,48,48,10,51,50,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,65,67,10,69,78,67, 79,68,73,78,71,32,56,54,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,67,48,48,10,69,54,48, 48,10,65,51,48,48,10,70,70,56,48,10,55,70,56,48, 10,50,51,48,48,10,50,54,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,68,10,69,78,67,79,68,73,78,71, 32,56,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,50,48,48,10,51,51,48,48,10,54,68,56, 48,10,70,70,67,48,10,70,51,67,48,10,54,49,56,48, 10,51,51,48,48,10,49,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,69,10,69,78,67,79,68,73,78,71,32,56,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,51,55,48,48,10,54,53,56,48,10,70,70,67, 48,10,70,70,67,48,10,54,57,56,48,10,51,66,48,48, 10,49,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,65,70,10,69,78, 67,79,68,73,78,71,32,56,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,49,67,48,10,48,51,56,48,10,48,55,48,48,10,48, 69,48,48,10,49,67,48,48,10,51,70,67,48,10,55,70, 67,48,10,48,51,56,48,10,48,55,48,48,10,67,69,48, 48,10,68,67,48,48,10,70,56,48,48,10,70,48,48,48, 10,70,67,48,48,10,70,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,66,48,10,69,78,67,79,68,73,78, 71,32,56,54,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,51,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,51,49,56,48,10,49,57, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,49,10,69,78,67,79,68,73,78,71,32,56,54,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,54,48,48,10,48,51,48,48,10,55,70,56,48,10,55, 70,56,48,10,54,51,48,48,10,54,54,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,50,10,69, 78,67,79,68,73,78,71,32,56,54,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,49,57, 56,48,10,51,49,56,48,10,55,70,56,48,10,55,70,56, 48,10,51,48,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,66,51,10,69,78,67,79,68,73, 78,71,32,56,54,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,54,48,48,10,54,51, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,51,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,66,52,10,69,78,67,79,68,73,78,71,32,56,54, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,55,69,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,49,54, 56,48,10,49,70,56,48,10,48,70,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,97,114,114,105,97,103,101, 114,101,116,117,114,110,10,69,78,67,79,68,73,78,71,32, 56,54,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,49,57,56,48,10,51,49,56,48,10, 55,70,56,48,10,55,70,56,48,10,51,48,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,66, 54,10,69,78,67,79,68,73,78,71,32,56,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,70,48,48, 10,51,66,56,48,10,51,49,56,48,10,66,53,56,48,10, 70,68,56,48,10,55,57,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,66,55,10,69,78,67, 79,68,73,78,71,32,56,54,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,56,48,48,10,55,67,48,48,10,69,69,48,48, 10,67,54,48,48,10,68,54,56,48,10,68,70,56,48,10, 67,70,48,48,10,67,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,66,56,10,69,78,67,79,68,73,78,71, 32,56,54,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,70,70,56,48,10,50,48, 48,48,10,55,67,48,48,10,55,70,48,48,10,55,65,48, 48,10,68,56,48,48,10,67,67,48,48,10,56,67,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,57,10,69,78,67,79,68,73,78,71,32,56,54,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 67,48,48,10,68,56,48,48,10,70,70,56,48,10,70,70, 56,48,10,68,56,48,48,10,67,67,48,48,10,48,48,48, 48,10,49,57,56,48,10,48,68,56,48,10,70,70,56,48, 10,70,70,56,48,10,48,68,56,48,10,49,57,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,66,65,10,69,78, 67,79,68,73,78,71,32,56,54,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 70,48,48,10,49,70,48,48,10,49,69,48,48,10,49,70, 48,48,10,68,66,56,48,10,67,49,56,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,66,66,10,69,78,67,79,68,73,78, 71,32,56,54,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,55, 67,48,48,10,51,67,48,48,10,55,67,48,48,10,69,68, 56,48,10,67,49,56,48,10,67,49,56,48,10,69,51,56, 48,10,55,70,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,67,10,69,78,67,79,68,73,78,71,32,56,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,54,48,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,68,10,69, 78,67,79,68,73,78,71,32,56,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,70,70, 56,48,10,54,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,66,69,10,69,78,67,79,68,73, 78,71,32,56,54,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,70,48,48,10,48,68,56,48,10,48,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,66,70,10,69,78,67,79,68,73,78,71,32,56,54, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,67,48,48,10,51,67,48,48,10, 54,67,48,48,10,52,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,67,48,10, 69,78,67,79,68,73,78,71,32,56,54,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,49,10,69,78,67,79,68, 73,78,71,32,56,54,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,67,50,10,69,78,67,79,68,73,78,71,32,56, 54,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,69,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,67,51, 10,69,78,67,79,68,73,78,71,32,56,54,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,52,67,48,48,10,54,67,48,48,10,51, 67,48,48,10,49,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,67,52,10,69,78,67,79, 68,73,78,71,32,56,54,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,51,48,48,10,51,54,48,48,10,54,48,48,48,10, 70,70,56,48,10,70,70,56,48,10,54,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,53,10,69,78,67,79,68,73,78,71,32, 56,54,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,51,48,48,10,55,66,48,48,10,70,70,48, 48,10,66,55,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,66,52,48,10,51,70,67,48,10,51,55,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,67, 54,10,69,78,67,79,68,73,78,71,32,56,54,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,54,48,48,48,10,70,70,56, 48,10,70,70,56,48,10,54,48,48,48,10,51,54,48,48, 10,48,51,48,48,10,70,70,56,48,10,70,70,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,67,55,10,69,78,67, 79,68,73,78,71,32,56,54,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,54,48,48,48,10,70,70,56,48,10,70,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,54,48,48,48, 10,70,70,56,48,10,70,70,56,48,10,54,48,48,48,10, 51,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,67,56,10,69,78,67,79,68,73,78,71, 32,56,54,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,50,48,48,10,55,55,48,48,10,65,65, 56,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,50,50,48,48, 10,50,50,48,48,10,50,50,48,48,10,50,50,48,48,10, 50,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,57,10,69,78,67,79,68,73,78,71,32,56,54,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,48,51,48,48,10,48,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,51,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,67,65,10,69,78, 67,79,68,73,78,71,32,56,54,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,50,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,65,65,56,48, 10,55,55,48,48,10,50,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,67,66,10,69,78,67,79,68,73,78, 71,32,56,54,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,51,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,67,67,10,69,78,67,79,68,73,78,71,32,56,54,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 51,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,51,48,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,68,10,69, 78,67,79,68,73,78,71,32,56,54,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,48,48,10,49,49,48,48,10,51,70,56,48,10,52,50, 48,48,10,51,70,56,48,10,49,52,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,67,69,10,69,78,67,79,68,73, 78,71,32,56,54,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,52,48,48,10,50, 53,48,48,10,55,70,56,48,10,56,67,52,48,10,55,70, 56,48,10,50,57,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,67,70,10,69,78,67,79,68,73,78,71,32,56,54, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,65,48,48,10,55, 70,48,48,10,49,48,56,48,10,55,70,48,48,10,50,50, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,114,114,111,119,100,98,108, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,70,56,48,10,55,70,56,48,10,67, 48,48,48,10,55,70,56,48,10,51,70,56,48,10,49,56, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,114,114,111,119,100,98,108, 117,112,10,69,78,67,79,68,73,78,71,32,56,54,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,51,54,48,48,10,55,55, 48,48,10,70,55,56,48,10,66,54,56,48,10,51,54,48, 48,10,51,54,48,48,10,51,54,48,48,10,51,54,48,48, 10,51,54,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,114,114,111,119,100,98,108,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,54,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,48, 67,48,48,10,70,69,48,48,10,70,70,48,48,10,48,49, 56,48,10,70,70,48,48,10,70,69,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,98,108,100, 111,119,110,10,69,78,67,79,68,73,78,71,32,56,54,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,51,54,48,48,10,51, 54,48,48,10,51,54,48,48,10,51,54,48,48,10,51,54, 48,48,10,66,54,56,48,10,70,55,56,48,10,55,55,48, 48,10,51,54,48,48,10,49,67,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,114,114,111,119,100,98,108,98, 111,116,104,10,69,78,67,79,68,73,78,71,32,56,54,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,50,48,48,10,51, 51,48,48,10,55,70,56,48,10,70,70,67,48,10,56,48, 67,48,10,70,70,67,48,10,55,70,56,48,10,51,51,48, 48,10,49,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,53,10,69, 78,67,79,68,73,78,71,32,56,54,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,51,54,48,48,10,55,55,48,48,10,70, 55,56,48,10,66,54,56,48,10,51,54,48,48,10,66,54, 56,48,10,70,55,56,48,10,55,55,48,48,10,51,54,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,68,54,10,69,78,67,79,68,73, 78,71,32,56,54,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,69,48,48,10,70,69,48,48,10,67,67,48,48,10,67, 54,48,48,10,69,51,48,48,10,70,49,56,48,10,68,56, 56,48,10,48,67,48,48,10,48,54,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,68,55,10,69,78,67,79,68,73,78,71,32,56,54, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,56,48,10, 51,70,56,48,10,49,57,56,48,10,51,49,56,48,10,54, 51,56,48,10,67,55,56,48,10,56,68,56,48,10,49,56, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,68,56,10, 69,78,67,79,68,73,78,71,32,56,54,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,49,56,48,48,10, 56,68,56,48,10,67,55,56,48,10,54,51,56,48,10,51, 49,56,48,10,49,57,56,48,10,51,70,56,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,57,10,69,78,67,79,68, 73,78,71,32,56,54,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,67,48,48,10,68,56,56,48,10, 70,49,56,48,10,69,51,48,48,10,67,54,48,48,10,67, 67,48,48,10,70,69,48,48,10,70,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,68,65,10,69,78,67,79,68,73,78,71,32,56, 54,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,56,48,48, 10,49,48,48,48,10,51,70,56,48,10,52,48,48,48,10, 70,70,56,48,10,52,48,48,48,10,51,70,56,48,10,49, 48,48,48,10,48,56,48,48,10,48,52,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,68,66, 10,69,78,67,79,68,73,78,71,32,56,54,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,48,56,48,48,10,48,52,48,48, 10,70,69,48,48,10,48,49,48,48,10,70,70,56,48,10, 48,49,48,48,10,70,69,48,48,10,48,52,48,48,10,48, 56,48,48,10,49,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,68,67,10,69,78,67,79, 68,73,78,71,32,56,54,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,48,48,48,10,52,50,48,48,10,70,53,56,48,10, 52,56,48,48,10,50,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,68,10,69,78,67,79,68,73,78,71,32, 56,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,50,48,48, 10,50,49,48,48,10,68,55,56,48,10,48,57,48,48,10, 48,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,68, 69,10,69,78,67,79,68,73,78,71,32,56,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,70,48,48,10,54,68,56, 48,10,52,67,56,48,10,48,67,48,48,10,51,70,48,48, 10,51,70,48,48,10,48,67,48,48,10,51,70,48,48,10, 51,70,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,68,70,10,69,78,67, 79,68,73,78,71,32,56,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,51,70,48,48,10,51,70,48,48,10,48,67,48, 48,10,51,70,48,48,10,51,70,48,48,10,48,67,48,48, 10,52,67,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,69,48,10,69,78,67,79,68,73,78,71, 32,56,54,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,48,48,48,10,54,48,48, 48,10,69,68,56,48,10,69,68,56,48,10,54,48,48,48, 10,51,48,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,49,10,69,78,67,79,68,73,78,71,32,56,54,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,70,48,48,10,54,68, 56,48,10,52,48,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,69,50,10,69,78, 67,79,68,73,78,71,32,56,54,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,68,66,56,48,10,68,66,56, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,69,51,10,69,78,67,79,68,73,78, 71,32,56,54,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,52,48,56, 48,10,54,68,56,48,10,51,70,48,48,10,49,69,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,69,52,10,69,78,67,79,68,73,78,71,32,56,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 54,48,48,10,67,67,48,48,10,68,56,48,48,10,70,70, 56,48,10,70,70,56,48,10,68,56,48,48,10,67,67,48, 48,10,67,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,53,10,69, 78,67,79,68,73,78,71,32,56,54,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,49,56,48,10,49, 57,56,48,10,48,68,56,48,10,70,70,56,48,10,70,70, 56,48,10,48,68,56,48,10,49,57,56,48,10,51,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,69,54,10,69,78,67,79,68,73, 78,71,32,56,54,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,50,56,48,48,10,52, 70,56,48,10,56,48,56,48,10,56,48,56,48,10,52,70, 56,48,10,50,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,69,55,10,69,78,67,79,68,73,78,71,32,56,54, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,50,48,48,10,50,49,48,48,10, 52,48,56,48,10,55,51,56,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,69,56,10, 69,78,67,79,68,73,78,71,32,56,54,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,65,48,48,10,70,57,48,48,10,56,48,56,48,10,56, 48,56,48,10,70,57,48,48,10,48,65,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,57,10,69,78,67,79,68, 73,78,71,32,56,54,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,55, 51,56,48,10,52,48,56,48,10,50,49,48,48,10,49,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,69,65,10,69,78,67,79,68,73,78,71,32,56, 54,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,50,49,48,48, 10,52,48,56,48,10,55,51,56,48,10,49,50,48,48,10, 49,50,48,48,10,49,69,48,48,10,48,48,48,48,10,49, 69,48,48,10,49,50,48,48,10,49,50,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,69,66, 10,69,78,67,79,68,73,78,71,32,56,54,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,49,50,48,48,10,50,49,48,48,10,52,48,56,48, 10,55,51,56,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,55, 51,56,48,10,52,48,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,69,67,10,69,78,67,79, 68,73,78,71,32,56,54,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,50,48, 48,10,51,70,48,48,10,52,48,56,48,10,55,51,56,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,55,51,56,48,10,52, 48,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,68,10,69,78,67,79,68,73,78,71,32, 56,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,49,67,48,48,10,50,65,48,48,10,52,57,48, 48,10,56,56,56,48,10,69,66,56,48,10,50,65,48,48, 10,50,65,48,48,10,50,65,48,48,10,50,65,48,48,10, 50,65,48,48,10,69,66,56,48,10,56,56,56,48,10,70, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,69, 69,10,69,78,67,79,68,73,78,71,32,56,54,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,50,68,48,48,10,55,51,56, 48,10,50,49,48,48,10,55,51,56,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,69,70,10,69,78,67, 79,68,73,78,71,32,56,54,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,50,68,48,48,10,55,51,56,48,10,50,49,48, 48,10,55,51,56,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,55,51,56,48,10, 52,48,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,70,48,10,69,78,67,79,68,73,78,71, 32,56,54,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,67,48,48,10,65,65,48,48,10,66,57,48, 48,10,56,48,56,48,10,56,48,56,48,10,66,57,48,48, 10,65,65,48,48,10,69,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,49,10,69,78,67,79,68,73,78,71,32,56,54,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,52,48,48,48,10,53,69,48,48,10,53,52,48, 48,10,53,67,48,48,10,53,50,48,48,10,52,49,48,48, 10,52,48,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,70,50,10,69,78, 67,79,68,73,78,71,32,56,54,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,50,48, 56,48,10,49,50,56,48,10,48,69,56,48,10,48,65,56, 48,10,49,69,56,48,10,48,48,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,70,51,10,69,78,67,79,68,73,78, 71,32,56,54,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,50, 49,48,48,10,55,51,56,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,55,51,56,48,10,50,49,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,70,52,10,69,78,67,79,68,73,78,71,32,56,54,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,54,48,48,10,53,51,48,48,10,70,70, 56,48,10,70,70,56,48,10,53,51,48,48,10,50,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,53,10,69, 78,67,79,68,73,78,71,32,56,54,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,51,48,48,10, 51,55,56,48,10,51,70,67,48,10,51,66,52,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,66,55,48,48,10,70,70,48, 48,10,55,66,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,70,54,10,69,78,67,79,68,73, 78,71,32,56,54,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,51,48,48,10,70,70,56,48,10, 70,70,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 51,48,48,10,70,70,56,48,10,70,70,56,48,10,48,51, 48,48,10,48,54,48,48,10,48,51,48,48,10,70,70,56, 48,10,70,70,56,48,10,48,51,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,70,55,10,69,78,67,79,68,73,78,71,32,56,54, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,54,48,48,10,51,54,48,48,10,54,54,48,48,10,70, 70,56,48,10,70,70,56,48,10,54,54,48,48,10,51,54, 48,48,10,49,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,70,56,10, 69,78,67,79,68,73,78,71,32,56,54,57,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,52,48,48,10, 51,54,48,48,10,51,51,48,48,10,70,70,56,48,10,70, 70,56,48,10,51,51,48,48,10,51,54,48,48,10,51,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,57,10,69,78,67,79,68, 73,78,71,32,56,54,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,68,48,48,10, 54,68,56,48,10,70,70,67,48,10,70,70,67,48,10,54, 68,56,48,10,50,68,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,70,65,10,69,78,67,79,68,73,78,71,32,56, 54,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,50,65,48,48,10,54,65,48,48,10, 70,70,56,48,10,70,70,56,48,10,54,65,48,48,10,50, 65,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,70,66, 10,69,78,67,79,68,73,78,71,32,56,54,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,65,48,48,10,50,66,48,48,10,70,70,56,48,10, 70,70,56,48,10,50,66,48,48,10,50,65,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,70,67,10,69,78,67,79, 68,73,78,71,32,56,55,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,53,53,48,48, 10,68,53,56,48,10,70,70,56,48,10,70,70,56,48,10, 68,53,56,48,10,53,53,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,68,10,69,78,67,79,68,73,78,71,32, 56,55,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,51,48,48,48,10,55,48,48,48, 10,68,70,56,48,10,68,70,56,48,10,55,48,48,48,10, 51,48,48,48,10,49,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,70, 69,10,69,78,67,79,68,73,78,71,32,56,55,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,52,48, 48,10,48,54,48,48,10,48,55,48,48,10,70,68,56,48, 10,70,68,56,48,10,48,55,48,48,10,48,54,48,48,10, 48,52,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,70,70,10,69,78,67, 79,68,73,78,71,32,56,55,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,50,48,48,10,51,51,48, 48,10,55,51,56,48,10,68,69,67,48,10,68,69,67,48, 10,55,51,56,48,10,51,51,48,48,10,49,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,118,101,114,115,97,108,10,69,78,67,79,68,73, 78,71,32,56,55,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,49,10,69,78,67,79,68,73,78,71,32,56,55, 48,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,97,114,116,105,97,108,100, 105,102,102,10,69,78,67,79,68,73,78,71,32,56,55,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,51,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,70,56,48,10,49,57, 56,48,10,51,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,54,54,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,105,115,116,101,110,116,105, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,48,52,10,69,78, 67,79,68,73,78,71,32,56,55,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,49,57, 56,48,10,49,57,56,48,10,55,70,56,48,10,49,57,56, 48,10,49,57,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,55,70,56,48,10,51,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,101,109,112,116,121,115,101,116,10,69,78,67,79,68,73, 78,71,32,56,55,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,68,56,48,10,49,70,48,48,10, 51,51,48,48,10,51,55,48,48,10,54,55,56,48,10,54, 68,56,48,10,54,68,56,48,10,55,57,56,48,10,55,57, 56,48,10,51,51,48,48,10,51,51,48,48,10,51,69,48, 48,10,54,67,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,68,101,108, 116,97,10,69,78,67,79,68,73,78,71,32,56,55,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,114,97,100,105,101,110,116,10,69, 78,67,79,68,73,78,71,32,56,55,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,101,108,101,109,101,110,116,10,69,78,67,79,68,73, 78,71,32,56,55,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,70,56,48,10,51, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,54,48,48,48,10,54,48,48,48,10,51,48,48, 48,10,49,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,110,111,116, 101,108,101,109,101,110,116,10,69,78,67,79,68,73,78,71, 32,56,55,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,48,48,10,49,70,56,48,10,51,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,55,70,56,48, 10,54,67,48,48,10,54,67,48,48,10,51,56,48,48,10, 49,70,56,48,10,49,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 48,65,10,69,78,67,79,68,73,78,71,32,56,55,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,70,48,48, 10,51,48,48,48,10,51,48,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,117,99,104,116,104,97,116,10,69, 78,67,79,68,73,78,71,32,56,55,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,48,51,48,48,10,48,49,56,48,10,48,49, 56,48,10,55,70,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,51,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,48,67,10,69,78,67,79,68,73, 78,71,32,56,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,55,69,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,55,70, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,66,48, 48,10,55,69,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,68,10,69,78,67,79,68,73,78,71,32,56,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,48,69,10, 69,78,67,79,68,73,78,71,32,56,55,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,51,70,48,48,10,51, 70,48,48,10,51,70,48,48,10,51,70,48,48,10,51,70, 48,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,114,111,100,117,99,116,10,69,78,67,79,68, 73,78,71,32,56,55,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,54,51,48,48,10,70,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,49,48,10,69,78,67,79,68,73,78,71,32,56, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,70,51,56, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,51,48,48,10,54,51,48,48,10,54,51, 48,48,10,54,51,48,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,115,117,109,109,97,116,105, 111,110,10,69,78,67,79,68,73,78,71,32,56,55,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,51, 48,56,48,10,51,48,56,48,10,49,56,48,48,10,49,56, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,49,56,48,48,10,51,48,56,48,10, 51,48,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,109,105,110,117,115,10,69,78,67,79, 68,73,78,71,32,56,55,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,49,51,10,69,78,67,79,68,73,78,71,32, 56,55,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,55,70,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,49, 52,10,69,78,67,79,68,73,78,71,32,56,55,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,114,97,99,116,105,111,110,10,69,78, 67,79,68,73,78,71,32,56,55,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,51,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,54,10,69,78,67,79,68,73,78, 71,32,56,55,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,115,116,101, 114,105,115,107,109,97,116,104,10,69,78,67,79,68,73,78, 71,32,56,55,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,67, 67,67,48,10,69,68,67,48,10,55,70,56,48,10,49,69, 48,48,10,49,69,48,48,10,55,70,56,48,10,69,68,67, 48,10,67,67,67,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,49,56,10,69,78,67,79,68,73,78,71,32,56,55,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,101,114,105,111,100,99,101,110, 116,101,114,101,100,10,69,78,67,79,68,73,78,71,32,56, 55,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,114,97,100,105,99,97,108, 10,69,78,67,79,68,73,78,71,32,56,55,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,55,67,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,67,67,48,48,10,68,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,70,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,49,66,10,69,78,67,79, 68,73,78,71,32,56,55,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,67,48, 48,48,10,50,55,67,48,10,67,54,48,48,10,50,54,48, 48,10,67,67,48,48,10,48,67,48,48,10,67,67,48,48, 10,68,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 70,48,48,48,10,55,48,48,48,10,55,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,49,67,10,69,78,67,79,68,73,78,71,32, 56,55,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,65,48,48,48,10,65,55, 67,48,10,69,54,48,48,10,50,54,48,48,10,50,67,48, 48,10,48,67,48,48,10,67,67,48,48,10,68,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,70,48,48,48,10, 55,48,48,48,10,55,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,111,114, 116,105,111,110,97,108,10,69,78,67,79,68,73,78,71,32, 56,55,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,49,56,48,10,52,65,48,48, 10,52,52,48,48,10,52,65,48,48,10,51,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,110,102,105,110,105, 116,121,10,69,78,67,79,68,73,78,71,32,56,55,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,51,48,48,10,57,52,56,48,10,56,56,56, 48,10,57,52,56,48,10,54,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,114,116,104,111,103,111,110,97,108, 10,69,78,67,79,68,73,78,71,32,56,55,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,110,103,108,101,10,69,78,67,79,68,73, 78,71,32,56,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,56,48,10,48, 49,56,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,49,10,69,78,67,79,68,73,78,71,32,56,55, 51,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,56,48,10,48,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,49,69, 48,48,10,51,54,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,51,48,48,10,48,51,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,50,50,10, 69,78,67,79,68,73,78,71,32,56,55,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,51,51,48,48,10,48,69,48,48,10,48,67,48,48,10, 49,65,48,48,10,51,50,48,48,10,54,50,48,48,10,51, 50,48,48,10,49,65,48,48,10,48,67,48,48,10,48,69, 48,48,10,51,51,48,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,50,51,10,69,78,67,79,68, 73,78,71,32,56,55,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,50,52,10,69,78,67,79,68,73,78,71,32,56, 55,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,68,56,48,10,48,70,48,48,10,48,69,48,48,10, 48,67,48,48,10,49,67,48,48,10,51,67,48,48,10,54, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,50,53, 10,69,78,67,79,68,73,78,71,32,56,55,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,50,54,10,69,78,67,79, 68,73,78,71,32,56,55,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,67,48,10,51,51,56,48,10,51,51,48,48, 10,51,55,48,48,10,51,70,48,48,10,51,66,48,48,10, 51,51,48,48,10,55,51,48,48,10,70,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,108, 111,103,105,99,97,108,97,110,100,10,69,78,67,79,68,73, 78,71,32,56,55,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,69,48,48,10,49,69, 48,48,10,51,51,48,48,10,51,51,48,48,10,54,49,56, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,108,111,103, 105,99,97,108,111,114,10,69,78,67,79,68,73,78,71,32, 56,55,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 49,69,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,110,116,101,114,115, 101,99,116,105,111,110,10,69,78,67,79,68,73,78,71,32, 56,55,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,111,110,10, 69,78,67,79,68,73,78,71,32,56,55,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,51,51,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,105,110,116,101,103,114,97,108,10,69,78,67,79, 68,73,78,71,32,56,55,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,55, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,50,67,10,69,78,67,79,68,73,78,71,32, 56,55,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,49,57,56,48,10,51,55, 52,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,66,66,48,48,10,54,54, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,50, 68,10,69,78,67,79,68,73,78,71,32,56,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,51,54,67,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,68,66,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,50,69,10,69,78,67, 79,68,73,78,71,32,56,55,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,67, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,51,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,50,70,10,69,78,67,79,68,73,78,71, 32,56,55,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,49,57,56,48,10,51, 55,52,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,70,48,48,10,55,51,56,48,10,66,51,52, 48,10,66,51,52,48,10,66,51,52,48,10,66,51,52,48, 10,55,51,56,48,10,51,70,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,66,66,48,48,10,54, 54,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 51,48,10,69,78,67,79,68,73,78,71,32,56,55,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,51,54,67,48,10,54,68,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,55,70, 56,48,10,54,68,56,48,10,69,68,67,48,10,69,68,67, 48,10,69,68,67,48,10,69,68,67,48,10,54,68,56,48, 10,55,70,56,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,68,66,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,49,10,69,78, 67,79,68,73,78,71,32,56,55,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,69,48,48,10,49,66,48,48,10,49,66,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,51,67, 48,48,10,53,65,48,48,10,57,57,48,48,10,57,70,67, 48,10,49,66,56,48,10,49,57,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,68,56,48,48,10, 68,56,48,48,10,55,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,51,50,10,69,78,67,79,68,73,78, 71,32,56,55,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,69,48,48,10, 49,66,48,48,10,49,66,48,48,10,49,56,48,48,10,49, 56,48,48,10,51,67,48,48,10,53,65,48,48,10,57,57, 48,48,10,57,70,67,48,10,57,66,56,48,10,57,57,48, 48,10,53,65,48,48,10,51,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,68,56,48,48,10,68,56,48,48,10, 55,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,51,10,69,78,67,79,68,73,78,71,32,56,55,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,69,48,48,10,49,66,48,48,10, 49,66,48,48,10,49,56,48,48,10,49,56,48,48,10,51, 67,48,48,10,53,65,48,48,10,57,57,48,48,10,57,66, 56,48,10,57,70,67,48,10,57,57,48,48,10,53,65,48, 48,10,51,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,68,56,48,48,10,68,56,48,48,10,55,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,104,101,114,101,102,111,114,101, 10,69,78,67,79,68,73,78,71,32,56,55,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,54,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,53,10,69,78,67,79, 68,73,78,71,32,56,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,51,54,10,69,78,67,79,68,73,78,71,32, 56,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,51, 55,10,69,78,67,79,68,73,78,71,32,56,55,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,54,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,51,48,48,10,54,51,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,51,56,10,69,78,67, 79,68,73,78,71,32,56,55,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,51,57,10,69,78,67,79,68,73,78,71, 32,56,55,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 51,65,10,69,78,67,79,68,73,78,71,32,56,55,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,54,49,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,54,49,56,48,10,54,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,66,10,69,78, 67,79,68,73,78,71,32,56,55,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,105,109,105,108,97,114,10,69,78,67,79,68,73,78, 71,32,56,55,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,57,56,48,10,54,68,56,48,10,54,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,68,10,69,78,67,79,68,73,78,71,32,56,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,55, 48,48,10,54,68,56,48,10,51,57,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,51,69,10,69, 78,67,79,68,73,78,71,32,56,55,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,55,57,56,48,10,54,68, 56,48,10,54,55,56,48,10,51,51,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,51,70,10,69,78,67,79,68,73, 78,71,32,56,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 50,48,48,48,10,53,48,48,48,10,53,48,48,48,10,56, 56,48,48,10,56,56,48,48,10,56,56,48,48,10,48,52, 52,48,10,48,52,52,48,10,48,52,52,48,10,48,50,56, 48,10,48,50,56,48,10,48,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,52,48,10,69,78,67,79,68,73,78,71,32,56,55, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,67,48,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,49,10, 69,78,67,79,68,73,78,71,32,56,55,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,51,68,56,48,10,54, 68,56,48,10,54,70,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,52,50,10,69,78,67,79,68, 73,78,71,32,56,55,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,51,57,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,51,10,69,78,67,79,68,73,78,71,32,56, 55,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,57,56,48,10, 54,68,56,48,10,54,55,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,52,52, 10,69,78,67,79,68,73,78,71,32,56,55,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,52,48,48,10,51,68,56,48,10,54,68,56,48,10, 54,70,48,48,10,48,56,48,48,10,55,70,56,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,111,110,103,114,117,101,110,116,10,69,78, 67,79,68,73,78,71,32,56,55,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,57, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,52,54,10,69,78,67,79,68,73,78, 71,32,56,55,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,57,56,48,10,54,68, 56,48,10,54,55,48,48,10,48,52,48,48,10,55,70,56, 48,10,48,67,48,48,10,55,70,56,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,55,10,69,78,67,79,68,73,78,71,32,56,55,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 50,48,48,10,51,66,56,48,10,54,68,56,48,10,54,55, 48,48,10,48,67,48,48,10,55,70,56,48,10,48,56,48, 48,10,55,70,56,48,10,49,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,112,112,114,111,120,101,113,117, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,57,56,48,10,54,68,56,48,10,54,55,48, 48,10,48,48,48,48,10,51,57,56,48,10,54,68,56,48, 10,54,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,57,10,69,78, 67,79,68,73,78,71,32,56,55,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,51,68, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,67,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,70,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,52,65,10,69,78,67,79,68,73,78, 71,32,56,55,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,57,56,48,10,54,68,56,48,10,54,55, 48,48,10,48,48,48,48,10,51,57,56,48,10,54,68,56, 48,10,54,55,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,66,10,69,78,67,79,68,73,78,71,32,56,55,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,57,56,48,10,54, 68,56,48,10,54,55,48,48,10,48,48,48,48,10,51,57, 56,48,10,54,68,56,48,10,54,55,48,48,10,48,48,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,52,67,10,69, 78,67,79,68,73,78,71,32,56,55,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,48,48,10,54,68,56,48,10,51,57,56,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,68,10,69,78,67,79,68,73, 78,71,32,56,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,52,69,10,69,78,67,79,68,73,78,71,32,56,55, 56,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 50,48,48,10,55,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,70,10, 69,78,67,79,68,73,78,71,32,56,55,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,55, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,53,48,10,69,78,67,79,68, 73,78,71,32,56,55,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,49,10,69,78,67,79,68,73,78,71,32,56, 55,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,53,50, 10,69,78,67,79,68,73,78,71,32,56,55,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,53,51,10,69,78,67,79, 68,73,78,71,32,56,55,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,49,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,53,52,10,69,78,67,79,68,73,78,71,32, 56,55,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 54,70,56,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 53,10,69,78,67,79,68,73,78,71,32,56,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,55,68,56,48, 10,48,48,48,48,10,48,48,48,48,10,55,68,56,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,53,54,10,69,78,67, 79,68,73,78,71,32,56,55,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,49,52,48,48, 10,50,50,48,48,10,49,52,48,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,53,55,10,69,78,67,79,68,73,78,71, 32,56,55,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 53,56,10,69,78,67,79,68,73,78,71,32,56,55,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,51,51,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,57,10,69,78, 67,79,68,73,78,71,32,56,55,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,53,65,10,69,78,67,79,68,73,78, 71,32,56,55,57,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,51, 51,48,48,10,49,69,48,48,10,48,67,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,53,66,10,69,78,67,79,68,73,78,71,32,56,55,57, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,51,70,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,53,67,10,69, 78,67,79,68,73,78,71,32,56,55,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,51,48,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,68,10,69,78,67,79,68,73, 78,71,32,56,55,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,50,48,52,48, 10,50,48,56,48,10,54,52,56,48,10,65,65,67,48,10, 65,69,56,48,10,65,56,56,48,10,54,54,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,53,69,10,69,78,67,79,68,73,78,71,32,56,55, 57,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,48,48,10,54,68,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,53,70,10, 69,78,67,79,68,73,78,71,32,56,55,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,50,50,48,48, 10,48,52,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,56,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,110,111,116,101,113,117,97,108,10,69,78,67,79, 68,73,78,71,32,56,56,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,54,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,51,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 113,117,105,118,97,108,101,110,99,101,10,69,78,67,79,68, 73,78,71,32,56,56,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,50,10,69,78,67,79,68,73,78,71,32,56, 56,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,51,48,48, 10,55,70,56,48,10,48,54,48,48,10,48,54,48,48,10, 55,70,56,48,10,49,56,48,48,10,49,56,48,48,10,55, 70,56,48,10,51,48,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,54,51, 10,69,78,67,79,68,73,78,71,32,56,56,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,101,115,115,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,56,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,56,48,10,48,69, 48,48,10,51,56,48,48,10,69,48,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,103,114,101,97,116,101,114,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,56,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,48,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,51,56,48,10,48,69,48, 48,10,51,56,48,48,10,69,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,54,54,10,69,78,67,79,68,73,78, 71,32,56,56,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,51,56,48,10,48,69,48,48,10,51, 56,48,48,10,54,48,48,48,10,51,56,48,48,10,48,69, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,54,55,10,69,78,67,79,68,73,78,71,32,56,56,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,54,56,10,69, 78,67,79,68,73,78,71,32,56,56,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,54,48,48,48,10,51, 56,48,48,10,48,69,48,48,10,48,51,56,48,10,48,52, 48,48,10,48,52,48,48,10,55,70,56,48,10,48,56,48, 48,10,48,56,48,48,10,55,70,56,48,10,49,48,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,57,10,69,78,67,79,68,73, 78,71,32,56,56,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,51,56,48,48,10, 48,69,48,48,10,48,51,56,48,10,48,69,48,48,10,51, 56,48,48,10,54,48,48,48,10,48,50,48,48,10,48,50, 48,48,10,55,70,56,48,10,48,52,48,48,10,48,52,48, 48,10,55,70,56,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,54,65,10,69,78,67,79,68,73,78,71,32,56,56, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,52,48,10,48,67,67,48,10, 49,57,56,48,10,51,51,48,48,10,54,54,48,48,10,67, 67,48,48,10,54,54,48,48,10,51,51,48,48,10,49,57, 56,48,10,48,67,67,48,10,48,54,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,54,66,10, 69,78,67,79,68,73,78,71,32,56,56,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,56,56,48,48,10,67,67,48,48,10,54,54,48,48,10, 51,51,48,48,10,49,57,56,48,10,48,67,67,48,10,49, 57,56,48,10,51,51,48,48,10,54,54,48,48,10,67,67, 48,48,10,57,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,54,67,10,69,78,67,79,68, 73,78,71,32,56,56,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,51,48,48,10,51,69,48,48, 10,49,67,48,48,10,51,54,48,48,10,51,54,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,51, 54,48,48,10,51,54,48,48,10,49,67,48,48,10,51,69, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,68,10,69,78,67,79,68,73,78,71,32,56, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,50,48,48, 10,48,50,48,48,10,54,53,56,48,10,49,69,48,48,10, 48,52,48,48,10,48,56,48,48,10,49,69,48,48,10,54, 57,56,48,10,49,48,48,48,10,49,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,54,69, 10,69,78,67,79,68,73,78,71,32,56,56,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,52,48,48,10,48,55,56,48, 10,48,69,48,48,10,51,56,48,48,10,69,56,48,48,10, 51,56,48,48,10,49,69,48,48,10,49,51,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,54,70,10,69,78,67,79, 68,73,78,71,32,56,56,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,69,52,48,48,10,51,67,48,48, 10,48,69,48,48,10,48,66,56,48,10,48,69,48,48,10, 51,56,48,48,10,70,48,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,55,48,10,69,78,67,79,68,73,78,71,32, 56,56,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,52,48,48,10,48,55,56,48,10,48,69,48, 48,10,51,67,48,48,10,69,56,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,66,56,48,10,69,56,48,48,10, 51,56,48,48,10,49,69,48,48,10,49,51,56,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 49,10,69,78,67,79,68,73,78,71,32,56,56,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,52, 48,48,10,69,52,48,48,10,51,67,48,48,10,48,69,48, 48,10,48,66,56,48,10,48,69,48,48,10,51,56,48,48, 10,69,56,48,48,10,48,66,56,48,10,49,69,48,48,10, 51,56,48,48,10,70,48,48,48,10,49,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,55,50,10,69,78,67, 79,68,73,78,71,32,56,56,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,48,48,48,10,55,49,56,48, 10,68,68,56,48,10,67,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,55,51,10,69,78,67,79,68,73,78,71, 32,56,56,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,55,49,56,48,10,68,68,56,48, 10,67,55,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 55,52,10,69,78,67,79,68,73,78,71,32,56,56,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,52,48,48,10,48,55,56,48,10,48, 69,48,48,10,51,67,48,48,10,69,67,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,66,56,48,10,49,56,48, 48,10,55,49,56,48,10,68,68,56,48,10,68,55,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,53,10,69,78, 67,79,68,73,78,71,32,56,56,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,52,48,48,10,69,52,48,48,10,51,67,48,48,10,48, 69,48,48,10,48,70,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,56,48,48,10,49,56,48,48,10,55,49,56, 48,10,68,68,56,48,10,68,55,48,48,10,49,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,55,54,10,69,78,67,79,68,73,78, 71,32,56,56,50,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,51,56,48,10,48,69,48,48,10,51,56,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,69,51, 56,48,10,51,56,48,48,10,48,69,48,48,10,48,51,56, 48,10,48,69,48,48,10,51,56,48,48,10,69,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,55,55,10,69,78,67,79,68,73,78,71,32,56,56,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,69,48,48,48,10, 51,56,48,48,10,48,69,48,48,10,48,51,56,48,10,48, 69,48,48,10,51,56,48,48,10,69,51,56,48,10,48,69, 48,48,10,51,56,48,48,10,69,48,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,55,56,10,69, 78,67,79,68,73,78,71,32,56,56,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,56,48,48,10,48,66,56,48,10,48,69,48,48,10, 51,56,48,48,10,69,56,48,48,10,51,56,48,48,10,48, 69,48,48,10,69,66,56,48,10,51,56,48,48,10,48,69, 48,48,10,48,66,56,48,10,48,69,48,48,10,51,56,48, 48,10,69,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,57,10,69,78,67,79,68,73, 78,71,32,56,56,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,56,48,48, 10,69,56,48,48,10,51,56,48,48,10,48,69,48,48,10, 48,66,56,48,10,48,69,48,48,10,51,56,48,48,10,69, 66,56,48,10,48,69,48,48,10,51,56,48,48,10,69,56, 48,48,10,51,56,48,48,10,48,69,48,48,10,48,66,56, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,55,65,10,69,78,67,79,68,73,78,71,32,56,56, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,56,48,10,48,49,56,48,10,48,55,48,48,10,49, 67,48,48,10,55,48,48,48,10,49,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,55,66,10, 69,78,67,79,68,73,78,71,32,56,56,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,52,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,55,67,10,69,78,67,79,68, 73,78,71,32,56,56,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,56,48, 10,48,49,56,48,10,48,55,48,48,10,49,67,48,48,10, 55,48,48,48,10,49,67,48,48,10,48,55,48,48,10,55, 49,56,48,10,49,67,56,48,10,48,54,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,68,10,69,78,67,79,68,73,78,71,32,56, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,54,48,48,48, 10,51,56,48,48,10,48,69,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,54,51,56,48,10,52, 69,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,55,69, 10,69,78,67,79,68,73,78,71,32,56,56,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,49,56,48,10,48,51,48,48,10,48,69,48, 48,10,51,56,48,48,10,69,48,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,51,48,48,10,48,49,56,48,10, 48,48,48,48,10,55,49,56,48,10,68,68,56,48,10,67, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,55,70,10,69,78,67,79, 68,73,78,71,32,56,56,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,67,48, 48,48,10,54,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,69,48,48,10,51,56,48,48, 10,54,48,48,48,10,67,48,48,48,10,48,48,48,48,10, 55,49,56,48,10,68,68,56,48,10,67,55,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,56,48,10,69,78,67,79,68,73,78,71,32, 56,56,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,68,56,48,10,48,70,48,48,10,48,69,48,48, 10,51,67,48,48,10,69,67,48,48,10,51,67,48,48,10, 48,69,48,48,10,48,70,48,48,10,48,68,56,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,56, 49,10,69,78,67,79,68,73,78,71,32,56,56,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,68,56,48, 48,10,55,56,48,48,10,51,56,48,48,10,49,69,48,48, 10,49,66,56,48,10,49,69,48,48,10,51,56,48,48,10, 55,56,48,48,10,68,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,112,101,114,115,117,98,115,101, 116,10,69,78,67,79,68,73,78,71,32,56,56,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,112,101,114,115,117,112,101,114, 115,101,116,10,69,78,67,79,68,73,78,71,32,56,56,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,110,111,116,115,117,98,115,101,116, 10,69,78,67,79,68,73,78,71,32,56,56,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,51,48,48, 10,49,70,56,48,10,51,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,51,56,48,48,10,49,70,56,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,53,10,69,78,67,79, 68,73,78,71,32,56,56,51,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,54,48,48,10,55,69,48,48, 10,48,55,48,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,49,57,56,48,10,49,57,56,48,10,49, 66,48,48,10,55,69,48,48,10,51,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 101,102,108,101,120,115,117,98,115,101,116,10,69,78,67,79, 68,73,78,71,32,56,56,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 101,102,108,101,120,115,117,112,101,114,115,101,116,10,69,78, 67,79,68,73,78,71,32,56,56,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,48,51,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,55,69,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,56,56,10,69,78,67,79,68,73,78, 71,32,56,56,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,49, 70,56,48,10,51,54,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,51,56,48,48,10,49,70,56,48,10,49,56,48,48, 10,55,70,56,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,57,10,69,78,67,79,68,73,78,71,32,56,56,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,55,69,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,49,57,56,48,10,49,57,56,48,10,49,66,48, 48,10,55,69,48,48,10,51,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,56,65,10,69, 78,67,79,68,73,78,71,32,56,56,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,70,56,48,10,51,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,49,70,56, 48,10,48,54,48,48,10,55,70,56,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,56,66,10,69,78,67,79,68,73, 78,71,32,56,56,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,55,69,48,48,10,48,54,48, 48,10,55,70,56,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,56,67,10,69,78,67,79,68,73,78,71,32,56,56, 52,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,57,56,48,10,68,57,56,48,10,70,70,56,48,10,68, 57,56,48,10,67,57,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,54,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,68,10, 69,78,67,79,68,73,78,71,32,56,56,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,57,56,48,10,68,68,56,48,10,67, 57,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,54,51,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,56,69,10,69,78,67,79,68, 73,78,71,32,56,56,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,49,56,48,10,67,49,56,48,10,54,51, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,56,70,10,69,78,67,79,68,73,78,71,32,56, 56,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,57,48, 10,69,78,67,79,68,73,78,71,32,56,56,52,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,57,49,10,69,78,67,79, 68,73,78,71,32,56,56,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,57,50,10,69,78,67,79,68,73,78,71,32, 56,56,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 51,10,69,78,67,79,68,73,78,71,32,56,56,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,57,52,10,69,78,67, 79,68,73,78,71,32,56,56,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,105,114,99,108,101,112,108,117,115,10,69,78,67,79,68, 73,78,71,32,56,56,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,54,68,56,48,10,67,67,67,48,10, 67,67,67,48,10,70,70,67,48,10,67,67,67,48,10,67, 67,67,48,10,54,68,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,54,10,69,78,67,79,68,73,78,71,32,56, 56,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,54,49,56,48,10,67,48,67,48,10,67,48,67,48,10, 70,70,67,48,10,67,48,67,48,10,67,48,67,48,10,54, 49,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,105,114,99,108,101,109, 117,108,116,105,112,108,121,10,69,78,67,79,68,73,78,71, 32,56,56,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,54,49,56,48,10,70,51,67,48,10,68,69,67, 48,10,67,67,67,48,10,68,69,67,48,10,70,51,67,48, 10,54,49,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 57,56,10,69,78,67,79,68,73,78,71,32,56,56,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,54,49, 56,48,10,67,51,67,48,10,67,54,67,48,10,67,67,67, 48,10,68,56,67,48,10,70,48,67,48,10,54,49,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,57,10,69,78, 67,79,68,73,78,71,32,56,56,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,67,48, 67,48,10,67,48,67,48,10,67,67,67,48,10,67,48,67, 48,10,67,48,67,48,10,54,49,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,57,65,10,69,78,67,79,68,73,78, 71,32,56,56,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,54,49,56,48,10,67,67, 67,48,10,68,50,67,48,10,68,50,67,48,10,67,67,67, 48,10,54,49,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,66,10,69,78,67,79,68,73,78,71,32,56,56,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,68,50,67,48,10,67,67,67,48,10,70,70, 67,48,10,67,67,67,48,10,68,50,67,48,10,54,49,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,57,67,10,69, 78,67,79,68,73,78,71,32,56,56,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,67, 48,67,48,10,70,70,67,48,10,67,48,67,48,10,70,70, 67,48,10,67,48,67,48,10,54,49,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,68,10,69,78,67,79,68,73, 78,71,32,56,56,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,54,49,56,48,10,67,48,67,48,10,67, 48,67,48,10,68,69,67,48,10,67,48,67,48,10,67,48, 67,48,10,54,49,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,57,69,10,69,78,67,79,68,73,78,71,32,56,56, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,55, 70,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,57,70,10, 69,78,67,79,68,73,78,71,32,56,56,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,65,48,10,69,78,67,79,68, 73,78,71,32,56,56,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,69,51,56,48,10, 70,55,56,48,10,68,68,56,48,10,68,68,56,48,10,70, 55,56,48,10,69,51,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,49,10,69,78,67,79,68,73,78,71,32,56, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,65,50, 10,69,78,67,79,68,73,78,71,32,56,56,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,67,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,51,10,69,78,67,79, 68,73,78,71,32,56,56,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,65,52,10,69,78,67,79,68,73,78,71,32, 56,56,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,101,114,112,101,110, 100,105,99,117,108,97,114,10,69,78,67,79,68,73,78,71, 32,56,56,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 65,54,10,69,78,67,79,68,73,78,71,32,56,56,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,55,10,69,78, 67,79,68,73,78,71,32,56,56,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,70,48,48,10,51,48,48,48,10,51,70,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,65,56,10,69,78,67,79,68,73,78, 71,32,56,56,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 67,48,10,54,48,48,48,10,55,70,67,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,57,10,69,78,67,79,68,73,78,71,32,56,56,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,70, 67,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,65,65,10,69, 78,67,79,68,73,78,71,32,56,56,55,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,66,48,48,10,68,66,48,48,10,68,66,48,48,10,68, 66,48,48,10,68,66,48,48,10,68,66,67,48,10,68,66, 48,48,10,68,66,48,48,10,68,66,48,48,10,68,66,48, 48,10,68,66,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,65,66,10,69,78,67,79,68,73, 78,71,32,56,56,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,67,48,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 70,67,48,10,54,67,48,48,10,54,70,67,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,65,67,10,69,78,67,79,68,73,78,71,32,56,56, 55,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,54,48,48,10,55, 70,56,48,10,54,54,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,55,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,68,10, 69,78,67,79,68,73,78,71,32,56,56,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,48,49,56,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,55,70,67,48,10,54,54,48,48,10,55, 70,67,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,65,69,10,69,78,67,79,68, 73,78,71,32,56,56,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,67,48,48, 10,54,68,48,48,10,54,70,48,48,10,54,69,48,48,10, 54,67,48,48,10,55,70,67,48,10,55,67,48,48,10,69, 67,48,48,10,69,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,70,10,69,78,67,79,68,73,78,71,32,56, 56,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,67,48,48,10,54,68,48,48, 10,54,70,48,48,10,54,69,48,48,10,54,70,67,48,10, 55,67,48,48,10,55,70,67,48,10,69,67,48,48,10,69, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,66,48, 10,69,78,67,79,68,73,78,71,32,56,56,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,55,48,48,10,48,49,56,48,10,48,51,48,48, 10,48,69,48,48,10,51,56,48,48,10,69,48,48,48,10, 51,56,48,48,10,48,69,48,48,10,48,51,48,48,10,48, 49,56,48,10,48,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,49,10,69,78,67,79, 68,73,78,71,32,56,56,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,67,48,48,48,10,54,48,48,48,10,51,56,48,48, 10,48,69,48,48,10,48,51,56,48,10,48,69,48,48,10, 51,56,48,48,10,54,48,48,48,10,67,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,66,50,10,69,78,67,79,68,73,78,71,32, 56,56,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,56,48,10,48,70,56,48,10,51,57,56,48, 10,69,49,56,48,10,51,57,56,48,10,48,70,56,48,10, 48,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,66, 51,10,69,78,67,79,68,73,78,71,32,56,56,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,48,48, 48,10,70,56,48,48,10,67,69,48,48,10,67,51,56,48, 10,67,69,48,48,10,70,56,48,48,10,69,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,66,52,10,69,78,67, 79,68,73,78,71,32,56,56,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,70,56,48,10,51,57,56, 48,10,69,49,56,48,10,51,57,56,48,10,48,70,56,48, 10,48,51,56,48,10,48,48,48,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,53,10,69,78,67,79,68,73,78,71, 32,56,56,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,48, 48,48,10,70,56,48,48,10,67,69,48,48,10,67,51,56, 48,10,67,69,48,48,10,70,56,48,48,10,69,48,48,48, 10,48,48,48,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 66,54,10,69,78,67,79,68,73,78,71,32,56,56,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,49,56,48,10,57,51,67,48,10,57,70,67, 48,10,57,51,67,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,66,55,10,69,78, 67,79,68,73,78,71,32,56,56,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,49, 56,48,10,70,50,52,48,10,70,69,52,48,10,70,50,52, 48,10,54,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,66,56,10,69,78,67,79,68,73,78, 71,32,56,56,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,50, 52,48,10,55,69,52,48,10,48,50,52,48,10,48,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,57,10,69,78,67,79,68,73,78,71,32,56,56,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,51, 56,48,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,66,65,10,69, 78,67,79,68,73,78,71,32,56,56,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,66,66,10,69,78,67,79,68,73, 78,71,32,56,56,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,66,67,10,69,78,67,79,68,73,78,71,32,56,56, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,51,51, 48,48,10,51,51,48,48,10,54,49,56,48,10,54,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,68,10, 69,78,67,79,68,73,78,71,32,56,56,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,49,56,48,10,54,49,56,48,10,51, 51,48,48,10,51,51,48,48,10,49,69,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,66,69,10,69,78,67,79,68, 73,78,71,32,56,56,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,55,56,48,48,10,54, 52,48,48,10,54,50,48,48,10,54,50,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,66,70,10,69,78,67,79,68,73,78,71,32,56, 56,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,51,56,48,10, 48,55,56,48,10,48,68,56,48,10,49,57,56,48,10,51, 49,56,48,10,54,49,56,48,10,70,70,56,48,10,70,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,67,48, 10,69,78,67,79,68,73,78,71,32,56,56,57,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,49,69,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,67,48,67,48,10,67,48, 67,48,10,67,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,49,10,69,78,67,79, 68,73,78,71,32,56,56,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,67,48,67,48,10,67,48,67,48,10,67,48,67, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,51,48,48,10,49,69,48,48,10,49, 69,48,48,10,49,69,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,67,50,10,69,78,67,79,68,73,78,71,32, 56,56,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,54,51,48,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,67, 51,10,69,78,67,79,68,73,78,71,32,56,56,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,54, 51,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,67,52,10,69,78,67, 79,68,73,78,71,32,56,57,48,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,51,48,48,10,54,49,56,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,109,97,116,104,10,69,78,67,79,68,73,78,71, 32,56,57,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,49,67,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 67,54,10,69,78,67,79,68,73,78,71,32,56,57,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,55,70,56,48,10,51,70,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,67,55,10,69,78, 67,79,68,73,78,71,32,56,57,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,67,52,48,10,67,67,67,48,10,54,49, 56,48,10,51,51,48,48,10,70,70,67,48,10,51,51,48, 48,10,54,49,56,48,10,67,67,67,48,10,56,67,52,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,67,56,10,69,78,67,79,68,73,78, 71,32,56,57,48,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,67,49,56,48,10,69,51,56,48,10,66,54, 56,48,10,57,67,56,48,10,66,54,56,48,10,69,51,56, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,57,10,69,78,67,79,68,73,78,71,32,56,57,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,67, 49,56,48,10,69,51,48,48,10,66,54,48,48,10,57,67, 48,48,10,66,54,48,48,10,69,51,48,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,67,65,10,69, 78,67,79,68,73,78,71,32,56,57,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,54, 51,56,48,10,51,54,56,48,10,49,67,56,48,10,51,54, 56,48,10,54,51,56,48,10,67,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,67,66,10,69,78,67,79,68,73, 78,71,32,56,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,51,48,48,48,10,49, 56,48,48,10,48,67,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,67,67,10,69,78,67,79,68,73,78,71,32,56,57, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 67,48,48,10,49,69,48,48,10,51,51,48,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,68,10, 69,78,67,79,68,73,78,71,32,56,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,54,55,48,48,10,54,68,56,48,10,51, 57,56,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,67,69,10,69,78,67,79,68, 73,78,71,32,56,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,54,51,48,48,10,50,50,48,48,10,51, 54,48,48,10,49,52,48,48,10,49,67,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,67,70,10,69,78,67,79,68,73,78,71,32,56, 57,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,67,48,48,10,49,52,48,48,10,51, 54,48,48,10,50,50,48,48,10,54,51,48,48,10,67,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,68,48, 10,69,78,67,79,68,73,78,71,32,56,57,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,70,56,48,10,51,48,48,48,10,54,55,56,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 55,56,48,10,51,48,48,48,10,49,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,49,10,69,78,67,79, 68,73,78,71,32,56,57,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,69,48,48, 10,48,51,48,48,10,55,57,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,55,57,56,48,10,48, 51,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,68,50,10,69,78,67,79,68,73,78,71,32, 56,57,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,69,48,48, 10,55,70,48,48,10,67,49,56,48,10,57,67,56,48,10, 66,69,56,48,10,65,50,56,48,10,65,50,56,48,10,65, 50,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,68, 51,10,69,78,67,79,68,73,78,71,32,56,57,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,65,50,56,48,10,65,50,56,48, 10,65,50,56,48,10,66,69,56,48,10,57,67,56,48,10, 67,49,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,68,52,10,69,78,67, 79,68,73,78,71,32,56,57,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,51,69,48,48,10,55,70,48,48,10,67,57,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,53,10,69,78,67,79,68,73,78,71, 32,56,57,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,55,70,56,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,55,70,56,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 68,54,10,69,78,67,79,68,73,78,71,32,56,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,48,48,10,48,51,48,48,10,48,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,51,49,48,48,10,54,51,56, 48,10,51,49,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,54,48,48,10,48,51,48,48,10,48,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,68,55,10,69,78, 67,79,68,73,78,71,32,56,57,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,50,48,48,48,10,51, 48,48,48,10,49,56,48,48,10,48,67,48,48,10,48,54, 48,48,10,50,51,48,48,10,55,49,56,48,10,50,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,50,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,68,56,10,69,78,67,79,68,73,78, 71,32,56,57,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 52,56,48,10,50,52,56,48,10,54,68,56,48,10,52,57, 48,48,10,68,66,48,48,10,52,57,48,48,10,54,68,56, 48,10,50,52,56,48,10,50,52,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,57,10,69,78,67,79,68,73,78,71,32,56,57,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,57,50,48,48,10,57, 50,48,48,10,68,66,48,48,10,52,57,48,48,10,54,68, 56,48,10,52,57,48,48,10,68,66,48,48,10,57,50,48, 48,10,57,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,68,65,10,69, 78,67,79,68,73,78,71,32,56,57,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,51,56,48,10,48,69,48,48,10,51,56,48,48,10, 69,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,48,48,48,10,70,70,56,48,10,48,48, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,69,48,48,10,51,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,68,66,10,69,78,67,79,68,73, 78,71,32,56,57,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,69,48,48,48, 10,51,56,48,48,10,48,69,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,69,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,48,48,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,51,56,48,48,10,48,69,48,48,10,48,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,68,67,10,69,78,67,79,68,73,78,71,32,56,57, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,69,48,48,10,51,56,48,48,10,69,51,56,48,10,48, 69,48,48,10,51,56,48,48,10,69,48,48,48,10,51,56, 48,48,10,48,69,48,48,10,48,51,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,68,10, 69,78,67,79,68,73,78,71,32,56,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,48,48,48,10,51,56,48,48,10, 48,69,48,48,10,69,51,56,48,10,51,56,48,48,10,48, 69,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,68,69,10,69,78,67,79,68, 73,78,71,32,56,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,55,48,48,10,48,67,48,48, 10,51,57,56,48,10,69,51,48,48,10,48,69,48,48,10, 51,56,48,48,10,69,48,48,48,10,51,56,48,48,10,48, 69,48,48,10,48,51,48,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,68,70,10,69,78,67,79,68,73,78,71,32,56, 57,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,55,48,48,48,10,49,56,48,48,10,67,69,48,48, 10,54,51,56,48,10,51,56,48,48,10,48,69,48,48,10, 48,51,56,48,10,48,69,48,48,10,51,56,48,48,10,54, 48,48,48,10,67,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,69,48, 10,69,78,67,79,68,73,78,71,32,56,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,56,48,48,10,48,57,56,48,10,48,66,48, 48,10,48,69,48,48,10,51,56,48,48,10,69,56,48,48, 10,51,56,48,48,10,48,69,48,48,10,69,66,48,48,10, 51,57,56,48,10,48,67,48,48,10,48,70,48,48,10,48, 57,56,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,49,10,69,78,67,79, 68,73,78,71,32,56,57,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,56, 48,48,10,67,56,48,48,10,54,56,48,48,10,51,56,48, 48,10,48,69,48,48,10,48,66,56,48,10,48,69,48,48, 10,51,56,48,48,10,54,66,56,48,10,67,69,48,48,10, 49,56,48,48,10,55,56,48,48,10,67,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,69,50,10,69,78,67,79,68,73,78,71,32, 56,57,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,50, 48,48,10,48,50,48,48,10,48,50,48,48,10,55,70,56, 48,10,54,52,48,48,10,54,52,48,48,10,54,52,48,48, 10,54,67,48,48,10,54,56,48,48,10,54,56,48,48,10, 54,56,48,48,10,55,70,56,48,10,49,48,48,48,10,55, 70,56,48,10,49,48,48,48,10,49,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,69, 51,10,69,78,67,79,68,73,78,71,32,56,57,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,50,48,48,10,55,70,56,48,10,48,53,56, 48,10,48,53,56,48,10,48,53,56,48,10,48,68,56,48, 10,48,57,56,48,10,48,57,56,48,10,48,57,56,48,10, 55,70,56,48,10,49,48,48,48,10,55,70,56,48,10,49, 48,48,48,10,49,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,69,52,10,69,78,67, 79,68,73,78,71,32,56,57,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,56,48,10, 48,52,48,48,10,55,70,56,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,53,10,69,78,67,79,68,73,78,71, 32,56,57,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,55,70,56,48,10,48,52,48,48,10, 55,70,56,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 69,54,10,69,78,67,79,68,73,78,71,32,56,57,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,56,48,10,48,69,48,48,10,51,56, 48,48,10,69,48,48,48,10,51,56,48,48,10,48,69,48, 48,10,48,51,56,48,10,48,52,48,48,10,55,53,56,48, 10,68,68,56,48,10,68,55,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,69,55,10,69,78, 67,79,68,73,78,71,32,56,57,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 48,48,48,10,51,56,48,48,10,48,69,48,48,10,48,51, 56,48,10,48,69,48,48,10,51,56,48,48,10,69,48,48, 48,10,48,52,48,48,10,55,53,56,48,10,68,68,56,48, 10,68,55,48,48,10,49,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,69,56,10,69,78,67,79,68,73,78, 71,32,56,57,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,69,48,48,10,51, 56,48,48,10,69,48,48,48,10,51,56,48,48,10,48,69, 48,48,10,48,51,48,48,10,48,49,56,48,10,48,52,48, 48,10,55,53,56,48,10,68,68,56,48,10,68,55,48,48, 10,49,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,57,10,69,78,67,79,68,73,78,71,32,56,57,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,67,48,48,48,10, 54,48,48,48,10,51,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,69,48,48,10,51,56,48,48,10,54,48, 48,48,10,67,48,48,48,10,48,52,48,48,10,55,53,56, 48,10,68,68,56,48,10,68,55,48,48,10,49,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,69,65,10,69, 78,67,79,68,73,78,71,32,56,57,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,55,56,48,10,48, 70,56,48,10,51,57,56,48,10,69,57,56,48,10,51,57, 56,48,10,49,70,56,48,10,49,51,56,48,10,49,48,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,69,66,10,69,78,67,79,68,73, 78,71,32,56,57,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,52,48,48,10,69,52,48,48,10,70,67,48,48,10,67, 69,48,48,10,67,66,56,48,10,67,69,48,48,10,70,56, 48,48,10,70,48,48,48,10,49,48,48,48,10,49,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,69,67,10,69,78,67,79,68,73,78,71,32,56,57, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,55,56,48,10, 48,70,56,48,10,51,57,56,48,10,69,57,56,48,10,51, 57,56,48,10,49,70,56,48,10,49,51,56,48,10,49,48, 48,48,10,70,70,56,48,10,50,48,48,48,10,50,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,68,10, 69,78,67,79,68,73,78,71,32,56,57,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,52,48,48, 10,48,52,48,48,10,69,52,48,48,10,70,67,48,48,10, 67,69,48,48,10,67,66,56,48,10,67,69,48,48,10,70, 56,48,48,10,70,48,48,48,10,49,48,48,48,10,70,70, 56,48,10,50,48,48,48,10,50,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,69,69,10,69,78,67,79,68, 73,78,71,32,56,57,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,69,70,10,69,78,67,79,68,73,78,71,32,56, 57,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,68,56,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,70,48, 10,69,78,67,79,68,73,78,71,32,56,57,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,49,10,69,78,67,79, 68,73,78,71,32,56,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,70,50,10,69,78,67,79,68,73,78,71,32, 56,57,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,70,56,48,10,49,56,48,48, 10,51,48,48,48,10,51,48,48,48,10,70,70,56,48,10, 51,48,48,48,10,51,48,48,48,10,49,56,48,48,10,48, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,70, 51,10,69,78,67,79,68,73,78,71,32,56,57,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,56,48,10,51,48,48,48,10,54,48,56,48, 10,54,48,56,48,10,55,70,56,48,10,54,48,56,48,10, 54,48,56,48,10,51,48,48,48,10,49,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,70,52,10,69,78,67, 79,68,73,78,71,32,56,57,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,48,48,10,51,48,48,48, 10,51,49,48,48,10,51,70,48,48,10,51,49,48,48,10, 51,48,48,48,10,49,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,53,10,69,78,67,79,68,73,78,71, 32,56,57,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,49,70,56,48,10,51,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,51,48,48,48,10, 49,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,50, 70,54,10,69,78,67,79,68,73,78,71,32,56,57,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,48, 48,48,10,49,70,56,48,10,51,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,49,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,70,55,10,69,78, 67,79,68,73,78,71,32,56,57,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,70,48,48,10,51,48,48,48, 10,51,48,48,48,10,49,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,70,56,10,69,78,67,79,68,73,78, 71,32,56,57,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,70,56,48,10,51,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,54,48,48,48,10,51,48,48,48, 10,49,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,57,10,69,78,67,79,68,73,78,71,32,56,57,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,70,56,48,10,51,48,48,48,10,54,48, 48,48,10,55,70,56,48,10,54,48,48,48,10,55,70,56, 48,10,54,48,48,48,10,51,48,48,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,70,65,10,69, 78,67,79,68,73,78,71,32,56,57,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 56,48,48,10,48,67,48,48,10,48,54,48,48,10,48,54, 48,48,10,70,70,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,70,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,70,66,10,69,78,67,79,68,73, 78,71,32,56,57,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,69,48,48,10,48, 51,48,48,10,52,49,56,48,10,52,49,56,48,10,55,70, 56,48,10,52,49,56,48,10,52,49,56,48,10,48,51,48, 48,10,55,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,70,67,10,69,78,67,79,68,73,78,71,32,56,57, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,48,51,48,48,10,50,51,48,48,10,51,70, 48,48,10,50,51,48,48,10,48,51,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,68,10, 69,78,67,79,68,73,78,71,32,56,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 55,69,48,48,10,48,51,48,48,10,48,49,56,48,10,48, 49,56,48,10,55,70,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,51,48,48,10,55,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,70,69,10,69,78,67,79,68, 73,78,71,32,56,57,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 48,48,48,48,10,51,69,48,48,10,48,51,48,48,10,48, 51,48,48,10,51,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,70,70,10,69,78,67,79,68,73,78,71,32,56, 57,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,70,56,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,48,48, 10,69,78,67,79,68,73,78,71,32,56,57,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,56,48,10,51,70,56,48,10,54,51,48,48,10, 67,55,56,48,10,67,68,56,48,10,68,57,56,48,10,70, 49,56,48,10,54,51,48,48,10,70,69,48,48,10,56,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,48,49,10,69,78,67,79, 68,73,78,71,32,56,57,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,56,56,48,48, 10,67,67,48,48,10,54,69,48,48,10,51,66,48,48,10, 49,57,56,48,10,48,56,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,104, 111,117,115,101,10,69,78,67,79,68,73,78,71,32,56,57, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,48,51,10, 69,78,67,79,68,73,78,71,32,56,57,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,50,48,48,10, 51,51,48,48,10,50,49,48,48,10,54,49,56,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,48,52,10,69,78,67,79,68, 73,78,71,32,56,57,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,48,56,48,10,54,49,56,48,10,50,49,48,48,10,51, 51,48,48,10,49,50,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,53,10,69,78,67,79,68,73,78,71,32,56, 57,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,49,50,48,48,10,51, 51,48,48,10,50,49,48,48,10,54,49,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,48,54, 10,69,78,67,79,68,73,78,71,32,56,57,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,69,48,48,10,49,50,48,48,10,51,51,48,48,10,50, 49,48,48,10,54,49,56,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,48,55,10,69,78,67,79, 68,73,78,71,32,56,57,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,48,56,10,69,78,67,79,68,73,78,71,32, 56,57,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 57,10,69,78,67,79,68,73,78,71,32,56,57,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,48,65,10,69,78,67, 79,68,73,78,71,32,56,57,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,48,66,10,69,78,67,79,68,73,78,71, 32,56,57,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,48,51,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 48,67,10,69,78,67,79,68,73,78,71,32,56,57,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,51,56, 48,10,48,48,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,68,10,69,78, 67,79,68,73,78,71,32,56,57,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,48,69,10,69,78,67,79,68,73,78, 71,32,56,57,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,48,70,10,69,78,67,79,68,73,78,71,32,56,57,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,114,101,118,108,111,103,105,99,97, 108,110,111,116,10,69,78,67,79,68,73,78,71,32,56,57, 55,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,54,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,49,10, 69,78,67,79,68,73,78,71,32,56,57,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,48,56,48,10, 51,70,48,48,10,50,49,48,48,10,50,49,48,48,10,50, 49,48,48,10,50,49,48,48,10,51,70,48,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,49,50,10,69,78,67,79,68, 73,78,71,32,56,57,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,67,48,67,48,10,67,48,67,48,10,67,48, 67,48,10,67,48,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,49,51,10,69,78,67,79,68,73,78,71,32,56, 57,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,54,49,56,48,10,67, 48,67,48,10,67,48,67,48,10,67,48,67,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,49,52, 10,69,78,67,79,68,73,78,71,32,56,57,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 54,49,56,48,10,56,48,52,48,10,52,48,56,48,10,50, 49,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,53,10,69,78,67,79, 68,73,78,71,32,56,57,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,55,57,56,48,10,51, 51,48,48,10,55,69,48,48,10,52,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,49,54,10,69,78,67,79,68,73,78,71,32, 56,57,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,49,67,48,48,10,50,65,48,48, 10,52,57,48,48,10,70,70,56,48,10,52,57,48,48,10, 50,65,48,48,10,49,67,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,49, 55,10,69,78,67,79,68,73,78,71,32,56,57,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,55,70,56,48, 10,49,50,48,48,10,49,50,48,48,10,55,70,56,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,49,56,10,69,78,67, 79,68,73,78,71,32,56,57,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,50,49,48,48,10,53,50,56, 48,10,53,50,56,48,10,51,70,48,48,10,49,50,48,48, 10,49,50,48,48,10,51,70,48,48,10,53,50,56,48,10, 53,50,56,48,10,50,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,57,10,69,78,67,79,68,73,78,71, 32,56,57,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 49,65,10,69,78,67,79,68,73,78,71,32,56,57,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,51,69, 48,48,10,50,65,48,48,10,52,57,48,48,10,52,68,56, 48,10,52,49,48,48,10,50,50,48,48,10,51,69,48,48, 10,50,50,48,48,10,50,50,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,49,66,10,69,78, 67,79,68,73,78,71,32,56,57,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,53,56,48,10,51,66, 48,48,10,49,69,48,48,10,48,67,48,48,10,49,69,48, 48,10,51,66,48,48,10,54,53,56,48,10,54,66,56,48, 10,55,53,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,49,67,10,69,78,67,79,68,73,78, 71,32,56,57,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,56,48,48,10,52,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,68,10,69,78,67,79,68,73,78,71,32,56,57,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,55,56,48,10,48,48,56,48,10,48,48,56,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,49,69,10,69, 78,67,79,68,73,78,71,32,56,57,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,49,70,10,69,78,67,79,68,73, 78,71,32,56,57,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,48,56, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,105,110,116, 101,103,114,97,108,116,112,10,69,78,67,79,68,73,78,71, 32,56,57,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,48,68,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,116,101,103, 114,97,108,98,116,10,69,78,67,79,68,73,78,71,32,56, 57,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,51,56,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,50,50, 10,69,78,67,79,68,73,78,71,32,56,57,57,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 54,49,56,48,10,54,49,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,50,51,10,69,78,67,79, 68,73,78,71,32,56,57,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,52,10,69,78,67,79,68,73,78,71,32, 56,57,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,51,48,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 53,10,69,78,67,79,68,73,78,71,32,56,57,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,49,56,48,48, 10,48,67,48,48,10,48,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,50,54,10,69,78,67, 79,68,73,78,71,32,56,57,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,69,48,48,10,54,51,48,48,10,53,52,56,48, 10,52,56,52,48,10,53,52,56,48,10,54,51,48,48,10, 55,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,50,55,10,69,78,67,79,68,73,78,71, 32,56,57,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,56, 48,10,65,50,56,48,10,57,52,56,48,10,56,56,56,48, 10,57,52,56,48,10,65,50,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 50,56,10,69,78,67,79,68,73,78,71,32,57,48,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,56,48,52,48,10,69,65,67, 48,10,56,48,52,48,10,68,53,67,48,10,56,48,52,48, 10,68,69,67,48,10,56,48,52,48,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,110,103,108,101,108,101,102,116,10, 69,78,67,79,68,73,78,71,32,57,48,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,48,48, 10,48,51,48,48,10,48,50,48,48,10,48,54,48,48,10, 48,52,48,48,10,48,67,48,48,10,48,56,48,48,10,48, 67,48,48,10,48,52,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,51,48,48,10,48,49,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,110,103,108,101,114,105,103,104,116,10,69,78, 67,79,68,73,78,71,32,57,48,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 67,48,48,10,48,52,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,51,48,48,10,48,49,48,48,10,48,51,48, 48,10,48,50,48,48,10,48,54,48,48,10,48,52,48,48, 10,48,67,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,50,66,10,69,78,67,79,68,73,78, 71,32,57,48,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 56,48,10,51,49,56,48,10,52,65,56,48,10,56,52,56, 48,10,52,65,56,48,10,51,49,56,48,10,49,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,50,67,10,69,78,67,79,68,73,78,71,32,57,48,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,51,51,48,48,10,52,48,56,48,10,56, 54,52,48,10,65,49,52,48,10,65,48,52,48,10,65,48, 52,48,10,65,48,52,48,10,65,49,52,48,10,56,54,52, 48,10,52,48,56,48,10,51,51,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,50,68,10,69, 78,67,79,68,73,78,71,32,57,48,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,49,48,48,10,54, 48,56,48,10,67,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,67,48,10,50,49,56,48,10,49,70,48, 48,10,48,54,48,48,10,48,67,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,50,69,10,69,78,67,79,68,73, 78,71,32,57,48,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 48,56,48,10,52,55,67,48,10,52,56,56,48,10,53,48, 56,48,10,65,49,48,48,10,68,69,48,48,10,69,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,50,70,10,69,78,67,79,68,73,78,71,32,57,48, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,51,48,10, 69,78,67,79,68,73,78,71,32,57,48,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,56,48,10,49,57,56,48,10, 51,66,56,48,10,49,57,56,48,10,51,51,48,48,10,50, 50,48,48,10,54,54,48,48,10,52,52,48,48,10,67,67, 48,48,10,56,56,48,48,10,70,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,49,10,69,78,67,79,68, 73,78,71,32,57,48,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,48,48,48, 10,49,48,48,48,10,51,56,48,48,10,53,67,48,48,10, 57,50,56,48,10,57,70,67,48,10,57,50,48,48,10,53, 52,48,48,10,51,56,48,48,10,49,48,48,48,10,49,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,51,50,10,69,78,67,79,68,73,78,71,32,57, 48,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,48,48, 10,55,48,48,48,10,52,67,48,48,10,52,51,48,48,10, 55,70,56,48,10,52,51,48,48,10,52,67,48,48,10,55, 48,48,48,10,52,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,51,51, 10,69,78,67,79,68,73,78,71,32,57,48,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,48,48,10,55,48,48,48, 10,52,67,48,48,10,52,51,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,51,52,10,69,78,67,79, 68,73,78,71,32,57,48,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,53,10,69,78,67,79,68,73,78,71,32, 57,48,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,49,56,48,10,54,49,56,48,10,51,51,48,48,10, 51,51,48,48,10,49,69,48,48,10,49,69,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,51, 54,10,69,78,67,79,68,73,78,71,32,57,48,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,51,55,10,69,78,67, 79,68,73,78,71,32,57,48,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,51,56,10,69,78,67,79,68,73,78,71, 32,57,48,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,57,10,69,78,67,79,68,73,78,71,32,57,48,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,49,56,48,10,54,49,56,48,10,54,68, 56,48,10,54,68,56,48,10,54,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,49,56,48,10,54,49,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,51,65,10,69,78, 67,79,68,73,78,71,32,57,48,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,57, 56,48,10,68,53,56,48,10,69,51,56,48,10,68,53,56, 48,10,67,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,51,66,10,69,78,67,79,68,73,78, 71,32,57,48,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,68,68,56,48,10,69,51, 56,48,10,69,51,56,48,10,69,51,56,48,10,68,68,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,51,67,10,69,78,67,79,68,73,78,71,32,57,48,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,56,48,10,67,49,56,48,10,67,49,56,48,10,68, 68,56,48,10,69,51,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,69,51,56,48,10,68,68,56, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,68,10,69, 78,67,79,68,73,78,71,32,57,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,54, 68,56,48,10,54,68,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,68,56,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,51,69,10,69,78,67,79,68,73, 78,71,32,57,48,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 67,56,48,10,53,50,56,48,10,53,50,56,48,10,52,67, 56,48,10,50,49,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,51,70,10,69,78,67,79,68,73,78,71,32,57,48, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,51,48,48,10,48,54,48,48,10,48,54,48,48,10,55, 70,56,48,10,49,56,48,48,10,49,56,48,48,10,51,48, 48,48,10,51,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,52,48,10, 69,78,67,79,68,73,78,71,32,57,48,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,55,70,56,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,49,10,69,78,67,79,68, 73,78,71,32,57,48,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,54,49,56,48, 10,54,51,56,48,10,54,51,56,48,10,54,53,56,48,10, 54,53,56,48,10,54,57,56,48,10,54,57,56,48,10,55, 49,56,48,10,55,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,52,50,10,69,78,67,79,68,73,78,71,32,57, 48,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,55,49,56,48, 10,55,49,56,48,10,54,57,56,48,10,54,57,56,48,10, 54,53,56,48,10,54,53,56,48,10,54,51,56,48,10,54, 51,56,48,10,54,49,56,48,10,54,49,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,52,51, 10,69,78,67,79,68,73,78,71,32,57,48,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,54,57,56,48,10,55,49,56,48,10, 54,57,56,48,10,54,53,56,48,10,54,51,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,52,52,10,69,78,67,79, 68,73,78,71,32,57,48,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,54,49,56, 48,10,54,49,56,48,10,55,49,56,48,10,54,57,56,48, 10,54,53,56,48,10,54,51,56,48,10,54,53,56,48,10, 54,57,56,48,10,55,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,53,10,69,78,67,79,68,73,78,71,32, 57,48,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,50,67,48,48,10,54,67,48,48, 10,70,70,56,48,10,54,67,48,48,10,50,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,52, 54,10,69,78,67,79,68,73,78,71,32,57,48,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,65,48,48,10,49,66,48,48,10,70,70,56,48, 10,49,66,48,48,10,49,65,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,52,55,10,69,78,67, 79,68,73,78,71,32,57,48,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,57,56,48,10,55,70,56,48,10,54,57,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,52,56,10,69,78,67,79,68,73,78,71, 32,57,48,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,53,56, 48,10,55,70,56,48,10,54,53,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,57,10,69,78,67,79,68,73,78,71,32,57,48,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,48,48,48,10,50,48,48,48,10,49,69, 48,48,10,51,49,48,48,10,52,56,56,48,10,52,56,56, 48,10,52,52,56,48,10,52,52,56,48,10,50,51,48,48, 10,49,69,48,48,10,48,49,48,48,10,48,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,52,65,10,69,78, 67,79,68,73,78,71,32,57,48,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,52,66,10,69,78,67,79,68,73,78, 71,32,57,48,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,49,69,48,48,10,49,69,48,48,10,50,68, 48,48,10,50,68,48,48,10,50,68,48,48,10,52,67,56, 48,10,52,67,56,48,10,55,70,56,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,52,67,10,69,78,67,79,68,73,78,71,32,57,48,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,69,51,56,48,10,68,53,56,48,10,67,57,56, 48,10,67,49,56,48,10,67,49,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,68,10,69, 78,67,79,68,73,78,71,32,57,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,57,56,48,10,67, 57,56,48,10,68,53,56,48,10,68,53,56,48,10,68,53, 56,48,10,69,51,56,48,10,67,49,56,48,10,70,70,56, 48,10,67,49,56,48,10,70,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,52,69,10,69,78,67,79,68,73, 78,71,32,57,48,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,49,69,48,48,10,50, 68,48,48,10,50,68,48,48,10,50,68,48,48,10,50,68, 48,48,10,49,69,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,52,70,10,69,78,67,79,68,73,78,71,32,57,48, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,53,48,10, 69,78,67,79,68,73,78,71,32,57,48,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,70,56,48, 10,67,57,56,48,10,67,57,56,48,10,68,68,56,48,10, 70,70,56,48,10,67,57,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,57,56,48,10,67,57,56,48,10,67,57, 56,48,10,67,57,56,48,10,70,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,49,10,69,78,67,79,68, 73,78,71,32,57,48,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,53,50,10,69,78,67,79,68,73,78,71,32,57, 48,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,55,70,56,48, 10,52,67,56,48,10,52,67,56,48,10,50,68,48,48,10, 50,68,48,48,10,50,68,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,53,51, 10,69,78,67,79,68,73,78,71,32,57,48,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,57,56,48, 10,68,53,56,48,10,69,51,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,53,52,10,69,78,67,79, 68,73,78,71,32,57,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,56,48,10,67,49,56, 48,10,70,70,56,48,10,67,49,56,48,10,69,51,56,48, 10,68,53,56,48,10,68,53,56,48,10,68,53,56,48,10, 67,57,56,48,10,67,57,56,48,10,67,49,56,48,10,67, 49,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,53,10,69,78,67,79,68,73,78,71,32, 57,48,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,50,68,48,48,10,50,68,48,48, 10,50,68,48,48,10,50,68,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,53, 54,10,69,78,67,79,68,73,78,71,32,57,48,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 51,70,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,53,55,10,69,78,67, 79,68,73,78,71,32,57,48,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,67,57, 56,48,10,67,57,56,48,10,67,57,56,48,10,67,57,56, 48,10,67,57,56,48,10,67,57,56,48,10,67,57,56,48, 10,70,70,56,48,10,68,68,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,53,56,10,69,78,67,79,68,73,78,71, 32,57,48,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,57,10,69,78,67,79,68,73,78,71,32,57,48,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,50,49,48, 48,10,50,49,48,48,10,50,49,48,48,10,52,48,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,53,65,10,69,78, 67,79,68,73,78,71,32,57,48,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,50,49,48,48,10,52,48,56,48,10,52,48,56, 48,10,50,49,48,48,10,49,50,48,48,10,48,67,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,53,66,10,69,78,67,79,68,73,78, 71,32,57,48,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,49,50,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,53,67,10,69,78,67,79,68,73,78,71,32,57,48,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,50,49,48,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,56,48,10,52,48,56,48,10,50,49,48, 48,10,49,69,48,48,10,48,48,48,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,68,10,69, 78,67,79,68,73,78,71,32,57,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,52,67,56,48,10,53,50,56,48,10,53,50, 56,48,10,52,67,56,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,53,69,10,69,78,67,79,68,73, 78,71,32,57,48,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 57,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,53,70,10,69,78,67,79,68,73,78,71,32,57,48, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,50, 49,48,48,10,52,67,56,48,10,53,69,56,48,10,52,67, 56,48,10,53,50,56,48,10,50,49,48,48,10,49,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,54,48,10, 69,78,67,79,68,73,78,71,32,57,48,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,68,56,48,10,54,68,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,68,56,48,10,54,68,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,49,10,69,78,67,79,68, 73,78,71,32,57,48,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,51,48,48,10,51,51,48,48, 10,48,48,48,48,10,55,70,56,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,54,50,10,69,78,67,79,68,73,78,71,32,57, 48,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,55,70,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,50,49,48,48,10,50,49,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,54,51, 10,69,78,67,79,68,73,78,71,32,57,48,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,51,48, 48,10,51,51,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,51,70,48,48,10, 49,69,48,48,10,49,69,48,48,10,51,70,48,48,10,51, 51,48,48,10,50,49,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,54,52,10,69,78,67,79, 68,73,78,71,32,57,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,51,48,48,10,51,51,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,50,48,48,10,49,50,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,53,10,69,78,67,79,68,73,78,71,32, 57,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,51,48,48,10,51,51,48,48,10,48,48,48, 48,10,49,69,48,48,10,50,49,48,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,54, 54,10,69,78,67,79,68,73,78,71,32,57,48,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,68, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,54,68,56,48, 10,54,68,56,48,10,54,68,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,54,55,10,69,78,67, 79,68,73,78,71,32,57,48,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,70,56, 48,10,52,67,48,48,10,52,67,48,48,10,52,67,48,48, 10,51,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,54,56,10,69,78,67,79,68,73,78,71, 32,57,48,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,57,56,48,10,54,68,56,48,10,54,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,57,10,69,78,67,79,68,73,78,71,32,57,48,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 51,48,48,10,51,51,48,48,10,48,48,48,48,10,54,48, 48,48,10,49,56,48,48,10,48,54,48,48,10,48,49,56, 48,10,48,54,48,48,10,49,56,48,48,10,54,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,54,65,10,69,78, 67,79,68,73,78,71,32,57,48,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,52,48,48,10, 48,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,54,66,10,69,78,67,79,68,73,78, 71,32,57,48,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,48,48,10,52,49,48,48,10,52, 49,48,48,10,52,49,48,48,10,50,50,48,48,10,50,50, 56,48,10,51,66,48,48,10,53,69,48,48,10,57,52,48, 48,10,49,52,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,54,67,10,69,78,67,79,68,73,78,71,32,57,48,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,51,48,48,10,51, 51,48,48,10,54,49,56,48,10,55,57,67,48,10,54,68, 56,48,10,69,55,56,48,10,54,49,56,48,10,51,51,48, 48,10,51,51,48,48,10,49,69,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,68,10,69, 78,67,79,68,73,78,71,32,57,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,51,68,56,48,10,55,70,56,48,10,54,70, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,54,69,10,69,78,67,79,68,73, 78,71,32,57,48,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,52,48, 48,10,55,70,56,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,54,70,10,69,78,67,79,68,73,78,71,32,57,48, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,51,56,48,10,55,70,56,48,10,54, 53,56,48,10,54,57,56,48,10,55,70,56,48,10,55,49, 56,48,10,54,49,56,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,55,48,10, 69,78,67,79,68,73,78,71,32,57,48,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,54,49,56,48,10,54,68,56,48,10,55,70,56,48,10, 55,55,56,48,10,54,53,56,48,10,54,68,56,48,10,54, 68,56,48,10,54,49,56,48,10,54,68,56,48,10,54,68, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,49,10,69,78,67,79,68, 73,78,71,32,57,48,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,50,49,48,48,10, 51,57,56,48,10,55,70,56,48,10,55,55,48,48,10,49, 50,48,48,10,49,50,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,55,50,10,69,78,67,79,68,73,78,71,32,57, 48,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,50,48,48,10,49,50,48,48,10,51,66,56,48,10, 55,70,56,48,10,54,55,48,48,10,50,49,48,48,10,52, 48,56,48,10,52,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,55,51, 10,69,78,67,79,68,73,78,71,32,57,48,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,66,48,48,10,48,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,55,52,10,69,78,67,79, 68,73,78,71,32,57,48,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 51,48,48,10,55,69,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,53,10,69,78,67,79,68,73,78,71,32, 57,48,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,51,48,48, 10,55,51,56,48,10,54,49,56,48,10,54,68,56,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,51, 51,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,55, 54,10,69,78,67,79,68,73,78,71,32,57,48,55,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,68,56, 48,10,54,51,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,51,56,48,10,54,53,56,48,10, 51,57,56,48,10,48,48,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,55,55,10,69,78,67, 79,68,73,78,71,32,57,48,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,54,49,56, 48,10,54,48,48,48,10,51,69,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,49,56,48,10,51,70,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,55,56,10,69,78,67,79,68,73,78,71, 32,57,48,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,66,48,48,10,48,69,48,48,10,48,48,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,57,10,69,78,67,79,68,73,78,71,32,57,48,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,51, 48,48,10,55,51,56,48,10,54,49,56,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,51,51,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,55,65,10,69,78, 67,79,68,73,78,71,32,57,48,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,68,56,48,10,54,51,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,51,56,48, 10,54,53,56,48,10,51,57,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,55,66,10,69,78,67,79,68,73,78, 71,32,57,48,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,70,67,48,10,48,51, 48,48,10,54,51,48,48,10,54,54,48,48,10,51,54,48, 48,10,51,54,48,48,10,49,67,48,48,10,49,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,55,67,10,69,78,67,79,68,73,78,71,32,57,48,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,56,48,48,10,51,48,48,48,10,50, 48,48,48,10,54,48,48,48,10,65,48,48,48,10,54,48, 48,48,10,51,48,48,48,10,50,56,48,48,10,50,52,48, 48,10,65,56,48,48,10,66,48,48,48,10,66,70,56,48, 10,67,48,48,48,10,70,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,68,10,69, 78,67,79,68,73,78,71,32,57,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,51,51,48,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,55,69,10,69,78,67,79,68,73, 78,71,32,57,48,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,54, 51,48,48,10,67,49,56,48,10,67,49,56,48,10,70,70, 56,48,10,51,54,48,48,10,51,54,48,48,10,70,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,55,70,10,69,78,67,79,68,73,78,71,32,57,48, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,70,48,48,10,51, 70,48,48,10,51,70,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,56,48,10, 69,78,67,79,68,73,78,71,32,57,48,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,51,48,48,10, 48,51,48,48,10,49,70,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,51,48,48,10,49,68,48,48,10,67,48, 67,48,10,54,49,56,48,10,51,51,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,49,10,69,78,67,79,68, 73,78,71,32,57,48,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,56,48,48,10,67,67,48,48,10,48,67,48,48,10,55, 67,48,48,10,67,67,48,48,10,67,67,48,48,10,67,68, 52,48,10,55,53,52,48,10,48,48,48,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,56,50,10,69,78,67,79,68,73,78,71,32,57, 48,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,51,48,48,10, 57,52,56,48,10,49,48,56,48,10,55,51,56,48,10,57, 52,56,48,10,57,52,56,48,10,66,53,56,48,10,53,50, 56,48,10,48,48,48,48,10,70,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,56,51, 10,69,78,67,79,68,73,78,71,32,57,48,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,57,50,52,48,10, 52,50,56,48,10,48,69,48,48,10,68,50,67,48,10,49, 50,48,48,10,53,54,56,48,10,56,65,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,56,52,10,69,78,67,79, 68,73,78,71,32,57,48,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,57,53,48,48,10,57,53,48,48, 10,65,52,56,48,10,65,52,56,48,10,65,52,56,48,10, 65,52,56,48,10,65,52,56,48,10,57,53,48,48,10,57, 53,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,53,10,69,78,67,79,68,73,78,71,32, 57,48,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,48,56,48,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,70,70,56,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,56, 54,10,69,78,67,79,68,73,78,71,32,57,48,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,56,48,48,10,49,52,48, 48,10,50,50,48,48,10,48,57,48,48,10,70,67,56,48, 10,56,50,52,48,10,70,67,56,48,10,48,57,48,48,10, 50,50,48,48,10,49,52,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,56,55,10,69,78,67, 79,68,73,78,71,32,57,48,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,50,48, 48,10,48,51,48,48,10,48,69,56,48,10,49,51,48,48, 10,49,50,48,48,10,49,48,48,48,10,54,55,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,56,56,10,69,78,67,79,68,73,78,71, 32,57,48,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,48,56, 48,48,10,57,67,56,48,10,54,66,48,48,10,50,65,48, 48,10,53,68,48,48,10,52,57,48,48,10,53,68,48,48, 10,50,65,48,48,10,54,66,48,48,10,57,67,56,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,57,10,69,78,67,79,68,73,78,71,32,57,48,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,67,48,48,10,50,50, 48,48,10,52,49,48,48,10,56,48,56,48,10,56,48,56, 48,10,69,51,56,48,10,65,50,56,48,10,57,52,56,48, 10,53,53,48,48,10,50,65,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,56,65,10,69,78, 67,79,68,73,78,71,32,57,48,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,70,70,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,52,56,48,10,57,52,56,48,10,52,57,48,48, 10,50,65,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,56,66,10,69,78,67,79,68,73,78, 71,32,57,48,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,65,48,48,10,53,49,48,48,10,55,48, 56,48,10,53,48,56,48,10,48,56,56,48,10,56,56,56, 48,10,56,52,56,48,10,52,49,48,48,10,50,50,48,48, 10,49,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,56,67,10,69,78,67,79,68,73,78,71,32,57,49,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,50,67,48,48,10,51,50,48,48,10,51,57, 48,48,10,54,51,48,48,10,57,52,56,48,10,57,52,56, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,68,10,69, 78,67,79,68,73,78,71,32,57,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,51,48, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,56,69,10,69,78,67,79,68,73, 78,71,32,57,49,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,56,70,10,69,78,67,79,68,73,78,71,32,57,49, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,56,48,10, 48,56,48,48,10,49,67,48,48,10,51,54,48,48,10,54, 51,48,48,10,67,49,56,48,10,54,51,48,48,10,51,54, 48,48,10,49,67,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,57,48,10, 69,78,67,79,68,73,78,71,32,57,49,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,67,49,56,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,56, 48,48,10,70,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,49,10,69,78,67,79,68, 73,78,71,32,57,49,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,56,48,10,48,56,48,48,10,49,67,48,48,10, 51,54,48,48,10,54,51,48,48,10,70,70,56,48,10,54, 51,48,48,10,51,54,48,48,10,49,67,48,48,10,48,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,57,50,10,69,78,67,79,68,73,78,71,32,57, 49,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,56,48,48, 10,49,67,48,48,10,51,54,48,48,10,54,51,48,48,10, 70,70,56,48,10,54,51,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,56,48,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,57,51, 10,69,78,67,79,68,73,78,71,32,57,49,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,48,48,48,10,54,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,57,52,10,69,78,67,79, 68,73,78,71,32,57,49,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,50,49,48,48,10,52,48,56,48,10, 52,48,56,48,10,50,49,48,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,53,10,69,78,67,79,68,73,78,71,32, 57,49,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,57, 54,10,69,78,67,79,68,73,78,71,32,57,49,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,51,69,48, 48,10,51,67,48,48,10,51,67,48,48,10,51,56,48,48, 10,51,56,48,48,10,51,48,48,48,10,51,48,48,48,10, 50,48,48,48,10,50,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,57,55,10,69,78,67, 79,68,73,78,71,32,57,49,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,65,65,48,48,10,48,48, 48,48,10,66,70,56,48,10,50,48,56,48,10,65,48,56, 48,10,50,56,56,48,10,57,48,56,48,10,51,69,56,48, 10,57,48,56,48,10,50,56,56,48,10,65,48,56,48,10, 50,48,56,48,10,51,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,57,56,10,69,78,67,79,68,73,78,71, 32,57,49,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,69,48,48,10,56,50,48,48,10,65,65, 56,48,10,56,48,48,48,10,65,48,56,48,10,56,56,48, 48,10,56,52,56,48,10,66,69,48,48,10,56,52,56,48, 10,56,56,48,48,10,69,48,56,48,10,48,48,48,48,10, 50,65,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,57,10,69,78,67,79,68,73,78,71,32,57,49,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,48,48,10,49,57,48,48,10,51,57,48,48,10,54,49, 56,48,10,65,49,52,48,10,65,49,52,48,10,65,49,52, 48,10,65,49,52,48,10,66,70,52,48,10,56,48,52,48, 10,56,48,52,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,57,65,10,69,78, 67,79,68,73,78,71,32,57,49,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,56,48, 52,48,10,57,49,52,48,10,65,50,52,48,10,56,67,52, 48,10,57,49,52,48,10,65,50,52,48,10,56,48,52,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,57,66,10,69,78,67,79,68,73,78, 71,32,57,49,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,49,48,48,10, 48,50,48,48,10,48,54,48,48,10,48,52,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,57,67,10,69,78,67,79,68,73,78,71,32,57,49,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,68,10,69, 78,67,79,68,73,78,71,32,57,49,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,52,48,48,10,48,54,48,48, 10,48,50,48,48,10,48,49,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,57,69,10,69,78,67,79,68,73, 78,71,32,57,49,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,50,48,48,48, 10,49,48,48,48,10,49,56,48,48,10,48,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,57,70,10,69,78,67,79,68,73,78,71,32,57,49, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,65,48,10, 69,78,67,79,68,73,78,71,32,57,49,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,56,48,48,10,49,56,48, 48,10,49,48,48,48,10,50,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,49,10,69,78,67,79,68, 73,78,71,32,57,49,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,49,70,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,65,50,10,69,78,67,79,68,73,78,71,32,57, 49,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,65,51, 10,69,78,67,79,68,73,78,71,32,57,49,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,70,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,65,52,10,69,78,67,79, 68,73,78,71,32,57,49,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,51,69, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,53,10,69,78,67,79,68,73,78,71,32, 57,49,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,65, 54,10,69,78,67,79,68,73,78,71,32,57,49,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 54,48,48,10,48,54,48,48,10,48,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,54,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,51,69,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,65,55,10,69,78,67, 79,68,73,78,71,32,57,49,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,65,56,10,69,78,67,79,68,73,78,71, 32,57,49,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,56,48,48,10,51,48,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,57,10,69,78,67,79,68,73,78,71,32,57,49,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,54,48,48,10,48,51,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,65,65,10,69,78, 67,79,68,73,78,71,32,57,49,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,65,66,10,69,78,67,79,68,73,78, 71,32,57,49,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,65,67,10,69,78,67,79,68,73,78,71,32,57,49,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,68,10,69, 78,67,79,68,73,78,71,32,57,49,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,65,69,10,69,78,67,79,68,73, 78,71,32,57,49,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,65,70,10,69,78,67,79,68,73,78,71,32,57,49, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,66,48,10, 69,78,67,79,68,73,78,71,32,57,49,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,51,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,49,10,69,78,67,79,68, 73,78,71,32,57,49,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,51,48,48,48,10,49,56,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,54,48,48,10,48,51,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,66,50,10,69,78,67,79,68,73,78,71,32,57, 49,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,48,48,48,10,67,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,66,51, 10,69,78,67,79,68,73,78,71,32,57,49,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,56, 48,48,10,49,56,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,66,52,10,69,78,67,79, 68,73,78,71,32,57,49,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,53,10,69,78,67,79,68,73,78,71,32, 57,49,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,49,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,66, 54,10,69,78,67,79,68,73,78,71,32,57,49,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,49,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,66,55,10,69,78,67, 79,68,73,78,71,32,57,49,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,56,56,48,48,10,56,56,48,48, 10,52,56,48,48,10,52,56,48,48,10,50,56,48,48,10, 50,56,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,66,56,10,69,78,67,79,68,73,78,71, 32,57,49,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,57,10,69,78,67,79,68,73,78,71,32,57,49,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,66,65,10,69,78, 67,79,68,73,78,71,32,57,49,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,70,70,67,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,66,66,10,69,78,67,79,68,73,78, 71,32,57,49,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,66,67,10,69,78,67,79,68,73,78,71,32,57,49,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,68,10,69, 78,67,79,68,73,78,71,32,57,49,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,66,69,10,69,78,67,79,68,73, 78,71,32,57,49,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,66,70,10,69,78,67,79,68,73,78,71,32,57,49, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,67,48,10, 69,78,67,79,68,73,78,71,32,57,49,53,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,49,69,48,48,10,50,68,48,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 67,56,48,10,52,67,56,48,10,50,68,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,49,10,69,78,67,79,68, 73,78,71,32,57,49,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,67,48,48, 10,49,69,48,48,10,50,68,48,48,10,52,67,56,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 67,56,48,10,50,68,48,48,10,49,69,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,67,50,10,69,78,67,79,68,73,78,71,32,57, 49,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,50,68,48,48,10,52,67,56,48,10,52,67,56,48,10, 52,67,56,48,10,52,67,56,48,10,52,67,56,48,10,50, 68,48,48,10,49,69,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,51,67,51, 10,69,78,67,79,68,73,78,71,32,57,49,53,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,69,48,48, 10,49,69,48,48,10,51,70,48,48,10,51,70,48,48,10, 54,68,56,48,10,54,68,56,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,67,52,10,69,78,67,79, 68,73,78,71,32,57,49,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,49,69,48,48,10,49,69,48,48, 10,51,70,48,48,10,51,70,48,48,10,54,68,56,48,10, 54,68,56,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,53,10,69,78,67,79,68,73,78,71,32, 57,49,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,49,69,48,48,10,49,69,48,48,10,51,70,48,48, 10,51,70,48,48,10,54,68,56,48,10,54,68,56,48,10, 55,70,56,48,10,48,67,48,48,10,48,67,48,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,67, 54,10,69,78,67,79,68,73,78,71,32,57,49,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,67,48,48,10,54,68,56,48, 10,48,70,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,51,67,55,10,69,78,67, 79,68,73,78,71,32,57,49,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,67,48,48,10,54,68,56,48,10,48,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,67,56,10,69,78,67,79,68,73,78,71, 32,57,49,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,51,67,48, 48,10,54,68,56,48,10,48,70,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,57,10,69,78,67,79,68,73,78,71,32,57,49,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,67,65,10,69,78, 67,79,68,73,78,71,32,57,49,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,51,67,66,10,69,78,67,79,68,73,78, 71,32,57,49,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,67,67,10,69,78,67,79,68,73,78,71,32,57,49,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,68,10,69, 78,67,79,68,73,78,71,32,57,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 54,68,56,48,10,52,67,56,48,10,52,67,56,48,10,52, 56,56,48,10,52,48,56,48,10,52,48,56,48,10,52,48, 56,48,10,52,48,56,48,10,52,48,56,48,10,52,48,56, 48,10,52,48,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,67,69,10,69,78,67,79,68,73, 78,71,32,57,49,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,50,56,48,10,49, 65,56,48,10,51,50,56,48,10,55,67,56,48,10,67,49, 48,48,10,55,69,48,48,10,51,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,51,67,70,10,69,78,67,79,68,73,78,71,32,57,49, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,51, 70,48,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,68,48,10, 69,78,67,79,68,73,78,71,32,57,49,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,48,10,69,78,67,79,68, 73,78,71,32,57,50,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,52,56,48,48,10,54,56,48,48,10,53,56,48,48, 10,52,56,48,48,10,52,56,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,48, 67,48,48,10,48,50,48,48,10,48,50,48,48,10,48,50, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,48,49,10,69,78,67,79,68,73,78,71,32,57, 50,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,52,48,48,48,10,50,48,48,48,10,49,48,48,48, 10,54,67,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,48,67,48,48,10,48,50,56,48,10,48, 50,56,48,10,48,51,56,48,10,48,50,56,48,10,48,50, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,48,50, 10,69,78,67,79,68,73,78,71,32,57,50,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,51,48,48,48,10,52,48,48, 48,10,50,48,48,48,10,49,48,48,48,10,54,48,48,48, 10,49,67,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,65,56,48,10,48,50,56,48,10,48, 49,48,48,10,48,50,56,48,10,48,50,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,48,51,10,69,78,67,79, 68,73,78,71,32,57,50,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,55,48,48,48,10,52,48,48,48,10,55,48,48, 48,10,52,48,48,48,10,55,48,48,48,10,49,67,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,65,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 50,56,48,10,48,50,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,52,10,69,78,67,79,68,73,78,71,32, 57,50,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,55,48, 48,48,10,52,48,48,48,10,54,48,48,48,10,52,48,48, 48,10,55,48,48,48,10,48,67,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,51,56,48,10,48,49,48,48,10,48,49,48,48,10,48, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,48, 53,10,69,78,67,79,68,73,78,71,32,57,50,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,52,48, 48,48,10,54,48,48,48,10,52,48,48,48,10,55,48,48, 48,10,49,50,48,48,10,49,65,48,48,10,49,54,48,48, 10,49,50,48,48,10,48,51,48,48,10,48,52,56,48,10, 48,52,56,48,10,48,53,56,48,10,48,51,56,48,10,48, 48,52,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,48,54,10,69,78,67, 79,68,73,78,71,32,57,50,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,56,48,48,10,55,56, 48,48,10,52,56,48,48,10,52,56,48,48,10,48,67,48, 48,10,49,48,48,48,10,49,48,48,48,10,49,48,48,48, 10,48,69,56,48,10,48,50,56,48,10,48,51,48,48,10, 48,50,56,48,10,48,50,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,48,55,10,69,78,67,79,68,73,78,71, 32,57,50,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,54, 48,48,48,10,53,48,48,48,10,54,48,48,48,10,53,48, 48,48,10,54,48,48,48,10,49,67,48,48,10,49,48,48, 48,10,49,56,48,48,10,49,48,48,48,10,49,69,48,48, 10,48,50,48,48,10,48,50,48,48,10,48,50,48,48,10, 48,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,56,10,69,78,67,79,68,73,78,71,32,57,50,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,55,56,48,48,10,54, 67,48,48,10,54,67,48,48,10,55,56,48,48,10,54,67, 48,48,10,54,67,48,48,10,55,56,48,48,10,48,55,56, 48,10,48,67,48,48,10,48,67,48,48,10,48,55,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,48,57,10,69,78, 67,79,68,73,78,71,32,57,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,54,54,48,48,10,54,54,48,48,10,54, 54,48,48,10,55,69,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,48,48,48,48,10,49,70,56, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,48,65,10,69,78,67,79,68,73,78, 71,32,57,50,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,70,56,48,10,48,67,48,48,10,48,67,48, 48,10,48,70,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,48,66,10,69,78,67,79,68,73,78,71,32,57,50,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,54,54,48,48,10, 54,54,48,48,10,54,54,48,48,10,51,67,48,48,10,51, 67,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,70,56,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,67,10,69, 78,67,79,68,73,78,71,32,57,50,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,70,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,48,68,10,69,78,67,79,68,73, 78,71,32,57,50,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,51,67,48,48,10,54,54,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,54,48,48,10,51,67,48,48,10,48, 48,48,48,10,49,70,48,48,10,49,57,56,48,10,49,57, 56,48,10,49,70,48,48,10,49,69,48,48,10,49,66,48, 48,10,49,57,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,48,69,10,69,78,67,79,68,73,78,71,32,57,50, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,54,48,48,48,10,54,48,48,48,10,51,56,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,56,48,48,10,48, 55,48,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,48,70,10, 69,78,67,79,68,73,78,71,32,57,50,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,51,67,48,48,10,54,48,48,48, 10,54,48,48,48,10,51,56,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,56,48,48,10,48,55,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,55,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,48,10,69,78,67,79,68, 73,78,71,32,57,50,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,55,48,48,48,10,52,56,48,48,10,52,56,48,48, 10,52,56,48,48,10,55,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,69,48,48,10,48, 51,56,48,10,48,50,48,48,10,48,51,48,48,10,48,50, 48,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,49,49,10,69,78,67,79,68,73,78,71,32,57, 50,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,53,48,48,48, 10,54,54,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,54,48,48,10,48,48,56,48,10,48, 49,56,48,10,48,48,56,48,10,48,48,56,48,10,48,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,49,50, 10,69,78,67,79,68,73,78,71,32,57,50,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,53,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,54,54,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,54,48,48,10,48,49,48,48,10,48,50,56,48,10,48, 48,56,48,10,48,49,48,48,10,48,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,49,51,10,69,78,67,79, 68,73,78,71,32,57,50,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,54,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,53,48,48,48,10,54,54,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,54,48,48,10, 48,49,48,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,56,48,10,48,51,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,52,10,69,78,67,79,68,73,78,71,32, 57,50,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,53,48,48,48,10,53,48,48,48,10,53,48,48, 48,10,54,54,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,54,48,48,10,48,48,56,48,10, 48,49,56,48,10,48,50,56,48,10,48,51,67,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,49, 53,10,69,78,67,79,68,73,78,71,32,57,50,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,52,56,48,48,10,54,56, 48,48,10,53,56,48,48,10,52,56,48,48,10,52,56,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,69,48,48, 10,49,50,48,48,10,48,50,56,48,10,48,50,56,48,10, 48,51,48,48,10,48,50,56,48,10,48,50,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,49,54,10,69,78,67, 79,68,73,78,71,32,57,50,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,51,48,48,48,10,52,48,48,48,10,50,48, 48,48,10,49,48,48,48,10,54,48,48,48,10,49,52,48, 48,10,49,52,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,52,56,48,10,48,54,56,48,10, 48,53,56,48,10,48,52,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,49,55,10,69,78,67,79,68,73,78,71, 32,57,50,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,55, 48,48,48,10,52,48,48,48,10,54,48,48,48,10,52,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,66,48,48, 10,48,50,56,48,10,48,51,48,48,10,48,50,56,48,10, 48,51,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,56,10,69,78,67,79,68,73,78,71,32,57,50,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,52, 48,48,48,10,52,48,48,48,10,52,48,48,48,10,51,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,49,69,48, 48,10,49,50,48,48,10,49,50,48,48,10,48,52,56,48, 10,48,54,56,48,10,48,53,56,48,10,48,52,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,49,57,10,69,78, 67,79,68,73,78,71,32,57,50,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,55,67,48,48,10,54,48,48,48,10,54, 48,48,48,10,55,56,48,48,10,54,48,48,48,10,54,48, 48,48,10,55,67,48,48,10,48,48,48,48,10,51,49,56, 48,10,51,66,56,48,10,51,70,56,48,10,51,53,56,48, 10,51,49,56,48,10,51,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,49,65,10,69,78,67,79,68,73,78, 71,32,57,50,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 51,48,48,48,10,52,48,48,48,10,50,48,48,48,10,49, 48,48,48,10,54,48,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,48,66,48, 48,10,48,50,56,48,10,48,51,48,48,10,48,50,56,48, 10,48,51,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,49,66,10,69,78,67,79,68,73,78,71,32,57,50,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,55,48,48,48,10, 52,48,48,48,10,54,48,48,48,10,52,48,48,48,10,55, 48,48,48,10,48,69,48,48,10,49,48,48,48,10,48,67, 48,48,10,48,50,48,48,10,49,68,56,48,10,48,50,48, 48,10,48,50,48,48,10,48,50,48,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,67,10,69, 78,67,79,68,73,78,71,32,57,50,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,55,67,48,48,10,54,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,48,55,56,48,10,48,67, 48,48,10,48,67,48,48,10,48,55,48,48,10,48,49,56, 48,10,48,49,56,48,10,48,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,49,68,10,69,78,67,79,68,73, 78,71,32,57,50,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,51,56,48,48,10,54,67,48,48,10,54,48,48,48,10, 54,67,48,48,10,54,52,48,48,10,54,67,48,48,10,51, 56,48,48,10,48,55,56,48,10,48,67,48,48,10,48,67, 48,48,10,48,55,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,49,69,10,69,78,67,79,68,73,78,71,32,57,50, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,55,56,48,48, 10,54,67,48,48,10,54,67,48,48,10,55,56,48,48,10, 55,56,48,48,10,54,67,48,48,10,54,67,48,48,10,48, 55,56,48,10,48,67,48,48,10,48,67,48,48,10,48,55, 48,48,10,48,49,56,48,10,48,49,56,48,10,48,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,49,70,10, 69,78,67,79,68,73,78,71,32,57,50,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,54,54,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,55,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,55,48,48,10,48,49, 56,48,10,48,49,56,48,10,48,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,50,48,10,69,78,67,79,68, 73,78,71,32,57,50,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,51,67,48,48,10,54,48,48,48,10,54,48,48,48, 10,51,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 55,56,48,48,10,48,70,48,48,10,48,68,56,48,10,48, 68,56,48,10,48,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,50,49,10,69,78,67,79,68,73,78,71,32,57, 50,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,53,48,48,48,10,53,48,48,48,10,53,48,48,48, 10,54,48,48,48,10,49,67,48,48,10,49,48,48,48,10, 49,56,48,48,10,49,48,48,48,10,49,69,48,48,10,48, 50,48,48,10,48,50,48,48,10,48,50,48,48,10,48,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,50,50, 10,69,78,67,79,68,73,78,71,32,57,50,53,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,52,48, 48,10,51,67,48,48,10,51,56,48,48,10,51,48,48,48, 10,55,48,48,48,10,70,54,48,48,10,66,66,48,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,51, 49,56,48,10,51,66,48,48,10,51,54,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,50,51,10,69,78,67,79, 68,73,78,71,32,57,50,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 49,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,52,10,69,78,67,79,68,73,78,71,32, 57,50,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,54,54, 48,48,10,55,54,48,48,10,55,69,48,48,10,55,69,48, 48,10,54,69,48,48,10,54,54,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,50, 53,10,69,78,67,79,68,73,78,71,32,57,50,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,57, 56,48,10,49,57,56,48,10,51,51,48,48,10,51,51,48, 48,10,54,54,48,48,10,54,54,48,48,10,48,67,48,48, 10,49,57,56,48,10,49,57,56,48,10,51,51,48,48,10, 51,51,48,48,10,54,54,48,48,10,54,54,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,50,54,10,69,78,67, 79,68,73,78,71,32,57,50,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,51,51, 48,48,10,54,49,56,48,10,54,49,56,48,10,54,49,56, 48,10,51,48,48,48,10,49,56,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,52,48,10,69,78,67,79,68,73,78,71, 32,57,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,48,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,54,67,48,48,10, 55,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,49,10,69,78,67,79,68,73,78,71,32,57,50,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,55,70,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,52,50,10,69,78, 67,79,68,73,78,71,32,57,50,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,55,70,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,52,51,10,69,78,67,79,68,73,78, 71,32,57,50,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,56,48,10,54,49,56,48,10,54,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,52,52,10,69,78,67,79,68,73,78,71,32,57,50,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,54,68,56,48,10,54,68,56,48,10,54, 68,56,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,54,68,56, 48,10,54,68,56,48,10,54,68,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,53,10,69, 78,67,79,68,73,78,71,32,57,50,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,49,56,48,10, 55,51,56,48,10,55,70,56,48,10,54,68,56,48,10,55, 70,56,48,10,55,51,56,48,10,54,49,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,52,54,10,69,78,67,79,68,73, 78,71,32,57,50,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,55,56,48,10, 48,55,56,48,10,54,55,56,48,10,54,55,56,48,10,54, 48,48,48,10,54,48,48,48,10,54,48,48,48,10,54,48, 48,48,10,54,55,56,48,10,54,55,56,48,10,48,55,56, 48,10,48,55,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,52,55,10,69,78,67,79,68,73,78,71,32,57,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,51,56,48,10,48,51,56,48,10,48,51,56,48,10, 48,66,56,48,10,48,66,56,48,10,48,66,56,48,10,48, 56,48,48,10,69,56,48,48,10,69,56,48,48,10,69,56, 48,48,10,69,48,48,48,10,69,48,48,48,10,69,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,52,56,10, 69,78,67,79,68,73,78,71,32,57,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,55,56,48,10, 48,55,56,48,10,48,55,56,48,10,53,55,56,48,10,53, 55,56,48,10,53,55,56,48,10,53,55,56,48,10,53,48, 48,48,10,53,48,48,48,10,53,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,57,10,69,78,67,79,68, 73,78,71,32,57,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,69,56,48,10, 69,69,56,48,10,69,69,56,48,10,69,69,56,48,10,69, 69,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,52,65,10,69,78,67,79,68,73,78,71,32,57, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,67,48,48,10,67,67,48,48, 10,67,67,48,48,10,54,54,48,48,10,54,54,48,48,10, 54,54,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,54,48, 10,69,78,67,79,68,73,78,71,32,57,51,49,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,69,48, 48,10,52,49,48,48,10,56,48,56,48,10,56,56,56,48, 10,57,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,57,67,56,48,10,56, 48,56,48,10,52,49,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,54,49,10,69,78,67,79, 68,73,78,71,32,57,51,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,52,49,48, 48,10,56,48,56,48,10,57,67,56,48,10,65,50,56,48, 10,56,50,56,48,10,56,52,56,48,10,56,56,56,48,10, 57,48,56,48,10,66,69,56,48,10,56,48,56,48,10,52, 49,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,50,10,69,78,67,79,68,73,78,71,32, 57,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,52,49,48,48,10,56,48,56, 48,10,57,67,56,48,10,65,50,56,48,10,56,50,56,48, 10,56,67,56,48,10,56,50,56,48,10,65,50,56,48,10, 57,67,56,48,10,56,48,56,48,10,52,49,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,54, 51,10,69,78,67,79,68,73,78,71,32,57,51,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,52,49,48,48,10,56,48,56,48,10,56,56,56, 48,10,57,56,56,48,10,65,56,56,48,10,66,67,56,48, 10,56,56,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,48,56,48,10,52,49,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,54,52,10,69,78,67, 79,68,73,78,71,32,57,51,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,52,49, 48,48,10,56,48,56,48,10,66,69,56,48,10,65,48,56, 48,10,65,48,56,48,10,66,67,56,48,10,56,50,56,48, 10,56,50,56,48,10,66,67,56,48,10,56,48,56,48,10, 52,49,48,48,10,51,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,54,53,10,69,78,67,79,68,73,78,71, 32,57,51,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,49,48,48,10,56,48, 56,48,10,57,67,56,48,10,65,48,56,48,10,65,48,56, 48,10,66,67,56,48,10,65,50,56,48,10,65,50,56,48, 10,57,67,56,48,10,56,48,56,48,10,52,49,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,54,10,69,78,67,79,68,73,78,71,32,57,51,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,56,48,56,48,10,66,69, 56,48,10,56,50,56,48,10,56,52,56,48,10,56,52,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,48,56,48,10,52,49,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,54,55,10,69,78, 67,79,68,73,78,71,32,57,51,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,52, 49,48,48,10,56,48,56,48,10,57,67,56,48,10,65,50, 56,48,10,65,50,56,48,10,57,67,56,48,10,65,50,56, 48,10,65,50,56,48,10,57,67,56,48,10,56,48,56,48, 10,52,49,48,48,10,51,69,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,54,56,10,69,78,67,79,68,73,78, 71,32,57,51,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,49,48,48,10,56, 48,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,57,69,56,48,10,56,50,56,48,10,56,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,54,57,10,69,78,67,79,68,73,78,71,32,57,51,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,52,48,56,48,10,56,48,52,48,10,57, 50,52,48,10,66,53,52,48,10,57,53,52,48,10,57,53, 52,48,10,57,53,52,48,10,57,53,52,48,10,66,65,52, 48,10,56,48,52,48,10,52,48,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,65,10,69, 78,67,79,68,73,78,71,32,57,51,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 52,48,56,48,10,56,48,52,48,10,57,50,52,48,10,66, 54,52,48,10,57,50,52,48,10,57,50,52,48,10,57,50, 52,48,10,57,50,52,48,10,66,70,52,48,10,56,48,52, 48,10,52,48,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,54,66,10,69,78,67,79,68,73, 78,71,32,57,51,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,52,48,56,48,10, 56,48,52,48,10,57,54,52,48,10,66,49,52,48,10,57, 49,52,48,10,57,50,52,48,10,57,52,52,48,10,57,52, 52,48,10,66,70,52,48,10,56,48,52,48,10,52,48,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,54,67,10,69,78,67,79,68,73,78,71,32,57,51, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,52,48,56,48,10,56,48,52,48,10, 57,54,52,48,10,66,49,52,48,10,57,49,52,48,10,57, 50,52,48,10,57,49,52,48,10,57,49,52,48,10,66,69, 52,48,10,56,48,52,48,10,52,48,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,54,68,10, 69,78,67,79,68,73,78,71,32,57,51,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,52,48,56,48,10,56,48,52,48,10,57,52,52,48,10, 66,52,52,48,10,57,53,52,48,10,57,55,52,48,10,57, 49,52,48,10,57,49,52,48,10,66,57,52,48,10,56,48, 52,48,10,52,48,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,69,10,69,78,67,79,68, 73,78,71,32,57,51,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,52,48,56,48, 10,56,48,52,48,10,57,55,52,48,10,66,52,52,48,10, 57,52,52,48,10,57,54,52,48,10,57,49,52,48,10,57, 49,52,48,10,66,69,52,48,10,56,48,52,48,10,52,48, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,54,70,10,69,78,67,79,68,73,78,71,32,57, 51,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,52,48,56,48,10,56,48,52,48, 10,57,51,52,48,10,66,52,52,48,10,57,52,52,48,10, 57,54,52,48,10,57,53,52,48,10,57,53,52,48,10,66, 65,52,48,10,56,48,52,48,10,52,48,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,55,48, 10,69,78,67,79,68,73,78,71,32,57,51,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,52,48,56,48,10,56,48,52,48,10,57,55,52,48, 10,66,49,52,48,10,57,49,52,48,10,57,50,52,48,10, 57,50,52,48,10,57,50,52,48,10,66,65,52,48,10,56, 48,52,48,10,52,48,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,55,49,10,69,78,67,79, 68,73,78,71,32,57,51,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,52,48,56, 48,10,56,48,52,48,10,57,50,52,48,10,66,53,52,48, 10,57,53,52,48,10,57,50,52,48,10,57,53,52,48,10, 57,53,52,48,10,66,65,52,48,10,56,48,52,48,10,52, 48,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,50,10,69,78,67,79,68,73,78,71,32, 57,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,52,48,56,48,10,56,48,52, 48,10,57,50,52,48,10,66,53,52,48,10,57,53,52,48, 10,57,51,52,48,10,57,49,52,48,10,57,49,52,48,10, 66,69,52,48,10,56,48,52,48,10,52,48,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,55, 51,10,69,78,67,79,68,73,78,71,32,57,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,70, 48,48,10,52,48,56,48,10,56,48,52,48,10,66,50,52, 48,10,56,68,52,48,10,56,68,52,48,10,57,53,52,48, 10,65,53,52,48,10,65,53,52,48,10,66,65,52,48,10, 56,48,52,48,10,52,48,56,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,55,52,10,69,78,67, 79,68,73,78,71,32,57,51,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,49,48,48,10,56,48, 56,48,10,56,56,56,48,10,57,56,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,57,67,56,48,10, 56,48,56,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,55,53,10,69,78,67,79,68,73,78,71, 32,57,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,49,48,48,10,56,48,56,48,10,57,67, 56,48,10,65,50,56,48,10,65,50,56,48,10,56,50,56, 48,10,56,52,56,48,10,56,56,56,48,10,57,48,56,48, 10,65,48,56,48,10,66,69,56,48,10,56,48,56,48,10, 52,49,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,54,10,69,78,67,79,68,73,78,71,32,57,51,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 49,48,48,10,56,48,56,48,10,57,67,56,48,10,65,50, 56,48,10,56,50,56,48,10,56,50,56,48,10,56,67,56, 48,10,56,50,56,48,10,56,50,56,48,10,65,50,56,48, 10,57,67,56,48,10,56,48,56,48,10,52,49,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,55,55,10,69,78, 67,79,68,73,78,71,32,57,51,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,49,48,48,10,56, 48,56,48,10,56,52,56,48,10,56,67,56,48,10,57,52, 56,48,10,65,52,56,48,10,66,69,56,48,10,56,52,56, 48,10,56,52,56,48,10,56,52,56,48,10,56,52,56,48, 10,56,48,56,48,10,52,49,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,55,56,10,69,78,67,79,68,73,78, 71,32,57,51,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,56,48,56,48,10,66, 69,56,48,10,65,48,56,48,10,65,48,56,48,10,65,48, 56,48,10,66,67,56,48,10,56,50,56,48,10,56,50,56, 48,10,56,50,56,48,10,66,67,56,48,10,56,48,56,48, 10,52,49,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,55,57,10,69,78,67,79,68,73,78,71,32,57,51,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 52,49,48,48,10,56,48,56,48,10,57,67,56,48,10,65, 48,56,48,10,65,48,56,48,10,65,48,56,48,10,66,67, 56,48,10,65,50,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,65,10,69, 78,67,79,68,73,78,71,32,57,51,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 56,48,56,48,10,66,69,56,48,10,56,50,56,48,10,56, 50,56,48,10,56,52,56,48,10,56,52,56,48,10,56,56, 56,48,10,56,56,56,48,10,56,56,56,48,10,56,56,56, 48,10,56,48,56,48,10,52,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,55,66,10,69,78,67,79,68,73, 78,71,32,57,51,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,49,48,48,10,56,48,56,48,10, 57,67,56,48,10,65,50,56,48,10,65,50,56,48,10,65, 50,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,65,50,56,48,10,57,67,56,48,10,56,48,56, 48,10,52,49,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,55,67,10,69,78,67,79,68,73,78,71,32,57,51, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,52,49,48,48,10,56,48,56,48,10,57,67,56,48,10, 65,50,56,48,10,65,50,56,48,10,65,50,56,48,10,57, 69,56,48,10,56,50,56,48,10,56,50,56,48,10,56,50, 56,48,10,57,67,56,48,10,56,48,56,48,10,52,49,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,55,68,10, 69,78,67,79,68,73,78,71,32,57,51,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,52,48,56,48, 10,56,48,52,48,10,57,50,52,48,10,66,53,52,48,10, 57,53,52,48,10,57,53,52,48,10,57,53,52,48,10,57, 53,52,48,10,57,53,52,48,10,57,53,52,48,10,66,65, 52,48,10,56,48,52,48,10,52,48,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,69,10,69,78,67,79,68, 73,78,71,32,57,51,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,52,48,56,48,10,56,48,52,48, 10,57,50,52,48,10,66,54,52,48,10,57,50,52,48,10, 57,50,52,48,10,57,50,52,48,10,57,50,52,48,10,57, 50,52,48,10,57,50,52,48,10,66,70,52,48,10,56,48, 52,48,10,52,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,55,70,10,69,78,67,79,68,73,78,71,32,57, 51,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,52,48,56,48,10,56,48,52,48,10,57,54,52,48, 10,66,49,52,48,10,57,49,52,48,10,57,49,52,48,10, 57,50,52,48,10,57,52,52,48,10,57,52,52,48,10,57, 52,52,48,10,66,70,52,48,10,56,48,52,48,10,52,48, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,56,48, 10,69,78,67,79,68,73,78,71,32,57,51,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,48,56, 48,10,56,48,52,48,10,57,54,52,48,10,66,49,52,48, 10,57,49,52,48,10,57,49,52,48,10,57,50,52,48,10, 57,49,52,48,10,57,49,52,48,10,57,49,52,48,10,66, 69,52,48,10,56,48,52,48,10,52,48,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,56,49,10,69,78,67,79, 68,73,78,71,32,57,51,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,48,56,48,10,56,48,52, 48,10,57,52,52,48,10,66,52,52,48,10,57,53,52,48, 10,57,53,52,48,10,57,55,52,48,10,57,49,52,48,10, 57,49,52,48,10,57,49,52,48,10,66,57,52,48,10,56, 48,52,48,10,52,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,50,10,69,78,67,79,68,73,78,71,32, 57,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,52,48,56,48,10,56,48,52,48,10,57,55,52, 48,10,66,52,52,48,10,57,52,52,48,10,57,52,52,48, 10,57,54,52,48,10,57,49,52,48,10,57,49,52,48,10, 57,49,52,48,10,66,69,52,48,10,56,48,52,48,10,52, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,56, 51,10,69,78,67,79,68,73,78,71,32,57,51,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 56,48,10,56,48,52,48,10,57,51,52,48,10,66,52,52, 48,10,57,52,52,48,10,57,52,52,48,10,57,54,52,48, 10,57,53,52,48,10,57,53,52,48,10,57,53,52,48,10, 66,65,52,48,10,56,48,52,48,10,52,48,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,52,56,52,10,69,78,67, 79,68,73,78,71,32,57,51,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,52,48,56,48,10,56,48, 52,48,10,57,55,52,48,10,66,49,52,48,10,57,49,52, 48,10,57,49,52,48,10,57,50,52,48,10,57,50,52,48, 10,57,50,52,48,10,57,50,52,48,10,66,65,52,48,10, 56,48,52,48,10,52,48,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,52,56,53,10,69,78,67,79,68,73,78,71, 32,57,51,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,48,56,48,10,56,48,52,48,10,57,50, 52,48,10,66,53,52,48,10,57,53,52,48,10,57,53,52, 48,10,57,50,52,48,10,57,53,52,48,10,57,53,52,48, 10,57,53,52,48,10,66,65,52,48,10,56,48,52,48,10, 52,48,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 56,54,10,69,78,67,79,68,73,78,71,32,57,51,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,56,48,10,56,48,52,48,10,57,50,52,48,10,66,53, 52,48,10,57,53,52,48,10,57,53,52,48,10,57,51,52, 48,10,57,49,52,48,10,57,49,52,48,10,57,49,52,48, 10,66,69,52,48,10,56,48,52,48,10,52,48,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,52,56,55,10,69,78, 67,79,68,73,78,71,32,57,51,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,52,48,56,48,10,56, 48,52,48,10,66,50,52,48,10,56,68,52,48,10,56,68, 52,48,10,56,68,52,48,10,57,53,52,48,10,65,53,52, 48,10,65,53,52,48,10,65,53,52,48,10,66,65,52,48, 10,56,48,52,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,52,69,65,10,69,78,67,79,68,73,78, 71,32,57,52,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,49,48,48,10,56, 48,56,48,10,57,67,56,48,10,65,50,56,48,10,65,50, 56,48,10,65,50,56,48,10,65,50,56,48,10,65,50,56, 48,10,57,67,56,48,10,56,48,56,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 52,69,66,10,69,78,67,79,68,73,78,71,32,57,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,55,70,56,48,10,70,70,67,48,10,69, 68,67,48,10,67,57,67,48,10,69,68,67,48,10,69,68, 67,48,10,69,68,67,48,10,69,68,67,48,10,67,48,67, 48,10,70,70,67,48,10,55,70,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,69,67,10,69, 78,67,79,68,73,78,71,32,57,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 55,70,56,48,10,70,70,67,48,10,69,57,67,48,10,67, 69,67,48,10,69,69,67,48,10,69,68,67,48,10,69,66, 67,48,10,69,66,67,48,10,67,48,67,48,10,70,70,67, 48,10,55,70,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,52,69,68,10,69,78,67,79,68,73, 78,71,32,57,52,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,55,70,56,48,10, 70,70,67,48,10,69,57,67,48,10,67,69,67,48,10,69, 69,67,48,10,69,68,67,48,10,69,69,67,48,10,69,69, 67,48,10,67,49,67,48,10,70,70,67,48,10,55,70,56, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,52,69,69,10,69,78,67,79,68,73,78,71,32,57,52, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,55,70,56,48,10,70,70,67,48,10, 69,66,67,48,10,67,66,67,48,10,69,65,67,48,10,69, 56,67,48,10,69,69,67,48,10,69,69,67,48,10,67,54, 67,48,10,70,70,67,48,10,55,70,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,52,69,70,10, 69,78,67,79,68,73,78,71,32,57,52,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,70,48,48, 10,55,70,56,48,10,70,70,67,48,10,69,56,67,48,10, 67,66,67,48,10,69,66,67,48,10,69,57,67,48,10,69, 69,67,48,10,69,69,67,48,10,67,49,67,48,10,70,70, 67,48,10,55,70,56,48,10,51,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,70,48,10,69,78,67,79,68, 73,78,71,32,57,52,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,70,48,48,10,55,70,56,48, 10,70,70,67,48,10,69,67,67,48,10,67,66,67,48,10, 69,66,67,48,10,69,57,67,48,10,69,65,67,48,10,69, 65,67,48,10,67,53,67,48,10,70,70,67,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,52,70,49,10,69,78,67,79,68,73,78,71,32,57, 52,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,55,70,56,48,10,70,70,67,48, 10,69,56,67,48,10,67,69,67,48,10,69,69,67,48,10, 69,68,67,48,10,69,68,67,48,10,69,68,67,48,10,67, 53,67,48,10,70,70,67,48,10,55,70,56,48,10,51,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,52,70,50, 10,69,78,67,79,68,73,78,71,32,57,52,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,70,48, 48,10,55,70,56,48,10,70,70,67,48,10,69,68,67,48, 10,67,65,67,48,10,69,65,67,48,10,69,68,67,48,10, 69,65,67,48,10,69,65,67,48,10,67,53,67,48,10,70, 70,67,48,10,55,70,56,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,52,70,51,10,69,78,67,79, 68,73,78,71,32,57,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,55,70,56, 48,10,70,70,67,48,10,69,68,67,48,10,67,65,67,48, 10,69,65,67,48,10,69,67,67,48,10,69,69,67,48,10, 69,69,67,48,10,67,49,67,48,10,70,70,67,48,10,55, 70,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,70,52,10,69,78,67,79,68,73,78,71,32, 57,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,70,48,48,10,55,70,56,48,10,70,70,67, 48,10,67,68,67,48,10,70,50,67,48,10,70,50,67,48, 10,69,65,67,48,10,68,65,67,48,10,68,65,67,48,10, 67,53,67,48,10,70,70,67,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,52,70, 70,10,69,78,67,79,68,73,78,71,32,57,52,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,69, 48,48,10,55,70,48,48,10,70,70,56,48,10,69,51,56, 48,10,68,68,56,48,10,68,68,56,48,10,68,68,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 70,70,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,49,48,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,52,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,49,10,69,78,67,79,68,73,78, 71,32,57,52,55,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,49,49, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,48,51,10, 69,78,67,79,68,73,78,71,32,57,52,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,48,52,10,69,78,67,79,68, 73,78,71,32,57,52,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,68,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,48,53,10,69,78,67,79,68,73,78,71,32,57, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 68,68,56,48,10,68,68,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,54, 10,69,78,67,79,68,73,78,71,32,57,52,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,48,55,10,69,78,67,79, 68,73,78,71,32,57,52,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,48,56,10,69,78,67,79,68,73,78,71,32, 57,52,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,66,53,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,48, 57,10,69,78,67,79,68,73,78,71,32,57,52,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,66,53,56,48, 10,66,53,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,65,10,69,78,67, 79,68,73,78,71,32,57,52,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,48,66,10,69,78,67,79,68,73,78,71, 32,57,52,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,48,49,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,52,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,48,68,10,69, 78,67,79,68,73,78,71,32,57,52,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,48,69,10,69,78,67,79,68,73, 78,71,32,57,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,70,10,69,78,67,79,68,73,78,71,32,57,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 70,67,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,48,51,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,52,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,49,10,69,78,67,79, 68,73,78,71,32,57,52,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,49,50,10,69,78,67,79,68,73,78,71,32, 57,52,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,49, 51,10,69,78,67,79,68,73,78,71,32,57,52,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,70,67,48,48, 10,70,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,48,50,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,53,10,69,78,67,79,68,73,78, 71,32,57,52,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,49,54,10,69,78,67,79,68,73,78,71,32,57,52,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,49,55,10,69, 78,67,79,68,73,78,71,32,57,52,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,48,52,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,52,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,70,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,49,57,10,69,78,67,79,68,73,78,71,32,57, 52,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,49,65, 10,69,78,67,79,68,73,78,71,32,57,52,57,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,66,10,69,78,67,79, 68,73,78,71,32,57,52,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,70,67,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,48,56,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 49,68,10,69,78,67,79,68,73,78,71,32,57,53,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,70,67, 48,10,48,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,49,69,10,69,78, 67,79,68,73,78,71,32,57,53,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,70,67,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,70,10,69,78,67,79,68,73,78, 71,32,57,53,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,70,67,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,50,48,10,69,78,67,79,68,73,78,71,32,57,53,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,70, 67,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,49,10,69, 78,67,79,68,73,78,71,32,57,53,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,70,67,48,10,48,70, 67,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,50,50,10,69,78,67,79,68,73, 78,71,32,57,53,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,70,67,48,10,48,70,67,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,50,51,10,69,78,67,79,68,73,78,71,32,57,53, 48,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 70,67,48,10,48,70,67,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,48,57,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,48,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,50,53,10,69,78,67,79, 68,73,78,71,32,57,53,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,50,54,10,69,78,67,79,68,73,78,71,32, 57,53,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,70,67,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,50, 55,10,69,78,67,79,68,73,78,71,32,57,53,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,70,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,50,56,10,69,78,67, 79,68,73,78,71,32,57,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,50,57,10,69,78,67,79,68,73,78,71, 32,57,53,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,70,67,48,48,10,70,67,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,65,10,69,78,67,79,68,73,78,71,32,57,53,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,67,48, 48,10,70,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,50,66,10,69,78, 67,79,68,73,78,71,32,57,53,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,70,67,48,48,10,70,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,48,54,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,67,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,50,68,10,69,78,67,79,68,73,78,71,32,57,53, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,50,69,10, 69,78,67,79,68,73,78,71,32,57,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,67,48,10,48, 70,67,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,70,10,69,78,67,79,68, 73,78,71,32,57,53,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,70,70,67,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,51,48,10,69,78,67,79,68,73,78,71,32,57, 53,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,49, 10,69,78,67,79,68,73,78,71,32,57,53,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 70,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,51,50,10,69,78,67,79, 68,73,78,71,32,57,53,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,70,67,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,51,51,10,69,78,67,79,68,73,78,71,32, 57,53,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,48,55,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,51,53,10,69,78, 67,79,68,73,78,71,32,57,53,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,70,70,67,48,10,70,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,51,54,10,69,78,67,79,68,73,78, 71,32,57,53,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,70,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,51,55,10,69,78,67,79,68,73,78,71,32,57,53,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,70,70, 67,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,51,56,10,69, 78,67,79,68,73,78,71,32,57,53,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,70,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,51,57,10,69,78,67,79,68,73, 78,71,32,57,53,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,70,70,67,48,10,70,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,65,10,69,78,67,79,68,73,78,71,32,57,53, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,48,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,51,66,10, 69,78,67,79,68,73,78,71,32,57,53,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,48,53,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,70,67,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,51,68,10,69,78,67,79,68,73,78,71,32, 57,53,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,70,70,67,48,10,70,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,51, 69,10,69,78,67,79,68,73,78,71,32,57,53,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,70,70,67,48, 10,48,70,67,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,70,10,69,78,67, 79,68,73,78,71,32,57,53,51,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,52,48,10,69,78,67,79,68,73,78,71, 32,57,53,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,70,70,67,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 52,49,10,69,78,67,79,68,73,78,71,32,57,53,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,70,70,67, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,50,10,69,78, 67,79,68,73,78,71,32,57,53,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,70,70,67,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,52,51,10,69,78,67,79,68,73,78, 71,32,57,53,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,67,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,52,52,10,69,78,67,79,68,73,78,71,32,57,53,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,70,70, 67,48,10,48,70,67,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,52,53,10,69, 78,67,79,68,73,78,71,32,57,53,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,70,70,67,48,10,70,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,54,10,69,78,67,79,68,73, 78,71,32,57,53,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,70,70,67,48,10,48,70,67,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,52,55,10,69,78,67,79,68,73,78,71,32,57,53, 52,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,52,56,10, 69,78,67,79,68,73,78,71,32,57,53,52,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,70,70,67,48,10,70, 70,67,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,52,57,10,69,78,67,79,68, 73,78,71,32,57,53,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,70,70,67,48,10,70,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,65,10,69,78,67,79,68,73,78,71,32,57, 53,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 70,70,67,48,10,48,70,67,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,52,66, 10,69,78,67,79,68,73,78,71,32,57,53,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,70,67,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,52,67,10,69,78,67,79, 68,73,78,71,32,57,53,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,52,68,10,69,78,67,79,68,73,78,71,32, 57,53,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,55,56,48,10,70,55,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 69,10,69,78,67,79,68,73,78,71,32,57,53,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,52,70,10,69,78,67, 79,68,73,78,71,32,57,53,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,51,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,52, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,53,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,67,48,10,48,56,48,48,10, 48,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,50,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,51,57,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,70, 67,48,10,49,48,48,48,10,49,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,50, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,56,48,48,10,48, 56,48,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,50,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,69,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,53,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,69,48,48,10,48,50,48,48,10,70,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,53,48,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,70, 67,48,10,48,56,48,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,57, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,56,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,51,67,48,10,49,48,48,48,10, 49,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,56,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,70,56,48,48,10,48,56,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,50,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,70,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,54, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,70,50,48,48,10,48, 50,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,54,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,70,67,48,10,48,56,48,48,10, 48,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,51,55,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,51,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,50,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,51, 67,48,10,49,48,48,48,10,49,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,49,57, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,70,56,48,48,10,48, 56,48,48,10,70,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,50,48,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,70,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,50,51,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,70,50,48,48,10,48,50,48,48,10,70,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,48,48,48,48,10,70,70,67,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,56, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,52,49,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,48,48,48,48,10, 70,51,67,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,52,53,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,70,70,67,48,10,48,48,48,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,54,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,52,48, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,70,51,67,48,10,48, 48,48,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,53,52,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,70,70,67,48,10,48,56,48,48,10, 70,70,67,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,51,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,49,50, 48,48,10,49,50,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,50,48,48,10,70,70,67,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,52,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,49,50,48,48,10,49, 50,48,48,10,49,50,48,48,10,49,50,48,48,10,70,51, 67,48,10,48,48,48,48,10,70,51,67,48,10,49,50,48, 48,10,49,50,48,48,10,49,50,48,48,10,49,50,48,48, 10,49,50,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,50,48,48,10,49,50,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,54,68,10,69,78,67,79,68,73,78,71,32,57,53,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 67,48,10,48,51,48,48,10,48,52,48,48,10,48,52,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,54,69,10,69, 78,67,79,68,73,78,71,32,57,53,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,56,48,48,48,10,54,48, 48,48,10,49,48,48,48,10,49,48,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,54,70,10,69,78,67,79,68,73, 78,71,32,57,53,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,48,48,48,10,49,48,48,48,10,54, 48,48,48,10,56,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,55,48,10,69,78,67,79,68,73,78,71,32,57,53, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,51,48,48,10,48, 48,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,55,49,10, 69,78,67,79,68,73,78,71,32,57,53,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,52, 48,10,48,48,52,48,10,48,48,56,48,10,48,48,56,48, 10,48,49,48,48,10,48,49,48,48,10,48,50,48,48,10, 48,50,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,48,48,48,10,49,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,52,48,48, 48,10,52,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,50,10,69,78,67,79,68, 73,78,71,32,57,53,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,56,48,48,48,10,56,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,50,48,48,48, 10,50,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,52,48,48,10,48, 52,48,48,10,48,50,48,48,10,48,50,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,48,56,48,10,48,48,56, 48,10,48,48,52,48,10,48,48,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,55,51,10,69,78,67,79,68,73,78,71,32,57, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,56,48,52,48,10,56,48,52,48,10,52,48,56, 48,10,52,48,56,48,10,50,49,48,48,10,50,49,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 50,48,48,10,49,50,48,48,10,50,49,48,48,10,50,49, 48,48,10,52,48,56,48,10,52,48,56,48,10,56,48,52, 48,10,56,48,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,55,52, 10,69,78,67,79,68,73,78,71,32,57,53,56,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,55,53,10,69,78,67,79, 68,73,78,71,32,57,53,56,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,54,10,69,78,67,79,68,73,78,71,32, 57,53,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,55, 55,10,69,78,67,79,68,73,78,71,32,57,53,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,55,56,10,69,78,67, 79,68,73,78,71,32,57,53,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,67,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,55,57,10,69,78,67,79,68,73,78,71, 32,57,53,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,65,10,69,78,67,79,68,73,78,71,32,57,53,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,67, 48,10,48,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,55,66,10,69,78, 67,79,68,73,78,71,32,57,53,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,55,67,10,69,78,67,79,68,73,78, 71,32,57,53,57,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,48,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,55,68,10,69,78,67,79,68,73,78,71,32,57,53,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,56,48,48,10,48,56,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,69,10,69, 78,67,79,68,73,78,71,32,57,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,67,48,10,70,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,55,70,10,69,78,67,79,68,73, 78,71,32,57,53,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,56,48,48,10,48,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,112,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,56,49,10, 69,78,67,79,68,73,78,71,32,57,54,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,50,10,69,78,67,79,68, 73,78,71,32,57,54,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,56,51,10,69,78,67,79,68,73,78,71,32,57, 54,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,110,98,108,111,99,107, 10,69,78,67,79,68,73,78,71,32,57,54,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,56,53,10,69,78,67,79, 68,73,78,71,32,57,54,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,56,54,10,69,78,67,79,68,73,78,71,32, 57,54,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,56, 55,10,69,78,67,79,68,73,78,71,32,57,54,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,108,111,99,107,10,69,78,67,79,68, 73,78,71,32,57,54,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,56,57,10,69,78,67,79,68,73,78,71,32,57, 54,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,56,48,10,70,70,56,48,10,70,70,56,48, 10,70,70,56,48,10,70,70,56,48,10,70,70,56,48,10, 70,70,56,48,10,70,70,56,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,70,70,56,48,10,70,70, 56,48,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,65, 10,69,78,67,79,68,73,78,71,32,57,54,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,69, 48,48,10,70,69,48,48,10,70,69,48,48,10,70,69,48, 48,10,70,69,48,48,10,70,69,48,48,10,70,69,48,48, 10,70,69,48,48,10,70,69,48,48,10,70,69,48,48,10, 70,69,48,48,10,70,69,48,48,10,70,69,48,48,10,70, 69,48,48,10,70,69,48,48,10,70,69,48,48,10,70,69, 48,48,10,70,69,48,48,10,70,69,48,48,10,70,69,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,56,66,10,69,78,67,79, 68,73,78,71,32,57,54,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,70,67,48,48,10,70,67, 48,48,10,70,67,48,48,10,70,67,48,48,10,70,67,48, 48,10,70,67,48,48,10,70,67,48,48,10,70,67,48,48, 10,70,67,48,48,10,70,67,48,48,10,70,67,48,48,10, 70,67,48,48,10,70,67,48,48,10,70,67,48,48,10,70, 67,48,48,10,70,67,48,48,10,70,67,48,48,10,70,67, 48,48,10,70,67,48,48,10,70,67,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,108, 102,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,56, 68,10,69,78,67,79,68,73,78,71,32,57,54,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,70, 48,48,48,10,70,48,48,48,10,70,48,48,48,10,70,48, 48,48,10,70,48,48,48,10,70,48,48,48,10,70,48,48, 48,10,70,48,48,48,10,70,48,48,48,10,70,48,48,48, 10,70,48,48,48,10,70,48,48,48,10,70,48,48,48,10, 70,48,48,48,10,70,48,48,48,10,70,48,48,48,10,70, 48,48,48,10,70,48,48,48,10,70,48,48,48,10,70,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,69,10,69,78,67, 79,68,73,78,71,32,57,54,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,69,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,69,48,48,48,10,69,48, 48,48,10,69,48,48,48,10,69,48,48,48,10,69,48,48, 48,10,69,48,48,48,10,69,48,48,48,10,69,48,48,48, 10,69,48,48,48,10,69,48,48,48,10,69,48,48,48,10, 69,48,48,48,10,69,48,48,48,10,69,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,69,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,56,70,10,69,78,67,79,68,73,78,71, 32,57,54,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,56,48,48,48,10,56,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,56,48,48,48,10,56,48,48,48, 10,56,48,48,48,10,56,48,48,48,10,56,48,48,48,10, 56,48,48,48,10,56,48,48,48,10,56,48,48,48,10,56, 48,48,48,10,56,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,116,98,108,111, 99,107,10,69,78,67,79,68,73,78,71,32,57,54,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 55,67,48,10,48,55,67,48,10,48,55,67,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 55,67,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,116,115,104,97,100,101,10,69,78, 67,79,68,73,78,71,32,57,54,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,53,53,52,48,10, 48,48,48,48,10,65,65,56,48,10,48,48,48,48,10,53, 53,52,48,10,48,48,48,48,10,65,65,56,48,10,48,48, 48,48,10,53,53,52,48,10,48,48,48,48,10,65,65,56, 48,10,48,48,48,48,10,53,53,52,48,10,48,48,48,48, 10,65,65,56,48,10,48,48,48,48,10,53,53,52,48,10, 48,48,48,48,10,65,65,56,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,115,104,97,100,101,10,69,78,67,79,68,73,78,71,32, 57,54,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,53,53,52,48,10,65,65,56,48,10,53,53, 52,48,10,65,65,56,48,10,53,53,52,48,10,65,65,56, 48,10,53,53,52,48,10,65,65,56,48,10,53,53,52,48, 10,65,65,56,48,10,53,53,52,48,10,65,65,56,48,10, 53,53,52,48,10,65,65,56,48,10,53,53,52,48,10,65, 65,56,48,10,53,53,52,48,10,65,65,56,48,10,53,53, 52,48,10,65,65,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,107,115,104,97,100, 101,10,69,78,67,79,68,73,78,71,32,57,54,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,53, 53,52,48,10,70,70,67,48,10,65,65,56,48,10,70,70, 67,48,10,53,53,52,48,10,70,70,67,48,10,65,65,56, 48,10,70,70,67,48,10,53,53,52,48,10,70,70,67,48, 10,65,65,56,48,10,70,70,67,48,10,53,53,52,48,10, 70,70,67,48,10,65,65,56,48,10,70,70,67,48,10,53, 53,52,48,10,70,70,67,48,10,65,65,56,48,10,70,70, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,57,52,10,69,78,67, 79,68,73,78,71,32,57,54,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,57,53,10,69,78,67,79,68,73,78,71, 32,57,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,48,48,52,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,52,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,52,48,10,48,48,52,48, 10,48,48,52,48,10,48,48,52,48,10,48,48,52,48,10, 48,48,52,48,10,48,48,52,48,10,48,48,52,48,10,48, 48,52,48,10,48,48,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,54,10,69,78,67,79,68,73,78,71,32,57,54,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,57,55,10,69,78, 67,79,68,73,78,71,32,57,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,57,56,10,69,78,67,79,68,73,78, 71,32,57,54,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,57,57,10,69,78,67,79,68,73,78,71,32,57,54,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,65,10,69, 78,67,79,68,73,78,71,32,57,54,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,57,66,10,69,78,67,79,68,73, 78,71,32,57,54,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,70,56,48,48, 10,70,56,48,48,10,70,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,57,67,10,69,78,67,79,68,73,78,71,32,57,54, 50,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,48,55,67,48,10,48,55,67,48,10,48,55, 67,48,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,57,68,10, 69,78,67,79,68,73,78,71,32,57,54,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,69,10,69,78,67,79,68, 73,78,71,32,57,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,48,55,67,48,10,70,56,48,48,10,70, 56,48,48,10,70,56,48,48,10,70,56,48,48,10,70,56, 48,48,10,70,56,48,48,10,70,56,48,48,10,70,56,48, 48,10,70,56,48,48,10,70,56,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,57,70,10,69,78,67,79,68,73,78,71,32,57, 54,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,55,67,48,10,48,55,67,48,10,48,55,67, 48,10,48,55,67,48,10,48,55,67,48,10,48,55,67,48, 10,48,55,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,55,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,102,105,108,108,101,100,98, 111,120,10,69,78,67,79,68,73,78,71,32,57,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,55,70,56, 48,10,55,70,56,48,10,55,70,56,48,10,55,70,56,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,72,50,50,48,55,51,10,69,78,67, 79,68,73,78,71,32,57,54,51,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,52,48,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,50,10,69,78,67,79,68,73,78,71, 32,57,54,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,52,48,56, 48,10,52,48,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 65,51,10,69,78,67,79,68,73,78,71,32,57,54,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,52,48,56,48,10,53,69,56, 48,10,53,69,56,48,10,53,69,56,48,10,53,69,56,48, 10,52,48,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,65,52,10,69,78, 67,79,68,73,78,71,32,57,54,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 56,48,10,56,48,56,48,10,70,70,56,48,10,56,48,56, 48,10,70,70,56,48,10,56,48,56,48,10,70,70,56,48, 10,56,48,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,65,53,10,69,78,67,79,68,73,78, 71,32,57,54,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,65,65, 56,48,10,65,65,56,48,10,65,65,56,48,10,65,65,56, 48,10,65,65,56,48,10,65,65,56,48,10,65,65,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,54,10,69,78,67,79,68,73,78,71,32,57,54,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,65,65,56,48,10,70,70, 56,48,10,65,65,56,48,10,70,70,56,48,10,65,65,56, 48,10,70,70,56,48,10,65,65,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,65,55,10,69, 78,67,79,68,73,78,71,32,57,54,51,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,52,56,48,10,53,50,56,48,10,52,57, 56,48,10,54,52,56,48,10,53,50,56,48,10,52,57,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,65,56,10,69,78,67,79,68,73, 78,71,32,57,54,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,52, 57,56,48,10,53,50,56,48,10,54,52,56,48,10,52,57, 56,48,10,53,50,56,48,10,54,52,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,65,57,10,69,78,67,79,68,73,78,71,32,57,54, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,53,53,56,48,10,54, 50,56,48,10,53,53,56,48,10,52,56,56,48,10,53,53, 56,48,10,54,50,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,72,49,56,53,52,51,10,69, 78,67,79,68,73,78,71,32,57,54,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,72,49,56,53,53,49,10,69,78,67,79,68,73,78, 71,32,57,54,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,69,48,48,10,49,50,48,48,10,49,50,48, 48,10,49,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,105,108,108, 101,100,114,101,99,116,10,69,78,67,79,68,73,78,71,32, 57,54,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,55,70,56,48,10,55,70,56,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,65, 68,10,69,78,67,79,68,73,78,71,32,57,54,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,52,48,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,65,69,10,69,78,67, 79,68,73,78,71,32,57,54,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,51,70, 48,48,10,51,70,48,48,10,51,70,48,48,10,51,70,48, 48,10,51,70,48,48,10,51,70,48,48,10,51,70,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,70,10,69,78,67,79,68,73,78,71, 32,57,54,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,50,49,48,48,10,50,49, 48,48,10,50,49,48,48,10,50,49,48,48,10,50,49,48, 48,10,50,49,48,48,10,50,49,48,48,10,50,49,48,48, 10,50,49,48,48,10,50,49,48,48,10,50,49,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 66,48,10,69,78,67,79,68,73,78,71,32,57,54,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,70,56, 48,10,49,70,48,48,10,51,69,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,66,49,10,69,78, 67,79,68,73,78,71,32,57,54,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,70,56,48,10,49,49,48, 48,10,50,50,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,114,105,97,103,117,112,10,69,78,67,79,68,73,78, 71,32,57,54,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,49,69, 48,48,10,49,69,48,48,10,51,70,48,48,10,51,70,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,66,51,10,69,78,67,79,68,73,78,71,32,57,54,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,49,50,48,48,10,49,50, 48,48,10,50,49,48,48,10,50,49,48,48,10,52,48,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,66,52,10,69, 78,67,79,68,73,78,71,32,57,54,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,52,48,48,10,48,69,48,48,10,48,69, 48,48,10,49,70,48,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,66,53,10,69,78,67,79,68,73, 78,71,32,57,54,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 52,48,48,10,48,65,48,48,10,48,65,48,48,10,49,49, 48,48,10,49,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,54,10,69,78,67,79,68,73,78,71,32,57,54, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,48,48,48,10,55,56,48,48,10,55,69,48,48,10,55, 70,56,48,10,55,70,56,48,10,55,69,48,48,10,55,56, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,66,55,10, 69,78,67,79,68,73,78,71,32,57,54,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 53,56,48,48,10,52,54,48,48,10,52,49,56,48,10,52, 49,56,48,10,52,54,48,48,10,53,56,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,66,56,10,69,78,67,79,68, 73,78,71,32,57,54,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,56,48,48,10,49,69,48,48,10,49,70,48,48,10,49, 69,48,48,10,49,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,66,57,10,69,78,67,79,68,73,78,71,32,57, 54,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,54,48,48,10,49,49,48,48,10,49,54,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,116,114,105,97,103,114,116, 10,69,78,67,79,68,73,78,71,32,57,54,53,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,69,48,48,10,55,70,56,48,10, 55,69,48,48,10,55,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,66,66,10,69,78,67,79, 68,73,78,71,32,57,54,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,48,48,48, 10,52,69,48,48,10,52,49,56,48,10,52,69,48,48,10, 55,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 114,105,97,103,100,110,10,69,78,67,79,68,73,78,71,32, 57,54,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,51,70,48,48, 10,51,70,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,66, 68,10,69,78,67,79,68,73,78,71,32,57,54,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,52,48,56,48,10,50,49,48,48,10,50,49,48,48, 10,49,50,48,48,10,49,50,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,69,10,69,78,67, 79,68,73,78,71,32,57,54,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,70,48,48,10,49,70,48,48,10,48,69,48,48, 10,48,69,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,66,70,10,69,78,67,79,68,73,78,71, 32,57,54,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,70,48, 48,10,49,49,48,48,10,48,65,48,48,10,48,65,48,48, 10,48,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 67,48,10,69,78,67,79,68,73,78,71,32,57,54,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 56,48,10,48,55,56,48,10,49,70,56,48,10,55,70,56, 48,10,55,70,56,48,10,49,70,56,48,10,48,55,56,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,67,49,10,69,78, 67,79,68,73,78,71,32,57,54,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,54, 56,48,10,49,56,56,48,10,54,48,56,48,10,54,48,56, 48,10,49,56,56,48,10,48,54,56,48,10,48,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,50,10,69,78,67,79,68,73,78, 71,32,57,54,54,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,70,48,48,10,49,70,48,48,10,48,70,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,67,51,10,69,78,67,79,68,73,78,71,32,57,54,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,51,48,48,10,48,68, 48,48,10,49,49,48,48,10,48,68,48,48,10,48,51,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,114,105,97,103,108,102,10,69, 78,67,79,68,73,78,71,32,57,54,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,56,48,10,49,70,56,48,10,55,70,56,48,10,49,70, 56,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,67,53,10,69,78,67,79,68,73, 78,71,32,57,54,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,56,48,10,49, 67,56,48,10,54,48,56,48,10,49,67,56,48,10,48,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,54,10,69,78,67,79,68,73,78,71,32,57,54, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,49,69,48,48,10,51,70,48,48,10,55, 70,56,48,10,55,70,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,67,55,10, 69,78,67,79,68,73,78,71,32,57,54,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,50,48,48,10,50,49,48,48,10,52,48,56,48,10,52, 48,56,48,10,50,49,48,48,10,49,50,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,67,56,10,69,78,67,79,68, 73,78,71,32,57,54,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,50,48,48,10, 50,68,48,48,10,53,69,56,48,10,53,69,56,48,10,50, 68,48,48,10,49,50,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,67,57,10,69,78,67,79,68,73,78,71,32,57, 54,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,67,56,48,10,53,69,56,48,10,53,69,56,48,10,52, 67,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,111,122,101,110,103,101, 10,69,78,67,79,68,73,78,71,32,57,54,55,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,52,48,48,10,48,65,48, 48,10,48,65,48,48,10,49,49,48,48,10,49,49,48,48, 10,50,48,56,48,10,50,48,56,48,10,52,48,52,48,10, 50,48,56,48,10,50,48,56,48,10,49,49,48,48,10,49, 49,48,48,10,48,65,48,48,10,48,65,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,105,114,99,108,101,10,69,78,67,79,68, 73,78,71,32,57,54,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,52,48,56,48,10,50,49,48,48,10,49,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,67,67,10,69,78,67,79,68,73,78,71,32,57, 54,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,52,48,48,10,48,48,48,48,10, 52,49,48,48,10,48,48,48,48,10,52,49,48,48,10,48, 48,48,48,10,49,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,68, 10,69,78,67,79,68,73,78,71,32,57,54,55,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,51,54,48,48,10,53,53,48,48,10, 53,53,48,48,10,53,53,48,48,10,51,54,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,67,69,10,69,78,67,79, 68,73,78,71,32,57,54,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,49,48,48,10,52,67,56,48,10,53,50,56,48,10, 53,50,56,48,10,52,67,56,48,10,50,49,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 49,56,53,51,51,10,69,78,67,79,68,73,78,71,32,57, 54,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,51,70,48,48,10, 55,70,56,48,10,55,70,56,48,10,55,70,56,48,10,55, 70,56,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,68,48, 10,69,78,67,79,68,73,78,71,32,57,54,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,57,48,48,10,55,56,56,48,10, 55,56,56,48,10,55,56,56,48,10,55,56,56,48,10,51, 57,48,48,10,49,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,68,49,10,69,78,67,79, 68,73,78,71,32,57,54,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,50,55,48,48,10,52,55,56,48,10,52,55,56,48,10, 52,55,56,48,10,52,55,56,48,10,50,55,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,50,10,69,78,67,79,68,73,78,71,32, 57,54,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,69,48,48,10,50,49,48,48, 10,52,48,56,48,10,52,48,56,48,10,55,70,56,48,10, 55,70,56,48,10,51,70,48,48,10,49,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,68, 51,10,69,78,67,79,68,73,78,71,32,57,54,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,55,70,56,48, 10,55,70,56,48,10,52,48,56,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,68,52,10,69,78,67, 79,68,73,78,71,32,57,54,56,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,69,48, 48,10,50,55,48,48,10,52,55,56,48,10,52,55,56,48, 10,52,48,56,48,10,52,48,56,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,68,53,10,69,78,67,79,68,73,78,71, 32,57,54,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,55,48, 48,10,52,55,56,48,10,52,55,56,48,10,55,70,56,48, 10,55,70,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,54,10,69,78,67,79,68,73,78,71,32,57,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,51,56,48,48,10,55,56,48, 48,10,55,56,48,48,10,55,56,48,48,10,55,56,48,48, 10,51,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,68,55,10,69,78, 67,79,68,73,78,71,32,57,54,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,55,48,48,10,48,55,56,48,10,48,55,56, 48,10,48,55,56,48,10,48,55,56,48,10,48,55,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,110,118,98,117,108,108,101,116,10,69,78,67,79,68, 73,78,71,32,57,54,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,70,70,67,48, 10,70,70,67,48,10,69,49,67,48,10,67,48,67,48,10, 56,48,52,48,10,56,48,52,48,10,56,48,52,48,10,56, 48,52,48,10,67,48,67,48,10,69,49,67,48,10,70,70, 67,48,10,70,70,67,48,10,70,70,67,48,10,70,70,67, 48,10,70,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,110, 118,99,105,114,99,108,101,10,69,78,67,79,68,73,78,71, 32,57,54,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,70,70, 67,48,10,69,49,67,48,10,68,69,67,48,10,66,70,52, 48,10,66,70,52,48,10,66,70,52,48,10,66,70,52,48, 10,68,69,67,48,10,69,49,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,65,10,69,78,67,79,68,73,78,71,32,57,54,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,70, 70,67,48,10,70,70,67,48,10,70,70,67,48,10,69,49, 67,48,10,68,69,67,48,10,66,70,52,48,10,66,70,52, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,68,66,10,69,78, 67,79,68,73,78,71,32,57,54,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,66,70,52, 48,10,66,70,52,48,10,68,69,67,48,10,69,49,67,48, 10,70,70,67,48,10,70,70,67,48,10,70,70,67,48,10, 70,70,67,48,10,70,70,67,48,10,70,70,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,68,67,10,69,78,67,79,68,73,78, 71,32,57,54,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,50,48, 48,48,10,52,48,48,48,10,52,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,68,68,10,69,78,67,79,68,73,78,71,32,57,54,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,54,48,48,10,48,49,48,48,10,48,48, 56,48,10,48,48,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,69,10,69, 78,67,79,68,73,78,71,32,57,54,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,56,48,10,48,48,56,48,10,48,49,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,68,70,10,69,78,67,79,68,73, 78,71,32,57,54,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 48,48,10,52,48,48,48,10,50,48,48,48,10,49,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,69,48,10,69,78,67,79,68,73,78,71,32,57,54, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,69,48,48,10,50,49,48,48,10,52, 48,56,48,10,52,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,69,49,10, 69,78,67,79,68,73,78,71,32,57,54,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,52,48,56,48,10,52,48,56,48,10,50,49, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,50,10,69,78,67,79,68, 73,78,71,32,57,54,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,52, 48,10,48,48,52,48,10,48,48,67,48,10,48,48,67,48, 10,48,49,67,48,10,48,49,67,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,67,48,10,48,55,67,48,10,48, 70,67,48,10,48,70,67,48,10,49,70,67,48,10,49,70, 67,48,10,51,70,67,48,10,51,70,67,48,10,55,70,67, 48,10,55,70,67,48,10,70,70,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,51,10,69,78,67,79,68,73,78,71,32,57, 54,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,69,48,48,48,10,70,48,48,48,10,70,48,48,48,10, 70,56,48,48,10,70,56,48,48,10,70,67,48,48,10,70, 67,48,48,10,70,69,48,48,10,70,69,48,48,10,70,70, 48,48,10,70,70,48,48,10,70,70,56,48,10,70,70,56, 48,10,70,70,67,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,69,52, 10,69,78,67,79,68,73,78,71,32,57,55,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,70,70, 67,48,10,70,70,56,48,10,70,70,56,48,10,70,70,48, 48,10,70,70,48,48,10,70,69,48,48,10,70,69,48,48, 10,70,67,48,48,10,70,67,48,48,10,70,56,48,48,10, 70,56,48,48,10,70,48,48,48,10,70,48,48,48,10,69, 48,48,48,10,69,48,48,48,10,67,48,48,48,10,67,48, 48,48,10,56,48,48,48,10,56,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,69,53,10,69,78,67,79, 68,73,78,71,32,57,55,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,70,70,67,48,10,55,70, 67,48,10,55,70,67,48,10,51,70,67,48,10,51,70,67, 48,10,49,70,67,48,10,49,70,67,48,10,48,70,67,48, 10,48,70,67,48,10,48,55,67,48,10,48,55,67,48,10, 48,51,67,48,10,48,51,67,48,10,48,49,67,48,10,48, 49,67,48,10,48,48,67,48,10,48,48,67,48,10,48,48, 52,48,10,48,48,52,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 112,101,110,98,117,108,108,101,116,10,69,78,67,79,68,73, 78,71,32,57,55,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 49,48,48,10,49,49,48,48,10,49,49,48,48,10,48,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,69,55,10,69,78,67,79,68,73,78,71,32,57,55, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,55,56,56,48,10,55, 56,56,48,10,55,56,56,48,10,55,56,56,48,10,55,56, 56,48,10,55,56,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,69,56,10, 69,78,67,79,68,73,78,71,32,57,55,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,56,48,10,52,55,56,48,10,52,55,56,48,10,52, 55,56,48,10,52,55,56,48,10,52,55,56,48,10,52,55, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,57,10,69,78,67,79,68, 73,78,71,32,57,55,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 55,69,56,48,10,55,67,56,48,10,55,56,56,48,10,55, 48,56,48,10,54,48,56,48,10,52,48,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,65,10,69,78,67,79,68,73,78,71,32,57, 55,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,52,48,56,48,10, 52,49,56,48,10,52,51,56,48,10,52,55,56,48,10,52, 70,56,48,10,53,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,69,66, 10,69,78,67,79,68,73,78,71,32,57,55,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,56,48,10,56,56,56,48,10,56,56,56,48,10, 56,56,56,48,10,56,56,56,48,10,56,56,56,48,10,56, 56,56,48,10,56,56,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,69,67,10,69,78,67,79, 68,73,78,71,32,57,55,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,50,48,48,10,49,50,48,48,10,50,68,48,48,10, 50,68,48,48,10,52,48,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,68,10,69,78,67,79,68,73,78,71,32, 57,55,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,65,48,48, 10,49,65,48,48,10,51,57,48,48,10,51,57,48,48,10, 55,56,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 69,10,69,78,67,79,68,73,78,71,32,57,55,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,54,48,48,10,49,54,48,48, 10,50,55,48,48,10,50,55,48,48,10,52,55,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,69,70,10,69,78,67, 79,68,73,78,71,32,57,55,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,56,48,52,48,10,56,48,52,48, 10,56,48,52,48,10,56,48,52,48,10,52,48,56,48,10, 50,49,48,48,10,49,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,70,48,10,69,78,67,79,68,73,78,71, 32,57,55,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,70,56,56,48, 10,56,48,56,48,10,56,48,56,48,10,56,48,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 70,49,10,69,78,67,79,68,73,78,71,32,57,55,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,48,56,48,10,70,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,56,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,50,10,69,78, 67,79,68,73,78,71,32,57,55,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,70, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,70,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,70,51,10,69,78,67,79,68,73,78, 71,32,57,55,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,56,56, 56,48,10,56,56,56,48,10,56,56,56,48,10,56,70,56, 48,10,56,48,56,48,10,56,48,56,48,10,56,48,56,48, 10,70,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,70,52,10,69,78,67,79,68,73,78,71,32,57,55,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,69,48,48,10,52,57,48,48,10,56,56, 56,48,10,56,56,56,48,10,70,56,56,48,10,56,48,56, 48,10,56,48,56,48,10,52,49,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,70,53,10,69, 78,67,79,68,73,78,71,32,57,55,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,52,49,48,48,10,56,48,56,48,10,56,48, 56,48,10,70,56,56,48,10,56,56,56,48,10,56,56,56, 48,10,52,57,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,54,10,69,78,67,79,68,73, 78,71,32,57,55,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,52, 49,48,48,10,56,48,56,48,10,56,48,56,48,10,56,70, 56,48,10,56,56,56,48,10,56,56,56,48,10,52,57,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,70,55,10,69,78,67,79,68,73,78,71,32,57,55, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,69,48,48,10,52,57,48,48,10,56, 56,56,48,10,56,56,56,48,10,56,70,56,48,10,56,48, 56,48,10,56,48,56,48,10,52,49,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,70,56,10, 69,78,67,79,68,73,78,71,32,57,55,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,50,50,48,48,10,50, 52,48,48,10,50,56,48,48,10,51,48,48,48,10,50,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,70,57,10,69,78,67,79,68, 73,78,71,32,57,55,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 51,70,48,48,10,49,49,48,48,10,48,57,48,48,10,48, 53,48,48,10,48,51,48,48,10,48,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,65,10,69,78,67,79,68,73,78,71,32,57, 55,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 51,48,48,48,10,50,56,48,48,10,50,52,48,48,10,50, 50,48,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,70,66, 10,69,78,67,79,68,73,78,71,32,57,55,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,50,49,48,48,10, 50,49,48,48,10,50,49,48,48,10,50,49,48,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,70,67,10,69,78,67,79, 68,73,78,71,32,57,55,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,70,48,48,10,51,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,70,48,48,10,51,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,70,68,10,69,78,67,79,68,73,78,71,32, 57,55,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,49,50,48,48,10,49,50,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 69,10,69,78,67,79,68,73,78,71,32,57,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,70,70,10,69,78,67, 79,68,73,78,71,32,57,55,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,48,48,10,48,51,48,48,10,48,53,48,48, 10,48,57,48,48,10,49,49,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,48,48,10,69,78,67,79,68,73,78,71, 32,57,55,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,52,49,48,48,10,49,67,48, 48,10,51,69,48,48,10,66,69,56,48,10,51,69,48,48, 10,49,67,48,48,10,52,49,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 48,49,10,69,78,67,79,68,73,78,71,32,57,55,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,55,57,56,48,10,70,70,67, 48,10,70,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,50,10,69,78, 67,79,68,73,78,71,32,57,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,51,69,48,48,10,55,70,48,48,10,70,70, 56,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,65,48,48, 10,48,65,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,48,51,10,69,78,67,79,68,73,78, 71,32,57,55,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,52,48,48,48,10,49,67,56,48,10, 49,67,48,48,10,55,70,48,48,10,51,69,48,48,10,52, 49,52,48,10,53,53,48,48,10,52,49,48,48,10,50,65, 48,48,10,66,69,52,48,10,52,49,48,48,10,52,57,48, 48,10,52,49,48,48,10,52,57,48,48,10,52,49,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,48,52,10,69,78,67,79,68,73,78,71,32,57,55,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,48, 52,48,48,10,48,52,56,48,10,48,57,48,48,10,48,65, 48,48,10,49,65,48,48,10,50,52,56,48,10,52,51,48, 48,10,52,50,48,48,10,50,52,48,48,10,49,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,48,53,10,69, 78,67,79,68,73,78,71,32,57,55,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,49,67,48,48,10,70,70, 56,48,10,55,70,48,48,10,51,69,48,48,10,51,54,48, 48,10,54,51,48,48,10,52,49,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,54,10,69,78,67,79,68,73, 78,71,32,57,55,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,49,52,48,48,10,70,55,56,48,10,52,49, 48,48,10,50,50,48,48,10,52,57,48,48,10,53,53,48, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,48,55,10,69,78,67,79,68,73,78,71,32,57,55, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,50,48,48,10,48, 52,48,48,10,48,56,48,48,10,49,48,48,48,10,48,56, 48,48,10,48,53,48,48,10,48,51,48,48,10,48,55,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,48,56,10, 69,78,67,79,68,73,78,71,32,57,55,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,70,48,48,10,52,50,48,48,10,52,52,48,48,10,52, 56,48,48,10,53,48,48,48,10,52,56,48,48,10,52,53, 48,48,10,52,51,48,48,10,52,55,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,48,57,10,69,78,67,79,68, 73,78,71,32,57,55,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,50,50,48,48,10,52, 49,48,48,10,52,57,48,48,10,52,49,48,48,10,50,50, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,65,10,69,78,67,79,68,73,78,71,32,57, 55,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,50,49,48,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,50, 49,48,48,10,50,49,48,48,10,53,50,56,48,10,50,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,48,66, 10,69,78,67,79,68,73,78,71,32,57,55,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,50,49,48,48,10,53,50,56,48,10,50,49,48,48,10, 50,49,48,48,10,52,48,56,48,10,52,48,56,48,10,52, 48,56,48,10,50,49,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,48,67,10,69,78,67,79, 68,73,78,71,32,57,55,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,52,48,48,10,48,52,48,48,10,48,56,48,48,10, 51,56,48,48,10,52,52,48,48,10,52,52,48,48,10,52, 52,48,48,10,51,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,48,68,10,69,78,67,79,68,73,78,71,32, 57,55,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,55,48,48,10,48,56,56, 48,10,48,56,56,48,10,48,56,56,48,10,48,55,48,48, 10,48,52,48,48,10,48,56,48,48,10,51,56,48,48,10, 52,52,48,48,10,52,52,48,48,10,52,52,48,48,10,51, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 69,10,69,78,67,79,68,73,78,71,32,57,55,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,48,48,10,67,49,56,48, 10,68,68,56,48,10,51,54,48,48,10,54,51,48,48,10, 54,51,48,48,10,70,55,56,48,10,70,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,48,70,10,69,78,67, 79,68,73,78,71,32,57,55,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,52,49,48,48,10,57,67,56,48, 10,65,65,56,48,10,53,53,48,48,10,52,57,48,48,10, 56,48,56,48,10,70,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,49,48,10,69,78,67,79,68,73,78,71, 32,57,55,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,70,70,56,48,10,56,48, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,56,48,56,48,10,56,48,56,48,10,56,48,56,48, 10,56,48,56,48,10,56,48,56,48,10,56,48,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 49,49,10,69,78,67,79,68,73,78,71,32,57,55,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,70,70,56,48,10,56,49,56,48,10,56,49, 56,48,10,56,51,56,48,10,56,51,56,48,10,69,51,56, 48,10,69,54,56,48,10,66,54,56,48,10,66,54,56,48, 10,57,67,56,48,10,57,67,56,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,50,10,69,78, 67,79,68,73,78,71,32,57,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,56,48,10,69,51,56,48,10,70,54,56,48,10,66,67, 56,48,10,57,67,56,48,10,57,67,56,48,10,66,69,56, 48,10,66,54,56,48,10,69,51,56,48,10,69,51,56,48, 10,69,49,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,49,51,10,69,78,67,79,68,73,78, 71,32,57,55,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,69, 51,56,48,10,55,54,48,48,10,51,67,48,48,10,49,67, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,54,48, 48,10,54,51,48,48,10,69,51,56,48,10,67,49,56,48, 10,67,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,49,52,10,69,78,67,79,68,73,78,71,32,57,55,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,56,56,56,48,10, 50,50,48,48,10,56,56,56,48,10,51,69,48,48,10,55, 70,48,48,10,70,70,56,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,65,48,48,10,48,65,48,48,10,48,52,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,49,53,10,69, 78,67,79,68,73,78,71,32,57,55,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,50,65,48,48,10,53,52,48,48,10,50, 65,48,48,10,53,52,48,48,10,48,48,48,48,10,70,69, 48,48,10,70,70,56,48,10,56,50,56,48,10,56,50,56, 48,10,56,51,48,48,10,55,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,54,10,69,78,67,79,68,73, 78,71,32,57,55,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,51,54,48,48,10,52,49,48,48,10,52, 49,48,48,10,52,49,48,48,10,52,49,48,48,10,56,48, 56,48,10,56,48,56,48,10,56,48,56,48,10,56,48,56, 48,10,70,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,49,55,10,69,78,67,79,68,73,78,71,32,57,55, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 51,69,48,48,10,55,70,48,48,10,55,70,48,48,10,55, 70,48,48,10,55,70,48,48,10,70,70,56,48,10,70,70, 56,48,10,70,70,56,48,10,70,70,56,48,10,70,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,49,57,10, 69,78,67,79,68,73,78,71,32,57,55,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,56,48,10,48,68,48,48,10,57,70,48,48,10,66, 68,56,48,10,70,69,67,48,10,55,69,52,48,10,49,67, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,49,65,10,69,78,67,79,68, 73,78,71,32,57,55,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,70,70,52,48,10,49,70,52,48,10,49, 70,52,48,10,48,70,52,48,10,48,70,67,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,66,10,69,78,67,79,68,73,78,71,32,57, 55,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 66,70,67,48,10,66,69,48,48,10,66,69,48,48,10,66, 67,48,48,10,70,67,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,49,67, 10,69,78,67,79,68,73,78,71,32,57,55,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,69,48,48,10,56,49,48,48,10,55,56,67,48,10, 49,48,56,48,10,49,48,56,48,10,48,56,56,48,10,48, 56,56,48,10,48,55,56,48,10,48,48,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,49,68,10,69,78,67,79, 68,73,78,71,32,57,55,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,48,48,10,48,50,56,48, 10,48,50,56,48,10,48,69,56,48,10,51,50,56,48,10, 52,48,56,48,10,52,48,56,48,10,52,48,56,48,10,55, 70,56,48,10,56,48,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,49,69,10,69,78,67,79,68,73,78,71,32, 57,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,70,56,48,10,50,48,52,48, 10,67,55,56,48,10,52,50,48,48,10,52,50,48,48,10, 52,52,48,48,10,52,52,48,48,10,55,56,48,48,10,56, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 70,10,69,78,67,79,68,73,78,71,32,57,55,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,48,56, 48,10,55,70,56,48,10,52,48,56,48,10,52,48,56,48, 10,52,48,56,48,10,51,50,56,48,10,48,69,56,48,10, 48,50,56,48,10,48,50,56,48,10,48,49,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,50,48,10,69,78,67, 79,68,73,78,71,32,57,55,54,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,69,48,48,10,52,49, 48,48,10,53,53,48,48,10,52,49,48,48,10,50,50,48, 48,10,51,69,48,48,10,50,50,48,48,10,49,67,48,48, 10,52,49,48,48,10,65,50,56,48,10,53,53,48,48,10, 48,56,48,48,10,53,53,48,48,10,65,50,56,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,50,49,10,69,78,67,79,68,73,78,71, 32,57,55,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,69,48,48,10,55,70,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,55,70,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 50,50,10,69,78,67,79,68,73,78,71,32,57,55,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,69,48,48,10,54,51,48,48,10,70,55,56, 48,10,70,55,56,48,10,70,70,56,48,10,56,56,56,48, 10,57,67,56,48,10,53,68,48,48,10,51,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,51,10,69,78, 67,79,68,73,78,71,32,57,55,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,50,50, 48,48,10,52,49,48,48,10,65,65,56,48,10,49,52,48, 48,10,50,65,48,48,10,50,65,48,48,10,49,67,48,48, 10,48,56,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,50,52,10,69,78,67,79,68,73,78, 71,32,57,55,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,70,48,48,10,69, 68,67,48,10,51,70,48,48,10,48,67,48,48,10,51,70, 48,48,10,54,68,56,48,10,53,69,56,48,10,54,68,56, 48,10,53,69,56,48,10,50,68,48,48,10,49,69,48,48, 10,50,68,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,50,53,10,69,78,67,79,68,73,78,71,32,57,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,50,50,48,48,10,50,50,48,48,10,50, 50,48,48,10,49,52,48,48,10,49,52,48,48,10,48,56, 48,48,10,55,70,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,50,54,10,69, 78,67,79,68,73,78,71,32,57,55,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,55,70,56,48,10,48,67,48,48,10,48,67, 48,48,10,51,67,48,48,10,48,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,55,10,69,78,67,79,68,73, 78,71,32,57,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,70,48,48,10,48,56,56,48,10, 48,56,56,48,10,48,56,56,48,10,48,70,48,48,10,48, 56,48,48,10,52,57,48,48,10,50,65,48,48,10,49,67, 48,48,10,48,56,48,48,10,49,67,48,48,10,50,65,48, 48,10,52,57,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,50,56,10,69,78,67,79,68,73,78,71,32,57,55, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,51,70,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,50,57,10, 69,78,67,79,68,73,78,71,32,57,55,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,56,48,48,10,56,56,56,48,10,70,70,56,48,10,56, 56,56,48,10,48,56,48,48,10,48,56,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,50,65,10,69,78,67,79,68, 73,78,71,32,57,55,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,69,48,48,10, 55,49,48,48,10,54,52,48,48,10,54,69,48,48,10,54, 52,48,48,10,54,65,48,48,10,54,48,48,48,10,55,49, 48,48,10,51,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,66,10,69,78,67,79,68,73,78,71,32,57, 55,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,50,65,48,48, 10,49,52,48,48,10,52,57,48,48,10,65,65,56,48,10, 65,65,56,48,10,65,65,56,48,10,65,65,56,48,10,65, 65,56,48,10,53,68,48,48,10,50,65,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,50,67, 10,69,78,67,79,68,73,78,71,32,57,55,55,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,53,68,48,48,10,57,67,56,48,10,65,65,56,48, 10,65,65,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,57,67,56,48,10,69,66,56,48,10,70, 70,56,48,10,57,67,56,48,10,50,65,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,50,68,10,69,78,67,79, 68,73,78,71,32,57,55,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,67,48,48, 10,52,50,48,48,10,48,57,48,48,10,49,57,48,48,10, 51,49,48,48,10,50,57,48,48,10,48,53,48,48,10,50, 50,48,48,10,53,68,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,50,69,10,69,78,67,79,68,73,78,71,32, 57,55,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,57,48,48, 10,56,56,56,48,10,56,56,56,48,10,57,67,56,48,10, 65,65,56,48,10,67,57,56,48,10,52,57,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 70,10,69,78,67,79,68,73,78,71,32,57,55,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,52,49,48,48,10,56,48,56,48, 10,70,50,56,48,10,70,56,56,48,10,68,68,56,48,10, 70,70,56,48,10,55,70,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,51,48,10,69,78,67, 79,68,73,78,71,32,57,55,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,51,49,10,69,78,67,79,68,73,78,71, 32,57,55,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 51,50,10,69,78,67,79,68,73,78,71,32,57,55,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,51,10,69,78, 67,79,68,73,78,71,32,57,55,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,51,52,10,69,78,67,79,68,73,78, 71,32,57,55,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,51,53,10,69,78,67,79,68,73,78,71,32,57,55,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,51,54,10,69, 78,67,79,68,73,78,71,32,57,55,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,55,10,69,78,67,79,68,73, 78,71,32,57,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,56,10,69,78,67,79,68,73,78,71,32,57,55, 56,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,56,48,48,10,53,68,48,48,10,50, 65,48,48,10,53,68,48,48,10,70,70,56,48,10,53,68, 48,48,10,50,65,48,48,10,53,68,48,48,10,48,56,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,51,57,10, 69,78,67,79,68,73,78,71,32,57,55,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,69,48,48,10, 50,49,48,48,10,52,48,56,48,10,53,50,56,48,10,52, 48,56,48,10,52,67,56,48,10,53,50,56,48,10,50,49, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,109,105,108,101,102,97,99,101,10,69,78,67, 79,68,73,78,71,32,57,55,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,50,49,48, 48,10,52,48,56,48,10,53,50,56,48,10,52,48,56,48, 10,53,50,56,48,10,52,67,56,48,10,50,49,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 105,110,118,115,109,105,108,101,102,97,99,101,10,69,78,67, 79,68,73,78,71,32,57,55,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,69,48,48,10,51,70,48, 48,10,55,70,56,48,10,54,68,56,48,10,55,70,56,48, 10,54,68,56,48,10,55,51,56,48,10,51,70,48,48,10, 49,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,117,110,10,69,78,67,79,68,73,78,71,32,57,55,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,56,56,56,48,10,52,49,48,48,10,49,67, 48,48,10,50,50,48,48,10,65,50,56,48,10,50,50,48, 48,10,49,67,48,48,10,52,49,48,48,10,56,56,56,48, 10,48,56,48,48,10,48,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,51,68,10,69, 78,67,79,68,73,78,71,32,57,55,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,48,65,48,48,10,48,57,48,48,10,48,52, 56,48,10,48,52,56,48,10,48,52,56,48,10,48,57,48, 48,10,48,65,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,69,10,69,78,67,79,68,73, 78,71,32,57,55,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 52,48,48,10,50,52,48,48,10,52,56,48,48,10,52,56, 48,48,10,52,56,48,48,10,50,52,48,48,10,49,52,48, 48,10,48,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,70,10,69,78,67,79,68,73,78,71,32,57,55, 57,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,52,49,48,48,10, 50,50,48,48,10,49,67,48,48,10,50,50,48,48,10,52, 49,48,48,10,52,49,48,48,10,52,49,48,48,10,50,50, 48,48,10,49,67,48,48,10,48,56,48,48,10,48,56,48, 48,10,51,69,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,101,109,97,108,101,10,69, 78,67,79,68,73,78,71,32,57,55,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,56,48,48, 10,51,69,48,48,10,48,56,48,48,10,48,56,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,52,49,10,69,78,67,79,68,73, 78,71,32,57,55,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,51,69,48,48,10,48,56,48,48,10,48, 56,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,49,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,109,97,108, 101,10,69,78,67,79,68,73,78,71,32,57,55,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,56, 48,10,48,49,56,48,10,48,50,56,48,10,49,67,56,48, 10,50,50,48,48,10,52,49,48,48,10,52,49,48,48,10, 52,49,48,48,10,50,50,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,51,10,69,78,67, 79,68,73,78,71,32,57,55,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,49, 48,48,10,48,49,48,48,10,48,49,48,48,10,48,49,48, 48,10,48,49,48,48,10,55,57,48,48,10,56,53,48,48, 10,56,53,48,48,10,56,53,48,48,10,48,57,48,48,10, 49,49,48,48,10,70,70,48,48,10,48,49,48,48,10,48, 49,48,48,10,48,49,48,48,10,48,49,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,52,52,10,69,78,67,79,68,73,78,71, 32,57,55,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,50,48,48,48,10,50,48, 48,48,10,70,56,48,48,10,50,48,48,48,10,50,48,48, 48,10,50,70,48,48,10,51,48,56,48,10,50,48,56,48, 10,50,49,48,48,10,50,50,48,48,10,50,50,48,48,10, 50,50,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 52,53,10,69,78,67,79,68,73,78,71,32,57,55,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,56,56,56,48,10,56,56,56,48,10,56,56, 56,48,10,56,56,56,48,10,70,70,56,48,10,56,56,56, 48,10,56,56,56,48,10,56,56,56,48,10,57,67,56,48, 10,50,50,48,48,10,50,50,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,52,54,10,69,78, 67,79,68,73,78,71,32,57,55,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,53,68,48,48,10,69,66, 56,48,10,69,66,56,48,10,52,57,48,48,10,52,57,48, 48,10,52,57,48,48,10,51,69,48,48,10,48,56,48,48, 10,48,56,48,48,10,51,69,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,56,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,55,10,69,78,67,79,68,73,78, 71,32,57,55,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,67,48,48,10,52, 50,48,48,10,52,49,48,48,10,52,49,48,48,10,52,49, 48,48,10,52,50,48,48,10,55,67,48,48,10,52,48,48, 48,10,52,48,48,48,10,52,48,48,48,10,52,48,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,52,56,10,69,78,67,79,68,73,78,71,32,57,56,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,52,49,48,48,10,65,50,56,48,10,65, 50,56,48,10,49,52,48,48,10,49,52,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,52,57,10,69, 78,67,79,68,73,78,71,32,57,56,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 56,48,56,48,10,56,48,56,48,10,56,48,56,48,10,54, 51,48,48,10,49,67,48,48,10,50,50,48,48,10,52,49, 48,48,10,52,49,48,48,10,52,49,48,48,10,52,49,48, 48,10,50,50,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,52,65,10,69,78,67,79,68,73, 78,71,32,57,56,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 67,49,56,48,10,51,69,48,48,10,50,50,48,48,10,50, 50,48,48,10,50,50,48,48,10,50,50,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,51,69,48, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,66,10,69,78,67,79,68,73,78,71,32,57,56, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,70,48,48,10,52,56,56,48,10,52, 56,48,48,10,51,48,48,48,10,48,48,48,48,10,48,51, 48,48,10,48,52,56,48,10,52,52,56,48,10,51,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,52,67,10, 69,78,67,79,68,73,78,71,32,57,56,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,70,48,48,10,49,48,56,48,10,49, 48,56,48,10,49,48,56,48,10,51,49,48,48,10,52,57, 48,48,10,52,65,48,48,10,51,50,48,48,10,48,50,48, 48,10,48,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,52,68,10,69,78,67,79,68, 73,78,71,32,57,56,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,65,56,48,48,10, 53,52,48,48,10,53,53,48,48,10,53,54,56,48,10,53, 52,56,48,10,53,52,56,48,10,53,53,48,48,10,52,54, 48,48,10,48,67,48,48,10,51,52,48,48,10,48,50,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,52,69,10,69,78,67,79,68,73,78,71,32,57, 56,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,67,48,48,10,50,50,48,48,10, 52,49,48,48,10,52,49,48,48,10,50,50,48,48,10,49, 52,48,48,10,55,55,48,48,10,48,48,48,48,10,55,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,70, 10,69,78,67,79,68,73,78,71,32,57,56,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,65,56,48,48,10,53,52,48,48,10,53,52,48,48,10, 53,52,48,48,10,53,52,48,48,10,53,52,48,48,10,53, 52,48,48,10,53,53,48,48,10,48,51,56,48,10,48,49, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,53,48,10,69,78,67,79, 68,73,78,71,32,57,56,48,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,69,48,48, 10,48,49,56,48,10,48,49,56,48,10,48,50,52,48,10, 52,52,52,48,10,50,56,52,48,10,49,48,48,48,10,50, 56,48,48,10,52,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,53,49,10,69,78,67,79,68,73,78,71,32, 57,56,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,57,48,48,48, 10,65,56,48,48,10,67,56,48,48,10,56,66,48,48,10, 56,67,56,48,10,56,56,56,48,10,56,67,56,48,10,56, 66,48,48,10,48,56,48,48,10,48,56,48,48,10,49,48, 48,48,10,54,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,53, 50,10,69,78,67,79,68,73,78,71,32,57,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,54,54,52,48,10,57,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 54,54,52,48,10,57,57,56,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,51,10,69,78,67, 79,68,73,78,71,32,57,56,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,52,49,48, 48,10,50,50,48,48,10,49,52,48,48,10,49,52,48,48, 10,51,69,48,48,10,49,52,48,48,10,49,52,48,48,10, 50,50,48,48,10,52,49,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,53,52,10,69,78,67,79,68,73,78,71, 32,57,56,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,56, 48,48,10,49,67,48,48,10,52,57,48,48,10,55,55,48, 48,10,52,49,48,48,10,52,49,48,48,10,50,50,48,48, 10,50,50,48,48,10,50,50,48,48,10,52,49,48,48,10, 55,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 53,53,10,69,78,67,79,68,73,78,71,32,57,56,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,56,48,48,10,49,52, 48,48,10,54,51,48,48,10,53,53,48,48,10,52,49,48, 48,10,52,49,48,48,10,50,50,48,48,10,50,50,48,48, 10,50,50,48,48,10,52,49,48,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,53,54,10,69,78, 67,79,68,73,78,71,32,57,56,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,53,68,48,48,10,55,55, 48,48,10,52,49,48,48,10,52,49,48,48,10,50,50,48, 48,10,50,50,48,48,10,50,50,48,48,10,50,50,48,48, 10,52,49,48,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,55,10,69,78,67,79,68,73,78, 71,32,57,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,56,48,48,10,49,52,48,48,10,50,50, 48,48,10,50,50,48,48,10,50,50,48,48,10,50,50,48, 48,10,49,67,48,48,10,50,50,48,48,10,52,49,48,48, 10,55,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,53,56,10,69,78,67,79,68,73,78,71,32,57,56,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 50,48,48,10,51,68,48,48,10,52,49,48,48,10,52,49, 48,48,10,51,49,48,48,10,48,57,48,48,10,49,49,48, 48,10,50,49,48,48,10,52,49,48,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,53,57,10,69, 78,67,79,68,73,78,71,32,57,56,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,50,52,48,48,10,50,52, 48,48,10,49,56,48,48,10,50,52,48,48,10,50,52,48, 48,10,52,50,48,48,10,55,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,53,65,10,69,78,67,79,68,73, 78,71,32,57,56,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,56,48,48,10,49,67,48,48,10,52,57,48,48,10,55, 70,48,48,10,55,70,48,48,10,55,70,48,48,10,51,69, 48,48,10,51,69,48,48,10,51,69,48,48,10,55,70,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,66,10,69,78,67,79,68,73,78,71,32,57,56, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,55,70,48,48,10,53,53,48,48,10,55, 70,48,48,10,55,70,48,48,10,51,69,48,48,10,51,69, 48,48,10,51,69,48,48,10,55,70,48,48,10,55,70,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,53,67,10, 69,78,67,79,68,73,78,71,32,57,56,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,53,68,48,48,10, 55,70,48,48,10,55,70,48,48,10,55,70,48,48,10,51, 69,48,48,10,51,69,48,48,10,51,69,48,48,10,51,69, 48,48,10,55,70,48,48,10,55,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,53,68,10,69,78,67,79,68, 73,78,71,32,57,56,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,49,67,48,48,10, 51,65,48,48,10,51,65,48,48,10,51,69,48,48,10,51, 69,48,48,10,49,67,48,48,10,51,69,48,48,10,55,70, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,53,69,10,69,78,67,79,68,73,78,71,32,57, 56,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,50,48,48,10,51,70,48,48,10,55,66,48,48,10, 55,70,48,48,10,51,70,48,48,10,48,70,48,48,10,49, 70,48,48,10,51,70,48,48,10,55,70,48,48,10,55,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,70, 10,69,78,67,79,68,73,78,71,32,57,56,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,67,48,48,10, 51,67,48,48,10,49,56,48,48,10,51,67,48,48,10,51, 67,48,48,10,55,69,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,112,97,100,101,10,69,78,67,79,68,73, 78,71,32,57,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,52,48,48,10,48,52,48,48,10,48,69,48,48,10,49, 70,48,48,10,51,70,56,48,10,55,70,67,48,10,55,70, 67,48,10,55,70,67,48,10,51,53,56,48,10,48,52,48, 48,10,49,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,49,10,69,78,67,79,68,73,78,71,32,57,56, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,49,56,48,10,52,65,52,48,10,52, 52,52,48,10,52,48,52,48,10,50,48,56,48,10,49,49, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,54,50,10, 69,78,67,79,68,73,78,71,32,57,56,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,52,48,48,10,48,65,48,48,10, 48,65,48,48,10,49,49,48,48,10,49,49,48,48,10,50, 48,56,48,10,49,49,48,48,10,49,49,48,48,10,48,65, 48,48,10,48,65,48,48,10,48,52,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,99,108,117,98,10,69,78,67,79,68,73,78,71, 32,57,56,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,69,48,48,10,48,69,48,48,10,48,69,48, 48,10,48,52,48,48,10,55,53,67,48,10,55,70,67,48, 10,55,53,67,48,10,48,52,48,48,10,48,52,48,48,10, 49,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 54,52,10,69,78,67,79,68,73,78,71,32,57,56,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,52, 48,48,10,48,65,48,48,10,49,49,48,48,10,50,48,56, 48,10,52,48,52,48,10,52,48,52,48,10,52,69,52,48, 10,51,53,56,48,10,48,52,48,48,10,49,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,101,97,114,116,10,69,78,67,79, 68,73,78,71,32,57,56,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,49,56,48, 10,55,66,67,48,10,55,70,67,48,10,55,70,67,48,10, 51,70,56,48,10,49,70,48,48,10,48,69,48,48,10,48, 52,48,48,10,48,52,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 105,97,109,111,110,100,10,69,78,67,79,68,73,78,71,32, 57,56,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,52,48, 48,10,48,69,48,48,10,48,69,48,48,10,49,70,48,48, 10,49,70,48,48,10,51,70,56,48,10,49,70,48,48,10, 49,70,48,48,10,48,69,48,48,10,48,69,48,48,10,48, 52,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,54, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,48,65,48,48,10,48,65,48,48,10,48,52,48,48, 10,55,53,67,48,10,52,69,52,48,10,55,53,67,48,10, 48,52,48,48,10,48,52,48,48,10,49,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,54,56,10,69,78,67, 79,68,73,78,71,32,57,56,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,65,48,48,10,50,65,48,48,10,50,57,48, 48,10,50,53,48,48,10,49,53,48,48,10,50,53,48,48, 10,50,57,48,48,10,65,65,56,48,10,56,48,56,48,10, 56,48,56,48,10,55,70,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,54,57,10,69,78,67,79,68,73,78,71, 32,57,56,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,50,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,70,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,70,48,48,10,51,69,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,117,115,105,99, 97,108,110,111,116,101,10,69,78,67,79,68,73,78,71,32, 57,56,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,52,48,48,10,48,55, 48,48,10,48,55,67,48,10,48,54,67,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 49,69,48,48,10,51,69,48,48,10,55,69,48,48,10,55, 69,48,48,10,55,67,48,48,10,51,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,109,117,115,105,99,97, 108,110,111,116,101,100,98,108,10,69,78,67,79,68,73,78, 71,32,57,56,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,49,56,48,48,10, 49,69,48,48,10,49,70,56,48,10,49,66,56,48,10,49, 57,56,48,10,49,57,56,48,10,49,57,56,48,10,49,57, 56,48,10,55,57,56,48,10,70,57,56,48,10,70,49,56, 48,10,54,49,56,48,10,48,55,56,48,10,48,70,56,48, 10,48,70,48,48,10,48,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,54,67,10,69,78,67,79,68,73,78,71,32,57,56,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,49,56,48,48,10,49,69,48,48,10, 49,70,56,48,10,49,66,56,48,10,49,68,56,48,10,49, 70,56,48,10,49,66,56,48,10,49,57,56,48,10,55,57, 56,48,10,70,57,56,48,10,70,49,56,48,10,54,49,56, 48,10,48,55,56,48,10,48,70,56,48,10,48,70,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,54,68,10,69, 78,67,79,68,73,78,71,32,57,56,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,70,48,48,10,55,57, 56,48,10,54,49,56,48,10,54,49,56,48,10,54,51,48, 48,10,54,69,48,48,10,55,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,54,69,10,69,78,67,79,68,73, 78,71,32,57,56,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,51,48,48,10,51,70,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,70, 48,48,10,51,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,50,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,70,10,69,78,67,79,68,73,78,71,32,57,56, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,49,51,48,48,10,51,51,48,48,10, 51,51,56,48,10,51,70,48,48,10,55,51,48,48,10,51, 51,48,48,10,51,51,56,48,10,51,70,48,48,10,55,51, 48,48,10,51,51,48,48,10,51,50,48,48,10,50,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,55,48,10, 69,78,67,79,68,73,78,71,32,57,56,52,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 52,67,56,48,10,51,70,48,48,10,52,67,56,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,49,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,55,49,10,69,78,67,79,68, 73,78,71,32,57,56,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,56,48,48,10,49,52,48,48,10,49,67,48,48, 10,49,67,48,48,10,49,52,48,48,10,55,55,48,48,10, 65,50,56,48,10,55,55,48,48,10,49,52,48,48,10,49, 52,48,48,10,49,52,48,48,10,49,67,48,48,10,49,67, 48,48,10,49,52,48,48,10,48,56,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,55,50,10,69,78,67,79,68,73,78,71,32,57, 56,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,50,65,56,48,10,51,53,56,48, 10,48,50,56,48,10,70,55,56,48,10,53,48,48,48,10, 66,48,67,48,10,68,50,67,48,10,67,54,67,48,10,65, 57,67,48,10,54,57,56,48,10,48,54,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,51, 10,69,78,67,79,68,73,78,71,32,57,56,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,50,48, 48,10,48,49,48,48,10,54,49,52,48,10,69,48,67,48, 10,54,53,67,48,10,52,67,48,48,10,52,52,48,48,10, 56,52,52,48,10,56,52,52,48,10,56,69,52,48,10,56, 48,52,48,10,52,54,56,48,10,50,70,48,48,10,48,54, 48,48,10,48,50,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,55,52,10,69,78,67,79, 68,73,78,71,32,57,56,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,50,48,48,10,48,49,48, 48,10,54,49,52,48,10,69,48,67,48,10,54,68,67,48, 10,53,50,48,48,10,52,52,48,48,10,56,56,52,48,10, 57,48,52,48,10,57,69,52,48,10,56,48,52,48,10,52, 54,56,48,10,50,70,48,48,10,48,54,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,55,53,10,69,78,67,79,68,73,78,71,32, 57,56,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,50,48,48,10,48,49,48,48,10,54,49,52, 48,10,69,67,67,48,10,55,51,67,48,10,52,50,48,48, 10,52,67,48,48,10,56,50,52,48,10,57,50,52,48,10, 56,67,52,48,10,56,48,52,48,10,52,54,56,48,10,50, 70,48,48,10,48,54,48,48,10,48,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,55, 54,10,69,78,67,79,68,73,78,71,32,57,56,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,49,50, 48,48,10,48,49,48,48,10,54,49,52,48,10,69,52,67, 48,10,54,68,67,48,10,53,52,48,48,10,53,52,48,48, 10,57,69,52,48,10,56,52,52,48,10,56,52,52,48,10, 56,48,52,48,10,52,54,56,48,10,50,70,48,48,10,48, 54,48,48,10,48,50,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,55,10,69,78,67, 79,68,73,78,71,32,57,56,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,50,48,48,10,48,49, 48,48,10,54,49,52,48,10,69,48,67,48,10,55,70,67, 48,10,53,48,48,48,10,53,67,48,48,10,56,50,52,48, 10,56,50,52,48,10,57,67,52,48,10,56,48,52,48,10, 52,54,56,48,10,50,70,48,48,10,48,54,48,48,10,48, 50,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,55,56,10,69,78,67,79,68,73,78,71, 32,57,56,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,49,50,48,48,10,48,49,48,48,10,54,49, 52,48,10,69,67,67,48,10,55,51,67,48,10,53,48,48, 48,10,53,67,48,48,10,57,50,52,48,10,57,50,52,48, 10,56,67,52,48,10,56,48,52,48,10,52,54,56,48,10, 50,70,48,48,10,48,54,48,48,10,48,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 55,57,10,69,78,67,79,68,73,78,71,32,57,56,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 50,48,48,10,48,49,48,48,10,54,49,52,48,10,69,48, 67,48,10,55,70,67,48,10,53,50,48,48,10,52,52,48, 48,10,56,52,52,48,10,56,52,52,48,10,56,52,52,48, 10,56,48,52,48,10,52,54,56,48,10,50,70,48,48,10, 48,54,48,48,10,48,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,55,65,10,69,78, 67,79,68,73,78,71,32,57,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,50,48,48,10,48, 49,48,48,10,54,49,52,48,10,69,48,67,48,10,54,49, 67,48,10,52,48,48,48,10,52,48,48,48,10,56,48,52, 48,10,56,48,52,48,10,56,48,52,48,10,56,48,52,48, 10,52,54,56,48,10,50,70,48,48,10,48,54,48,48,10, 48,50,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,66,10,69,78,67,79,68,73,78, 71,32,57,56,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,51,69,56,48,10,51, 55,56,48,10,48,51,56,48,10,70,55,56,48,10,55,48, 48,48,10,55,48,67,48,10,68,50,67,48,10,67,54,67, 48,10,69,70,67,48,10,54,70,56,48,10,48,54,48,48, 10,48,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,55,67,10,69,78,67,79,68,73,78,71,32,57,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,54,55,48,48,10,53, 57,48,48,10,70,57,56,48,10,57,70,56,48,10,57,68, 56,48,10,66,69,56,48,10,66,69,56,48,10,66,69,56, 48,10,66,65,56,48,10,68,49,48,48,10,55,66,48,48, 10,55,69,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,55,68,10,69, 78,67,79,68,73,78,71,32,57,56,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,48,48,10, 52,48,56,48,10,56,67,52,48,10,57,51,52,48,10,56, 51,52,48,10,66,48,52,48,10,66,49,52,48,10,65,48, 67,48,10,65,48,67,48,10,65,48,67,48,10,65,50,67, 48,10,57,55,52,48,10,56,50,52,48,10,52,48,56,48, 10,51,70,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,56,48,10,69,78,67,79,68,73, 78,71,32,57,56,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,70,70,67,48,10,56, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,67, 52,48,10,56,48,52,48,10,56,48,52,48,10,56,48,52, 48,10,70,70,67,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,49,10,69,78,67,79,68,73,78,71,32,57,56, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,67,48,10,56,48,52,48,10,66, 48,52,48,10,56,48,52,48,10,56,48,52,48,10,56,48, 52,48,10,56,51,52,48,10,56,48,52,48,10,70,70,67, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,56,50,10, 69,78,67,79,68,73,78,71,32,57,56,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,70,67,48,10,56,48,52,48,10,66,48,52,48,10,56, 48,52,48,10,56,67,52,48,10,56,48,52,48,10,56,51, 52,48,10,56,48,52,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,56,51,10,69,78,67,79,68, 73,78,71,32,57,56,53,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 56,48,52,48,10,66,51,52,48,10,56,48,52,48,10,56, 48,52,48,10,56,48,52,48,10,66,51,52,48,10,56,48, 52,48,10,70,70,67,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,56,52,10,69,78,67,79,68,73,78,71,32,57, 56,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,70,70,67,48,10,56,48,52,48,10, 66,51,52,48,10,56,48,52,48,10,56,67,52,48,10,56, 48,52,48,10,66,51,52,48,10,56,48,52,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,53, 10,69,78,67,79,68,73,78,71,32,57,56,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,67,48,10,56,48,52,48,10,66,51,52,48,10, 56,48,52,48,10,66,51,52,48,10,56,48,52,48,10,66, 51,52,48,10,56,48,52,48,10,70,70,67,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,54,56,54,10,69,78,67,79, 68,73,78,71,32,57,56,54,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,50,50,48,48,10,52,49,48,48,10,56,48,56,48,10, 56,54,56,48,10,56,48,56,48,10,52,49,48,48,10,50, 50,48,48,10,49,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,54,56,55,10,69,78,67,79,68,73,78,71,32, 57,56,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,50,50,48,48, 10,52,49,48,48,10,56,48,56,48,10,66,54,56,48,10, 56,48,56,48,10,52,49,48,48,10,50,50,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,56, 56,10,69,78,67,79,68,73,78,71,32,57,56,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,51,69,48,48,10,55,70,48,48, 10,70,70,56,48,10,70,57,56,48,10,70,70,56,48,10, 55,70,48,48,10,51,69,48,48,10,49,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,57,10,69,78,67, 79,68,73,78,71,32,57,56,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,67,48, 48,10,51,69,48,48,10,55,70,48,48,10,70,70,56,48, 10,67,57,56,48,10,70,70,56,48,10,55,70,48,48,10, 51,69,48,48,10,49,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,54,56,65,10,69,78,67,79,68,73,78,71, 32,57,56,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,54, 56,66,10,69,78,67,79,68,73,78,71,32,57,56,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,56,67,10,69,78, 67,79,68,73,78,71,32,57,56,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,68,10,69,78,67,79,68,73,78, 71,32,57,56,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,49,48,32,48,10, 66,66,88,32,49,48,32,50,48,32,48,32,45,52,10,66, 73,84,77,65,80,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,56,69,10,69,78,67,79,68,73,78,71,32,57,56,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,56,70,10,69, 78,67,79,68,73,78,71,32,57,56,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,57,48,10,69,78,67,79,68,73, 78,71,32,57,56,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,56,48,48,10,56,55,56,48,10,56,48,56,48,10,56, 48,56,48,10,56,48,56,48,10,56,48,56,48,10,70,56, 56,48,10,56,55,56,48,10,56,48,48,48,10,56,48,48, 48,10,56,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,57,49,10,69,78,67,79,68,73,78,71,32,57,56, 55,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,56,48,48,10, 70,70,56,48,10,70,70,56,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,70,70,56,48,10,56,55, 56,48,10,56,48,48,48,10,56,48,48,48,10,56,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,65,48,10, 69,78,67,79,68,73,78,71,32,57,56,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,56,48,48,10,48,56,48,48,10,49,52,48,48, 10,49,52,48,48,10,49,52,48,48,10,50,50,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,65,48,48,10,52, 57,48,48,10,52,57,48,48,10,52,49,48,48,10,52,57, 48,48,10,56,56,56,48,10,56,48,56,48,10,70,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,65,49,10,69,78,67,79,68, 73,78,71,32,57,56,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,52,48,48,10, 49,56,48,48,10,50,48,48,48,10,51,56,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,56,48,48,10,51,48, 48,48,10,52,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,48,49,10,69,78,67,79,68,73,78,71,32,57, 57,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,50,52,48,48, 10,50,52,48,48,10,49,56,48,48,10,54,67,48,48,10, 57,70,67,48,10,57,54,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,48,50, 10,69,78,67,79,68,73,78,71,32,57,57,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,49,48,32,48,10,66,66,88,32,49,48,32,50, 48,32,48,32,45,52,10,66,73,84,77,65,80,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,48,48,48,10,57,48,48,48,10,57,48,67,48, 10,55,49,56,48,10,49,66,48,48,10,48,69,48,48,10, 48,69,48,48,10,49,66,48,48,10,55,49,56,48,10,57, 48,67,48,10,57,48,48,48,10,54,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,48,51,10,69,78,67,79, 68,73,78,71,32,57,57,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,57,54,48,48,10,57,70,67,48,10,54,67,48,48,10, 49,56,48,48,10,50,52,48,48,10,50,52,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,48,52,10,69,78,67,79,68,73,78,71,32, 57,57,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,57,48,48, 48,10,57,49,67,48,10,55,50,56,48,10,50,68,48,48, 10,49,50,48,48,10,49,50,48,48,10,50,68,48,48,10, 55,50,56,48,10,57,49,67,48,10,57,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,48, 54,10,69,78,67,79,68,73,78,71,32,57,57,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,52,49,48, 48,10,57,67,56,48,10,66,67,56,48,10,66,48,56,48, 10,66,48,56,48,10,66,48,56,48,10,66,67,56,48,10, 66,67,56,48,10,65,49,48,48,10,50,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,48,56,10,69,78,67, 79,68,73,78,71,32,57,57,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,49, 48,32,48,10,66,66,88,32,49,48,32,50,48,32,48,32, 45,52,10,66,73,84,77,65,80,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,48,48, 48,10,49,56,48,48,10,48,67,48,48,10,56,54,48,48, 10,70,70,67,48,10,56,54,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,48,57,10,69,78,67,79,68,73,78,71, 32,57,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,67,49,56,48,10,65,50,56,48, 10,57,67,56,48,10,65,50,56,48,10,67,49,56,48,10, 70,70,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 48,70,10,69,78,67,79,68,73,78,71,32,57,57,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,69,48, 48,10,56,53,48,48,10,70,68,48,48,10,56,53,56,48, 10,70,68,48,48,10,56,53,48,48,10,55,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,54,57, 48,48,10,57,56,56,48,10,56,51,56,48,10,57,56,56, 48,10,54,57,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,54,70,48,48,10,70, 70,56,48,10,70,67,48,48,10,70,70,56,48,10,54,70, 48,48,10,48,54,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,51,48,48,10,48,51,48,48, 10,54,51,48,48,10,54,54,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 55,10,69,78,67,79,68,73,78,71,32,49,48,48,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,54,49,56,48,10,54,51, 48,48,10,51,54,48,48,10,51,67,48,48,10,49,67,48, 48,10,49,67,48,48,10,51,69,48,48,10,51,54,48,48, 10,54,51,48,48,10,54,51,48,48,10,54,49,56,48,10, 54,49,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,57,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 69,48,48,10,50,50,48,48,10,69,66,56,48,10,56,56, 56,48,10,66,69,56,48,10,56,56,56,48,10,69,66,56, 48,10,50,50,48,48,10,51,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,65,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 49,67,48,48,10,49,67,48,48,10,70,70,56,48,10,70, 70,56,48,10,70,70,56,48,10,49,67,48,48,10,49,67, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,66,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,49,67,48,48,10,49,67,48, 48,10,69,51,56,48,10,69,51,56,48,10,69,51,56,48, 10,49,67,48,48,10,49,67,48,48,10,49,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,68,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,55,69,48,48,10,55,69, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,49,69,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,49,54,48,48,10,55,55,48,48,10, 52,49,48,48,10,55,55,48,48,10,51,55,48,48,10,49, 54,48,48,10,49,54,48,48,10,49,54,48,48,10,49,69, 48,48,10,48,69,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,70,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,69,48,48,10,50,50,48, 48,10,69,66,56,48,10,56,56,56,48,10,66,69,56,48, 10,56,56,56,48,10,69,66,56,48,10,50,65,48,48,10, 50,65,48,48,10,50,65,48,48,10,50,50,48,48,10,51, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 48,10,69,78,67,79,68,73,78,71,32,49,48,48,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,49,67,48,48,10,56,56,56, 48,10,67,57,56,48,10,55,55,48,48,10,67,57,56,48, 10,56,56,56,48,10,49,67,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,52,48,48,10,70,70,56,48,10,65,50, 56,48,10,52,49,48,48,10,65,50,56,48,10,70,70,56, 48,10,49,52,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,48,56,48,48,10,52,57,48,48,10,70, 70,56,48,10,52,57,48,48,10,48,56,48,48,10,49,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,67,48,48, 10,49,67,48,48,10,54,66,48,48,10,70,70,56,48,10, 54,66,48,48,10,49,67,48,48,10,49,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 52,10,69,78,67,79,68,73,78,71,32,49,48,48,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,49,67,48, 48,10,54,66,48,48,10,70,70,56,48,10,54,66,48,48, 10,49,67,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,53,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,49,67,48,48,10,49,67,48,48,10,54,66, 48,48,10,70,70,56,48,10,54,66,48,48,10,49,67,48, 48,10,49,67,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,54,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,49,67,48,48,10,55,70,48,48,10,70, 70,56,48,10,55,70,48,48,10,49,67,48,48,10,49,67, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,55,10,69,78,67,79,68,73,78,71,32,49, 48,48,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,52,48,48, 10,49,52,48,48,10,54,51,48,48,10,56,48,56,48,10, 54,51,48,48,10,49,52,48,48,10,49,52,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 57,10,69,78,67,79,68,73,78,71,32,49,48,48,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,56,48,48,10,49,52,48, 48,10,70,55,56,48,10,52,49,48,48,10,50,50,48,48, 10,52,57,48,48,10,53,53,48,48,10,54,51,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,65,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,48,48,10,70, 55,56,48,10,70,55,56,48,10,69,51,56,48,10,48,48, 48,48,10,56,48,56,48,10,67,49,56,48,10,67,57,56, 48,10,57,67,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,66,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,49,67,48,48,10,69,51,56,48,10,54, 51,48,48,10,50,50,48,48,10,55,70,48,48,10,55,55, 48,48,10,54,51,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,51,49,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,68,66,48,48, 10,70,70,48,48,10,55,69,48,48,10,49,56,48,48,10, 55,69,48,48,10,70,70,48,48,10,68,66,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 50,10,69,78,67,79,68,73,78,71,32,49,48,48,51,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,68,66,48,48,10,70,70,48, 48,10,54,54,48,48,10,50,52,48,48,10,54,54,48,48, 10,70,70,48,48,10,68,66,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,51,10,69,78, 67,79,68,73,78,71,32,49,48,48,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,52,57,48,48,10,50,65,48,48,10,49,67, 48,48,10,70,70,56,48,10,49,67,48,48,10,50,65,48, 48,10,52,57,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,52,10,69,78,67,79,68,73, 78,71,32,49,48,48,51,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 52,57,48,48,10,51,69,48,48,10,51,69,48,48,10,70, 70,56,48,10,51,69,48,48,10,51,69,48,48,10,52,57, 48,48,10,48,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,51,53,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,56,48,48,10,52,57,48,48,10,51,69,48,48,10, 49,67,48,48,10,51,69,48,48,10,52,57,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 54,10,69,78,67,79,68,73,78,71,32,49,48,48,51,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,50,48,48,10,49,52,48,48,10,57,52,56, 48,10,55,70,48,48,10,49,67,48,48,10,55,70,48,48, 10,57,52,56,48,10,49,52,48,48,10,50,50,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,66,10,69,78, 67,79,68,73,78,71,32,49,48,48,52,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,67,48,48,10,49,67,48,48,10,67, 57,56,48,10,67,57,56,48,10,51,69,48,48,10,49,67, 48,48,10,51,69,48,48,10,67,57,56,48,10,67,57,56, 48,10,49,67,48,48,10,49,67,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,67,10,69,78,67,79,68,73, 78,71,32,49,48,48,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,67,48,48,10,49,67,48,48,10,67,57,56,48,10, 67,57,56,48,10,51,69,48,48,10,49,67,48,48,10,51, 69,48,48,10,67,57,56,48,10,67,57,56,48,10,49,67, 48,48,10,49,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,52,68,10,69,78,67,79,68,73,78,71,32,49, 48,48,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,69,48,48,10,52,51,48,48, 10,56,49,56,48,10,56,49,56,48,10,56,49,56,48,10, 56,49,56,48,10,52,51,48,48,10,51,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,52, 70,10,69,78,67,79,68,73,78,71,32,49,48,48,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,69,48,48,10,56,50,48,48,10,56,51,56, 48,10,56,51,56,48,10,56,51,56,48,10,56,51,56,48, 10,70,70,56,48,10,51,70,56,48,10,51,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,48,10,69,78, 67,79,68,73,78,71,32,49,48,48,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,56,48,10,51,70,56,48,10,70,70,56,48,10,56,51, 56,48,10,56,51,56,48,10,56,51,56,48,10,56,51,56, 48,10,56,50,48,48,10,70,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,49,10,69,78,67,79,68,73, 78,71,32,49,48,48,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 70,69,48,48,10,56,51,48,48,10,56,51,48,48,10,56, 51,48,48,10,56,51,48,48,10,56,51,48,48,10,70,70, 48,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,50,10,69,78,67,79,68,73,78,71,32,49, 48,48,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,55,70,48,48, 10,70,70,48,48,10,56,51,48,48,10,56,51,48,48,10, 56,51,48,48,10,56,51,48,48,10,56,51,48,48,10,70, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 54,10,69,78,67,79,68,73,78,71,32,49,48,48,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,49,67,48,48,10,49,67,48, 48,10,54,66,48,48,10,70,55,56,48,10,54,66,48,48, 10,49,67,48,48,10,49,67,48,48,10,48,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,56,10,69,78, 67,79,68,73,78,71,32,49,48,48,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,56,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,56,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,65,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,49,67,48,48,10,49,67,48,48, 10,49,67,48,48,10,49,67,48,48,10,49,67,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 66,10,69,78,67,79,68,73,78,71,32,49,48,48,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,48, 48,48,10,49,67,48,48,10,49,69,48,48,10,49,69,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,53,67,10,69,78, 67,79,68,73,78,71,32,49,48,48,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,69,48,48,10,48,50,48,48,10,49,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,51,56,48,10,56,52,48,48,10,69,55,48,48,10, 70,55,56,48,10,70,55,56,48,10,54,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,69,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,54,51,48, 48,10,70,55,56,48,10,70,55,56,48,10,55,51,56,48, 10,49,48,56,48,10,69,55,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,70,55,56,48,10,69,55,56, 48,10,70,55,56,48,10,70,55,56,48,10,70,55,56,48, 10,70,55,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,51,56,48,10,68,68,56,48,10,70,68, 56,48,10,70,66,56,48,10,70,55,56,48,10,69,68,56, 48,10,67,49,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 69,51,56,48,10,68,68,56,48,10,70,68,56,48,10,70, 51,56,48,10,70,68,56,48,10,68,68,56,48,10,69,51, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,70,51,56,48, 10,69,66,56,48,10,68,66,56,48,10,67,49,56,48,10, 70,66,56,48,10,70,66,56,48,10,70,49,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,49,56,48,10,68,70,56, 48,10,68,70,56,48,10,67,51,56,48,10,70,68,56,48, 10,70,68,56,48,10,67,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,66,10,69,78, 67,79,68,73,78,71,32,49,48,49,48,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,49,56,48,10,68,70,56,48,10,68,70, 56,48,10,67,51,56,48,10,68,68,56,48,10,68,68,56, 48,10,69,51,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,67,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 67,49,56,48,10,70,68,56,48,10,70,66,56,48,10,70, 66,56,48,10,70,55,56,48,10,70,55,56,48,10,70,55, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,68,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,69,51,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 68,68,56,48,10,68,68,56,48,10,69,51,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,55, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,69,49,56,48,10,68,68,56, 48,10,68,68,56,48,10,69,49,56,48,10,70,68,56,48, 10,70,68,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,55,70,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,68,66,56,48,10,68,53,56,48,10,68,53, 56,48,10,68,53,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,66,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,56,56,56,48,10,57,56,56,48,10,56, 56,56,48,10,56,56,56,48,10,57,67,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,57,56,56,48,10,56,52,56,48,10,56,52,56,48,10, 56,56,56,48,10,57,67,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,56,48,56,48,10,57,56,56, 48,10,56,52,56,48,10,56,56,56,48,10,56,52,56,48, 10,57,56,56,48,10,56,48,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,56,48,56,48,10,56,56,56,48,10,57,56, 56,48,10,65,56,56,48,10,66,67,56,48,10,56,56,56, 48,10,56,48,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,57,67,56,48,10,57,48,56,48,10,57, 56,56,48,10,56,52,56,48,10,57,56,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,53,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,56,67,56,48,10,57,48,56,48,10,57,56,56,48,10, 57,52,56,48,10,56,56,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,56,48,56,48,10,57,67,56, 48,10,56,52,56,48,10,56,56,56,48,10,56,56,56,48, 10,56,56,56,48,10,56,48,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,56,48,56,48,10,56,56,56,48,10,57,52, 56,48,10,56,56,56,48,10,57,52,56,48,10,56,56,56, 48,10,56,48,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 56,48,56,48,10,56,56,56,48,10,57,52,56,48,10,56, 67,56,48,10,56,52,56,48,10,56,56,56,48,10,56,48, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,56,48,56,48, 10,65,52,56,48,10,65,65,56,48,10,65,65,56,48,10, 65,65,56,48,10,65,52,56,48,10,56,48,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 65,10,69,78,67,79,68,73,78,71,32,49,48,49,50,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,70,55,56,48,10,69,55,56, 48,10,70,55,56,48,10,70,55,56,48,10,70,55,56,48, 10,70,55,56,48,10,70,55,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,66,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,51,56,48,10,68,68,56,48,10,70,68, 56,48,10,70,66,56,48,10,70,55,56,48,10,69,70,56, 48,10,67,49,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,67,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 69,51,56,48,10,68,68,56,48,10,70,68,56,48,10,70, 51,56,48,10,70,68,56,48,10,68,68,56,48,10,69,51, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,68,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,70,51,56,48, 10,69,66,56,48,10,68,66,56,48,10,67,49,56,48,10, 70,66,56,48,10,70,66,56,48,10,70,66,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,67,49,56,48,10,68,70,56, 48,10,68,70,56,48,10,67,51,56,48,10,70,68,56,48, 10,70,68,56,48,10,67,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,70,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,69,49,56,48,10,68,70,56,48,10,68,70, 56,48,10,67,51,56,48,10,68,68,56,48,10,68,68,56, 48,10,69,51,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 67,49,56,48,10,70,68,56,48,10,70,66,56,48,10,70, 66,56,48,10,70,55,56,48,10,70,55,56,48,10,70,55, 56,48,10,55,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,69,51,56,48, 10,68,68,56,48,10,68,68,56,48,10,69,51,56,48,10, 68,68,56,48,10,68,68,56,48,10,69,51,56,48,10,55, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,48,48,10,69,49,56,48,10,68,68,56, 48,10,68,68,56,48,10,69,49,56,48,10,70,68,56,48, 10,70,68,56,48,10,69,51,56,48,10,55,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,48,48,10,68,66,56,48,10,68,53,56,48,10,68,53, 56,48,10,68,53,56,48,10,68,53,56,48,10,68,53,56, 48,10,68,66,56,48,10,55,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 48,67,48,48,10,48,54,48,48,10,55,70,48,48,10,55, 70,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,56,10,69,78,67,79,68,73,78,71,32,49, 48,49,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,48,48,48,10,55,68,48,48,10, 49,70,48,48,10,48,55,48,48,10,48,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 57,10,69,78,67,79,68,73,78,71,32,49,48,49,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,52,48,48,10,48,54,48, 48,10,55,51,48,48,10,55,70,56,48,10,55,51,48,48, 10,48,54,48,48,10,48,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,65,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,70, 48,48,10,48,55,48,48,10,49,70,48,48,10,55,68,48, 48,10,55,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,66,10,69,78,67,79,68,73, 78,71,32,49,48,49,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,49,67,48,48,10,49, 70,48,48,10,70,70,56,48,10,49,70,48,48,10,49,67, 48,48,10,51,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,67,48,48,10,49,69,48,48, 10,48,70,48,48,10,70,70,56,48,10,70,70,56,48,10, 70,70,56,48,10,48,70,48,48,10,49,69,48,48,10,49, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 68,10,69,78,67,79,68,73,78,71,32,49,48,49,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,50,48,48,10,48,51,48,48,10,70,70,56,48, 10,48,51,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,69,10,69,78, 67,79,68,73,78,71,32,49,48,49,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,54, 48,48,10,70,70,48,48,10,70,70,56,48,10,70,70,48, 48,10,48,54,48,48,10,48,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,57,70,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,50,48,48,10,66, 55,48,48,10,66,55,56,48,10,66,55,48,48,10,48,50, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,48,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,50,48,48,10,65,66,48,48,10, 65,66,56,48,10,65,66,48,48,10,48,50,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 49,10,69,78,67,79,68,73,78,71,32,49,48,49,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,50,48,48,10,70,70,48,48,10,70,70,56,48, 10,70,70,48,48,10,48,50,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,50,10,69,78, 67,79,68,73,78,71,32,49,48,49,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,56, 48,48,48,10,55,48,48,48,10,52,69,48,48,10,50,49, 56,48,10,49,70,56,48,10,51,69,48,48,10,55,48,48, 48,10,56,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,51,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,56,48,48,48,10, 55,48,48,48,10,51,69,48,48,10,49,70,56,48,10,50, 49,56,48,10,52,69,48,48,10,55,48,48,48,10,56,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,52,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,56,48,48,48,10,55,48,48,48, 10,51,69,48,48,10,49,70,56,48,10,49,70,56,48,10, 51,69,48,48,10,55,48,48,48,10,56,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,52,48, 48,10,56,54,48,48,10,70,70,48,48,10,70,70,56,48, 10,55,70,48,48,10,48,54,48,48,10,48,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,54,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,52,48,48,10,48,54, 48,48,10,55,70,48,48,10,70,70,56,48,10,70,70,48, 48,10,56,54,48,48,10,56,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,55,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 48,52,48,48,10,51,69,48,48,10,51,69,48,48,10,51, 70,48,48,10,51,69,48,48,10,51,69,48,48,10,48,52, 48,48,10,48,52,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,56,10,69,78,67,79,68,73,78,71,32,49, 48,49,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,52,48,48,10,70,69,48,48, 10,70,69,48,48,10,70,70,48,48,10,70,69,48,48,10, 70,69,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 57,10,69,78,67,79,68,73,78,71,32,49,48,49,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,67,48,48,10,49,54,48, 48,10,70,51,48,48,10,56,49,56,48,10,70,51,48,48, 10,49,54,48,48,10,49,67,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,65,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,67,48,48,10,49,65,48,48,10,70,57, 48,48,10,67,48,56,48,10,70,57,48,48,10,49,65,48, 48,10,49,67,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,66,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,56,48,10, 48,49,56,48,10,51,69,56,48,10,52,48,56,48,10,56, 49,56,48,10,70,51,48,48,10,69,69,48,48,10,51,67, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,65,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,53,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,51,67,48,48, 10,69,69,48,48,10,70,51,48,48,10,56,49,56,48,10, 52,48,56,48,10,51,69,56,48,10,48,49,56,48,10,48, 48,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,65, 68,10,69,78,67,79,68,73,78,71,32,49,48,49,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,56,48,48,10,49,52,48,48,10,70,50,48, 48,10,56,49,48,48,10,70,51,48,48,10,55,54,48,48, 10,49,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,69,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 67,48,48,10,55,54,48,48,10,70,51,48,48,10,56,49, 48,48,10,70,50,48,48,10,49,52,48,48,10,49,56,48, 48,10,49,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,70,10,69,78,67,79,68,73, 78,71,32,49,48,49,53,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,52,48,48,10, 70,65,48,48,10,56,49,48,48,10,52,48,56,48,10,56, 49,56,48,10,70,66,48,48,10,48,54,48,48,10,48,52, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,49,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,52,48,48,10,48,54,48,48,10,70,66,48,48, 10,56,49,56,48,10,52,48,56,48,10,56,49,48,48,10, 70,65,48,48,10,48,52,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 50,10,69,78,67,79,68,73,78,71,32,49,48,49,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,55,70,48,48,10,70,66,56,48,10,48,49,56, 48,10,48,48,56,48,10,48,49,56,48,10,70,66,56,48, 10,55,70,48,48,10,49,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,66,51,10,69,78, 67,79,68,73,78,71,32,49,48,49,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,68,50,48,48,10,50,66,48,48,10,55,70, 56,48,10,50,66,48,48,10,68,50,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,52,10,69,78,67,79,68,73, 78,71,32,49,48,49,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,48,48,48,10, 51,56,48,48,10,53,67,48,48,10,69,67,48,48,10,55, 52,48,48,10,51,67,48,48,10,48,50,56,48,10,48,49, 56,48,10,48,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,53,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,50,48,48,10,55,66,48,48,10,48,55,56,48,10, 55,66,48,48,10,70,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 54,10,69,78,67,79,68,73,78,71,32,49,48,49,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,51,56,48,10,48,49,56,48,10,48,50,56, 48,10,51,67,48,48,10,55,52,48,48,10,69,67,48,48, 10,53,67,48,48,10,51,56,48,48,10,49,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,66,55,10,69,78, 67,79,68,73,78,71,32,49,48,49,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 48,48,48,10,49,56,48,48,10,49,67,48,48,10,70,67, 48,48,10,55,67,48,48,10,51,67,48,48,10,48,50,56, 48,10,48,49,56,48,10,48,51,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,56,10,69,78,67,79,68,73, 78,71,32,49,48,49,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,50,48,48,10,55,66,48,48,10,55, 70,56,48,10,55,66,48,48,10,70,50,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,56,48,10,48,49,56,48, 10,48,50,56,48,10,51,67,48,48,10,55,67,48,48,10, 70,67,48,48,10,49,67,48,48,10,49,56,48,48,10,49, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 69,10,69,78,67,79,68,73,78,71,32,49,48,49,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,52,48,48,10,48,65,48, 48,10,70,68,48,48,10,48,48,56,48,10,70,68,48,48, 10,48,65,48,48,10,49,52,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,68,53,10,69,78, 67,79,68,73,78,71,32,49,48,49,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,48,56,48,10,51,49,56,48,10,51,49,56,48,10,50, 65,56,48,10,50,65,56,48,10,50,52,56,48,10,50,52, 56,48,10,50,65,56,48,10,50,65,56,48,10,51,49,56, 48,10,51,49,56,48,10,69,48,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,68,54,10,69,78,67,79,68,73, 78,71,32,49,48,49,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,56,51,56,48, 10,67,54,48,48,10,67,54,48,48,10,65,65,48,48,10, 65,65,48,48,10,57,50,48,48,10,57,50,48,48,10,65, 65,48,48,10,65,65,48,48,10,67,54,48,48,10,67,54, 48,48,10,56,51,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,68,55,10,69,78,67,79,68,73,78,71,32,49, 48,49,57,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,67,49,56,48,10,54,51,48, 48,10,54,51,48,48,10,53,53,48,48,10,53,53,48,48, 10,52,57,48,48,10,52,57,48,48,10,53,53,48,48,10, 53,53,48,48,10,54,51,48,48,10,54,51,48,48,10,67, 49,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,69, 54,10,69,78,67,79,68,73,78,71,32,49,48,50,49,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 70,56,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,54,67,48,48, 10,54,67,48,48,10,54,67,48,48,10,55,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,55,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,48,68,56,48,10,48,68,56,48,10,48,68,56, 48,10,48,68,56,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,69,56,10,69,78,67,79,68,73, 78,71,32,49,48,50,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,48,48,10,48,51,48,48, 10,48,50,48,48,10,48,54,48,48,10,48,52,48,48,10, 48,67,48,48,10,48,56,48,48,10,48,67,48,48,10,48, 52,48,48,10,48,54,48,48,10,48,50,48,48,10,48,51, 48,48,10,48,49,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,69,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,49,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,56,48,48,10,48,67,48,48,10,48,52,48, 48,10,48,54,48,48,10,48,50,48,48,10,48,51,48,48, 10,48,49,48,48,10,48,51,48,48,10,48,50,48,48,10, 48,54,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,69, 65,10,69,78,67,79,68,73,78,71,32,49,48,50,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 57,48,48,10,49,66,48,48,10,49,50,48,48,10,51,54, 48,48,10,50,52,48,48,10,54,67,48,48,10,52,56,48, 48,10,54,67,48,48,10,50,52,48,48,10,51,54,48,48, 10,49,50,48,48,10,49,66,48,48,10,48,57,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,66,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,52,48,48,10, 51,54,48,48,10,49,50,48,48,10,49,66,48,48,10,48, 57,48,48,10,48,68,56,48,10,48,52,56,48,10,48,68, 56,48,10,48,57,48,48,10,49,66,48,48,10,49,50,48, 48,10,51,54,48,48,10,50,52,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,48,48,48,10, 54,48,48,48,10,70,70,67,48,10,70,70,67,48,10,54, 48,48,48,10,51,48,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,51,48,48,10,48,49,56,48, 10,70,70,67,48,10,70,70,67,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,50, 48,48,10,51,51,48,48,10,54,49,56,48,10,70,70,67, 48,10,70,70,67,48,10,54,49,56,48,10,51,51,48,48, 10,49,50,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,70,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,49,56,48,48,10,51, 70,67,48,10,55,70,67,48,10,67,48,48,48,10,55,70, 67,48,10,51,70,67,48,10,49,56,48,48,10,48,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,54,48,48,10,70,70,48,48,10, 70,70,56,48,10,48,48,67,48,10,70,70,56,48,10,70, 70,48,48,10,48,54,48,48,10,48,67,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,50,48, 48,10,51,51,48,48,10,55,70,56,48,10,70,70,67,48, 10,56,48,67,48,10,70,70,67,48,10,55,70,56,48,10, 51,51,48,48,10,49,50,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 67,48,10,51,48,67,48,10,54,48,67,48,10,70,70,67, 48,10,70,70,67,48,10,54,48,67,48,10,51,48,67,48, 10,49,56,67,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,70,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,67,54,48,48,10,67, 51,48,48,10,67,49,56,48,10,70,70,67,48,10,70,70, 67,48,10,67,49,56,48,10,67,51,48,48,10,67,54,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,52,48,10,49,56,52,48,10,51,70,67,48,10, 55,70,67,48,10,67,48,52,48,10,55,70,67,48,10,51, 70,67,48,10,49,56,52,48,10,48,67,52,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,56,67,48, 48,10,56,54,48,48,10,70,70,48,48,10,70,70,56,48, 10,56,48,67,48,10,70,70,56,48,10,70,70,48,48,10, 56,54,48,48,10,56,67,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,54, 48,48,10,48,51,48,48,10,65,66,56,48,10,65,65,67, 48,10,53,53,67,48,10,53,53,56,48,10,48,51,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,67,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,69,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 70,10,69,78,67,79,68,73,78,71,32,49,48,50,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,48,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,49,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,50,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 51,10,69,78,67,79,68,73,78,71,32,49,48,50,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,52,10,69,78, 67,79,68,73,78,71,32,49,48,50,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,53,10,69,78,67,79,68,73, 78,71,32,49,48,50,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,54,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 55,10,69,78,67,79,68,73,78,71,32,49,48,50,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,57,10,69,78,67,79,68,73, 78,71,32,49,48,50,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,65,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 66,10,69,78,67,79,68,73,78,71,32,49,48,50,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,48,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,49,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,50,10,69,78,67,79,68,73,78,71,32,49, 48,51,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 51,10,69,78,67,79,68,73,78,71,32,49,48,51,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,52,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,54,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 55,10,69,78,67,79,68,73,78,71,32,49,48,51,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,56,10,69,78, 67,79,68,73,78,71,32,49,48,51,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,57,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,65,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 66,10,69,78,67,79,68,73,78,71,32,49,48,51,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,67,10,69,78, 67,79,68,73,78,71,32,49,48,51,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,69,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 70,10,69,78,67,79,68,73,78,71,32,49,48,51,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,54,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,48,48,48,10,55,48,48,48,10,55,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,54,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,54,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,55,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,55,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,48,48,48,10,55,48, 48,48,10,55,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,49,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,50,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 51,10,69,78,67,79,68,73,78,71,32,49,48,52,56,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,52,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,53,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,48,48, 48,10,55,48,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,54,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,48,48,48,10,55,48,48,48,10,55, 48,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,56,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,57,10,69,78,67,79,68,73, 78,71,32,49,48,52,56,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,65,10,69,78,67,79,68,73,78,71,32,49, 48,52,57,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 66,10,69,78,67,79,68,73,78,71,32,49,48,52,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,55,48, 48,10,48,55,48,48,10,48,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,67,10,69,78, 67,79,68,73,78,71,32,49,48,52,57,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,48,55,48,48,10,48,55,48,48,10,48, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,48,55,48,48,10,48,55,48,48,10,48,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,69,10,69,78,67,79,68,73,78,71,32,49, 48,52,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,55,48,48,10,48,55, 48,48,10,48,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 70,10,69,78,67,79,68,73,78,71,32,49,48,52,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,55,48,48,10,55,55,48,48,10,55, 55,48,48,10,48,48,48,48,10,55,55,48,48,10,55,55, 48,48,10,55,55,48,48,10,48,48,48,48,10,55,55,48, 48,10,55,55,48,48,10,55,55,48,48,10,48,48,48,48, 10,55,55,48,48,10,55,55,48,48,10,55,55,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,48,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,51,69,48,48,10,54,51,48,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,57,56,48,10,68,68,56,48,10,67,57, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,49,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,51,69,48, 48,10,54,66,48,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 67,57,56,48,10,70,70,56,48,10,67,57,56,48,10,67, 57,56,48,10,67,57,56,48,10,67,57,56,48,10,67,57, 56,48,10,67,57,56,48,10,54,66,48,48,10,51,69,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,48,50,10,69,78,67,79,68,73,78,71,32,49, 48,55,53,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,51,69,48,48,10,54,51, 48,48,10,69,51,56,48,10,69,51,56,48,10,68,53,56, 48,10,68,53,56,48,10,67,57,56,48,10,67,57,56,48, 10,67,57,56,48,10,67,57,56,48,10,67,57,56,48,10, 68,53,56,48,10,68,53,56,48,10,69,51,56,48,10,69, 51,56,48,10,54,51,48,48,10,51,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,48, 51,10,69,78,67,79,68,73,78,71,32,49,48,55,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,57,56,48,10,68,68,56, 48,10,67,57,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 54,51,48,48,10,51,69,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,52,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 57,56,48,10,67,57,56,48,10,70,70,56,48,10,67,57, 56,48,10,67,57,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,51,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,53,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,70,70,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,48,54,10,69,78,67,79,68,73,78,71,32,49, 48,55,53,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,49,56,48,10, 67,49,56,48,10,67,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,70,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,48, 55,10,69,78,67,79,68,73,78,71,32,49,48,55,53,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,49,52,48,48,10,49,52,48,48,10,50, 65,48,48,10,50,65,48,48,10,50,65,48,48,10,50,65, 48,48,10,50,65,48,48,10,53,53,48,48,10,53,53,48, 48,10,53,53,48,48,10,53,53,48,48,10,53,53,48,48, 10,65,50,56,48,10,65,50,56,48,10,65,50,56,48,10, 65,50,56,48,10,65,50,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,56,10,69,78, 67,79,68,73,78,71,32,49,48,55,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,65,50,56,48,10,65,50,56,48,10,65,50,56,48,10, 65,50,56,48,10,65,50,56,48,10,53,53,48,48,10,53, 53,48,48,10,53,53,48,48,10,53,53,48,48,10,53,53, 48,48,10,50,65,48,48,10,50,65,48,48,10,50,65,48, 48,10,50,65,48,48,10,50,65,48,48,10,49,52,48,48, 10,49,52,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,57,10,69,78,67,79,68,73, 78,71,32,49,48,55,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,67,49,56,48,10,67,49,56,48,10,54,51,48,48, 10,54,51,48,48,10,51,54,48,48,10,51,54,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,49, 67,48,48,10,51,54,48,48,10,51,54,48,48,10,54,51, 48,48,10,54,51,48,48,10,67,49,56,48,10,67,49,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,65,49,68,10,69,78,67,79,68,73,78,71,32,49, 48,55,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,52,49,48,48,10,54,51,48, 48,10,54,51,48,48,10,53,53,48,48,10,53,53,48,48, 10,52,57,48,48,10,52,57,48,48,10,53,53,48,48,10, 53,53,48,48,10,54,51,48,48,10,54,51,48,48,10,52, 49,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,65,51, 70,10,69,78,67,79,68,73,78,71,32,49,48,56,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,55, 56,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,54,51,48,48,10,54,51,48,48,10,70,70,56,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,48,10,69,78, 67,79,68,73,78,71,32,49,49,48,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 67,48,48,10,56,56,48,48,10,56,56,48,48,10,56,52, 48,48,10,69,50,48,48,10,57,49,48,48,10,48,56,56, 48,10,48,53,48,48,10,48,50,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,49,10,69,78,67,79,68,73, 78,71,32,49,49,48,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 48,56,56,48,10,48,56,56,48,10,49,48,56,48,10,50, 51,56,48,10,52,52,56,48,10,56,56,48,48,10,53,48, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,50,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,53,48,48,48, 10,56,56,48,48,10,52,52,56,48,10,50,51,56,48,10, 49,48,56,48,10,48,56,56,48,10,48,56,56,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 51,10,69,78,67,79,68,73,78,71,32,49,49,48,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,53,48,48,10,48,56,56, 48,10,57,49,48,48,10,69,50,48,48,10,56,52,48,48, 10,56,56,48,48,10,56,56,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,52,10,69,78, 67,79,68,73,78,71,32,49,49,48,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,52,48,48,10,51, 54,48,48,10,53,68,48,48,10,56,48,56,48,10,56,48, 56,48,10,53,68,48,48,10,51,54,48,48,10,49,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,53,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,51,56,48,48,10, 55,70,56,48,10,70,70,56,48,10,70,70,56,48,10,55, 70,56,48,10,51,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,54,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,49,69,48,48,10,51,70,48, 48,10,55,70,56,48,10,55,70,56,48,10,49,69,48,48, 10,49,69,48,48,10,49,69,48,48,10,49,69,48,48,10, 49,69,48,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 55,10,69,78,67,79,68,73,78,71,32,49,49,48,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 69,48,48,10,49,69,48,48,10,49,69,48,48,10,49,69, 48,48,10,49,69,48,48,10,49,69,48,48,10,49,69,48, 48,10,49,69,48,48,10,55,70,56,48,10,55,70,56,48, 10,51,70,48,48,10,49,69,48,48,10,48,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,56,10,69,78, 67,79,68,73,78,71,32,49,49,48,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 67,48,48,10,70,56,48,48,10,70,56,48,48,10,70,67, 48,48,10,70,69,48,48,10,57,70,48,48,10,48,70,56, 48,10,48,55,48,48,10,48,50,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,57,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,70,56,48,10, 48,70,56,48,10,48,70,56,48,10,49,70,56,48,10,51, 70,56,48,10,55,67,56,48,10,70,56,48,48,10,55,48, 48,48,10,50,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,66,48,65,10,69,78,67,79,68,73,78,71,32,49, 49,48,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,55,48,48,48, 10,70,56,48,48,10,55,67,56,48,10,51,70,56,48,10, 49,70,56,48,10,48,70,56,48,10,48,70,56,48,10,49, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,66,48, 66,10,69,78,67,79,68,73,78,71,32,49,49,48,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,50,48,48,10,48,55,48,48,10,48,70,56, 48,10,57,70,48,48,10,70,69,48,48,10,70,67,48,48, 10,70,56,48,48,10,70,56,48,48,10,70,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,66,48,67,10,69,78, 67,79,68,73,78,71,32,49,49,48,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,52,48,48,10,51, 54,48,48,10,55,70,48,48,10,70,70,56,48,10,70,70, 56,48,10,55,70,48,48,10,51,54,48,48,10,49,52,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,66,48,68,10,69,78,67,79,68,73, 78,71,32,49,49,48,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,51,70,48,48,10,55,70,56,48,10,49,69,48,48,10, 49,69,48,48,10,49,69,48,48,10,49,69,48,48,10,49, 69,48,48,10,55,70,56,48,10,51,70,48,48,10,49,69, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,48,65,10,69,78,67,79,68,73,78,71,32,49, 50,50,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,57,48,48,10,49,66,48,48,10,49,50,48, 48,10,51,54,48,48,10,50,52,48,48,10,54,67,48,48, 10,52,56,48,48,10,54,67,48,48,10,50,52,48,48,10, 51,54,48,48,10,49,50,48,48,10,49,66,48,48,10,48, 57,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,48, 66,10,69,78,67,79,68,73,78,71,32,49,50,50,57,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 52,48,48,10,51,54,48,48,10,49,50,48,48,10,49,66, 48,48,10,48,57,48,48,10,48,68,56,48,10,48,52,56, 48,10,48,68,56,48,10,48,57,48,48,10,49,66,48,48, 10,49,50,48,48,10,51,54,48,48,10,50,52,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,49,65,10,69,78, 67,79,68,73,78,71,32,49,50,51,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,56,48,10, 54,67,48,48,10,54,67,48,48,10,54,67,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,55,70,56,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,49,66,10,69,78,67,79,68,73, 78,71,32,49,50,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,56,48,10,48,68,56,48, 10,48,68,56,48,10,48,68,56,48,10,48,68,56,48,10, 48,68,56,48,10,48,68,56,48,10,48,68,56,48,10,48, 68,56,48,10,48,68,56,48,10,48,68,56,48,10,48,68, 56,48,10,55,70,56,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,51,70,10,69,78,67,79,68,73,78,71,32,49, 50,51,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,55,70,56,48,10,54,49,56,48,10,53,50,56, 48,10,53,50,56,48,10,53,50,56,48,10,52,67,56,48, 10,52,67,56,48,10,52,67,56,48,10,53,50,56,48,10, 53,50,56,48,10,53,50,56,48,10,54,49,56,48,10,55, 70,56,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,67, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,67,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,67,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,67,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,68, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,68,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,68,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,68,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,69, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,69,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,69,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,69,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 48,10,69,78,67,79,68,73,78,71,32,49,57,57,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,49,10,69,78, 67,79,68,73,78,71,32,49,57,57,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,50,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,51,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 52,10,69,78,67,79,68,73,78,71,32,49,57,57,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,55,70,56,48,10,55,70,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,53,10,69,78, 67,79,68,73,78,71,32,49,57,57,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 51,56,48,10,55,51,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,54,10,69,78,67,79,68,73, 78,71,32,49,57,57,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,55,70,56,48,10, 55,70,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,55,10,69,78,67,79,68,73,78,71,32,49, 57,57,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,70,56,48,10,55,70,56,48,10, 48,48,48,48,10,55,51,56,48,10,55,51,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 56,10,69,78,67,79,68,73,78,71,32,49,57,57,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,70,56,48,10,55,70,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,57,10,69,78, 67,79,68,73,78,71,32,49,57,57,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,51, 56,48,10,55,51,56,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,65,10,69,78,67,79,68,73, 78,71,32,49,57,57,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,51,56,48,10,55, 51,56,48,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,66,10,69,78,67,79,68,73,78,71,32,49, 57,57,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,55,51,56,48,10,55,51,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,52,68,70, 67,10,69,78,67,79,68,73,78,71,32,49,57,57,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,49,48,32,48,10,66,66,88,32,49,48, 32,50,48,32,48,32,45,52,10,66,73,84,77,65,80,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,70,56,48,10,55,70,56,48,10,48,48, 48,48,10,55,51,56,48,10,55,51,56,48,10,48,48,48, 48,10,55,51,56,48,10,55,51,56,48,10,48,48,48,48, 10,55,70,56,48,10,55,70,56,48,10,48,48,48,48,10, 55,70,56,48,10,55,70,56,48,10,48,48,48,48,10,48, 48,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,52,68,70,68,10,69,78, 67,79,68,73,78,71,32,49,57,57,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,49,48,32,48,10,66,66,88,32,49,48,32,50,48,32, 48,32,45,52,10,66,73,84,77,65,80,10,48,48,48,48, 10,55,51,56,48,10,55,51,56,48,10,48,48,48,48,10, 55,51,56,48,10,55,51,56,48,10,48,48,48,48,10,55, 70,56,48,10,55,70,56,48,10,48,48,48,48,10,55,70, 56,48,10,55,70,56,48,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,51,56,48, 10,55,51,56,48,10,48,48,48,48,10,48,48,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,52,68,70,69,10,69,78,67,79,68,73, 78,71,32,49,57,57,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,49,48,32, 48,10,66,66,88,32,49,48,32,50,48,32,48,32,45,52, 10,66,73,84,77,65,80,10,48,48,48,48,10,55,51,56, 48,10,55,51,56,48,10,48,48,48,48,10,55,70,56,48, 10,55,70,56,48,10,48,48,48,48,10,55,51,56,48,10, 55,51,56,48,10,48,48,48,48,10,55,70,56,48,10,55, 70,56,48,10,48,48,48,48,10,55,51,56,48,10,55,51, 56,48,10,48,48,48,48,10,55,70,56,48,10,55,70,56, 48,10,48,48,48,48,10,48,48,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,52,68,70,70,10,69,78,67,79,68,73,78,71,32,49, 57,57,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,49,48,32,48,10,66,66, 88,32,49,48,32,50,48,32,48,32,45,52,10,66,73,84, 77,65,80,10,48,48,48,48,10,55,70,56,48,10,55,70, 56,48,10,48,48,48,48,10,55,51,56,48,10,55,51,56, 48,10,48,48,48,48,10,55,70,56,48,10,55,70,56,48, 10,48,48,48,48,10,55,51,56,48,10,55,51,56,48,10, 48,48,48,48,10,55,70,56,48,10,55,70,56,48,10,48, 48,48,48,10,55,51,56,48,10,55,51,56,48,10,48,48, 48,48,10,48,48,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,102,10,69,78,67, 79,68,73,78,71,32,54,52,50,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,66,56,48,10,54, 54,52,48,10,54,54,52,48,10,54,54,48,48,10,54,54, 48,48,10,70,70,56,48,10,54,54,48,48,10,54,54,48, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,10,69,78,67,79,68,73,78,71,32,54,52,50, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,49,48,32,48,10,66,66,88,32, 49,48,32,50,48,32,48,32,45,52,10,66,73,84,77,65, 80,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,69,48,48,10,51,49,48,48,10,51,51,48,48,10, 51,51,48,48,10,51,48,48,48,10,55,70,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,51,51,48,48,10,51,51,48,48,10,51,55,56, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,102,108,10,69,78,67,79,68, 73,78,71,32,54,52,50,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,70,48,48,10,51,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,54,51,48,48, 10,70,66,48,48,10,54,51,48,48,10,54,51,48,48,10, 54,51,48,48,10,54,51,48,48,10,54,51,48,48,10,54, 51,48,48,10,54,55,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 102,105,10,69,78,67,79,68,73,78,71,32,54,52,50,53, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 55,55,56,48,10,68,67,67,48,10,67,67,67,48,10,67, 67,48,48,10,67,67,48,48,10,70,70,67,48,10,67,67, 67,48,10,67,67,67,48,10,67,67,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,102,108,10,69,78,67,79,68, 73,78,71,32,54,52,50,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,55,55,67,48,10,67,67,67, 48,10,67,67,67,48,10,67,67,67,48,10,67,67,67,48, 10,70,69,67,48,10,67,67,67,48,10,67,67,67,48,10, 67,67,67,48,10,67,67,67,48,10,67,67,67,48,10,67, 67,67,48,10,67,67,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,48,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,67,48,48,10,54,54,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,70,70,56, 48,10,54,54,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,54,54,52,48,10,54,54,67,48,10, 54,51,56,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 48,54,10,69,78,67,79,68,73,78,71,32,54,52,50,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,70,48,48,10,49,66,48,48,10,49,66,48,48,10,49, 66,48,48,10,49,66,48,48,10,55,55,67,48,10,67,51, 48,48,10,67,51,48,48,10,55,66,48,48,10,48,70,48, 48,10,48,55,48,48,10,67,70,52,48,10,55,57,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,51,10,69, 78,67,79,68,73,78,71,32,54,52,50,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,49,50,48,48,10,53,48,48,48,10,53,48,48,48,10, 51,48,48,48,10,57,67,56,48,10,57,52,56,48,10,57, 52,56,48,10,57,52,56,48,10,57,52,56,48,10,57,52, 56,48,10,66,53,56,48,10,53,50,56,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,52,10,69,78,67,79,68, 73,78,71,32,54,52,50,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,55,56,48,10,49,52,48,48, 10,57,52,56,48,10,57,52,56,48,10,57,52,56,48,10, 57,52,56,48,10,57,52,56,48,10,57,52,56,48,10,66, 54,56,48,10,53,53,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,49,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,49,52,48,48,10,49,52, 48,48,10,49,52,48,48,10,49,52,48,48,10,57,55,48, 48,10,57,52,56,48,10,57,52,56,48,10,57,52,56,48, 10,57,52,56,48,10,57,52,56,48,10,66,52,56,48,10, 53,52,56,48,10,48,52,48,48,10,48,52,48,48,10,48, 52,48,48,10,48,52,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 49,54,10,69,78,67,79,68,73,78,71,32,54,52,50,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,53,48,48,48,10,53, 48,48,48,10,51,67,48,48,10,57,52,56,48,10,57,52, 56,48,10,57,52,56,48,10,57,52,56,48,10,57,52,56, 48,10,57,52,56,48,10,66,53,56,48,10,53,50,56,48, 10,49,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,67,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,55,10,69, 78,67,79,68,73,78,71,32,54,52,50,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,50,56,48,48,10,50,56,48,48,10,50,56,48,48,10, 50,56,48,48,10,65,67,56,48,10,65,65,56,48,10,65, 65,56,48,10,65,65,56,48,10,65,65,56,48,10,65,65, 56,48,10,65,65,56,48,10,54,57,48,48,10,48,56,48, 48,10,48,56,48,48,10,48,56,48,48,10,48,56,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,68,10,69,78,67,79,68, 73,78,71,32,54,52,50,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,51,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,49,69,10,69,78,67,79,68,73,78,71,32, 54,52,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,54,49,56,48,10,54, 49,56,48,10,51,51,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,102,105,105,53, 55,55,48,53,10,69,78,67,79,68,73,78,71,32,54,52, 50,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,55,48,48,10,70,55,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,51,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,51,70,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,48, 10,69,78,67,79,68,73,78,71,32,54,52,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,55,48, 48,10,69,55,56,48,10,67,49,56,48,10,67,49,56,48, 10,54,49,56,48,10,51,49,56,48,10,49,57,56,48,10, 48,68,56,48,10,55,70,56,48,10,55,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,49,10,69,78,67, 79,68,73,78,71,32,54,52,50,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,51,56,48,10,67,51, 56,48,10,54,51,56,48,10,51,54,48,48,10,55,67,48, 48,10,69,67,48,48,10,67,54,48,48,10,67,51,48,48, 10,54,49,56,48,10,69,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,50,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,51,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,52, 10,69,78,67,79,68,73,78,71,32,54,52,50,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,48,49,56,48,10,48,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,70,70,56,48,10,70,70,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,53,10,69,78,67, 79,68,73,78,71,32,54,52,50,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,67,48,48,48,10,67,48,48,48,10,67, 48,48,48,10,67,48,48,48,10,70,70,48,48,10,70,70, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,48,49,56,48,10,48,49,48,48,10,48,51,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,54,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,48,48,10,70,70,56,48,10,52, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,67,49, 56,48,10,67,49,56,48,10,67,49,56,48,10,70,70,56, 48,10,70,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,55,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,56, 10,69,78,67,79,68,73,78,71,32,54,52,50,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,70,48, 48,10,70,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,69,49,56,48,10,69,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,57,10,69,78,67, 79,68,73,78,71,32,54,52,50,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,97,102,105,105,53,55,54,57,52,10,69,78,67,79,68, 73,78,71,32,54,52,50,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,49,56, 48,10,48,48,48,48,10,67,68,56,48,10,67,68,56,48, 10,67,68,56,48,10,67,68,56,48,10,67,68,56,48,10, 68,68,56,48,10,70,57,56,48,10,69,49,56,48,10,70, 70,48,48,10,70,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,54,57,53,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 48,48,48,48,10,67,68,56,48,10,67,68,56,48,10,67, 68,56,48,10,67,68,56,48,10,67,68,56,48,10,68,68, 56,48,10,70,57,56,48,10,69,49,56,48,10,70,70,48, 48,10,70,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,67,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,49,56,48,10,48,49,56,48,10,48,48,48,48, 10,67,68,56,48,10,67,68,56,48,10,70,68,56,48,10, 70,68,56,48,10,67,68,56,48,10,68,68,56,48,10,70, 57,56,48,10,69,49,56,48,10,70,70,48,48,10,70,69, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,50,68, 10,69,78,67,79,68,73,78,71,32,54,52,51,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,67,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,67,68,56, 48,10,67,68,56,48,10,70,68,56,48,10,70,68,56,48, 10,67,68,56,48,10,68,68,56,48,10,70,57,56,48,10, 69,49,56,48,10,70,70,48,48,10,70,69,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,50,69,10,69,78,67, 79,68,73,78,71,32,54,52,51,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,67,51,56,48,10,67,51, 56,48,10,54,51,56,48,10,51,54,48,48,10,55,67,48, 48,10,69,67,48,48,10,67,54,48,48,10,67,51,48,48, 10,54,49,56,48,10,69,49,56,48,10,48,48,48,48,10, 51,70,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,70,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,51,56,48,10,67,51,56,48,10,54, 51,56,48,10,51,54,48,48,10,55,67,48,48,10,69,67, 48,48,10,67,54,48,48,10,67,51,48,48,10,54,49,56, 48,10,69,49,56,48,10,48,48,48,48,10,51,70,48,48, 10,48,67,48,48,10,48,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,51,48,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,68,66,56,48,10,68,66,56,48,10,54,51,56,48,10, 51,54,48,48,10,55,67,48,48,10,69,67,48,48,10,67, 54,48,48,10,67,51,48,48,10,54,49,56,48,10,69,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,51,49, 10,69,78,67,79,68,73,78,71,32,54,52,51,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,70,69,48, 48,10,70,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,51,51,48,48,10,51,51,48,48,10,48,51,48,48,10, 48,51,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,51,50,10,69,78,67, 79,68,73,78,71,32,54,52,51,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,56,48,48,10,55,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,54,67,48, 48,10,54,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,69,48,48,10,54,54,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,51,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,70,70,56,48,10,70,70,56,48,10,48, 51,48,48,10,48,51,48,48,10,51,51,48,48,10,51,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,51,52,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,68,56,48,10,54,68,56,48,10,54, 49,56,48,10,54,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,53,55,55, 50,51,10,69,78,67,79,68,73,78,71,32,54,52,51,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,54,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 51,69,48,48,10,48,70,48,48,10,48,70,48,48,10,54, 67,48,48,10,54,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,51,56,10,69,78,67,79,68, 73,78,71,32,54,52,51,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,67,51,48,48,10,67,51,56,48, 10,67,49,56,48,10,67,49,56,48,10,68,57,56,48,10, 68,57,56,48,10,67,49,56,48,10,67,51,56,48,10,70, 70,48,48,10,55,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,51,57,10,69,78,67,79,68,73,78,71,32, 54,52,51,49,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,51,67,48,48,10,48,67,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,65,10,69,78,67,79,68,73,78,71,32,54,52,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,70,70,48,48,10,48,54,48,48,10,48,54, 48,48,10,54,54,48,48,10,54,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,66,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,48,49,56,48,10,48,49,56,48,10,49, 57,56,48,10,49,57,56,48,10,48,49,56,48,10,48,49, 56,48,10,70,70,56,48,10,70,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,51,67,10,69,78,67,79,68, 73,78,71,32,54,52,51,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,67,48,48,48,10,67,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,48,49,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,51,69,10,69,78,67,79,68,73,78,71,32, 54,52,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,68,70,48,48,10,70,70,56,48,10,55,49,56, 48,10,54,49,56,48,10,67,68,56,48,10,67,68,56,48, 10,67,49,56,48,10,67,49,56,48,10,67,70,56,48,10, 68,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,48,10,69,78,67,79,68,73,78,71,32,54,52,51,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,51,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,54,67,48,48,10,54,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,51,67,48,48,10,51,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,52,49,10,69, 78,67,79,68,73,78,71,32,54,52,51,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,49,56,48,10,54,49, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,51,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,48,48, 10,67,51,48,48,10,67,51,48,48,10,68,66,48,48,10, 68,66,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,52,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,48,48,10,70,70,56,48,10,67,49,56, 48,10,67,49,56,48,10,69,68,56,48,10,69,68,56,48, 10,48,49,56,48,10,48,49,56,48,10,70,70,56,48,10, 70,70,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,54,10,69,78,67,79,68,73,78,71,32,54,52,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 51,56,48,10,69,51,56,48,10,55,49,56,48,10,51,51, 48,48,10,49,69,48,48,10,54,67,48,48,10,54,54,48, 48,10,48,51,48,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,52,55,10,69, 78,67,79,68,73,78,71,32,54,52,51,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,49,48,32,48,10,66,66,88,32,49,48,32,50,48, 32,48,32,45,52,10,66,73,84,77,65,80,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,48,48,10, 70,70,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 68,56,48,10,54,68,56,48,10,54,51,48,48,10,54,54, 48,48,10,54,67,48,48,10,54,56,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,56,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,49,48, 32,48,10,66,66,88,32,49,48,32,50,48,32,48,32,45, 52,10,66,73,84,77,65,80,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,48,48,10,70,70,56,48, 10,48,49,56,48,10,48,49,56,48,10,49,57,56,48,10, 49,57,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,57,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,49,48,32,48,10,66, 66,88,32,49,48,32,50,48,32,48,32,45,52,10,66,73, 84,77,65,80,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,67,68,56,48,10,67,68,56,48,10,70,68,56, 48,10,70,68,56,48,10,67,68,56,48,10,68,68,56,48, 10,70,57,56,48,10,69,49,56,48,10,70,70,48,48,10, 70,69,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 52,65,10,69,78,67,79,68,73,78,71,32,54,52,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,49,48,32,48,10,66,66,88,32,49, 48,32,50,48,32,48,32,45,52,10,66,73,84,77,65,80, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,48,48,10,70,70,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,68,56,48,10,54,68,56,48,10,54,49,56, 48,10,54,49,56,48,10,69,49,56,48,10,69,49,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,55,48,48, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,48,48,48,48,10,51,56,48, 48,10,51,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,52,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,55, 69,48,48,10,48,48,48,48,10,70,69,48,48,10,70,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,51,48,48, 10,70,70,56,48,10,70,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,52,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 48,48,48,48,10,70,70,48,48,10,70,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,70,70,56, 48,10,70,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,55,70,48,48,10,48,48,48,48, 10,70,70,48,48,10,70,70,56,48,10,67,49,56,48,10, 67,49,56,48,10,69,49,56,48,10,69,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,70,70,56,48,10,70,70, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,52,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,51,56, 48,10,67,51,56,48,10,54,51,56,48,10,51,54,48,48, 10,55,67,48,48,10,69,67,48,48,10,67,54,48,48,10, 67,51,48,48,10,54,49,56,48,10,69,49,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,55,48,48,10,49,68,48,48,10,50, 70,48,48,10,48,48,48,48,10,48,52,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,55,48,48,10,49,68,48,48,10,50,70,48,48,10, 48,48,48,48,10,48,52,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,52,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,52,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,52,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,53,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,53,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,54,67,48,48,10,54,67,48,48,10,48,48,48,48, 10,54,67,48,48,10,54,67,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,53,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,53,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,49,56,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,50,48,48,48,10,50,48,48,48, 10,50,67,48,48,10,51,52,48,48,10,55,56,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,50,48,48,48,10,50,48,48,48,10,50,67,48, 48,10,51,52,48,48,10,55,56,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,48,48,48,10,49, 48,48,48,10,49,54,48,48,10,49,65,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,54,48,48,10,49,65,48,48,10,51,67,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,68,56,48,10,48,68,56,48, 10,48,48,48,48,10,48,55,48,48,10,48,68,56,48,10, 52,68,56,48,10,67,55,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,54,48,48,10,48,54,48,48,10,48,48, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,54,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,51,54,48,48,10,49,69,48, 48,10,48,54,48,48,10,70,69,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,54,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,70,70,67,48,10,70,51,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,54,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,68,56,48,10,48,68,56, 48,10,48,48,48,48,10,48,68,56,48,10,48,68,56,48, 10,48,48,48,48,10,48,55,48,48,10,48,68,56,48,10, 52,68,56,48,10,67,55,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,54,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,68,56,48,10,48,68,56,48,10,48,48, 48,48,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,55,48,48,10,48,68,56,48,10,52,68,56,48, 10,67,55,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,54,48,48,10,51,54,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,49,67, 48,48,10,51,54,48,48,10,51,54,48,48,10,49,69,48, 48,10,48,54,48,48,10,70,69,48,48,10,70,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,51,54,48,48,10, 51,54,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 51,48,48,10,51,51,48,48,10,51,51,48,48,10,49,69, 48,48,10,70,70,67,48,10,70,51,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 54,48,48,10,54,54,48,48,10,67,48,48,48,10,67,54, 48,48,10,67,54,48,48,10,69,48,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 54,70,67,48,10,67,67,48,48,10,67,48,48,48,10,67, 67,48,48,10,69,67,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,54,48,48,48,10,68,66,48,48,10,68,66, 48,48,10,67,48,48,48,10,69,48,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 54,51,67,48,10,67,48,48,48,10,68,66,48,48,10,68, 66,48,48,10,69,48,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,55,66,48,48,10,68,66,48,48,10,67,48, 48,48,10,67,67,48,48,10,69,67,48,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 55,66,67,48,10,68,66,48,48,10,67,51,48,48,10,67, 67,48,48,10,69,67,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,55,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,55,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,55,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,56,48,48,10, 55,70,56,48,10,52,70,56,48,10,49,56,48,48,10,51, 48,48,48,10,54,68,56,48,10,67,68,56,48,10,67,48, 48,48,10,67,68,56,48,10,69,68,56,48,10,55,70,56, 48,10,51,70,56,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,55,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,55,70,56,48, 10,52,70,56,48,10,49,67,48,48,10,51,55,67,48,10, 55,66,67,48,10,68,66,48,48,10,67,48,48,48,10,68, 66,48,48,10,70,66,48,48,10,55,70,56,48,10,51,70, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,48,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,56, 48,48,10,51,67,48,48,10,48,54,48,48,10,48,51,48, 48,10,48,49,56,48,10,70,70,56,48,10,70,70,56,48, 10,48,48,48,48,10,54,67,48,48,10,54,67,48,48,10, 48,48,48,48,10,54,67,48,48,10,54,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,49,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,69,48,48,10,55, 70,56,48,10,54,51,56,48,10,48,54,48,48,10,48,70, 48,48,10,70,68,67,48,10,70,48,67,48,10,48,48,48, 48,10,51,54,48,48,10,51,54,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,50,10,69,78,67,79,68,73,78,71,32,54,52, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,49,66, 48,48,10,49,66,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,51, 10,69,78,67,79,68,73,78,71,32,54,52,51,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,49,66,48,48,10,49, 66,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,52,10,69,78,67, 79,68,73,78,71,32,54,52,51,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 54,48,48,10,51,54,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,53,10,69,78,67,79,68,73,78, 71,32,54,52,51,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,54,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,55, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,56,10,69,78,67, 79,68,73,78,71,32,54,52,51,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 49,48,48,48,10,49,48,48,48,10,49,54,48,48,10,49, 65,48,48,10,51,67,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,48,48,48,10,49,48,48,48, 10,49,54,48,48,10,49,65,48,48,10,51,67,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,65,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,49,66,48,48,10,49,66,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,66, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,66,48,48,10,49,66,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,56,67,10,69,78,67, 79,68,73,78,71,32,54,52,51,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 56,48,48,10,48,56,48,48,10,48,66,48,48,10,48,68, 48,48,10,49,69,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,67,48,48,10, 70,56,48,48,10,69,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,56,68,10,69,78,67,79,68,73,78, 71,32,54,52,51,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 48,56,48,48,10,48,66,48,48,10,48,68,48,48,10,49, 69,48,48,10,48,48,48,48,10,48,54,48,48,10,48,55, 48,48,10,48,51,67,48,10,48,51,67,48,10,48,55,48, 48,10,48,69,48,48,10,51,67,48,48,10,70,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,56,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,67,48, 10,48,49,67,48,10,48,51,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,56,70, 10,69,78,67,79,68,73,78,71,32,54,52,51,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,67,48,10,48,49,67, 48,10,48,51,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,50,10,69,78,67,79,68,73,78,71,32,54,52, 52,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,51, 10,69,78,67,79,68,73,78,71,32,54,52,52,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,52,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,53,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,54,10,69,78,67,79,68,73,78,71,32,54,52, 52,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,55, 10,69,78,67,79,68,73,78,71,32,54,52,52,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,56,10,69,78,67, 79,68,73,78,71,32,54,52,52,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 48,48,48,48,10,51,48,48,48,10,51,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,57,10,69,78,67,79,68,73,78, 71,32,54,52,52,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,65,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,68,56,48,10,48,68,56,48,10,48,48,48, 48,10,48,48,56,48,10,48,49,48,48,10,48,50,67,48, 10,48,53,67,48,10,48,66,56,48,10,48,55,48,48,10, 48,51,48,48,10,48,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,66, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 68,56,48,10,48,68,56,48,10,48,48,48,48,10,48,48, 56,48,10,48,49,48,48,10,48,50,67,48,10,48,53,67, 48,10,48,66,56,48,10,48,55,48,48,10,48,51,48,48, 10,48,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,57,67,10,69,78,67, 79,68,73,78,71,32,54,52,52,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,54,48,48,10, 51,54,48,48,10,48,49,48,48,10,48,54,48,48,10,49, 57,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,57,68,10,69,78,67,79,68,73,78, 71,32,54,52,52,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,54,48,48,10,51,54,48,48, 10,48,49,48,48,10,48,54,48,48,10,49,57,56,48,10, 50,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,57,69,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,67,49,56,48,10,67, 49,56,48,10,67,49,56,48,10,67,49,56,48,10,69,51, 56,48,10,55,70,48,48,10,51,69,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,57,70, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,67,49,56,48,10,67,49,67,48,10, 67,49,67,48,10,67,49,56,48,10,69,51,56,48,10,55, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,50, 48,48,48,10,50,48,48,48,10,50,67,48,48,10,51,52, 48,48,10,55,56,48,48,10,48,48,48,48,10,48,49,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,49,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,50,48,48,48,10, 50,48,48,48,10,50,67,48,48,10,51,52,48,48,10,55, 56,48,48,10,48,48,48,48,10,48,49,56,48,10,67,49, 56,48,10,67,49,67,48,10,67,49,67,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,50,10,69,78,67,79,68,73,78,71,32,54,52, 52,49,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,48,48,48,10,49,48,48,48,10,49,54,48,48, 10,49,65,48,48,10,51,67,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,51, 10,69,78,67,79,68,73,78,71,32,54,52,52,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,48, 48,48,10,49,48,48,48,10,49,54,48,48,10,49,65,48, 48,10,51,67,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,52,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,67,48,48,10,51, 48,48,48,10,49,67,48,48,10,51,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,53,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,49,67,48,48,10,51,48,48,48, 10,49,67,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,51,70, 48,48,10,48,51,67,48,10,48,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,54,10,69,78,67,79,68,73,78,71,32,54,52, 52,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,55,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,55, 10,69,78,67,79,68,73,78,71,32,54,52,52,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,49,69,48,48,10,49,51,67,48,10, 49,49,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,56,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,67,48,48, 10,48,56,48,48,10,49,48,48,48,10,49,48,48,48,10, 49,67,48,48,10,49,67,48,48,10,49,67,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,57,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,67, 48,48,10,70,57,67,48,10,70,66,67,48,10,48,69,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,65,10,69,78,67,79,68,73,78,71,32,54,52, 52,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,49,69,48,48,10, 51,51,48,48,10,51,55,56,48,10,51,67,56,48,10,70, 70,56,48,10,54,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,66, 10,69,78,67,79,68,73,78,71,32,54,52,52,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,69,48,48,10,51,51,48,48, 10,51,55,56,48,10,51,67,56,48,10,70,70,67,48,10, 54,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,65,67,10,69,78,67, 79,68,73,78,71,32,54,52,52,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,49,69,48,48,10,51,51,48,48,10,51,55,56, 48,10,51,67,56,48,10,70,70,56,48,10,69,55,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,65,68,10,69,78,67,79,68,73,78, 71,32,54,52,52,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,49, 69,48,48,10,51,51,48,48,10,51,55,56,48,10,51,67, 56,48,10,70,70,67,48,10,69,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,65,69,10,69,78,67,79,68,73,78,71,32,54,52, 52,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,54, 56,48,48,10,67,48,48,48,10,70,70,67,48,10,70,70, 67,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,65,70, 10,69,78,67,79,68,73,78,71,32,54,52,52,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,70,67,48,10, 55,70,67,48,10,67,48,48,48,10,70,70,67,48,10,55, 70,67,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,66,48,10,69,78,67, 79,68,73,78,71,32,54,52,52,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,48,48,48,10,67,48, 48,48,10,55,48,48,48,10,67,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,54,56,48,48,10,67,48,48,48, 10,70,70,67,48,10,70,70,67,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,66,49,10,69,78,67,79,68,73,78, 71,32,54,52,52,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,56,48,10,48, 54,48,48,10,48,51,56,48,10,48,54,48,48,10,48,48, 48,48,10,51,70,67,48,10,55,70,67,48,10,67,48,48, 48,10,70,70,67,48,10,55,70,67,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,51,10,69,78,67,79,68,73,78,71,32,54,52, 52,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,54,67,48,48,10,54,68,56,48,10,48,57,56,48, 10,49,57,56,48,10,51,49,56,48,10,49,57,56,48,10, 51,49,56,48,10,48,49,56,48,10,54,49,56,48,10,55, 70,56,48,10,51,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,52, 10,69,78,67,79,68,73,78,71,32,54,52,52,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 48,48,48,10,51,48,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,68,56,48,10,48,57,56,48,10,49,57,56, 48,10,51,49,56,48,10,49,57,56,48,10,51,49,56,48, 10,48,49,56,48,10,54,49,56,48,10,55,70,67,48,10, 51,70,52,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,53,10,69,78,67, 79,68,73,78,71,32,54,52,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 51,48,48,48,10,48,48,48,48,10,54,67,48,48,10,54, 68,56,48,10,48,55,56,48,10,49,70,48,48,10,49,67, 48,48,10,49,56,48,48,10,49,56,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,54,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,48,48,48,48,10,54,67,48,48,10,54,68,56,48,10, 48,55,56,48,10,49,70,48,48,10,49,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,55,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,67,48,48,10,49,52,48,48,10,49,67,48,48, 10,48,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,56, 10,69,78,67,79,68,73,78,71,32,54,52,52,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,67, 48,48,10,49,52,48,48,10,49,67,48,48,10,48,56,48, 48,10,51,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,67,48,10, 49,70,67,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,57,10,69,78,67, 79,68,73,78,71,32,54,52,52,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 52,48,48,10,49,52,48,48,10,48,56,48,48,10,48,56, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,65,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,52,48,48,10, 49,52,48,48,10,48,56,48,48,10,48,56,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,66,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,48,48,10,49,70,48,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,68,67, 10,69,78,67,79,68,73,78,71,32,54,52,52,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,67,48,10, 49,70,67,48,10,48,51,48,48,10,48,55,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,68,68,10,69,78,67, 79,68,73,78,71,32,54,52,52,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,48,48,48,10,53, 51,56,48,10,55,54,48,48,10,50,51,56,48,10,67,54, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,68,69,10,69,78,67,79,68,73,78, 71,32,54,52,52,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,51,54,48,48,10,51,54,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,68,70,10,69,78,67,79,68,73,78,71,32,54,52, 52,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,67,48,10,49,70,67,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,48, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,67,48,48, 10,51,69,48,48,10,51,51,48,48,10,51,70,48,48,10, 49,70,48,48,10,48,51,48,48,10,51,70,48,48,10,48, 69,48,48,10,51,67,48,48,10,70,56,48,48,10,69,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,49,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,67,48,10,49,70,67,48, 10,48,51,48,48,10,51,70,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,69,50,10,69,78,67,79,68,73,78, 71,32,54,52,52,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,56,48,48,10, 49,67,48,48,10,51,54,48,48,10,50,50,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,48,48,10,49,70,48,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,69,51,10,69,78,67,79,68,73,78,71,32,54,52, 52,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,56,48,48,10,49,67,48,48, 10,51,54,48,48,10,50,50,48,48,10,48,48,48,48,10, 49,67,48,48,10,51,69,48,48,10,51,51,48,48,10,51, 70,67,48,10,49,70,67,48,10,48,51,48,48,10,48,55, 48,48,10,48,69,48,48,10,51,67,48,48,10,70,56,48, 48,10,69,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,52, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,49,67, 48,10,48,51,67,48,10,48,54,48,48,10,67,55,56,48, 10,67,51,67,48,10,67,48,67,48,10,69,48,67,48,10, 55,70,56,48,10,51,70,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,53,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,67,48,48, 48,10,67,48,48,48,10,67,55,67,48,10,70,70,67,48, 10,55,67,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,49,56,48,48,10,49,56,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,69,54,10,69,78,67,79,68,73,78, 71,32,54,52,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,67,48,48,10,70,56,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,69,55,10,69,78,67,79,68,73,78,71,32,54,52, 52,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 70,67,48,10,70,66,67,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,69,56, 10,69,78,67,79,68,73,78,71,32,54,52,52,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,67,48,48,10, 70,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,69,57,10,69,78,67, 79,68,73,78,71,32,54,52,52,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,70,67,48,10,70,66,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,70,67,10,69,78,67,79,68,73,78, 71,32,54,52,53,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,67,48,10,48,51,67,48,10,48,54,48,48,10,67,55, 56,48,10,67,51,67,48,10,67,48,67,48,10,69,48,67, 48,10,55,70,56,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,70,68,10,69,78,67,79,68,73,78,71,32,54,52, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,67,48,10,54,55,67,48,10,54,51,56,48,10,54,48, 67,48,10,55,48,67,48,10,51,70,56,48,10,49,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,70,69, 10,69,78,67,79,68,73,78,71,32,54,52,53,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,70,69,48,48,10, 70,67,48,48,10,48,48,48,48,10,54,67,48,48,10,54, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,70,70,10,69,78,67, 79,68,73,78,71,32,54,52,53,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,70,67,48,10,70,66,67,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,53,68,10,69,78,67,79,68,73,78, 71,32,54,52,54,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 55,48,48,10,48,51,56,48,10,48,49,56,48,10,48,49, 56,48,10,49,70,56,48,10,49,70,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,53,69,10,69,78,67,79,68,73,78,71,32,54,52, 54,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,53,70, 10,69,78,67,79,68,73,78,71,32,54,52,54,48,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,49,67,48,10,48,51,67,48, 10,48,54,48,48,10,67,55,56,48,10,67,51,67,48,10, 67,48,67,48,10,69,48,67,48,10,55,70,56,48,10,51, 70,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,54,48,10,69,78,67, 79,68,73,78,71,32,54,52,54,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,67,48,48,10, 53,52,48,48,10,68,67,48,48,10,53,67,48,48,10,55, 48,48,48,10,48,48,48,48,10,53,52,48,48,10,53,52, 48,48,10,51,56,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,54,49,10,69,78,67,79,68,73,78, 71,32,54,52,54,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,51,48,48,48,10,54,48,48,48,10, 68,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,54,50,10,69,78,67,79,68,73,78,71,32,54,52, 54,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,48,48,48,48,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,54,51, 10,69,78,67,79,68,73,78,71,32,54,52,54,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,55, 48,48,48,10,53,48,48,48,10,55,48,48,48,10,50,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,65,56,48, 48,10,65,56,48,48,10,55,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,54,52,10,69,78,67, 79,68,73,78,71,32,54,52,54,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,65,56,48,48,10, 65,56,48,48,10,55,48,48,48,10,48,48,48,48,10,51, 48,48,48,10,54,48,48,48,10,67,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,54,53,10,69,78,67,79,68,73,78, 71,32,54,52,54,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,50,48,48,48,10,50,48,48,48, 10,50,48,48,48,10,48,48,48,48,10,65,56,48,48,10, 65,56,48,48,10,55,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,67,57,48,10,69,78,67,79,68,73,78,71,32,54,52, 54,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 55,67,48,10,54,55,67,48,10,54,51,56,48,10,54,48, 67,48,10,55,48,67,48,10,51,70,56,48,10,49,70,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,67,70,50, 10,69,78,67,79,68,73,78,71,32,54,52,55,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,51, 48,48,48,10,54,48,48,48,10,67,48,48,48,10,48,48, 48,48,10,65,56,48,48,10,65,56,48,48,10,55,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,67,70,51,10,69,78,67, 79,68,73,78,71,32,54,52,55,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,55,48,48,48,10, 53,48,48,48,10,55,48,48,48,10,50,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,65,56,48,48,10,65,56, 48,48,10,55,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,67,70,52,10,69,78,67,79,68,73,78, 71,32,54,52,55,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,65,56,48,48,10,65,56,48,48, 10,55,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 54,48,48,48,10,67,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,68,51,67,10,69,78,67,79,68,73,78,71,32,54,52, 56,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,67,48,48,10,49,56,48,48,10,51,54,48, 48,10,48,67,48,48,10,49,56,48,48,10,48,52,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,68,51,68, 10,69,78,67,79,68,73,78,71,32,54,52,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 67,48,48,10,49,56,48,48,10,51,54,48,48,10,48,67, 48,48,10,49,56,48,48,10,48,52,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,68,51,69,10,69,78,67, 79,68,73,78,71,32,54,52,56,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,49,56,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,65,48,48,10,49,66,48,48,10,48,65, 48,48,10,51,53,56,48,10,50,65,56,48,10,51,53,56, 48,10,48,65,48,48,10,49,66,48,48,10,48,65,48,48, 10,48,54,48,48,10,48,54,48,48,10,48,51,48,48,10, 48,49,56,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,68,51,70,10,69,78,67,79,68,73,78, 71,32,54,52,56,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,48,48,48, 10,49,56,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,65,48,48,10,49,66,48,48,10,48,65,48,48,10,51, 53,56,48,10,50,65,56,48,10,51,53,56,48,10,48,65, 48,48,10,49,66,48,48,10,48,65,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,51,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,68,70,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,56,48,48,10,48,56,48, 48,10,48,48,48,48,10,50,65,48,48,10,49,67,48,48, 10,48,50,56,48,10,48,65,56,48,10,54,65,56,48,10, 69,65,56,48,10,65,65,56,48,10,69,65,56,48,10,51, 69,56,48,10,49,67,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,68,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,48,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,52,48,48,10,49,52,48,48,10,49,52,48, 48,10,49,52,48,48,10,49,52,48,48,10,49,52,48,48, 10,49,52,48,48,10,57,53,52,48,10,57,50,52,48,10, 54,48,52,48,10,48,53,52,48,10,48,48,56,48,10,48, 55,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,48,10,69,78,67, 79,68,73,78,71,32,54,53,48,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,49,10,69,78,67,79,68,73,78, 71,32,54,53,48,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,50,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,51, 10,69,78,67,79,68,73,78,71,32,54,53,48,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,52,10,69,78,67, 79,68,73,78,71,32,54,53,48,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,53,10,69,78,67,79,68,73,78, 71,32,54,53,48,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,54,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,55, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,56,10,69,78,67, 79,68,73,78,71,32,54,53,48,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,57,10,69,78,67,79,68,73,78, 71,32,54,53,48,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,65,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,66, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,48,67,10,69,78,67, 79,68,73,78,71,32,54,53,48,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,48,68,10,69,78,67,79,68,73,78, 71,32,54,53,48,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,48,69,10,69,78,67,79,68,73,78,71,32,54,53, 48,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,48,70, 10,69,78,67,79,68,73,78,71,32,54,53,48,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,50,48,10,69,78,67, 79,68,73,78,71,32,54,53,48,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,51,67,48,10, 49,67,48,48,10,54,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,50,49,10,69,78,67,79,68,73,78, 71,32,54,53,48,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,70,48,48,48,10,48,69,48,48, 10,48,49,56,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,50,50,10,69,78,67,79,68,73,78,71,32,54,53, 48,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,49,70,56,48,10,51,48,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,50,51, 10,69,78,67,79,68,73,78,71,32,54,53,48,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,67,51,48,48,10,55,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,48,10,69,78,67, 79,68,73,78,71,32,54,53,49,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,51,48,48,48,10, 54,48,48,48,10,68,56,48,48,10,51,48,48,48,10,54, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,49,10,69,78,67,79,68,73,78, 71,32,54,53,49,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,54,48,48,48, 10,68,56,48,48,10,51,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,70,70,67,48,10,70,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,50,10,69,78,67,79,68,73,78,71,32,54,53, 49,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,67,48, 48,10,53,52,48,48,10,68,67,48,48,10,53,67,48,48, 10,55,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,51, 10,69,78,67,79,68,73,78,71,32,54,53,49,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,52,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,67,48,48,48,10, 66,48,48,48,10,54,48,48,48,10,67,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,51,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,55, 48,48,48,10,53,48,48,48,10,55,48,48,48,10,50,48, 48,48,10,67,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,55,48,48,48,10, 53,48,48,48,10,55,48,48,48,10,50,48,48,48,10,67, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,56,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,54,48,48,48,10,67,48,48, 48,10,56,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,55,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,65,56, 48,48,10,65,56,48,48,10,55,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,55,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,65,56,48,48,10,65, 56,48,48,10,55,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,70,70,67,48,10,70,70,67,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,55,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,54,48,48,48,10,57,48,48,48,10,54,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,55,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,57,48,48,48,10,54,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,70, 70,67,48,10,70,70,67,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,69,48,48,10,49,69,48,48, 10,49,56,48,48,10,49,70,48,48,10,51,70,48,48,10, 51,56,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 51,49,56,48,10,55,70,56,48,10,54,70,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,51,49,56,48, 10,55,70,56,48,10,54,70,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,69,48, 48,10,49,56,48,48,10,48,69,48,48,10,49,56,48,48, 10,48,52,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,69,48,48,10,49,56, 48,48,10,48,69,48,48,10,49,56,48,48,10,48,52,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 67,48,48,10,51,48,48,48,10,49,67,48,48,10,51,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,48,48,48,10,49,67,48,48,10,51,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,48,48,48,10,48,69, 48,48,10,49,56,48,48,10,48,69,48,48,10,49,56,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,70,67,48,10, 48,55,67,48,10,48,48,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,69,48,48,10,49,56,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,51,56,48,48,10,54,48, 48,48,10,51,57,67,48,10,54,51,67,48,10,48,54,48, 48,10,67,55,56,48,10,67,51,67,48,10,67,48,67,48, 10,69,48,67,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,69,48,48,10,49, 56,48,48,10,48,69,48,48,10,49,56,48,48,10,48,48, 48,48,10,54,55,67,48,10,54,55,67,48,10,54,51,56, 48,10,54,48,67,48,10,55,48,67,48,10,51,70,56,48, 10,49,70,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,56,48,48,10,54,48,48,48, 10,51,56,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,56,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,54,48,48,48,10,51,56,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,56,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,56,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,70,67,48,10,48,55,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,56,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,67,49,56,48,10,67,49,56,48,10,70, 70,56,48,10,55,70,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,67,49,56,48,10,67,49,56,48,10,70,70,67,48,10, 55,70,52,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,70,67,48,48,10,70,56,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,67, 48,48,10,70,70,67,48,10,70,66,67,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,54,48,48, 10,51,54,48,48,10,48,48,48,48,10,49,67,48,48,10, 51,69,48,48,10,51,55,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,70,48,48,10,49,69,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,51,54,48,48,10,51,54, 48,48,10,48,48,48,48,10,48,67,48,48,10,48,67,48, 48,10,51,67,48,48,10,54,54,48,48,10,54,54,48,48, 10,54,54,48,48,10,51,70,48,48,10,48,51,67,48,10, 48,49,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,49, 56,48,48,10,49,56,48,48,10,48,48,48,48,10,51,54, 48,48,10,51,54,48,48,10,48,48,48,48,10,67,49,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,67,49,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,56,48,48,10,49,56,48,48,10,48,48,48,48, 10,51,54,48,48,10,51,54,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,57,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,48,48,48,48,10,51,54,48, 48,10,51,54,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,57,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,54,48,48,10,67,54,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,57,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,67,48,48,10,67,67,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,57,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,48, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,49,56,48,48,10,49, 56,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,49,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,50,10,69,78,67,79,68,73,78, 71,32,54,53,49,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,51,10,69,78,67,79,68,73,78,71,32,54,53, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,52, 10,69,78,67,79,68,73,78,71,32,54,53,49,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,53,10,69,78,67, 79,68,73,78,71,32,54,53,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,67,48,48,10,48,67,48,48,10,48,48, 48,48,10,51,56,48,48,10,55,70,56,48,10,52,70,56, 48,10,49,56,48,48,10,51,48,48,48,10,54,48,48,48, 10,67,48,48,48,10,67,48,48,48,10,67,48,48,48,10, 69,48,48,48,10,55,70,56,48,10,51,70,56,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,54,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,48,48,48,10,51, 56,48,48,10,55,70,56,48,10,52,70,56,48,10,49,67, 48,48,10,51,55,67,48,10,54,51,67,48,10,67,48,48, 48,10,67,48,48,48,10,67,48,48,48,10,69,48,48,48, 10,55,70,56,48,10,51,70,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,55,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,56,48,48,10,51,67,48,48,10, 48,54,48,48,10,48,51,48,48,10,48,49,56,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,56, 10,69,78,67,79,68,73,78,71,32,54,53,49,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,51,69,48,48,10,55,70,56,48,10,54,51,56,48, 10,48,54,48,48,10,48,70,48,48,10,70,68,67,48,10, 70,48,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,57,10,69,78,67, 79,68,73,78,71,32,54,53,49,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,69,48,48,10,48,55,48,48,10,48,51,48, 48,10,48,51,48,48,10,51,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,65,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,51,48,48,10,52,51, 48,48,10,55,70,67,48,10,51,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,66,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,69,48,48,10, 48,55,48,48,10,48,51,48,48,10,48,51,48,48,10,51, 70,48,48,10,51,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,65,67, 10,69,78,67,79,68,73,78,71,32,54,53,49,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,51,48,48,10,52,51,48,48,10,55,70,67,48,10, 51,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,65,68,10,69,78,67, 79,68,73,78,71,32,54,53,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,54,48, 48,10,48,55,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,55,48,48,10,48,69,48,48,10,51,67,48,48,10, 70,56,48,48,10,69,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,65,69,10,69,78,67,79,68,73,78, 71,32,54,53,49,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,54,48,48,10,48,55, 48,48,10,48,51,67,48,10,48,51,67,48,10,48,55,48, 48,10,48,69,48,48,10,51,67,48,48,10,70,56,48,48, 10,69,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,65,70,10,69,78,67,79,68,73,78,71,32,54,53, 49,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,55,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,55,48,48,10,48,69, 48,48,10,51,67,48,48,10,70,56,48,48,10,69,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,55,48,48,10,48,51,67,48,10, 48,51,67,48,10,48,55,48,48,10,48,69,48,48,10,51, 67,48,48,10,70,56,48,48,10,69,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,57,52, 48,10,48,68,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,57,52,48,10,48,68, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,49,56,48,10,54,68,56,48,10,54,68,56,48,10,70, 70,56,48,10,70,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 70,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,48,48,48,10,48,54, 67,48,10,48,54,67,48,10,48,48,48,48,10,48,57,52, 48,10,48,68,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,48,48,48,10,48,54,67,48,10,48, 54,67,48,10,48,48,48,48,10,48,57,52,48,10,48,68, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,48,48,48, 10,49,66,48,48,10,49,66,48,48,10,48,48,48,48,10, 48,49,56,48,10,54,68,56,48,10,54,68,56,48,10,70, 70,56,48,10,70,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,48,48,48,10,49,66,48, 48,10,49,66,48,48,10,48,48,48,48,10,48,49,56,48, 10,54,68,56,48,10,54,68,56,48,10,70,70,67,48,10, 70,55,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,49,56,48,10,48,66,67, 48,10,48,69,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,49,56,48,10,48,66,67,48,10,48,69, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,55,56,48,10,54,68,56,48,10,55,57,56,48,10,70, 70,56,48,10,68,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,66,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,70,70,67,48,10, 68,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,66,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,48,49, 56,48,10,48,48,48,48,10,48,49,56,48,10,48,66,67, 48,10,48,69,52,48,10,56,70,67,48,10,56,55,56,48, 10,56,52,48,48,10,67,67,48,48,10,70,67,48,48,10, 55,56,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,66,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,48,49,56,48,10,48, 48,48,48,10,48,49,56,48,10,48,66,67,48,10,48,69, 52,48,10,56,70,67,48,10,56,55,67,48,10,56,52,48, 48,10,67,67,48,48,10,70,67,48,48,10,55,56,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,66,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,48,48,48,10,48,51,48,48,10, 48,55,56,48,10,54,68,56,48,10,55,57,56,48,10,70, 70,56,48,10,68,70,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,48,48,48,10,48,51,48,48,10,48,55,56,48, 10,54,68,56,48,10,55,57,56,48,10,70,70,67,48,10, 68,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,51,48,48,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,48,48,48,10,51,48,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,51,51,56,48,10, 51,55,67,48,10,51,67,67,48,10,51,56,67,48,10,70, 70,67,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,48,48,48,10,51,48,48, 48,10,51,48,48,48,10,51,51,56,48,10,51,55,67,48, 10,51,67,67,48,10,51,56,67,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,51,48,48,10,51,51,48,48,10,51,48, 48,48,10,51,51,56,48,10,51,55,67,48,10,51,67,67, 48,10,51,56,67,48,10,70,70,67,48,10,55,70,56,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,48,48,48,10,51,48,48,48,10, 51,51,48,48,10,51,51,48,48,10,51,48,48,48,10,51, 51,56,48,10,51,55,67,48,10,51,67,67,48,10,51,56, 67,48,10,70,70,67,48,10,55,70,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,48,48,48,10,51,48,48,48,10,51,51,48,48, 10,51,51,48,48,10,51,48,48,48,10,51,51,56,48,10, 51,55,67,48,10,51,67,67,48,10,51,56,67,48,10,70, 70,67,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,48, 48,48,10,51,48,48,48,10,51,51,48,48,10,51,51,48, 48,10,51,48,48,48,10,51,51,56,48,10,51,55,67,48, 10,51,67,67,48,10,51,56,67,48,10,70,70,67,48,10, 70,70,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,67,48,48,10,51,48,48, 48,10,51,54,48,48,10,49,67,48,48,10,51,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,48,48,48,10,51,70,56,48,10,49,70,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,70,67,48,10,51,66,67,48,10,55,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,48,48,48, 10,51,70,56,48,10,49,70,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,69,48,48,10,49,70,48,48,10, 51,51,48,48,10,51,48,48,48,10,51,48,48,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,67,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,67,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,56,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,67,48,48,10,51,48,48, 48,10,51,54,48,48,10,49,67,48,48,10,51,56,48,48, 10,55,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 55,48,48,48,10,51,70,56,48,10,49,70,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,67,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,48,48,48,10,49,69,48,48,10,51, 70,48,48,10,51,51,48,48,10,49,69,48,48,10,48,67, 48,48,10,49,70,67,48,10,51,66,67,48,10,55,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,55,48,48,48, 10,51,70,56,48,10,49,70,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,67,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,48,48,48,10,48,69,48,48,10,49,70,48,48,10, 51,51,48,48,10,51,48,48,48,10,51,48,48,48,10,70, 70,56,48,10,70,70,56,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,70,48,48,10,51,51,48,48, 10,49,69,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,48,48,48,10,48,55, 48,48,10,48,68,56,48,10,52,68,56,48,10,67,55,56, 48,10,67,49,56,48,10,70,70,56,48,10,55,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,54,48,48,10, 48,54,48,48,10,48,48,48,48,10,48,55,48,48,10,48, 68,56,48,10,52,68,56,48,10,67,55,56,48,10,67,49, 56,48,10,70,70,67,48,10,55,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,70,70,67,48,10, 70,51,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,66,48,48,10,49,66,48,48,10,48,48, 48,48,10,48,54,48,48,10,48,70,48,48,10,48,57,56, 48,10,67,57,56,48,10,67,70,56,48,10,67,55,56,48, 10,67,49,56,48,10,69,51,48,48,10,55,69,48,48,10, 51,67,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 49,66,48,48,10,49,66,48,48,10,48,48,48,48,10,48, 54,48,48,10,48,70,48,48,10,48,57,56,48,10,67,57, 56,48,10,67,70,67,48,10,67,55,67,48,10,67,49,56, 48,10,69,51,48,48,10,55,69,48,48,10,51,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,51,54,48,48,10,51,54,48,48, 10,48,48,48,48,10,49,67,48,48,10,51,54,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,54,48,48,10,51,54,48,48,10,48,48,48, 48,10,49,69,48,48,10,51,51,48,48,10,51,51,48,48, 10,51,51,48,48,10,49,69,48,48,10,70,70,67,48,10, 70,51,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 49,56,48,10,48,57,56,48,10,49,57,56,48,10,51,49, 56,48,10,49,57,56,48,10,51,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,55,70,56,48,10,51,70,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,56,48,10, 48,57,56,48,10,49,57,56,48,10,51,49,56,48,10,49, 57,56,48,10,51,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,55,70,67,48,10,51,70,52,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,49,56,48,10,48,55,56,48, 10,49,70,48,48,10,49,67,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,68,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,56,48,10,48,55,56,48,10,49,70,48, 48,10,49,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,68,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,49, 56,48,10,48,49,56,48,10,48,49,56,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,54,49,56,48, 10,55,51,56,48,10,51,70,48,48,10,49,69,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,68,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,67,48,10,54,49,67,48,10,55,51,56, 48,10,51,70,48,48,10,49,69,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,68,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,52,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,69,48,48,10,49,70,48, 48,10,49,49,48,48,10,51,70,48,48,10,55,70,48,48, 10,54,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,69,48,48,10,49,70,48,48,10,49,49, 48,48,10,51,70,67,48,10,55,69,67,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,48,48,48, 10,54,48,48,48,10,54,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,67,48,48,10, 49,69,48,48,10,49,51,48,48,10,51,51,48,48,10,70, 70,48,48,10,67,69,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,69,48,48, 10,49,51,48,48,10,51,51,48,48,10,70,70,67,48,10, 67,69,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,56,48,48,10,49,57,56, 48,10,67,49,56,48,10,67,49,56,48,10,67,49,56,48, 10,67,49,56,48,10,69,51,56,48,10,55,70,48,48,10, 51,69,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,56,48,48,10,49,57,56,48,10,67,49, 56,48,10,67,49,67,48,10,67,49,67,48,10,67,49,56, 48,10,69,51,56,48,10,55,70,48,48,10,51,69,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,56,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,70, 67,48,48,10,70,56,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,53,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,51,69,48,48,10,51,55,48, 48,10,51,51,48,48,10,51,51,48,48,10,51,70,48,48, 10,49,69,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,53,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,67,48,48,10,48,67,48,48,10,51,67,48,48,10,54, 54,48,48,10,54,54,48,48,10,54,54,48,48,10,51,70, 48,48,10,48,51,67,48,10,48,49,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,49,56,48,48,10,49,67,48,48, 10,48,69,48,48,10,49,70,48,48,10,51,51,48,48,10, 51,51,56,48,10,51,54,56,48,10,51,67,56,48,10,70, 70,56,48,10,69,55,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,69,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,51,48,48,48, 10,51,48,48,48,10,51,48,48,48,10,70,49,67,48,10, 70,51,67,48,10,51,55,48,48,10,49,67,48,48,10,49, 67,48,48,10,48,69,48,48,10,48,54,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,69,68,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,49,67,48,48,10,51,69,48, 48,10,51,51,48,48,10,51,70,48,48,10,49,70,48,48, 10,48,51,48,48,10,48,55,48,48,10,48,69,48,48,10, 51,67,48,48,10,70,56,48,48,10,69,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,69,69,10,69,78,67,79,68,73,78, 71,32,54,53,50,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,49,67,48,48,10,51,69,48,48,10,51,51, 48,48,10,51,70,67,48,10,49,70,67,48,10,48,51,48, 48,10,48,55,48,48,10,48,69,48,48,10,51,67,48,48, 10,70,56,48,48,10,69,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,69,70,10,69,78,67,79,68,73,78,71,32,54,53, 50,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,49,67,48,10, 48,51,67,48,10,48,54,48,48,10,67,55,56,48,10,67, 51,67,48,10,67,48,67,48,10,69,48,67,48,10,55,70, 56,48,10,51,70,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,48, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,54,55,67,48,10, 54,55,67,48,10,54,51,56,48,10,54,48,67,48,10,55, 48,67,48,10,51,70,56,48,10,49,70,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,49,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,49,67,48,10,48,51,67,48,10,48,54,48, 48,10,67,55,56,48,10,67,51,67,48,10,67,48,67,48, 10,69,48,67,48,10,55,70,56,48,10,51,70,48,48,10, 48,48,48,48,10,49,66,48,48,10,49,66,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,50,10,69,78,67,79,68,73,78, 71,32,54,53,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,54,55,67,48,10,54,55,67,48,10,54,51,56, 48,10,54,48,67,48,10,55,70,67,48,10,51,70,56,48, 10,49,66,48,48,10,49,66,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,51,10,69,78,67,79,68,73,78,71,32,54,53, 50,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,54,48,48,10,48,54,48,48,10,70, 69,48,48,10,70,67,48,48,10,48,48,48,48,10,54,67, 48,48,10,54,67,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,52, 10,69,78,67,79,68,73,78,71,32,54,53,50,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,70,70,67,48,10, 70,66,67,48,10,48,48,48,48,10,51,54,48,48,10,51, 54,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,53,10,69,78,67, 79,68,73,78,71,32,54,53,50,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 56,52,48,48,10,70,57,56,48,10,56,49,56,48,10,50, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,68,56,48,10,48,70,56, 48,10,48,55,56,48,10,55,70,48,48,10,55,67,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,54,10,69,78,67,79,68,73,78, 71,32,54,53,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,56,56,48,48, 10,70,49,56,48,10,56,49,56,48,10,50,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,70,56,48,10,48,55, 56,48,10,55,70,67,48,10,55,67,67,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,55,10,69,78,67,79,68,73,78,71,32,54,53, 50,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,55,48,48,48,10,67,49,56, 48,10,55,49,56,48,10,67,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,68,56,48,10,48,70,56,48,10,48,55,56,48,10,55, 70,48,48,10,55,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,55,48,48,48,10,67,49,56,48,10,55,49, 56,48,10,67,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,70,56,48,10,48,55,56,48,10,55,70,67,48,10, 55,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,69,70,57,10,69,78,67, 79,68,73,78,71,32,54,53,50,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,51,49,56,48,10,51,49,56,48,10,49,57, 56,48,10,49,57,56,48,10,48,68,56,48,10,48,70,56, 48,10,48,55,56,48,10,55,70,48,48,10,55,67,48,48, 10,48,48,48,48,10,51,56,48,48,10,54,48,48,48,10, 51,56,48,48,10,54,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,70,65,10,69,78,67,79,68,73,78, 71,32,54,53,50,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,49,57,56,48,10,49, 57,56,48,10,48,68,56,48,10,48,70,56,48,10,48,55, 56,48,10,55,70,67,48,10,55,67,67,48,10,48,48,48, 48,10,51,56,48,48,10,54,48,48,48,10,51,56,48,48, 10,54,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,69,70,66,10,69,78,67,79,68,73,78,71,32,54,53, 50,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,49,56, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,57,56,48,10,49,57,56,48,10, 48,68,56,48,10,48,70,56,48,10,48,55,56,48,10,55, 70,48,48,10,55,67,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,69,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,50,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,49,57,56,48,10,49,57,56,48,10,48,68,56,48, 10,48,70,56,48,10,48,55,56,48,10,55,70,67,48,10, 55,67,67,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,49,10,69,78,67, 79,68,73,78,71,32,54,53,51,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,67,48,48,10,49,54,48,48, 10,49,50,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,69,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,51,10,69,78,67,79,68,73,78,71,32,54,53, 51,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,51,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,52, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,51,48,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,53,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,49,67,48,48,10,49,67,48,48,10,49,67,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,54,10,69,78,67,79,68,73,78, 71,32,54,53,51,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,48, 51,48,48,10,48,51,48,48,10,51,70,48,48,10,48,51, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,55,10,69,78,67,79,68,73,78,71,32,54,53, 51,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 54,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,67,48,48,10,51,67,48,48,10,54,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,57,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,55,70,48,48,10,54,51,48,48,10,54,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,67,48,48,10,49,56,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,65,10,69,78,67,79,68,73,78, 71,32,54,53,51,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,51,70,48,48,10,48,67,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,66,10,69,78,67,79,68,73,78,71,32,54,53, 51,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,54,48,48,10,48,54,48,48,10,51,70,56,48,10, 48,69,48,48,10,48,69,48,48,10,49,54,48,48,10,51, 54,48,48,10,54,54,48,48,10,48,54,48,48,10,48,67, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,67, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,49,56,48, 48,10,49,56,48,48,10,55,70,48,48,10,49,57,48,48, 10,49,65,48,48,10,49,65,48,48,10,49,56,48,48,10, 49,56,48,48,10,49,56,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,68,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,55,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,69,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,51, 70,48,48,10,48,51,48,48,10,48,51,48,48,10,51,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,51,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,70,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,49,48,48,48,10,53,49,56,48,10,52,57,56,48,10, 50,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,48, 10,69,78,67,79,68,73,78,71,32,54,53,51,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,51,70,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,49,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,49,66, 48,48,10,49,67,48,48,10,49,56,48,48,10,49,56,48, 48,10,49,56,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,56,48,10,48,49,56,48,10, 48,51,48,48,10,48,54,48,48,10,48,69,48,48,10,49, 69,48,48,10,55,54,48,48,10,54,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,51,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,55,70,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,52, 10,69,78,67,79,68,73,78,71,32,54,53,51,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,51,70,48,48,10,48,67,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,67,48,48, 10,48,67,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,55,70,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,53,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,54,48,48,10,51,70,56,48,10,48,69, 48,48,10,48,69,48,48,10,49,69,48,48,10,49,54,48, 48,10,51,54,48,48,10,54,54,48,48,10,52,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,54,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,55,70,56,48,10,49,57,56,48,10,49, 57,56,48,10,49,57,56,48,10,51,49,56,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,54,49,56, 48,10,54,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,55,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,48,67,48,48,10,48,70,48,48, 10,51,67,48,48,10,48,67,48,48,10,48,70,56,48,10, 55,67,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,48,54, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,48,67,48,48,10,49,70,56, 48,10,49,57,56,48,10,49,57,56,48,10,51,49,56,48, 10,54,49,56,48,10,48,49,56,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,48,48,48,10,51, 48,48,48,10,51,48,48,48,10,55,70,56,48,10,54,54, 48,48,10,54,54,48,48,10,67,54,48,48,10,67,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,55,70,48,48,10, 55,70,48,48,10,48,51,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,51,48,48,10,55,70,48, 48,10,55,70,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,49,56,48,10,51,49,56,48,10,55,70,56,48, 10,51,49,56,48,10,51,49,56,48,10,51,49,56,48,10, 51,49,56,48,10,51,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,52,48, 48,48,10,54,48,48,48,10,51,48,48,48,10,48,48,48, 48,10,52,49,56,48,10,54,49,56,48,10,51,51,48,48, 10,48,51,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,55,70,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,55,48, 48,10,48,68,48,48,10,49,57,56,48,10,51,48,56,48, 10,54,48,56,48,10,52,48,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,66,56,48,10,49,67,56,48,10,51,57,48,48,10,53, 57,48,48,10,49,65,48,48,10,49,65,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,56,48,48,10,49,56,48, 48,10,48,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,54,49,56,48,10,54,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,49,49,56,48,10,48,49,56,48,10, 48,49,56,48,10,48,49,56,48,10,48,51,48,48,10,48, 51,48,48,10,48,54,48,48,10,48,67,48,48,10,49,56, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,48, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,67, 48,48,10,48,67,48,48,10,51,70,56,48,10,51,49,56, 48,10,51,49,56,48,10,55,49,56,48,10,68,66,48,48, 10,56,69,48,48,10,48,54,48,48,10,48,54,48,48,10, 48,67,48,48,10,49,56,48,48,10,51,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,49,10,69,78,67, 79,68,73,78,71,32,54,53,52,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,49,56,48,10,48, 55,48,48,10,51,69,48,48,10,51,54,48,48,10,48,54, 48,48,10,48,54,48,48,10,55,70,56,48,10,48,54,48, 48,10,48,54,48,48,10,48,67,48,48,10,48,67,48,48, 10,49,56,48,48,10,51,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,52,57,56,48,10,54,68,56,48,10, 50,53,56,48,10,50,53,56,48,10,48,49,56,48,10,48, 49,56,48,10,48,49,56,48,10,48,49,56,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,67,48, 48,10,49,56,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,51,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,55,70,56,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,48,67,48,48,10,48,67,48,48,10,49, 56,48,48,10,49,56,48,48,10,51,48,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,52, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,54,48, 48,48,10,54,48,48,48,10,54,48,48,48,10,54,48,48, 48,10,55,48,48,48,10,55,56,48,48,10,54,70,48,48, 10,54,49,56,48,10,54,49,56,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,53,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,67,48,48,10,48, 67,48,48,10,48,67,48,48,10,48,67,48,48,10,55,70, 56,48,10,48,67,48,48,10,48,67,48,48,10,48,67,48, 48,10,48,67,48,48,10,49,56,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,70,48,48,10,51,70,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,55,70,56, 48,10,55,70,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,55,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,50,51,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 69,48,48,10,49,66,48,48,10,51,49,48,48,10,54,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,49,56,48,48,10,48,67, 48,48,10,48,48,48,48,10,55,70,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,54,48,48,10,48,69,48,48, 10,49,68,48,48,10,51,52,56,48,10,54,52,56,48,10, 48,52,48,48,10,48,52,48,48,10,48,52,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,51,48,48,10,48, 51,48,48,10,48,51,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,51,54,48,48,10,51,54,48,48,10, 51,54,48,48,10,51,51,48,48,10,51,51,48,48,10,51, 51,48,48,10,51,49,56,48,10,54,49,56,48,10,54,49, 56,48,10,54,49,56,48,10,67,49,56,48,10,67,49,56, 48,10,67,49,56,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,54,48,48, 48,10,54,48,48,48,10,54,48,48,48,10,54,49,48,48, 10,54,51,48,48,10,54,54,48,48,10,55,67,48,48,10, 55,56,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 48,48,48,10,54,48,48,48,10,54,49,56,48,10,51,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 48,48,10,48,51,48,48,10,48,51,48,48,10,48,51,48, 48,10,48,51,48,48,10,48,51,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,67,48,48,10,48,67, 48,48,10,49,69,48,48,10,49,69,48,48,10,51,51,48, 48,10,51,51,48,48,10,54,51,48,48,10,54,49,56,48, 10,48,49,56,48,10,48,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,67,48,48,10,48,67,48,48,10, 48,67,48,48,10,55,70,56,48,10,48,67,48,48,10,48, 67,48,48,10,50,68,48,48,10,50,68,48,48,10,50,68, 48,48,10,52,67,56,48,10,52,67,56,48,10,48,67,48, 48,10,48,67,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,48,48,10,48,51,48,48,10,48,51,48,48, 10,48,51,48,48,10,48,51,48,48,10,50,51,48,48,10, 51,54,48,48,10,49,69,48,48,10,48,67,48,48,10,48, 54,48,48,10,48,51,48,48,10,48,49,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,48, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,51,48,48,48,10,51,67,48,48,10,48,70,48, 48,10,48,51,48,48,10,51,48,48,48,10,51,67,48,48, 10,48,70,48,48,10,48,51,48,48,10,51,48,48,48,10, 51,67,48,48,10,48,70,48,48,10,48,51,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,49,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,48,67,48,48,10,49,56, 48,48,10,49,56,48,48,10,51,54,48,48,10,51,51,48, 48,10,51,51,48,48,10,54,49,56,48,10,54,49,56,48, 10,55,70,56,48,10,54,49,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,51,48,48,10,48,51,48,48,10, 50,51,48,48,10,51,51,48,48,10,49,66,48,48,10,48, 69,48,48,10,48,54,48,48,10,48,55,48,48,10,48,68, 56,48,10,48,67,56,48,10,49,56,48,48,10,51,48,48, 48,10,54,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,51,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,70,48,48,10,49,56,48,48,10,49,56,48,48, 10,49,56,48,48,10,49,56,48,48,10,55,70,56,48,10, 49,56,48,48,10,49,56,48,48,10,49,56,48,48,10,49, 56,48,48,10,49,56,48,48,10,49,56,48,48,10,48,70, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,52, 10,69,78,67,79,68,73,78,71,32,54,53,52,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,49,56, 48,48,10,49,56,48,48,10,49,66,56,48,10,49,67,56, 48,10,51,57,48,48,10,53,57,48,48,10,49,65,48,48, 10,49,65,48,48,10,49,56,48,48,10,49,56,48,48,10, 49,56,48,48,10,48,67,48,48,10,48,67,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,53,10,69,78,67, 79,68,73,78,71,32,54,53,52,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,55,67,48,48,10,48,54, 48,48,10,48,54,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,54,48,48,10,48,54,48,48,10,48,54,48,48, 10,48,54,48,48,10,55,70,56,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,55,70,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,51,48,48,10,55, 70,48,48,10,55,70,48,48,10,48,51,48,48,10,48,51, 48,48,10,48,51,48,48,10,55,70,48,48,10,55,70,48, 48,10,48,51,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,55,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,51,69,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,55,70,48,48,10,48,51,48,48,10, 48,51,48,48,10,48,51,48,48,10,48,54,48,48,10,48, 54,48,48,10,48,67,48,48,10,49,56,48,48,10,55,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,56, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,51,49, 56,48,10,51,49,56,48,10,51,49,56,48,10,51,49,56, 48,10,51,49,56,48,10,51,49,56,48,10,51,49,56,48, 10,51,49,56,48,10,48,51,48,48,10,48,51,48,48,10, 48,54,48,48,10,48,67,48,48,10,49,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,57,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,54, 67,48,48,10,54,67,48,48,10,54,67,48,48,10,54,67, 48,48,10,54,67,48,48,10,54,67,56,48,10,54,67,56, 48,10,54,68,48,48,10,54,68,48,48,10,54,69,48,48, 10,67,69,48,48,10,56,67,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,65,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,54,48,48,48,10,54,48,48,48,10, 54,48,48,48,10,54,48,48,48,10,54,48,48,48,10,54, 49,48,48,10,54,51,48,48,10,54,51,48,48,10,54,54, 48,48,10,54,54,48,48,10,54,67,48,48,10,55,56,48, 48,10,55,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,66,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,55,70,56,48,10,54,49,56,48,10,54,49,56,48, 10,54,49,56,48,10,54,49,56,48,10,54,49,56,48,10, 54,49,56,48,10,54,49,56,48,10,54,49,56,48,10,54, 49,56,48,10,54,49,56,48,10,55,70,56,48,10,54,49, 56,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,67, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,55,70, 48,48,10,54,51,48,48,10,54,51,48,48,10,54,51,48, 48,10,54,51,48,48,10,54,51,48,48,10,48,54,48,48, 10,48,54,48,48,10,48,67,48,48,10,48,67,48,48,10, 49,56,48,48,10,51,48,48,48,10,54,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,68,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,52, 48,48,48,10,54,51,48,48,10,51,51,48,48,10,49,51, 48,48,10,48,51,48,48,10,48,54,48,48,10,48,54,48, 48,10,48,67,48,48,10,48,67,48,48,10,49,56,48,48, 10,51,48,48,48,10,54,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,69,10,69,78,67,79,68,73,78, 71,32,54,53,52,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,49,48,32,48, 10,66,66,88,32,49,48,32,50,48,32,48,32,45,52,10, 66,73,84,77,65,80,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,56,48,48,10,48,69,48,48,10, 51,48,48,48,10,49,56,48,48,10,48,56,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,48,48,48,48,10,48,48,48,48, 10,48,48,48,48,10,48,48,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,49,48,32,48,10,66,66,88, 32,49,48,32,50,48,32,48,32,45,52,10,66,73,84,77, 65,80,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,67,48,48,10,49,50,48,48,10,49,50,48,48, 10,48,67,48,48,10,48,48,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,48,48,48,48,10,48,48,48,48,10,48,48,48, 48,10,48,48,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,70,67, 10,69,78,67,79,68,73,78,71,32,54,53,53,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,49,48,32,48,10,66,66,88,32,49,48,32, 50,48,32,48,32,45,52,10,66,73,84,77,65,80,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,70,51, 56,48,10,66,48,56,48,10,67,56,56,48,10,52,56,48, 48,10,51,48,48,48,10,57,56,56,48,10,57,52,56,48, 10,57,56,56,48,10,49,54,48,48,10,49,65,48,48,10, 56,50,56,48,10,56,67,56,48,10,70,51,56,48,10,48, 48,48,48,10,48,48,48,48,10,48,48,48,48,10,48,48, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,70,68,10,69,78,67, 79,68,73,78,71,32,54,53,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 49,48,32,48,10,66,66,88,32,49,48,32,50,48,32,48, 32,45,52,10,66,73,84,77,65,80,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,51,70,48,48,10,54, 49,56,48,10,52,67,56,48,10,52,67,56,48,10,55,67, 56,48,10,55,57,56,48,10,55,51,56,48,10,55,51,56, 48,10,55,51,56,48,10,55,70,56,48,10,55,51,56,48, 10,55,51,56,48,10,51,70,48,48,10,48,48,48,48,10, 48,48,48,48,10,48,48,48,48,10,48,48,48,48,10,69, 78,68,67,72,65,82,10,69,78,68,70,79,78,84,10,}; size_t lxFNT10x20_bdf_size = 938831; therion-5.4.1/loch/lxFNT6x13_bdf.h000066400000000000000000063736311307545355600165570ustar00rootroot00000000000000FT_Byte lxFNT6x13_bdf[] = { 83,84,65,82,84,70,79,78,84,32,50,46,49,10,67,79, 77,77,69,78,84,32,36,73,100,58,32,54,120,49,51,46, 98,100,102,44,118,32,49,46,49,49,50,32,50,48,48,50, 45,49,49,45,49,48,32,49,56,58,51,51,58,49,54,43, 48,48,32,109,103,107,50,53,32,82,101,108,32,109,103,107, 50,53,32,36,10,67,79,77,77,69,78,84,32,83,101,110, 100,32,98,117,103,32,114,101,112,111,114,116,115,32,116,111, 32,77,97,114,107,117,115,32,75,117,104,110,32,60,104,116, 116,112,58,47,47,119,119,119,46,99,108,46,99,97,109,46, 97,99,46,117,107,47,126,109,103,107,50,53,47,62,10,70, 79,78,84,32,45,77,105,115,99,45,70,105,120,101,100,45, 77,101,100,105,117,109,45,82,45,83,101,109,105,67,111,110, 100,101,110,115,101,100,45,45,49,51,45,49,50,48,45,55, 53,45,55,53,45,67,45,54,48,45,73,83,79,49,48,54, 52,54,45,49,10,83,73,90,69,32,49,50,32,55,53,32, 55,53,10,70,79,78,84,66,79,85,78,68,73,78,71,66, 79,88,32,54,32,49,51,32,48,32,45,50,10,83,84,65, 82,84,80,82,79,80,69,82,84,73,69,83,32,50,50,10, 70,79,78,84,78,65,77,69,95,82,69,71,73,83,84,82, 89,32,34,34,10,70,79,85,78,68,82,89,32,34,77,105, 115,99,34,10,70,65,77,73,76,89,95,78,65,77,69,32, 34,70,105,120,101,100,34,10,87,69,73,71,72,84,95,78, 65,77,69,32,34,77,101,100,105,117,109,34,10,83,76,65, 78,84,32,34,82,34,10,83,69,84,87,73,68,84,72,95, 78,65,77,69,32,34,83,101,109,105,67,111,110,100,101,110, 115,101,100,34,10,65,68,68,95,83,84,89,76,69,95,78, 65,77,69,32,34,34,10,80,73,88,69,76,95,83,73,90, 69,32,49,51,10,80,79,73,78,84,95,83,73,90,69,32, 49,50,48,10,82,69,83,79,76,85,84,73,79,78,95,88, 32,55,53,10,82,69,83,79,76,85,84,73,79,78,95,89, 32,55,53,10,83,80,65,67,73,78,71,32,34,67,34,10, 65,86,69,82,65,71,69,95,87,73,68,84,72,32,54,48, 10,67,72,65,82,83,69,84,95,82,69,71,73,83,84,82, 89,32,34,73,83,79,49,48,54,52,54,34,10,67,72,65, 82,83,69,84,95,69,78,67,79,68,73,78,71,32,34,49, 34,10,68,69,70,65,85,76,84,95,67,72,65,82,32,48, 10,70,79,78,84,95,68,69,83,67,69,78,84,32,50,10, 70,79,78,84,95,65,83,67,69,78,84,32,49,49,10,67, 79,80,89,82,73,71,72,84,32,34,80,117,98,108,105,99, 32,100,111,109,97,105,110,32,102,111,110,116,46,32,32,83, 104,97,114,101,32,97,110,100,32,101,110,106,111,121,46,34, 10,95,88,77,66,68,70,69,68,95,73,78,70,79,32,34, 69,100,105,116,101,100,32,119,105,116,104,32,120,109,98,100, 102,101,100,32,52,46,53,46,34,10,67,65,80,95,72,69, 73,71,72,84,32,57,10,88,95,72,69,73,71,72,84,32, 54,10,69,78,68,80,82,79,80,69,82,84,73,69,83,10, 67,72,65,82,83,32,52,52,51,48,10,83,84,65,82,84, 67,72,65,82,32,99,104,97,114,48,10,69,78,67,79,68, 73,78,71,32,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,48,48,10,56, 56,10,48,48,10,56,56,10,48,48,10,56,56,10,48,48, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,112,97,99, 101,10,69,78,67,79,68,73,78,71,32,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,120,99,108,97,109,10,69,78,67,79,68, 73,78,71,32,51,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,113,117,111, 116,101,100,98,108,10,69,78,67,79,68,73,78,71,32,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,110,117,109,98,101,114,115,105, 103,110,10,69,78,67,79,68,73,78,71,32,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,53,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,53,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,100,111,108,108,97,114,10,69,78,67,79, 68,73,78,71,32,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,56, 10,65,48,10,65,48,10,55,48,10,50,56,10,50,56,10, 70,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,101, 114,99,101,110,116,10,69,78,67,79,68,73,78,71,32,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,56,10,65,56,10,53,48,10,49,48, 10,50,48,10,52,48,10,53,48,10,65,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,109,112,101,114,115,97,110, 100,10,69,78,67,79,68,73,78,71,32,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,48,10,65,48,10,52,48,10, 65,48,10,57,56,10,57,48,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,113,117,111,116,101,115,105,110,103,108,101,10, 69,78,67,79,68,73,78,71,32,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,97,114,101,110,108,101,102,116,10,69,78,67,79, 68,73,78,71,32,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,50,48,10,50,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,115,116,101,114, 105,115,107,10,69,78,67,79,68,73,78,71,32,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,112,108,117,115,10,69,78,67,79,68, 73,78,71,32,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,111,109, 109,97,10,69,78,67,79,68,73,78,71,32,52,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,104,121,112,104,101,110,10,69,78,67,79, 68,73,78,71,32,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,101, 114,105,111,100,10,69,78,67,79,68,73,78,71,32,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,55,48,10,50, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,108,97,115,104,10,69,78,67, 79,68,73,78,71,32,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,52,48,10,52,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,122, 101,114,111,10,69,78,67,79,68,73,78,71,32,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,110,101,10,69,78,67,79,68,73, 78,71,32,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,54,48,10,65, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,116,119,111,10, 69,78,67,79,68,73,78,71,32,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,48,56,10,49,48,10,50,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,104,114,101,101,10,69,78,67,79,68,73,78,71, 32,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 50,48,10,55,48,10,48,56,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,111,117,114,10,69, 78,67,79,68,73,78,71,32,53,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,51,48,10,53,48,10,53,48,10,57,48,10, 70,56,10,49,48,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,105,118,101,10,69,78,67,79,68,73,78,71,32,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,66,48, 10,67,56,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,115,105,120,10,69,78,67,79, 68,73,78,71,32,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,101, 118,101,110,10,69,78,67,79,68,73,78,71,32,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,56,10,49,48,10,49,48,10,50, 48,10,50,48,10,52,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,105,103,104,116,10,69,78,67,79, 68,73,78,71,32,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,105, 110,101,10,69,78,67,79,68,73,78,71,32,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,55,56, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,99,111,108,111,110,10,69,78,67,79,68, 73,78,71,32,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,101,109, 105,99,111,108,111,110,10,69,78,67,79,68,73,78,71,32, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,50,48,10,48,48,10,48,48,10,51,48,10,50,48, 10,52,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,101,115,115,10,69,78, 67,79,68,73,78,71,32,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,52,48,10,50, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,113,117,97,108,10,69,78,67,79,68,73,78,71,32,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,114,101,97,116,101,114,10, 69,78,67,79,68,73,78,71,32,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,52,48,10,50,48,10,49,48,10,48,56,10,49,48, 10,50,48,10,52,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,113,117,101,115,116,105,111,110,10,69,78,67,79,68, 73,78,71,32,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,48,56,10,49,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,116,10, 69,78,67,79,68,73,78,71,32,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,57,56,10,65,56,10,65,56, 10,66,48,10,56,48,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,10,69,78,67,79,68,73,78,71,32,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,56,56,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,66,10,69,78,67,79,68,73,78,71, 32,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,55,48,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,67,10,69,78,67,79, 68,73,78,71,32,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,68,10, 69,78,67,79,68,73,78,71,32,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,69,10,69,78,67,79,68,73,78,71,32,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,70,10,69,78,67,79,68,73,78,71, 32,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,71,10,69,78,67,79, 68,73,78,71,32,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,57,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,72,10, 69,78,67,79,68,73,78,71,32,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,73,10,69,78,67,79,68,73,78,71,32,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,74,10,69,78,67,79,68,73,78,71, 32,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,75,10,69,78,67,79, 68,73,78,71,32,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,57,48,10,65,48,10,67,48,10,65,48,10,57,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,76,10, 69,78,67,79,68,73,78,71,32,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,77,10,69,78,67,79,68,73,78,71,32,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,68,56,10,65,56,10,65, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,78,10,69,78,67,79,68,73,78,71, 32,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,67,56,10,67,56,10, 65,56,10,65,56,10,57,56,10,57,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,79,10,69,78,67,79, 68,73,78,71,32,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,80,10, 69,78,67,79,68,73,78,71,32,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,81,10,69,78,67,79,68,73,78,71,32,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,65,56,10,55,48,10,48,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,82,10,69,78,67,79,68,73,78,71, 32,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,70,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,10,69,78,67,79, 68,73,78,71,32,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,55,48,10,48,56,10,48,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,84,10, 69,78,67,79,68,73,78,71,32,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,85,10,69,78,67,79,68,73,78,71,32,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,86,10,69,78,67,79,68,73,78,71, 32,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,87,10,69,78,67,79, 68,73,78,71,32,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,88,10, 69,78,67,79,68,73,78,71,32,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,89,10,69,78,67,79,68,73,78,71,32,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,90,10,69,78,67,79,68,73,78,71, 32,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,98,114,97,99,107,101, 116,108,101,102,116,10,69,78,67,79,68,73,78,71,32,57, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 55,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,98,97,99,107,115,108,97,115, 104,10,69,78,67,79,68,73,78,71,32,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,52,48,10,52,48,10,50,48,10, 49,48,10,49,48,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,98,114,97,99,107,101,116,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,55,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,55,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,115,99,105,105,99,105,114,99,117,109,10,69, 78,67,79,68,73,78,71,32,57,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,100,101,114,115,99,111,114,101,10,69,78,67,79, 68,73,78,71,32,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,103,114, 97,118,101,10,69,78,67,79,68,73,78,71,32,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,10,69,78,67,79,68,73,78,71, 32,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,98,10,69,78,67,79, 68,73,78,71,32,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,10, 69,78,67,79,68,73,78,71,32,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,10,69,78,67,79,68,73,78,71,32,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,55,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,10,69,78,67,79,68,73,78, 71,32,49,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,70,56,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,10,69,78, 67,79,68,73,78,71,32,49,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,103,10,69,78,67,79,68,73,78,71,32,49,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,104,10,69,78,67,79,68,73,78,71, 32,49,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,56,48, 10,66,48,10,67,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,10,69,78,67, 79,68,73,78,71,32,49,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 106,10,69,78,67,79,68,73,78,71,32,49,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,49,48,10,48,48,10,51,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,57,48,10,57,48,10, 54,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,107,10,69,78,67,79,68,73,78,71,32, 49,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,10,69,78,67,79, 68,73,78,71,32,49,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 10,69,78,67,79,68,73,78,71,32,49,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,110,10,69,78,67,79,68,73,78,71,32,49, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,10,69,78,67,79,68, 73,78,71,32,49,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,10, 69,78,67,79,68,73,78,71,32,49,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,56,48,10,56,48,10,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,113,10,69,78,67,79,68,73,78,71,32,49,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,56, 10,56,56,10,56,56,10,56,56,10,55,56,10,48,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,10,69,78,67,79,68,73, 78,71,32,49,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,10,69, 78,67,79,68,73,78,71,32,49,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,54,48, 10,49,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,10,69,78,67,79,68,73,78,71,32,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,70,48,10, 52,48,10,52,48,10,52,48,10,52,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,10,69,78,67,79,68,73,78, 71,32,49,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,118,10,69,78, 67,79,68,73,78,71,32,49,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,119,10,69,78,67,79,68,73,78,71,32,49,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,120,10,69,78,67,79,68,73,78,71, 32,49,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,53,48,10,50,48,10,50,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,121,10,69,78,67, 79,68,73,78,71,32,49,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 122,10,69,78,67,79,68,73,78,71,32,49,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,49,48, 10,50,48,10,52,48,10,56,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,98,114,97,99,101,108,101,102,116,10,69, 78,67,79,68,73,78,71,32,49,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,67,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,98,97,114,10,69,78,67,79,68,73,78,71,32,49, 50,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,98,114,97,99,101,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,49,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,115,99,105,105,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,49,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,65,56,10,57,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,112,97,99,101,10,69,78,67,79,68, 73,78,71,32,49,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,101,120, 99,108,97,109,100,111,119,110,10,69,78,67,79,68,73,78, 71,32,49,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,49,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,55,48,10,65,56,10,65,48,10,65,48,10, 65,56,10,55,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,116,101,114,108,105,110,103,10,69,78,67, 79,68,73,78,71,32,49,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 52,56,10,52,48,10,52,48,10,69,48,10,52,48,10,52, 48,10,52,56,10,66,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,117,114,114,101,110,99,121,10,69,78,67,79,68,73,78, 71,32,49,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,55,48,10,53,48,10,53,48,10,55,48,10,56,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,121,101,110,10, 69,78,67,79,68,73,78,71,32,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,70,56,10,50, 48,10,70,56,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,98,114,111,107,101,110,98,97,114,10,69,78,67, 79,68,73,78,71,32,49,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,101,99,116,105,111,110,10,69,78,67,79,68,73,78,71, 32,49,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,51,48,10,52,56,10,52,48,10,51,48, 10,52,56,10,52,56,10,51,48,10,48,56,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,100,105,101,114,101, 115,105,115,10,69,78,67,79,68,73,78,71,32,49,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,99,111,112,121,114,105,103,104,116, 10,69,78,67,79,68,73,78,71,32,49,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,55,48, 10,56,56,10,65,56,10,68,56,10,67,56,10,68,56,10, 65,56,10,56,56,10,55,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,114,100,102,101,109,105,110,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,55,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,55,56,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,117,105,108,108,101,109,111,116,108,101,102,116, 10,69,78,67,79,68,73,78,71,32,49,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,65,48,10, 65,48,10,53,48,10,50,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,108,111,103,105,99,97,108,110,111,116,10,69, 78,67,79,68,73,78,71,32,49,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,104,121,112,104,101,110,10,69,78,67,79,68,73,78, 71,32,49,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,114,101,103,105, 115,116,101,114,101,100,10,69,78,67,79,68,73,78,71,32, 49,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,55,48,10,56,56,10,69,56,10,68,56,10, 68,56,10,69,56,10,68,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,49,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,100,101,103,114,101,101,10,69,78,67,79,68, 73,78,71,32,49,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,52,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,108, 117,115,109,105,110,117,115,10,69,78,67,79,68,73,78,71, 32,49,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,50,48,10,50,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,116,119,111,115,117, 112,101,114,105,111,114,10,69,78,67,79,68,73,78,71,32, 49,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,65,48,10,50,48,10,52,48,10, 69,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,115, 117,112,101,114,105,111,114,10,69,78,67,79,68,73,78,71, 32,49,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,65,48,10,52,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,49,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,109,117,10,69,78,67,79,68,73,78,71,32, 49,56,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,57,56,10,69, 56,10,56,48,10,56,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,97,114,97,103,114, 97,112,104,10,69,78,67,79,68,73,78,71,32,49,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,69,56,10,69,56,10,69,56,10, 69,56,10,54,56,10,50,56,10,50,56,10,50,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,101,114,105,111,100,99,101,110, 116,101,114,101,100,10,69,78,67,79,68,73,78,71,32,49, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,99,101,100,105,108,108,97, 10,69,78,67,79,68,73,78,71,32,49,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,110,101,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,49,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,69,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,114,100,109,97,115,99,117,108,105,110,101,10, 69,78,67,79,68,73,78,71,32,49,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,117,105,108,108,101,109,111,116,114,105,103,104, 116,10,69,78,67,79,68,73,78,71,32,49,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,48,10,53,48,10,50,56, 10,50,56,10,53,48,10,65,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,113,117,97,114,116,101,114,10, 69,78,67,79,68,73,78,71,32,49,56,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,69,48,10,48,56,10,49, 56,10,50,56,10,51,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,111,110,101,104,97,108,102,10,69,78,67,79,68, 73,78,71,32,49,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,67,48,10,52,48, 10,52,48,10,69,48,10,49,48,10,50,56,10,48,56,10, 49,48,10,51,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,104, 114,101,101,113,117,97,114,116,101,114,115,10,69,78,67,79, 68,73,78,71,32,49,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,65,48,10,52, 48,10,50,48,10,65,48,10,52,56,10,49,56,10,50,56, 10,51,56,10,48,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,113, 117,101,115,116,105,111,110,100,111,119,110,10,69,78,67,79, 68,73,78,71,32,49,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,48, 48,10,50,48,10,50,48,10,52,48,10,56,48,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,65, 103,114,97,118,101,10,69,78,67,79,68,73,78,71,32,49, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,52,48,10,50,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,49,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,50,48,10,53,48,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,65,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,49,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,49,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,56,10,53,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,100,105,101, 114,101,115,105,115,10,69,78,67,79,68,73,78,71,32,49, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,53,48,10,53,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,65,114,105,110,103,10,69, 78,67,79,68,73,78,71,32,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,65,69,10,69,78,67,79,68,73,78,71,32,49,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,56,10,65,48,10,65,48,10,65,48, 10,66,48,10,69,48,10,65,48,10,65,48,10,66,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,99,101,100,105,108,108,97, 10,69,78,67,79,68,73,78,71,32,49,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,70,56,10,56,48,10,56,48,10,70,48,10,56,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,50,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,69,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,48,10,52,56,10,48,48,10,70,56,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,69,100,105,101,114,101,115,105,115, 10,69,78,67,79,68,73,78,71,32,50,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,103,114,97,118,101,10,69,78,67,79,68, 73,78,71,32,50,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,55,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,50,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,50,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,73,99,105,114,99,117,109,102, 108,101,120,10,69,78,67,79,68,73,78,71,32,50,48,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,48,10,52,56,10,48,48,10,55,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,73,100,105,101,114,101,115,105,115, 10,69,78,67,79,68,73,78,71,32,50,48,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,116,104,10,69,78,67,79,68,73,78,71, 32,50,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,56,10,52,56, 10,52,56,10,69,56,10,52,56,10,52,56,10,52,56,10, 70,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,78,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,50,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,56,56,10,56,56,10,67,56, 10,65,56,10,57,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,103,114,97,118,101,10,69,78,67,79, 68,73,78,71,32,50,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,79,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,50,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,79,116,105,108,100,101,10,69, 78,67,79,68,73,78,71,32,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,56,10,53, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,79,100,105,101,114,101,115,105,115,10,69,78,67,79, 68,73,78,71,32,50,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,53,48,10,53,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,109, 117,108,116,105,112,108,121,10,69,78,67,79,68,73,78,71, 32,50,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,53,48,10,50,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,79,115,108,97,115, 104,10,69,78,67,79,68,73,78,71,32,50,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 56,10,55,48,10,57,56,10,57,56,10,65,56,10,65,56, 10,65,56,10,67,56,10,67,56,10,55,48,10,56,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,103,114,97,118,101,10,69,78,67,79, 68,73,78,71,32,50,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,50, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,50,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,85,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,50,50,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,53, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,89,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,53,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,84, 104,111,114,110,10,69,78,67,79,68,73,78,71,32,50,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,70,48,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,101,114,109,97,110,100,98, 108,115,10,69,78,67,79,68,73,78,71,32,50,50,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,54,48,10,57,48,10,57,48,10,65,48,10,65, 48,10,57,48,10,56,56,10,56,56,10,66,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,50,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 50,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,50,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,99,105,114,99,117, 109,102,108,101,120,10,69,78,67,79,68,73,78,71,32,50, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,52,56,10,48,48,10,55, 48,10,48,56,10,55,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,116,105,108,100,101,10, 69,78,67,79,68,73,78,71,32,50,50,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,56,10,53,48,10,48,48,10,55,48,10,48,56,10,55, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,100,105,101,114,101,115,105,115,10,69,78,67, 79,68,73,78,71,32,50,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,114,105,110,103,10,69,78,67,79,68,73,78,71,32,50, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,52,56,10,51,48,10,48,48,10,55, 48,10,48,56,10,55,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,101,10,69,78,67,79, 68,73,78,71,32,50,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,50,56,10,55,48,10,65,48, 10,65,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 99,101,100,105,108,108,97,10,69,78,67,79,68,73,78,71, 32,50,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,56,56,10, 55,48,10,50,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,50,48,10,48,48,10,55,48,10,56,56, 10,70,56,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,55,48,10,56,56,10,70,56,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,101,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,50,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,53,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,56,48,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,103,114,97,118, 101,10,69,78,67,79,68,73,78,71,32,50,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,50,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,97,99,117,116,101,10,69,78,67,79, 68,73,78,71,32,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,54,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 99,105,114,99,117,109,102,108,101,120,10,69,78,67,79,68, 73,78,71,32,50,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,105,100, 105,101,114,101,115,105,115,10,69,78,67,79,68,73,78,71, 32,50,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,53,48,10,48,48, 10,54,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,101,116,104,10,69, 78,67,79,68,73,78,71,32,50,52,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,50, 48,10,54,48,10,49,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,116,105,108,100,101,10,69,78,67,79,68,73,78, 71,32,50,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,56,10,53,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,103,114,97, 118,101,10,69,78,67,79,68,73,78,71,32,50,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,111,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,50,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,50,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 56,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,111, 116,105,108,100,101,10,69,78,67,79,68,73,78,71,32,50, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,56,10,53,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,100,105,101,114,101,115, 105,115,10,69,78,67,79,68,73,78,71,32,50,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,100,105,118,105,100,101,10,69,78,67, 79,68,73,78,71,32,50,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,48,48,10,70,56,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 111,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 50,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 55,48,10,57,56,10,65,56,10,65,56,10,67,56,10,55, 48,10,56,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,103,114,97,118,101, 10,69,78,67,79,68,73,78,71,32,50,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,121,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,50,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,56,10,56,56,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,104,111,114,110,10,69,78,67,79,68,73, 78,71,32,50,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,66,48,10,67,56,10,56,56,10,56,56,10,67, 56,10,66,48,10,56,48,10,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,121,100,105, 101,114,101,115,105,115,10,69,78,67,79,68,73,78,71,32, 50,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,109,97,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,50,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,70, 56,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,109,97,99,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 65,98,114,101,118,101,10,69,78,67,79,68,73,78,71,32, 50,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,50,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,55,48,10,48,48,10,55,48,10,48,56,10, 55,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,65,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,50,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,53, 48,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,48,56,10,48,52,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 111,103,111,110,101,107,10,69,78,67,79,68,73,78,71,32, 50,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,56,10,55,56,10,56,56,10,57,56,10,54, 56,10,48,56,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,67,97,99,117,116,101, 10,69,78,67,79,68,73,78,71,32,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,48,48,10,55,48,10,56,56,10,56,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,99,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,50,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,99, 105,114,99,117,109,102,108,101,120,10,69,78,67,79,68,73, 78,71,32,50,54,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,51,48,10,52,56,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,56,48,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,99,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,50,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,67,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,99,100,111,116,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,50,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,67,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,50,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,56,10,51, 48,10,48,48,10,55,48,10,56,56,10,56,48,10,56,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,99,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,50,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,56,10,51,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,68,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,50,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,70,48,10,52,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,100,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,50,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,52,56,10,51,48,10,48,48,10, 48,56,10,48,56,10,55,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 68,99,114,111,97,116,10,69,78,67,79,68,73,78,71,32, 50,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,69,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,99,114,111,97,116, 10,69,78,67,79,68,73,78,71,32,50,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,56,10,49,67,10,48,56,10,55,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,101, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,70,56,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,50,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,50,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,69,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,50,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,101,100,111,116, 97,99,99,101,110,116,10,69,78,67,79,68,73,78,71,32, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,48,48,10, 55,48,10,56,56,10,70,56,10,56,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,69,111,103,111,110,101, 107,10,69,78,67,79,68,73,78,71,32,50,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,56,48,10,70,56,10,50,48,10, 49,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,111,103,111,110,101,107,10,69,78,67, 79,68,73,78,71,32,50,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,70,56,10,56, 48,10,56,56,10,55,48,10,50,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 69,99,97,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,56,10,51,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,99,97,114,111,110, 10,69,78,67,79,68,73,78,71,32,50,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,51,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,71,99,105,114,99,117,109,102,108,101,120,10, 69,78,67,79,68,73,78,71,32,50,56,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,51,48,10, 52,56,10,48,48,10,55,48,10,56,56,10,56,48,10,56, 48,10,57,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,50,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,98,114,101,118,101,10,69,78,67,79,68,73,78, 71,32,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,57,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,103,98,114,101, 118,101,10,69,78,67,79,68,73,78,71,32,50,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,71,100,111,116,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,50,56,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,48,48,10,55,48,10,56,56,10,56,48,10, 56,48,10,57,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,103,100,111,116,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,111,109,109,97,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,56,48,10,57,56, 10,56,56,10,56,56,10,55,48,10,50,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,103,99,111,109,109,97,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,50,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,48,10,50, 48,10,54,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,72,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,50,57,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,51,48,10,52,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,70,56,10, 56,56,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,104,99,105,114,99,117,109,102,108,101,120,10,69,78,67, 79,68,73,78,71,32,50,57,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,48,10,56,48,10,66,48,10,67,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 72,98,97,114,10,69,78,67,79,68,73,78,71,32,50,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,104,98,97,114,10,69,78,67, 79,68,73,78,71,32,50,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 70,48,10,56,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 73,116,105,108,100,101,10,69,78,67,79,68,73,78,71,32, 50,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,105,116,105,108,100,101, 10,69,78,67,79,68,73,78,71,32,50,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,65,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,50,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 50,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,98,114,101,118,101, 10,69,78,67,79,68,73,78,71,32,51,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,98,114,101,118,101,10,69,78,67,79,68, 73,78,71,32,51,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,111, 103,111,110,101,107,10,69,78,67,79,68,73,78,71,32,51, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,55,48, 10,50,48,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,111,103,111,110,101,107, 10,69,78,67,79,68,73,78,71,32,51,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,50,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,73,100,111,116,97,99,99,101,110,116,10,69, 78,67,79,68,73,78,71,32,51,48,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,100,111,116,108,101,115,115,105,10,69,78,67,79,68, 73,78,71,32,51,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,73,74, 10,69,78,67,79,68,73,78,71,32,51,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,67,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,65,56,10,68,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,106,10,69,78,67,79,68,73,78,71,32, 51,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,48,48,10, 68,56,10,52,56,10,52,56,10,52,56,10,52,56,10,69, 56,10,52,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,74,99,105,114,99,117, 109,102,108,101,120,10,69,78,67,79,68,73,78,71,32,51, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,52,56,10,48,48,10,51,56,10,49, 48,10,49,48,10,49,48,10,49,48,10,57,48,10,54,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,106,99,105,114,99,117,109, 102,108,101,120,10,69,78,67,79,68,73,78,71,32,51,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,48,48,10,51,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,57,48,10, 57,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,75,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,48,10,65,48, 10,67,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,107,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,57,48, 10,65,48,10,67,48,10,65,48,10,57,48,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,107,103,114,101,101,110,108,97, 110,100,105,99,10,69,78,67,79,68,73,78,71,32,51,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,57,48,10,65,48,10,69,48,10,57,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,76,97,99,117,116,101,10,69, 78,67,79,68,73,78,71,32,51,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,48,10,56, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,108,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,51,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,49,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,76,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,70,56,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,108,99,111,109, 109,97,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,76,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,51,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 57,48,10,54,48,10,48,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,108,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,57,48,10,54,48,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 76,100,111,116,10,69,78,67,79,68,73,78,71,32,51,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,57,48, 10,57,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,100,111,116,10,69,78,67, 79,68,73,78,71,32,51,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,50,56,10,50,56,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 76,115,108,97,115,104,10,69,78,67,79,68,73,78,71,32, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,54,48,10, 52,48,10,67,48,10,52,48,10,52,48,10,52,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,108,115,108,97,115,104, 10,69,78,67,79,68,73,78,71,32,51,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,50,48,10,51,48,10,50,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,78,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,51,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,48,48, 10,56,56,10,67,56,10,67,56,10,65,56,10,57,56,10, 57,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,51,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,67,56,10,67,56,10,65,56, 10,65,56,10,57,56,10,57,56,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,110,99,111,109,109,97,97,99, 99,101,110,116,10,69,78,67,79,68,73,78,71,32,51,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 52,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,99,97,114,111,110,10,69, 78,67,79,68,73,78,71,32,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,56,10,51, 48,10,48,48,10,56,56,10,67,56,10,67,56,10,65,56, 10,57,56,10,57,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,51,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,56,10,51,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,110,97,112,111, 115,116,114,111,112,104,101,10,69,78,67,79,68,73,78,71, 32,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,67,48,10,52,48,10,56,48,10,48,48, 10,66,48,10,67,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,69,110,103,10,69, 78,67,79,68,73,78,71,32,51,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,50,56,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,101,110,103,10,69,78,67,79,68,73,78,71,32,51, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,79,109,97,99,114,111,110, 10,69,78,67,79,68,73,78,71,32,51,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,70,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,109,97,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,79, 98,114,101,118,101,10,69,78,67,79,68,73,78,71,32,51, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,111,98,114,101,118,101,10, 69,78,67,79,68,73,78,71,32,51,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,55,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,79,104,117,110,103,97,114,117,109,108,97,117,116, 10,69,78,67,79,68,73,78,71,32,51,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,56, 10,57,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,111,104,117,110,103,97,114,117,109,108,97,117, 116,10,69,78,67,79,68,73,78,71,32,51,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,57,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,79,69,10,69,78,67,79,68,73,78,71, 32,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,65,48,10,65,48, 10,65,48,10,66,48,10,65,48,10,65,48,10,65,48,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,111,101,10,69,78, 67,79,68,73,78,71,32,51,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,65,56,10,66,56,10, 65,48,10,65,56,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,82,97,99,117,116,101,10,69,78,67,79,68,73,78,71, 32,51,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,70,48,10,57,48,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,97,99,117,116, 101,10,69,78,67,79,68,73,78,71,32,51,52,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,49,48,10,50,48,10,48,48,10,66,48,10,67,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,51,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,48,10,56,56,10,56,56,10,56,56,10,70,48, 10,65,48,10,57,48,10,56,56,10,56,56,10,52,48,10, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,114,99,111,109,109,97,97,99,99,101,110, 116,10,69,78,67,79,68,73,78,71,32,51,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,66,48,10,67,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,52,48,10, 56,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,99,97,114,111,110,10,69,78,67,79, 68,73,78,71,32,51,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,54,48,10,48, 48,10,70,48,10,56,56,10,56,56,10,70,48,10,57,48, 10,56,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,114, 99,97,114,111,110,10,69,78,67,79,68,73,78,71,32,51, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,57,48,10,54,48,10,48,48,10,66, 48,10,67,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,51,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,48,10,55, 48,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,115,97,99,117,116,101,10,69,78,67,79,68,73, 78,71,32,51,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,50,48,10, 48,48,10,55,48,10,56,56,10,54,48,10,49,48,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,99,105, 114,99,117,109,102,108,101,120,10,69,78,67,79,68,73,78, 71,32,51,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,52,56,10,48,48,10,55, 48,10,56,56,10,56,48,10,55,48,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,99,105,114, 99,117,109,102,108,101,120,10,69,78,67,79,68,73,78,71, 32,51,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,48,48, 10,55,48,10,56,56,10,54,48,10,49,48,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,99,101,100,105, 108,108,97,10,69,78,67,79,68,73,78,71,32,51,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 55,48,10,48,56,10,48,56,10,56,56,10,55,48,10,50, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,99,101,100,105,108,108,97,10, 69,78,67,79,68,73,78,71,32,51,53,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,54, 48,10,49,48,10,56,56,10,55,48,10,50,48,10,52,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,99,97,114,111,110,10,69,78,67,79,68,73, 78,71,32,51,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,52,56,10,51,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,55,48,10,48,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,99,97, 114,111,110,10,69,78,67,79,68,73,78,71,32,51,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,57,48,10,54,48,10,48,48,10,55,48,10, 56,56,10,54,48,10,49,48,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,84,99,111,109,109,97,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,51,53,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,49, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,116,99,111,109,109,97,97,99,99, 101,110,116,10,69,78,67,79,68,73,78,71,32,51,53,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,70,48,10, 52,48,10,52,48,10,52,48,10,52,56,10,51,48,10,50, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,84,99,97,114,111,110,10,69,78, 67,79,68,73,78,71,32,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,56,10,51,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,99,97,114,111,110,10,69,78,67,79,68,73,78,71, 32,51,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,54,48,10,48,48,10,52,48, 10,70,48,10,52,48,10,52,48,10,52,48,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,84,98,97,114,10, 69,78,67,79,68,73,78,71,32,51,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,116,98,97,114,10,69,78,67,79,68,73,78,71, 32,51,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,70,48,10,52,48,10,69,48,10,52,48,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,116,105,108,100, 101,10,69,78,67,79,68,73,78,71,32,51,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,116,105,108,100,101,10,69,78,67,79, 68,73,78,71,32,51,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,56,10,53, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,85, 109,97,99,114,111,110,10,69,78,67,79,68,73,78,71,32, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,109,97,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,98,114,101,118,101,10,69,78,67,79, 68,73,78,71,32,51,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,56,10,55,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 98,114,101,118,101,10,69,78,67,79,68,73,78,71,32,51, 54,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,114,105,110,103,10,69, 78,67,79,68,73,78,71,32,51,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,114,105,110,103,10,69,78,67,79,68,73,78,71, 32,51,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,50,48,10,53,48,10,50,48,10,48,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,104,117,110,103, 97,114,117,109,108,97,117,116,10,69,78,67,79,68,73,78, 71,32,51,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,57,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,104,117,110, 103,97,114,117,109,108,97,117,116,10,69,78,67,79,68,73, 78,71,32,51,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,56,10,57,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,85,111,103, 111,110,101,107,10,69,78,67,79,68,73,78,71,32,51,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,111,103,111,110,101,107,10, 69,78,67,79,68,73,78,71,32,51,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,50,48,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,87,99,105,114,99,117,109,102,108,101,120,10,69, 78,67,79,68,73,78,71,32,51,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,119,99,105,114,99,117,109,102,108,101,120,10,69,78, 67,79,68,73,78,71,32,51,55,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,48,48,10,56,56,10,56,56,10,65,56,10, 65,56,10,65,56,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,89,99,105,114,99,117,109,102,108,101,120,10,69,78,67, 79,68,73,78,71,32,51,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 48,48,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 121,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,51,55,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 56,10,48,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,56,10,56,56,10,55,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,89, 100,105,101,114,101,115,105,115,10,69,78,67,79,68,73,78, 71,32,51,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,90,97,99,117, 116,101,10,69,78,67,79,68,73,78,71,32,51,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,97,99,117,116,101,10,69,78,67, 79,68,73,78,71,32,51,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 90,100,111,116,97,99,99,101,110,116,10,69,78,67,79,68, 73,78,71,32,51,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,70,56,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,122,100, 111,116,97,99,99,101,110,116,10,69,78,67,79,68,73,78, 71,32,51,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,48, 48,10,70,56,10,49,48,10,50,48,10,52,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,90,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,51,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,99,97,114,111,110,10,69,78,67, 79,68,73,78,71,32,51,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,56,10, 51,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 108,111,110,103,115,10,69,78,67,79,68,73,78,71,32,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,52,56,10,52,48,10,52, 48,10,67,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,56,48, 10,69,78,67,79,68,73,78,71,32,51,56,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,55,48,10,52,56,10, 52,56,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,56,49,10,69,78,67,79, 68,73,78,71,32,51,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,65, 56,10,50,56,10,50,56,10,51,48,10,50,56,10,50,56, 10,50,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,56,50,10,69,78,67,79,68,73,78,71,32, 51,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,48,10, 56,48,10,70,48,10,56,56,10,56,56,10,56,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,56, 51,10,69,78,67,79,68,73,78,71,32,51,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,52,56,10,52,48,10,52,48,10,55,48, 10,52,56,10,52,56,10,52,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,56,52,10,69,78,67, 79,68,73,78,71,32,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 67,48,10,52,48,10,52,48,10,55,48,10,52,56,10,52, 56,10,52,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,56,53,10,69,78,67,79,68,73,78,71, 32,51,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,48,10,67,48,10,52,48, 10,52,48,10,54,48,10,53,48,10,53,48,10,53,48,10, 54,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 56,54,10,69,78,67,79,68,73,78,71,32,51,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,56,55,10,69,78, 67,79,68,73,78,71,32,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,52,10,55,56, 10,56,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,56,56,10,69,78,67,79,68,73,78, 71,32,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 52,10,55,56,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,56,57,10,69,78,67,79,68,73,78,71,32,51,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,52,56,10,52,56,10,52,56,10, 69,56,10,52,56,10,52,56,10,52,56,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,56,65,10,69, 78,67,79,68,73,78,71,32,51,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,65,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,56,66,10,69,78,67,79,68,73, 78,71,32,51,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 48,56,10,48,56,10,55,56,10,56,56,10,56,56,10,56, 56,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,56,67,10,69,78,67,79,68,73,78,71,32,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,56,10,52,56,10,48,56,10,48,56, 10,51,56,10,52,56,10,52,56,10,52,56,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,56,68,10, 69,78,67,79,68,73,78,71,32,51,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,56,10,56,56,10,55,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,56,69,10,69,78,67,79,68, 73,78,71,32,51,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,48,56, 10,48,56,10,48,56,10,55,56,10,48,56,10,48,56,10, 48,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,56,70,10,69,78,67,79,68,73,78,71,32,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,56,10,48, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,57,48, 10,69,78,67,79,68,73,78,71,32,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,54,48,10, 56,48,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,49,10,69,78,67,79, 68,73,78,71,32,52,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,56,10,50, 48,10,50,48,10,50,48,10,51,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,65,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,102, 108,111,114,105,110,10,69,78,67,79,68,73,78,71,32,52, 48,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,56,10,50,48,10,50, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,65,48,10,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,57,51, 10,69,78,67,79,68,73,78,71,32,52,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,52, 10,55,56,10,56,56,10,56,48,10,56,48,10,56,48,10, 57,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,57,52,10,69,78,67,79, 68,73,78,71,32,52,48,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,57,53,10,69,78,67,79,68,73,78,71,32, 52,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 67,56,10,65,56,10,65,56,10,65,56,10,65,56,10,57, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,57, 54,10,69,78,67,79,68,73,78,71,32,52,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,54,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,57,55,10,69,78,67, 79,68,73,78,71,32,52,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,57,56,10,69,78,67,79,68,73,78,71, 32,52,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,56,10,57,52,10,57,48, 10,65,48,10,67,48,10,65,48,10,57,48,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 57,57,10,69,78,67,79,68,73,78,71,32,52,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,57,65,10,69,78, 67,79,68,73,78,71,32,52,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,50,48,10, 50,48,10,50,48,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,57,66,10,69,78,67,79,68,73,78, 71,32,52,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,54,48,10,52, 48,10,65,48,10,50,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,57,67,10,69,78,67,79,68,73,78,71,32,52,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,53,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,57,68,10,69, 78,67,79,68,73,78,71,32,52,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 56,10,52,56,10,54,56,10,54,56,10,55,56,10,53,56, 10,53,56,10,52,56,10,52,56,10,67,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,57,69,10,69,78,67,79,68,73, 78,71,32,52,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,48,56,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,57,70,10,69,78,67,79,68,73,78,71,32,52,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,79,104,111,114,110,10,69,78, 67,79,68,73,78,71,32,52,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,52, 10,57,52,10,57,56,10,57,48,10,57,48,10,57,48,10, 57,48,10,57,48,10,54,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,111,104,111,114,110,10,69,78,67,79,68,73,78,71,32, 52,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,52,10,57,52,10,57,56,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,65, 50,10,69,78,67,79,68,73,78,71,32,52,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,53,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,52,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,65,51,10,69,78,67, 79,68,73,78,71,32,52,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,52,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,65,52,10,69,78,67,79,68,73,78,71, 32,52,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,65,56,10,65,56, 10,50,56,10,51,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 65,53,10,69,78,67,79,68,73,78,71,32,52,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,70,48,10,56,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,65,54,10,69,78, 67,79,68,73,78,71,32,52,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,65,48,10,57,48,10,48,56,10,48,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,65,55,10,69,78,67,79,68,73,78, 71,32,52,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,48, 56,10,48,56,10,55,48,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,65,56,10,69,78,67,79,68,73,78,71,32,52,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,51,48,10,52,48,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,65,57,10,69, 78,67,79,68,73,78,71,32,52,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,48,10,52,48,10,50,48,10,49,48,10,50,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,65,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,65,66,10,69,78,67,79,68,73,78,71,32,52,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,52,48,10,70,48, 10,52,48,10,52,48,10,52,48,10,52,56,10,51,48,10, 49,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,65,67,10, 69,78,67,79,68,73,78,71,32,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,65,48,10,65,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,65,68,10,69,78,67,79,68, 73,78,71,32,52,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,52,48,10,70,48,10,52,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,65,69,10,69,78,67,79,68,73,78,71,32,52, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,85,104,111,114,110,10,69, 78,67,79,68,73,78,71,32,52,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 52,10,57,52,10,57,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,104,111,114,110,10,69,78,67,79,68,73,78,71, 32,52,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,57,52,10,57,52,10,57,56,10,57,48,10,66,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 66,49,10,69,78,67,79,68,73,78,71,32,52,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,68,56,10,53,48,10,53,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,66,50,10,69,78, 67,79,68,73,78,71,32,52,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,57,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,66,51,10,69,78,67,79,68,73,78, 71,32,52,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,65,56,10,65, 56,10,50,56,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,66,52,10,69,78,67,79,68,73,78,71,32,52,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,57,52,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,57, 48,10,54,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,66,53,10,69, 78,67,79,68,73,78,71,32,52,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,49,48,10,70,56,10,52,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,66,54,10,69,78,67,79,68,73, 78,71,32,52,51,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,49,48,10,70,56,10,52,48,10,56, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,66,55,10,69,78,67,79,68,73,78,71,32,52,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,48,56,10,49,48,10,50,48, 10,55,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,66,56,10, 69,78,67,79,68,73,78,71,32,52,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,56,48,10,52,48,10,50,48,10,55,48,10,56, 48,10,56,48,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,66,57,10,69,78,67,79,68, 73,78,71,32,52,52,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,48,10,50,48,10,55,48,10, 56,48,10,56,48,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,66,65,10,69,78,67,79,68,73,78,71,32,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,50,48,10,55,48,10,49,48,10,54,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,66,66, 10,69,78,67,79,68,73,78,71,32,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,48,56,10,49,48,10, 70,56,10,52,48,10,56,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,66,67,10,69,78,67,79, 68,73,78,71,32,52,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 56,10,56,48,10,66,48,10,67,56,10,48,56,10,48,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,66,68,10,69,78,67,79,68,73,78,71,32, 52,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,56,10,52,56,10,52,48,10, 53,48,10,54,56,10,48,56,10,48,56,10,52,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,66, 69,10,69,78,67,79,68,73,78,71,32,52,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,50,48,10,49,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,66,70,10,69,78,67, 79,68,73,78,71,32,52,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,53,48,10,54,48,10,52,48,10,67,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,67,48,10,69,78,67,79,68,73,78,71, 32,52,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 67,49,10,69,78,67,79,68,73,78,71,32,52,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,67,50,10,69,78, 67,79,68,73,78,71,32,52,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,50,48,10, 70,56,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,67,51,10,69,78,67,79,68,73,78, 71,32,52,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,67,52,10,69,78,67,79,68,73,78,71,32,52,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,56,10,49,48,10,48,48,10,68,56,10,65,56,10, 65,56,10,66,48,10,66,48,10,66,48,10,68,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,67,53,10,69, 78,67,79,68,73,78,71,32,52,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,49,48,10,67,48,10,65,48,10,66,56,10,65,56, 10,65,56,10,66,48,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,67,54,10,69,78,67,79,68,73, 78,71,32,52,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,56,10,49,48,10,48,48,10, 50,48,10,50,48,10,55,56,10,65,56,10,65,56,10,66, 48,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,67,55,10,69,78,67,79,68,73,78,71,32,52,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,65,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,67,56,10, 69,78,67,79,68,73,78,71,32,52,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,56,10,56,48,10,57,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,50,56,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,67,57,10,69,78,67,79,68, 73,78,71,32,52,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,48,10,52,56, 10,52,48,10,53,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,69,56,10,50,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,67,65,10,69,78,67,79,68,73,78,71,32,52, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,66,56,10,65,56,10,69,56,10,69, 56,10,69,56,10,69,56,10,69,56,10,66,56,10,66,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,67,66, 10,69,78,67,79,68,73,78,71,32,52,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,56,10,69,48,10,70,56,10,69,56,10, 69,56,10,69,56,10,65,56,10,65,56,10,50,56,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,67,67,10,69,78,67,79, 68,73,78,71,32,52,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 56,10,48,48,10,67,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,50,56,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,67,68,10,69,78,67,79,68,73,78,71,32, 52,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,56,10,51,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,67, 69,10,69,78,67,79,68,73,78,71,32,52,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,51,48,10,48,48,10,55,48,10,48,56, 10,55,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,67,70,10,69,78,67, 79,68,73,78,71,32,52,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,56,10,51,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,68,48,10,69,78,67,79,68,73,78,71, 32,52,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,57,48,10,54,48,10,48,48, 10,54,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 68,49,10,69,78,67,79,68,73,78,71,32,52,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,68,50,10,69,78, 67,79,68,73,78,71,32,52,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,52,56, 10,51,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,68,51,10,69,78,67,79,68,73,78, 71,32,52,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,68,52,10,69,78,67,79,68,73,78,71,32,52,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,51,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,68,53,10,69, 78,67,79,68,73,78,71,32,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,56,10,48, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,68,54,10,69,78,67,79,68,73, 78,71,32,52,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,70,56,10,48,48,10,53,48,10, 53,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,68,55,10,69,78,67,79,68,73,78,71,32,52,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,50,48,10,48,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,68,56,10, 69,78,67,79,68,73,78,71,32,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,48,10,50,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,68,57,10,69,78,67,79,68, 73,78,71,32,52,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,52,56,10,51,48,10,48,48,10,53,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,68,65,10,69,78,67,79,68,73,78,71,32,52, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 52,56,10,51,48,10,48,48,10,53,48,10,53,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,68,66, 10,69,78,67,79,68,73,78,71,32,52,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,50,48, 10,48,48,10,53,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,68,67,10,69,78,67,79, 68,73,78,71,32,52,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,52,48,10,50,48,10,48,48,10,53, 48,10,53,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,68,68,10,69,78,67,79,68,73,78,71,32, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,48,56,10,70,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,68, 69,10,69,78,67,79,68,73,78,71,32,52,55,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,70,56,10,48, 48,10,53,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,68,70,10,69,78,67, 79,68,73,78,71,32,52,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,70,56,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,48,56,10,55,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,69,48,10,69,78,67,79,68,73,78,71, 32,52,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,56,10,48,48,10,50,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 69,49,10,69,78,67,79,68,73,78,71,32,52,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,70,56,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,50,10,69,78, 67,79,68,73,78,71,32,52,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,48,48,10,53,56,10,65,48,10,65,48,10,70,48,10, 65,48,10,65,48,10,66,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,69,51,10,69,78,67,79,68,73,78, 71,32,52,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 48,10,55,48,10,50,56,10,55,48,10,65,48,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,52,10,69,78,67,79,68,73,78,71,32,52,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,57,48,10,56,48,10,56,48,10, 56,48,10,66,48,10,66,56,10,57,48,10,54,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,69,53,10,69, 78,67,79,68,73,78,71,32,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,54,48,10,57,48,10,57,48, 10,57,48,10,55,48,10,49,48,10,70,56,10,54,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,99,97,114,111,110,10,69,78,67,79,68,73,78, 71,32,52,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,57,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,103,99,97,114, 111,110,10,69,78,67,79,68,73,78,71,32,52,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,69,56,10,69,78, 67,79,68,73,78,71,32,52,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,56,10,51,48, 10,48,48,10,56,56,10,57,48,10,65,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,69,57,10,69,78,67,79,68,73,78, 71,32,52,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,51,48,10,48,48,10,56, 48,10,56,48,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 49,69,65,10,69,78,67,79,68,73,78,71,32,52,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,50, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,49,69,66,10,69, 78,67,79,68,73,78,71,32,52,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,50,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,49,69,67,10,69,78,67,79,68,73, 78,71,32,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,55,48,10,50,48,10,49,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,49,69,68,10,69,78,67,79,68,73,78,71,32,52,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,49,69,69,10, 69,78,67,79,68,73,78,71,32,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,56,10, 51,48,10,48,48,10,70,56,10,49,48,10,50,48,10,55, 48,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,49,69,70,10,69,78,67,79,68, 73,78,71,32,52,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,51,48, 10,48,48,10,70,56,10,49,48,10,50,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,49,70,48,10,69,78,67,79,68,73,78,71,32,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,51,48,10,48,48,10,51, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,57,48, 10,57,48,10,54,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,49,70,49, 10,69,78,67,79,68,73,78,71,32,52,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 66,48,10,66,48,10,66,48,10,68,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,49,70,50,10,69,78,67,79, 68,73,78,71,32,52,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,67,48,10,65, 48,10,65,48,10,66,56,10,65,56,10,65,56,10,66,48, 10,66,48,10,68,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,49,70,51,10,69,78,67,79,68,73,78,71,32, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,56,10,65,56,10,65,56,10,66,48,10,66,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,49,70, 52,10,69,78,67,79,68,73,78,71,32,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,50,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,57,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,49,70,53,10,69,78,67, 79,68,73,78,71,32,53,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,49,70,54,10,69,78,67,79,68,73,78,71, 32,53,48,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,65,48,10,65,48,10,65,48, 10,65,56,10,69,56,10,65,56,10,65,56,10,65,56,10, 57,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,49, 70,55,10,69,78,67,79,68,73,78,71,32,53,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,48,10,67,56,10,56,56,10,56,56,10,57, 48,10,65,48,10,67,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,49,70,56,10,69,78, 67,79,68,73,78,71,32,53,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,48,48,10,56,56,10,67,56,10,67,56,10,65,56,10, 57,56,10,57,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,49,70,57,10,69,78,67,79,68,73,78, 71,32,53,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,65,114,105,110, 103,97,99,117,116,101,10,69,78,67,79,68,73,78,71,32, 53,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,48,10,53,48,10, 50,48,10,50,48,10,53,48,10,56,56,10,70,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,114,105,110,103,97, 99,117,116,101,10,69,78,67,79,68,73,78,71,32,53,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,50,48,10,51,48,10,52,56,10,51,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,65,69,97,99,117,116,101,10, 69,78,67,79,68,73,78,71,32,53,48,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,49,48,10, 50,48,10,48,48,10,53,56,10,65,48,10,65,48,10,70, 48,10,65,48,10,65,48,10,66,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,101,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,53,48,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,55,48,10,50,56,10,55,48,10,65,48,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,115, 108,97,115,104,97,99,117,116,101,10,69,78,67,79,68,73, 78,71,32,53,49,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,50,48,10,48,56,10, 55,48,10,57,56,10,57,56,10,65,56,10,67,56,10,67, 56,10,55,48,10,56,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,115,108, 97,115,104,97,99,117,116,101,10,69,78,67,79,68,73,78, 71,32,53,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 56,10,55,48,10,57,56,10,65,56,10,65,56,10,67,56, 10,55,48,10,56,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,48,48,10,69,78,67,79,68,73,78,71,32,53,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,57,48,10,52,56,10,48,48,10,50,48,10,53,48,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,48,49,10,69, 78,67,79,68,73,78,71,32,53,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,55,48,10,48,56,10,55,56, 10,56,56,10,57,56,10,54,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,48,50,10,69,78,67,79,68,73, 78,71,32,53,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,56,56,10,48,48,10, 50,48,10,53,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,48,51,10,69,78,67,79,68,73,78,71,32,53,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,48,52,10, 69,78,67,79,68,73,78,71,32,53,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,57,48,10, 52,56,10,48,48,10,70,56,10,56,48,10,56,48,10,70, 48,10,56,48,10,56,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,48,53,10,69,78,67,79,68, 73,78,71,32,53,49,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,48,54,10,69,78,67,79,68,73,78,71,32,53, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,56,56,10,48,48,10,70,56,10,56, 48,10,56,48,10,70,48,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,48,55, 10,69,78,67,79,68,73,78,71,32,53,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,48,56,10,69,78,67,79, 68,73,78,71,32,53,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,52,56,10,48, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,48,57,10,69,78,67,79,68,73,78,71,32, 53,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,57,48,10,52,56,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,48, 65,10,69,78,67,79,68,73,78,71,32,53,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,48,66,10,69,78,67, 79,68,73,78,71,32,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,48,67,10,69,78,67,79,68,73,78,71, 32,53,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,52,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 48,68,10,69,78,67,79,68,73,78,71,32,53,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,48,69,10,69,78, 67,79,68,73,78,71,32,53,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,48,10,56,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,48,70,10,69,78,67,79,68,73,78, 71,32,53,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,49,48,10,69,78,67,79,68,73,78,71,32,53,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,57,48,10,52,56,10,48,48,10,70,48,10,56,56,10, 56,56,10,70,48,10,57,48,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,49,49,10,69, 78,67,79,68,73,78,71,32,53,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,66,48,10,67,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,49,50,10,69,78,67,79,68,73, 78,71,32,53,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,56,56,10,48,48,10, 70,48,10,56,56,10,56,56,10,70,48,10,57,48,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,49,51,10,69,78,67,79,68,73,78,71,32,53,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,48,10,66,48, 10,67,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,49,52,10, 69,78,67,79,68,73,78,71,32,53,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,57,48,10, 52,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,49,53,10,69,78,67,79,68, 73,78,71,32,53,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,52,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,49,54,10,69,78,67,79,68,73,78,71,32,53, 51,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,56,56,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,49,55, 10,69,78,67,79,68,73,78,71,32,53,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,49,48,10,56,56,10,55,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,84,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,99,111,109,109,97,97,99,99,101,110,116, 10,69,78,67,79,68,73,78,71,32,53,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,56,10,51,48,10,49,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,49,67,10,69,78,67,79, 68,73,78,71,32,53,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,48,10,56, 56,10,48,56,10,49,48,10,51,48,10,52,56,10,48,56, 10,49,48,10,69,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,49,68,10,69,78,67,79,68,73,78,71,32, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,56,56,10,49,48,10,51,48,10,52,56,10,48, 56,10,49,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,49, 69,10,69,78,67,79,68,73,78,71,32,53,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 56,10,51,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,49,70,10,69,78,67, 79,68,73,78,71,32,53,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,56,10,51,48,10, 48,48,10,56,48,10,56,48,10,66,48,10,67,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,50,48,10,69,78,67,79,68,73,78,71, 32,53,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 50,50,10,69,78,67,79,68,73,78,71,32,53,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,52,56,10,56,56,10,56,56,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,50,51,10,69,78, 67,79,68,73,78,71,32,53,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,56,56,10,56,56,10,55,48,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,50,52,10,69,78,67,79,68,73,78, 71,32,53,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,49,48,10,50,48,10,52,48,10,52,48,10,56,48, 10,70,56,10,48,56,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,50,53,10,69,78,67,79,68,73,78,71,32,53,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,70,56,10,48, 56,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,50,54,10,69, 78,67,79,68,73,78,71,32,53,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,50,55,10,69,78,67,79,68,73, 78,71,32,53,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,55,48,10,48,56,10,55,56,10,56,56,10,57, 56,10,54,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,50,56,10,69,78,67,79,68,73,78,71,32,53,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,56,48, 10,70,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 49,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,50,57,10, 69,78,67,79,68,73,78,71,32,53,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,48,10,56,56,10,55,48,10,49,48,10,54,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,50,65,10,69,78,67,79,68, 73,78,71,32,53,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,55,48,10,48,48,10,53,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,50,66,10,69,78,67,79,68,73,78,71,32,53, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,48,48,10,53,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,50,67, 10,69,78,67,79,68,73,78,71,32,53,53,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,55,56,10,48,48, 10,50,56,10,53,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,50,68,10,69,78,67,79, 68,73,78,71,32,53,53,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,55,56,10,48,48,10,50,56,10,53, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,50,69,10,69,78,67,79,68,73,78,71,32, 53,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,50, 70,10,69,78,67,79,68,73,78,71,32,53,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,51,48,10,69,78,67, 79,68,73,78,71,32,53,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,55,48,10,48,48,10,50,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,51,49,10,69,78,67,79,68,73,78,71, 32,53,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,55,48,10,48,48,10,50,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 51,50,10,69,78,67,79,68,73,78,71,32,53,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,48,48,10,56,56,10,56,56,10,53,48,10,53, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,51,51,10,69,78, 67,79,68,73,78,71,32,53,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,56,10,56,56,10,55,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,53,48,10,69,78,67,79,68,73,78, 71,32,53,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,70,48,10,56,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,53,49,10,69,78,67,79,68,73,78,71,32,53,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,54,56,10, 57,56,10,56,56,10,56,56,10,57,56,10,54,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,53,50,10,69, 78,67,79,68,73,78,71,32,53,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,67,56,10,66,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,53,51,10,69,78,67,79,68,73, 78,71,32,53,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,57,48,10, 56,48,10,70,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,53,52,10,69,78,67,79,68,73,78,71,32,53,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,48,56,10,48,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,53,53,10, 69,78,67,79,68,73,78,71,32,53,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,66,48,10,67,56,10,55,48,10,56,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,53,54,10,69,78,67,79,68, 73,78,71,32,53,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,55,48,10,57,48,10,57,48,10,57,48,10, 57,48,10,55,48,10,49,52,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,53,55,10,69,78,67,79,68,73,78,71,32,53, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,56,10,49,52,10,49,48,10,49,48,10,55, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,53,56, 10,69,78,67,79,68,73,78,71,32,54,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,53,57,10,69,78,67,79, 68,73,78,71,32,54,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,53,65,10,69,78,67,79,68,73,78,71,32, 54,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,57,56,10,51,52,10,53,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,53, 66,10,69,78,67,79,68,73,78,71,32,54,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,53,67,10,69,78,67, 79,68,73,78,71,32,54,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,51,48,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,53,68,10,69,78,67,79,68,73,78,71, 32,54,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,48,10,57,56,10,50,52,10,49,48,10,57,48,10, 54,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 53,69,10,69,78,67,79,68,73,78,71,32,54,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,53,70,10,69,78, 67,79,68,73,78,71,32,54,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,56,10,49,48,10,49,48,10,57,48,10,54,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,54,48,10,69,78,67,79,68,73,78, 71,32,54,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,49,52,10,49, 48,10,55,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,49,48,10,57,48,10,54,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,54,49,10,69,78,67,79,68,73,78,71,32,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,56,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,56,10,56, 56,10,55,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,54,50,10,69, 78,67,79,68,73,78,71,32,54,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,48, 10,57,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,54,51,10,69,78,67,79,68,73, 78,71,32,54,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,53,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,54,52,10,69,78,67,79,68,73,78,71,32,54,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,65,56,10,50,48,10,53,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,54,53,10, 69,78,67,79,68,73,78,71,32,54,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,48,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,54,54,10,69,78,67,79,68, 73,78,71,32,54,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,57,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,54,55,10,69,78,67,79,68,73,78,71,32,54, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,54,48,10,57,48,10,56,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,50,56,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,54,56, 10,69,78,67,79,68,73,78,71,32,54,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,48,48,10,54,48,10,50,48,10, 55,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,54,57,10,69,78,67,79, 68,73,78,71,32,54,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,48,10,50,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,54,65,10,69,78,67,79,68,73,78,71,32, 54,49,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,54, 66,10,69,78,67,79,68,73,78,71,32,54,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,54,48,10,50,48,10,50,48,10,54,56,10,66,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,54,67,10,69,78,67, 79,68,73,78,71,32,54,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,54,48,10,65,48,10,55,56,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,54,68,10,69,78,67,79,68,73,78,71, 32,54,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,54,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,56,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 54,69,10,69,78,67,79,68,73,78,71,32,54,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,48,10,52,48,10,52,48,10,55,56,10,52, 56,10,53,48,10,55,48,10,52,56,10,69,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,54,70,10,69,78, 67,79,68,73,78,71,32,54,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,53,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,55,48,10,69,78,67,79,68,73,78, 71,32,54,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,55,49,10,69,78,67,79,68,73,78,71,32,54,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,56,56,10,50, 56,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,55,50,10,69, 78,67,79,68,73,78,71,32,54,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,53,48,10,54,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,55,51,10,69,78,67,79,68,73, 78,71,32,54,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,65,48,10,68,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,49,52,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,55,52,10,69,78,67,79,68,73,78,71,32,54,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,67,56,10,65,56,10,65,56,10,57,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,55,53,10, 69,78,67,79,68,73,78,71,32,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,55,54,10,69,78,67,79,68, 73,78,71,32,54,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,65,48,10,66,48,10,65,48,10, 65,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,55,55,10,69,78,67,79,68,73,78,71,32,54, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,55,56, 10,69,78,67,79,68,73,78,71,32,54,51,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,55,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,55,57,10,69,78,67,79, 68,73,78,71,32,54,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,48,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,55,65,10,69,78,67,79,68,73,78,71,32, 54,51,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,57,56,10,54, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,55, 66,10,69,78,67,79,68,73,78,71,32,54,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,66,48,10,53,48,10,49,52,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,55,67,10,69,78,67, 79,68,73,78,71,32,54,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,67,56,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,55,68,10,69,78,67,79,68,73,78,71, 32,54,51,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,66,48,10,67,56,10,56,48,10,56,48,10,56,48,10, 56,48,10,65,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 55,69,10,69,78,67,79,68,73,78,71,32,54,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,52, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,55,70,10,69,78, 67,79,68,73,78,71,32,54,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,54,48,10,57,48,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,56,48,10,69,78,67,79,68,73,78, 71,32,54,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,48,10,56,56,10,70,48,10,65,48,10,57,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,56,49,10,69,78,67,79,68,73,78,71,32,54,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 57,48,10,65,48,10,70,48,10,56,56,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,56,50,10,69, 78,67,79,68,73,78,71,32,54,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,56,48,10,55,48, 10,48,56,10,48,56,10,70,48,10,56,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,56,51,10,69,78,67,79,68,73, 78,71,32,54,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,50,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,65,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,56,52,10,69,78,67,79,68,73,78,71,32,54,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,50,48,10,50,48,10, 65,48,10,52,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,56,53,10, 69,78,67,79,68,73,78,71,32,54,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,56,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,56,54,10,69,78,67,79,68, 73,78,71,32,54,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,56, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 54,48,10,66,48,10,65,56,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,56,55,10,69,78,67,79,68,73,78,71,32,54, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,54, 48,10,57,48,10,49,48,10,49,48,10,49,48,10,55,56, 10,49,48,10,49,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,56,56, 10,69,78,67,79,68,73,78,71,32,54,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,56,10,51, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,56,57,10,69,78,67,79, 68,73,78,71,32,54,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,52,56,10,70,67,10,52,56, 10,53,56,10,50,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,56,65,10,69,78,67,79,68,73,78,71,32, 54,53,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,53,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,56, 66,10,69,78,67,79,68,73,78,71,32,54,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,57,48,10,56,56, 10,56,56,10,56,56,10,57,48,10,54,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,56,67,10,69,78,67, 79,68,73,78,71,32,54,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,56,68,10,69,78,67,79,68,73,78,71, 32,54,53,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,56,10,65,56,10,65,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 56,69,10,69,78,67,79,68,73,78,71,32,54,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,49,48,10,50,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,56,70,10,69,78, 67,79,68,73,78,71,32,54,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,57,48,10,69,78,67,79,68,73,78, 71,32,54,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,49,48,10,50,48,10,52,48,10,56,48, 10,70,56,10,49,48,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,57,49,10,69,78,67,79,68,73,78,71,32,54,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 49,48,10,50,48,10,53,48,10,65,56,10,70,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,57,50,10,69, 78,67,79,68,73,78,71,32,54,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,49,48,10,50,48, 10,55,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,57,51,10,69,78,67,79,68,73, 78,71,32,54,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,49,48,10,50,48,10,55,48,10,48, 56,10,54,56,10,57,56,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,57,52,10,69,78,67,79,68,73,78,71,32,54,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,48,56,10,48,56, 10,51,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,57,53,10, 69,78,67,79,68,73,78,71,32,54,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 51,48,10,52,56,10,52,48,10,52,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,51,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,57,54,10,69,78,67,79,68, 73,78,71,32,54,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,51,48,10,48,56,10,48,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,57,55,10,69,78,67,79,68,73,78,71,32,54, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,57,56, 10,69,78,67,79,68,73,78,71,32,54,54,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,57,57,10,69,78,67,79, 68,73,78,71,32,54,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,56,56,10,70,48,10,56,56, 10,56,56,10,70,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,57,65,10,69,78,67,79,68,73,78,71,32, 54,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,54,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,57, 66,10,69,78,67,79,68,73,78,71,32,54,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,52,10,55,56,10,56,56, 10,56,48,10,57,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,57,67,10,69,78,67, 79,68,73,78,71,32,54,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,57,68,10,69,78,67,79,68,73,78,71, 32,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,49,48,10,48,48, 10,51,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,48,10,57,56,10,54,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 57,69,10,69,78,67,79,68,73,78,71,32,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,52, 56,10,50,56,10,49,56,10,50,56,10,52,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,57,70,10,69,78, 67,79,68,73,78,71,32,54,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,65,48,10,69,78,67,79,68,73,78, 71,32,54,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,56,10,49, 52,10,55,48,10,57,48,10,57,48,10,57,48,10,55,48, 10,49,48,10,49,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,65,49,10,69,78,67,79,68,73,78,71,32,54,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,51,48,10,52,56,10,48,56,10,48,56,10, 51,48,10,50,48,10,55,48,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,65,50,10,69, 78,67,79,68,73,78,71,32,54,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,52,48,10,52,48,10,51,48,10,49,48, 10,51,56,10,49,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,65,51,10,69,78,67,79,68,73, 78,71,32,54,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,55,56,10,65,56,10,65,56,10,66,48,10,66, 48,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,65,52,10,69,78,67,79,68,73,78,71,32,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,50,48,10,55,56, 10,65,56,10,65,56,10,66,48,10,66,48,10,54,56,10, 48,56,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,65,53,10, 69,78,67,79,68,73,78,71,32,54,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,55,56,10,65,56,10,65, 56,10,66,67,10,66,52,10,55,56,10,49,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,65,54,10,69,78,67,79,68, 73,78,71,32,54,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,52,48,10,69,48,10,53,56,10,54,48,10,53,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,65,55,10,69,78,67,79,68,73,78,71,32,54, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,53,48,10,53,48,10,70, 56,10,53,48,10,53,48,10,53,48,10,53,48,10,51,48, 10,53,48,10,50,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,65,56, 10,69,78,67,79,68,73,78,71,32,54,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,69,48,10,53,56,10, 54,48,10,54,56,10,55,52,10,51,56,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,65,57,10,69,78,67,79, 68,73,78,71,32,54,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,57, 48,10,56,48,10,56,48,10,70,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,48,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,65,65,10,69,78,67,79,68,73,78,71,32, 54,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 66,48,10,67,56,10,65,48,10,57,48,10,67,56,10,66, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,65, 66,10,69,78,67,79,68,73,78,71,32,54,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,56,56, 10,57,48,10,65,48,10,67,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,65,67,10,69,78,67, 79,68,73,78,71,32,54,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,53,48,10,53,48,10,48,48,10,65,56,10,65, 56,10,53,48,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,65,68,10,69,78,67,79,68,73,78,71, 32,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,56, 10,52,56,10,48,48,10,55,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 66,48,10,69,78,67,79,68,73,78,71,32,54,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,66,49,10,69,78, 67,79,68,73,78,71,32,54,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,52,48, 10,53,48,10,54,56,10,52,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,66,50,10,69,78,67,79,68,73,78, 71,32,54,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,48,10,48,48,10,49,48,10,49, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,66,51,10,69,78,67,79,68,73,78,71,32,54,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,54,48,10,52,48,10,52,48,10, 52,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,66,52,10,69, 78,67,79,68,73,78,71,32,54,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,49,48,10,49,48,10,51,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,66,53,10,69,78,67,79,68,73, 78,71,32,54,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,49,48,10, 49,48,10,51,48,10,53,48,10,48,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,66,54,10,69,78,67,79,68,73,78,71,32,54,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,54,48,10,53,48, 10,54,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,66,55,10, 69,78,67,79,68,73,78,71,32,54,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,66,56,10,69,78,67,79,68, 73,78,71,32,54,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,66,57,10,69,78,67,79,68,73,78,71,32,54, 57,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,66,65, 10,69,78,67,79,68,73,78,71,32,54,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,56,10,50,56,10,53,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,66,10,69,78,67,79, 68,73,78,71,32,54,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,53,55,57,50,57,10,69,78,67,79,68,73,78, 71,32,55,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 54,52,57,51,55,10,69,78,67,79,68,73,78,71,32,55, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,66,69, 10,69,78,67,79,68,73,78,71,32,55,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,49,48,10,49,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,66,70,10,69,78,67,79, 68,73,78,71,32,55,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,50, 48,10,49,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,67,48,10,69,78,67,79,68,73,78,71,32, 55,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,53,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,67, 49,10,69,78,67,79,68,73,78,71,32,55,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,53,48,10,52,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,67,50,10,69,78,67, 79,68,73,78,71,32,55,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 52,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,67,51,10,69,78,67,79,68,73,78,71, 32,55,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,50,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 67,52,10,69,78,67,79,68,73,78,71,32,55,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,53,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,67,53,10,69,78, 67,79,68,73,78,71,32,55,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,56,56,10,53,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,99,105,114,99,117,109,102,108,101,120,10,69,78,67,79, 68,73,78,71,32,55,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,51,48,10,52,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 97,114,111,110,10,69,78,67,79,68,73,78,71,32,55,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,56,10, 69,78,67,79,68,73,78,71,32,55,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,109,97,99,114,111,110,10,69,78,67,79,68,73, 78,71,32,55,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,67,65,10,69,78,67,79,68,73,78,71,32,55,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,67,66,10, 69,78,67,79,68,73,78,71,32,55,49,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,67,67,10,69,78,67,79,68, 73,78,71,32,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,67,68,10,69,78,67,79,68,73,78,71,32,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,67,69, 10,69,78,67,79,68,73,78,71,32,55,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,67,70,10,69,78,67,79, 68,73,78,71,32,55,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,68,48,10,69,78,67,79,68,73,78,71,32, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,50,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,68, 49,10,69,78,67,79,68,73,78,71,32,55,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,68,50,10,69,78,67, 79,68,73,78,71,32,55,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,49,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,68,51,10,69,78,67,79,68,73,78,71, 32,55,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,52,48,10,52,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 68,52,10,69,78,67,79,68,73,78,71,32,55,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,50,48,10,70, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,68,53,10,69,78, 67,79,68,73,78,71,32,55,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,68,54,10,69,78,67,79,68,73,78, 71,32,55,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,68,55,10,69,78,67,79,68,73,78,71,32,55,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 70,56,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,98,114,101,118,101,10,69,78,67, 79,68,73,78,71,32,55,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,97,99,99,101,110,116,10,69,78,67,79,68,73, 78,71,32,55,50,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,114,105,110, 103,10,69,78,67,79,68,73,78,71,32,55,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,103,111,110,101,107,10,69,78,67,79, 68,73,78,71,32,55,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,116, 105,108,100,101,10,69,78,67,79,68,73,78,71,32,55,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,56,10,53,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,104,117,110,103,97,114,117,109, 108,97,117,116,10,69,78,67,79,68,73,78,71,32,55,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,57,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,68,69,10, 69,78,67,79,68,73,78,71,32,55,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,67,56,10,51, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,50,68,70,10,69,78,67,79,68, 73,78,71,32,55,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,50,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,50,69,48,10,69,78,67,79,68,73,78,71,32,55, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,51,48,10,51,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,50,69,49, 10,69,78,67,79,68,73,78,71,32,55,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,50,69,50,10,69,78,67,79, 68,73,78,71,32,55,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,48,10,52, 48,10,50,48,10,49,48,10,54,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,50,69,51,10,69,78,67,79,68,73,78,71,32, 55,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,51,48,10,51,48,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,50,69, 52,10,69,78,67,79,68,73,78,71,32,55,52,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,52,56,10,52,48,10,52,48,10,51,48, 10,49,48,10,51,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,50,69,53,10,69,78,67, 79,68,73,78,71,32,55,52,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,50,69,54,10,69,78,67,79,68,73,78,71, 32,55,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,49,48,10,49,48,10,55,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,50, 69,55,10,69,78,67,79,68,73,78,71,32,55,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,55,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,50,69,56,10,69,78, 67,79,68,73,78,71,32,55,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,55,48,10,49,48,10,49,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,50,69,57,10,69,78,67,79,68,73,78, 71,32,55,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 50,69,65,10,69,78,67,79,68,73,78,71,32,55,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,50,69,66,10,69, 78,67,79,68,73,78,71,32,55,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,55,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,50,69,67,10,69,78,67,79,68,73, 78,71,32,55,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,53,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,50,69,68,10,69,78,67,79,68,73,78,71,32,55,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,50,69,69,10, 69,78,67,79,68,73,78,71,32,55,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 68,56,10,52,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,103,114,97,118,101,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,55,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,50,48,10,49,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,99,117,116,101,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,55,54,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,50,10,69,78,67,79,68,73,78,71,32,55,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,52,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,116,105,108,100,101,99,111,109, 98,10,69,78,67,79,68,73,78,71,32,55,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 56,10,53,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,48,52,10,69,78,67, 79,68,73,78,71,32,55,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,48,53,10,69,78,67,79,68,73,78,71, 32,55,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 48,54,10,69,78,67,79,68,73,78,71,32,55,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,48,55,10,69,78, 67,79,68,73,78,71,32,55,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,48,56,10,69,78,67,79,68,73,78, 71,32,55,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,104,111,111,107, 97,98,111,118,101,99,111,109,98,10,69,78,67,79,68,73, 78,71,32,55,55,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,53,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,48,65,10,69,78,67,79,68,73,78,71,32,55,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,50, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,48,66,10, 69,78,67,79,68,73,78,71,32,55,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,56,10, 57,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,48,67,10,69,78,67,79,68, 73,78,71,32,55,56,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,48,68,10,69,78,67,79,68,73,78,71,32,55, 56,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,48,69, 10,69,78,67,79,68,73,78,71,32,55,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,48,70,10,69,78,67,79, 68,73,78,71,32,55,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,52,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,49,48,10,69,78,67,79,68,73,78,71,32, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,49, 49,10,69,78,67,79,68,73,78,71,32,55,56,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,49,50,10,69,78,67, 79,68,73,78,71,32,55,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 54,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,49,51,10,69,78,67,79,68,73,78,71, 32,55,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,51,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 49,52,10,69,78,67,79,68,73,78,71,32,55,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 54,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,49,53,10,69,78, 67,79,68,73,78,71,32,55,56,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,67,10,48,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,49,54,10,69,78,67,79,68,73,78, 71,32,55,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,49,55,10,69,78,67,79,68,73,78,71,32,55,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,49,56,10,69, 78,67,79,68,73,78,71,32,55,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,48,10,51,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,49,57,10,69,78,67,79,68,73, 78,71,32,55,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,51,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,49,65,10,69,78,67,79,68,73,78,71,32,55,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,67,10,48,52,10,48,52,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,49,66,10, 69,78,67,79,68,73,78,71,32,55,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,52,10,48,52,10,48,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,49,67,10,69,78,67,79,68, 73,78,71,32,55,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,49,68,10,69,78,67,79,68,73,78,71,32,55, 57,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,49,69, 10,69,78,67,79,68,73,78,71,32,55,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,49,70,10,69,78,67,79, 68,73,78,71,32,55,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,55,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,50,48,10,69,78,67,79,68,73,78,71,32, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,50, 49,10,69,78,67,79,68,73,78,71,32,56,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,50,56,10, 49,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,50,50,10,69,78,67, 79,68,73,78,71,32,56,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 100,111,116,98,101,108,111,119,99,111,109,98,10,69,78,67, 79,68,73,78,71,32,56,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,50,52,10,69,78,67,79,68,73,78,71, 32,56,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 50,53,10,69,78,67,79,68,73,78,71,32,56,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,53,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,50,54,10,69,78, 67,79,68,73,78,71,32,56,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,50,55,10,69,78,67,79,68,73,78, 71,32,56,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,50,56,10,69,78,67,79,68,73,78,71,32,56,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,50,57,10,69, 78,67,79,68,73,78,71,32,56,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,50,65,10,69,78,67,79,68,73, 78,71,32,56,49,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,56,10,52,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,50,66,10,69,78,67,79,68,73,78,71,32,56,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,53,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,50,67,10, 69,78,67,79,68,73,78,71,32,56,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,50,68,10,69,78,67,79,68, 73,78,71,32,56,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,50,69,10,69,78,67,79,68,73,78,71,32,56, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,50,70, 10,69,78,67,79,68,73,78,71,32,56,49,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,51,48,10,69,78,67,79, 68,73,78,71,32,56,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,51,49,10,69,78,67,79,68,73,78,71,32, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,51, 50,10,69,78,67,79,68,73,78,71,32,56,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,67,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,51,51,10,69,78,67, 79,68,73,78,71,32,56,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,48,48,10,70,67,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,51,52,10,69,78,67,79,68,73,78,71, 32,56,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 51,53,10,69,78,67,79,68,73,78,71,32,56,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,51,54,10,69,78, 67,79,68,73,78,71,32,56,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,51,55,10,69,78,67,79,68,73,78, 71,32,56,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,51,56,10,69,78,67,79,68,73,78,71,32,56,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,52,48,10,52,48,10,56,48,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,51,57,10,69, 78,67,79,68,73,78,71,32,56,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,49,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,51,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,51,66,10,69,78,67,79,68,73,78,71,32,56,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 53,48,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,51,67,10, 69,78,67,79,68,73,78,71,32,56,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,51,68,10,69,78,67,79,68, 73,78,71,32,56,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,50,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,51,69,10,69,78,67,79,68,73,78,71,32,56, 51,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,48,10,50,48,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,51,70, 10,69,78,67,79,68,73,78,71,32,56,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,70,67,10,48,48, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,52,48,10,69,78,67,79, 68,73,78,71,32,56,51,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,52,49,10,69,78,67,79,68,73,78,71,32, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,52,10,48,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,52, 50,10,69,78,67,79,68,73,78,71,32,56,51,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,54,56,10,66, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,52,51,10,69,78,67, 79,68,73,78,71,32,56,51,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,52,52,10,69,78,67,79,68,73,78,71, 32,56,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 52,53,10,69,78,67,79,68,73,78,71,32,56,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,52,54,10,69,78, 67,79,68,73,78,71,32,56,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,48,10,53,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,52,55,10,69,78,67,79,68,73,78, 71,32,56,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,52,56,10,69,78,67,79,68,73,78,71,32,56,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,53,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,52,57,10,69, 78,67,79,68,73,78,71,32,56,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,52,65,10,69,78,67,79,68,73, 78,71,32,56,52,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,49,48,10,54,56,10,66,48,10,52,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,52,66,10,69,78,67,79,68,73,78,71,32,56,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,49, 48,10,48,48,10,54,56,10,66,48,10,48,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,52,67,10, 69,78,67,79,68,73,78,71,32,56,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,56,10,53,48,10, 50,56,10,53,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,52,68,10,69,78,67,79,68, 73,78,71,32,56,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,70,56,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,52,69,10,69,78,67,79,68,73,78,71,32,56, 52,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,52,70, 10,69,78,67,79,68,73,78,71,32,56,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,54,48,10,69,78,67,79, 68,73,78,71,32,56,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,51,48,10,52,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,54,49,10,69,78,67,79,68,73,78,71,32, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,56,10,52,52,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,54, 50,10,69,78,67,79,68,73,78,71,32,56,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,56,10,70,67,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,54,51,10,69,78,67, 79,68,73,78,71,32,56,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,49,48,10,51,48,10, 53,48,10,51,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,54,52,10,69,78,67,79,68,73,78,71, 32,56,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,53,48,10,55,48,10,52,48,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 54,53,10,69,78,67,79,68,73,78,71,32,56,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,54,54,10,69,78, 67,79,68,73,78,71,32,56,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,52,56,10,52,56, 10,51,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,54,55,10,69,78,67,79,68,73,78, 71,32,56,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,53,48,10,53,48,10,51,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,54,56,10,69,78,67,79,68,73,78,71,32,56,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,52,48,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,54,57,10,69, 78,67,79,68,73,78,71,32,56,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,51,48,10,53, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,54,65,10,69,78,67,79,68,73, 78,71,32,56,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,52,48,10,54,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,54,66,10,69,78,67,79,68,73,78,71,32,56,55, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,68, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,54,67,10, 69,78,67,79,68,73,78,71,32,56,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,53,48,10,54,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,54,68,10,69,78,67,79,68, 73,78,71,32,56,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,55,48,10,50,48,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,54,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 53,48,10,53,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,54,70, 10,69,78,67,79,68,73,78,71,32,56,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,50,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,55,52,10,69,78,67,79, 68,73,78,71,32,56,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,55,53,10,69,78,67,79,68,73,78,71,32, 56,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,55, 65,10,69,78,67,79,68,73,78,71,32,56,57,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 51,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,55,69,10,69,78,67, 79,68,73,78,71,32,56,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,48,48,10,48, 48,10,51,48,10,50,48,10,52,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,111,110,111,115,10,69,78,67,79,68,73,78,71,32,57, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,100,105,101,114,101,115,105, 115,116,111,110,111,115,10,69,78,67,79,68,73,78,71,32, 57,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,68,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,65,108,112,104,97,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,65,56,10,50,56,10,50,56, 10,50,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,110,111,116,101,108,101,105, 97,10,69,78,67,79,68,73,78,71,32,57,48,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,69,112,115,105,108,111,110,116,111,110,111, 115,10,69,78,67,79,68,73,78,71,32,57,48,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,65,48,10,50,48,10,50,48,10,51,48, 10,50,48,10,50,48,10,50,48,10,51,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,69,116,97,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,56, 10,65,56,10,50,56,10,50,56,10,51,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,73,111,116,97,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,57,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,51,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 105,99,114,111,110,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,85,112, 115,105,108,111,110,116,111,110,111,115,10,69,78,67,79,68, 73,78,71,32,57,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,56,10,65,56, 10,50,56,10,50,56,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,79,109, 101,103,97,116,111,110,111,115,10,69,78,67,79,68,73,78, 71,32,57,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,65,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,105,111,116,97, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,69,78, 67,79,68,73,78,71,32,57,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,50,48, 10,68,56,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,56,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,65,108,112,104,97,10,69,78,67,79,68,73,78,71,32, 57,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,66,101,116,97,10,69, 78,67,79,68,73,78,71,32,57,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,56,56, 10,56,56,10,56,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,71,97,109,109,97,10,69,78,67,79,68,73,78,71, 32,57,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,68,101,108,116,97, 10,69,78,67,79,68,73,78,71,32,57,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,53,48,10,53,48,10,53,48,10, 56,56,10,56,56,10,56,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,69,112,115,105,108,111,110,10,69,78,67,79, 68,73,78,71,32,57,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,90, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,49,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,52,48,10,52,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,69,116,97,10,69,78,67,79,68, 73,78,71,32,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,84,104, 101,116,97,10,69,78,67,79,68,73,78,71,32,57,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 70,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,73,111,116,97,10,69,78,67,79, 68,73,78,71,32,57,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,75, 97,112,112,97,10,69,78,67,79,68,73,78,71,32,57,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,48,10,65,48, 10,67,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,76,97,109,98,100,97,10,69, 78,67,79,68,73,78,71,32,57,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,53,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,77,117,10,69,78,67,79,68,73,78,71,32,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,68,56,10,65,56, 10,65,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,78,117,10,69,78,67,79,68, 73,78,71,32,57,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,67,56, 10,67,56,10,65,56,10,65,56,10,57,56,10,57,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,88,105, 10,69,78,67,79,68,73,78,71,32,57,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,55,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,79,109,105,99,114,111,110,10,69,78,67,79, 68,73,78,71,32,57,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,80, 105,10,69,78,67,79,68,73,78,71,32,57,50,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,82,104,111,10,69,78,67,79,68,73,78, 71,32,57,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,105,103,109, 97,10,69,78,67,79,68,73,78,71,32,57,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,48,10,52,48,10,50,48,10,49,48, 10,50,48,10,52,48,10,56,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,84,97,117,10,69,78,67,79,68,73,78, 71,32,57,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,85,112,115,105, 108,111,110,10,69,78,67,79,68,73,78,71,32,57,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,80,104,105,10,69,78,67,79,68, 73,78,71,32,57,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,67,104, 105,10,69,78,67,79,68,73,78,71,32,57,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,56,10,56,56,10,53,48,10,53,48,10,50,48, 10,53,48,10,53,48,10,56,56,10,56,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,80,115,105,10,69,78,67,79,68,73,78, 71,32,57,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,55,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,79,109,101,103, 97,10,69,78,67,79,68,73,78,71,32,57,51,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,53,48,10,53,48,10,68,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,73,111,116,97,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,57,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,85,112,115,105,108,111,110,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,57,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,56,10,48,48,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,108,112,104,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,112,115,105,108,111,110,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,101,116,97,116,111,110,111,115,10,69, 78,67,79,68,73,78,71,32,57,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,50,48,10,48,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,105,111,116,97,116,111,110,111,115,10,69,78,67,79, 68,73,78,71,32,57,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,52, 48,10,48,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,53,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 112,115,105,108,111,110,100,105,101,114,101,115,105,115,116,111, 110,111,115,10,69,78,67,79,68,73,78,71,32,57,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,49,48,10,50,48,10,68,56,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,108,112,104,97,10,69,78,67, 79,68,73,78,71,32,57,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 98,101,116,97,10,69,78,67,79,68,73,78,71,32,57,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,57,48,10,57,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,67,56,10,66,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,97,109,109,97,10,69,78, 67,79,68,73,78,71,32,57,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,100,101,108,116,97,10,69,78,67,79,68,73,78,71,32, 57,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,52,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,101,112,115,105,108,111, 110,10,69,78,67,79,68,73,78,71,32,57,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,122,101,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,50,48,10, 52,48,10,52,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,55,48,10,48,56,10,49,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,116,97, 10,69,78,67,79,68,73,78,71,32,57,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,116,104,101,116,97,10,69,78,67,79,68,73, 78,71,32,57,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,57,48,10, 57,48,10,57,48,10,70,48,10,57,48,10,57,48,10,57, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,105,111,116, 97,10,69,78,67,79,68,73,78,71,32,57,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,107,97,112,112,97,10,69,78,67,79,68, 73,78,71,32,57,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,57,48,10,65,48,10,69,48,10, 57,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,108,97, 109,98,100,97,10,69,78,67,79,68,73,78,71,32,57,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,48,56,10,54,56, 10,57,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,109,117,10,69,78,67,79,68, 73,78,71,32,57,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,69,56,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,117, 10,69,78,67,79,68,73,78,71,32,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,120,105,10,69,78,67,79,68,73,78,71,32, 57,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,52,48,10, 52,48,10,51,48,10,52,48,10,56,48,10,56,48,10,55, 48,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,109,105,99,114,111, 110,10,69,78,67,79,68,73,78,71,32,57,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,105,10,69,78,67,79,68,73,78,71, 32,57,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,114,104,111,10,69, 78,67,79,68,73,78,71,32,57,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,115,105,103,109,97,49,10,69,78,67,79,68,73,78, 71,32,57,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,48, 10,55,48,10,48,56,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,115,105,103,109, 97,10,69,78,67,79,68,73,78,71,32,57,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,56,10,57,48, 10,56,56,10,56,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,97,117,10,69,78,67,79,68,73,78, 71,32,57,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,112,115,105, 108,111,110,10,69,78,67,79,68,73,78,71,32,57,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,104,105,10,69,78,67,79,68, 73,78,71,32,57,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,55,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,99,104, 105,10,69,78,67,79,68,73,78,71,32,57,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,115,105,10,69,78,67,79,68,73,78, 71,32,57,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,111,109,101,103, 97,10,69,78,67,79,68,73,78,71,32,57,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,53,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,105,111,116,97,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,57,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,68,56,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,112,115,105,108,111,110,100,105,101,114, 101,115,105,115,10,69,78,67,79,68,73,78,71,32,57,55, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,68,56,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,109,105,99,114,111,110,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,112,115,105,108,111,110,116, 111,110,111,115,10,69,78,67,79,68,73,78,71,32,57,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,109,101,103,97,116,111,110, 111,115,10,69,78,67,79,68,73,78,71,32,57,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,48,10,69,78, 67,79,68,73,78,71,32,57,55,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,54,48, 10,57,48,10,57,48,10,66,48,10,67,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,116,104,101,116,97,49,10,69,78,67,79,68,73,78,71, 32,57,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,52,56, 10,51,67,10,48,56,10,67,56,10,52,56,10,52,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,85,112,115,105,108, 111,110,49,10,69,78,67,79,68,73,78,71,32,57,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,53,52,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,68,51,10,69, 78,67,79,68,73,78,71,32,57,55,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 56,10,49,52,10,53,48,10,57,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,68,52,10,69,78,67,79,68,73, 78,71,32,57,56,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,68,56,10,48,48,10,56,56,10, 53,52,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,104,105, 49,10,69,78,67,79,68,73,78,71,32,57,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,50,48,10,55,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,55,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,109,101,103,97,49,10,69,78,67,79, 68,73,78,71,32,57,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,68,55,10,69,78,67,79,68,73,78,71,32, 57,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,50,48,10,48,48,10, 56,56,10,52,56,10,53,48,10,55,48,10,53,48,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,68, 56,10,69,78,67,79,68,73,78,71,32,57,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,55,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,48,51,68,57,10,69,78,67, 79,68,73,78,71,32,57,56,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,51,68,65,10,69,78,67,79,68,73,78,71, 32,57,56,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,51,48,10,52,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,55,48,10, 48,56,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,48,51, 68,66,10,69,78,67,79,68,73,78,71,32,57,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,55,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,55,48,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,68,67,10,69,78, 67,79,68,73,78,71,32,57,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,69,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,48,51,68,68,10,69,78,67,79,68,73,78, 71,32,57,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,48,10,56,48,10,56,48,10,69,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 51,68,69,10,69,78,67,79,68,73,78,71,32,57,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,48,10,56,48,10,56,56,10,57,56,10, 65,56,10,67,56,10,56,56,10,48,56,10,48,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,48,51,68,70,10,69, 78,67,79,68,73,78,71,32,57,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,52,48,10,52,48,10,56,48,10,70,56, 10,48,56,10,49,48,10,49,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,48,10,69,78,67,79,68,73, 78,71,32,57,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 53,48,10,53,48,10,53,48,10,57,56,10,65,56,10,65, 56,10,65,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 48,51,69,49,10,69,78,67,79,68,73,78,71,32,57,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,67,48,10,50,48,10,49,48,10,51,48, 10,52,56,10,57,56,10,50,56,10,52,56,10,48,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,51,69,50,10, 69,78,67,79,68,73,78,71,32,57,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,56,10,48,56,10,70,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,48,51,69,51,10,69,78,67,79,68, 73,78,71,32,57,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,56,10,48,56,10,70,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,52,10,69,78,67,79,68,73,78,71,32,57, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,48,51,69,53, 10,69,78,67,79,68,73,78,71,32,57,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,51,69,54,10,69,78,67,79, 68,73,78,71,32,57,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,56,48,10,56, 48,10,56,48,10,66,48,10,67,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,70,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,48,51,69,55,10,69,78,67,79,68,73,78,71,32, 57,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,65,56,10,65,56,10,52,56,10,48,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 56,10,69,78,67,79,68,73,78,71,32,49,48,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,52,56,10,49,48,10,50, 48,10,52,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,57,10,69,78, 67,79,68,73,78,71,32,49,48,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,56,48,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,65,10,69,78,67,79,68,73, 78,71,32,49,48,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,50,48,10,53,48,10,53,48,10,53,48,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,66,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,50,48,10,53,48,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,69, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,55,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,69,68,10,69,78, 67,79,68,73,78,71,32,49,48,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,55,48,10,56,48,10,66,48, 10,67,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,69,69,10,69,78,67,79,68,73, 78,71,32,49,48,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,70,56,10,65,56,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,69,70,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,51,48,10,50,48,10, 70,56,10,65,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,54,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 48,10,69,78,67,79,68,73,78,71,32,49,48,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,52, 56,10,53,48,10,55,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,70,49,10,69,78, 67,79,68,73,78,71,32,49,48,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,55,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,50,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,56,48,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,51,70,51,10,69,78,67,79,68,73,78,71,32,49, 48,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,48,10, 51,48,10,49,48,10,49,48,10,49,48,10,49,48,10,57, 48,10,57,48,10,54,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,51,70, 52,10,69,78,67,79,68,73,78,71,32,49,48,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,51,70,53,10,69,78, 67,79,68,73,78,71,32,49,48,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,56,10,52,48,10,55,48, 10,52,48,10,52,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,51,70,54,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,48,56,10,51,56,10,48,56,10, 48,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,48,48,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,50,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,51,10,69,78,67,79,68,73,78,71,32,49,48,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,53,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,50,48,10,50,48,10,51,48,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,48,56, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,50,10, 69,78,67,79,68,73,78,71,32,49,48,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,52,48,10,48,48,10,70,56,10,56,56,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,53,51,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,48,10,56,48,10,56,48,10,70,48,10,56,48, 10,56,48,10,52,48,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,53,52,10,69,78,67,79, 68,73,78,71,32,49,48,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,55,48,10,48,56,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,53,53,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,53,54,10,69,78,67,79,68,73,78,71, 32,49,48,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,53,55,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,53,56,10,69,78,67,79,68,73,78,71,32,49,48,51, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,65,48,10,65,48,10,65,48, 10,66,48,10,65,56,10,65,56,10,65,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,53, 57,10,69,78,67,79,68,73,78,71,32,49,48,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,48,10,65,48,10,65,48,10,65,48,10,70, 48,10,65,56,10,65,56,10,65,56,10,66,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,48,10, 69,78,67,79,68,73,78,71,32,49,48,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,51,48,10,50,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,54,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,56, 56,10,56,56,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,50,48,10,48,48, 10,56,56,10,57,56,10,57,56,10,65,56,10,67,56,10, 67,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,54,50,10,69,78,67,79,68,73,78,71, 32,49,48,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,48,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,52,53,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,49,55,10,69,78,67,79,68,73,78,71,32,49,48,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,49, 56,10,69,78,67,79,68,73,78,71,32,49,48,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,48,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,48,10,56,56,10,56,56,10,56,56,10,70,48,10, 56,56,10,56,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,48,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,50,49,10,69,78,67,79, 68,73,78,71,32,49,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,56,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,50,50,10,69,78,67,79,68,73, 78,71,32,49,48,52,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,56,48,10,70,48,10,56,48,10,56,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,50,52,10,69,78,67,79,68,73,78,71, 32,49,48,52,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,55,48,10,65,56,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,50,53,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 48,56,10,51,48,10,48,56,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,50,54,10,69,78,67,79,68,73,78,71,32,49,48,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,57,56,10,57,56, 10,65,56,10,65,56,10,67,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,50, 55,10,69,78,67,79,68,73,78,71,32,49,48,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,55,48,10,48,48,10,56,56,10,57,56,10,57, 56,10,65,56,10,67,56,10,67,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,50,56,10, 69,78,67,79,68,73,78,71,32,49,48,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,56,56,10,57,48,10,65,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,50,57,10,69,78, 67,79,68,73,78,71,32,49,48,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,48,10,69,78,67,79, 68,73,78,71,32,49,48,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 68,56,10,68,56,10,65,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,49,10,69,78,67,79,68,73, 78,71,32,49,48,53,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,51,50,10,69,78,67,79,68,73,78,71, 32,49,48,53,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,51,51,10,69,78,67,79,68,73,78,71,32,49, 48,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,51,52,10,69,78,67,79,68,73,78,71,32,49,48,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,51, 53,10,69,78,67,79,68,73,78,71,32,49,48,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,51,54,10, 69,78,67,79,68,73,78,71,32,49,48,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,51,55,10,69,78, 67,79,68,73,78,71,32,49,48,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,55,56, 10,48,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,51,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,65,56,10,65,56,10,65,56,10,55, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,51,57,10,69,78,67,79,68,73, 78,71,32,49,48,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,48,10,69,78,67,79,68,73,78,71, 32,49,48,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,57,48, 10,70,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,52,49,10,69,78,67,79,68,73,78,71,32,49, 48,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,52,50,10,69,78,67,79,68,73,78,71,32,49,48,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,52, 51,10,69,78,67,79,68,73,78,71,32,49,48,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,70,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,52,52,10, 69,78,67,79,68,73,78,71,32,49,48,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,52,48,10,52,48,10,52,48,10,55,48,10, 52,56,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,52,53,10,69,78, 67,79,68,73,78,71,32,49,48,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,69,56,10,57,56,10,57,56, 10,57,56,10,57,56,10,69,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,52,54,10,69,78,67,79, 68,73,78,71,32,49,48,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,70,48,10,56,56,10,56, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,52,55,10,69,78,67,79,68,73, 78,71,32,49,48,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,69,48,10,49,48, 10,48,56,10,48,56,10,55,56,10,48,56,10,48,56,10, 49,48,10,69,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,52,56,10,69,78,67,79,68,73,78,71, 32,49,48,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,48,10,65,56,10,65, 56,10,65,56,10,69,56,10,65,56,10,65,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,52,57,10,69,78,67,79,68,73,78,71,32,49, 48,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,50,56,10,52,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,54,53,10,69,78,67,79,68,73,78,71,32,49,48,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,56,10,55,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,54, 54,10,69,78,67,79,68,73,78,71,32,49,48,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,55,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,54,55,10, 69,78,67,79,68,73,78,71,32,49,48,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,56,56,10, 70,48,10,56,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,54,56,10,69,78, 67,79,68,73,78,71,32,49,48,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,54,57,10,69,78,67,79, 68,73,78,71,32,49,48,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,56,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,55,48,10,69,78,67,79,68,73, 78,71,32,49,48,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,55,50,10,69,78,67,79,68,73,78,71, 32,49,48,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,55,48,10,55,48,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,55,51,10,69,78,67,79,68,73,78,71,32,49, 48,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,51,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,55,52,10,69,78,67,79,68,73,78,71,32,49,48,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,55, 53,10,69,78,67,79,68,73,78,71,32,49,48,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,56,56,10,56, 56,10,57,56,10,65,56,10,67,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,55,54,10, 69,78,67,79,68,73,78,71,32,49,48,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,57,48,10, 69,48,10,57,48,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,55,55,10,69,78, 67,79,68,73,78,71,32,49,48,56,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,55,56,10,69,78,67,79, 68,73,78,71,32,49,48,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,68,56,10,65,56,10,65, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,55,57,10,69,78,67,79,68,73, 78,71,32,49,48,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,56,48,10,69,78,67,79,68,73,78,71, 32,49,48,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,49,10,69,78,67,79,68,73,78,71,32,49, 48,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,56,50,10,69,78,67,79,68,73,78,71,32,49,48,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,70,48,10,56,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,56, 51,10,69,78,67,79,68,73,78,71,32,49,48,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,48,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,56,52,10, 69,78,67,79,68,73,78,71,32,49,48,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,65,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,56,53,10,69,78, 67,79,68,73,78,71,32,49,48,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,56,54,10,69,78,67,79, 68,73,78,71,32,49,48,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,56,55,10,69,78,67,79,68,73, 78,71,32,49,48,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,53,48,10,50,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,56,56,10,69,78,67,79,68,73,78,71, 32,49,48,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,57,48, 10,70,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,55,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 48,57,48,10,69,78,67,79,68,73,78,71,32,49,48,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,48,57, 49,10,69,78,67,79,68,73,78,71,32,49,48,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,70,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,57,50,10, 69,78,67,79,68,73,78,71,32,49,48,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,52,48,10, 55,48,10,52,56,10,52,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,51,10,69,78, 67,79,68,73,78,71,32,49,48,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,69,56, 10,57,56,10,57,56,10,69,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,48,57,52,10,69,78,67,79, 68,73,78,71,32,49,49,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,48,57,53,10,69,78,67,79,68,73, 78,71,32,49,49,48,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,48,56,10,51,56,10,48,56,10, 48,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,48,57,54,10,69,78,67,79,68,73,78,71, 32,49,49,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,57,48,10,65,56,10,65,56,10,69,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,48,57,55,10,69,78,67,79,68,73,78,71,32,49, 49,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,56,56,10,56,56,10,55,56,10,52,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,53, 48,10,69,78,67,79,68,73,78,71,32,49,49,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,55,49,10, 69,78,67,79,68,73,78,71,32,49,49,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,53,48,10,48,48,10,55,48,10,56,56,10, 70,56,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,69,48,10,52,48,10,53,48,10,54,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,56,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,48,10,69,78,67,79, 68,73,78,71,32,49,49,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 52,48,10,48,48,10,70,56,10,56,56,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,48,49,10,69,78,67,79,68,73, 78,71,32,49,49,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,69,48,10,56,48,10, 56,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,48,50,10,69,78,67,79,68,73,78,71, 32,49,49,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,49,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,48,51,10,69,78,67,79,68,73,78,71,32,49, 49,49,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,48,48,10, 54,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 49,48,52,10,69,78,67,79,68,73,78,71,32,49,49,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,54,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,48, 53,10,69,78,67,79,68,73,78,71,32,49,49,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,49,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,57,48,10,57,48, 10,54,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,49,48,54,10, 69,78,67,79,68,73,78,71,32,49,49,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,54,48,10,65,48,10, 66,48,10,65,56,10,65,56,10,66,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,49,48,55,10,69,78, 67,79,68,73,78,71,32,49,49,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,48,10,65,48,10,70,48, 10,65,56,10,65,56,10,66,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,48,56,10,69,78,67,79, 68,73,78,71,32,49,49,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 69,48,10,52,48,10,53,48,10,54,56,10,52,56,10,52, 56,10,52,56,10,52,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,48,57,10,69,78,67,79,68,73, 78,71,32,49,49,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,48,48,10,56,56,10,57,48,10,69,48,10,57,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,53,68,10,69,78,67,79,68,73,78,71,32,49, 49,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,57,56,10,65,56,10,67,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 49,49,48,10,69,78,67,79,68,73,78,71,32,49,49,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,49,48,49,57, 51,10,69,78,67,79,68,73,78,71,32,49,49,49,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,48,10,69,78, 67,79,68,73,78,71,32,49,49,50,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,53, 48,10,56,56,10,56,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,49,10,69,78,67,79,68,73, 78,71,32,49,49,50,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,56,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,49,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,55,48,10,52,56,10,52,56,10,52,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,57,52,10,69,78,67,79,68,73,78,71,32,49, 49,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,48,10,52,48,10, 69,48,10,52,48,10,55,48,10,52,56,10,52,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 52,10,69,78,67,79,68,73,78,71,32,49,49,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,56,10,65,48,10,65,48,10,65,48,10,70, 56,10,65,48,10,65,48,10,65,48,10,57,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,53,10,69,78, 67,79,68,73,78,71,32,49,49,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,56,10,65,48,10,70,56, 10,65,48,10,65,48,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,54,10,69,78,67,79,68,73, 78,71,32,49,49,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,53,48,10,53,48,10,53,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,55,10,69,78,67,79,68,73,78,71,32,49, 49,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,53,48,10,56,56,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 56,10,69,78,67,79,68,73,78,71,32,49,49,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,57,48,10,57,48,10,57,48,10,66,56,10,70, 56,10,66,56,10,66,56,10,66,56,10,66,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,57,10,69,78, 67,79,68,73,78,71,32,49,49,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,48,10,57,48,10,70,56, 10,66,56,10,66,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,65,10,69,78,67,79,68,73, 78,71,32,49,49,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,56, 10,53,48,10,53,48,10,55,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,66,10,69,78,67,79,68,73,78,71,32,49, 49,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,55,48,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,54, 67,10,69,78,67,79,68,73,78,71,32,49,49,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,56,10,65,56,10,65,56,10,65,56,10,70, 48,10,66,56,10,68,52,10,68,52,10,68,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,54,68,10,69,78, 67,79,68,73,78,71,32,49,49,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,56,10,65,56,10,57,48, 10,70,56,10,66,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,54,69,10,69,78,67,79,68,73, 78,71,32,49,49,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,56,10,51,48,10,48,48, 10,55,48,10,56,56,10,48,56,10,51,48,10,48,56,10, 48,56,10,55,48,10,56,48,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,54,70,10,69,78,67,79,68,73,78,71,32,49, 49,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,51,48,10,48,48,10, 55,48,10,56,56,10,51,48,10,48,56,10,48,56,10,55, 48,10,56,48,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 48,10,69,78,67,79,68,73,78,71,32,49,49,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,49,10,69,78, 67,79,68,73,78,71,32,49,49,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,55,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,49,48,49,52,55,10,69,78,67,79, 68,73,78,71,32,49,49,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,49,48,49,57,53,10,69,78,67,79,68,73, 78,71,32,49,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,52,56,10,55,56,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,49,48,49,52,56,10,69,78,67,79,68,73,78,71, 32,49,49,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,57,56,10,57,48,10,57, 48,10,57,48,10,53,48,10,53,48,10,53,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 49,48,49,57,54,10,69,78,67,79,68,73,78,71,32,49, 49,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,56,10,57,48,10,57,48,10,53,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 54,10,69,78,67,79,68,73,78,71,32,49,49,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 57,48,10,52,56,10,48,48,10,57,67,10,57,48,10,57, 48,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,55,10,69,78, 67,79,68,73,78,71,32,49,49,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,52,56,10,48,48,10,57,56,10,57,48,10,57,48, 10,53,48,10,53,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,56,10,69,78,67,79,68,73, 78,71,32,49,49,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,65,48, 10,65,48,10,66,56,10,66,56,10,66,56,10,66,56,10, 66,56,10,53,56,10,48,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,57,10,69,78,67,79,68,73,78,71,32,49, 49,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,56,10,66,56,10,66,56,10,66,56,10,66,56,10,53, 56,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 65,10,69,78,67,79,68,73,78,71,32,49,49,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,55,48,10,65,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,65,56,10,55,48,10,50,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,66,10,69,78, 67,79,68,73,78,71,32,49,49,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,55,48,10,65,56,10,56,56, 10,56,56,10,65,56,10,55,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,55,67,10,69,78,67,79,68,73, 78,71,32,49,49,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,54,48,10,57,56,10,54,48,10,48,48, 10,53,48,10,56,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,55,68,10,69,78,67,79,68,73,78,71,32,49, 49,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,54,48,10,57,56,10,54,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,55, 69,10,69,78,67,79,68,73,78,71,32,49,49,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,65,56,10,48,48,10,53,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,55,70,10,69,78, 67,79,68,73,78,71,32,49,49,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,65,56,10,48,48,10,53,48,10,56,56,10,65,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,48,10,69,78,67,79,68,73, 78,71,32,49,49,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,55,48,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,49,10,69,78,67,79,68,73,78,71,32,49, 49,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,55,48,10,49, 48,10,49,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 50,10,69,78,67,79,68,73,78,71,32,49,49,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,56,10,49,48,10,66,48,10,52, 56,10,52,48,10,65,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,51,10,69,78, 67,79,68,73,78,71,32,49,49,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,52,10,70,67,10,56, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,52,10,69,78,67,79,68,73, 78,71,32,49,49,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,55,48,10,56,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,53,10,69,78,67,79,68,73,78,71,32,49, 49,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,55,48,10,67,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 54,10,69,78,67,79,68,73,78,71,32,49,49,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,57,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,56,10,69,78, 67,79,68,73,78,71,32,49,49,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,52,48,10,65,48,10,48, 56,10,49,52,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,48,10,48,56,10,49,52,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,57,10,69,78,67,79,68,73, 78,71,32,49,49,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,52,48,10,56,52,10,67,56,10,48,67, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,56,52,10,67,56,10,48,67,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,65,10,69,78,67,79,68,73,78,71,32,49, 49,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,56,56,10, 57,56,10,57,56,10,65,56,10,67,56,10,67,56,10,56, 56,10,49,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 66,10,69,78,67,79,68,73,78,71,32,49,49,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,56,56,10,56, 56,10,57,56,10,65,56,10,67,56,10,56,56,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,56,67,10,69,78, 67,79,68,73,78,71,32,49,49,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,52,48,10,69,48,10,52,48,10,55,48,10,52,56, 10,52,56,10,52,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,56,68,10,69,78,67,79,68,73, 78,71,32,49,49,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,55,48,10,52,56,10, 52,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,56,69,10,69,78,67,79,68,73,78,71,32,49, 49,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,65,56,10,70,48,10,56,56,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,56, 70,10,69,78,67,79,68,73,78,71,32,49,49,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,48,10,56, 56,10,56,56,10,65,56,10,70,48,10,56,56,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,49,48,48,53,48,10, 69,78,67,79,68,73,78,71,32,49,49,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,56, 10,70,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,49,48,48,57,56,10,69,78, 67,79,68,73,78,71,32,49,49,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,50,10,69,78,67,79,68,73, 78,71,32,49,49,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,52,56, 10,52,48,10,52,48,10,69,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,51,10,69,78,67,79,68,73,78,71,32,49, 49,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,52,56,10,69,48,10,52,48,10,52,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 52,10,69,78,67,79,68,73,78,71,32,49,49,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,49,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,53,10,69,78, 67,79,68,73,78,71,32,49,49,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,49,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,54,10,69,78,67,79,68,73, 78,71,32,49,49,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,65,56,10,55,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,67,10,48,52,10,48,52,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,55,10,69,78,67,79,68,73,78,71,32,49, 49,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,55,48,10,55,48,10,65,56,10,65, 67,10,48,52,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 56,10,69,78,67,79,68,73,78,71,32,49,49,55,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,56,10,48,56,10,51, 48,10,48,56,10,48,56,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,57,10,69,78, 67,79,68,73,78,71,32,49,49,55,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,51,48, 10,48,56,10,56,56,10,55,48,10,50,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,65,10,69,78,67,79,68,73, 78,71,32,49,49,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,65,48,10,65,48,10,67,48,10,65,48,10,57,48,10, 57,48,10,57,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,66,10,69,78,67,79,68,73,78,71,32,49, 49,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,57, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,57, 67,10,69,78,67,79,68,73,78,71,32,49,49,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,65,56,10,66,48,10,65,48,10,69, 48,10,65,48,10,66,48,10,65,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,57,68,10,69,78, 67,79,68,73,78,71,32,49,49,56,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,66,48,10,69,48, 10,66,48,10,65,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,57,69,10,69,78,67,79,68,73, 78,71,32,49,49,56,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,69,56, 10,53,48,10,54,48,10,54,48,10,54,48,10,53,48,10, 52,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,57,70,10,69,78,67,79,68,73,78,71,32,49, 49,56,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,69,48,10, 52,56,10,53,48,10,54,48,10,53,48,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 48,10,69,78,67,79,68,73,78,71,32,49,49,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,56,10,52,56,10,53,48,10,54,48,10,54, 48,10,54,48,10,53,48,10,52,56,10,52,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,49,10,69,78, 67,79,68,73,78,71,32,49,49,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,56,10,53,48,10,54,48, 10,53,48,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,50,10,69,78,67,79,68,73, 78,71,32,49,49,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,70,48,10,57,48,10,57,48,10, 57,48,10,57,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,51,10,69,78,67,79,68,73,78,71,32,49, 49,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,70,48,10,57,48,10,57,48,10,57, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 52,10,69,78,67,79,68,73,78,71,32,49,49,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,66,56,10,65,48,10,65,48,10,65,48,10,69, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,53,10,69,78, 67,79,68,73,78,71,32,49,49,56,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,56,10,65,48,10,69,48, 10,65,48,10,65,48,10,65,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,54,10,69,78,67,79,68,73, 78,71,32,49,49,57,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,69,48,10,65,48, 10,65,48,10,65,48,10,66,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,48,56,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,55,10,69,78,67,79,68,73,78,71,32,49, 49,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,65,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,48,56,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 56,10,69,78,67,79,68,73,78,71,32,49,49,57,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,48,10,57,48,10,65, 56,10,65,56,10,65,56,10,55,48,10,50,48,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,57,10,69,78, 67,79,68,73,78,71,32,49,49,57,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,48,10,57,48, 10,65,56,10,55,48,10,50,48,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,65,10,69,78,67,79,68,73, 78,71,32,49,49,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,56,10,55,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,66,10,69,78,67,79,68,73,78,71,32,49, 49,57,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,48,10,56,48,10,56,56,10,55, 48,10,50,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,65, 67,10,69,78,67,79,68,73,78,71,32,49,49,57,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,48,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,65,68,10,69,78, 67,79,68,73,78,71,32,49,49,57,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,50,48, 10,50,48,10,50,48,10,51,48,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,65,69,10,69,78,67,79,68,73, 78,71,32,49,49,57,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,65,70,10,69,78,67,79,68,73,78,71,32,49, 49,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 48,10,69,78,67,79,68,73,78,71,32,49,50,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,49,10,69,78, 67,79,68,73,78,71,32,49,50,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,53,48, 10,53,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,50,10,69,78,67,79,68,73, 78,71,32,49,50,48,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,56,67,10,48,52,10,48,52,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,51,10,69,78,67,79,68,73,78,71,32,49, 50,48,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,56,10,53,48,10,50,48,10,53,48,10,56,56,10,56, 67,10,48,52,10,48,52,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 52,10,69,78,67,79,68,73,78,71,32,49,50,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,69,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,55,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,53,10,69,78, 67,79,68,73,78,71,32,49,50,48,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,55,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,54,10,69,78,67,79,68,73, 78,71,32,49,50,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,57,48,10,55,48,10,49,48,10, 49,48,10,49,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,55,10,69,78,67,79,68,73,78,71,32,49, 50,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 56,10,69,78,67,79,68,73,78,71,32,49,50,48,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,65,56,10,65, 56,10,55,56,10,50,56,10,50,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,57,10,69,78, 67,79,68,73,78,71,32,49,50,48,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,56,56,10,56,56,10,65,56, 10,55,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,65,10,69,78,67,79,68,73, 78,71,32,49,50,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,66,10,69,78,67,79,68,73,78,71,32,49, 50,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,69,48,10,57,48,10,57,48,10,57,48,10,57, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,66, 67,10,69,78,67,79,68,73,78,71,32,49,50,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,52,56,10,52,56,10,70, 56,10,52,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,66,68,10,69,78, 67,79,68,73,78,71,32,49,50,49,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,70,56, 10,52,48,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,66,69,10,69,78,67,79,68,73, 78,71,32,49,50,49,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,52,56,10,52,56,10,70,56,10,52,48,10,52,48,10, 52,56,10,51,48,10,50,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,66,70,10,69,78,67,79,68,73,78,71,32,49, 50,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,48,10,52,56,10,70,56,10,52,48,10,52,56,10,51, 48,10,50,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 48,10,69,78,67,79,68,73,78,71,32,49,50,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,49,10,69,78, 67,79,68,73,78,71,32,49,50,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,56,56,10,55,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,55,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,50,10,69,78,67,79,68,73, 78,71,32,49,50,49,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,65,56,10,65,56,10,55,48,10,55,48,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,51,10,69,78,67,79,68,73,78,71,32,49, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,57,48,10, 65,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 52,10,69,78,67,79,68,73,78,71,32,49,50,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,57, 48,10,69,48,10,57,48,10,56,56,10,56,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,53,10,69,78, 67,79,68,73,78,71,32,49,50,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,54,10,69,78,67,79,68,73, 78,71,32,49,50,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,55,10,69,78,67,79,68,73,78,71,32,49, 50,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,56,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 56,10,69,78,67,79,68,73,78,71,32,49,50,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,56,56,10,48,56, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,57,10,69,78, 67,79,68,73,78,71,32,49,50,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,65,10,69,78,67,79,68,73, 78,71,32,49,50,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,67,66,10,69,78,67,79,68,73,78,71,32,49, 50,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,56,10,48,56,10,48,56,10,49, 56,10,49,48,10,49,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,67, 67,10,69,78,67,79,68,73,78,71,32,49,50,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,49,56,10,49,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,67,68,10,69,78, 67,79,68,73,78,71,32,49,50,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,68,56,10,68,56,10,65,56,10,65,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,67,69,10,69,78,67,79,68,73, 78,71,32,49,50,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,68,56,10,65,56,10,65,56,10, 56,56,10,56,56,10,49,48,10,49,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,48,10,69,78,67,79,68,73,78,71,32,49, 50,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 49,10,69,78,67,79,68,73,78,71,32,49,50,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,68,50,10,69,78, 67,79,68,73,78,71,32,49,50,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,53, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,51,10,69,78,67,79,68,73, 78,71,32,49,50,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,52,10,69,78,67,79,68,73,78,71,32,49, 50,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,56,10,65,48,10,65,48,10, 65,48,10,66,48,10,69,48,10,65,48,10,65,48,10,66, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,52,68, 53,10,69,78,67,79,68,73,78,71,32,49,50,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,50, 56,10,55,48,10,65,48,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,52,68,54,10,69,78, 67,79,68,73,78,71,32,49,50,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,55, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,52,68,55,10,69,78,67,79,68,73, 78,71,32,49,50,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,52,68,56,10,69,78,67,79,68,73,78,71,32,49, 50,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 48,56,10,70,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,49,48, 56,52,54,10,69,78,67,79,68,73,78,71,32,49,50,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,48,56,10,70,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,65,10, 69,78,67,79,68,73,78,71,32,49,50,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 70,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,66,10,69,78,67,79, 68,73,78,71,32,49,50,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,48,56,10,70, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,68,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,65, 56,10,65,56,10,55,48,10,50,48,10,55,48,10,65,56, 10,65,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,68,68,10,69,78,67,79,68,73,78,71,32,49,50,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,65,56, 10,65,56,10,55,48,10,55,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,68,69,10, 69,78,67,79,68,73,78,71,32,49,50,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,48,56,10, 51,48,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,68,70,10,69,78,67,79, 68,73,78,71,32,49,50,52,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,51,48,10,48, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,48,10,69,78,67,79,68,73,78,71, 32,49,50,52,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,48,56,10,49, 48,10,50,48,10,55,48,10,48,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,49,10,69,78,67,79,68,73,78,71,32,49,50,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,49,48,10,50,48,10,55,48,10,48,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,50,10, 69,78,67,79,68,73,78,71,32,49,50,53,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,56,56,10,57,56,10,57,56,10, 65,56,10,67,56,10,67,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,51,10,69,78,67,79, 68,73,78,71,32,49,50,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,56,56,10,56,56,10,57,56,10,65, 56,10,67,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,52,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,57,56,10,57,56,10,65,56,10,67,56,10,67,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,53,10,69,78,67,79,68,73,78,71,32,49,50,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,67,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,54,10, 69,78,67,79,68,73,78,71,32,49,50,53,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,55,10,69,78,67,79, 68,73,78,71,32,49,50,53,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,56,10,69,78,67,79,68,73,78,71, 32,49,50,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,69,56,10,66,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,57,10,69,78,67,79,68,73,78,71,32,49,50,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,69,56,10,66,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,55,48,10,56,56,10,69,56,10, 66,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,66,10,69,78,67,79, 68,73,78,71,32,49,50,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,69,56,10,66, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,69,67,10,69,78,67,79,68,73,78,71, 32,49,50,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,69, 48,10,49,48,10,48,56,10,55,56,10,48,56,10,49,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,69,68,10,69,78,67,79,68,73,78,71,32,49,50,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,70,48, 10,48,56,10,51,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,69,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,69,70,10,69,78,67,79, 68,73,78,71,32,49,50,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,48,10,69,78,67,79,68,73,78,71, 32,49,50,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,70,49,10,69,78,67,79,68,73,78,71,32,49,50,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,70,50,10, 69,78,67,79,68,73,78,71,32,49,50,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,56, 10,57,48,10,48,48,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,51,10,69,78,67,79, 68,73,78,71,32,49,50,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,56,10, 57,48,10,48,48,10,56,56,10,56,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,56,56,10,55,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,52,70,52,10,69,78,67,79,68,73,78,71, 32,49,50,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,53,48,10,53,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 52,70,53,10,69,78,67,79,68,73,78,71,32,49,50,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,52,70,56,10, 69,78,67,79,68,73,78,71,32,49,50,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,53,48,10,48,48,10,56,56,10,56,56,10,69,56,10, 57,56,10,57,56,10,57,56,10,69,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,52,70,57,10,69,78,67,79, 68,73,78,71,32,49,50,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 53,48,10,48,48,10,56,56,10,56,56,10,69,56,10,57, 56,10,57,56,10,69,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,48,10,69,78,67,79,68,73,78,71, 32,49,50,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,48,56,10,48, 56,10,55,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,49,10,69,78,67,79,68,73,78,71,32,49,50,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,51,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,50,10, 69,78,67,79,68,73,78,71,32,49,50,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,50,48,10,54,48,10,65,48,10, 65,56,10,65,56,10,65,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,51,10,69,78,67,79, 68,73,78,71,32,49,50,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,54,48,10,65,48,10,65, 56,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,52,10,69,78,67,79,68,73,78,71, 32,49,50,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,50,48,10,50,48,10,52,56,10,50,56,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,53,10,69,78,67,79,68,73,78,71,32,49,50,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,50,48,10,50,48,10,52,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,54,10, 69,78,67,79,68,73,78,71,32,49,50,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,57,48,10,49,48,10,49,48,10,49,48,10, 54,48,10,49,48,10,49,48,10,49,48,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,55,10,69,78,67,79, 68,73,78,71,32,49,50,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,48,10,49,48,10,49,48,10,54, 48,10,49,48,10,49,48,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,56,10,69,78,67,79,68,73,78,71, 32,49,50,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,56,10,65,56,10,65,56, 10,57,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,57,10,69,78,67,79,68,73,78,71,32,49,50,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,54,48, 10,65,48,10,65,48,10,65,56,10,65,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,65,10, 69,78,67,79,68,73,78,71,32,49,50,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,69,48,10, 65,56,10,65,56,10,65,56,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,66,10,69,78,67,79, 68,73,78,71,32,49,50,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,65,48,10,65,48,10,69,48,10,65, 56,10,65,56,10,57,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,48,67,10,69,78,67,79,68,73,78,71, 32,49,50,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,57,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,48,68,10,69,78,67,79,68,73,78,71,32,49,50,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,48,10,57,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,48,69,10, 69,78,67,79,68,73,78,71,32,49,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,48,70,10,69,78,67,79, 68,73,78,71,32,49,50,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,49,10,69,78,67,79,68,73,78,71, 32,49,51,50,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,66,48, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,50,10,69,78,67,79,68,73,78,71,32,49,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,48, 10,70,48,10,56,56,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,51,10, 69,78,67,79,68,73,78,71,32,49,51,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,65,48,10,65,48,10,65,48,10,55,48,10, 50,56,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,52,10,69,78,67,79, 68,73,78,71,32,49,51,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,65,48,10,50,48,10,51,48,10,50,56,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,53,10,69,78,67,79,68,73,78,71, 32,49,51,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,70, 48,10,56,56,10,56,48,10,56,48,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,54,10,69,78,67,79,68,73,78,71,32,49,51,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,57,48,10,57,48,10,57,48, 10,55,48,10,49,48,10,65,48,10,70,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,55,10, 69,78,67,79,68,73,78,71,32,49,51,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,70,48,10,56,56,10, 56,48,10,56,48,10,56,48,10,55,48,10,48,56,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,56,10,69,78,67,79, 68,73,78,71,32,49,51,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 57,48,10,57,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,57,10,69,78,67,79,68,73,78,71, 32,49,51,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,48,10,57,48,10,57, 48,10,66,56,10,68,48,10,68,48,10,65,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,65,10,69,78,67,79,68,73,78,71,32,49,51,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,55,56,10,57,48,10,57,48,10,57,48,10,54,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,66,10, 69,78,67,79,68,73,78,71,32,49,51,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,70,48,10,56,56,10, 56,56,10,56,48,10,56,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,51,67,10,69,78,67,79, 68,73,78,71,32,49,51,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,55,48,10,48,56,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,51,68,10,69,78,67,79,68,73,78,71, 32,49,51,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,69, 56,10,65,56,10,65,56,10,57,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,51,69,10,69,78,67,79,68,73,78,71,32,49,51,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,51,70,10, 69,78,67,79,68,73,78,71,32,49,51,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,56,10,48,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,48,10,69,78,67,79, 68,73,78,71,32,49,51,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,49,48,10,50,48,10,52,48,10,56,48,10,67, 48,10,51,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,49,10,69,78,67,79,68,73,78,71, 32,49,51,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,52, 56,10,52,56,10,51,56,10,48,56,10,55,48,10,57,48, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,50,10,69,78,67,79,68,73,78,71,32,49,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,65,48,10,65,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,51,10, 69,78,67,79,68,73,78,71,32,49,51,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,49,48,10,49,48,10,69,48,10,53,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,52,10,69,78,67,79, 68,73,78,71,32,49,51,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 65,56,10,65,48,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,53,10,69,78,67,79,68,73,78,71, 32,49,51,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,50,56,10,51,48,10,50,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,54,10,69,78,67,79,68,73,78,71,32,49,51,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,56,48,10,67,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,56,10,51,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,55,10, 69,78,67,79,68,73,78,71,32,49,51,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,56,10,70,48,10,52,48,10,56,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,56,10,69,78,67,79, 68,73,78,71,32,49,51,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,57,10,69,78,67,79,68,73,78,71, 32,49,51,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,56,10,49,48,10,49,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,65,10,69,78,67,79,68,73,78,71,32,49,51,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,65,56, 10,50,56,10,50,56,10,48,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,66,10, 69,78,67,79,68,73,78,71,32,49,51,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,57,48,10,57,48,10,57,48,10,53,48,10, 51,48,10,65,48,10,70,48,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,52,67,10,69,78,67,79, 68,73,78,71,32,49,51,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,65,48,10,66,48,10,65,56,10,65,56,10,65, 48,10,65,48,10,65,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,52,68,10,69,78,67,79,68,73,78,71, 32,49,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,52,69,10,69,78,67,79,68,73,78,71,32,49,51,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,54,48,10,50,48,10,51,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,52,70,10, 69,78,67,79,68,73,78,71,32,49,51,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,56,48,10,55,48,10, 48,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,48,10,69,78,67,79, 68,73,78,71,32,49,51,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,49,10,69,78,67,79,68,73,78,71, 32,49,51,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,55,48,10,56,56,10,48,56,10,48,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,50,10,69,78,67,79,68,73,78,71,32,49,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,69,48, 10,57,48,10,57,48,10,56,56,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,51,10, 69,78,67,79,68,73,78,71,32,49,51,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,55,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,55,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,52,10,69,78,67,79, 68,73,78,71,32,49,51,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,56,10,50,56,10,51,48,10,65,48,10,55,48,10,50, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,53,10,69,78,67,79,68,73,78,71, 32,49,51,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,54,10,69,78,67,79,68,73,78,71,32,49,51,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,65,48,10,65,48,10,55,48, 10,50,56,10,50,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,57,10, 69,78,67,79,68,73,78,71,32,49,51,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,52,48,10,52,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,65,10,69,78,67,79, 68,73,78,71,32,49,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,66,10,69,78,67,79,68,73,78,71, 32,49,51,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,53,67,10,69,78,67,79,68,73,78,71,32,49,51,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,55,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,53,68,10, 69,78,67,79,68,73,78,71,32,49,51,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,53,69,10,69,78,67,79, 68,73,78,71,32,49,51,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,65,56,10,57,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,53,70,10,69,78,67,79,68,73,78,71, 32,49,51,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,67,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,49,10,69,78,67,79,68,73,78,71,32,49,51,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,50,10, 69,78,67,79,68,73,78,71,32,49,51,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,56,48,10,70,56,10,56,48,10,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,51,10,69,78,67,79, 68,73,78,71,32,49,51,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,55,56,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,52,10,69,78,67,79,68,73,78,71, 32,49,51,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,48,10,68,48,10,57,48,10,57,48,10,57,48, 10,57,56,10,49,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,53,10,69,78,67,79,68,73,78,71,32,49,51,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,56,56,10,56,56,10,67,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,54,10, 69,78,67,79,68,73,78,71,32,49,51,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,57,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,55,10,69,78,67,79, 68,73,78,71,32,49,51,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,70,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,55,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,56,10,69,78,67,79,68,73,78,71, 32,49,51,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,48,10,70,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,57,10,69,78,67,79,68,73,78,71,32,49,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,48, 10,68,48,10,57,48,10,66,56,10,68,48,10,65,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,65,10, 69,78,67,79,68,73,78,71,32,49,51,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,49,48,10,49,48,10,55,56,10,57,48,10, 57,48,10,57,48,10,57,48,10,54,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,66,10,69,78,67,79, 68,73,78,71,32,49,51,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,65,48,10,68,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,54,67,10,69,78,67,79,68,73,78,71, 32,49,51,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,54,68,10,69,78,67,79,68,73,78,71,32,49,51,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,69,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,57,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,54,69,10, 69,78,67,79,68,73,78,71,32,49,51,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,48,10,52,48,10,50,48,10,55,56,10, 57,48,10,57,48,10,57,48,10,54,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,54,70,10,69,78,67,79, 68,73,78,71,32,49,51,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,48,10,69,78,67,79,68,73,78,71, 32,49,51,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,49,10,69,78,67,79,68,73,78,71,32,49,51,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,55,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,50,10, 69,78,67,79,68,73,78,71,32,49,51,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,48,10,68,48,10, 57,48,10,57,48,10,57,48,10,57,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,51,10,69,78,67,79, 68,73,78,71,32,49,51,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 52,56,10,52,48,10,70,56,10,52,56,10,52,56,10,52, 56,10,53,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,52,10,69,78,67,79,68,73,78,71, 32,49,51,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,56,10,49,48,10,49, 48,10,57,48,10,57,48,10,57,48,10,57,48,10,66,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,53,10,69,78,67,79,68,73,78,71,32,49,51,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,56,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,54,10, 69,78,67,79,68,73,78,71,32,49,51,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,48,10,57,56,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,55,10,69,78,67,79, 68,73,78,71,32,49,51,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,48,56,10,48, 56,10,49,48,10,50,48,10,52,48,10,51,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,56,10,69,78,67,79,68,73,78,71, 32,49,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,57,10,69,78,67,79,68,73,78,71,32,49,52,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,65,10, 69,78,67,79,68,73,78,71,32,49,52,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,66,10,69,78,67,79, 68,73,78,71,32,49,52,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,53,48,10,50,48,10,52,48,10,51,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,55,67,10,69,78,67,79,68,73,78,71, 32,49,52,48,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,65,48,10,68,48,10,57,48,10,57,48,10,57,48, 10,57,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,55,68,10,69,78,67,79,68,73,78,71,32,49,52,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,55,69,10, 69,78,67,79,68,73,78,71,32,49,52,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,49,48,10,49,48,10,57,48,10,57,48,10, 57,48,10,57,48,10,57,48,10,55,48,10,49,48,10,49, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,55,70,10,69,78,67,79, 68,73,78,71,32,49,52,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,48,10,69,78,67,79,68,73,78,71, 32,49,52,48,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,49,10,69,78,67,79,68,73,78,71,32,49,52,48, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,55,56,10,48,56,10, 56,56,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,50,10, 69,78,67,79,68,73,78,71,32,49,52,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,54,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,56,51,10,69,78,67,79, 68,73,78,71,32,49,52,49,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,66,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,54,56,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,52,10,69,78,67,79,68,73,78,71, 32,49,52,49,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,56,10,50,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,53,10,69,78,67,79,68,73,78,71,32,49,52,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,56,54,10, 69,78,67,79,68,73,78,71,32,49,52,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,48,10,65,48,10,65,48,10,55,48,10,50,56,10, 65,56,10,65,56,10,65,56,10,55,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,56,55,10,69,78,67,79, 68,73,78,71,32,49,52,49,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,57,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,56,57,10,69,78,67,79,68,73,78,71, 32,49,52,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 48,10,51,48,10,48,48,10,51,48,10,51,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,56,65,10,69,78,67,79,68,73,78,71,32,49,52,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,49,10, 69,78,67,79,68,73,78,71,32,49,52,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,53, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,50,10,69,78,67,79, 68,73,78,71,32,49,52,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,51,10,69,78,67,79,68,73,78,71, 32,49,52,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,49,48,10,50,48,10,49,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,52,10,69,78,67,79,68,73,78,71,32,49,52,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,48,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,53,10, 69,78,67,79,68,73,78,71,32,49,52,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,53,48, 10,52,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,54,10,69,78,67,79, 68,73,78,71,32,49,52,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,55,10,69,78,67,79,68,73,78,71, 32,49,52,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,56,10,69,78,67,79,68,73,78,71,32,49,52,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,56,10,65,56,10,57,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,57,10, 69,78,67,79,68,73,78,71,32,49,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,65,10,69,78,67,79, 68,73,78,71,32,49,52,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,52,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,57,67,10,69,78,67,79,68,73,78,71, 32,49,52,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,57,68,10,69,78,67,79,68,73,78,71,32,49,52,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,52,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,57,69,10, 69,78,67,79,68,73,78,71,32,49,52,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,49,48,10,50,52, 10,50,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,57,70,10,69,78,67,79, 68,73,78,71,32,49,52,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,53,48,10,65,56,10, 53,48,10,53,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,48,10,69,78,67,79,68,73,78,71, 32,49,52,52,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,48,10,50,56,10,49,48,10,49, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,49,10,69,78,67,79,68,73,78,71,32,49,52,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,68,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,51,10, 69,78,67,79,68,73,78,71,32,49,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,49,48,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,52,10,69,78,67,79, 68,73,78,71,32,49,52,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,53,10,69,78,67,79,68,73,78,71, 32,49,52,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,54,10,69,78,67,79,68,73,78,71,32,49,52,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,56,10,57,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,56,10, 69,78,67,79,68,73,78,71,32,49,52,52,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,57,10,69,78,67,79, 68,73,78,71,32,49,52,52,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,48,10,65,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,65,10,69,78,67,79,68,73,78,71, 32,49,52,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,48, 53,65,66,10,69,78,67,79,68,73,78,71,32,49,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,52,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,48,53,65,67,10, 69,78,67,79,68,73,78,71,32,49,52,53,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,49,48,10,55,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,48,53,65,68,10,69,78,67,79, 68,73,78,71,32,49,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,52,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,48,53,65,70,10,69,78,67,79,68,73,78,71, 32,49,52,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,57,10,69,78,67,79,68,73,78,71,32,49, 52,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,49,10,69,78,67,79,68,73,78,71,32,49,52,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,65,56,10, 48,48,10,52,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,56,48, 48,10,69,78,67,79,68,73,78,71,32,49,52,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,69,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,56,48,50,10, 69,78,67,79,68,73,78,71,32,49,52,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,69,48,10,52, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,55,57,51,10,69,78, 67,79,68,73,78,71,32,49,52,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,55,57,52,10,69,78,67,79, 68,73,78,71,32,49,52,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,55,57,53,10,69,78,67,79,68,73, 78,71,32,49,52,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,55,57,56,10,69,78,67,79,68,73,78,71, 32,49,52,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,57,55,10,69,78,67,79,68,73,78,71,32,49, 52,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,54,10,69,78,67,79,68,73,78,71,32,49,52,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,57, 54,10,69,78,67,79,68,73,78,71,32,49,52,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,50,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,56,48,55,10, 69,78,67,79,68,73,78,71,32,49,52,54,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,56,51,57,10,69,78, 67,79,68,73,78,71,32,49,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,52,53,10,69,78,67,79, 68,73,78,71,32,49,52,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,56,52,49,10,69,78,67,79,68,73, 78,71,32,49,52,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,56,52,50,10,69,78,67,79,68,73,78,71, 32,49,52,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,56,48,52,10,69,78,67,79,68,73,78,71,32,49, 52,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 56,48,51,10,69,78,67,79,68,73,78,71,32,49,52,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,53, 56,10,69,78,67,79,68,73,78,71,32,49,52,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,67,52,10,69,78, 67,79,68,73,78,71,32,49,52,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,54,52,10,69,78,67,79, 68,73,78,71,32,49,52,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,48,10,52,56,10,54,56,10,57, 48,10,56,56,10,67,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,54,53,10,69,78,67,79,68,73, 78,71,32,49,52,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,54,54,10,69,78,67,79,68,73,78,71, 32,49,52,57,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,50,48,10,49,48,10,49,48,10,50,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,54,55,10,69,78,67,79,68,73,78,71,32,49, 52,57,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,54,56,10,69,78,67,79,68,73,78,71,32,49,52,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,54, 57,10,69,78,67,79,68,73,78,71,32,49,52,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,48,10, 69,78,67,79,68,73,78,71,32,49,52,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,55,49,10,69,78, 67,79,68,73,78,71,32,49,52,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,55,50,10,69,78,67,79, 68,73,78,71,32,49,52,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,56,10,65,56,10,65,56,10,56, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,55,51,10,69,78,67,79,68,73, 78,71,32,49,52,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,55,52,10,69,78,67,79,68,73,78,71, 32,49,52,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,55,53,10,69,78,67,79,68,73,78,71,32,49, 52,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,56,10,48,56,10,48,56,10,48,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,55,54,10,69,78,67,79,68,73,78,71,32,49,53,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,48,56,10,48,56,10,48,56,10,49,48,10,54,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,55, 55,10,69,78,67,79,68,73,78,71,32,49,53,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,52, 56,10,52,56,10,52,56,10,52,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,55,56,10, 69,78,67,79,68,73,78,71,32,49,53,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,65,56,10, 52,56,10,56,56,10,56,56,10,66,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,55,57,10,69,78, 67,79,68,73,78,71,32,49,53,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,56,48,10,69,78,67,79, 68,73,78,71,32,49,53,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,49,10,69,78,67,79,68,73, 78,71,32,49,53,48,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,56,10,52,56,10,52,56,10, 53,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,56,50,10,69,78,67,79,68,73,78,71, 32,49,53,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,56,51,10,69,78,67,79,68,73,78,71,32,49, 53,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,52,56,10,52,56,10,52,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 54,56,52,10,69,78,67,79,68,73,78,71,32,49,53,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,52,56,10,52,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,54,56, 53,10,69,78,67,79,68,73,78,71,32,49,53,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,57,48,10,52, 56,10,52,56,10,53,48,10,54,48,10,52,48,10,52,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,53,55,54,56,54,10, 69,78,67,79,68,73,78,71,32,49,53,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 50,56,10,49,48,10,48,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,56,55,10,69,78, 67,79,68,73,78,71,32,49,53,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,56,10,56,56, 10,56,56,10,56,56,10,66,48,10,56,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,102,105,105,53,55,54,56,56,10,69,78,67,79, 68,73,78,71,32,49,53,49,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,53,55,54,56,57,10,69,78,67,79,68,73, 78,71,32,49,53,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,65,56,10,65,56,10,65,56,10,69,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,53,55,54,57,48,10,69,78,67,79,68,73,78,71, 32,49,53,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,67,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,55,49,54,10,69,78,67,79,68,73,78,71,32,49, 53,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,53,55, 55,49,55,10,69,78,67,79,68,73,78,71,32,49,53,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,52,56,10,52,56,10,48,56,10,48,56,10,48,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,49, 56,10,69,78,67,79,68,73,78,71,32,49,53,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,56,10,52, 56,10,52,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,53,70,51,10,69,78, 67,79,68,73,78,71,32,49,53,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,53,70,52,10,69,78,67,79,68,73, 78,71,32,49,53,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,56,10,57,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,49,10,69,78,67,79,68,73,78,71,32,51, 53,56,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,67,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 50,10,69,78,67,79,68,73,78,71,32,51,53,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,54,56,10,54, 56,10,50,56,10,52,56,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,51,10,69,78, 67,79,68,73,78,71,32,51,53,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,65,56,10,69,56,10,50,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,52,10,69,78,67,79,68,73, 78,71,32,51,53,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,69,56,10,69,56,10, 67,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,53,10,69,78,67,79,68,73,78,71,32,51, 53,56,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,69,56,10,69,56,10,67,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 54,10,69,78,67,79,68,73,78,71,32,51,53,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,69, 56,10,50,56,10,52,56,10,69,56,10,68,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,55,10,69,78, 67,79,68,73,78,71,32,51,53,57,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,51,48,10,49,48, 10,57,48,10,53,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,56,10,69,78,67,79,68,73, 78,71,32,51,53,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,54,56,10,54,56,10, 50,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,57,10,69,78,67,79,68,73,78,71,32,51, 53,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,49,48,10,68,48,10,68,48,10,55,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 65,10,69,78,67,79,68,73,78,71,32,51,53,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,48,10,68,48,10,69, 48,10,53,48,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,66,10,69,78, 67,79,68,73,78,71,32,51,53,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,65,56,10,70,48,10,50,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,48,67,10,69,78,67,79,68,73, 78,71,32,51,53,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,56,10,65,56,10,54,56,10,65,56,10, 70,56,10,69,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,48,68,10,69,78,67,79,68,73,78,71,32,51, 53,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,56,10,65,56,10,54,56,10,66,56,10,69,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,48, 69,10,69,78,67,79,68,73,78,71,32,51,53,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,52,56,10,52,56,10,67,56,10,68,56,10,51,56, 10,52,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,48,70,10,69,78, 67,79,68,73,78,71,32,51,53,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,52,56, 10,52,56,10,67,56,10,68,56,10,65,56,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,48,10,69,78,67,79,68,73, 78,71,32,51,54,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,55,48,10,54,56,10, 54,56,10,49,56,10,65,56,10,53,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,49,10,69,78,67,79,68,73,78,71,32,51, 54,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,70,56,10,50,56,10,52,56,10,52,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 50,10,69,78,67,79,68,73,78,71,32,51,54,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,65,56,10,69, 56,10,65,56,10,65,56,10,70,56,10,69,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,51,10,69,78, 67,79,68,73,78,71,32,51,54,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,54,56,10,65,56,10,54,56, 10,66,48,10,66,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,52,10,69,78,67,79,68,73, 78,71,32,51,54,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,69,56,10,69,56,10, 65,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,53,10,69,78,67,79,68,73,78,71,32,51, 54,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 53,48,10,65,56,10,69,56,10,69,56,10,65,56,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 54,10,69,78,67,79,68,73,78,71,32,51,54,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,67,56,10,52,56,10,54,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,55,10,69,78, 67,79,68,73,78,71,32,51,54,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,48,10,69,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,56,10,69,78,67,79,68,73, 78,71,32,51,54,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,48,10,70,48,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,57,10,69,78,67,79,68,73,78,71,32,51, 54,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,68,48,10,53,48,10,57,48,10,66,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 65,10,69,78,67,79,68,73,78,71,32,51,54,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,52,56,10,52,56,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,66,10,69,78, 67,79,68,73,78,71,32,51,54,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,56,10,48,56,10,67,56,10,67,56,10,52,56, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,49,67,10,69,78,67,79,68,73, 78,71,32,51,54,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,56,10,67,56,10,56,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,49,68,10,69,78,67,79,68,73,78,71,32,51, 54,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,56,10,48,56,10, 67,56,10,67,56,10,56,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,49, 69,10,69,78,67,79,68,73,78,71,32,51,54,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,52,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,49,70,10,69,78, 67,79,68,73,78,71,32,51,54,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,56,10,48,56,10,67,56,10,67,56,10,52,56, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,48,10,69,78,67,79,68,73, 78,71,32,51,54,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,52,56,10, 67,56,10,67,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,49,10,69,78,67,79,68,73,78,71,32,51, 54,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,56,10,67,56,10,52,56,10,52,56,10,69,56,10,68, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 50,10,69,78,67,79,68,73,78,71,32,51,54,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,56,10,67, 56,10,56,56,10,54,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,51,10,69,78, 67,79,68,73,78,71,32,51,54,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,69,48, 10,49,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,52,10,69,78,67,79,68,73, 78,71,32,51,54,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,52,56,10, 54,56,10,54,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,53,10,69,78,67,79,68,73,78,71,32,51, 54,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,54,56,10,57,56,10,67,56,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 54,10,69,78,67,79,68,73,78,71,32,51,54,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,67,56,10,52,56,10,67,56,10,67,56,10,48,56, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,55,10,69,78, 67,79,68,73,78,71,32,51,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,56,56,10,48,56, 10,48,56,10,49,56,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,56,10,69,78,67,79,68,73, 78,71,32,51,54,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,56,10,55,48,10,56,56,10,69,56,10,69,56,10, 67,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,57,10,69,78,67,79,68,73,78,71,32,51, 54,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,68,48,10,55,48,10,66,56,10,57,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 65,10,69,78,67,79,68,73,78,71,32,51,54,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,55,48,10,56, 56,10,54,56,10,57,56,10,67,56,10,67,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,66,10,69,78, 67,79,68,73,78,71,32,51,54,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,53,48, 10,54,56,10,52,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,50,67,10,69,78,67,79,68,73, 78,71,32,51,54,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,56,10,68,48,10,67,56,10,52,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,50,68,10,69,78,67,79,68,73,78,71,32,51, 54,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,48,56,10,67,56,10,67,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,50, 69,10,69,78,67,79,68,73,78,71,32,51,54,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,70,48,10,48, 56,10,67,56,10,67,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,50,70,10,69,78, 67,79,68,73,78,71,32,51,54,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,69,56,10,48,56, 10,48,56,10,48,56,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,48,10,69,78,67,79,68,73, 78,71,32,51,54,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,54,56,10,55,48,10,48,48,10, 54,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,49,10,69,78,67,79,68,73,78,71,32,51, 54,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 50,10,69,78,67,79,68,73,78,71,32,51,54,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,51,10,69,78, 67,79,68,73,78,71,32,51,54,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,51,48,10,52,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,52,10,69,78,67,79,68,73, 78,71,32,51,54,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,53,10,69,78,67,79,68,73,78,71,32,51, 54,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,55,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 54,10,69,78,67,79,68,73,78,71,32,51,54,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,55,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,55,10,69,78, 67,79,68,73,78,71,32,51,54,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,55,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,51,56,10,69,78,67,79,68,73, 78,71,32,51,54,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,51,57,10,69,78,67,79,68,73,78,71,32,51, 54,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,49,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,51, 65,10,69,78,67,79,68,73,78,71,32,51,54,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,56, 10,49,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,51,70,10,69,78, 67,79,68,73,78,71,32,51,54,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,70,48,10,65,56,10,65,56,10,70,48, 10,65,56,10,65,56,10,70,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,48,10,69,78,67,79,68,73, 78,71,32,51,54,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 54,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,49,10,69,78,67,79,68,73,78,71,32,51, 54,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 57,48,10,57,48,10,57,48,10,57,48,10,68,56,10,68, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 50,10,69,78,67,79,68,73,78,71,32,51,54,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,56,10,56,48,10,70,48,10,49, 48,10,49,48,10,49,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,51,10,69,78, 67,79,68,73,78,71,32,51,54,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,57,48,10,66,48,10,55,48,10,49,48, 10,49,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,52,10,69,78,67,79,68,73, 78,71,32,51,54,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,66,48, 10,53,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,56,10,49,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,53,10,69,78,67,79,68,73,78,71,32,51, 54,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 54,10,69,78,67,79,68,73,78,71,32,51,54,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,56,10,68, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,55,10,69,78, 67,79,68,73,78,71,32,51,54,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,56,10,54, 48,10,53,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,56,10,69,78,67,79,68,73, 78,71,32,51,54,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,57,10,69,78,67,79,68,73,78,71,32,51, 54,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,54,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 65,10,69,78,67,79,68,73,78,71,32,51,54,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,52,10, 55,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,66,10,69,78, 67,79,68,73,78,71,32,51,54,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,51,56,10,49, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,52,67,10,69,78,67,79,68,73, 78,71,32,51,54,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,52,68,10,69,78,67,79,68,73,78,71,32,51, 54,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,52, 69,10,69,78,67,79,68,73,78,71,32,51,54,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,56,10,51,56,10,51,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,52,70,10,69,78, 67,79,68,73,78,71,32,51,54,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,48,10,69,78,67,79,68,73, 78,71,32,51,54,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,49,10,69,78,67,79,68,73,78,71,32,51, 54,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,65,56,10,69,56,10,48,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 50,10,69,78,67,79,68,73,78,71,32,51,54,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,48,10,56,48,10,65, 56,10,66,56,10,66,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,51,10,69,78, 67,79,68,73,78,71,32,51,54,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,56,56,10,67,56,10,67,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,52,10,69,78,67,79,68,73, 78,71,32,51,54,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,48,56,10,55,48,10,56,48,10,66,48,10, 66,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,53,10,69,78,67,79,68,73,78,71,32,51, 54,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 54,56,10,55,48,10,56,48,10,66,48,10,66,48,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 54,10,69,78,67,79,68,73,78,71,32,51,54,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,53, 48,10,50,56,10,48,56,10,54,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,55,10,69,78, 67,79,68,73,78,71,32,51,54,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,65,56,10,69,56, 10,65,56,10,65,56,10,68,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,48,69,53,56,10,69,78,67,79,68,73, 78,71,32,51,54,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,56,10,55,48,10,56,48,10,57,56,10, 65,56,10,68,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,48,69,53,57,10,69,78,67,79,68,73,78,71,32,51, 54,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 48,56,10,51,48,10,54,48,10,65,48,10,68,48,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,48,69,53, 65,10,69,78,67,79,68,73,78,71,32,51,54,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,52,10,55, 52,10,49,52,10,49,52,10,49,52,10,50,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,48,69,53,66,10,69,78, 67,79,68,73,78,71,32,51,54,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,65,56, 10,66,48,10,65,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,48,10,69,78,67,79,68,73, 78,71,32,52,51,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,51,48,10,48,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,49,10,69,78,67,79,68,73,78,71,32,52, 51,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,54,48,10,50,48,10, 50,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 50,10,69,78,67,79,68,73,78,71,32,52,51,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,50,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,51,10,69,78, 67,79,68,73,78,71,32,52,51,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,65,56, 10,65,56,10,57,48,10,56,48,10,54,48,10,49,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,52,10,69,78,67,79,68,73, 78,71,32,52,51,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,56,56,10,48,56,10,48,56,10, 48,56,10,56,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,53,10,69,78,67,79,68,73,78,71,32,52, 51,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,51,48,10,48,56,10,48,56,10,56, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 54,10,69,78,67,79,68,73,78,71,32,52,51,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,65,48,10,65,56,10,55,48,10,51, 48,10,50,56,10,50,56,10,50,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,55,10,69,78, 67,79,68,73,78,71,32,52,51,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,65,56,10,52,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,56,10,69,78,67,79,68,73, 78,71,32,52,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,57,10,69,78,67,79,68,73,78,71,32,52, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,48,10, 48,56,10,48,56,10,51,48,10,48,56,10,48,56,10,56, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 65,10,69,78,67,79,68,73,78,71,32,52,51,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 56,10,66,56,10,66,56,10,65,56,10,56,48,10,55,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,66,10,69,78, 67,79,68,73,78,71,32,52,51,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,68,67,10,69,78,67,79,68,73, 78,71,32,52,51,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,56,48, 10,56,48,10,56,48,10,70,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,68,68,10,69,78,67,79,68,73,78,71,32,52, 51,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,65,56,10,65,56,10,65,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,68, 69,10,69,78,67,79,68,73,78,71,32,52,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,49,48,10,48,56,10,48,56,10,51, 48,10,48,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,68,70,10,69,78, 67,79,68,73,78,71,32,52,51,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,49,56,10,65,56, 10,65,56,10,52,56,10,48,56,10,52,56,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,48,10,69,78,67,79,68,73, 78,71,32,52,51,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,56, 10,55,48,10,56,48,10,68,48,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,49,10,69,78,67,79,68,73,78,71,32,52, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,65,48,10,57,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 50,10,69,78,67,79,68,73,78,71,32,52,51,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,53,48,10,55,48,10,68, 56,10,68,56,10,65,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,51,10,69,78, 67,79,68,73,78,71,32,52,51,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,66,48,10,52,56,10,52,56,10,48,56, 10,48,56,10,48,56,10,52,56,10,52,56,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,52,10,69,78,67,79,68,73, 78,71,32,52,51,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,65,56,10,65,56,10, 53,48,10,48,56,10,52,56,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,53,10,69,78,67,79,68,73,78,71,32,52, 51,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,49,56,10,48,56,10, 48,56,10,51,56,10,52,56,10,48,56,10,48,56,10,48, 56,10,56,56,10,55,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 54,10,69,78,67,79,68,73,78,71,32,52,51,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,65,56,10,65,56,10,56,56,10,56,48,10,55,48, 10,48,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,55,10,69,78, 67,79,68,73,78,71,32,52,51,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,55,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,56,10,69,78,67,79,68,73, 78,71,32,52,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,65,56,10,56,56,10,51,56,10,52,56,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,57,10,69,78,67,79,68,73,78,71,32,52, 51,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,57,48,10, 69,48,10,56,48,10,70,48,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 65,10,69,78,67,79,68,73,78,71,32,52,51,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,57,48,10,56,56,10,56, 56,10,66,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,66,10,69,78, 67,79,68,73,78,71,32,52,51,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,48,56,10,48,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,69,67,10,69,78,67,79,68,73, 78,71,32,52,51,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,56, 10,65,56,10,56,48,10,56,48,10,70,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,69,68,10,69,78,67,79,68,73,78,71,32,52, 51,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,65,48,10, 50,48,10,54,56,10,66,48,10,54,56,10,50,48,10,50, 48,10,65,48,10,67,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,69, 69,10,69,78,67,79,68,73,78,71,32,52,51,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,57,48,10,65,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,69,70,10,69,78, 67,79,68,73,78,71,32,52,51,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,50,48,10,53,48,10,56,56,10,52,48,10,56,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,48,10,69,78,67,79,68,73, 78,71,32,52,51,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,51,48,10,48,56, 10,51,48,10,48,56,10,48,56,10,51,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,49,10,69,78,67,79,68,73,78,71,32,52, 51,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,65,48,10,57,48,10,56,56,10,66,48,10, 56,56,10,56,56,10,66,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 50,10,69,78,67,79,68,73,78,71,32,52,51,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,53,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,51,10,69,78, 67,79,68,73,78,71,32,52,51,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,48,56,10,49,48, 10,51,48,10,48,56,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,52,10,69,78,67,79,68,73, 78,71,32,52,51,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,51,48,10,48,56,10,48,56,10,51,48,10,48,56,10, 48,56,10,56,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,53,10,69,78,67,79,68,73,78,71,32,52, 51,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,57,48,10, 55,56,10,49,48,10,55,56,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,48,70, 54,10,69,78,67,79,68,73,78,71,32,52,51,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,50,48,10,50,48,10,55, 48,10,65,56,10,65,56,10,55,48,10,50,48,10,50,48, 10,49,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,48,70,55,10,69,78, 67,79,68,73,78,71,32,52,51,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,52,56,10,48,56,10,49,48,10,50,48,10,52,48, 10,52,56,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,48,70,56,10,69,78,67,79,68,73, 78,71,32,52,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,56,56,10,70,48,10,56,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,48,70,66,10,69,78,67,79,68,73,78,71,32,52, 51,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,49,56,10,49,56,10,67,48,10,67,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,65, 56,10,69,78,67,79,68,73,78,71,32,52,53,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,65,57,10,69,78, 67,79,68,73,78,71,32,52,53,50,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,53,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,65,65,10,69,78,67,79,68,73, 78,71,32,52,53,50,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,67,56, 10,52,56,10,53,48,10,53,48,10,53,56,10,54,56,10, 65,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,65,66,10,69,78,67,79,68,73,78,71,32,52, 53,50,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,65, 67,10,69,78,67,79,68,73,78,71,32,52,53,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,66,56,10,57,48,10,57,48,10,57, 48,10,65,56,10,65,56,10,69,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,65,68,10,69,78, 67,79,68,73,78,71,32,52,53,50,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,66,56,10,56,48,10,66,56,10,56,48,10,66,56, 10,65,56,10,68,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,65,69,10,69,78,67,79,68,73, 78,71,32,52,53,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,65,70,10,69,78,67,79,68,73,78,71,32,52, 53,50,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,70,56,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 48,10,69,78,67,79,68,73,78,71,32,52,53,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,56,10,50,56,10,69, 56,10,56,56,10,65,56,10,67,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,49,10,69,78, 67,79,68,73,78,71,32,52,53,50,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,53,52,10,53,52,10,68,52,10,57,52, 10,66,52,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,50,10,69,78,67,79,68,73, 78,71,32,52,53,51,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,52, 10,53,52,10,53,52,10,68,67,10,57,52,10,66,52,10, 68,67,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,51,10,69,78,67,79,68,73,78,71,32,52, 53,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,69,52,10,50,52,10, 50,56,10,69,56,10,57,52,10,66,52,10,68,52,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 52,10,69,78,67,79,68,73,78,71,32,52,53,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,53,48,10,53,48,10,68, 56,10,57,48,10,66,48,10,68,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,53,10,69,78, 67,79,68,73,78,71,32,52,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,52,48,10,53,52,10,68,52,10,57,52, 10,65,56,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,54,10,69,78,67,79,68,73, 78,71,32,52,53,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,69,67, 10,50,48,10,51,67,10,69,56,10,57,67,10,66,52,10, 68,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,55,10,69,78,67,79,68,73,78,71,32,52, 53,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 56,10,69,78,67,79,68,73,78,71,32,52,53,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,57,10,69,78, 67,79,68,73,78,71,32,52,53,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,65,56,10,65,56,10,65,56,10,69,56,10,66,52, 10,66,52,10,68,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,65,10,69,78,67,79,68,73, 78,71,32,52,53,51,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,49,48, 10,49,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,66,10,69,78,67,79,68,73,78,71,32,52, 53,51,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,56,10,50,56,10, 53,48,10,53,48,10,53,56,10,65,56,10,65,52,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,66, 67,10,69,78,67,79,68,73,78,71,32,52,53,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,51,48,10,52,56,10,56,52,10,56, 52,10,56,52,10,52,56,10,51,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,66,68,10,69,78, 67,79,68,73,78,71,32,52,53,52,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,49,48,10,51,48,10,52,56, 10,52,56,10,56,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,66,69,10,69,78,67,79,68,73, 78,71,32,52,53,52,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,53,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,66,70,10,69,78,67,79,68,73,78,71,32,52, 53,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,70,56,10,48,56,10,48,56,10,49,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,67, 48,10,69,78,67,79,68,73,78,71,32,52,53,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,56,48,10,56,48,10,70, 56,10,56,48,10,56,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,49,67,49,10,69,78, 67,79,68,73,78,71,32,52,53,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,49,67,50,10,69,78,67,79,68,73, 78,71,32,52,53,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,49,69,66,10,69,78,67,79,68,73,78,71,32,52, 53,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 53,48,10,53,48,10,53,48,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,49,70, 57,10,69,78,67,79,68,73,78,71,32,52,54,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,55, 48,10,56,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,48,10,69,78, 67,79,68,73,78,71,32,53,55,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,49,10,69,78,67,79,68,73, 78,71,32,53,55,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,50,10,69,78,67,79,68,73,78,71,32,53, 55,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,50,56,10,50,56,10,50,56,10,50, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 51,10,69,78,67,79,68,73,78,71,32,53,55,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,51,56,10,51,56,10,51,56,10,51,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,52,10,69,78, 67,79,68,73,78,71,32,53,55,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,55,56, 10,55,56,10,55,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,53,10,69,78,67,79,68,73, 78,71,32,53,55,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,70,56,10,70,56,10, 70,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,54,10,69,78,67,79,68,73,78,71,32,53, 55,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 48,56,10,70,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 55,10,69,78,67,79,68,73,78,71,32,53,55,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,50,56,10,50,56,10,50,56,10,70, 67,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,56,10,69,78, 67,79,68,73,78,71,32,53,55,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 56,10,51,56,10,51,56,10,51,56,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,57,10,69,78,67,79,68,73, 78,71,32,53,55,54,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,55,56, 10,55,56,10,55,56,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,65,10,69,78,67,79,68,73,78,71,32,53, 55,55,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,70,56,10,70,56,10, 70,56,10,70,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 66,10,69,78,67,79,68,73,78,71,32,53,55,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,49,48,10,49,48,10,49,48,10,70, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,56,67,10,69,78, 67,79,68,73,78,71,32,53,55,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 56,10,50,56,10,50,56,10,50,56,10,70,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,56,68,10,69,78,67,79,68,73, 78,71,32,53,55,55,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,56,10,51,56, 10,51,56,10,51,56,10,70,67,10,55,48,10,55,48,10, 55,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,56,69,10,69,78,67,79,68,73,78,71,32,53, 55,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,67,10,51,67,10,51,67,10, 51,67,10,70,67,10,55,56,10,55,56,10,55,56,10,55, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,56, 70,10,69,78,67,79,68,73,78,71,32,53,55,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,67,10,55,67,10,55,67,10,55,67,10,70, 67,10,70,56,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,48,10,69,78, 67,79,68,73,78,71,32,53,55,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,70,67,10,49,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,49,10,69,78,67,79,68,73, 78,71,32,53,55,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,56,10,70,67,10,50,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,50,10,69,78,67,79,68,73,78,71,32,53, 55,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,56,10,70,67,10,51,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 51,10,69,78,67,79,68,73,78,71,32,53,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,70, 67,10,55,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,52,10,69,78, 67,79,68,73,78,71,32,53,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,70,67,10,70,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,53,10,69,78,67,79,68,73, 78,71,32,53,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,56,10,50,56, 10,49,48,10,49,48,10,70,67,10,49,48,10,49,48,10, 50,56,10,50,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,54,10,69,78,67,79,68,73,78,71,32,53, 55,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,48,10,52,56,10,52,56,10, 56,52,10,70,67,10,56,52,10,52,56,10,52,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 55,10,69,78,67,79,68,73,78,71,32,53,55,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,52,48,10,53,56,10,52,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,56,10,69,78, 67,79,68,73,78,71,32,53,55,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,68,56, 10,55,48,10,55,48,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,57,57,10,69,78,67,79,68,73, 78,71,32,53,55,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,57,65,10,69,78,67,79,68,73,78,71,32,53, 55,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,48,48,10,55,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,57, 66,10,69,78,67,79,68,73,78,71,32,53,55,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,48,10,52,48,10,50,48,10,49, 67,10,50,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,57,67,10,69,78, 67,79,68,73,78,71,32,53,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,52,10,48,56,10,49,48,10,69,48,10,49,48, 10,48,56,10,48,52,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,48,10,69,78,67,79,68,73, 78,71,32,53,55,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,53,48, 10,54,48,10,52,56,10,53,48,10,54,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,49,10,69,78,67,79,68,73,78,71,32,53, 55,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,48,48,10,52,56,10,53,48,10,54,48,10, 52,56,10,53,48,10,54,48,10,52,48,10,52,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 50,10,69,78,67,79,68,73,78,71,32,53,55,57,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,51,10,69,78, 67,79,68,73,78,71,32,53,55,57,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,67,48,10,65,48,10,57,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,52,10,69,78,67,79,68,73, 78,71,32,53,55,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,56,10,65,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,53,10,69,78,67,79,68,73,78,71,32,53, 55,57,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,67,48,10,65,48,10, 57,48,10,67,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 54,10,69,78,67,79,68,73,78,71,32,53,55,57,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,52,48,10,55,48,10,52,56,10,52, 56,10,52,56,10,55,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,55,10,69,78, 67,79,68,73,78,71,32,53,55,57,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,70,48,10,56,56,10,65,56,10,56,56, 10,70,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,56,10,69,78,67,79,68,73, 78,71,32,53,56,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,48,10,65,48, 10,57,48,10,67,48,10,65,48,10,57,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,57,10,69,78,67,79,68,73,78,71,32,53, 56,48,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,56,10,66,48,10,56,48,10, 67,56,10,66,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 65,10,69,78,67,79,68,73,78,71,32,53,56,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,48,10,65,48,10,56,48,10,67, 48,10,66,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,66,10,69,78, 67,79,68,73,78,71,32,53,56,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 48,10,53,48,10,52,56,10,54,48,10,53,48,10,52,56, 10,52,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,65,67,10,69,78,67,79,68,73, 78,71,32,53,56,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,65,48, 10,54,48,10,51,48,10,65,56,10,54,48,10,51,48,10, 50,56,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,65,68,10,69,78,67,79,68,73,78,71,32,53, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 51,48,10,50,56,10,50,48,10,51,48,10,50,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,65, 69,10,69,78,67,79,68,73,78,71,32,53,56,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,54,48,10,65, 48,10,50,48,10,54,48,10,65,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,65,70,10,69,78, 67,79,68,73,78,71,32,53,56,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,56,10,51,48,10,54,48,10,65,56,10,51,48, 10,54,48,10,65,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,48,10,69,78,67,79,68,73, 78,71,32,53,56,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,56, 10,51,48,10,54,48,10,65,48,10,50,48,10,54,48,10, 65,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,49,10,69,78,67,79,68,73,78,71,32,53, 56,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,66,48,10,56,56,10, 66,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 50,10,69,78,67,79,68,73,78,71,32,53,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,49,48,10,50,48,10,52, 48,10,50,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,51,10,69,78, 67,79,68,73,78,71,32,53,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,52,10,69,78,67,79,68,73, 78,71,32,53,56,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,57,48, 10,65,48,10,67,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,53,10,69,78,67,79,68,73,78,71,32,53, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,56,56,10,57,48,10,65,48,10, 67,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 54,10,69,78,67,79,68,73,78,71,32,53,56,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,57,48,10,69,48,10,67,48,10,67, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,55,10,69,78, 67,79,68,73,78,71,32,53,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,56,10,69,78,67,79,68,73, 78,71,32,53,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,53,48,10,65,56,10,53,48,10,53,48,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,57,10,69,78,67,79,68,73,78,71,32,53, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,66,48,10,56,56,10, 66,48,10,67,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 65,10,69,78,67,79,68,73,78,71,32,53,56,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,67,56,10,65, 56,10,57,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,66,10,69,78, 67,79,68,73,78,71,32,53,56,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,67,56,10,65,56,10,68,56,10,65,56, 10,57,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,66,67,10,69,78,67,79,68,73, 78,71,32,53,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,65,56,10,55,48,10,50,48,10,55,48,10,65,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,66,68,10,69,78,67,79,68,73,78,71,32,53, 56,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,55,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,66, 69,10,69,78,67,79,68,73,78,71,32,53,56,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,65,48,10,54,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,66,70,10,69,78, 67,79,68,73,78,71,32,53,56,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,48,10,50,56, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,48,10,69,78,67,79,68,73, 78,71,32,53,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,65,48,10,55,48,10,55,48,10,55,48,10,50,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,49,10,69,78,67,79,68,73,78,71,32,53, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 50,10,69,78,67,79,68,73,78,71,32,53,56,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,55,48,10,55, 48,10,55,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,51,10,69,78, 67,79,68,73,78,71,32,53,56,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,57,48,10,52,56, 10,49,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,52,10,69,78,67,79,68,73, 78,71,32,53,56,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,65,56,10,55,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,53,10,69,78,67,79,68,73,78,71,32,53, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,56,10, 51,48,10,50,48,10,54,48,10,65,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 54,10,69,78,67,79,68,73,78,71,32,53,56,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,50,48,10,54, 48,10,65,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,55,10,69,78, 67,79,68,73,78,71,32,53,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,50,48,10,50,48, 10,65,48,10,54,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,56,10,69,78,67,79,68,73, 78,71,32,53,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,66,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 66,48,10,67,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,57,10,69,78,67,79,68,73,78,71,32,53, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,65,56,10,55,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 65,10,69,78,67,79,68,73,78,71,32,53,56,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,52,48,10,50,48,10,49, 48,10,50,48,10,52,48,10,50,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,66,10,69,78, 67,79,68,73,78,71,32,53,56,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,56,10,57,56,10,65,56,10,67,56, 10,56,56,10,48,56,10,48,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,67,67,10,69,78,67,79,68,73, 78,71,32,53,56,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,67,68,10,69,78,67,79,68,73,78,71,32,53, 56,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,67, 69,10,69,78,67,79,68,73,78,71,32,53,56,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,65,56,10,55, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,67,70,10,69,78, 67,79,68,73,78,71,32,53,56,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,48,10,65,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,48,10,69,78,67,79,68,73, 78,71,32,53,56,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,54,48, 10,65,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,49,10,69,78,67,79,68,73,78,71,32,53, 56,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,65,48,10, 50,48,10,55,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 50,10,69,78,67,79,68,73,78,71,32,53,56,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,67,48,10,66,48,10,56,56,10,66,48,10,67, 48,10,66,48,10,56,56,10,66,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,51,10,69,78, 67,79,68,73,78,71,32,53,56,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,56,10,51,48,10,50,48,10,50,56, 10,51,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,52,10,69,78,67,79,68,73, 78,71,32,53,56,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,48,10,56,56, 10,65,56,10,56,56,10,70,48,10,56,56,10,65,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,53,10,69,78,67,79,68,73,78,71,32,53, 56,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,57,48,10,65,48,10, 67,48,10,56,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 54,10,69,78,67,79,68,73,78,71,32,53,56,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,56,10,65,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,55,10,69,78, 67,79,68,73,78,71,32,53,56,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,68,56,10,65,56,10,68,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,56,10,69,78,67,79,68,73, 78,71,32,53,56,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,57,10,69,78,67,79,68,73,78,71,32,53, 56,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,55,48,10,55,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 65,10,69,78,67,79,68,73,78,71,32,53,56,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,51,48,10,50,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,66,10,69,78, 67,79,68,73,78,71,32,53,56,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,51,48,10,50,56,10,50,48,10,55,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,68,67,10,69,78,67,79,68,73, 78,71,32,53,56,53,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,53,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,68,68,10,69,78,67,79,68,73,78,71,32,53, 56,53,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,53,48,10,50,48,10, 53,48,10,56,56,10,53,48,10,50,48,10,53,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,68, 69,10,69,78,67,79,68,73,78,71,32,53,56,53,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,68,56,10,68,56,10,65,56,10,65, 56,10,65,56,10,68,56,10,68,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,68,70,10,69,78, 67,79,68,73,78,71,32,53,56,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,48,10,69,78,67,79,68,73, 78,71,32,53,56,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,55,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,49,10,69,78,67,79,68,73,78,71,32,53, 56,53,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,65,56,10, 55,48,10,50,48,10,55,48,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 50,10,69,78,67,79,68,73,78,71,32,53,56,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,51,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,54,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,51,10,69,78, 67,79,68,73,78,71,32,53,56,53,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,52,10,69,78,67,79,68,73, 78,71,32,53,56,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,56,10,65,56, 10,55,48,10,65,56,10,65,56,10,65,56,10,55,48,10, 65,56,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,53,10,69,78,67,79,68,73,78,71,32,53, 56,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,68,56,10,65,56,10, 68,56,10,56,56,10,68,56,10,65,56,10,68,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 54,10,69,78,67,79,68,73,78,71,32,53,56,54,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,55,10,69,78, 67,79,68,73,78,71,32,53,56,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,56,10,69,78,67,79,68,73, 78,71,32,53,56,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,50,48,10,50,48,10,50,48,10,65,56,10, 55,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,57,10,69,78,67,79,68,73,78,71,32,53, 56,54,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,56,10,54,56,10,56,56,10, 54,56,10,49,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 65,10,69,78,67,79,68,73,78,71,32,53,56,54,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,69,48,10,52,48,10,53,48,10,55, 48,10,53,48,10,49,48,10,51,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,66,10,69,78, 67,79,68,73,78,71,32,53,56,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,69,67,10,69,78,67,79,68,73, 78,71,32,53,56,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,54,69,68,10,69,78,67,79,68,73,78,71,32,53, 56,54,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,54,69, 69,10,69,78,67,79,68,73,78,71,32,53,56,55,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,51,48,10,50,56,10,50,48,10,54, 48,10,65,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,54,69,70,10,69,78, 67,79,68,73,78,71,32,53,56,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,65, 56,10,65,56,10,55,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,65,56,10,65,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,54,70,48,10,69,78,67,79,68,73, 78,71,32,53,56,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,55,48,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,48,10,69,78,67,79,68,73,78,71,32,55, 54,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,50, 48,10,53,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 49,10,69,78,67,79,68,73,78,71,32,55,54,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,48,56,10,55, 56,10,56,56,10,57,56,10,54,56,10,50,48,10,53,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,50,10,69,78, 67,79,68,73,78,71,32,55,54,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,55,48, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,51,10,69,78,67,79,68,73, 78,71,32,55,54,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,65,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,52,10,69,78,67,79,68,73,78,71,32,55, 54,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,55,48,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 53,10,69,78,67,79,68,73,78,71,32,55,54,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,54,10,69,78, 67,79,68,73,78,71,32,55,54,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,55,48,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,55,10,69,78,67,79,68,73, 78,71,32,55,54,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,56,10,69,78,67,79,68,73,78,71,32,55, 54,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,56,48,10,56,48,10,56,56,10,55, 48,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 57,10,69,78,67,79,68,73,78,71,32,55,54,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,56,48,10,56,48,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,65,10,69,78, 67,79,68,73,78,71,32,55,54,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,66,10,69,78,67,79,68,73, 78,71,32,55,54,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,48,67,10,69,78,67,79,68,73,78,71,32,55, 54,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,48, 68,10,69,78,67,79,68,73,78,71,32,55,54,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,55,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,48,69,10,69,78, 67,79,68,73,78,71,32,55,54,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,48,70,10,69,78,67,79,68,73, 78,71,32,55,54,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,56,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,48,10,69,78,67,79,68,73,78,71,32,55, 54,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,70, 48,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 49,10,69,78,67,79,68,73,78,71,32,55,54,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,55,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,56,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,50,10,69,78, 67,79,68,73,78,71,32,55,54,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,70,48,10,48,48,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,51,10,69,78,67,79,68,73, 78,71,32,55,54,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,55,56,10,56,56,10,56,56,10,56,56,10, 55,56,10,48,48,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,52,10,69,78,67,79,68,73,78,71,32,55, 55,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,70,56,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 53,10,69,78,67,79,68,73,78,71,32,55,55,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,50,48,10,70,56,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,54,10,69,78, 67,79,68,73,78,71,32,55,55,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,70, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,55,10,69,78,67,79,68,73, 78,71,32,55,55,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,70,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,56,10,69,78,67,79,68,73,78,71,32,55, 55,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 70,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 57,10,69,78,67,79,68,73,78,71,32,55,55,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,70, 56,10,56,48,10,56,56,10,55,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,65,10,69,78, 67,79,68,73,78,71,32,55,55,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,50,56,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,66,10,69,78,67,79,68,73, 78,71,32,55,55,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,56,48,10,56,56,10, 55,48,10,48,48,10,50,56,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,49,67,10,69,78,67,79,68,73,78,71,32,55, 55,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,55,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,50,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,49, 68,10,69,78,67,79,68,73,78,71,32,55,55,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,55,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,50,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,49,69,10,69,78, 67,79,68,73,78,71,32,55,55,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,49,70,10,69,78,67,79,68,73, 78,71,32,55,55,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,51,48,10,52,56,10,52,48,10,70,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,48,10,69,78,67,79,68,73,78,71,32,55, 55,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,55,48,10,56,56,10, 56,48,10,56,48,10,57,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 49,10,69,78,67,79,68,73,78,71,32,55,55,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,50,10,69,78, 67,79,68,73,78,71,32,55,55,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,70,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,51,10,69,78,67,79,68,73, 78,71,32,55,55,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,65,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,52,10,69,78,67,79,68,73,78,71,32,55, 55,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 53,10,69,78,67,79,68,73,78,71,32,55,55,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,54,10,69,78, 67,79,68,73,78,71,32,55,55,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,53, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,70,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,55,10,69,78,67,79,68,73, 78,71,32,55,55,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,56,48,10,56,48,10,66,48,10,67,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,56,10,69,78,67,79,68,73,78,71,32,55, 55,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 57,10,69,78,67,79,68,73,78,71,32,55,55,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,49,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,65,10,69,78, 67,79,68,73,78,71,32,55,55,50,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,48,48,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,66,10,69,78,67,79,68,73, 78,71,32,55,55,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,50,67,10,69,78,67,79,68,73,78,71,32,55, 55,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,55,48,10,48, 48,10,50,56,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,50, 68,10,69,78,67,79,68,73,78,71,32,55,55,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,50,56, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,50,69,10,69,78, 67,79,68,73,78,71,32,55,55,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,48, 48,10,53,48,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,50,70,10,69,78,67,79,68,73, 78,71,32,55,55,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,48,10,48,48,10,53,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,48,10,69,78,67,79,68,73,78,71,32,55, 55,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,56,56,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 49,10,69,78,67,79,68,73,78,71,32,55,55,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,65,48,10,56,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,50,10,69,78, 67,79,68,73,78,71,32,55,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,57,48,10,65,48,10,67,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,51,10,69,78,67,79,68,73, 78,71,32,55,55,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,57,48,10,65,48,10,67,48,10,65,48,10, 57,48,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,52,10,69,78,67,79,68,73,78,71,32,55, 55,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,57,48,10, 65,48,10,67,48,10,65,48,10,57,48,10,56,56,10,56, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 53,10,69,78,67,79,68,73,78,71,32,55,55,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,57,48,10,65, 48,10,67,48,10,65,48,10,57,48,10,56,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,54,10,69,78, 67,79,68,73,78,71,32,55,55,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,55,10,69,78,67,79,68,73, 78,71,32,55,55,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,56,10,69,78,67,79,68,73,78,71,32,55, 55,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 57,10,69,78,67,79,68,73,78,71,32,55,55,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,65,10,69,78, 67,79,68,73,78,71,32,55,55,51,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,66,10,69,78,67,79,68,73, 78,71,32,55,55,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,55,48,10,48,48,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,51,67,10,69,78,67,79,68,73,78,71,32,55, 55,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,51, 68,10,69,78,67,79,68,73,78,71,32,55,55,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,54,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,51,69,10,69,78, 67,79,68,73,78,71,32,55,55,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,48,10,50, 48,10,56,56,10,56,56,10,68,56,10,65,56,10,65,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,51,70,10,69,78,67,79,68,73, 78,71,32,55,55,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,48,48,10,68,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,48,10,69,78,67,79,68,73,78,71,32,55, 55,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,56,56,10,56,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 49,10,69,78,67,79,68,73,78,71,32,55,55,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,68,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,50,10,69,78, 67,79,68,73,78,71,32,55,55,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,68,56,10,65,56,10,65,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,51,10,69,78,67,79,68,73, 78,71,32,55,55,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,68,48,10,65,56,10,65,56,10,65,56,10, 65,56,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,52,10,69,78,67,79,68,73,78,71,32,55, 55,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,56,56,10,67,56,10, 67,56,10,65,56,10,65,56,10,57,56,10,57,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 53,10,69,78,67,79,68,73,78,71,32,55,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,54,10,69,78, 67,79,68,73,78,71,32,55,55,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,55,10,69,78,67,79,68,73, 78,71,32,55,55,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,56,10,69,78,67,79,68,73,78,71,32,55, 55,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,67,56,10,67,56,10, 65,56,10,65,56,10,57,56,10,57,56,10,56,56,10,56, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 57,10,69,78,67,79,68,73,78,71,32,55,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,65,10,69,78, 67,79,68,73,78,71,32,55,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,67,56,10,67,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,56,56,10,56,56,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,66,10,69,78,67,79,68,73, 78,71,32,55,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,52,67,10,69,78,67,79,68,73,78,71,32,55, 55,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,56,10,53,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,52, 68,10,69,78,67,79,68,73,78,71,32,55,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,48,48,10,50,56,10,53,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,52,69,10,69,78, 67,79,68,73,78,71,32,55,55,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,48, 48,10,50,56,10,53,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,52,70,10,69,78,67,79,68,73, 78,71,32,55,55,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,50,56,10,53,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,48,10,69,78,67,79,68,73,78,71,32,55, 55,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,48,48,10,70,56,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 49,10,69,78,67,79,68,73,78,71,32,55,55,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,50,48,10,48,48,10,70,56,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,50,10,69,78, 67,79,68,73,78,71,32,55,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,48, 48,10,70,56,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,51,10,69,78,67,79,68,73, 78,71,32,55,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,48,10,50,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,52,10,69,78,67,79,68,73,78,71,32,55, 55,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,50,48,10,48,48,10,70,48,10, 56,56,10,56,56,10,70,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 53,10,69,78,67,79,68,73,78,71,32,55,55,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,48,10,50,48,10,48,48,10,70,48,10,56, 56,10,56,56,10,56,56,10,70,48,10,56,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,54,10,69,78, 67,79,68,73,78,71,32,55,55,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,70,48, 10,56,48,10,56,48,10,56,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,55,10,69,78,67,79,68,73, 78,71,32,55,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,56,48,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,56,10,69,78,67,79,68,73,78,71,32,55, 55,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,70,48,10, 56,56,10,56,56,10,70,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 57,10,69,78,67,79,68,73,78,71,32,55,55,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,66,48,10,67, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,65,10,69,78, 67,79,68,73,78,71,32,55,55,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,66,10,69,78,67,79,68,73, 78,71,32,55,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,53,67,10,69,78,67,79,68,73,78,71,32,55, 55,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,70,56,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,70,48,10,65,48,10,57,48,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,53, 68,10,69,78,67,79,68,73,78,71,32,55,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,66,48,10,67, 56,10,56,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,53,69,10,69,78, 67,79,68,73,78,71,32,55,55,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,56,56,10,56,56,10,56,56,10,70,48,10,65,48, 10,57,48,10,56,56,10,56,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,53,70,10,69,78,67,79,68,73, 78,71,32,55,55,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,66,48,10,67,56,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,48,10,69,78,67,79,68,73,78,71,32,55, 55,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 49,10,69,78,67,79,68,73,78,71,32,55,55,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,50,10,69,78, 67,79,68,73,78,71,32,55,55,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,48,10,56,48,10,55,48,10,48,56, 10,48,56,10,56,56,10,55,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,51,10,69,78,67,79,68,73, 78,71,32,55,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,54,48,10,49,48,10, 56,56,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,52,10,69,78,67,79,68,73,78,71,32,55, 55,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,49,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 53,10,69,78,67,79,68,73,78,71,32,55,55,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,54,10,69,78, 67,79,68,73,78,71,32,55,55,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,48,48,10,53, 48,10,50,48,10,55,48,10,56,56,10,56,48,10,55,48, 10,48,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,55,10,69,78,67,79,68,73, 78,71,32,55,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,48,48,10,53,48,10,50,48, 10,48,48,10,55,48,10,56,56,10,54,48,10,49,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,56,10,69,78,67,79,68,73,78,71,32,55, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,48,48,10,55,48,10, 56,56,10,56,48,10,55,48,10,48,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 57,10,69,78,67,79,68,73,78,71,32,55,55,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,55,48,10,56, 56,10,54,48,10,49,48,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,65,10,69,78, 67,79,68,73,78,71,32,55,55,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,70,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,66,10,69,78,67,79,68,73, 78,71,32,55,55,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,52,48,10,52,48,10,70,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,54,67,10,69,78,67,79,68,73,78,71,32,55, 55,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,54, 68,10,69,78,67,79,68,73,78,71,32,55,55,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,54,69,10,69,78, 67,79,68,73,78,71,32,55,55,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,54,70,10,69,78,67,79,68,73, 78,71,32,55,55,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,52,48,10,70,48,10,52,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,70,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,48,10,69,78,67,79,68,73,78,71,32,55, 55,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,50,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 49,10,69,78,67,79,68,73,78,71,32,55,55,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,52,56,10,51,48,10,48,48,10,50,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,50,10,69,78, 67,79,68,73,78,71,32,55,55,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,51,10,69,78,67,79,68,73, 78,71,32,55,55,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,52,10,69,78,67,79,68,73,78,71,32,55, 55,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,55,48,10,48, 48,10,50,56,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 53,10,69,78,67,79,68,73,78,71,32,55,55,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,48,10,50,56, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,54,10,69,78, 67,79,68,73,78,71,32,55,55,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,50,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,55,10,69,78,67,79,68,73, 78,71,32,55,55,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,48,10,50,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,56,10,69,78,67,79,68,73,78,71,32,55, 56,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,50,48,10,48,48,10,50,56,10,53,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 57,10,69,78,67,79,68,73,78,71,32,55,56,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,49,48,10, 50,48,10,48,48,10,50,56,10,53,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,65,10,69,78, 67,79,68,73,78,71,32,55,56,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,48, 48,10,70,56,10,48,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,66,10,69,78,67,79,68,73, 78,71,32,55,56,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,53,48,10,48,48,10,70,56, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,55,67,10,69,78,67,79,68,73,78,71,32,55, 56,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,55, 68,10,69,78,67,79,68,73,78,71,32,55,56,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,53,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,55,69,10,69,78, 67,79,68,73,78,71,32,55,56,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,53,48,10,50,48,10,50,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,55,70,10,69,78,67,79,68,73, 78,71,32,55,56,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,53,48,10, 53,48,10,50,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,87,103, 114,97,118,101,10,69,78,67,79,68,73,78,71,32,55,56, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,52,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,119,103,114,97,118,101,10, 69,78,67,79,68,73,78,71,32,55,56,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,87,97,99,117,116,101,10,69,78,67,79,68, 73,78,71,32,55,56,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,65,56,10,65,56,10,65,56, 10,68,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,119, 97,99,117,116,101,10,69,78,67,79,68,73,78,71,32,55, 56,49,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,87,100,105,101,114,101, 115,105,115,10,69,78,67,79,68,73,78,71,32,55,56,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,53,48,10,53,48,10,48,48,10,56,56,10,56,56, 10,65,56,10,65,56,10,65,56,10,68,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,119,100,105,101,114,101,115,105, 115,10,69,78,67,79,68,73,78,71,32,55,56,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,54,10,69,78, 67,79,68,73,78,71,32,55,56,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,65,56,10,65,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,55,10,69,78,67,79,68,73, 78,71,32,55,56,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,65,56,10,65,56,10, 65,56,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,56,10,69,78,67,79,68,73,78,71,32,55, 56,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,65,56,10,65,56,10,65,56,10,68,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,56, 57,10,69,78,67,79,68,73,78,71,32,55,56,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,53,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,65,10,69,78, 67,79,68,73,78,71,32,55,56,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,50,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,66,10,69,78,67,79,68,73, 78,71,32,55,56,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,53,48,10,50,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,56,67,10,69,78,67,79,68,73,78,71,32,55, 56,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,48,10,53,48,10,48,48,10,56,56,10, 56,56,10,53,48,10,50,48,10,53,48,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,56, 68,10,69,78,67,79,68,73,78,71,32,55,56,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,53,48,10,48,48,10,56,56,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,56,69,10,69,78, 67,79,68,73,78,71,32,55,56,50,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,50, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,56,70,10,69,78,67,79,68,73, 78,71,32,55,56,50,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,48,10,69,78,67,79,68,73,78,71,32,55, 56,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,70,56,10, 48,56,10,49,48,10,50,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 49,10,69,78,67,79,68,73,78,71,32,55,56,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,70,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,50,10,69,78, 67,79,68,73,78,71,32,55,56,50,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,49,48,10,50,48,10,52,48, 10,52,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,51,10,69,78,67,79,68,73, 78,71,32,55,56,50,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,52,10,69,78,67,79,68,73,78,71,32,55, 56,50,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,52,48,10,56,48,10,70, 56,10,48,48,10,70,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 53,10,69,78,67,79,68,73,78,71,32,55,56,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,49, 48,10,50,48,10,52,48,10,56,48,10,70,56,10,48,48, 10,70,56,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,54,10,69,78, 67,79,68,73,78,71,32,55,56,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,66,48,10,67,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,48,48,10,70,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,55,10,69,78,67,79,68,73, 78,71,32,55,56,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,53,48,10,53,48,10,48,48, 10,52,48,10,52,48,10,70,48,10,52,48,10,52,48,10, 52,56,10,51,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,57,56,10,69,78,67,79,68,73,78,71,32,55, 56,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,53,48,10,50,48,10,48,48,10, 56,56,10,56,56,10,65,56,10,65,56,10,65,56,10,53, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,57, 57,10,69,78,67,79,68,73,78,71,32,55,56,51,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,57,56,10,54,56,10,48,56,10,56,56, 10,55,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,57,65,10,69,78, 67,79,68,73,78,71,32,55,56,51,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,48,52,10,48, 52,10,48,56,10,48,48,10,55,48,10,48,56,10,55,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,57,66,10,69,78,67,79,68,73, 78,71,32,55,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,48,48, 10,51,48,10,52,56,10,52,48,10,67,48,10,52,48,10, 52,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,48,10,69,78,67,79,68,73,78,71,32,55, 56,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,70,56,10,56,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 49,10,69,78,67,79,68,73,78,71,32,55,56,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,50,10,69,78, 67,79,68,73,78,71,32,55,56,52,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,51,10,69,78,67,79,68,73, 78,71,32,55,56,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,52,10,69,78,67,79,68,73,78,71,32,55, 56,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,52,10,65,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 53,10,69,78,67,79,68,73,78,71,32,55,56,52,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,52,10,65,56,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,54,10,69,78, 67,79,68,73,78,71,32,55,56,52,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,53, 52,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,55,10,69,78,67,79,68,73, 78,71,32,55,56,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,53,52, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,56,10,69,78,67,79,68,73,78,71,32,55, 56,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,53,52,10,65,52,10,48,56,10,50,56,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 57,10,69,78,67,79,68,73,78,71,32,55,56,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,53,52,10,65,52,10,48,56,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,65,10,69,78, 67,79,68,73,78,71,32,55,56,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,56,10,53,48,10,48, 48,10,51,48,10,52,56,10,50,48,10,53,48,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,66,10,69,78,67,79,68,73, 78,71,32,55,56,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,56,10,53,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,65,67,10,69,78,67,79,68,73,78,71,32,55, 56,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,65, 68,10,69,78,67,79,68,73,78,71,32,55,56,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,65,69,10,69,78, 67,79,68,73,78,71,32,55,56,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,48,10,56, 56,10,55,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,65,70,10,69,78,67,79,68,73, 78,71,32,55,56,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,48,10,69,78,67,79,68,73,78,71,32,55, 56,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,56,56,10,55,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 49,10,69,78,67,79,68,73,78,71,32,55,56,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 50,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,50,10,69,78, 67,79,68,73,78,71,32,55,56,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,65,56,10,55,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,51,10,69,78,67,79,68,73, 78,71,32,55,56,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,65,56, 10,55,48,10,48,48,10,55,48,10,48,56,10,55,56,10, 56,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,52,10,69,78,67,79,68,73,78,71,32,55, 56,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,53,48,10,65,48,10,56,56,10,55,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,70,56,10,56,56,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 53,10,69,78,67,79,68,73,78,71,32,55,56,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,48,10, 65,48,10,56,56,10,55,48,10,48,48,10,55,48,10,48, 56,10,55,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,54,10,69,78, 67,79,68,73,78,71,32,55,56,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,55, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,56,56, 10,70,56,10,56,56,10,56,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,55,10,69,78,67,79,68,73, 78,71,32,55,56,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,55,48, 10,48,48,10,55,48,10,48,56,10,55,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,56,10,69,78,67,79,68,73,78,71,32,55, 56,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,56,10,56,48,10,56,48,10, 56,48,10,70,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 57,10,69,78,67,79,68,73,78,71,32,55,56,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,65,10,69,78, 67,79,68,73,78,71,32,55,56,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,66,10,69,78,67,79,68,73, 78,71,32,55,56,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,66,67,10,69,78,67,79,68,73,78,71,32,55, 56,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,56,10,53,48,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,66, 68,10,69,78,67,79,68,73,78,71,32,55,56,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,53,48,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,66,69,10,69,78, 67,79,68,73,78,71,32,55,56,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,52,10,65, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,66,70,10,69,78,67,79,68,73, 78,71,32,55,56,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,52,10,65,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,48,10,69,78,67,79,68,73,78,71,32,55, 56,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,56,56,10,53,52,10,48,48,10,70,56,10, 56,48,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 49,10,69,78,67,79,68,73,78,71,32,55,56,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,53,52,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,50,10,69,78, 67,79,68,73,78,71,32,55,56,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,53,52,10,65, 56,10,48,56,10,48,48,10,70,56,10,56,48,10,69,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,51,10,69,78,67,79,68,73, 78,71,32,55,56,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,53,52,10,65,56, 10,48,56,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,52,10,69,78,67,79,68,73,78,71,32,55, 56,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,56,10,53,48,10,51,48,10,52,56,10,48,48,10, 70,56,10,56,48,10,70,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 53,10,69,78,67,79,68,73,78,71,32,55,56,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,56,10, 53,48,10,51,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,70,56,10,56,48,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,54,10,69,78, 67,79,68,73,78,71,32,55,56,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,51,48,10,52, 56,10,48,48,10,70,56,10,56,48,10,56,48,10,70,48, 10,56,48,10,56,48,10,70,56,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,55,10,69,78,67,79,68,73, 78,71,32,55,56,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,70,56,10,56,48,10, 56,56,10,55,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,56,10,69,78,67,79,68,73,78,71,32,55, 56,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,53,48,10,49,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 57,10,69,78,67,79,68,73,78,71,32,55,56,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,50,48,10,50,48,10,48,48,10,54,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,65,10,69,78, 67,79,68,73,78,71,32,55,56,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,66,10,69,78,67,79,68,73, 78,71,32,55,56,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,54,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,56,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,67,67,10,69,78,67,79,68,73,78,71,32,55, 56,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,67, 68,10,69,78,67,79,68,73,78,71,32,55,56,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,67,69,10,69,78, 67,79,68,73,78,71,32,55,56,56,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,67,70,10,69,78,67,79,68,73, 78,71,32,55,56,56,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,48,10,69,78,67,79,68,73,78,71,32,55, 56,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,52,10,65,56,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 49,10,69,78,67,79,68,73,78,71,32,55,56,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,52,10,65,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,50,10,69,78, 67,79,68,73,78,71,32,55,56,57,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,56,56,10,53, 52,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,51,10,69,78,67,79,68,73, 78,71,32,55,56,57,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,56,56,10,53,52, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,52,10,69,78,67,79,68,73,78,71,32,55, 56,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,53,52,10,65,52,10,48,56,10,55,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 53,10,69,78,67,79,68,73,78,71,32,55,56,57,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,53,52,10,65,52,10,48,56,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,54,10,69,78, 67,79,68,73,78,71,32,55,56,57,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,56,10,53,48,10,51, 56,10,52,56,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,55,10,69,78,67,79,68,73, 78,71,32,55,56,57,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,56,10,53,48,10,51,48,10,52,56, 10,48,48,10,55,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,56,10,69,78,67,79,68,73,78,71,32,55, 56,57,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,51,48,10,52,56,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 57,10,69,78,67,79,68,73,78,71,32,55,56,57,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,51,48,10,52,56,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,65,10,69,78, 67,79,68,73,78,71,32,55,56,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,52, 48,10,48,48,10,54,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,66,10,69,78,67,79,68,73, 78,71,32,55,56,57,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,52,48, 10,48,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,68,67,10,69,78,67,79,68,73,78,71,32,55, 57,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,52,48,10,50,48,10,48,48,10,54,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,68, 68,10,69,78,67,79,68,73,78,71,32,55,57,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,48,10,50,48,10,48,48,10,54,52,10,57, 52,10,57,56,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,68,69,10,69,78, 67,79,68,73,78,71,32,55,57,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,54,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,68,70,10,69,78,67,79,68,73, 78,71,32,55,57,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,53,48,10,49,48, 10,50,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,48,10,69,78,67,79,68,73,78,71,32,55, 57,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,48,10,65,48,10,48,48,10,54,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 49,10,69,78,67,79,68,73,78,71,32,55,57,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,65,48,10,48,48,10,54,52,10,57, 52,10,57,56,10,57,48,10,57,48,10,54,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,50,10,69,78, 67,79,68,73,78,71,32,55,57,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,54, 52,10,57,52,10,57,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,51,10,69,78,67,79,68,73, 78,71,32,55,57,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,54,52,10,57,52,10,57,56,10,57,48,10, 57,48,10,54,48,10,48,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,52,10,69,78,67,79,68,73,78,71,32,55, 57,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 53,10,69,78,67,79,68,73,78,71,32,55,57,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,57,56,10,54,56,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,54,10,69,78, 67,79,68,73,78,71,32,55,57,49,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,53,48,10,49, 48,10,50,48,10,65,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,55,10,69,78,67,79,68,73, 78,71,32,55,57,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,56,10,69,78,67,79,68,73,78,71,32,55, 57,49,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,52,48,10,48,48,10,57,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 57,10,69,78,67,79,68,73,78,71,32,55,57,49,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,52,48,10,48,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,65,10,69,78, 67,79,68,73,78,71,32,55,57,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,52,48,10,50, 48,10,48,48,10,57,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,66,10,69,78,67,79,68,73, 78,71,32,55,57,49,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,50,48, 10,48,48,10,57,52,10,57,52,10,57,56,10,57,48,10, 66,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,69,67,10,69,78,67,79,68,73,78,71,32,55, 57,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,53,48,10,49,48,10,50,48,10,66,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,69, 68,10,69,78,67,79,68,73,78,71,32,55,57,49,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,49,48,10,50,48,10,50,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,49,69,69,69,10,69,78, 67,79,68,73,78,71,32,55,57,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,53,48,10,65, 48,10,48,48,10,57,52,10,57,52,10,57,56,10,57,48, 10,57,48,10,57,48,10,54,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,49,69,69,70,10,69,78,67,79,68,73, 78,71,32,55,57,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,65,48, 10,48,48,10,57,52,10,57,52,10,57,56,10,57,48,10, 66,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,49,69,70,48,10,69,78,67,79,68,73,78,71,32,55, 57,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,57,52,10, 57,52,10,57,56,10,57,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,49,69,70, 49,10,69,78,67,79,68,73,78,71,32,55,57,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,57,52,10,57, 52,10,57,56,10,57,48,10,66,48,10,53,48,10,48,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,89,103,114,97,118,101,10,69,78,67, 79,68,73,78,71,32,55,57,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,48,48,10,56,56,10,56,56,10,53,48,10,53,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,121,103,114,97,118,101,10,69,78,67,79,68,73,78,71, 32,55,57,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,56,10,56,56,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,70,52,10,69,78,67,79,68,73,78,71,32,55,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,53,10, 69,78,67,79,68,73,78,71,32,55,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,57,56,10, 54,56,10,48,56,10,56,56,10,55,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,69,70,54,10,69,78,67,79, 68,73,78,71,32,55,57,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,53,48,10,49,48,10, 50,48,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,69,70,55,10,69,78,67,79,68,73,78,71, 32,55,57,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,50,48,10,53,48,10,49,48,10,50,48,10,50, 48,10,56,56,10,56,56,10,56,56,10,57,56,10,54,56, 10,48,56,10,56,56,10,55,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 69,70,56,10,69,78,67,79,68,73,78,71,32,55,57,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,56,10,53,48,10,48,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,69,70,57,10, 69,78,67,79,68,73,78,71,32,55,57,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,56,10,53,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,56,10,56,56,10,55, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,48,10,69,78,67,79, 68,73,78,71,32,55,57,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,49,10,69,78,67,79,68,73,78,71, 32,55,57,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,50,10,69,78,67,79,68,73,78,71,32,55,57,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,51,10, 69,78,67,79,68,73,78,71,32,55,57,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,52,10,69,78,67,79, 68,73,78,71,32,55,57,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,53,10,69,78,67,79,68,73,78,71, 32,55,57,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,54,10,69,78,67,79,68,73,78,71,32,55,57,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,55,10, 69,78,67,79,68,73,78,71,32,55,57,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,56,10,69,78,67,79, 68,73,78,71,32,55,57,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,50,56,10,50,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,57,10,69,78,67,79,68,73,78,71, 32,55,57,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,50,56,10,50,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,65,10,69,78,67,79,68,73,78,71,32,55,57,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,65,56, 10,54,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,66,10, 69,78,67,79,68,73,78,71,32,55,57,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,65,56,10,54,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,48,67,10,69,78,67,79, 68,73,78,71,32,55,57,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,54,56,10,65,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,48,68,10,69,78,67,79,68,73,78,71, 32,55,57,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,54,56,10,65,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,48,69,10,69,78,67,79,68,73,78,71,32,55,57,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,50,56,10,69,56,10,54,56, 10,65,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,48,70,10, 69,78,67,79,68,73,78,71,32,55,57,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,50,56,10,69,56,10,65,56,10,54,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,48,10,69,78,67,79, 68,73,78,71,32,55,57,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,54,48,10,56, 48,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,49,10,69,78,67,79,68,73,78,71, 32,55,57,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,50,10,69,78,67,79,68,73,78,71,32,55,57,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,51,10, 69,78,67,79,68,73,78,71,32,55,57,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,52,10,69,78,67,79, 68,73,78,71,32,55,57,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,54,48,10,56, 48,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,53,10,69,78,67,79,68,73,78,71, 32,55,57,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,54,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,56,10,69,78,67,79,68,73,78,71,32,55,57,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,54,48,10,65,48,10,50,48, 10,51,48,10,50,48,10,50,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,57,10, 69,78,67,79,68,73,78,71,32,55,57,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,65,48,10,54,48,10,50,48,10,51,48,10, 50,48,10,50,48,10,50,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,49,65,10,69,78,67,79, 68,73,78,71,32,55,57,54,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 54,48,10,65,48,10,65,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,49,66,10,69,78,67,79,68,73,78,71, 32,55,57,54,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,65,48,10,54, 48,10,65,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,49,67,10,69,78,67,79,68,73,78,71,32,55,57,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,54,48,10,65,48,10,54,48, 10,66,48,10,50,48,10,50,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,49,68,10, 69,78,67,79,68,73,78,71,32,55,57,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,65,48,10,54,48,10,54,48,10,66,48,10, 50,48,10,50,48,10,50,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,48,10,69,78,67,79, 68,73,78,71,32,55,57,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,49,10,69,78,67,79,68,73,78,71, 32,55,57,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,50,10,69,78,67,79,68,73,78,71,32,55,57,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,51,10, 69,78,67,79,68,73,78,71,32,55,57,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,52,10,69,78,67,79, 68,73,78,71,32,55,57,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,53,10,69,78,67,79,68,73,78,71, 32,55,57,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,54,10,69,78,67,79,68,73,78,71,32,55,57,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,55,10, 69,78,67,79,68,73,78,71,32,55,57,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,56,10,69,78,67,79, 68,73,78,71,32,55,57,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,50,56,10,51,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,57,10,69,78,67,79,68,73,78,71, 32,55,57,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,50,56,10,51,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,65,10,69,78,67,79,68,73,78,71,32,55,57,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,65,56, 10,55,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,66,10, 69,78,67,79,68,73,78,71,32,55,57,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,65,56,10,55,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,50,67,10,69,78,67,79, 68,73,78,71,32,55,57,56,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,54,56,10,66,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,50,68,10,69,78,67,79,68,73,78,71, 32,55,57,56,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,54,56,10,66,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,50,69,10,69,78,67,79,68,73,78,71,32,55,57,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,50,56,10,69,56,10,54,56, 10,66,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,50,70,10, 69,78,67,79,68,73,78,71,32,55,57,56,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,50,56,10,69,56,10,65,56,10,55,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,48,10,69,78,67,79, 68,73,78,71,32,55,57,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,54,48,10,50,48,10, 52,48,10,48,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,49,10,69,78,67,79,68,73,78,71, 32,55,57,56,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,54,48,10,52,48,10,50,48,10,48, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,50,10,69,78,67,79,68,73,78,71,32,55,57,56, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,51,10, 69,78,67,79,68,73,78,71,32,55,57,56,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,52,10,69,78,67,79, 68,73,78,71,32,55,57,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,53,10,69,78,67,79,68,73,78,71, 32,55,57,56,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,54,10,69,78,67,79,68,73,78,71,32,55,57,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,55,10, 69,78,67,79,68,73,78,71,32,55,57,57,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,56,10,69,78,67,79, 68,73,78,71,32,55,57,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 53,48,10,57,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,57,10,69,78,67,79,68,73,78,71, 32,55,57,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,57,48,10,53, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,65,10,69,78,67,79,68,73,78,71,32,55,57,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,53,48,10,57,48,10,57,48, 10,53,48,10,49,48,10,49,48,10,49,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,66,10, 69,78,67,79,68,73,78,71,32,55,57,57,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,57,48,10,53,48,10,57,48,10,53,48,10, 49,48,10,49,48,10,49,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,51,67,10,69,78,67,79, 68,73,78,71,32,55,57,57,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 53,48,10,57,48,10,53,48,10,57,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,51,68,10,69,78,67,79,68,73,78,71, 32,55,57,57,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,57,48,10,53, 48,10,51,48,10,53,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,51,69,10,69,78,67,79,68,73,78,71,32,55,57,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,49,48,10,68,48,10,53,48, 10,57,48,10,49,48,10,49,48,10,49,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,51,70,10, 69,78,67,79,68,73,78,71,32,55,57,57,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,49,48,10,68,48,10,57,48,10,53,48,10, 49,48,10,49,48,10,49,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,48,10,69,78,67,79, 68,73,78,71,32,56,48,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,49,10,69,78,67,79,68,73,78,71, 32,56,48,48,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,50,10,69,78,67,79,68,73,78,71,32,56,48,48, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,51,10, 69,78,67,79,68,73,78,71,32,56,48,48,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,52,10,69,78,67,79, 68,73,78,71,32,56,48,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,53,10,69,78,67,79,68,73,78,71, 32,56,48,48,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,56,10,69,78,67,79,68,73,78,71,32,56,48,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,57,10, 69,78,67,79,68,73,78,71,32,56,48,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,52,65,10,69,78,67,79, 68,73,78,71,32,56,48,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,50,56,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,52,66,10,69,78,67,79,68,73,78,71, 32,56,48,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,50,56,10,50,56,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,52,67,10,69,78,67,79,68,73,78,71,32,56,48,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,52,68,10, 69,78,67,79,68,73,78,71,32,56,48,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,48,10,69,78,67,79, 68,73,78,71,32,56,48,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,49,10,69,78,67,79,68,73,78,71, 32,56,48,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,50,10,69,78,67,79,68,73,78,71,32,56,48,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,51,10, 69,78,67,79,68,73,78,71,32,56,48,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,52,10,69,78,67,79, 68,73,78,71,32,56,48,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,53,10,69,78,67,79,68,73,78,71, 32,56,48,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,54,10,69,78,67,79,68,73,78,71,32,56,48,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,55,10, 69,78,67,79,68,73,78,71,32,56,48,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,53,57,10,69,78,67,79, 68,73,78,71,32,56,48,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 65,56,10,54,56,10,50,56,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,53,66,10,69,78,67,79,68,73,78,71, 32,56,48,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,65,56,10,53,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,53,68,10,69,78,67,79,68,73,78,71,32,56,48,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,65,56,10,54,56,10,54,56, 10,57,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,53,70,10, 69,78,67,79,68,73,78,71,32,56,48,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,50,56,10,69,56,10,65,56,10,53,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,48,10,69,78,67,79, 68,73,78,71,32,56,48,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,49,10,69,78,67,79,68,73,78,71, 32,56,48,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,50,10,69,78,67,79,68,73,78,71,32,56,48,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,68,48,10,52,56,10,56,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,51,10, 69,78,67,79,68,73,78,71,32,56,48,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,68,48, 10,56,56,10,52,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,52,10,69,78,67,79, 68,73,78,71,32,56,48,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,67,56,10,53,48,10, 56,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,53,10,69,78,67,79,68,73,78,71, 32,56,48,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,67,56,10,57,48,10,52,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,54,10,69,78,67,79,68,73,78,71,32,56,48,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,54, 56,10,66,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,55,10, 69,78,67,79,68,73,78,71,32,56,48,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,54,56,10,66,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,56,10,69,78,67,79, 68,73,78,71,32,56,48,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,50,56,10,50,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,57,10,69,78,67,79,68,73,78,71, 32,56,48,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,65,10,69,78,67,79,68,73,78,71,32,56,48,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,65,56, 10,54,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,66,10, 69,78,67,79,68,73,78,71,32,56,48,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,65,56,10,54,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,54,67,10,69,78,67,79, 68,73,78,71,32,56,48,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,54,56,10,65,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,54,68,10,69,78,67,79,68,73,78,71, 32,56,48,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,54,56,10,65,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,54,69,10,69,78,67,79,68,73,78,71,32,56,48,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,50,56,10,69,56,10,54,56, 10,65,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,54,70,10, 69,78,67,79,68,73,78,71,32,56,48,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,50,56,10,69,56,10,65,56,10,54,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,48,10,69,78,67,79, 68,73,78,71,32,56,48,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,49,10,69,78,67,79,68,73,78,71, 32,56,48,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,50,10,69,78,67,79,68,73,78,71,32,56,48,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,51,10, 69,78,67,79,68,73,78,71,32,56,48,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,55,48,10,56,56,10, 54,48,10,56,48,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,52,10,69,78,67,79, 68,73,78,71,32,56,48,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,53,10,69,78,67,79,68,73,78,71, 32,56,48,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,54,10,69,78,67,79,68,73,78,71,32,56,48,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,52,48,10,48,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,55,10, 69,78,67,79,68,73,78,71,32,56,48,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,52,48,10,48,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,56,10,69,78,67,79, 68,73,78,71,32,56,48,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,57,10,69,78,67,79,68,73,78,71, 32,56,48,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,55,65,10,69,78,67,79,68,73,78,71,32,56,48,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,50,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,55,66,10, 69,78,67,79,68,73,78,71,32,56,48,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,55,67,10,69,78,67,79, 68,73,78,71,32,56,48,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,55,68,10,69,78,67,79,68,73,78,71, 32,56,48,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,48,10,69,78,67,79,68,73,78,71,32,56,48,54, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,49,10, 69,78,67,79,68,73,78,71,32,56,48,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,50,10,69,78,67,79, 68,73,78,71,32,56,48,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,51,10,69,78,67,79,68,73,78,71, 32,56,48,54,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,52,10,69,78,67,79,68,73,78,71,32,56,48,54, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,53,10, 69,78,67,79,68,73,78,71,32,56,48,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,54,10,69,78,67,79, 68,73,78,71,32,56,48,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,55,10,69,78,67,79,68,73,78,71, 32,56,48,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,56,10,69,78,67,79,68,73,78,71,32,56,48,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,57,10, 69,78,67,79,68,73,78,71,32,56,48,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,65,10,69,78,67,79, 68,73,78,71,32,56,48,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,66,10,69,78,67,79,68,73,78,71, 32,56,48,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,56,67,10,69,78,67,79,68,73,78,71,32,56,48,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,51,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,56,68,10, 69,78,67,79,68,73,78,71,32,56,48,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,56,69,10,69,78,67,79, 68,73,78,71,32,56,48,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 50,56,10,69,56,10,54,56,10,65,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,56,70,10,69,78,67,79,68,73,78,71, 32,56,48,55,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,50,56,10,69, 56,10,65,56,10,54,56,10,51,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,48,10,69,78,67,79,68,73,78,71,32,56,48,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,56,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,49,10, 69,78,67,79,68,73,78,71,32,56,48,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,50,10,69,78,67,79, 68,73,78,71,32,56,48,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,51,10,69,78,67,79,68,73,78,71, 32,56,48,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,52,10,69,78,67,79,68,73,78,71,32,56,48,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,56,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,53,10, 69,78,67,79,68,73,78,71,32,56,48,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,54,10,69,78,67,79, 68,73,78,71,32,56,48,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,55,10,69,78,67,79,68,73,78,71, 32,56,48,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,56,10,69,78,67,79,68,73,78,71,32,56,48,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,50,56, 10,51,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,57,10, 69,78,67,79,68,73,78,71,32,56,48,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,50,56,10,51,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,65,10,69,78,67,79, 68,73,78,71,32,56,48,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 54,56,10,65,56,10,65,56,10,55,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,66,10,69,78,67,79,68,73,78,71, 32,56,48,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,65,56,10,54, 56,10,65,56,10,55,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,57,67,10,69,78,67,79,68,73,78,71,32,56,48,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,56,10,54,56,10,65,56,10,54,56, 10,66,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,57,68,10, 69,78,67,79,68,73,78,71,32,56,48,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,69,56,10,65,56,10,54,56,10,54,56,10,66,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,57,69,10,69,78,67,79, 68,73,78,71,32,56,48,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,69,56,10, 50,56,10,69,56,10,54,56,10,66,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,57,70,10,69,78,67,79,68,73,78,71, 32,56,48,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,69,56,10,50,56,10,69, 56,10,65,56,10,55,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,48,10,69,78,67,79,68,73,78,71,32,56,48,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,49,48,10,50,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,49,10, 69,78,67,79,68,73,78,71,32,56,48,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,50,48,10,49,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,50,10,69,78,67,79, 68,73,78,71,32,56,48,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,68,48,10,52,56,10, 56,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,51,10,69,78,67,79,68,73,78,71, 32,56,48,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,68,48,10,56,56,10,52,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,52,10,69,78,67,79,68,73,78,71,32,56,49,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,67,56,10,53,48,10,56,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,53,10, 69,78,67,79,68,73,78,71,32,56,49,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,67,56, 10,57,48,10,52,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,54,10,69,78,67,79, 68,73,78,71,32,56,49,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,49,48,10, 50,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,55,10,69,78,67,79,68,73,78,71, 32,56,49,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,50,48,10,49,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,56,10,69,78,67,79,68,73,78,71,32,56,49,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,50,56, 10,50,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,57,10, 69,78,67,79,68,73,78,71,32,56,49,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,50,56,10,50,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,65,10,69,78,67,79, 68,73,78,71,32,56,49,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 54,56,10,65,56,10,65,56,10,54,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,66,10,69,78,67,79,68,73,78,71, 32,56,49,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,65,56,10,54, 56,10,65,56,10,54,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,65,67,10,69,78,67,79,68,73,78,71,32,56,49,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,54,56,10,65,56,10,54,56, 10,65,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 48,48,10,49,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,65,68,10, 69,78,67,79,68,73,78,71,32,56,49,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,48,10,65,56,10,54,56,10,54,56,10,65,56,10, 50,56,10,49,48,10,49,48,10,50,56,10,48,48,10,49, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,65,69,10,69,78,67,79, 68,73,78,71,32,56,49,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,48,10, 50,56,10,69,56,10,54,56,10,65,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,65,70,10,69,78,67,79,68,73,78,71, 32,56,49,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,50,56,10,69, 56,10,65,56,10,54,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,48,10,69,78,67,79,68,73,78,71,32,56,49,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,49,10, 69,78,67,79,68,73,78,71,32,56,49,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,50,10,69,78,67,79, 68,73,78,71,32,56,49,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,51,10,69,78,67,79,68,73,78,71, 32,56,49,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,57,56, 10,54,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,52,10,69,78,67,79,68,73,78,71,32,56,49,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,49,48,10,50,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,57,56,10,54,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,54,10, 69,78,67,79,68,73,78,71,32,56,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,57,56,10,54,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,55,10,69,78,67,79, 68,73,78,71,32,56,49,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,56,10,69,78,67,79,68,73,78,71, 32,56,49,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,56,56,10,70,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,57,10,69,78,67,79,68,73,78,71,32,56,49,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,56,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,65,10, 69,78,67,79,68,73,78,71,32,56,49,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,57,48,10,54,56,10,50,56,10,50,56,10,50,56,10, 51,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,66,10,69,78,67,79, 68,73,78,71,32,56,49,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,53,48,10, 65,56,10,50,56,10,50,56,10,50,56,10,51,56,10,50, 56,10,50,56,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,66,67,10,69,78,67,79,68,73,78,71, 32,56,49,50,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,53,48,10,56, 56,10,56,56,10,56,56,10,70,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,66,68,10,69,78,67,79,68,73,78,71,32,56,49,50, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,66,69,10, 69,78,67,79,68,73,78,71,32,56,49,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,66,70,10,69,78,67,79, 68,73,78,71,32,56,49,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,48,10,69,78,67,79,68,73,78,71, 32,56,49,50,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,66,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,49,10,69,78,67,79,68,73,78,71,32,56,49,50, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,54,56,10,66,48,10,48,48,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,50,10, 69,78,67,79,68,73,78,71,32,56,49,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,50,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,51,10,69,78,67,79, 68,73,78,71,32,56,49,51,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,66,48,10,67,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,56,10,56,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,52,10,69,78,67,79,68,73,78,71, 32,56,49,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,48,10,48, 48,10,66,48,10,67,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,56,10,56,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,54,10,69,78,67,79,68,73,78,71,32,56,49,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,56,10,66,48,10,48,48,10,66,48, 10,67,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 48,56,10,48,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,55,10, 69,78,67,79,68,73,78,71,32,56,49,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,56, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,56,10,69,78,67,79, 68,73,78,71,32,56,49,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 54,48,10,50,48,10,50,48,10,51,48,10,50,48,10,50, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,57,10,69,78,67,79,68,73,78,71, 32,56,49,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,56,10,65,48,10,50, 48,10,50,48,10,51,48,10,50,48,10,50,48,10,50,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,65,10,69,78,67,79,68,73,78,71,32,56,49,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,54,56,10,50,56,10,50,56, 10,51,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,66,10, 69,78,67,79,68,73,78,71,32,56,49,51,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,65,56,10,50,56,10,50,56,10,51,56,10, 50,56,10,50,56,10,50,56,10,50,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,67,67,10,69,78,67,79, 68,73,78,71,32,56,49,52,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,70,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,48,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,67,68,10,69,78,67,79,68,73,78,71, 32,56,49,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,68,48,10,52,56,10,56, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,67,69,10,69,78,67,79,68,73,78,71,32,56,49,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,67,56,10,53,48,10,56,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,67,70,10, 69,78,67,79,68,73,78,71,32,56,49,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,49,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,48,10,69,78,67,79, 68,73,78,71,32,56,49,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 55,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,49,10,69,78,67,79,68,73,78,71, 32,56,49,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,50,10,69,78,67,79,68,73,78,71,32,56,49,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,50,48,10,68,56,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,51,10, 69,78,67,79,68,73,78,71,32,56,49,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,68,56,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,54,10,69,78,67,79, 68,73,78,71,32,56,49,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,55,10,69,78,67,79,68,73,78,71, 32,56,49,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,54,56,10,66,48,10,48,48,10,68,56,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,56,10,69,78,67,79,68,73,78,71,32,56,49,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,56,56,10,55,48,10,48,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,57,10, 69,78,67,79,68,73,78,71,32,56,49,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,65,10,69,78,67,79, 68,73,78,71,32,56,49,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,66,56,10, 53,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,68,66,10,69,78,67,79,68,73,78,71, 32,56,49,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,56,10,57,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,68,68,10,69,78,67,79,68,73,78,71,32,56,49,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,48,10,56,56,10,52,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,68,69,10, 69,78,67,79,68,73,78,71,32,56,49,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,56,10,57,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,68,70,10,69,78,67,79, 68,73,78,71,32,56,49,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,50,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,48,10,69,78,67,79,68,73,78,71, 32,56,49,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,55,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,49,10,69,78,67,79,68,73,78,71,32,56,49,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,50,10, 69,78,67,79,68,73,78,71,32,56,49,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,50,48,10,68,56,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,51,10,69,78,67,79, 68,73,78,71,32,56,49,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,49,48,10,50,48,10, 68,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,52,10,69,78,67,79,68,73,78,71, 32,56,49,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,51,48,10,49,48,10,50,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,70,48,10,56,48,10,56,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,53,10,69,78,67,79,68,73,78,71,32,56,49,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,50,48,10,49,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,48,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,54,10, 69,78,67,79,68,73,78,71,32,56,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,66,48,10,48,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,55,10,69,78,67,79, 68,73,78,71,32,56,49,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,54,56,10,66,48,10,48,48,10, 68,56,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,56,10,69,78,67,79,68,73,78,71, 32,56,49,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,55,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,57,10,69,78,67,79,68,73,78,71,32,56,49,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,56,10,48,48,10,56,56,10,56,56,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,65,10, 69,78,67,79,68,73,78,71,32,56,49,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,56,10,54,56,10,50,56,10,50,56,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,66,10,69,78,67,79, 68,73,78,71,32,56,49,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 65,56,10,50,56,10,50,56,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,69,67,10,69,78,67,79,68,73,78,71, 32,56,49,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,65,56,10,54, 56,10,50,56,10,51,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,69,68,10,69,78,67,79,68,73,78,71,32,56,49,55, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,50,48,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,69,69,10, 69,78,67,79,68,73,78,71,32,56,49,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,68,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,69,70,10,69,78,67,79, 68,73,78,71,32,56,49,55,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,50,10,69,78,67,79,68,73,78,71, 32,56,49,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,51,10,69,78,67,79,68,73,78,71,32,56,49,55, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,53,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,52,10, 69,78,67,79,68,73,78,71,32,56,49,56,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,56,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,53,48,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,54,10,69,78,67,79, 68,73,78,71,32,56,49,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,56,10, 66,48,10,48,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,55,10,69,78,67,79,68,73,78,71, 32,56,49,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,54,56,10,66,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,53,48,10,48,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,56,10,69,78,67,79,68,73,78,71,32,56,49,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,57,48,10,54,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,57,10, 69,78,67,79,68,73,78,71,32,56,49,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,65,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,50,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,65,10,69,78,67,79, 68,73,78,71,32,56,49,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,57,48,10, 54,56,10,50,56,10,50,56,10,50,56,10,50,56,10,49, 48,10,49,48,10,50,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,49,70,70,66,10,69,78,67,79,68,73,78,71, 32,56,49,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,65,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,49,48,10,49,48, 10,50,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,49, 70,70,67,10,69,78,67,79,68,73,78,71,32,56,49,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,53,48,10,53,48,10,68,56,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,49,70,70,68,10, 69,78,67,79,68,73,78,71,32,56,49,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,49,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,49,70,70,69,10,69,78,67,79, 68,73,78,71,32,56,49,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,48,10, 50,48,10,49,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,48,10,69,78,67,79,68,73,78,71, 32,56,49,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,49,10,69,78,67,79,68,73,78,71,32,56,49,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,50,10, 69,78,67,79,68,73,78,71,32,56,49,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,51,10,69,78,67,79, 68,73,78,71,32,56,49,57,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,52,10,69,78,67,79,68,73,78,71, 32,56,49,57,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,53,10,69,78,67,79,68,73,78,71,32,56,49,57, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,54,10, 69,78,67,79,68,73,78,71,32,56,49,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,55,10,69,78,67,79, 68,73,78,71,32,56,49,57,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,48,56,10,69,78,67,79,68,73,78,71, 32,56,50,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,48,57,10,69,78,67,79,68,73,78,71,32,56,50,48, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,48,65,10, 69,78,67,79,68,73,78,71,32,56,50,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,48,66,10,69,78,67,79, 68,73,78,71,32,56,50,48,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,102,105,105,54,49,54,54,52,10,69,78,67,79,68,73, 78,71,32,56,50,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,102, 105,105,51,48,49,10,69,78,67,79,68,73,78,71,32,56, 50,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,97,102,105,105,50,57, 57,10,69,78,67,79,68,73,78,71,32,56,50,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,102,105,105,51,48,48,10,69,78, 67,79,68,73,78,71,32,56,50,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,49,48,10,69,78,67,79,68,73, 78,71,32,56,50,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,49,49,10,69,78,67,79,68,73,78,71,32,56, 50,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,105,103,117,114,101, 100,97,115,104,10,69,78,67,79,68,73,78,71,32,56,50, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,110,100,97,115,104,10, 69,78,67,79,68,73,78,71,32,56,50,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,101,109,100,97,115,104,10,69,78,67,79,68, 73,78,71,32,56,50,49,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 102,105,105,48,48,50,48,56,10,69,78,67,79,68,73,78, 71,32,56,50,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,49,54,10,69,78,67,79,68,73,78,71,32,56,50, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,100,101,114,115,99, 111,114,101,100,98,108,10,69,78,67,79,68,73,78,71,32, 56,50,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,117,111,116,101, 108,101,102,116,10,69,78,67,79,68,73,78,71,32,56,50, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,50,48,10,51,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,113,117,111,116,101,114,105, 103,104,116,10,69,78,67,79,68,73,78,71,32,56,50,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,49,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,113,117,111,116,101,115,105,110, 103,108,98,97,115,101,10,69,78,67,79,68,73,78,71,32, 56,50,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,50,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,113,117,111,116,101, 114,101,118,101,114,115,101,100,10,69,78,67,79,68,73,78, 71,32,56,50,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,48,10,50,48,10, 49,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,113,117,111, 116,101,100,98,108,108,101,102,116,10,69,78,67,79,68,73, 78,71,32,56,50,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,56,10,57,48, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,113,117, 111,116,101,100,98,108,114,105,103,104,116,10,69,78,67,79, 68,73,78,71,32,56,50,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,68,56,10, 52,56,10,57,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 113,117,111,116,101,100,98,108,98,97,115,101,10,69,78,67, 79,68,73,78,71,32,56,50,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,52,56,10,57,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,49,70,10,69,78,67,79,68,73,78, 71,32,56,50,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,68,56,10,57,48,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,100,97,103, 103,101,114,10,69,78,67,79,68,73,78,71,32,56,50,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,70,56,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,100,97,103,103,101,114,100,98, 108,10,69,78,67,79,68,73,78,71,32,56,50,50,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,70,56,10,50,48,10,50, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,98,117,108,108,101,116,10,69,78,67, 79,68,73,78,71,32,56,50,50,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,70,56,10,70,56,10,70,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,50,51,10,69,78,67,79,68,73,78, 71,32,56,50,50,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,52,48,10, 54,48,10,55,48,10,55,56,10,55,48,10,54,48,10,52, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,111,110,101, 100,111,116,101,110,108,101,97,100,101,114,10,69,78,67,79, 68,73,78,71,32,56,50,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 116,119,111,100,111,116,101,110,108,101,97,100,101,114,10,69, 78,67,79,68,73,78,71,32,56,50,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,108,108,105,112,115,105,115,10,69,78,67,79, 68,73,78,71,32,56,50,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,50,55,10,69,78,67,79,68,73,78,71, 32,56,50,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,50,70,10,69,78,67,79,68,73,78,71,32,56,50,51, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,112,101,114,116,104,111,117,115, 97,110,100,10,69,78,67,79,68,73,78,71,32,56,50,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,56,10,65,56,10,53,48,10,49,48, 10,50,48,10,52,48,10,54,56,10,68,52,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,51,49,10, 69,78,67,79,68,73,78,71,32,56,50,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,65,56,10,53,48,10,49,48,10,50,56,10, 53,52,10,54,56,10,68,52,10,65,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,109,105,110,117,116,101,10,69,78,67,79,68, 73,78,71,32,56,50,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,52,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,115, 101,99,111,110,100,10,69,78,67,79,68,73,78,71,32,56, 50,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,53,48,10,53,48,10,65,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 52,10,69,78,67,79,68,73,78,71,32,56,50,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,52,10,53,52,10,65,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,51,53,10,69,78, 67,79,68,73,78,71,32,56,50,52,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 48,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,51,54,10,69,78,67,79,68,73, 78,71,32,56,50,52,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,65,48,10,65,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,51,55,10,69,78,67,79,68,73,78,71,32,56, 50,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,65,56,10,65,56,10,53,52,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,51, 56,10,69,78,67,79,68,73,78,71,32,56,50,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,103,117,105,108,115,105,110,103,108,108, 101,102,116,10,69,78,67,79,68,73,78,71,32,56,50,52, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,50,48, 10,52,48,10,52,48,10,50,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,103,117,105,108,115,105,110,103, 108,114,105,103,104,116,10,69,78,67,79,68,73,78,71,32, 56,50,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,52,48, 10,50,48,10,49,48,10,49,48,10,50,48,10,52,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 51,66,10,69,78,67,79,68,73,78,71,32,56,50,53,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,56,10,56,56,10,53,48,10,50,48,10, 65,56,10,50,48,10,53,48,10,56,56,10,65,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,120,99,108,97,109,100,98,108, 10,69,78,67,79,68,73,78,71,32,56,50,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,48,48,10,53,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,51,68,10,69,78,67, 79,68,73,78,71,32,56,50,53,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,65,56,10,50,56,10,50,56,10,51,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,51,69,10,69,78,67,79,68,73,78, 71,32,56,50,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,51,70,10,69,78,67,79,68,73,78,71,32,56,50, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,48,52,48, 10,69,78,67,79,68,73,78,71,32,56,50,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,48,52,49,10,69,78,67, 79,68,73,78,71,32,56,50,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,53,48,10,53,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,52,50,10,69,78,67,79,68,73,78, 71,32,56,50,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,53,48,10,70,56,10,53, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,52,51,10,69,78,67,79,68,73,78,71,32,56,50, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,102,114,97,99,116,105,111, 110,10,69,78,67,79,68,73,78,71,32,56,50,54,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,49,48,10,50,48,10,50, 48,10,52,48,10,52,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,53,10,69,78, 67,79,68,73,78,71,32,56,50,54,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,52,48,10,52,48,10,52,48,10,55,48,10,52,48, 10,52,48,10,52,48,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,54,10,69,78,67,79,68,73, 78,71,32,56,50,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,49,48,10,49,48,10, 49,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,55,10,69,78,67,79,68,73,78,71,32,56, 50,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,56,10,66,52,10,66,52,10, 50,52,10,52,56,10,52,56,10,52,56,10,48,48,10,52, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,52, 56,10,69,78,67,79,68,73,78,71,32,56,50,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,65,56,10,65,56,10,50,56,10,52, 56,10,52,56,10,52,56,10,48,48,10,52,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,57,10,69,78, 67,79,68,73,78,71,32,56,50,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,57, 48,10,65,56,10,65,56,10,56,56,10,57,48,10,57,48, 10,57,48,10,48,48,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,65,10,69,78,67,79,68,73, 78,71,32,56,50,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,66,10,69,78,67,79,68,73,78,71,32,56, 50,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,48,10,66,56,10,66,56,10, 66,56,10,66,56,10,66,48,10,65,48,10,65,48,10,65, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,52, 67,10,69,78,67,79,68,73,78,71,32,56,50,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,56,10,69,56,10,69, 56,10,69,56,10,55,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,52,68,10,69,78, 67,79,68,73,78,71,32,56,50,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,66,56,10,66,56,10,66,56, 10,70,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,52,69,10,69,78,67,79,68,73, 78,71,32,56,50,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,55,48,10, 65,56,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,52,70,10,69,78,67,79,68,73,78,71,32,56, 50,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,50,48,10,48,48,10,48,48,10,54,48,10,50, 48,10,49,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 48,10,69,78,67,79,68,73,78,71,32,56,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,53,49,10,69,78, 67,79,68,73,78,71,32,56,50,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,65,56,10,50,48,10,65,56, 10,55,48,10,65,56,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,53,50,10,69,78,67,79,68,73, 78,71,32,56,50,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,67,56, 10,49,48,10,49,48,10,50,48,10,52,48,10,52,48,10, 57,56,10,57,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,53,55,10,69,78,67,79,68,73,78,71,32,56, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,67,10,55,67,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,53, 70,10,69,78,67,79,68,73,78,71,32,56,50,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,54,48,10,69,78, 67,79,68,73,78,71,32,56,50,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,54,49,10,69,78,67,79,68,73, 78,71,32,56,50,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,48,54,50,10,69,78,67,79,68,73,78,71,32,56, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,54, 51,10,69,78,67,79,68,73,78,71,32,56,50,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,122,101,114,111,115,117,112,101,114,105, 111,114,10,69,78,67,79,68,73,78,71,32,56,51,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,65,48,10,65,48,10,65,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,48,55,49,10,69, 78,67,79,68,73,78,71,32,56,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,52,48,10,48,48,10, 52,48,10,52,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,102,111,117,114,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,56,48,10,56,48, 10,67,48,10,69,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,102,105,118,101,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,56,51,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,69,48,10,56, 48,10,67,48,10,50,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,105,120,115,117,112,101,114,105,111,114, 10,69,78,67,79,68,73,78,71,32,56,51,49,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,54,48,10,56, 48,10,67,48,10,65,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,101,118,101,110,115,117,112,101,114,105, 111,114,10,69,78,67,79,68,73,78,71,32,56,51,49,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,101,105,103,104,116,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 52,48,10,65,48,10,52,48,10,65,48,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,105,110,101,115,117,112, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,65,48,10,54,48,10,50,48,10,67,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,48,55, 65,10,69,78,67,79,68,73,78,71,32,56,51,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 52,48,10,69,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,48,55,66,10,69,78, 67,79,68,73,78,71,32,56,51,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,69, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,55,67,10,69,78,67,79,68,73, 78,71,32,56,51,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,69,48,10,48,48,10,69,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,112,97, 114,101,110,108,101,102,116,115,117,112,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,56,48, 10,56,48,10,56,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,112,97,114,101,110,114,105,103,104,116,115,117, 112,101,114,105,111,114,10,69,78,67,79,68,73,78,71,32, 56,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,52,48,10,50,48,10,50,48,10,50,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,110,115,117,112,101, 114,105,111,114,10,69,78,67,79,68,73,78,71,32,56,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,67,48,10,65,48,10,65,48,10,65,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,122,101,114,111,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,111,110,101,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,67,48,10,52, 48,10,52,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,119,111,105,110,102, 101,114,105,111,114,10,69,78,67,79,68,73,78,71,32,56, 51,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,65,48,10,50, 48,10,52,48,10,69,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,116,104,114,101,101,105, 110,102,101,114,105,111,114,10,69,78,67,79,68,73,78,71, 32,56,51,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,65,48, 10,52,48,10,50,48,10,67,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,102,111,117,114, 105,110,102,101,114,105,111,114,10,69,78,67,79,68,73,78, 71,32,56,51,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,56, 48,10,67,48,10,69,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,105,118, 101,105,110,102,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,50,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,48,10, 56,48,10,67,48,10,50,48,10,67,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,105, 120,105,110,102,101,114,105,111,114,10,69,78,67,79,68,73, 78,71,32,56,51,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,54,48,10, 56,48,10,67,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,115,101, 118,101,110,105,110,102,101,114,105,111,114,10,69,78,67,79, 68,73,78,71,32,56,51,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,50,48,10,52,48,10,52,48,10,52,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 101,105,103,104,116,105,110,102,101,114,105,111,114,10,69,78, 67,79,68,73,78,71,32,56,51,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,65,48,10,52,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,110,105,110,101,105,110,102,101,114,105,111,114,10,69, 78,67,79,68,73,78,71,32,56,51,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,65,48,10,54,48,10,50,48,10,67,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,48,56,65,10,69,78,67,79,68, 73,78,71,32,56,51,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,69,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,48,56,66,10,69,78,67,79,68,73,78,71,32, 56,51,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,48, 56,67,10,69,78,67,79,68,73,78,71,32,56,51,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,48,10,48,48,10,69, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,112,97,114,101,110,108,101,102,116, 105,110,102,101,114,105,111,114,10,69,78,67,79,68,73,78, 71,32,56,51,51,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,56, 48,10,56,48,10,56,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,97,114, 101,110,114,105,103,104,116,105,110,102,101,114,105,111,114,10, 69,78,67,79,68,73,78,71,32,56,51,51,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,52,48,10,50,48,10,50,48,10,50,48,10,52, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,48,10,69,78,67,79, 68,73,78,71,32,56,51,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 54,48,10,56,48,10,56,48,10,66,56,10,65,48,10,55, 48,10,50,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,111,108,111,110,109,111,110,101,116,97,114,121,10,69,78, 67,79,68,73,78,71,32,56,51,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,56,10,55, 56,10,57,56,10,57,48,10,65,48,10,65,48,10,65,48, 10,67,48,10,67,56,10,70,48,10,56,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,48,65,50,10,69,78,67,79,68,73, 78,71,32,56,51,53,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,65,56,10,66,48,10,65,48,10, 65,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,102,114, 97,110,99,10,69,78,67,79,68,73,78,71,32,56,51,53, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,56,48, 10,69,56,10,66,48,10,65,48,10,65,48,10,65,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,105,114,97,10,69,78,67, 79,68,73,78,71,32,56,51,53,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,51,48, 10,52,56,10,52,48,10,69,48,10,52,48,10,69,48,10, 52,48,10,52,56,10,66,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,48,65,53,10,69,78,67,79,68,73,78, 71,32,56,51,53,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,49,48,10, 49,48,10,68,48,10,65,56,10,65,56,10,65,56,10,65, 56,10,67,56,10,67,48,10,52,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,48,65,54,10,69,78,67,79,68,73,78,71,32,56,51, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,56,10,52,56,10,54,56,10,70, 67,10,54,56,10,70,67,10,53,56,10,53,56,10,52,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,112,101,115,101,116,97,10, 69,78,67,79,68,73,78,71,32,56,51,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,52,56,10,70,67,10,52,56,10,55,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,56,10,69,78,67,79, 68,73,78,71,32,56,51,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,67,48,10, 65,48,10,65,48,10,65,48,10,68,56,10,65,48,10,66, 48,10,65,56,10,66,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,65,57,10,69,78,67,79,68,73,78,71, 32,56,51,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,70, 56,10,56,56,10,70,56,10,65,56,10,65,56,10,68,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,102,105,105, 53,55,54,51,54,10,69,78,67,79,68,73,78,71,32,56, 51,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,52,10,57,52,10,66,52,10, 66,52,10,66,52,10,66,52,10,66,52,10,65,52,10,57, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,100,111,110,103,10,69, 78,67,79,68,73,78,71,32,56,51,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,55,48,10,49,48,10,55,48,10,57,48,10,57, 48,10,57,48,10,57,48,10,55,48,10,48,48,10,70,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,69,117,114,111,10,69,78,67,79,68,73,78,71, 32,56,51,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,56,10,52,48,10,52, 48,10,70,48,10,52,48,10,70,48,10,52,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,65,68,10,69,78,67,79,68,73,78,71,32,56,51,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,52,10,52,52,10,52,56,10,53,48, 10,70,67,10,53,48,10,52,56,10,52,52,10,52,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,65,69,10, 69,78,67,79,68,73,78,71,32,56,51,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,50,48,10,50,48,10,51,48,10,54,48,10, 51,48,10,54,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,65,70,10,69,78,67,79, 68,73,78,71,32,56,51,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 55,48,10,67,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,69,56,10,68,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,66,48,10,69,78,67,79,68,73,78,71, 32,56,51,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,49,48,10,50,56,10,50, 56,10,50,56,10,49,48,10,49,48,10,53,48,10,54,56, 10,65,56,10,48,56,10,49,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,66,49,10,69,78,67,79,68,73,78,71,32,56,51,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,48,10,53,48,10,70,56,10,70,56, 10,53,48,10,54,48,10,52,48,10,52,48,10,52,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,48,10, 69,78,67,79,68,73,78,71,32,56,52,48,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,50,48,10,52,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,49,10,69,78,67,79, 68,73,78,71,32,56,52,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,49,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,50,10,69,78,67,79,68,73,78,71, 32,56,52,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,51,10,69,78,67,79,68,73,78,71,32,56,52,48, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,52,10, 69,78,67,79,68,73,78,71,32,56,52,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,51,48, 10,67,56,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,53,10,69,78,67,79, 68,73,78,71,32,56,52,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,54,48,10,57,56,10, 49,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,54,10,69,78,67,79,68,73,78,71, 32,56,52,48,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,48,10,70,56,10,52,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,55,10,69,78,67,79,68,73,78,71,32,56,52,48, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,48,10,70,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,56,10, 69,78,67,79,68,73,78,71,32,56,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,57,10,69,78,67,79, 68,73,78,71,32,56,52,48,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,51,48,10,52,56,10,69, 56,10,52,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,65,10,69,78,67,79,68,73,78,71, 32,56,52,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,48,10,57,48,10,66,56,10,57,48, 10,54,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,66,10,69,78,67,79,68,73,78,71,32,56,52,49, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,68,67,10, 69,78,67,79,68,73,78,71,32,56,52,49,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,66,52, 10,66,52,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,68,68,10,69,78,67,79, 68,73,78,71,32,56,52,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,55,56,10,56,52,10,56,52,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,55,56,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,68,69,10,69,78,67,79,68,73,78,71, 32,56,52,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,70,67,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,70,67,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,68,70,10,69,78,67,79,68,73,78,71,32,56,52,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,51, 48,10,52,56,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 52,56,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,48,10, 69,78,67,79,68,73,78,71,32,56,52,49,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,55,56,10,67,52, 10,65,52,10,65,52,10,65,52,10,65,52,10,65,52,10, 57,52,10,57,52,10,57,52,10,57,52,10,56,67,10,55, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,49,10,69,78,67,79, 68,73,78,71,32,56,52,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,53,48,10,70,56,10, 53,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,50,10,69,78,67,79,68,73,78,71, 32,56,52,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,55,56,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,55,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,51,10,69,78,67,79,68,73,78,71,32,56,52,49, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,70, 67,10,70,67,10,56,52,10,56,52,10,56,52,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 70,67,10,70,67,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,52,10, 69,78,67,79,68,73,78,71,32,56,52,50,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,51,48,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,56,52,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,55, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,53,10,69,78,67,79, 68,73,78,71,32,56,52,50,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,52,48,10,52,48,10,50,48,10,49,48,10,49, 48,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,54,10,69,78,67,79,68,73,78,71, 32,56,52,50,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 48,69,55,10,69,78,67,79,68,73,78,71,32,56,52,50, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,70,67,10,48,52,10,48,52,10,48,52,10,48,52, 10,48,52,10,48,52,10,48,52,10,48,52,10,48,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,48,69,56,10, 69,78,67,79,68,73,78,71,32,56,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 56,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,48,69,57,10,69,78,67,79, 68,73,78,71,32,56,52,50,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,70,56,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,48,69,65,10,69,78,67,79,68,73,78,71, 32,56,52,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,52,48,10,70,56,10,52,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,48,48,10,69,78,67,79,68,73,78,71,32,56,52,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,54,56,10,65,56,10,65,56,10,55,48, 10,54,48,10,53,56,10,65,48,10,65,48,10,57,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,48,49,10, 69,78,67,79,68,73,78,71,32,56,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,54,56,10,65,56,10,65,56,10,55,48,10,51,56,10, 54,48,10,57,48,10,56,56,10,66,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,48,50,10,69,78,67,79, 68,73,78,71,32,56,52,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,48,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,48,51,10,69,78,67,79,68,73,78,71, 32,56,52,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,52,48,10,65,48,10,52,48,10,51,56,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,48,52,10,69,78,67,79,68,73,78,71,32,56,52,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,55,48,10,65,48, 10,65,48,10,65,48,10,55,48,10,50,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,54,49,50,52, 56,10,69,78,67,79,68,73,78,71,32,56,52,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,56,56,10,57,48,10,53,48,10,50, 48,10,53,48,10,54,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,54,10,69,78, 67,79,68,73,78,71,32,56,52,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,52, 56,10,56,56,10,57,48,10,53,48,10,50,48,10,54,56, 10,54,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,55,10,69,78,67,79,68,73, 78,71,32,56,52,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,56,56, 10,56,48,10,56,48,10,54,48,10,56,48,10,56,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,56,10,69,78,67,79,68,73,78,71,32,56, 52,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,57,48,10,48,56,10, 52,56,10,55,56,10,52,56,10,48,56,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 57,10,69,78,67,79,68,73,78,71,32,56,52,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,52,48,10, 65,48,10,52,48,10,55,56,10,52,48,10,52,48,10,55, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,65,10,69,78, 67,79,68,73,78,71,32,56,52,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,56,56, 10,56,56,10,55,48,10,49,48,10,57,48,10,54,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,66,10,69,78,67,79,68,73, 78,71,32,56,52,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,67,56,10,52,56, 10,52,56,10,52,56,10,55,56,10,57,48,10,57,48,10, 57,48,10,57,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,48,67,10,69,78,67,79,68,73,78,71,32,56, 52,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,56,10,57,48,10,56,48,10, 66,48,10,67,56,10,52,56,10,50,56,10,65,56,10,52, 56,10,49,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,49,48, 68,10,69,78,67,79,68,73,78,71,32,56,52,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,65,56,10,66, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,49,48,69,10,69,78, 67,79,68,73,78,71,32,56,52,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,52,48,10,55,48,10,52,56, 10,52,56,10,57,48,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,49,48,70,10,69,78,67,79,68,73, 78,71,32,56,52,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,51,48, 10,54,48,10,67,48,10,55,48,10,52,56,10,52,56,10, 57,48,10,57,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,49,49,48,10,69,78,67,79,68,73,78,71,32,56, 52,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,56,10,48,56,10,48,56,10, 49,48,10,49,48,10,49,48,10,50,48,10,65,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,73,102,114,97,107,116, 117,114,10,69,78,67,79,68,73,78,71,32,56,52,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,56,10,52,56,10,48,56,10, 49,48,10,49,48,10,48,56,10,67,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,50,10,69, 78,67,79,68,73,78,71,32,56,52,54,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,56,10,53,52,10,51,56,10,49,48,10,49,48,10,50, 48,10,54,48,10,65,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,97,102,105,105,54,49,50,56,57,10,69,78,67, 79,68,73,78,71,32,56,52,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,50,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 49,48,10,51,48,10,52,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,49,52,10,69,78,67,79,68,73,78, 71,32,56,52,54,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,65,48,10,70,56,10, 65,48,10,66,48,10,65,56,10,65,56,10,65,56,10,65, 56,10,66,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,49,53,10,69,78,67,79,68,73,78,71,32,56,52, 54,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,67,52,10,67,52,10,65,52,10,65, 52,10,66,52,10,66,52,10,65,67,10,65,67,10,65,52, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,102,105,105,54,49,51, 53,50,10,69,78,67,79,68,73,78,71,32,56,52,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,57,48,10,57,48,10,68,48,10,68,48,10, 68,67,10,66,52,10,66,52,10,57,52,10,57,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,49,55,10,69, 78,67,79,68,73,78,71,32,56,52,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,69,56,10,68,56,10,69,56,10,67, 56,10,67,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,119,101,105,101,114,115,116,114,97,115,115,10,69, 78,67,79,68,73,78,71,32,56,52,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,48,10,52,56,10,52,56,10,52,56,10,55,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,49,57,10,69,78,67,79,68, 73,78,71,32,56,52,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,66,48,10,65,48, 10,65,48,10,65,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,49,65,10,69,78,67,79,68,73,78,71,32, 56,52,55,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,48,10,48,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 49,66,10,69,78,67,79,68,73,78,71,32,56,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,52,56,10,52,56,10,52,56,10, 55,48,10,65,48,10,57,48,10,57,48,10,57,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,82,102,114,97,107,116,117,114,10, 69,78,67,79,68,73,78,71,32,56,52,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,48,10,65,56,10,54,56,10,50,56,10,51,48,10, 51,48,10,66,48,10,65,56,10,52,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,49,68,10,69,78,67,79, 68,73,78,71,32,56,52,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,48,10, 65,56,10,65,56,10,65,56,10,66,48,10,66,48,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 112,114,101,115,99,114,105,112,116,105,111,110,10,69,78,67, 79,68,73,78,71,32,56,52,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,70,48,10,65,56,10, 57,48,10,65,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,49,70,10,69,78,67,79,68,73,78, 71,32,56,52,55,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,54,48,10,50,48,10,70,48,10,65,56,10, 65,56,10,65,56,10,70,48,10,65,48,10,66,48,10,65, 56,10,65,56,10,50,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,48,10,69,78,67,79,68,73,78,71,32,56,52, 56,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 54,56,10,66,56,10,54,56,10,65,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,49, 10,69,78,67,79,68,73,78,71,32,56,52,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,69, 48,10,52,48,10,55,48,10,54,48,10,51,48,10,50,48, 10,51,48,10,48,48,10,49,48,10,49,48,10,49,48,10, 49,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,97,100,101,109,97,114,107,10,69, 78,67,79,68,73,78,71,32,56,52,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,52,10,53,67,10,53,52,10,53,52,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,51,10,69,78,67,79,68, 73,78,71,32,56,52,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,54,48,10,50,48,10,65,56,10,65, 56,10,65,56,10,65,56,10,55,48,10,55,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,50,52,10,69,78,67,79,68,73,78,71,32, 56,52,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,50,56,10,50,56, 10,53,48,10,53,48,10,53,48,10,65,48,10,65,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 50,53,10,69,78,67,79,68,73,78,71,32,56,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,49,48,10,50,48,10,55,56,10, 49,48,10,50,48,10,55,48,10,48,56,10,48,56,10,56, 56,10,55,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,79,109,101,103,97,10,69,78,67, 79,68,73,78,71,32,56,52,56,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,68,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,55,10,69,78,67,79,68,73,78, 71,32,56,52,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,68,56,10,53,48,10, 53,48,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,56,10,69,78,67,79,68,73,78,71,32,56,52, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,48,56,10,52, 56,10,51,48,10,52,56,10,48,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,57, 10,69,78,67,79,68,73,78,71,32,56,52,56,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,54,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,50,65,10,69,78,67, 79,68,73,78,71,32,56,52,57,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,56,56,10,57,48,10,65,48,10,67,48,10,65,48,10, 57,48,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,50,66,10,69,78,67,79,68,73,78, 71,32,56,52,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,53,48,10,50,48,10, 50,48,10,53,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,50,67,10,69,78,67,79,68,73,78,71,32,56,52, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,48,10,52,56,10,52,56,10,52, 56,10,55,48,10,57,48,10,57,48,10,57,48,10,69,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,50,68, 10,69,78,67,79,68,73,78,71,32,56,52,57,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,56,10,53,48,10,57,48,10,56,56,10,65,56, 10,57,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,101,115,116,105,109,97,116,101,100,10,69, 78,67,79,68,73,78,71,32,56,52,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,68,56,10,68,56,10,70, 56,10,67,48,10,67,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,50,70,10,69,78,67,79,68, 73,78,71,32,56,52,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,56,10,52,56,10,55,56,10,56,48, 10,57,48,10,54,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,51,48,10,69,78,67,79,68,73,78,71,32, 56,52,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,48,10,54,48,10,56,48,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 51,49,10,69,78,67,79,68,73,78,71,32,56,52,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,67,10,57,48,10,49,48,10,49,48,10, 55,56,10,50,48,10,50,48,10,65,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,51,50,10,69, 78,67,79,68,73,78,71,32,56,52,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,56,10,48,56,10,48,56,10,48,56,10,55,56,10,48, 56,10,48,56,10,48,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,51,51,10,69,78,67,79,68, 73,78,71,32,56,52,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,52,10,54, 67,10,53,52,10,53,52,10,52,52,10,56,56,10,56,56, 10,56,56,10,56,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,51,52,10,69,78,67,79,68,73,78,71,32, 56,53,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,51,56,10,52,56,10,52,56,10,57,48,10,57,48,10, 69,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,108,101,112,104, 10,69,78,67,79,68,73,78,71,32,56,53,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,57,48,10,52,56, 10,54,56,10,57,48,10,56,56,10,67,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,51,54,10,69,78,67, 79,68,73,78,71,32,56,53,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,51,55,10,69,78,67,79,68,73,78, 71,32,56,53,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,52,48,10,50,48,10,49,48,10,49,48,10,50, 56,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,56,10,69,78,67,79,68,73,78,71,32,56,53, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,57, 10,69,78,67,79,68,73,78,71,32,56,53,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,51,48,10,48,48,10,55,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,51,65,10,69,78,67, 79,68,73,78,71,32,56,53,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,52,10,55,67,10,56,67,10, 56,52,10,56,52,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,51,68,10,69,78,67,79,68,73,78, 71,32,56,53,48,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,53,48,10,53, 48,10,65,48,10,65,48,10,67,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,51,69,10,69,78,67,79,68,73,78,71,32,56,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,65,56,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,51,70, 10,69,78,67,79,68,73,78,71,32,56,53,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,48,10,69,78,67, 79,68,73,78,71,32,56,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,65,48,10,53,48,10,53,48,10,50,56,10,53,48,10, 53,48,10,65,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,49,10,69,78,67,79,68,73,78, 71,32,56,53,49,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,67,56,10,48,56,10,48,56,10,48,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,50,10,69,78,67,79,68,73,78,71,32,56,53, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,51, 10,69,78,67,79,68,73,78,71,32,56,53,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,48,56,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,52,10,69,78,67, 79,68,73,78,71,32,56,53,49,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,53,48,10, 53,48,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,53,10,69,78,67,79,68,73,78, 71,32,56,53,49,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,53,52,10, 53,52,10,53,52,10,65,56,10,65,56,10,65,56,10,65, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,54,10,69,78,67,79,68,73,78,71,32,56,53, 49,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,52,10,49,52,10,49,52,10,55, 52,10,65,56,10,65,56,10,65,56,10,65,56,10,54,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,55, 10,69,78,67,79,68,73,78,71,32,56,53,49,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,53,52, 10,53,52,10,66,56,10,65,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,49,52,56,10,69,78,67, 79,68,73,78,71,32,56,53,50,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,48,48,10,55,56,10,50,56,10,50,56,10, 53,48,10,53,48,10,53,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,49,52,57,10,69,78,67,79,68,73,78, 71,32,56,53,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,49,48,10,49,48,10, 48,48,10,55,56,10,50,56,10,50,56,10,53,48,10,53, 48,10,53,48,10,53,48,10,69,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,49,52,65,10,69,78,67,79,68,73,78,71,32,56,53, 50,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,70,48,10,65, 56,10,65,56,10,65,56,10,66,48,10,50,48,10,51,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,49,52,66, 10,69,78,67,79,68,73,78,71,32,56,53,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,66,48,10,52,56,10,67,56,10,50,56, 10,49,48,10,50,56,10,50,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,111,110,101,116,104,105,114,100,10,69,78, 67,79,68,73,78,71,32,56,53,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,57,48,10,50,56, 10,49,48,10,48,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,116,119,111,116,104,105,114,100,115,10,69,78,67,79, 68,73,78,71,32,56,53,51,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 65,48,10,52,48,10,56,48,10,70,48,10,50,56,10,49, 48,10,48,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,53,53,10,69,78,67,79,68,73,78,71, 32,56,53,51,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,66,56,10,50,48,10,51,48,10,48,56, 10,51,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,54,10,69,78,67,79,68,73,78,71,32,56,53,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,52,48,10,65,48,10,52,48,10,56,48,10,69,48, 10,51,56,10,50,48,10,51,48,10,48,56,10,51,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,55,10, 69,78,67,79,68,73,78,71,32,56,53,51,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,52,48, 10,65,48,10,52,48,10,50,48,10,67,48,10,51,56,10, 50,48,10,51,48,10,48,56,10,51,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,53,56,10,69,78,67,79, 68,73,78,71,32,56,53,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 67,48,10,69,48,10,52,48,10,51,56,10,50,48,10,51, 48,10,48,56,10,51,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,53,57,10,69,78,67,79,68,73,78,71, 32,56,53,51,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,57,56,10,50,48,10,51,48,10,50,56, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,53,65,10,69,78,67,79,68,73,78,71,32,56,53,51, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,48,10,56,48,10,67,48,10,50,48, 10,68,56,10,50,48,10,51,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,110,101,101,105,103,104,116, 104,10,69,78,67,79,68,73,78,71,32,56,53,51,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,57, 48,10,50,56,10,49,48,10,50,56,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,116,104,114,101,101,101,105,103,104,116, 104,115,10,69,78,67,79,68,73,78,71,32,56,53,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,48,10,65,48,10,52,48,10,50,48,10, 68,48,10,50,56,10,49,48,10,50,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,102,105,118,101,101,105,103,104,116, 104,115,10,69,78,67,79,68,73,78,71,32,56,53,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,69,48,10,56,48,10,69,48,10,50,48,10, 68,48,10,50,56,10,49,48,10,50,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,115,101,118,101,110,101,105,103,104, 116,104,115,10,69,78,67,79,68,73,78,71,32,56,53,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,69,48,10,50,48,10,52,48,10,52,48, 10,53,48,10,50,56,10,49,48,10,50,56,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,53,70,10, 69,78,67,79,68,73,78,71,32,56,53,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,48,10,69,78,67,79, 68,73,78,71,32,56,53,52,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,49,10,69,78,67,79,68,73,78,71, 32,56,53,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,50,10,69,78,67,79,68,73,78,71,32,56,53,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,51,10, 69,78,67,79,68,73,78,71,32,56,53,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,52,10,69,78,67,79, 68,73,78,71,32,56,53,52,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,56,10, 56,56,10,56,56,10,56,56,10,53,48,10,53,48,10,53, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,53,10,69,78,67,79,68,73,78,71, 32,56,53,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,54,10,69,78,67,79,68,73,78,71,32,56,53,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,68,52,10,68,52,10,68,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,53,52,10,53,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,55,10, 69,78,67,79,68,73,78,71,32,56,53,53,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,68,67,10,68,67,10,68,67,10,68,67,10,68,67,10, 68,67,10,68,67,10,53,67,10,53,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,56,10,69,78,67,79, 68,73,78,71,32,56,53,53,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,57,48,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,57,10,69,78,67,79,68,73,78,71, 32,56,53,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,53, 48,10,53,48,10,50,48,10,53,48,10,53,48,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,65,10,69,78,67,79,68,73,78,71,32,56,53,53, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,52,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,66,10, 69,78,67,79,68,73,78,71,32,56,53,53,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,67,10,65,67,10,65,67,10,52,67,10,52,67,10, 52,67,10,65,67,10,65,67,10,65,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,54,67,10,69,78,67,79, 68,73,78,71,32,56,53,53,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,54,68,10,69,78,67,79,68,73,78,71, 32,56,53,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,54,69,10,69,78,67,79,68,73,78,71,32,56,53,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,54,70,10, 69,78,67,79,68,73,78,71,32,56,53,53,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,56,56,10,68,56,10,65,56,10,65,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,48,10,69,78,67,79, 68,73,78,71,32,56,53,54,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,49,10,69,78,67,79,68,73,78,71, 32,56,53,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,53,48,10,48, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,50,10,69,78,67,79,68,73,78,71,32,56,53,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,65,56,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,51,10, 69,78,67,79,68,73,78,71,32,56,53,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,48,10,48,48,10,65,56,10,65,56,10, 65,56,10,65,56,10,57,48,10,57,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,52,10,69,78,67,79, 68,73,78,71,32,56,53,54,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,53, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,53,10,69,78,67,79,68,73,78,71, 32,56,53,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,56,10,48, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,54,10,69,78,67,79,68,73,78,71,32,56,53,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,52,10,48,48,10,68,52, 10,68,52,10,68,52,10,68,52,10,53,52,10,53,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,55,10, 69,78,67,79,68,73,78,71,32,56,53,54,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,48,10,68,67,10,68,67,10, 68,67,10,68,67,10,53,67,10,53,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,56,10,69,78,67,79, 68,73,78,71,32,56,53,54,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,48,10,48,48,10,65,56,10,65,56,10,57,48,10,57, 48,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,57,10,69,78,67,79,68,73,78,71, 32,56,53,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,53,48,10,50,48,10,50,48,10,53,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,65,10,69,78,67,79,68,73,78,71,32,56,53,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,48,10,65,56, 10,65,56,10,52,56,10,52,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,66,10, 69,78,67,79,68,73,78,71,32,56,53,55,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,67,10,48,48,10,65,67,10,65,67,10, 52,67,10,52,67,10,65,67,10,65,67,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,55,67,10,69,78,67,79, 68,73,78,71,32,56,53,55,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,55,68,10,69,78,67,79,68,73,78,71, 32,56,53,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,55,69,10,69,78,67,79,68,73,78,71,32,56,53,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,55,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,55,70,10, 69,78,67,79,68,73,78,71,32,56,53,55,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,56,48,10,69,78,67,79, 68,73,78,71,32,56,53,55,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,56,49,10,69,78,67,79,68,73,78,71, 32,56,53,55,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,48,10,56,56,10,69, 56,10,65,56,10,65,56,10,65,56,10,69,56,10,56,56, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,56,50,10,69,78,67,79,68,73,78,71,32,56,53,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,70,56, 10,65,56,10,70,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,56,51,10, 69,78,67,79,68,73,78,71,32,56,53,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,114,114,111,119,108,101,102,116,10,69,78, 67,79,68,73,78,71,32,56,53,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,52,48,10,70,56, 10,52,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,114,114,111,119,117,112,10,69,78,67,79,68,73, 78,71,32,56,53,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,55,48, 10,65,56,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,56,53,57,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,49,48,10,70,56,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,114,114, 111,119,100,111,119,110,10,69,78,67,79,68,73,78,71,32, 56,53,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,65,56,10,55,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 98,111,116,104,10,69,78,67,79,68,73,78,71,32,56,53, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,70,67,10,52,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,97,114,114,111,119,117,112, 100,110,10,69,78,67,79,68,73,78,71,32,56,53,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 50,48,10,50,48,10,65,56,10,55,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,54,10,69, 78,67,79,68,73,78,71,32,56,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 67,48,10,70,48,10,69,48,10,65,48,10,50,48,10,49, 48,10,49,48,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,55,10,69,78,67,79,68, 73,78,71,32,56,53,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,56,10,55, 56,10,51,56,10,50,56,10,50,48,10,52,48,10,52,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,56,10,69,78,67,79,68,73,78,71,32, 56,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,52,48, 10,52,48,10,50,48,10,50,56,10,51,56,10,55,56,10, 49,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,57,10,69,78,67,79,68,73,78,71,32,56,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,65,48,10,69,48,10,70,48,10,67,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,65,10,69, 78,67,79,68,73,78,71,32,56,54,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,52,56,10,70, 67,10,53,48,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,66,10,69,78,67,79,68, 73,78,71,32,56,54,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,50,56,10,70,67,10,52,56, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,57,67,10,69,78,67,79,68,73,78,71,32, 56,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,48,10,68,56,10,54,52,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 57,68,10,69,78,67,79,68,73,78,71,32,56,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,67,10, 54,67,10,57,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,57,69,10,69, 78,67,79,68,73,78,71,32,56,54,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,53,48,10,70, 67,10,53,48,10,50,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,57,70,10,69,78,67,79,68, 73,78,71,32,56,54,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,55, 48,10,65,56,10,55,48,10,65,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,48,10,69,78,67,79,68,73,78,71,32, 56,54,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,50,56,10,70,67,10,50,56,10,53,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,49,10,69,78,67,79,68,73,78,71,32,56,54,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 65,56,10,55,48,10,65,56,10,55,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,50,10,69, 78,67,79,68,73,78,71,32,56,54,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,52,10,52,56,10,70, 48,10,52,56,10,50,52,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,51,10,69,78,67,79,68, 73,78,71,32,56,54,49,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,57,48,10,52,56,10,51,67,10,52,56, 10,57,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,65,52,10,69,78,67,79,68,73,78,71,32, 56,54,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,52,56,10,70,56,10,52,56,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 65,53,10,69,78,67,79,68,73,78,71,32,56,54,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,65,54,10,69, 78,67,79,68,73,78,71,32,56,54,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,57,48,10,70, 56,10,57,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,65,55,10,69,78,67,79,68, 73,78,71,32,56,54,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,65,56, 10,55,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,97, 114,114,111,119,117,112,100,110,98,115,101,10,69,78,67,79, 68,73,78,71,32,56,54,49,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,50,48,10,50,48,10,65,56,10,55, 48,10,50,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,57,10,69,78,67,79,68,73,78,71, 32,56,54,49,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,56,10,52,52,10,70,56,10,52,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,65,10,69,78,67,79,68,73,78,71,32,56,54,49, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,56,56,10,55,67,10,48,56,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,66,10, 69,78,67,79,68,73,78,71,32,56,54,49,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,52,67,10, 70,67,10,52,56,10,50,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,65,67,10,69,78,67,79, 68,73,78,71,32,56,54,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,67,56,10,70,67,10,52, 56,10,53,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,65,68,10,69,78,67,79,68,73,78,71, 32,56,54,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,68,67,10,69,67,10,52,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,65,69,10,69,78,67,79,68,73,78,71,32,56,54,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,53,56,10,70,67,10,54,56,10,52,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,65,70,10, 69,78,67,79,68,73,78,71,32,56,54,50,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,57,48,10,66,48,10,68,48,10, 57,48,10,49,48,10,51,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,66,48,10,69,78,67,79, 68,73,78,71,32,56,54,50,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,56,10,52,56,10,50,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,49,66,49,10,69,78,67,79,68,73,78,71, 32,56,54,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,49,48,10,70, 56,10,57,48,10,65,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 49,66,50,10,69,78,67,79,68,73,78,71,32,56,54,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,48,56, 10,50,56,10,52,56,10,70,56,10,52,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,49,66,51,10, 69,78,67,79,68,73,78,71,32,56,54,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,65,48,10, 57,48,10,70,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,49,66,52,10,69,78,67,79, 68,73,78,71,32,56,54,50,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,49,48,10,49,48,10,51, 56,10,49,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 99,97,114,114,105,97,103,101,114,101,116,117,114,110,10,69, 78,67,79,68,73,78,71,32,56,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,56,10,48,56,10,48,56,10,52, 56,10,70,56,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,54,10,69,78,67,79,68, 73,78,71,32,56,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,52,56,10,52,56,10,69,56, 10,52,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,55,10,69,78,67,79,68,73,78,71,32, 56,54,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,48,10,57,48,10,57,48,10,66,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,56,10,69,78,67,79,68,73,78,71,32,56,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,48,10,69,48,10,67,48,10, 65,48,10,50,48,10,49,48,10,49,48,10,48,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,57,10,69, 78,67,79,68,73,78,71,32,56,54,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 65,48,10,67,48,10,70,56,10,67,48,10,65,56,10,49, 56,10,70,56,10,49,56,10,50,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,65,10,69,78,67,79,68, 73,78,71,32,56,54,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,51,48,10,65,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,66,10,69,78,67,79,68,73,78,71,32, 56,54,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,69,48, 10,54,48,10,65,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 66,67,10,69,78,67,79,68,73,78,71,32,56,54,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,66,68,10,69, 78,67,79,68,73,78,71,32,56,54,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,66,69,10,69,78,67,79,68, 73,78,71,32,56,54,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,51, 48,10,50,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,66,70,10,69,78,67,79,68,73,78,71,32, 56,54,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,48,10,69,78,67,79,68,73,78,71,32,56,54,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 49,48,10,70,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,49,10,69, 78,67,79,68,73,78,71,32,56,54,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,49,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,50,10,69,78,67,79,68, 73,78,71,32,56,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,56, 10,51,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,51,10,69,78,67,79,68,73,78,71,32, 56,54,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,65,48,10,54,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,52,10,69,78,67,79,68,73,78,71,32,56,54,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,49,48,10,70,56,10,49,48,10, 50,48,10,52,48,10,70,56,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,53,10,69, 78,67,79,68,73,78,71,32,56,54,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,70,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,55,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,54,10,69,78,67,79,68, 73,78,71,32,56,54,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,52, 48,10,70,56,10,52,48,10,50,48,10,49,48,10,70,56, 10,49,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,55,10,69,78,67,79,68,73,78,71,32, 56,54,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,52,48,10,70,56, 10,52,48,10,50,48,10,52,48,10,70,56,10,52,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,56,10,69,78,67,79,68,73,78,71,32,56,54,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,70,56,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,57,10,69, 78,67,79,68,73,78,71,32,56,54,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,49,48,10,70,56,10,49,48,10,50,48,10,49, 48,10,70,56,10,49,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,65,10,69,78,67,79,68, 73,78,71,32,56,54,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,70,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,66,10,69,78,67,79,68,73,78,71,32, 56,54,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,52,48,10,70,56,10,48,48,10,70,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 67,67,10,69,78,67,79,68,73,78,71,32,56,54,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,49,48,10, 70,56,10,48,48,10,70,56,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,67,68,10,69, 78,67,79,68,73,78,71,32,56,54,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,52,10,50,56,10,55,67,10,57, 48,10,55,67,10,50,48,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,67,69,10,69,78,67,79,68, 73,78,71,32,56,54,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,56,10,53,56,10,70,67,10,65,52,10,70,67, 10,54,56,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,67,70,10,69,78,67,79,68,73,78,71,32, 56,54,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,65,48, 10,53,48,10,70,56,10,50,52,10,70,56,10,49,48,10, 50,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 100,98,108,108,101,102,116,10,69,78,67,79,68,73,78,71, 32,56,54,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,55,67,10,56,48,10,55,67,10,50,48, 10,49,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,97,114,114,111, 119,100,98,108,117,112,10,69,78,67,79,68,73,78,71,32, 56,54,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,68,56, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,97,114,114,111,119, 100,98,108,114,105,103,104,116,10,69,78,67,79,68,73,78, 71,32,56,54,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,49,48,10,70,56,10,48,52,10,70,56,10,49, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,97,114,114, 111,119,100,98,108,100,111,119,110,10,69,78,67,79,68,73, 78,71,32,56,54,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,68,56,10, 53,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,97,114, 114,111,119,100,98,108,98,111,116,104,10,69,78,67,79,68, 73,78,71,32,56,54,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,70,67,10,56,52,10,70,67, 10,52,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,53,10,69,78,67,79,68,73,78,71,32, 56,54,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,68,56, 10,53,48,10,53,48,10,53,48,10,68,56,10,53,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,54,10,69,78,67,79,68,73,78,71,32,56,54,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,65,48,10, 68,48,10,65,56,10,57,52,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,55,10,69, 78,67,79,68,73,78,71,32,56,54,54,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,67,10,49,52,10,50,67,10,53, 52,10,65,52,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,56,10,69,78,67,79,68, 73,78,71,32,56,54,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,65,52,10,53,52,10,50,67,10,49,52, 10,55,67,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,57,10,69,78,67,79,68,73,78,71,32, 56,54,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,57,52,10,65,56,10,68,48,10,65,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,65,10,69,78,67,79,68,73,78,71,32,56,54,54,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,51,67,10, 52,48,10,70,67,10,52,48,10,51,67,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,66,10,69, 78,67,79,68,73,78,71,32,56,54,54,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,70,48,10,48,56,10,70, 67,10,48,56,10,70,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,68,67,10,69,78,67,79,68, 73,78,71,32,56,54,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,69,56,10,68,52,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,68,68,10,69,78,67,79,68,73,78,71,32, 56,54,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,53,67,10,65,67,10,48,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 68,69,10,69,78,67,79,68,73,78,71,32,56,54,55,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,55,48,10,65,56,10,50,48,10, 55,48,10,50,48,10,55,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,68,70,10,69, 78,67,79,68,73,78,71,32,56,54,55,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,50,48,10,55,48,10,50, 48,10,65,56,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,48,10,69,78,67,79,68, 73,78,71,32,56,54,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,52,48,10,65,56,10,52,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,49,10,69,78,67,79,68,73,78,71,32, 56,54,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,48,48,10,50,48,10,50,48,10,48,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,50,10,69,78,67,79,68,73,78,71,32,56,54,55,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 49,48,10,65,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,51,10,69, 78,67,79,68,73,78,71,32,56,54,55,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,48,48,10,50,48,10,50,48,10,48, 48,10,65,56,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,52,10,69,78,67,79,68, 73,78,71,32,56,54,55,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,48,10,67,48,10,70,56,10,67,48, 10,65,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,53,10,69,78,67,79,68,73,78,71,32, 56,54,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,56,10,49,56,10,70,56,10,49,56,10,50,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,54,10,69,78,67,79,68,73,78,71,32,56,54,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,56,10,56,56,10,55,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,55,10,69, 78,67,79,68,73,78,71,32,56,54,55,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,56,10,69,78,67,79,68, 73,78,71,32,56,54,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,70,48,10,56,56,10,70,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,57,10,69,78,67,79,68,73,78,71,32, 56,54,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,68,56,10,53,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,65,10,69,78,67,79,68,73,78,71,32,56,54,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,48,10,53,48,10,68,56,10,53,48,10,53,48,10, 55,48,10,48,48,10,55,48,10,53,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,66,10,69, 78,67,79,68,73,78,71,32,56,54,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,68,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,69,67,10,69,78,67,79,68, 73,78,71,32,56,54,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,53, 48,10,70,56,10,56,56,10,53,48,10,53,48,10,68,56, 10,56,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,69,68,10,69,78,67,79,68,73,78,71,32, 56,54,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,70,56, 10,55,48,10,55,48,10,55,48,10,70,56,10,65,56,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 69,69,10,69,78,67,79,68,73,78,71,32,56,54,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,53,48,10,68,56,10,53,48,10, 68,56,10,53,48,10,53,48,10,53,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,69,70,10,69, 78,67,79,68,73,78,71,32,56,54,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,68,56,10,53, 48,10,68,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,48,10,69,78,67,79,68, 73,78,71,32,56,54,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,48,10,70,48,10,56,56,10,70,48, 10,65,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,49,10,69,78,67,79,68,73,78,71,32, 56,54,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,48,10,66,48, 10,69,48,10,57,48,10,49,48,10,48,56,10,48,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,50,10,69,78,67,79,68,73,78,71,32,56,54,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,48,10,56,48,10,52,48,10, 52,56,10,51,56,10,54,56,10,48,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,51,10,69, 78,67,79,68,73,78,71,32,56,54,57,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,53,48,10,68,56,10,53,48,10,53,48,10,53, 48,10,68,56,10,53,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,52,10,69,78,67,79,68, 73,78,71,32,56,54,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,54,56,10,70,67,10,54,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,53,10,69,78,67,79,68,73,78,71,32, 56,54,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,55,56,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,70,48,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,54,10,69,78,67,79,68,73,78,71,32,56,54,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,49,48,10,70,56,10,49,48,10,49,48,10, 70,56,10,49,48,10,49,48,10,70,56,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,55,10,69, 78,67,79,68,73,78,71,32,56,54,57,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,56,10,52,56,10,70, 67,10,52,56,10,50,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,56,10,69,78,67,79,68, 73,78,71,32,56,54,57,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,53,48,10,52,56,10,70,67,10,52,56, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,57,10,69,78,67,79,68,73,78,71,32, 56,54,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,55,56,10,51,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,65,10,69,78,67,79,68,73,78,71,32,56,54,57,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,56,10, 53,56,10,70,67,10,53,56,10,51,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,66,10,69, 78,67,79,68,73,78,71,32,56,54,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,54,56,10,70, 67,10,54,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,49,70,67,10,69,78,67,79,68, 73,78,71,32,56,55,48,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,55,56,10,70,67,10,55,56,10,51,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,49,70,68,10,69,78,67,79,68,73,78,71,32, 56,55,48,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,54,48,10,66,56,10,54,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,49, 70,69,10,69,78,67,79,68,73,78,71,32,56,55,48,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 51,48,10,69,56,10,51,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,49,70,70,10,69, 78,67,79,68,73,78,71,32,56,55,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,55,56,10,66,52,10,55, 56,10,51,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,118,101,114,115,97,108,10,69,78,67, 79,68,73,78,71,32,56,55,48,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,48,49,10,69,78,67,79,68,73,78, 71,32,56,55,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,53,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,53, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,112,97,114, 116,105,97,108,100,105,102,102,10,69,78,67,79,68,73,78, 71,32,56,55,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,51,48,10, 52,56,10,48,56,10,51,56,10,52,56,10,52,56,10,52, 56,10,51,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,120,105, 115,116,101,110,116,105,97,108,10,69,78,67,79,68,73,78, 71,32,56,55,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,55,56,10,48,56,10,48,56,10,48, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,52,10,69,78,67,79,68,73,78,71,32,56,55, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,48,10,49,48,10,70,56,10,49,56,10,50,56,10,50, 56,10,55,56,10,50,56,10,50,56,10,52,56,10,70,56, 10,52,48,10,52,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,101,109,112,116,121,115,101, 116,10,69,78,67,79,68,73,78,71,32,56,55,48,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,49,48,10,55,48,10,57,56,10,65,56,10,65, 56,10,65,56,10,67,56,10,55,48,10,52,48,10,52,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,68,101,108,116,97,10,69,78,67,79, 68,73,78,71,32,56,55,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,53,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 103,114,97,100,105,101,110,116,10,69,78,67,79,68,73,78, 71,32,56,55,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,53,48,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,101,108,101, 109,101,110,116,10,69,78,67,79,68,73,78,71,32,56,55, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,56,10,52, 48,10,56,48,10,70,48,10,56,48,10,52,48,10,51,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,110,111,116,101,108,101,109, 101,110,116,10,69,78,67,79,68,73,78,71,32,56,55,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,51,56,10,54,48, 10,65,48,10,70,48,10,65,48,10,54,48,10,51,56,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,48,65,10, 69,78,67,79,68,73,78,71,32,56,55,49,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,56,10,52,48,10, 55,48,10,52,48,10,51,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,115,117,99,104,116,104,97,116,10,69,78,67, 79,68,73,78,71,32,56,55,49,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,49,48,10,48,56,10,55,56,10, 48,56,10,49,48,10,69,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,48,67,10,69,78,67,79,68,73,78, 71,32,56,55,49,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,48,10,51,48,10,50,56,10,55,56,10,50,56,10,51, 48,10,69,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,48,68,10,69,78,67,79,68,73,78,71,32,56,55, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,48,56,10,51,56,10,48,56,10,55,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,48,69, 10,69,78,67,79,68,73,78,71,32,56,55,49,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,112,114,111,100,117,99,116,10,69,78,67, 79,68,73,78,71,32,56,55,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,70,67,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,69,67,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,48,10,69,78,67,79,68,73,78, 71,32,56,55,50,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,69,67,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,70,67,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,117,109, 109,97,116,105,111,110,10,69,78,67,79,68,73,78,71,32, 56,55,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,67,10,56,48,10,52,48,10,50,48, 10,49,48,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,67,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,109,105,110,117,115, 10,69,78,67,79,68,73,78,71,32,56,55,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,49,51,10,69,78,67, 79,68,73,78,71,32,56,55,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,50,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,49,52,10,69,78,67,79,68,73,78, 71,32,56,55,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,50,48,10,50,48,10,70,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,114,97, 99,116,105,111,110,10,69,78,67,79,68,73,78,71,32,56, 55,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,52,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,49, 54,10,69,78,67,79,68,73,78,71,32,56,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,56,48,10,52,48,10,52,48,10,50, 48,10,50,48,10,49,48,10,49,48,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,97,115,116,101,114,105,115,107,109,97, 116,104,10,69,78,67,79,68,73,78,71,32,56,55,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,55,48,10, 70,56,10,55,48,10,65,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,49,56,10,69, 78,67,79,68,73,78,71,32,56,55,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,112,101,114,105,111,100,99,101,110,116,101,114,101, 100,10,69,78,67,79,68,73,78,71,32,56,55,50,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,55, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,114,97,100,105,99,97,108,10,69,78, 67,79,68,73,78,71,32,56,55,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,52,10,48, 52,10,48,52,10,48,56,10,48,56,10,48,56,10,49,48, 10,57,48,10,57,48,10,54,48,10,54,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,49,66,10,69,78,67,79,68,73, 78,71,32,56,55,51,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,52,10,52,52,10,65,52, 10,52,56,10,50,56,10,67,56,10,49,48,10,57,48,10, 57,48,10,54,48,10,54,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,49,67,10,69,78,67,79,68,73,78,71,32,56, 55,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,52,10,56,52,10,56,52,10,67,56,10, 69,56,10,52,56,10,49,48,10,57,48,10,57,48,10,54, 48,10,54,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,111,114, 116,105,111,110,97,108,10,69,78,67,79,68,73,78,71,32, 56,55,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,48,10,65,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,102,105,110, 105,116,121,10,69,78,67,79,68,73,78,71,32,56,55,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,65,56,10,65,56,10,53,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,111,114,116,104,111,103,111,110, 97,108,10,69,78,67,79,68,73,78,71,32,56,55,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,110,103,108,101,10,69,78,67, 79,68,73,78,71,32,56,55,51,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,56,10,49,48,10,50,48,10,52,48,10, 56,48,10,70,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,50,49,10,69,78,67,79,68,73,78, 71,32,56,55,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,56,10,57,48,10,54,48,10,54,48,10,65,48,10,70, 56,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,50,10,69,78,67,79,68,73,78,71,32,56,55, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,49,48,10,51,48,10,52, 56,10,56,56,10,52,56,10,51,48,10,49,48,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,50,50,51, 10,69,78,67,79,68,73,78,71,32,56,55,51,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,50,50,52,10,69,78,67, 79,68,73,78,71,32,56,55,52,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,51,48,10,50,48,10,54,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,50,50,53,10,69,78,67,79,68,73,78, 71,32,56,55,52,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,50,50,54,10,69,78,67,79,68,73,78,71,32,56,55, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,56,10,53, 48,10,55,48,10,53,48,10,68,48,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,111,103,105,99,97,108, 97,110,100,10,69,78,67,79,68,73,78,71,32,56,55,52, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,53,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,108,111,103,105,99,97,108,111, 114,10,69,78,67,79,68,73,78,71,32,56,55,52,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,105,110,116,101,114,115,101,99,116,105, 111,110,10,69,78,67,79,68,73,78,71,32,56,55,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,111,110,10,69,78,67, 79,68,73,78,71,32,56,55,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,105,110,116,101,103,114,97,108,10,69,78,67,79,68,73, 78,71,32,56,55,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,50,67,10,69,78,67,79,68,73,78,71,32,56, 55,52,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,52,10,52,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,57,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,50, 68,10,69,78,67,79,68,73,78,71,32,56,55,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 53,52,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,65,56, 10,68,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,50,69,10,69,78, 67,79,68,73,78,71,32,56,55,53,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,56,10,50, 48,10,50,48,10,55,48,10,65,56,10,65,56,10,65,56, 10,55,48,10,50,48,10,50,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,50,70,10,69,78,67,79,68,73, 78,71,32,56,55,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,52,10,52,56,10,52,56, 10,55,56,10,67,67,10,67,67,10,67,67,10,55,56,10, 52,56,10,52,56,10,52,56,10,57,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,51,48,10,69,78,67,79,68,73,78,71,32,56, 55,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,53,52,10,65,56,10,65,56,10,70,56,10, 65,67,10,65,67,10,65,67,10,70,56,10,65,56,10,65, 56,10,65,56,10,68,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,51, 49,10,69,78,67,79,68,73,78,71,32,56,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,49,48,10, 50,56,10,50,48,10,50,48,10,50,48,10,55,52,10,65, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,65,48, 10,52,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,51,50,10,69,78, 67,79,68,73,78,71,32,56,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,49,48,10,50,56,10,50, 48,10,50,48,10,55,52,10,65,67,10,66,67,10,65,56, 10,55,48,10,50,48,10,50,48,10,65,48,10,52,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,51,51,10,69,78,67,79,68,73, 78,71,32,56,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,50,56,10,50,48,10,50,48, 10,55,48,10,65,56,10,66,67,10,65,67,10,55,52,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,116,104, 101,114,101,102,111,114,101,10,69,78,67,79,68,73,78,71, 32,56,55,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,48,48,10,56,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,53,10,69,78,67,79,68,73,78,71,32,56,55,53, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,48,48,10,48,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,54,10, 69,78,67,79,68,73,78,71,32,56,55,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,55,10,69,78,67,79, 68,73,78,71,32,56,55,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,56,10,48,48,10,48, 48,10,52,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,51,56,10,69,78,67,79,68,73,78,71, 32,56,55,54,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,57,10,69,78,67,79,68,73,78,71,32,56,55,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,48,48,10,69,48,10,48,48,10,48,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,65,10, 69,78,67,79,68,73,78,71,32,56,55,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,56,10,48,48,10, 70,56,10,48,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,66,10,69,78,67,79, 68,73,78,71,32,56,55,54,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,52,48,10,65,56,10,65, 56,10,49,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 115,105,109,105,108,97,114,10,69,78,67,79,68,73,78,71, 32,56,55,54,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,65,56,10,65,56,10,49,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,51,68,10,69,78,67,79,68,73,78,71,32,56,55,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,65,56,10,65,56,10,52,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,51,69,10, 69,78,67,79,68,73,78,71,32,56,55,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,52,10, 57,52,10,52,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,51,70,10,69,78,67,79, 68,73,78,71,32,56,55,54,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 52,48,10,65,48,10,65,48,10,65,48,10,50,56,10,50, 56,10,50,56,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,52,48,10,69,78,67,79,68,73,78,71, 32,56,55,54,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,49,48,10,49, 48,10,49,48,10,50,48,10,52,48,10,52,48,10,52,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,52,49,10,69,78,67,79,68,73,78,71,32,56,55,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,54,48,10,65,56,10,65,56,10,51,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,52,50,10, 69,78,67,79,68,73,78,71,32,56,55,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 52,56,10,65,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,52,51,10,69,78,67,79, 68,73,78,71,32,56,55,55,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,56,10,65,56,10,57,48,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,52,52,10,69,78,67,79,68,73,78,71, 32,56,55,55,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,54,56,10,65,56,10,66,48,10,50,48,10,70,56, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,99,111,110,103, 114,117,101,110,116,10,69,78,67,79,68,73,78,71,32,56, 55,55,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 57,48,10,48,48,10,70,56,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 54,10,69,78,67,79,68,73,78,71,32,56,55,55,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,52,56,10,65,56,10,57,48,10,50, 48,10,70,56,10,50,48,10,70,56,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,55,10,69,78, 67,79,68,73,78,71,32,56,55,55,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,54,56,10,65,56,10,66,48,10,50,48,10,70,56, 10,50,48,10,70,56,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,112,112,114,111,120,101,113,117,97,108,10,69,78, 67,79,68,73,78,71,32,56,55,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,65,56,10,57,48,10,52,56, 10,65,56,10,57,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,57,10,69,78,67,79,68,73, 78,71,32,56,55,55,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,54,56,10,65,56,10,66,48,10,54,56,10,65,56,10, 66,48,10,50,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,65,10,69,78,67,79,68,73,78,71,32,56, 55,55,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,65,56,10, 57,48,10,52,56,10,65,56,10,57,48,10,48,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 66,10,69,78,67,79,68,73,78,71,32,56,55,55,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,52,56,10,65,56,10,57,48,10,52,56,10,65, 56,10,57,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,52,67,10,69,78, 67,79,68,73,78,71,32,56,55,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,57,48,10,65,56,10,52,56,10,48,48,10,70,56, 10,48,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,52,68,10,69,78,67,79,68,73, 78,71,32,56,55,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,56,10,55,48,10,48,48,10,55,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,52,69,10,69,78,67,79,68,73,78,71,32,56, 55,56,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,68,56,10,48,48,10,68,56,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,52, 70,10,69,78,67,79,68,73,78,71,32,56,55,56,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,68, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,48,10,69,78, 67,79,68,73,78,71,32,56,55,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,48,48,10,70,56,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,49,10,69,78,67,79,68,73, 78,71,32,56,55,56,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,50,10,69,78,67,79,68,73,78,71,32,56, 55,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,48,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 51,10,69,78,67,79,68,73,78,71,32,56,55,56,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,52,10,69,78, 67,79,68,73,78,71,32,56,55,56,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,66,56,10,48,48, 10,66,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,53,10,69,78,67,79,68,73, 78,71,32,56,55,56,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,56,10,48,48,10,69,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,54,10,69,78,67,79,68,73,78,71,32,56, 55,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 55,10,69,78,67,79,68,73,78,71,32,56,55,57,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,56,10,69,78, 67,79,68,73,78,71,32,56,55,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,48,48,10,70,56,10,48,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,57,10,69,78,67,79,68,73, 78,71,32,56,55,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,53,48,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,65,10,69,78,67,79,68,73,78,71,32,56, 55,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 66,10,69,78,67,79,68,73,78,71,32,56,55,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,56,10,55,48,10,70,56,10,55,48,10,65, 56,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,53,67,10,69,78, 67,79,68,73,78,71,32,56,55,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,70,56,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,53,68,10,69,78,67,79,68,73, 78,71,32,56,55,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,67,10,70,56, 10,70,56,10,48,48,10,70,56,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,53,69,10,69,78,67,79,68,73,78,71,32,56, 55,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,68,48,10,65,56,10,65,56,10, 65,56,10,48,48,10,70,56,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,53, 70,10,69,78,67,79,68,73,78,71,32,56,55,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 53,48,10,49,48,10,50,48,10,48,48,10,50,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,110,111,116,101,113,117,97,108,10,69, 78,67,79,68,73,78,71,32,56,56,48,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,70,56,10,50, 48,10,70,56,10,56,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,101,113,117,105,118,97,108,101,110,99,101,10,69, 78,67,79,68,73,78,71,32,56,56,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,70, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,50,54,50,10,69,78,67,79,68, 73,78,71,32,56,56,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,49, 48,10,49,48,10,70,56,10,50,48,10,70,56,10,50,48, 10,70,56,10,52,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,50,54,51,10,69,78,67,79,68,73,78,71,32, 56,56,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,48,10,70,56,10,48,48,10,70,56,10,48,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,108,101,115,115,101, 113,117,97,108,10,69,78,67,79,68,73,78,71,32,56,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,49,56,10,54,48,10,56, 48,10,54,48,10,49,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,103,114,101,97,116,101,114, 101,113,117,97,108,10,69,78,67,79,68,73,78,71,32,56, 56,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,67,48,10,51,48,10, 48,56,10,51,48,10,67,48,10,48,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 54,10,69,78,67,79,68,73,78,71,32,56,56,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,54,48,10,56,48,10,54,48,10,49, 56,10,48,48,10,70,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,55,10,69,78, 67,79,68,73,78,71,32,56,56,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,56,10,69,78,67,79,68,73, 78,71,32,56,56,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,50,48,10,70,56,10, 50,48,10,70,56,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,57,10,69,78,67,79,68,73,78,71,32,56, 56,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,67,48,10,51,48,10,48,56,10, 51,48,10,67,48,10,50,48,10,70,56,10,50,48,10,70, 56,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 65,10,69,78,67,79,68,73,78,71,32,56,56,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,49,52,10,50,56,10,53,48,10,65, 48,10,53,48,10,50,56,10,49,52,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,66,10,69,78, 67,79,68,73,78,71,32,56,56,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,65,48,10,53,48,10,50,56,10,49,52,10,50,56, 10,53,48,10,65,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,54,67,10,69,78,67,79,68,73, 78,71,32,56,56,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,53,48,10,50,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 50,48,10,53,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,54,68,10,69,78,67,79,68,73,78,71,32,56, 56,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,55,48,10,50,48,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,54, 69,10,69,78,67,79,68,73,78,71,32,56,56,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 50,48,10,50,56,10,51,48,10,50,48,10,54,48,10,65, 48,10,54,48,10,50,48,10,51,48,10,50,56,10,50,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,54,70,10,69,78, 67,79,68,73,78,71,32,56,56,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,65, 48,10,54,48,10,50,48,10,51,48,10,50,56,10,51,48, 10,50,48,10,54,48,10,65,48,10,50,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,48,10,69,78,67,79,68,73, 78,71,32,56,56,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,50,48,10,51,56, 10,54,48,10,65,48,10,54,48,10,51,56,10,50,48,10, 70,56,10,50,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,49,10,69,78,67,79,68,73,78,71,32,56, 56,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,50,48,10,50,48,10,69,48,10,51,48,10, 50,56,10,51,48,10,69,48,10,50,48,10,70,56,10,50, 48,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 50,10,69,78,67,79,68,73,78,71,32,56,56,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,49,56,10,54,48,10,56,48,10,54,48,10,49, 56,10,48,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,51,10,69,78, 67,79,68,73,78,71,32,56,56,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,52,10,69,78,67,79,68,73, 78,71,32,56,56,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,51,56,10,54,48, 10,65,48,10,54,48,10,51,56,10,50,48,10,54,56,10, 65,56,10,66,48,10,50,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,53,10,69,78,67,79,68,73,78,71,32,56, 56,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,69,48,10,51,48,10,50,56,10, 51,48,10,69,48,10,50,48,10,54,56,10,65,56,10,66, 48,10,50,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 54,10,69,78,67,79,68,73,78,71,32,56,56,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,56,10,54,48,10,56,48,10,54,48,10,49,56,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,55,10,69,78, 67,79,68,73,78,71,32,56,56,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,67,48,10,51, 48,10,48,56,10,51,48,10,67,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,56,10,69,78,67,79,68,73, 78,71,32,56,56,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,49,48,10,49,56,10,55,48,10,57,48, 10,54,48,10,51,56,10,69,48,10,51,48,10,52,56,10, 55,48,10,67,48,10,52,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,57,10,69,78,67,79,68,73,78,71,32,56, 56,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,49,48,10,68,48,10,51,48,10,49,56,10,51,48,10, 69,48,10,51,56,10,54,48,10,67,48,10,54,48,10,53, 56,10,52,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 65,10,69,78,67,79,68,73,78,71,32,56,56,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,49,48,10,69, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,66,10,69,78, 67,79,68,73,78,71,32,56,56,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,48,10,52,48,10,51,56,10,52,48, 10,56,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,55,67,10,69,78,67,79,68,73, 78,71,32,56,56,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,49,48,10,69,48,10,49,48,10,69,56,10, 49,48,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,55,68,10,69,78,67,79,68,73,78,71,32,56, 56,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 52,48,10,51,56,10,52,48,10,66,56,10,52,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,55, 69,10,69,78,67,79,68,73,78,71,32,56,56,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,49,48,10,69,48,10,49,48,10,48, 56,10,48,48,10,52,56,10,65,56,10,57,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,55,70,10,69,78, 67,79,68,73,78,71,32,56,56,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 48,10,52,48,10,51,56,10,52,48,10,56,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,56,48,10,69,78,67,79,68,73, 78,71,32,56,56,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,56,10,51,48,10,69,48,10,51,48,10,50,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,56,49,10,69,78,67,79,68,73,78,71,32,56, 56,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,65,48,10, 54,48,10,51,56,10,54,48,10,65,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,112,114,111,112,101,114, 115,117,98,115,101,116,10,69,78,67,79,68,73,78,71,32, 56,56,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,56,10,56,48,10,56,48,10,56,48,10,55,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,112,114,111,112,101, 114,115,117,112,101,114,115,101,116,10,69,78,67,79,68,73, 78,71,32,56,56,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,48,56,10,48,56,10,48,56,10, 70,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,110,111, 116,115,117,98,115,101,116,10,69,78,67,79,68,73,78,71, 32,56,56,51,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,56,10,65,48,10,65,48,10,65,48,10,55,56, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,53,10,69,78,67,79,68,73,78,71,32,56,56,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,48, 10,50,56,10,50,56,10,50,56,10,70,48,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,114,101,102,108,101,120,115,117, 98,115,101,116,10,69,78,67,79,68,73,78,71,32,56,56, 51,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,56,10,56,48,10,56, 48,10,56,48,10,55,56,10,48,48,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,114,101,102,108,101,120,115, 117,112,101,114,115,101,116,10,69,78,67,79,68,73,78,71, 32,56,56,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,48,10,48, 56,10,48,56,10,48,56,10,70,48,10,48,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,56,10,69,78,67,79,68,73,78,71,32,56,56,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,50,48,10,55,56,10,65,48,10,65,48, 10,65,48,10,55,56,10,50,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,57,10, 69,78,67,79,68,73,78,71,32,56,56,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,70,48,10,50,56,10,50,56,10,50,56,10, 70,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,65,10,69,78,67,79, 68,73,78,71,32,56,56,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,56,10,56,48,10,56,48,10,56,48,10,55,56,10,49, 48,10,70,56,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,56,66,10,69,78,67,79,68,73,78,71, 32,56,56,52,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,48,10,48, 56,10,48,56,10,48,56,10,70,48,10,49,48,10,70,56, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,56,67,10,69,78,67,79,68,73,78,71,32,56,56,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,56,10,65,56,10,69,56, 10,70,56,10,69,56,10,65,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,56,68,10, 69,78,67,79,68,73,78,71,32,56,56,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,56,69,10,69,78,67,79, 68,73,78,71,32,56,56,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,56,10,65,56,10,65,56,10,70,56,10,65,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,56,70,10,69,78,67,79,68,73,78,71, 32,56,56,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,48,10,69,78,67,79,68,73,78,71,32,56,56,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,57,49,10, 69,78,67,79,68,73,78,71,32,56,56,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,57,50,10,69,78,67,79, 68,73,78,71,32,56,56,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,56,10,48,56,10,48,56,10,70,56,10,48, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,57,51,10,69,78,67,79,68,73,78,71, 32,56,56,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,57,52,10,69,78,67,79,68,73,78,71,32,56,56,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,99,105,114,99,108,101,112,108, 117,115,10,69,78,67,79,68,73,78,71,32,56,56,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,65,56,10, 70,56,10,65,56,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,50,57,54,10,69, 78,67,79,68,73,78,71,32,56,56,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,70,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,99,105,114,99,108,101,109,117,108,116,105,112,108, 121,10,69,78,67,79,68,73,78,71,32,56,56,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,68,56,10,65, 56,10,68,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,56,10,69,78, 67,79,68,73,78,71,32,56,56,53,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,57,56,10,65,56,10,67,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,57,10,69,78,67,79,68,73, 78,71,32,56,56,53,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,56,56,10,65,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,65,10,69,78,67,79,68,73,78,71,32,56, 56,53,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 66,10,69,78,67,79,68,73,78,71,32,56,56,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,68,56,10,65, 56,10,68,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,57,67,10,69,78, 67,79,68,73,78,71,32,56,56,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,70,56,10,56,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,57,68,10,69,78,67,79,68,73, 78,71,32,56,56,54,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,57,69,10,69,78,67,79,68,73,78,71,32,56, 56,54,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 65,56,10,70,56,10,65,56,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,57, 70,10,69,78,67,79,68,73,78,71,32,56,56,54,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,56,56,10,70, 56,10,56,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,48,10,69,78, 67,79,68,73,78,71,32,56,56,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,68,56,10,65,56,10,68,56, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,50,65,49,10,69,78,67,79,68,73, 78,71,32,56,56,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,56,10,65,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,50,65,50,10,69,78,67,79,68,73,78,71,32,56, 56,54,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,70,56,10,56,48,10,56,48,10,56,48,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,50,65, 51,10,69,78,67,79,68,73,78,71,32,56,56,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,48,56,10,70, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,50,65,52,10,69,78, 67,79,68,73,78,71,32,56,56,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,112,101,114,112,101,110,100,105,99,117,108,97,114,10, 69,78,67,79,68,73,78,71,32,56,56,54,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,54,10,69,78,67,79, 68,73,78,71,32,56,56,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,70,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,55,10,69,78,67,79,68,73,78,71, 32,56,56,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,56,48,10,56, 48,10,70,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,56,10,69,78,67,79,68,73,78,71,32,56,56,55, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,70,56,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,57,10, 69,78,67,79,68,73,78,71,32,56,56,55,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,66,56,10, 65,48,10,65,48,10,65,48,10,65,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,65,10,69,78,67,79, 68,73,78,71,32,56,56,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,67,10,65,56,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,66,10,69,78,67,79,68,73,78,71, 32,56,56,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,48,10,65, 48,10,66,56,10,65,48,10,66,56,10,65,48,10,65,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,65,67,10,69,78,67,79,68,73,78,71,32,56,56,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,57,48,10,57,48, 10,70,56,10,65,48,10,65,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,65,68,10, 69,78,67,79,68,73,78,71,32,56,56,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,56,56,10,56,56,10,70,56,10,57,48,10, 70,56,10,65,48,10,65,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,65,69,10,69,78,67,79, 68,73,78,71,32,56,56,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,65,48,10, 65,48,10,65,56,10,65,56,10,66,67,10,66,48,10,66, 48,10,65,48,10,65,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,65,70,10,69,78,67,79,68,73,78,71, 32,56,56,55,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,65,52,10,65, 52,10,66,67,10,65,56,10,66,67,10,66,48,10,66,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,48,10,69,78,67,79,68,73,78,71,32,56,56,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,48,10,48,56,10,49,48, 10,69,48,10,49,48,10,48,56,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,49,10, 69,78,67,79,68,73,78,71,32,56,56,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,56,48,10,52,48,10,51,56,10, 52,48,10,56,48,10,52,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,50,10,69,78,67,79, 68,73,78,71,32,56,56,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,54,56,10,56,56,10,54,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,51,10,69,78,67,79,68,73,78,71, 32,56,56,56,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,67, 48,10,66,48,10,56,56,10,66,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,52,10,69,78,67,79,68,73,78,71,32,56,56,56, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,56,10,54,56,10,56,56, 10,54,56,10,49,56,10,48,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,53,10, 69,78,67,79,68,73,78,71,32,56,56,56,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,67,48,10,66,48,10,56,56,10,66,48,10, 67,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,54,10,69,78,67,79, 68,73,78,71,32,56,56,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,66,56,10,53,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,55,10,69,78,67,79,68,73,78,71, 32,56,56,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,53,48,10,69,56,10,53,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,56,10,69,78,67,79,68,73,78,71,32,56,56,56, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,49,48, 10,69,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,57,10, 69,78,67,79,68,73,78,71,32,56,56,56,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,50,48,10,68,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,65,10,69,78,67,79, 68,73,78,71,32,56,56,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,66,10,69,78,67,79,68,73,78,71, 32,56,56,57,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,66,67,10,69,78,67,79,68,73,78,71,32,56,56,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,66,68,10, 69,78,67,79,68,73,78,71,32,56,56,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,56,56,10,56,56,10, 53,48,10,53,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,66,69,10,69,78,67,79, 68,73,78,71,32,56,56,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,67, 48,10,65,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,66,70,10,69,78,67,79,68,73,78,71, 32,56,56,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,56,10,49,56,10,50,56,10,50,56,10,52,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,48,10,69,78,67,79,68,73,78,71,32,56,56,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,52,56, 10,52,56,10,52,56,10,56,52,10,56,52,10,56,52,10, 56,52,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,49,10, 69,78,67,79,68,73,78,71,32,56,56,57,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,52, 10,56,52,10,56,52,10,56,52,10,52,56,10,52,56,10, 52,56,10,51,48,10,51,48,10,51,48,10,51,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,50,10,69,78,67,79, 68,73,78,71,32,56,56,57,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,48,10,52,56,10, 56,52,10,56,52,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,51,10,69,78,67,79,68,73,78,71, 32,56,56,57,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,52,10,56,52,10,56,52,10,56, 52,10,56,52,10,56,52,10,56,52,10,56,52,10,56,52, 10,52,56,10,51,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,52,10,69,78,67,79,68,73,78,71,32,56,57,48, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,56,56,10,53,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,100,111,116,109,97,116,104,10, 69,78,67,79,68,73,78,71,32,56,57,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,54,10,69,78,67,79, 68,73,78,71,32,56,57,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,55,48,10,55,48,10,56, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,55,10,69,78,67,79,68,73,78,71, 32,56,57,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,56, 56,10,53,48,10,70,56,10,53,48,10,56,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,56,10,69,78,67,79,68,73,78,71,32,56,57,48, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,68,56, 10,65,56,10,68,56,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,57,10, 69,78,67,79,68,73,78,71,32,56,57,48,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,56,10,68,48,10,65,48,10, 68,48,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,65,10,69,78,67,79, 68,73,78,71,32,56,57,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,53,56,10,50,56,10,53,56,10,56, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,66,10,69,78,67,79,68,73,78,71, 32,56,57,48,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 48,10,52,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,67,67,10,69,78,67,79,68,73,78,71,32,56,57,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,49,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,67,68,10, 69,78,67,79,68,73,78,71,32,56,57,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,65,56,10, 52,56,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,67,69,10,69,78,67,79, 68,73,78,71,32,56,57,49,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,56,56,10,53,48,10,53,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,67,70,10,69,78,67,79,68,73,78,71, 32,56,57,49,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,53,48,10,53,48, 10,56,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,48,10,69,78,67,79,68,73,78,71,32,56,57,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,57,56,10,65,48,10,57,56,10,52,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,49,10, 69,78,67,79,68,73,78,71,32,56,57,49,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,48,10,49,48,10,67,56,10, 50,56,10,67,56,10,49,48,10,69,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,50,10,69,78,67,79, 68,73,78,71,32,56,57,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,65,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,51,10,69,78,67,79,68,73,78,71, 32,56,57,49,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,52,10,69,78,67,79,68,73,78,71,32,56,57,49, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,53,10, 69,78,67,79,68,73,78,71,32,56,57,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,53,48,10,53,48,10,53,48,10,70,56,10,53,48,10, 53,48,10,70,56,10,53,48,10,53,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,54,10,69,78,67,79, 68,73,78,71,32,56,57,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,56,10,52,48,10,50, 48,10,49,48,10,48,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,55,10,69,78,67,79,68,73,78,71, 32,56,57,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,48,10,52,48,10,50, 48,10,49,48,10,56,56,10,49,48,10,50,48,10,52,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,56,10,69,78,67,79,68,73,78,71,32,56,57,50, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,52,10,50,56, 10,53,52,10,65,56,10,53,52,10,50,56,10,49,52,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,57,10, 69,78,67,79,68,73,78,71,32,56,57,50,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,65,48,10,53,48,10,65,56,10, 53,52,10,65,56,10,53,48,10,65,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,65,10,69,78,67,79, 68,73,78,71,32,56,57,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,49,56,10,54,48,10,56,48,10, 54,48,10,49,56,10,48,48,10,70,56,10,48,48,10,67, 48,10,51,48,10,48,56,10,51,48,10,67,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,66,10,69,78,67,79,68,73,78,71, 32,56,57,50,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,67,48,10,51,48,10,48,56,10,51,48,10,67, 48,10,48,48,10,70,56,10,48,48,10,49,56,10,54,48, 10,56,48,10,54,48,10,49,56,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,68,67,10,69,78,67,79,68,73,78,71,32,56,57,50, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,49,56, 10,54,48,10,56,48,10,54,48,10,49,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,68,68,10, 69,78,67,79,68,73,78,71,32,56,57,50,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,48,10,67,48,10,51,48,10, 48,56,10,51,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,68,69,10,69,78,67,79, 68,73,78,71,32,56,57,50,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,56,10,49,48,10,69,56,10,49,48,10,69,48,10,49, 48,10,48,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,68,70,10,69,78,67,79,68,73,78,71, 32,56,57,50,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,56,48,10,52, 48,10,66,56,10,52,48,10,51,56,10,52,48,10,56,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,48,10,69,78,67,79,68,73,78,71,32,56,57,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,56,10,51,48, 10,69,48,10,51,48,10,69,56,10,51,48,10,50,56,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,49,10, 69,78,67,79,68,73,78,71,32,56,57,50,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,65,48,10,54,48,10,51,56,10, 54,48,10,66,56,10,54,48,10,65,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,50,10,69,78,67,79, 68,73,78,71,32,56,57,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,50,48,10,50,48,10, 70,56,10,65,48,10,65,48,10,65,48,10,70,56,10,50, 48,10,70,56,10,50,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,51,10,69,78,67,79,68,73,78,71, 32,56,57,51,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,50,48,10,50,48,10,70,56,10,50, 56,10,50,56,10,50,56,10,70,56,10,50,48,10,70,56, 10,50,48,10,50,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,52,10,69,78,67,79,68,73,78,71,32,56,57,51, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,70,56,10,49,48,10,70,56,10,52,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,53,10, 69,78,67,79,68,73,78,71,32,56,57,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 70,56,10,49,48,10,70,56,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,54,10,69,78,67,79, 68,73,78,71,32,56,57,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,56,10, 54,48,10,56,48,10,54,48,10,51,56,10,50,48,10,54, 56,10,65,56,10,66,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,55,10,69,78,67,79,68,73,78,71, 32,56,57,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,67,48,10,51,48,10,48, 56,10,51,48,10,69,48,10,50,48,10,54,56,10,65,56, 10,66,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,56,10,69,78,67,79,68,73,78,71,32,56,57,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,49,48,10,69,48,10,49,48, 10,50,56,10,50,48,10,54,56,10,65,56,10,66,48,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,57,10, 69,78,67,79,68,73,78,71,32,56,57,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,52,48,10,51,56,10,52,48,10,65,48,10, 50,48,10,54,56,10,65,56,10,66,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,65,10,69,78,67,79, 68,73,78,71,32,56,57,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,51,56,10,54,56,10,65,56,10,54,56,10,51, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,66,10,69,78,67,79,68,73,78,71, 32,56,57,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,69, 48,10,66,48,10,65,56,10,66,48,10,69,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,69,67,10,69,78,67,79,68,73,78,71,32,56,57,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,50,48,10,50,48,10,51,56,10,54,56,10,65,56, 10,54,56,10,51,56,10,50,48,10,70,56,10,50,48,10, 50,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,69,68,10, 69,78,67,79,68,73,78,71,32,56,57,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,50,48, 10,50,48,10,69,48,10,66,48,10,65,56,10,66,48,10, 69,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,69,69,10,69,78,67,79, 68,73,78,71,32,56,57,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,50,48,10,48,48,10,48, 48,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,69,70,10,69,78,67,79,68,73,78,71, 32,56,57,52,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,65,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,48,10,69,78,67,79,68,73,78,71,32,56,57,52, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,56,10,48,48, 10,50,48,10,48,48,10,56,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,49,10, 69,78,67,79,68,73,78,71,32,56,57,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,56,48,10,48,48,10,50,48,10, 48,48,10,48,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,50,10,69,78,67,79, 68,73,78,71,32,56,57,52,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,51,56,10,52,48,10,52,48,10,70,48,10,52, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,51,10,69,78,67,79,68,73,78,71, 32,56,57,52,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 56,10,52,48,10,56,56,10,70,56,10,56,56,10,52,48, 10,51,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,52,10,69,78,67,79,68,73,78,71,32,56,57,52, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,52,56,10,55,56,10,52,56,10,52,48,10,51,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,53,10, 69,78,67,79,68,73,78,71,32,56,57,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,51,48,10,48,48,10,51,56,10,52,48,10,56,48,10, 70,48,10,56,48,10,52,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,54,10,69,78,67,79, 68,73,78,71,32,56,57,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,48,10,51,56,10,52,48,10,56,48,10,70,48,10,56, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,55,10,69,78,67,79,68,73,78,71, 32,56,57,53,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,55,56,10,48, 48,10,51,56,10,52,48,10,55,48,10,52,48,10,51,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,56,10,69,78,67,79,68,73,78,71,32,56,57,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,52,48, 10,56,48,10,70,48,10,56,48,10,52,48,10,51,56,10, 48,48,10,70,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,57,10, 69,78,67,79,68,73,78,71,32,56,57,53,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,56,10,52,48,10,70,48,10, 56,48,10,70,48,10,52,48,10,51,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,65,10,69,78,67,79, 68,73,78,71,32,56,57,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,48,10,49,48,10,49,48,10,55,56,10,49, 48,10,49,48,10,69,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,66,10,69,78,67,79,68,73,78,71, 32,56,57,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,49,48,10,56,56,10,70,56,10,56,56,10,49,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 50,70,67,10,69,78,67,79,68,73,78,71,32,56,57,53, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,48,56, 10,52,56,10,55,56,10,52,56,10,48,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,50,70,68,10, 69,78,67,79,68,73,78,71,32,56,57,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,70,56,10,48,48,10,69,48,10,49,48,10,48,56,10, 55,56,10,48,56,10,49,48,10,69,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,50,70,69,10,69,78,67,79, 68,73,78,71,32,56,57,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,56,10,48,48,10,55,48,10,48,56,10,51,56,10,48, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,50,70,70,10,69,78,67,79,68,73,78,71, 32,56,57,53,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,56,48,10,56,48,10,70,56,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,48,48,10,69,78,67,79,68,73,78,71,32,56,57,54, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,54,56,10,57,48,10,65,56,10,52,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,48,49,10, 69,78,67,79,68,73,78,71,32,56,57,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,51,48,10,65,56,10, 54,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,104,111,117,115,101,10,69,78,67,79,68,73, 78,71,32,56,57,54,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,53,48,10,53,48,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,51,10,69,78,67,79,68,73,78,71,32,56, 57,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 52,10,69,78,67,79,68,73,78,71,32,56,57,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,53,10,69,78, 67,79,68,73,78,71,32,56,57,54,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,48,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,54,10,69,78,67,79,68,73, 78,71,32,56,57,54,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,55,10,69,78,67,79,68,73,78,71,32,56, 57,54,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,49,48,10,49,48,10,50,48,10,50,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 56,10,69,78,67,79,68,73,78,71,32,56,57,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 55,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,57,10,69,78, 67,79,68,73,78,71,32,56,57,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,65,10,69,78,67,79,68,73, 78,71,32,56,57,55,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,55,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,66,10,69,78,67,79,68,73,78,71,32,56, 57,55,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,55,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,48, 67,10,69,78,67,79,68,73,78,71,32,56,57,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,48,68,10,69,78, 67,79,68,73,78,71,32,56,57,55,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,48,69,10,69,78,67,79,68,73, 78,71,32,56,57,55,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,48,70,10,69,78,67,79,68,73,78,71,32,56, 57,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,114,101,118,108,111,103, 105,99,97,108,110,111,116,10,69,78,67,79,68,73,78,71, 32,56,57,55,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,56,48,10,56,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,49,10,69,78,67,79,68,73,78,71,32,56,57,55, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,55,48, 10,53,48,10,55,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,50,10, 69,78,67,79,68,73,78,71,32,56,57,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,51,10,69,78,67,79, 68,73,78,71,32,56,57,55,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,52,10,69,78,67,79,68,73,78,71, 32,56,57,56,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,53,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,53,10,69,78,67,79,68,73,78,71,32,56,57,56, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,53,48,10,56,56,10,65,56,10,53,48,10,65,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,54,10, 69,78,67,79,68,73,78,71,32,56,57,56,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,55,48,10,65,56,10,70,56,10, 65,56,10,55,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,55,10,69,78,67,79, 68,73,78,71,32,56,57,56,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,70, 56,10,53,48,10,53,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,56,10,69,78,67,79,68,73,78,71, 32,56,57,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,65,56,10,55,48,10,50,48,10,55,48,10,65,56, 10,53,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,57,10,69,78,67,79,68,73,78,71,32,56,57,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,65,10, 69,78,67,79,68,73,78,71,32,56,57,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,53,48,10,55,48,10,65,56,10,66,56,10, 56,56,10,55,48,10,53,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,66,10,69,78,67,79, 68,73,78,71,32,56,57,56,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,55,48,10,50,48,10,50,48,10,53, 48,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,51,49,67,10,69,78,67,79,68,73,78,71, 32,56,57,56,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 48,10,56,48,10,56,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 51,49,68,10,69,78,67,79,68,73,78,71,32,56,57,56, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,56,10,48,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,51,49,69,10, 69,78,67,79,68,73,78,71,32,56,57,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,69,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,51,49,70,10,69,78,67,79, 68,73,78,71,32,56,57,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,51, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 105,110,116,101,103,114,97,108,116,112,10,69,78,67,79,68, 73,78,71,32,56,57,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,48,10,50,56,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,105, 110,116,101,103,114,97,108,98,116,10,69,78,67,79,68,73, 78,71,32,56,57,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,65,48,10,52,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,50,50,10,69,78,67,79,68,73,78,71,32,56, 57,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 51,10,69,78,67,79,68,73,78,71,32,56,57,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,50,52,10,69,78, 67,79,68,73,78,71,32,56,57,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,50,48, 10,53,48,10,56,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,51,50,53,10,69,78,67,79,68,73, 78,71,32,56,57,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,56,10,67,48,10,50,48,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,51,50,54,10,69,78,67,79,68,73,78,71,32,56, 57,57,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,48,10, 68,56,10,65,52,10,68,56,10,70,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,51,50, 55,10,69,78,67,79,68,73,78,71,32,56,57,57,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,68,56,10,65, 56,10,68,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,51,50,56,10,69,78, 67,79,68,73,78,71,32,57,48,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,67,10,56, 52,10,65,67,10,56,52,10,65,67,10,56,52,10,65,67, 10,56,52,10,65,67,10,56,52,10,70,67,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,97,110,103,108,101,108,101,102,116,10,69,78,67,79, 68,73,78,71,32,57,48,48,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,56,10,49,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 97,110,103,108,101,114,105,103,104,116,10,69,78,67,79,68, 73,78,71,32,57,48,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,56,10,49,48,10,49,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,66,10,69,78,67,79,68,73,78,71,32, 57,48,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,67, 10,54,67,10,57,52,10,54,67,10,51,67,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 50,67,10,69,78,67,79,68,73,78,71,32,57,48,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,53,48,10,56,56,10, 56,56,10,56,56,10,53,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,50,68,10,69, 78,67,79,68,73,78,71,32,57,48,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,49,48,10,50,48,10,54,48,10,68,56,10,51, 48,10,50,48,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,50,69,10,69,78,67,79,68, 73,78,71,32,57,48,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,67,10,65,56,10,55,48,10,52,48,10,67,48, 10,69,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,50,70,10,69,78,67,79,68,73,78,71,32, 57,48,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,48,48,10,70,56,10,48,48,10,55,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,48,10,69,78,67,79,68,73,78,71,32,57,48,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,70,67,10,52,56,10,52,56,10, 52,56,10,57,48,10,57,48,10,57,48,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,49,10,69, 78,67,79,68,73,78,71,32,57,48,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,52,48,10,52,48,10,65,56,10,70,67,10,65, 56,10,52,48,10,52,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,50,10,69,78,67,79,68, 73,78,71,32,57,48,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,52, 48,10,54,48,10,53,48,10,70,67,10,53,48,10,54,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,51,10,69,78,67,79,68,73,78,71,32, 57,48,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,56,48,10,67,48,10,65,48,10,57,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,52,10,69,78,67,79,68,73,78,71,32,57,48,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,52,10,56,52,10,56,52,10,56,52,10,70,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,53,10,69, 78,67,79,68,73,78,71,32,57,48,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,54,10,69,78,67,79,68, 73,78,71,32,57,48,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,55,10,69,78,67,79,68,73,78,71,32, 57,48,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,55,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,55,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,56,10,69,78,67,79,68,73,78,71,32,57,48,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 56,56,10,70,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,57,10,69, 78,67,79,68,73,78,71,32,57,48,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,65,56,10,56,56,10,70,56,10,56, 56,10,65,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,65,10,69,78,67,79,68, 73,78,71,32,57,48,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,56,56,10,56, 56,10,65,56,10,68,56,10,56,56,10,68,56,10,65,56, 10,56,56,10,56,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,66,10,69,78,67,79,68,73,78,71,32, 57,48,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,56,56, 10,65,56,10,68,56,10,65,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 51,67,10,69,78,67,79,68,73,78,71,32,57,48,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,65,56,10,68,56,10,56,56,10, 56,56,10,56,56,10,68,56,10,65,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,51,68,10,69, 78,67,79,68,73,78,71,32,57,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,51,69,10,69,78,67,79,68, 73,78,71,32,57,48,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,65,56,10,68,56,10,65,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,51,70,10,69,78,67,79,68,73,78,71,32, 57,48,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,56,10,49,48, 10,49,48,10,70,56,10,52,48,10,52,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,48,10,69,78,67,79,68,73,78,71,32,57,48,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,48,10,52,48,10,52,48,10, 70,56,10,49,48,10,49,48,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,49,10,69, 78,67,79,68,73,78,71,32,57,48,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 57,56,10,57,56,10,57,56,10,65,56,10,65,56,10,65, 56,10,67,56,10,67,56,10,67,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,50,10,69,78,67,79,68, 73,78,71,32,57,48,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,67,56,10,67, 56,10,67,56,10,65,56,10,65,56,10,65,56,10,57,56, 10,57,56,10,57,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,51,10,69,78,67,79,68,73,78,71,32, 57,48,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,57,56, 10,65,56,10,67,56,10,65,56,10,57,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,52,10,69,78,67,79,68,73,78,71,32,57,48,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,67,56,10,65,56,10, 57,56,10,65,56,10,67,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,53,10,69, 78,67,79,68,73,78,71,32,57,48,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,49,48,10,51,48,10,53,48,10,70,56,10,53, 48,10,51,48,10,49,48,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,54,10,69,78,67,79,68, 73,78,71,32,57,48,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,48,10,52, 48,10,54,48,10,53,48,10,70,56,10,53,48,10,54,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,55,10,69,78,67,79,68,73,78,71,32, 57,48,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,65,56, 10,67,56,10,70,56,10,67,56,10,65,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,56,10,69,78,67,79,68,73,78,71,32,57,48,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,65,56,10,57,56,10, 70,56,10,57,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,57,10,69, 78,67,79,68,73,78,71,32,57,48,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,55,48,10,67,56,10,65,56,10,57, 56,10,55,48,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,65,10,69,78,67,79,68, 73,78,71,32,57,48,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,66,10,69,78,67,79,68,73,78,71,32, 57,48,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,55,48,10,55,48,10,65,56,10,70,56,10, 50,48,10,50,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 52,67,10,69,78,67,79,68,73,78,71,32,57,48,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,52,68,10,69, 78,67,79,68,73,78,71,32,57,48,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,65,56,10,65,56,10,68,56,10,68, 56,10,70,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,52,69,10,69,78,67,79,68, 73,78,71,32,57,48,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,65,56,10,65,56,10,55,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,52,70,10,69,78,67,79,68,73,78,71,32, 57,48,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,50,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,48,10,69,78,67,79,68,73,78,71,32,57,48,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,65,56,10,70,56,10,65,56,10,65,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,49,10,69, 78,67,79,68,73,78,71,32,57,48,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,50,10,69,78,67,79,68, 73,78,71,32,57,48,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,70,56,10,65,56,10,55,48,10,55,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,51,10,69,78,67,79,68,73,78,71,32, 57,48,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,68,56,10,68,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,52,10,69,78,67,79,68,73,78,71,32,57,48,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,70,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,53,10,69, 78,67,79,68,73,78,71,32,57,48,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,55,48,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,54,10,69,78,67,79,68, 73,78,71,32,57,48,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,50,48,10,65,56, 10,55,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,55,10,69,78,67,79,68,73,78,71,32, 57,48,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,65,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,70,56,10, 65,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,56,10,69,78,67,79,68,73,78,71,32,57,48,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,57,10,69, 78,67,79,68,73,78,71,32,57,48,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,53,48,10,53,48,10,53,48,10,56, 56,10,56,56,10,70,56,10,48,48,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,65,10,69,78,67,79,68, 73,78,71,32,57,48,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,53,48,10,56,56,10,53,48, 10,50,48,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,66,10,69,78,67,79,68,73,78,71,32, 57,48,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,53,48,10,50,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 53,67,10,69,78,67,79,68,73,78,71,32,57,48,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,48,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,53,68,10,69, 78,67,79,68,73,78,71,32,57,48,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,65,56,10,68, 56,10,65,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,53,69,10,69,78,67,79,68, 73,78,71,32,57,48,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,65,56,10,65, 56,10,65,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,53,70,10,69,78,67,79,68,73,78,71,32, 57,48,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,70,56,10,65,56,10,68,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,48,10,69,78,67,79,68,73,78,71,32,57,48,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,56,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,65,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,49,10,69, 78,67,79,68,73,78,71,32,57,48,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,50,10,69,78,67,79,68, 73,78,71,32,57,48,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,53,48,10,53,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,51,10,69,78,67,79,68,73,78,71,32, 57,48,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,53,48,10,53,48,10,48,48,10,50,48, 10,50,48,10,70,56,10,55,48,10,55,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,52,10,69,78,67,79,68,73,78,71,32,57,48,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,50,48,10, 53,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,53,10,69, 78,67,79,68,73,78,71,32,57,48,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,54,10,69,78,67,79,68, 73,78,71,32,57,48,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,65, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,55,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,55,10,69,78,67,79,68,73,78,71,32, 57,48,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,49,48,10,49,48,10,55,56, 10,57,48,10,57,48,10,57,48,10,57,48,10,55,56,10, 49,48,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,56,10,69,78,67,79,68,73,78,71,32,57,48,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,53,48,10,53,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,65,56,10,65,56,10,49,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,57,10,69, 78,67,79,68,73,78,71,32,57,48,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,53,48,10, 53,48,10,48,48,10,48,48,10,67,48,10,51,48,10,48, 56,10,51,48,10,67,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,65,10,69,78,67,79,68, 73,78,71,32,57,48,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,48,10,48,48, 10,51,48,10,50,48,10,52,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,66,10,69,78,67,79,68,73,78,71,32, 57,48,54,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,56,56,10,56,56, 10,53,48,10,53,56,10,65,56,10,66,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 54,67,10,69,78,67,79,68,73,78,71,32,57,48,54,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,53,48,10,56,56,10,69,56,10, 66,56,10,56,56,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,54,68,10,69, 78,67,79,68,73,78,71,32,57,48,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,54,56,10,65,56,10,66, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,54,69,10,69,78,67,79,68, 73,78,71,32,57,48,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,48,48,10,48,48,10,51,48, 10,50,48,10,52,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,54,70,10,69,78,67,79,68,73,78,71,32, 57,48,55,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,56,56,10,57,56,10,57,56, 10,70,56,10,65,56,10,70,56,10,67,56,10,67,56,10, 56,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,48,10,69,78,67,79,68,73,78,71,32,57,48,55,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,70,56,10,56,56,10,65,56,10,68,56,10,57,56,10, 65,56,10,65,56,10,56,56,10,65,56,10,56,56,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,49,10,69, 78,67,79,68,73,78,71,32,57,48,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,69,56,10,66,56,10,56,56,10,53,48,10,53, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,50,10,69,78,67,79,68, 73,78,71,32,57,48,55,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,53,48,10,53,48,10,56,56,10,69,56, 10,66,56,10,56,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,51,10,69,78,67,79,68,73,78,71,32, 57,48,55,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,52,10,69,78,67,79,68,73,78,71,32,57,48,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,70,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,53,10,69, 78,67,79,68,73,78,71,32,57,48,55,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,53,48,10,56,56,10,65, 56,10,65,56,10,65,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,54,10,69,78,67,79,68, 73,78,71,32,57,48,55,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,54,56,10,57,48,10,57,48,10,57,48,10,57,48, 10,54,56,10,48,48,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,55,10,69,78,67,79,68,73,78,71,32, 57,48,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,55,48, 10,56,56,10,54,48,10,56,48,10,56,56,10,55,48,10, 48,48,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,56,10,69,78,67,79,68,73,78,71,32,57,48,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,49,48,10,48,48,10,70, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,57,10,69, 78,67,79,68,73,78,71,32,57,48,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,56,56,10,65,56,10,65, 56,10,65,56,10,53,48,10,48,48,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,65,10,69,78,67,79,68, 73,78,71,32,57,48,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,54,56,10,57,48,10,57,48,10,57,48, 10,57,48,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,66,10,69,78,67,79,68,73,78,71,32, 57,48,56,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,48,56,10,48,56, 10,51,56,10,49,67,10,57,48,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 55,67,10,69,78,67,79,68,73,78,71,32,57,48,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,54,48,10,52,48,10,67,48,10, 67,48,10,52,48,10,54,48,10,70,67,10,67,48,10,69, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,55,68,10,69, 78,67,79,68,73,78,71,32,57,48,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,55,69,10,69,78,67,79,68, 73,78,71,32,57,48,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,56,10,70,56,10,53,48, 10,68,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,55,70,10,69,78,67,79,68,73,78,71,32, 57,48,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,55,48, 10,70,56,10,70,56,10,70,56,10,55,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,48,10,69,78,67,79,68,73,78,71,32,57,48,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,55,48,10,48,56,10,55,56,10, 56,56,10,56,56,10,55,56,10,48,48,10,56,56,10,53, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,49,10,69, 78,67,79,68,73,78,71,32,57,48,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,54,48,10,49,48,10,55, 48,10,57,48,10,57,48,10,55,52,10,48,48,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,50,10,69,78,67,79,68, 73,78,71,32,57,48,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,56,10,50,52,10,54,67,10,66,52, 10,66,52,10,54,67,10,48,48,10,54,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,51,10,69,78,67,79,68,73,78,71,32, 57,48,57,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,57,52,10,51,48,10,68,52,10,53,48,10, 66,52,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,52,10,69,78,67,79,68,73,78,71,32,57,48,57,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 68,52,10,68,52,10,68,52,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,53,10,69, 78,67,79,68,73,78,71,32,57,48,57,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,70,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,70,56,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,54,10,69,78,67,79,68, 73,78,71,32,57,48,57,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,53,48,10,56,56,10,50,52,10,70,52,10,50,52, 10,56,56,10,53,48,10,50,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,55,10,69,78,67,79,68,73,78,71,32, 57,48,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,56, 10,49,67,10,50,56,10,52,48,10,57,67,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,56,10,69,78,67,79,68,73,78,71,32,57,48,57,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,65,56,10, 55,48,10,65,56,10,55,48,10,65,56,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,57,10,69, 78,67,79,68,73,78,71,32,57,48,57,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,56,10,56,52,10,56, 52,10,67,67,10,66,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,65,10,69,78,67,79,68, 73,78,71,32,57,48,57,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,56,52,10,70,67,10,67,67,10,66,52, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,66,10,69,78,67,79,68,73,78,71,32, 57,48,57,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,69,56, 10,67,52,10,65,52,10,49,52,10,56,52,10,55,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 56,67,10,69,78,67,79,68,73,78,71,32,57,49,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,48,10,67,56,10, 48,48,10,53,48,10,65,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,56,68,10,69, 78,67,79,68,73,78,71,32,57,49,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,68,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,56,69,10,69,78,67,79,68, 73,78,71,32,57,49,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,53,48,10,53,48,10,53,48,10,53,48, 10,70,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,56,70,10,69,78,67,79,68,73,78,71,32, 57,49,48,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,50,48,10,53,48,10,56,56,10,53,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,48,10,69,78,67,79,68,73,78,71,32,57,49,48,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,53,48,10, 56,56,10,53,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,49,10,69, 78,67,79,68,73,78,71,32,57,49,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,50,48,10,53,48,10,70, 56,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,50,10,69,78,67,79,68, 73,78,71,32,57,49,48,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,53,48,10,70,56,10,53,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,51,10,69,78,67,79,68,73,78,71,32, 57,49,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,48,10,65,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,52,10,69,78,67,79,68,73,78,71,32,57,49,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,51,48,10,52,56,10,56,52,10, 56,52,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,53,10,69, 78,67,79,68,73,78,71,32,57,49,48,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,70,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,54,10,69,78,67,79,68, 73,78,71,32,57,49,49,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,55,48,10,55,48,10,54,48,10,54,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,55,10,69,78,67,79,68,73,78,71,32, 57,49,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,52,56,10,50,56, 10,52,56,10,70,56,10,52,56,10,50,56,10,52,56,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,56,10,69,78,67,79,68,73,78,71,32,57,49,49,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,48,10,57,48,10,65,48,10,57,48,10, 70,56,10,57,48,10,65,48,10,57,48,10,70,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,57,10,69, 78,67,79,68,73,78,71,32,57,49,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,51,56,10,54,56,10,52,56,10,67,67,10,67, 67,10,67,67,10,70,67,10,70,67,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,65,10,69,78,67,79,68, 73,78,71,32,57,49,49,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,56,10,56,52,10,57,52,10,65,52,10,56,52, 10,55,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,66,10,69,78,67,79,68,73,78,71,32, 57,49,49,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,48,10,50,48,10,50,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 57,67,10,69,78,67,79,68,73,78,71,32,57,49,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,57,68,10,69, 78,67,79,68,73,78,71,32,57,49,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,50,48,10,50,48,10,49,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,57,69,10,69,78,67,79,68, 73,78,71,32,57,49,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,52,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,57,70,10,69,78,67,79,68,73,78,71,32, 57,49,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,48,10,69,78,67,79,68,73,78,71,32,57,49,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,49,10,69, 78,67,79,68,73,78,71,32,57,49,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,55,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,50,10,69,78,67,79,68, 73,78,71,32,57,49,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,51,10,69,78,67,79,68,73,78,71,32, 57,49,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,55,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,52,10,69,78,67,79,68,73,78,71,32,57,49,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,53,10,69, 78,67,79,68,73,78,71,32,57,49,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,54,10,69,78,67,79,68, 73,78,71,32,57,49,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,55,10,69,78,67,79,68,73,78,71,32, 57,49,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,49,56,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,56,10,69,78,67,79,68,73,78,71,32,57,49,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 67,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,57,10,69, 78,67,79,68,73,78,71,32,57,49,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,65,10,69,78,67,79,68, 73,78,71,32,57,49,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,66,10,69,78,67,79,68,73,78,71,32, 57,49,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,67,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 65,67,10,69,78,67,79,68,73,78,71,32,57,49,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,65,68,10,69, 78,67,79,68,73,78,71,32,57,49,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,65,69,10,69,78,67,79,68, 73,78,71,32,57,49,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,65,70,10,69,78,67,79,68,73,78,71,32, 57,49,51,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,48,10,69,78,67,79,68,73,78,71,32,57,49,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,49,56, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,67,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,49,10,69, 78,67,79,68,73,78,71,32,57,49,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,67,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,49,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,50,10,69,78,67,79,68, 73,78,71,32,57,49,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,67,10,56,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,49,48,10,49,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,51,10,69,78,67,79,68,73,78,71,32, 57,49,51,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,48,10,49,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 56,48,10,70,67,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,52,10,69,78,67,79,68,73,78,71,32,57,49,52,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,53,10,69, 78,67,79,68,73,78,71,32,57,49,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,54,10,69,78,67,79,68, 73,78,71,32,57,49,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,56, 56,10,70,56,10,48,48,10,48,48,10,48,48,10,70,56, 10,56,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,55,10,69,78,67,79,68,73,78,71,32, 57,49,52,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,65,48,10,65,48,10,54,48,10,54,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,56,10,69,78,67,79,68,73,78,71,32,57,49,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,57,10,69, 78,67,79,68,73,78,71,32,57,49,52,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,52,10,48,52,10, 48,52,10,48,52,10,48,52,10,48,52,10,48,52,10,48, 52,10,48,52,10,48,52,10,48,52,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,65,10,69,78,67,79,68, 73,78,71,32,57,49,52,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,66,10,69,78,67,79,68,73,78,71,32, 57,49,52,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 66,67,10,69,78,67,79,68,73,78,71,32,57,49,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,66,68,10,69, 78,67,79,68,73,78,71,32,57,49,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,66,69,10,69,78,67,79,68, 73,78,71,32,57,49,53,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,66,70,10,69,78,67,79,68,73,78,71,32, 57,49,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,48,10,69,78,67,79,68,73,78,71,32,57,49,53,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,48,10,65,56,10, 65,56,10,65,56,10,55,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,49,10,69, 78,67,79,68,73,78,71,32,57,49,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,55,48,10,65,56,10,65,56,10,65, 56,10,55,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,50,10,69,78,67,79,68, 73,78,71,32,57,49,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,65,56,10,65,56,10,65,56,10,55,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,51,10,69,78,67,79,68,73,78,71,32, 57,49,53,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,55,48,10,55,48,10,65,56,10,70,56,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,52,10,69,78,67,79,68,73,78,71,32,57,49,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,55,48,10, 55,48,10,65,56,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,53,10,69, 78,67,79,68,73,78,71,32,57,49,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,55,48,10,55,48,10,65, 56,10,70,56,10,50,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,54,10,69,78,67,79,68, 73,78,71,32,57,49,53,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,54,56,10,66,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,55,10,69,78,67,79,68,73,78,71,32, 57,49,53,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,50,48,10,50,48, 10,50,48,10,54,56,10,66,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,56,10,69,78,67,79,68,73,78,71,32,57,49,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 54,56,10,66,48,10,50,48,10,50,48,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,57,10,69, 78,67,79,68,73,78,71,32,57,49,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,65,10,69,78,67,79,68, 73,78,71,32,57,49,54,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,51,67,66,10,69,78,67,79,68,73,78,71,32, 57,49,54,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,51, 67,67,10,69,78,67,79,68,73,78,71,32,57,49,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,51,67,68,10,69, 78,67,79,68,73,78,71,32,57,49,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,65,56,10,65,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,51,67,69,10,69,78,67,79,68, 73,78,71,32,57,49,54,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,49,56,10,49, 56,10,49,56,10,49,56,10,53,56,10,70,56,10,70,48, 10,52,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,48,10,69,78,67,79,68,73,78,71,32, 57,50,49,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,57,48,10,68,48,10,66,48,10,57,48, 10,53,48,10,53,48,10,55,48,10,50,48,10,50,48,10, 50,48,10,51,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,49,10,69,78,67,79,68,73,78,71,32,57,50,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,54,48,10,56,48,10,52,48,10,50,48,10,69,48,10, 53,48,10,53,48,10,50,48,10,50,56,10,51,56,10,50, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,50,10,69, 78,67,79,68,73,78,71,32,57,50,49,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,54,48,10, 56,48,10,52,48,10,50,48,10,67,48,10,55,48,10,50, 48,10,50,48,10,50,56,10,49,48,10,50,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,51,10,69,78,67,79,68, 73,78,71,32,57,50,49,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,69,48,10,56,48,10,67, 48,10,56,48,10,69,48,10,55,48,10,50,48,10,50,48, 10,50,56,10,49,48,10,50,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,52,10,69,78,67,79,68,73,78,71,32, 57,50,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,69,48,10,56,48,10,67,48,10,56,48, 10,69,48,10,53,48,10,53,48,10,50,48,10,51,56,10, 49,48,10,49,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,53,10,69,78,67,79,68,73,78,71,32,57,50,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,56,48,10,67,48,10,56,48,10,69,48,10,54,56,10, 53,56,10,52,56,10,49,48,10,50,56,10,50,56,10,51, 56,10,49,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,54,10,69, 78,67,79,68,73,78,71,32,57,50,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 65,48,10,69,48,10,65,48,10,51,48,10,52,48,10,51, 48,10,48,48,10,50,56,10,51,48,10,50,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,55,10,69,78,67,79,68, 73,78,71,32,57,50,50,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,67,48,10,65,48,10,67,48,10,65, 48,10,70,48,10,52,48,10,54,48,10,52,48,10,55,48, 10,50,48,10,50,48,10,50,48,10,51,56,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,56,10,69,78,67,79,68,73,78,71,32, 57,50,50,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,67,48,10,65,48,10,67,48, 10,65,48,10,68,56,10,50,48,10,49,48,10,48,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,57,10,69,78,67,79,68,73,78,71,32,57,50,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,48,10,65,48,10,69,48,10,65,48,10, 65,48,10,51,56,10,49,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,65,10,69, 78,67,79,68,73,78,71,32,57,50,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,56,48,10,69,48,10,51,56,10,50, 48,10,51,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,66,10,69,78,67,79,68, 73,78,71,32,57,50,50,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,65,48,10,65, 48,10,65,48,10,52,48,10,52,48,10,51,56,10,49,48, 10,49,48,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,48,67,10,69,78,67,79,68,73,78,71,32, 57,50,50,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,69,48,10,56,48,10,67,48, 10,56,48,10,66,56,10,50,48,10,51,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 48,68,10,69,78,67,79,68,73,78,71,32,57,50,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,54,48,10,56,48,10,56,48,10,54,48,10, 51,48,10,50,56,10,51,48,10,50,56,10,50,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,48,69,10,69, 78,67,79,68,73,78,71,32,57,50,51,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 54,48,10,56,48,10,52,48,10,50,48,10,68,48,10,50, 56,10,50,56,10,50,56,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,48,70,10,69,78,67,79,68, 73,78,71,32,57,50,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,54,48,10,56, 48,10,52,48,10,50,48,10,70,56,10,49,48,10,49,48, 10,49,48,10,51,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,48,10,69,78,67,79,68,73,78,71,32, 57,50,51,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,67,48,10,65,48,10,65,48,10,67,48,10,52,48, 10,52,48,10,52,48,10,55,48,10,51,56,10,50,48,10, 51,48,10,50,48,10,51,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,49,10,69,78,67,79,68,73,78,71,32,57,50,51,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,67,48, 10,65,48,10,65,48,10,67,48,10,51,48,10,52,48,10, 52,48,10,51,48,10,48,48,10,49,48,10,51,48,10,49, 48,10,51,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,50,10,69, 78,67,79,68,73,78,71,32,57,50,51,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,67,48,10,65,48,10, 65,48,10,67,48,10,51,48,10,52,48,10,52,48,10,51, 48,10,48,48,10,51,48,10,48,56,10,49,48,10,51,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,51,10,69,78,67,79,68, 73,78,71,32,57,50,51,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,67,48,10,65,48,10,65,48,10,67, 48,10,51,48,10,52,48,10,52,48,10,51,48,10,49,48, 10,50,56,10,49,48,10,48,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,52,10,69,78,67,79,68,73,78,71,32, 57,50,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,67,48,10,65,48,10,65,48,10,67,48,10,51,48, 10,52,48,10,52,48,10,51,48,10,48,48,10,50,48,10, 51,48,10,51,56,10,49,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,53,10,69,78,67,79,68,73,78,71,32,57,50,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,57,48, 10,68,48,10,66,48,10,48,48,10,50,48,10,53,48,10, 55,48,10,53,48,10,48,48,10,50,56,10,51,48,10,51, 48,10,50,56,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,54,10,69, 78,67,79,68,73,78,71,32,57,50,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,54,48,10,56,48,10, 52,48,10,50,48,10,67,48,10,53,48,10,53,48,10,50, 48,10,50,48,10,52,56,10,54,56,10,53,56,10,52,56, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,55,10,69,78,67,79,68, 73,78,71,32,57,50,51,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,56,48,10,67,48,10,56, 48,10,69,48,10,55,48,10,50,48,10,50,48,10,51,48, 10,50,56,10,51,48,10,50,56,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,56,10,69,78,67,79,68,73,78,71,32, 57,50,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,55,48,10,56,48,10,56,48,10,55,48,10,50,48, 10,53,48,10,55,48,10,53,48,10,48,48,10,54,56,10, 53,56,10,52,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,57,10,69,78,67,79,68,73,78,71,32,57,50,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,69,48,10,56,48,10,67,48,10,56,48,10,69,48,10, 48,48,10,53,48,10,55,48,10,53,48,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,65,10,69, 78,67,79,68,73,78,71,32,57,50,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,54,48,10,56,48,10, 52,48,10,50,48,10,67,48,10,53,48,10,53,48,10,50, 48,10,51,48,10,50,56,10,51,48,10,50,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,66,10,69,78,67,79,68, 73,78,71,32,57,50,52,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,56,48,10,67,48,10,56, 48,10,70,48,10,52,48,10,50,48,10,49,48,10,55,56, 10,50,48,10,50,48,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,49,67,10,69,78,67,79,68,73,78,71,32, 57,50,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,69,48,10,56,48,10,67,48, 10,56,48,10,57,56,10,50,48,10,49,48,10,48,56,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 49,68,10,69,78,67,79,68,73,78,71,32,57,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,56,48,10,66,48,10,57,48,10,54,48,10, 49,56,10,50,48,10,49,48,10,48,56,10,51,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,49,69,10,69, 78,67,79,68,73,78,71,32,57,50,52,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 65,48,10,67,48,10,65,48,10,65,48,10,49,56,10,50, 48,10,49,48,10,48,56,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,49,70,10,69,78,67,79,68, 73,78,71,32,57,50,52,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,57,48,10,57,48,10,57, 48,10,57,48,10,54,48,10,49,56,10,50,48,10,49,48, 10,48,56,10,51,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,48,10,69,78,67,79,68,73,78,71,32, 57,50,52,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,54,48,10,56,48,10,52,48,10,50,48, 10,67,48,10,51,48,10,50,56,10,51,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 50,49,10,69,78,67,79,68,73,78,71,32,57,50,52,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,65,48,10,65,48,10,70,48,10,52,48,10, 54,48,10,52,48,10,55,48,10,50,48,10,50,48,10,51, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,50,50,10,69, 78,67,79,68,73,78,71,32,57,50,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,48,10,53,48,10,54,48,10,52,48,10,70,48,10,52, 56,10,52,56,10,52,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,50,51,10,69,78,67,79,68, 73,78,71,32,57,50,53,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,56,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,50,52,10,69,78,67,79,68,73,78,71,32, 57,50,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,57,48,10,68,48,10,66,48, 10,57,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 50,53,10,69,78,67,79,68,73,78,71,32,57,50,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,52,56,10,57,48,10,57,48,10, 50,48,10,52,56,10,52,56,10,57,48,10,57,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,50,54,10,69, 78,67,79,68,73,78,71,32,57,50,53,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,48,10,52,48,10,50, 48,10,50,48,10,48,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,48,10,69,78,67,79,68, 73,78,71,32,57,50,56,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,51,56,10,50, 56,10,50,56,10,50,56,10,50,48,10,65,48,10,65,48, 10,65,48,10,69,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,49,10,69,78,67,79,68,73,78,71,32, 57,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,48,56,10,48,56, 10,48,56,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,50,10,69,78,67,79,68,73,78,71,32,57,50,56,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,56,56,10,56,56,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,51,10,69, 78,67,79,68,73,78,71,32,57,50,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,52,10,69,78,67,79,68, 73,78,71,32,57,50,56,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,65, 56,10,65,56,10,50,48,10,50,48,10,50,48,10,65,56, 10,65,56,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,53,10,69,78,67,79,68,73,78,71,32, 57,50,56,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,56,10,68,56,10,65,56, 10,68,56,10,56,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,54,10,69,78,67,79,68,73,78,71,32,57,50,56,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,68,56,10, 67,48,10,67,48,10,68,56,10,49,56,10,49,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,52,55,10,69, 78,67,79,68,73,78,71,32,57,50,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,56,10,49,56,10,49,56,10,50,48,10,50,48,10,50, 48,10,67,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,52,56,10,69,78,67,79,68, 73,78,71,32,57,50,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 67,10,65,67,10,65,67,10,65,67,10,65,48,10,65,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,52,57,10,69,78,67,79,68,73,78,71,32, 57,50,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,65,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 52,65,10,69,78,67,79,68,73,78,71,32,57,50,57,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,57,48,10,57,48,10,57,48,10, 57,48,10,52,56,10,52,56,10,52,56,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,48,10,69, 78,67,79,68,73,78,71,32,57,51,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,69,56,10,65,56,10,65, 56,10,70,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,49,10,69,78,67,79,68, 73,78,71,32,57,51,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,65,56,10,68,56,10,57,56,10,65,56,10,70,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,50,10,69,78,67,79,68,73,78,71,32, 57,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,65,56, 10,68,56,10,65,56,10,57,56,10,69,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,51,10,69,78,67,79,68,73,78,71,32,57,51,49,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,67,56,10,67,56,10, 69,56,10,70,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,52,10,69, 78,67,79,68,73,78,71,32,57,51,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,70,56,10,67,56,10,69,56,10,57, 56,10,69,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,53,10,69,78,67,79,68, 73,78,71,32,57,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,56,10,67,56,10,69,56,10,68,56,10,65,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,54,10,69,78,67,79,68,73,78,71,32, 57,51,49,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,70,56, 10,57,56,10,65,56,10,65,56,10,65,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,55,10,69,78,67,79,68,73,78,71,32,57,51,49,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,65,56,10,68,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,56,10,69, 78,67,79,68,73,78,71,32,57,51,50,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,68,56,10,66,56,10,57, 56,10,69,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,57,10,69,78,67,79,68, 73,78,71,32,57,51,50,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,68,52,10,69,67,10,69,67,10,69,67,10,68,52, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,65,10,69,78,67,79,68,73,78,71,32, 57,51,50,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,68,52,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,66,10,69,78,67,79,68,73,78,71,32,57,51,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,68,52,10,67,67,10, 67,67,10,68,52,10,68,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,54,67,10,69, 78,67,79,68,73,78,71,32,57,51,50,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,56,52,10,68,52,10,67,67,10,68,52,10,67, 67,10,68,52,10,56,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,54,68,10,69,78,67,79,68, 73,78,71,32,57,51,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,68,52,10,68,52,10,68,67,10,68,67,10,67,67, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,54,69,10,69,78,67,79,68,73,78,71,32, 57,51,50,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,67, 10,68,52,10,68,67,10,67,67,10,68,67,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 54,70,10,69,78,67,79,68,73,78,71,32,57,51,50,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,68,52,10,68,52,10, 68,67,10,68,52,10,67,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,48,10,69, 78,67,79,68,73,78,71,32,57,51,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,56,10,56,52,10,68,67,10,67,67,10,68,52,10,68, 52,10,68,52,10,56,52,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,49,10,69,78,67,79,68, 73,78,71,32,57,51,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,56,10,56, 52,10,67,67,10,68,52,10,67,67,10,68,52,10,67,67, 10,56,52,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,50,10,69,78,67,79,68,73,78,71,32, 57,51,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,67,67, 10,68,52,10,67,67,10,67,52,10,68,67,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,51,10,69,78,67,79,68,73,78,71,32,57,51,51,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,56,10,56,52,10,70,67,10,66,52,10, 66,52,10,68,52,10,70,67,10,56,52,10,55,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,52,10,69, 78,67,79,68,73,78,71,32,57,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,69,56,10,65,56,10,65, 56,10,70,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,53,10,69,78,67,79,68, 73,78,71,32,57,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,56, 56,10,65,56,10,68,56,10,57,56,10,65,56,10,70,56, 10,56,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,54,10,69,78,67,79,68,73,78,71,32, 57,51,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,56,56,10,65,56, 10,68,56,10,65,56,10,57,56,10,69,56,10,56,56,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,55,10,69,78,67,79,68,73,78,71,32,57,51,51,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,56,56,10,67,56,10,67,56,10, 69,56,10,70,56,10,65,56,10,56,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,56,10,69, 78,67,79,68,73,78,71,32,57,51,51,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,70,56,10,67,56,10,69,56,10,57, 56,10,69,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,57,10,69,78,67,79,68, 73,78,71,32,57,51,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,48,10,56, 56,10,66,56,10,67,56,10,69,56,10,68,56,10,65,56, 10,56,56,10,53,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,65,10,69,78,67,79,68,73,78,71,32, 57,51,51,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,53,48,10,56,56,10,70,56, 10,57,56,10,65,56,10,65,56,10,65,56,10,56,56,10, 53,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,66,10,69,78,67,79,68,73,78,71,32,57,51,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,53,48,10,56,56,10,65,56,10,68,56,10, 65,56,10,68,56,10,65,56,10,56,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,55,67,10,69, 78,67,79,68,73,78,71,32,57,51,52,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,56,56,10,65,56,10,68,56,10,66,56,10,57, 56,10,69,56,10,56,56,10,53,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,55,68,10,69,78,67,79,68, 73,78,71,32,57,51,52,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,68,52,10,69,67,10,69,67,10,69,67,10,68,52, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,55,69,10,69,78,67,79,68,73,78,71,32, 57,51,52,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,68,52, 10,68,52,10,68,52,10,68,52,10,68,52,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 55,70,10,69,78,67,79,68,73,78,71,32,57,51,52,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,56,52,10,68,52,10,67,67,10, 67,67,10,68,52,10,68,67,10,56,52,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,56,48,10,69, 78,67,79,68,73,78,71,32,57,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,56,52,10,68,52,10,67,67,10,68,52,10,67, 67,10,68,52,10,56,52,10,52,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,56,49,10,69,78,67,79,68, 73,78,71,32,57,51,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,68,52,10,68,52,10,68,67,10,68,67,10,67,67, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,50,10,69,78,67,79,68,73,78,71,32, 57,51,52,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,68,67, 10,68,52,10,68,67,10,67,67,10,68,67,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 56,51,10,69,78,67,79,68,73,78,71,32,57,51,52,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,52,56,10,56,52,10,68,52,10,68,52,10, 68,67,10,68,52,10,67,67,10,56,52,10,52,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,52,56,52,10,69, 78,67,79,68,73,78,71,32,57,51,52,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,56,52,10,68,67,10,67,67,10,68,52,10,68, 52,10,68,52,10,56,52,10,52,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,52,56,53,10,69,78,67,79,68, 73,78,71,32,57,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,56, 52,10,67,67,10,68,52,10,67,67,10,68,52,10,67,67, 10,56,52,10,52,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,52,56,54,10,69,78,67,79,68,73,78,71,32, 57,51,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,52,56,10,56,52,10,67,67, 10,68,52,10,67,67,10,67,52,10,68,67,10,56,52,10, 52,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,52, 69,65,10,69,78,67,79,68,73,78,71,32,57,52,53,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,65,56,10,68,56,10, 68,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,49,48,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,52,55,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,48,49,10,69,78,67,79, 68,73,78,71,32,57,52,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,49,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,52,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,51,10,69,78,67,79,68,73,78,71,32,57,52, 55,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,52, 10,69,78,67,79,68,73,78,71,32,57,52,55,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,53,10,69,78,67, 79,68,73,78,71,32,57,52,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,54,10,69,78,67,79,68,73,78, 71,32,57,52,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,50,48,10,50,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,55,10,69,78,67,79,68,73,78,71,32,57,52, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,51,48,10,51,48,10,48,48,10,48,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,51,48,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,48,56, 10,69,78,67,79,68,73,78,71,32,57,52,56,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,65,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,48,57,10,69,78,67, 79,68,73,78,71,32,57,52,56,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,65,56,10,65,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,48,65,10,69,78,67,79,68,73,78, 71,32,57,52,56,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,48,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,50,48,10,48,48,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,48,66,10,69,78,67,79,68,73,78,71,32,57,52, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,48,48,10,51,48,10,51,48,10,48, 48,10,51,48,10,51,48,10,48,48,10,51,48,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,48,49,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,52,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,48,68,10,69,78, 67,79,68,73,78,71,32,57,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,67,10,51,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,48,69,10,69,78,67,79,68,73, 78,71,32,57,52,56,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,67,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,48,70,10,69,78,67,79,68,73,78,71,32,57, 52,56,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,51,67,10,51,67,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,48,51,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,52,56,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,49,49,10,69, 78,67,79,68,73,78,71,32,57,52,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,48,10,69, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,49,50,10,69,78,67,79,68, 73,78,71,32,57,52,57,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,49,51,10,69,78,67,79,68,73,78,71,32, 57,52,57,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,70,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,48,50,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,52,57, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,49,53,10, 69,78,67,79,68,73,78,71,32,57,52,57,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,67,10, 51,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,49,54,10,69,78,67,79, 68,73,78,71,32,57,52,57,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,49,55,10,69,78,67,79,68,73,78,71, 32,57,52,57,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,67,10,51,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,48,52, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,52, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,49,57, 10,69,78,67,79,68,73,78,71,32,57,52,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,48, 10,69,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,49,65,10,69,78,67, 79,68,73,78,71,32,57,52,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,70,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,49,66,10,69,78,67,79,68,73,78, 71,32,57,52,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,70,48,10,70,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,48, 56,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,48,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,51,67,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,49, 68,10,69,78,67,79,68,73,78,71,32,57,53,48,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,51, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,49,69,10,69,78, 67,79,68,73,78,71,32,57,53,48,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,67,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,49,70,10,69,78,67,79,68,73, 78,71,32,57,53,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,51,67,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,50,48,10,69,78,67,79,68,73,78,71,32,57, 53,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,67,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,50, 49,10,69,78,67,79,68,73,78,71,32,57,53,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,50,50,10,69,78, 67,79,68,73,78,71,32,57,53,48,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,67,10,51,67, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,50,51,10,69,78,67,79,68,73, 78,71,32,57,53,48,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,67,10,51,67,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 48,57,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,48,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,53,10,69,78,67,79,68,73,78,71,32,57,53,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,48,10,69,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,54,10,69, 78,67,79,68,73,78,71,32,57,53,49,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,70,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,55,10,69,78,67,79,68, 73,78,71,32,57,53,49,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,70,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,50,56,10,69,78,67,79,68,73,78,71,32, 57,53,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,70,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,51,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 50,57,10,69,78,67,79,68,73,78,71,32,57,53,49,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 70,48,10,70,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,50,65,10,69, 78,67,79,68,73,78,71,32,57,53,49,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,70,48,10,70, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,50,66,10,69,78,67,79,68, 73,78,71,32,57,53,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,70,48,10,70,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,48,54,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,50,68,10,69,78,67,79,68,73,78,71,32,57,53,49, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,67,10,69,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,50,69,10, 69,78,67,79,68,73,78,71,32,57,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 51,67,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,50,70,10,69,78,67,79, 68,73,78,71,32,57,53,49,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,51,48,10,69,78,67,79,68,73,78,71, 32,57,53,50,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,51,49,10,69,78,67,79,68,73,78,71,32,57,53,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,67,10,70,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,51,50,10, 69,78,67,79,68,73,78,71,32,57,53,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 51,67,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,51,51,10,69,78,67,79, 68,73,78,71,32,57,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,70,67,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,48,55,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,53,10,69,78,67,79,68,73,78,71,32,57,53, 50,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,70,67,10,69,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,54, 10,69,78,67,79,68,73,78,71,32,57,53,50,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,70,67, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,55,10,69,78,67, 79,68,73,78,71,32,57,53,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,70,67,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,51,56,10,69,78,67,79,68,73,78, 71,32,57,53,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,51,57,10,69,78,67,79,68,73,78,71,32,57,53, 50,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,70,67,10,70,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,51,65, 10,69,78,67,79,68,73,78,71,32,57,53,51,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,51,48,10,70,67, 10,51,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,51,66,10,69,78,67, 79,68,73,78,71,32,57,53,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,70,67,10,70,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,48,53,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,51,68,10,69,78,67,79,68,73,78,71,32,57, 53,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,69,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,51, 69,10,69,78,67,79,68,73,78,71,32,57,53,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 67,10,51,67,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,51,70,10,69,78, 67,79,68,73,78,71,32,57,53,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,70,67,10,70,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,48,10,69,78,67,79,68,73, 78,71,32,57,53,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,70,67,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,49,10,69,78,67,79,68,73,78,71,32,57, 53,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 50,10,69,78,67,79,68,73,78,71,32,57,53,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,70, 67,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,51,10,69,78, 67,79,68,73,78,71,32,57,53,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,52,10,69,78,67,79,68,73, 78,71,32,57,53,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,70,67,10,51,67,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,53,10,69,78,67,79,68,73,78,71,32,57, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,67,10,70,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 54,10,69,78,67,79,68,73,78,71,32,57,53,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,70, 67,10,51,67,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,55,10,69,78, 67,79,68,73,78,71,32,57,53,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,67, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,56,10,69,78,67,79,68,73, 78,71,32,57,53,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,70,67,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,57,10,69,78,67,79,68,73,78,71,32,57, 53,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,70,67,10,70,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 65,10,69,78,67,79,68,73,78,71,32,57,53,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,51,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,70, 67,10,51,67,10,51,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,66,10,69,78, 67,79,68,73,78,71,32,57,53,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,70,67,10,70,67, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,52,67,10,69,78,67,79,68,73, 78,71,32,57,53,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,52,68,10,69,78,67,79,68,73,78,71,32,57, 53,52,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,52, 69,10,69,78,67,79,68,73,78,71,32,57,53,53,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,52,70,10,69,78, 67,79,68,73,78,71,32,57,53,53,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,51,48,10,51,48,10,51, 48,10,51,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,52,51,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,53,53,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,67,10,48,48,10,70,67,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,50,52,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,53,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,53,49, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 53,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,50,48,10,51,67,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,53,50,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,53,53,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 67,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,70,51,57,48,48,48,48,10,69, 78,67,79,68,73,78,71,32,57,53,53,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,67,10,52,48,10,53, 67,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,50,50,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,53,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,48,10,50,48,10,69,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,50,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,50, 53,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,53,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,48,10,49,48,10,68,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,53,48,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,54,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,51,67,10, 50,48,10,51,67,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,52,57,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,53,54,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,55,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,51,56,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,67,10,52,48,10,55,67,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,50,56,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,48,10,50,48,10,69,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 50,55,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,54,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,70,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,83,70,50,54,48, 48,48,48,10,69,78,67,79,68,73,78,71,32,57,53,54, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,68,48, 10,49,48,10,70,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,83,70,51,54,48,48,48,48, 10,69,78,67,79,68,73,78,71,32,57,53,54,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,51,67,10,50,48, 10,51,67,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,83,70,51,55,48,48,48,48,10,69,78, 67,79,68,73,78,71,32,57,53,54,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,83,70,52,50,48,48,48,48,10,69,78,67,79,68, 73,78,71,32,57,53,54,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,53,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,53,67,10,52,48,10,53,67,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,83, 70,49,57,48,48,48,48,10,69,78,67,79,68,73,78,71, 32,57,53,54,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,69,48,10,50,48,10,69,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,83,70,50,48, 48,48,48,48,10,69,78,67,79,68,73,78,71,32,57,53, 55,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,68,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,83,70,50,51,48,48,48, 48,10,69,78,67,79,68,73,78,71,32,57,53,55,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,68,48,10,49, 48,10,68,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,83,70,52,55,48,48,48,48,10,69, 78,67,79,68,73,78,71,32,57,53,55,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,48,48,10,70, 67,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,83,70,52,56,48,48,48,48,10,69,78,67,79, 68,73,78,71,32,57,53,55,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,67,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,53,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 83,70,52,49,48,48,48,48,10,69,78,67,79,68,73,78, 71,32,57,53,55,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,48,48,10,68,67,10,53,48,10,53, 48,10,53,48,10,53,48,10,53,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,83,70,52, 53,48,48,48,48,10,69,78,67,79,68,73,78,71,32,57, 53,55,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 70,67,10,48,48,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,83,70,52,54,48,48, 48,48,10,69,78,67,79,68,73,78,71,32,57,53,55,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,53,48, 10,53,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 70,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,83,70,52,48,48,48,48,48,10, 69,78,67,79,68,73,78,71,32,57,53,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,68,67,10,48,48,10, 70,67,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,83,70,53,52,48,48,48,48,10,69,78,67, 79,68,73,78,71,32,57,53,55,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,70,67,10,50,48,10,70,67,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,83,70,53,51,48,48,48,48,10,69,78,67,79,68,73, 78,71,32,57,53,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,53,48,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,70,67,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,83,70, 52,52,48,48,48,48,10,69,78,67,79,68,73,78,71,32, 57,53,56,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,48,10,53,48,10,53,48,10,53,48,10,53,48, 10,68,67,10,48,48,10,68,67,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 54,68,10,69,78,67,79,68,73,78,71,32,57,53,56,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,67,10,49,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,54,69,10,69, 78,67,79,68,73,78,71,32,57,53,56,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,52, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,54,70,10,69,78,67,79,68, 73,78,71,32,57,53,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,48,10,69,78,67,79,68,73,78,71,32, 57,53,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,49,48,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,49,10,69,78,67,79,68,73,78,71,32,57,53,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,52, 10,48,52,10,48,56,10,48,56,10,49,48,10,49,48,10, 50,48,10,50,48,10,50,48,10,52,48,10,52,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,50,10,69, 78,67,79,68,73,78,71,32,57,53,56,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,56,48,10,56,48,10, 52,48,10,52,48,10,50,48,10,50,48,10,49,48,10,49, 48,10,49,48,10,48,56,10,48,56,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,51,10,69,78,67,79,68, 73,78,71,32,57,53,56,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,56,52,10,56,52,10,52,56,10,52, 56,10,51,48,10,51,48,10,51,48,10,51,48,10,51,48, 10,52,56,10,52,56,10,56,52,10,56,52,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,52,10,69,78,67,79,68,73,78,71,32, 57,53,56,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,53,10,69,78,67,79,68,73,78,71,32,57,53,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,54,10,69, 78,67,79,68,73,78,71,32,57,53,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,67,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,55,10,69,78,67,79,68, 73,78,71,32,57,53,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,56,10,69,78,67,79,68,73,78,71,32, 57,53,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,48,10,69,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,57,10,69,78,67,79,68,73,78,71,32,57,53,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,65,10,69, 78,67,79,68,73,78,71,32,57,53,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,67,10,51, 67,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,66,10,69,78,67,79,68, 73,78,71,32,57,53,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,55,67,10,69,78,67,79,68,73,78,71,32, 57,53,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,67,10,49,67,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 55,68,10,69,78,67,79,68,73,78,71,32,57,53,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 51,48,10,51,48,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,55,69,10,69, 78,67,79,68,73,78,71,32,57,53,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,67,10,69, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,55,70,10,69,78,67,79,68, 73,78,71,32,57,53,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,51,48,10,51,48,10,51,48,10,51, 48,10,51,48,10,51,48,10,51,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 112,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 56,49,10,69,78,67,79,68,73,78,71,32,57,54,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,56,50,10,69, 78,67,79,68,73,78,71,32,57,54,48,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,51,10,69,78,67,79,68, 73,78,71,32,57,54,48,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 110,98,108,111,99,107,10,69,78,67,79,68,73,78,71,32, 57,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,67,10,70,67,10,70,67,10,70,67,10, 70,67,10,70,67,10,70,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 56,53,10,69,78,67,79,68,73,78,71,32,57,54,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,67,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,56,54,10,69, 78,67,79,68,73,78,71,32,57,54,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,56,55,10,69,78,67,79,68, 73,78,71,32,57,54,48,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,57, 10,69,78,67,79,68,73,78,71,32,57,54,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,70,56,10,70, 56,10,70,56,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,70,56,10,70,56,10, 70,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,65,10,69,78,67, 79,68,73,78,71,32,57,54,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,70,48,10,70,48,10,70,48, 10,70,48,10,70,48,10,70,48,10,70,48,10,70,48,10, 70,48,10,70,48,10,70,48,10,70,48,10,70,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,56,66,10,69,78,67,79,68,73,78, 71,32,57,54,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,70,48,10,70,48,10,70,48,10,70,48,10, 70,48,10,70,48,10,70,48,10,70,48,10,70,48,10,70, 48,10,70,48,10,70,48,10,70,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,108,102,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 69,48,10,69,48,10,69,48,10,69,48,10,69,48,10,69, 48,10,69,48,10,69,48,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,56,68, 10,69,78,67,79,68,73,78,71,32,57,54,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,67,48,10,67, 48,10,67,48,10,67,48,10,67,48,10,67,48,10,67,48, 10,67,48,10,67,48,10,67,48,10,67,48,10,67,48,10, 67,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,56,69,10,69,78,67, 79,68,73,78,71,32,57,54,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,67,48,10,67,48,10,67,48, 10,67,48,10,67,48,10,67,48,10,67,48,10,67,48,10, 67,48,10,67,48,10,67,48,10,67,48,10,67,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,56,70,10,69,78,67,79,68,73,78, 71,32,57,54,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,56,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,56,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,114,116,98, 108,111,99,107,10,69,78,67,79,68,73,78,71,32,57,54, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 49,67,10,49,67,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,49,67,10,49,67,10,49,67,10,49,67, 10,49,67,10,49,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,108,116,115,104,97,100,101, 10,69,78,67,79,68,73,78,71,32,57,54,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,65,56,10,48, 48,10,53,52,10,48,48,10,65,56,10,48,48,10,53,52, 10,48,48,10,65,56,10,48,48,10,53,52,10,48,48,10, 65,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,104,97,100,101,10,69,78,67,79,68, 73,78,71,32,57,54,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,65,56,10,53,52,10,65,56,10,53, 52,10,65,56,10,53,52,10,65,56,10,53,52,10,65,56, 10,53,52,10,65,56,10,53,52,10,65,56,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,100, 107,115,104,97,100,101,10,69,78,67,79,68,73,78,71,32, 57,54,49,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,53,52,10,70,67,10,65,56,10,70,67,10,53,52, 10,70,67,10,65,56,10,70,67,10,53,52,10,70,67,10, 65,56,10,70,67,10,53,52,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,52,10,69,78,67,79,68,73,78,71,32,57,54,50,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,53,10,69, 78,67,79,68,73,78,71,32,57,54,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,52,10,48,52,10, 48,52,10,48,52,10,48,52,10,48,52,10,48,52,10,48, 52,10,48,52,10,48,52,10,48,52,10,48,52,10,48,52, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,54,10,69,78,67,79,68, 73,78,71,32,57,54,50,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,55,10,69,78,67,79,68,73,78,71,32, 57,54,50,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,67,10,49,67,10,49,67,10,49,67,10, 49,67,10,49,67,10,49,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,56,10,69,78,67,79,68,73,78,71,32,57,54,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,57,10,69, 78,67,79,68,73,78,71,32,57,54,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,69,48,10,69,48,10, 69,48,10,69,48,10,69,48,10,69,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,65,10,69,78,67,79,68, 73,78,71,32,57,54,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,69,48,10,69,48,10,69,48,10,69, 48,10,69,48,10,69,48,10,49,67,10,49,67,10,49,67, 10,49,67,10,49,67,10,49,67,10,49,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,66,10,69,78,67,79,68,73,78,71,32, 57,54,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,70,67,10,70,67,10,70,67,10,70,67,10,70,67, 10,70,67,10,69,48,10,69,48,10,69,48,10,69,48,10, 69,48,10,69,48,10,69,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 57,67,10,69,78,67,79,68,73,78,71,32,57,54,50,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,70,67,10,70,67,10,70,67,10,70,67,10, 49,67,10,49,67,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,57,68,10,69, 78,67,79,68,73,78,71,32,57,54,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,49,67,10,49,67,10, 49,67,10,49,67,10,49,67,10,49,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,57,69,10,69,78,67,79,68, 73,78,71,32,57,54,51,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,49,67,10,49,67,10,49,67,10,49, 67,10,49,67,10,49,67,10,69,48,10,69,48,10,69,48, 10,69,48,10,69,48,10,69,48,10,69,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,57,70,10,69,78,67,79,68,73,78,71,32, 57,54,51,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,49,67,10,49,67,10,49,67,10,49,67,10,49,67, 10,49,67,10,70,67,10,70,67,10,70,67,10,70,67,10, 70,67,10,70,67,10,70,67,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,102,105,108,108,101, 100,98,111,120,10,69,78,67,79,68,73,78,71,32,57,54, 51,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,70,56,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,72,50,50,48,55,51,10, 69,78,67,79,68,73,78,71,32,57,54,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,65,50,10,69,78,67,79, 68,73,78,71,32,57,54,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,51,10,69,78,67,79,68,73,78,71, 32,57,54,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,65,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,52,10,69,78,67,79,68,73,78,71,32,57,54,51, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,56,10,70,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,65,53,10, 69,78,67,79,68,73,78,71,32,57,54,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 65,56,10,65,56,10,65,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,65,54,10,69,78,67,79, 68,73,78,71,32,57,54,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,65,56,10,70, 56,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,53,65,55,10,69,78,67,79,68,73,78,71, 32,57,54,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,67,56,10,65,56,10,57,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,65,56,10,69,78,67,79,68,73,78,71,32,57,54,52, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,57,56,10,65,56,10,67,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,65,57,10, 69,78,67,79,68,73,78,71,32,57,54,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 68,56,10,65,56,10,68,56,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,72,49,56,53,52,51,10,69,78,67,79,68, 73,78,71,32,57,54,52,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,55,48,10,55,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,72, 49,56,53,53,49,10,69,78,67,79,68,73,78,71,32,57, 54,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,53,48,10,55,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,102,105,108,108,101,100, 114,101,99,116,10,69,78,67,79,68,73,78,71,32,57,54, 52,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,67,10,70, 67,10,70,67,10,70,67,10,70,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,65,68, 10,69,78,67,79,68,73,78,71,32,57,54,52,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,67,10,56,52,10,56,52, 10,56,52,10,70,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,65,69,10,69,78,67, 79,68,73,78,71,32,57,54,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,55,56,10,55,56, 10,55,56,10,55,56,10,55,56,10,55,56,10,55,56,10, 55,56,10,55,56,10,55,56,10,55,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,65,70,10,69,78,67,79,68,73,78, 71,32,57,54,52,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,52,56,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,48,10,69,78,67,79,68,73,78,71,32,57,54, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 67,10,55,56,10,70,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,49, 10,69,78,67,79,68,73,78,71,32,57,54,52,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,51,67,10,52,56, 10,70,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,105,97,103,117,112,10,69,78,67, 79,68,73,78,71,32,57,54,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,55,48,10,55,48,10,55,48,10, 70,56,10,70,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,51,10,69,78,67,79,68,73,78, 71,32,57,54,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,53,48,10,53,48,10,53,48,10,56,56,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,52,10,69,78,67,79,68,73,78,71,32,57,54, 53,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,50, 48,10,55,48,10,55,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,53, 10,69,78,67,79,68,73,78,71,32,57,54,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,53,48, 10,53,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,54,10,69,78,67, 79,68,73,78,71,32,57,54,53,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,67,48,10,69,48,10,70,48,10,70,56,10,70,48,10, 69,48,10,67,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,55,10,69,78,67,79,68,73,78, 71,32,57,54,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,67,48,10, 65,48,10,57,48,10,56,56,10,57,48,10,65,48,10,67, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,66,56,10,69,78,67,79,68,73,78,71,32,57,54, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,54, 48,10,55,48,10,54,48,10,52,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,57, 10,69,78,67,79,68,73,78,71,32,57,54,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,52,48,10,54,48,10,53,48, 10,54,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,116,114,105,97,103,114,116,10,69,78,67, 79,68,73,78,71,32,57,54,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,48,10,70,48,10,70,67,10,70,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,66,10,69,78,67,79,68,73,78, 71,32,57,54,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,66,48,10,56,67,10,66,48,10,67,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,114,105, 97,103,100,110,10,69,78,67,79,68,73,78,71,32,57,54, 54,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,70,56,10,70,56,10,55, 48,10,55,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,66,68, 10,69,78,67,79,68,73,78,71,32,57,54,54,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,53,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,66,69,10,69,78,67, 79,68,73,78,71,32,57,54,54,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,55,48,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,66,70,10,69,78,67,79,68,73,78, 71,32,57,54,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,48,10,69,78,67,79,68,73,78,71,32,57,54, 54,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,49,56,10,51,56,10,55, 56,10,70,56,10,55,56,10,51,56,10,49,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,49, 10,69,78,67,79,68,73,78,71,32,57,54,54,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,49,56,10,50,56,10,52,56,10,56,56, 10,52,56,10,50,56,10,49,56,10,48,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,67,50,10,69,78,67, 79,68,73,78,71,32,57,54,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,51,48,10,55,48,10,51,48,10, 49,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,51,10,69,78,67,79,68,73,78, 71,32,57,54,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,51,48,10,53,48,10,51,48,10,49,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,116,114,105, 97,103,108,102,10,69,78,67,79,68,73,78,71,32,57,54, 54,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,67,10,51, 67,10,70,67,10,51,67,10,48,67,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,53, 10,69,78,67,79,68,73,78,71,32,57,54,54,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,67,10,51,52,10,67,52, 10,51,52,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,53,67,54,10,69,78,67, 79,68,73,78,71,32,57,54,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,55,48,10,70,56,10,55,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,53,67,55,10,69,78,67,79,68,73,78, 71,32,57,54,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,53,67,56,10,69,78,67,79,68,73,78,71,32,57,54, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,53, 48,10,65,56,10,53,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,53,67,57, 10,69,78,67,79,68,73,78,71,32,57,54,55,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,51,48,10,52,56,10,66,52, 10,66,52,10,52,56,10,51,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,108,111,122,101,110,103,101,10,69,78,67, 79,68,73,78,71,32,57,54,55,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,53,48,10, 53,48,10,50,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,99,105,114,99,108,101,10,69,78,67,79,68,73,78,71, 32,57,54,55,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 48,10,52,56,10,56,52,10,56,52,10,52,56,10,51,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 53,67,67,10,69,78,67,79,68,73,78,71,32,57,54,55, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,48,56, 10,56,48,10,48,52,10,52,48,10,49,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,53,67,68,10, 69,78,67,79,68,73,78,71,32,57,54,55,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,55,48,10, 65,56,10,65,56,10,65,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,53,67,69,10,69,78,67,79, 68,73,78,71,32,57,54,55,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,68,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 72,49,56,53,51,51,10,69,78,67,79,68,73,78,71,32, 57,54,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,70,67,10,55,56,10,51,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,48,10,69,78,67,79,68,73,78,71,32,57,54,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,54,56,10, 69,52,10,69,52,10,54,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,49,10,69, 78,67,79,68,73,78,71,32,57,54,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,56,10,57,67,10,57, 67,10,53,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,50,10,69,78,67,79,68, 73,78,71,32,57,54,56,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,48,10,52,56,10,56,52,10,70,67,10,55,56, 10,51,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,51,10,69,78,67,79,68,73,78,71,32, 57,54,56,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,55,56,10,70,67,10,56,52,10,52,56,10,51,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,52,10,69,78,67,79,68,73,78,71,32,57,54,56,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,51,48,10,53,56,10, 57,67,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,53,10,69, 78,67,79,68,73,78,71,32,57,54,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,51,48,10,53,56,10,57,67,10,70, 67,10,55,56,10,51,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,54,10,69,78,67,79,68, 73,78,71,32,57,54,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,52,10,49,67,10,51, 67,10,51,67,10,55,67,10,55,67,10,51,67,10,51,67, 10,49,67,10,48,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,55,10,69,78,67,79,68,73,78,71,32, 57,54,56,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,56,48,10,69,48,10,70,48,10,70,48, 10,70,56,10,70,56,10,70,48,10,70,48,10,69,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,105,110,118,98,117, 108,108,101,116,10,69,78,67,79,68,73,78,71,32,57,54, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 70,67,10,70,67,10,70,67,10,70,67,10,70,67,10,67, 67,10,56,52,10,56,52,10,67,67,10,70,67,10,70,67, 10,70,67,10,70,67,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,105,110,118,99,105,114,99, 108,101,10,69,78,67,79,68,73,78,71,32,57,54,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,70,67, 10,70,67,10,70,67,10,70,67,10,67,67,10,66,52,10, 55,56,10,55,56,10,66,52,10,67,67,10,70,67,10,70, 67,10,70,67,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,65,10,69, 78,67,79,68,73,78,71,32,57,54,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,70,67,10,70,67,10, 70,67,10,70,67,10,67,67,10,66,52,10,55,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,66,10,69,78,67,79,68, 73,78,71,32,57,54,57,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,56,10,66,52, 10,67,67,10,70,67,10,70,67,10,70,67,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,68,67,10,69,78,67,79,68,73,78,71,32, 57,54,57,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 68,68,10,69,78,67,79,68,73,78,71,32,57,54,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,56,10, 48,52,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,68,69,10,69, 78,67,79,68,73,78,71,32,57,54,57,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 52,10,48,56,10,49,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,68,70,10,69,78,67,79,68, 73,78,71,32,57,54,57,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,52,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,48,10,69,78,67,79,68,73,78,71,32, 57,54,57,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,51,48, 10,52,56,10,56,52,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 69,49,10,69,78,67,79,68,73,78,71,32,57,54,57,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,52,10,52,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,53,69,50,10,69, 78,67,79,68,73,78,71,32,57,54,57,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,49,56,10,51, 56,10,55,56,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,53,69,51,10,69,78,67,79,68, 73,78,71,32,57,54,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,48,10,67,48,10,69,48,10,70,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,53,69,52,10,69,78,67,79,68,73,78,71,32, 57,55,48,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,70,48,10,69,48,10,67,48,10,56,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,53, 69,53,10,69,78,67,79,68,73,78,71,32,57,55,48,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 55,56,10,51,56,10,49,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,111,112,101,110,98,117,108,108,101, 116,10,69,78,67,79,68,73,78,71,32,57,55,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,55,10,69,78, 67,79,68,73,78,71,32,57,55,48,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,69,56,10,69,56, 10,69,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,69,56,10,69,78,67,79,68,73, 78,71,32,57,55,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,66,56,10,66,56,10,66,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,57,10,69,78,67,79,68,73,78,71,32,57, 55,48,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,70,56,10,69,56,10,67,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 65,10,69,78,67,79,68,73,78,71,32,57,55,48,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,57, 56,10,66,56,10,70,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,66,10,69,78, 67,79,68,73,78,71,32,57,55,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,65,56, 10,65,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,69,67,10,69,78,67,79,68,73, 78,71,32,57,55,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,55,48,10,65,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,69,68,10,69,78,67,79,68,73,78,71,32,57, 55,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 55,48,10,55,48,10,55,48,10,69,56,10,69,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,69, 69,10,69,78,67,79,68,73,78,71,32,57,55,49,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,50,48,10,50,48,10,55,48,10,55, 48,10,55,48,10,66,56,10,66,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,69,70,10,69,78, 67,79,68,73,78,71,32,57,55,49,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,51,48,10,52,56,10,56,52,10,56,52, 10,56,52,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,48,10,69,78,67,79,68,73, 78,71,32,57,55,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,65,56,10,69,56,10,56,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,49,10,69,78,67,79,68,73,78,71,32,57, 55,49,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,56,56,10,69,56,10,65,56,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 50,10,69,78,67,79,68,73,78,71,32,57,55,49,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,56, 56,10,66,56,10,65,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,51,10,69,78, 67,79,68,73,78,71,32,57,55,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,65,56,10,66,56, 10,56,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,52,10,69,78,67,79,68,73, 78,71,32,57,55,49,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,65,56,10,69,56,10,56,56,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,53,10,69,78,67,79,68,73,78,71,32,57, 55,49,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,69,56,10,65,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 54,10,69,78,67,79,68,73,78,71,32,57,55,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,66,56,10,65,56,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,55,10,69,78, 67,79,68,73,78,71,32,57,55,49,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,65,56,10,66,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,56,10,69,78,67,79,68,73, 78,71,32,57,55,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,57,48,10,65,48,10,67,48,10, 56,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,57,10,69,78,67,79,68,73,78,71,32,57, 55,50,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,52,56,10,50,56,10,49,56,10,48,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 65,10,69,78,67,79,68,73,78,71,32,57,55,50,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,48,10,67, 48,10,65,48,10,57,48,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,66,10,69,78, 67,79,68,73,78,71,32,57,55,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,56,10,52,56,10,52,56, 10,55,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,53,70,67,10,69,78,67,79,68,73, 78,71,32,57,55,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,55,56,10,55,56,10,55,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,53,70,68,10,69,78,67,79,68,73,78,71,32,57, 55,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,56,10,52,56,10,52,56,10,55,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,53,70, 69,10,69,78,67,79,68,73,78,71,32,57,55,50,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,55, 56,10,55,56,10,55,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,53,70,70,10,69,78, 67,79,68,73,78,71,32,57,55,50,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,49,56,10,50,56, 10,52,56,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,48,10,69,78,67,79,68,73, 78,71,32,57,55,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,56,56,10,50,48,10,55,48,10,50,48,10,56,56,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,49,10,69,78,67,79,68,73,78,71,32,57, 55,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,70,56,10,70,67,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 50,10,69,78,67,79,68,73,78,71,32,57,55,51,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,70,56,10,70,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,51,10,69,78, 67,79,68,73,78,71,32,57,55,51,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,65,48,10,50,48,10,55, 52,10,53,48,10,65,56,10,53,48,10,53,52,10,55,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,52,10,69,78,67,79,68,73, 78,71,32,57,55,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,52,56,10,53,48, 10,53,52,10,52,52,10,48,56,10,54,48,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,53,10,69,78,67,79,68,73,78,71,32,57, 55,51,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,55,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 54,10,69,78,67,79,68,73,78,71,32,57,55,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,50,48,10,70,56,10,53, 48,10,55,48,10,56,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,55,10,69,78, 67,79,68,73,78,71,32,57,55,51,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,49,48,10,50,48,10,52,48,10,56,48,10,52,48, 10,50,56,10,49,56,10,51,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,56,10,69,78,67,79,68,73, 78,71,32,57,55,51,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,56,10,56,56, 10,57,48,10,57,48,10,65,48,10,65,48,10,57,56,10, 57,56,10,66,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,57,10,69,78,67,79,68,73,78,71,32,57, 55,51,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 65,10,69,78,67,79,68,73,78,71,32,57,55,51,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,53,48,10,53,48,10,65,56,10,53,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,66,10,69,78, 67,79,68,73,78,71,32,57,55,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,53,48,10,65,56,10,53,48,10,53,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,48,67,10,69,78,67,79,68,73, 78,71,32,57,55,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,56,10,55,48,10,57,48,10, 57,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,48,68,10,69,78,67,79,68,73,78,71,32,57, 55,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,51,48,10,52,56,10,52,56,10, 51,48,10,50,48,10,54,48,10,57,48,10,57,48,10,54, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,48, 69,10,69,78,67,79,68,73,78,71,32,57,55,52,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,70,56,10,65, 56,10,55,48,10,70,56,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,48,70,10,69,78, 67,79,68,73,78,71,32,57,55,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,65,56,10,65,56,10,55,48, 10,56,56,10,56,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,48,10,69,78,67,79,68,73, 78,71,32,57,55,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,67,10,56,52, 10,56,52,10,56,52,10,56,52,10,56,52,10,56,52,10, 56,52,10,70,67,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,49,10,69,78,67,79,68,73,78,71,32,57, 55,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,70,67,10,56,52,10,56,67,10, 56,67,10,57,52,10,57,52,10,68,52,10,65,52,10,70, 67,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 50,10,69,78,67,79,68,73,78,71,32,57,55,52,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,67,10,67,67,10,67,67,10,66,52,10,66, 52,10,66,52,10,67,67,10,67,67,10,70,67,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,51,10,69,78, 67,79,68,73,78,71,32,57,55,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,56, 56,10,56,56,10,53,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,56,56,10,56,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,54,10,69,78,67,79,68,73, 78,71,32,57,55,53,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,55,10,69,78,67,79,68,73,78,71,32,57, 55,53,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,70,56,10, 70,56,10,70,56,10,70,56,10,70,56,10,70,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 57,10,69,78,67,79,68,73,78,71,32,57,55,53,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,56,10,50,52,10,55,52,10,70, 56,10,69,56,10,70,52,10,55,52,10,50,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,65,10,69,78, 67,79,68,73,78,71,32,57,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,55,67, 10,55,67,10,51,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,66,10,69,78,67,79,68,73, 78,71,32,57,55,53,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,67,10,70,56,10,70,56,10, 70,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,49,67,10,69,78,67,79,68,73,78,71,32,57, 55,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,67,10,52,67,10,52,67,10,51,67,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,49, 68,10,69,78,67,79,68,73,78,71,32,57,55,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,49,56,10,55,56,10,54, 56,10,52,56,10,52,56,10,55,56,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,49,69,10,69,78, 67,79,68,73,78,71,32,57,55,53,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,67,10,67,56, 10,67,56,10,70,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,49,70,10,69,78,67,79,68,73, 78,71,32,57,55,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,56,10,55,56, 10,52,56,10,52,56,10,54,56,10,55,56,10,49,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,48,10,69,78,67,79,68,73,78,71,32,57, 55,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,65,56,10,70,56,10, 53,48,10,55,48,10,50,48,10,56,56,10,55,48,10,56, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 49,10,69,78,67,79,68,73,78,71,32,57,55,54,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,48,10,48,56,10,48,56,10,49,48,10,50, 48,10,52,48,10,56,48,10,56,48,10,55,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,50,10,69,78, 67,79,68,73,78,71,32,57,55,54,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,68,56,10,68,56,10,65,56, 10,65,56,10,55,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,51,10,69,78,67,79,68,73, 78,71,32,57,55,54,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,65,56,10,53,48,10,53,48,10,50,48,10, 55,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,52,10,69,78,67,79,68,73,78,71,32,57, 55,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,53,48,10,70,56,10, 53,48,10,55,48,10,53,48,10,55,48,10,53,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 53,10,69,78,67,79,68,73,78,71,32,57,55,54,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,53,48,10,53,48,10,50,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,54,10,69,78, 67,79,68,73,78,71,32,57,55,54,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,48,10,50,48,10,70,56,10,50,48,10,54,48, 10,51,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,55,10,69,78,67,79,68,73, 78,71,32,57,55,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,51,48,10,50,56, 10,50,56,10,51,48,10,65,56,10,55,48,10,50,48,10, 55,48,10,65,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,56,10,69,78,67,79,68,73,78,71,32,57, 55,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,50,48,10, 70,56,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 57,10,69,78,67,79,68,73,78,71,32,57,55,54,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,55,48,10,50,48,10,65,56,10,70, 56,10,65,56,10,50,48,10,55,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,65,10,69,78, 67,79,68,73,78,71,32,57,55,55,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 56,10,69,52,10,67,56,10,68,67,10,67,56,10,68,52, 10,67,48,10,69,52,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,66,10,69,78,67,79,68,73, 78,71,32,57,55,55,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,65,56,10,53,48,10,48,48,10,50,48, 10,65,56,10,65,56,10,65,56,10,65,56,10,65,56,10, 55,48,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,50,67,10,69,78,67,79,68,73,78,71,32,57, 55,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,55,48,10,65,56,10, 70,56,10,65,56,10,70,56,10,65,56,10,55,48,10,65, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,50, 68,10,69,78,67,79,68,73,78,71,32,57,55,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,50,56,10,54,56,10,67, 56,10,65,56,10,49,56,10,52,56,10,66,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,50,69,10,69,78, 67,79,68,73,78,71,32,57,55,55,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,70,56, 10,65,56,10,65,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,50,70,10,69,78,67,79,68,73, 78,71,32,57,55,55,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,56,10,56,52,10,69,67,10,65,52,10, 70,67,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,48,10,69,78,67,79,68,73,78,71,32,57, 55,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,70,56,10, 48,48,10,70,56,10,70,56,10,48,48,10,70,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 49,10,69,78,67,79,68,73,78,71,32,57,55,55,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,70, 56,10,70,56,10,48,48,10,70,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,50,10,69,78, 67,79,68,73,78,71,32,57,55,55,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,70,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,70,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,51,10,69,78,67,79,68,73, 78,71,32,57,55,55,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 70,56,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,52,10,69,78,67,79,68,73,78,71,32,57, 55,56,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,70,56,10, 48,48,10,70,56,10,70,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 53,10,69,78,67,79,68,73,78,71,32,57,55,56,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,70, 56,10,70,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,51,54,10,69,78, 67,79,68,73,78,71,32,57,55,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,70,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,51,55,10,69,78,67,79,68,73, 78,71,32,57,55,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,54,51,56,10,69,78,67,79,68,73,78,71,32,57, 55,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,55,48,10,68,56,10,55,48,10,65,56,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,51, 57,10,69,78,67,79,68,73,78,71,32,57,55,56,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,56,10,56,52,10,67,67,10,56,52,10,66, 52,10,56,52,10,66,52,10,67,67,10,56,52,10,55,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,115,109,105,108,101,102,97,99,101,10, 69,78,67,79,68,73,78,71,32,57,55,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,56,52,10,67,67,10,56,52,10,66,52,10, 56,52,10,67,67,10,66,52,10,56,52,10,55,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,105,110,118,115,109,105,108,101,102,97,99,101, 10,69,78,67,79,68,73,78,71,32,57,55,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,56,10,70,67,10,66,52,10,70,67,10,67,67, 10,70,67,10,66,52,10,67,67,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,115,117,110,10,69,78,67,79,68,73,78, 71,32,57,55,56,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,48,10,50,48,10, 56,56,10,50,48,10,53,48,10,50,48,10,56,56,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,51,68,10,69,78,67,79,68,73,78,71,32,57,55, 56,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,67,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,67,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,51,69, 10,69,78,67,79,68,73,78,71,32,57,55,57,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,57,56,10,65,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,57,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,51,70,10,69,78,67, 79,68,73,78,71,32,57,55,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,56, 10,55,48,10,56,56,10,56,56,10,56,56,10,55,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,102,101,109,97,108,101,10,69,78,67,79,68,73,78,71, 32,57,55,57,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,55,48,10,56, 56,10,56,56,10,56,56,10,55,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 54,52,49,10,69,78,67,79,68,73,78,71,32,57,55,57, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,55,48,10,50,48, 10,55,48,10,56,56,10,56,56,10,56,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,109,97,108,101,10,69,78,67, 79,68,73,78,71,32,57,55,57,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,67,10,55,52,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,51,10,69,78,67,79,68,73,78, 71,32,57,55,57,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,56,10,52,56,10, 65,56,10,50,56,10,50,56,10,52,56,10,70,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,52,10,69,78,67,79,68,73,78,71,32,57,55, 57,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,48,10,69,48,10,52,48,10,53, 48,10,54,56,10,52,56,10,52,56,10,53,48,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,53, 10,69,78,67,79,68,73,78,71,32,57,55,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,56,10,65,56,10,65,56,10,70,56,10,65,56, 10,65,56,10,65,56,10,50,48,10,53,48,10,50,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,54,10,69,78,67, 79,68,73,78,71,32,57,55,57,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,65,56, 10,70,67,10,65,56,10,65,56,10,65,56,10,55,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,55,10,69,78,67,79,68,73,78, 71,32,57,55,57,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,48,10,56,56,10, 56,56,10,56,56,10,70,48,10,56,48,10,56,48,10,56, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,56,10,69,78,67,79,68,73,78,71,32,57,56, 48,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,57, 10,69,78,67,79,68,73,78,71,32,57,56,48,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,56,56, 10,53,48,10,50,48,10,53,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,65,10,69,78,67, 79,68,73,78,71,32,57,56,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,53,48,10,53,48,10, 53,48,10,53,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,66,10,69,78,67,79,68,73,78, 71,32,57,56,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,51,48,10, 52,56,10,65,48,10,52,48,10,49,48,10,50,56,10,57, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,52,67,10,69,78,67,79,68,73,78,71,32,57,56, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,52,56,10,50,56,10,54,56,10,65,56,10,52,56, 10,48,52,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,52,68, 10,69,78,67,79,68,73,78,71,32,57,56,48,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,65,67,10,70,67,10,65,67,10,65,67,10,65,67, 10,65,67,10,65,56,10,65,56,10,65,56,10,49,56,10, 50,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,52,69,10,69,78,67, 79,68,73,78,71,32,57,56,48,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,55,48,10,56,56,10,53,48,10,53,48,10, 68,56,10,48,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,52,70,10,69,78,67,79,68,73,78, 71,32,57,56,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,65,56,10,70,56,10, 65,56,10,65,56,10,65,56,10,65,56,10,65,56,10,65, 56,10,65,56,10,48,67,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,48,10,69,78,67,79,68,73,78,71,32,57,56, 48,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,51, 56,10,49,56,10,65,56,10,52,48,10,65,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,49, 10,69,78,67,79,68,73,78,71,32,57,56,48,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,56,48,10,57,48,10,65,56,10,66,48, 10,67,56,10,56,56,10,48,56,10,51,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,50,10,69,78,67, 79,68,73,78,71,32,57,56,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,52,10,65,56,10,48,48,10, 48,48,10,53,52,10,65,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,51,10,69,78,67,79,68,73,78, 71,32,57,56,49,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,56,10,53,48,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,52,10,69,78,67,79,68,73,78,71,32,57,56, 49,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 50,48,10,55,48,10,55,48,10,65,56,10,70,56,10,56, 56,10,53,48,10,53,48,10,70,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,53, 10,69,78,67,79,68,73,78,71,32,57,56,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,65, 56,10,70,56,10,56,56,10,70,56,10,53,48,10,53,48, 10,56,56,10,70,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,54,10,69,78,67, 79,68,73,78,71,32,57,56,49,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,65,56,10,70,56,10,56,56,10,53,48,10,53,48,10, 53,48,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,55,10,69,78,67,79,68,73,78, 71,32,57,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,50,48,10,53,48,10,55,48,10, 68,56,10,56,56,10,53,48,10,53,48,10,55,48,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,56,10,69,78,67,79,68,73,78,71,32,57,56, 49,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,49,48,10,51,56,10,54,56,10,56, 56,10,69,56,10,50,56,10,51,56,10,52,56,10,55,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,57, 10,69,78,67,79,68,73,78,71,32,57,56,49,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,53,48,10,50,48,10,53,48, 10,53,48,10,55,48,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,65,10,69,78,67, 79,68,73,78,71,32,57,56,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,50,48,10,55,48,10,55,48, 10,65,56,10,70,56,10,70,56,10,55,48,10,55,48,10, 70,56,10,70,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,66,10,69,78,67,79,68,73,78, 71,32,57,56,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,65,56,10,70,56,10,70,56,10, 70,56,10,55,48,10,55,48,10,70,56,10,70,56,10,70, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,53,67,10,69,78,67,79,68,73,78,71,32,57,56, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,65,56,10,70,56,10,70, 56,10,55,48,10,55,48,10,55,48,10,70,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,53,68, 10,69,78,67,79,68,73,78,71,32,57,56,50,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,50, 48,10,55,48,10,55,48,10,68,56,10,56,56,10,53,48, 10,53,48,10,55,48,10,70,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,53,69,10,69,78,67, 79,68,73,78,71,32,57,56,50,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,51,56,10,53,56,10,70,56,10,70,56,10,51,56,10, 51,56,10,55,56,10,55,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,53,70,10,69,78,67,79,68,73,78, 71,32,57,56,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,50,48,10,55,48,10,55,48,10,55,48,10,70, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,115,112,97, 100,101,10,69,78,67,79,68,73,78,71,32,57,56,50,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,50,48,10,55,48,10, 55,48,10,70,56,10,70,56,10,50,48,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,54,54,49,10,69, 78,67,79,68,73,78,71,32,57,56,50,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,48,10,65,56,10,65,56,10,56, 56,10,53,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,54,54,50,10,69,78,67,79,68, 73,78,71,32,57,56,50,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,53,48,10,53,48,10,56,56,10,53,48, 10,53,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,99, 108,117,98,10,69,78,67,79,68,73,78,71,32,57,56,50, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,55,48,10,50,48,10,65,56, 10,70,56,10,70,56,10,65,56,10,50,48,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,54,54,52,10, 69,78,67,79,68,73,78,71,32,57,56,50,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,53,48,10,53,48,10, 56,56,10,70,56,10,50,48,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,104,101,97,114,116,10,69,78,67,79,68,73, 78,71,32,57,56,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,53,48,10,70,56,10,70,56,10,70,56,10,55,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,100,105, 97,109,111,110,100,10,69,78,67,79,68,73,78,71,32,57, 56,51,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 55,48,10,55,48,10,70,56,10,55,48,10,55,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,54,54, 55,10,69,78,67,79,68,73,78,71,32,57,56,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,53,48,10,50,48,10,55, 48,10,65,56,10,55,48,10,50,48,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,54,54,56,10,69,78, 67,79,68,73,78,71,32,57,56,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,57,48,10,52,56,10,57,48,10,52,56,10,48,48, 10,53,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,54,54,57,10,69,78,67,79,68,73, 78,71,32,57,56,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,55,48,10, 70,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,109,117, 115,105,99,97,108,110,111,116,101,10,69,78,67,79,68,73, 78,71,32,57,56,51,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,49,56, 10,49,52,10,49,48,10,49,48,10,49,48,10,55,48,10, 70,48,10,54,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,109,117, 115,105,99,97,108,110,111,116,101,100,98,108,10,69,78,67, 79,68,73,78,71,32,57,56,51,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,52,48, 10,54,48,10,53,48,10,52,56,10,52,56,10,67,56,10, 67,56,10,49,56,10,49,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,54,67,10,69,78,67,79,68,73,78, 71,32,57,56,51,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,54,48,10, 53,48,10,54,56,10,53,56,10,67,56,10,67,56,10,49, 56,10,49,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,54,68,10,69,78,67,79,68,73,78,71,32,57,56, 51,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,66, 48,10,67,56,10,56,56,10,56,56,10,57,48,10,69,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,54,69, 10,69,78,67,79,68,73,78,71,32,57,56,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,56,10,57,56,10,65,56,10,67,56, 10,57,56,10,65,56,10,67,56,10,56,56,10,48,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,54,70,10,69,78,67, 79,68,73,78,71,32,57,56,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,53,56,10,55,48,10,68,48,10,53,48,10,53,56,10, 55,48,10,68,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,48,10,69,78,67,79,68,73,78, 71,32,57,56,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,53,48,10,50,48,10, 65,56,10,55,48,10,65,56,10,50,48,10,50,48,10,50, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,49,10,69,78,67,79,68,73,78,71,32,57,56, 52,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,50,48,10,53,48,10,50,48,10,65,56,10,68, 56,10,65,56,10,50,48,10,50,48,10,50,48,10,53,48, 10,50,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,50, 10,69,78,67,79,68,73,78,71,32,57,56,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,51,48,10,48,56,10,67,52,10,52,67, 10,56,48,10,57,52,10,65,56,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,51,10,69,78,67, 79,68,73,78,71,32,57,56,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,48,56, 10,67,52,10,67,67,10,65,67,10,65,48,10,65,52,10, 65,52,10,57,52,10,51,56,10,49,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,52,10,69,78,67,79,68,73,78, 71,32,57,56,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,48,56,10,67,52,10, 69,67,10,68,67,10,66,48,10,67,52,10,70,52,10,57, 52,10,51,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,53,10,69,78,67,79,68,73,78,71,32,57,56, 52,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,48,56,10,67,52,10,69,67,10,68, 67,10,57,48,10,66,52,10,68,52,10,66,52,10,51,56, 10,49,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,54, 10,69,78,67,79,68,73,78,71,32,57,56,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,48,56,10,67,52,10,67,67,10,67,67,10,68,48, 10,70,67,10,57,52,10,57,52,10,51,56,10,49,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,55,10,69,78,67, 79,68,73,78,71,32,57,56,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,49,48,10,48,56, 10,67,52,10,67,67,10,70,67,10,67,48,10,69,52,10, 57,52,10,70,52,10,51,56,10,49,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,56,10,69,78,67,79,68,73,78, 71,32,57,56,52,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,48,56,10,67,52,10, 68,67,10,65,67,10,69,48,10,68,52,10,68,52,10,66, 52,10,51,56,10,49,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,57,10,69,78,67,79,68,73,78,71,32,57,56, 52,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,49,48,10,48,56,10,67,52,10,67,67,10,70, 67,10,57,48,10,65,52,10,65,52,10,66,52,10,51,56, 10,49,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,55,65, 10,69,78,67,79,68,73,78,71,32,57,56,53,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,48,56,10,67,52,10,67,67,10,56,67,10,56,48, 10,56,52,10,56,52,10,57,52,10,51,56,10,49,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,55,66,10,69,78,67, 79,68,73,78,71,32,57,56,53,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,51,48,10,50,56,10,67,67,10,67,67,10,56,48,10, 57,52,10,66,56,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,55,67,10,69,78,67,79,68,73,78, 71,32,57,56,53,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,70,67,10,67,67,10, 68,52,10,51,48,10,51,48,10,55,67,10,54,56,10,52, 52,10,69,67,10,70,67,10,55,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,55,68,10,69,78,67,79,68,73,78,71,32,57,56, 53,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,56,10,56,52,10,51,48,10,50,56,10,67, 67,10,67,67,10,56,48,10,57,52,10,66,56,10,49,48, 10,56,52,10,55,56,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,48, 10,69,78,67,79,68,73,78,71,32,57,56,53,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,56,56,10,56,56,10,65,56, 10,56,56,10,56,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,49,10,69,78,67, 79,68,73,78,71,32,57,56,53,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,56,10,67,56,10,56,56,10,56,56,10,56,56,10, 57,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,50,10,69,78,67,79,68,73,78, 71,32,57,56,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,56,56,10, 67,56,10,56,56,10,65,56,10,56,56,10,57,56,10,56, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,51,10,69,78,67,79,68,73,78,71,32,57,56, 53,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,56,56,10,68,56,10,56, 56,10,56,56,10,56,56,10,68,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,52, 10,69,78,67,79,68,73,78,71,32,57,56,54,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,56,56,10,68,56,10,56,56,10,65,56, 10,56,56,10,68,56,10,56,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,53,10,69,78,67, 79,68,73,78,71,32,57,56,54,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,56,56,10,68,56,10,56,56,10,68,56,10,56,56,10, 68,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,54,56,54,10,69,78,67,79,68,73,78, 71,32,57,56,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,57,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,54,56,55,10,69,78,67,79,68,73,78,71,32,57,56, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,68,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,54,56,56, 10,69,78,67,79,68,73,78,71,32,57,56,54,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,70,56, 10,69,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,54,56,57,10,69,78,67, 79,68,73,78,71,32,57,56,54,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,70,56,10,65,56,10, 70,56,10,55,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,48,49,10,69,78,67,79,68,73,78, 71,32,57,57,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,53,48,10,66, 67,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,48,50,10,69,78,67,79,68,73,78,71,32,57,57, 56,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,65, 52,10,54,56,10,49,48,10,54,56,10,65,52,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,48,51, 10,69,78,67,79,68,73,78,71,32,57,57,56,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,56,10,66,67,10,53,48,10,50,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,48,52,10,69,78,67, 79,68,73,78,71,32,57,57,56,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,65,67,10,55,56,10,49,48,10, 55,56,10,65,67,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,48,54,10,69,78,67,79,68,73,78, 71,32,57,57,57,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,56,52,10,66,52,10, 66,52,10,65,52,10,65,52,10,65,52,10,66,52,10,66, 52,10,52,52,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,48,56,10,69,78,67,79,68,73,78,71,32,57,57, 57,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,49,48,10,57, 48,10,70,67,10,57,48,10,49,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,49,51, 10,69,78,67,79,68,73,78,71,32,49,48,48,48,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,52,10,48,52,10,48,56,10,48,56,10,48, 56,10,57,48,10,53,48,10,50,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,49,52,10,69,78, 67,79,68,73,78,71,32,49,48,48,48,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,67,10,48,67,10,48,67,10,49,56,10,49,56,10,57, 56,10,68,56,10,55,48,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,49,53,10,69,78,67,79,68, 73,78,71,32,49,48,48,48,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,53,48,10,50, 48,10,53,48,10,56,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,49,54,10,69,78,67,79,68,73,78,71, 32,49,48,48,48,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,56,10,68,56,10,55,48,10,55,48,10,68, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,49,55,10,69,78,67,79,68,73,78,71,32,49,48, 48,48,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,56,10, 57,48,10,53,48,10,50,48,10,53,48,10,52,56,10,56, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,49, 56,10,69,78,67,79,68,73,78,71,32,49,48,48,48,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,56,10,57,56,10,68,48,10, 55,48,10,55,48,10,53,56,10,67,56,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,49,57,10,69, 78,67,79,68,73,78,71,32,49,48,48,48,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,51,48,10,51,48,10,51,48,10,70,67,10, 70,67,10,51,48,10,51,48,10,51,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,49,65,10,69,78,67,79, 68,73,78,71,32,49,48,48,49,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,51,48,10,51,48,10,51,48,10,70,67,10,70,67,10, 51,48,10,51,48,10,51,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,49,66,10,69,78,67,79,68,73,78, 71,32,49,48,48,49,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,68,56,10,50,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,49,67,10,69,78,67,79,68,73,78,71,32,49, 48,48,49,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,51,48,10,51,48, 10,51,48,10,67,67,10,67,67,10,51,48,10,51,48,10, 51,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 49,68,10,69,78,67,79,68,73,78,71,32,49,48,48,49, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,50,48,10,50,48,10,70,56,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,49,69,10, 69,78,67,79,68,73,78,71,32,49,48,48,49,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,53,56,10,68,67,10,56,67,10,68,67, 10,53,67,10,53,56,10,53,56,10,55,56,10,51,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,49,70,10,69,78,67, 79,68,73,78,71,32,49,48,48,49,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,51, 48,10,51,48,10,70,67,10,70,67,10,51,48,10,51,48, 10,51,48,10,51,48,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,50,48,10,69,78,67,79,68,73, 78,71,32,49,48,48,49,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,50,48,10,65,56,10,70,56,10,65,56, 10,50,48,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,50,50,10,69,78,67,79,68,73,78,71,32, 49,48,48,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,51,48,10,51, 48,10,51,48,10,70,67,10,70,67,10,51,48,10,51,48, 10,51,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,50,51,10,69,78,67,79,68,73,78,71,32,49,48,48, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,65, 56,10,70,56,10,65,56,10,50,48,10,55,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,50,52, 10,69,78,67,79,68,73,78,71,32,49,48,48,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,65,56,10,70, 56,10,65,56,10,50,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,50,53,10,69,78, 67,79,68,73,78,71,32,49,48,48,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,65,56,10,70,56,10,65, 56,10,50,48,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,50,54,10,69,78,67,79,68, 73,78,71,32,49,48,48,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,70,56,10,55,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,50,55,10,69,78,67,79,68,73,78,71, 32,49,48,48,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,56,56,10,53,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,50,57,10,69,78,67,79,68,73,78,71,32,49,48, 48,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,53,48,10,55,48,10,56,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,50, 65,10,69,78,67,79,68,73,78,71,32,49,48,48,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,68,56,10,68,56,10,48,48,10, 56,56,10,56,56,10,55,48,10,70,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,50,66,10,69, 78,67,79,68,73,78,71,32,49,48,48,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,53,48,10, 55,48,10,56,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,50,67,10,69,78,67,79, 68,73,78,71,32,49,48,48,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,70,56,10,55,48,10,55,48,10, 56,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,50,68,10,69,78,67,79,68,73,78, 71,32,49,48,48,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,70,56,10,55,48,10,55,48,10,56,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,50,69,10,69,78,67,79,68,73,78,71,32,49, 48,48,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,55,48,10,55,48,10,56,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 50,70,10,69,78,67,79,68,73,78,71,32,49,48,48,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,56, 10,55,48,10,55,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,51,48,10, 69,78,67,79,68,73,78,71,32,49,48,48,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,51,48,10,51,48,10,70,67,10,53,56, 10,55,56,10,67,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,51,49,10,69,78,67, 79,68,73,78,71,32,49,48,48,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,56,10,55,48,10,55,48,10,55,48, 10,65,56,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,51,50,10,69,78,67,79,68,73, 78,71,32,49,48,48,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,53,48,10,55,48,10,65,56, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,51,51,10,69,78,67,79,68,73,78,71,32, 49,48,48,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,65, 56,10,55,48,10,70,56,10,55,48,10,65,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,51,52,10,69,78,67,79,68,73,78,71,32,49,48,48, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,65,56,10,55, 48,10,70,56,10,55,48,10,65,56,10,50,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,51,53, 10,69,78,67,79,68,73,78,71,32,49,48,48,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,65,56,10,55,48,10,70, 56,10,55,48,10,65,56,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,51,54,10,69,78, 67,79,68,73,78,71,32,49,48,48,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,55,48,10,55, 48,10,65,56,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,51,55,10,69,78,67,79,68, 73,78,71,32,49,48,48,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 53,48,10,53,48,10,70,56,10,50,48,10,70,56,10,53, 48,10,53,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,51,56,10,69,78,67,79,68,73,78,71, 32,49,48,48,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,53,48,10, 55,48,10,70,56,10,55,48,10,70,56,10,55,48,10,53, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,51,66,10,69,78,67,79,68,73,78,71,32,49,48, 48,52,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,65,56,10, 65,56,10,55,48,10,65,56,10,65,56,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,51, 67,10,69,78,67,79,68,73,78,71,32,49,48,48,52,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,50,48,10,65,56,10,65,56,10, 53,48,10,65,56,10,65,56,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,51,68,10,69, 78,67,79,68,73,78,71,32,49,48,48,52,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,50,48,10,65,56,10,65,56,10,55,48,10, 65,56,10,65,56,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,51,69,10,69,78,67,79, 68,73,78,71,32,49,48,48,52,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,65,56,10,65,56,10,53,48,10,65,56,10, 65,56,10,50,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,51,70,10,69,78,67,79,68,73,78, 71,32,49,48,48,52,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,50,48,10,70,56,10,53,48,10,55,48,10,68,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,52,51,10,69,78,67,79,68,73,78,71,32,49, 48,48,53,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,65,56, 10,65,56,10,55,48,10,65,56,10,65,56,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 52,52,10,69,78,67,79,68,73,78,71,32,49,48,48,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,50,48,10,65,56,10,65,56, 10,55,48,10,65,56,10,65,56,10,50,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,52,53,10, 69,78,67,79,68,73,78,71,32,49,48,48,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,48,10,65,56,10,65,56,10,55,48, 10,65,56,10,65,56,10,50,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,52,54,10,69,78,67, 79,68,73,78,71,32,49,48,48,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,56,10,65,56,10,55,48,10,65,56, 10,65,56,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,52,55,10,69,78,67,79,68,73, 78,71,32,49,48,48,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,65,56,10,55,48,10,70,56,10,55,48,10,65,56, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,52,56,10,69,78,67,79,68,73,78,71,32, 49,48,48,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,65, 56,10,55,48,10,70,56,10,55,48,10,65,56,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,52,57,10,69,78,67,79,68,73,78,71,32,49,48,48, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,65,56,10,65, 56,10,55,48,10,65,56,10,65,56,10,50,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,52,65, 10,69,78,67,79,68,73,78,71,32,49,48,48,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,65,56,10,55,48,10,70, 56,10,55,48,10,65,56,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,52,66,10,69,78, 67,79,68,73,78,71,32,49,48,48,53,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,65,56,10,55,48,10,70,56,10,55, 48,10,65,56,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,52,68,10,69,78,67,79,68, 73,78,71,32,49,48,48,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,55,56,10,56,67,10,56,67,10,56, 67,10,56,67,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,52,70,10,69,78,67,79,68,73,78,71, 32,49,48,48,54,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,56,10,56,67,10,56,67,10,70, 67,10,51,67,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,53,48,10,69,78,67,79,68,73,78,71,32,49,48, 48,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 51,67,10,70,67,10,56,67,10,56,67,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,53, 49,10,69,78,67,79,68,73,78,71,32,49,48,48,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 56,67,10,56,67,10,56,67,10,70,67,10,55,67,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,53,50,10,69, 78,67,79,68,73,78,71,32,49,48,48,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,67,10,70,67,10, 56,67,10,56,67,10,56,67,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,53,54,10,69,78,67,79, 68,73,78,71,32,49,48,48,55,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,50,48, 10,55,48,10,50,48,10,53,48,10,70,56,10,53,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,53,56,10,69,78,67,79,68,73,78, 71,32,49,48,48,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,53,57,10,69,78,67,79,68,73,78,71,32,49, 48,48,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,55,48,10,55,48, 10,55,48,10,55,48,10,55,48,10,55,48,10,55,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 53,65,10,69,78,67,79,68,73,78,71,32,49,48,48,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,56,10,70,56,10,70,56,10,70,56, 10,70,56,10,70,56,10,70,56,10,70,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,53,66,10, 69,78,67,79,68,73,78,71,32,49,48,48,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,51, 48,10,52,48,10,55,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,53,67,10,69,78,67, 79,68,73,78,71,32,49,48,48,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,50,48,10,55, 48,10,55,48,10,49,48,10,54,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,48,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,54,67,10,57,48,10,70, 67,10,70,67,10,52,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,53,69,10,69,78,67,79,68,73,78,71,32, 49,48,48,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,52,56,10,70,67,10,70,67,10,50, 52,10,68,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,54,49,10,69,78,67,79,68,73,78,71,32,49,48,48, 56,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,56,10,55,67,10,69,56,10,69,56,10,55, 56,10,48,56,10,54,56,10,54,56,10,52,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,54,50, 10,69,78,67,79,68,73,78,71,32,49,48,48,56,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,48,10,55,48,10,55,48,10,50,48,10,50, 48,10,48,48,10,50,48,10,55,48,10,50,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,54,51,10,69,78, 67,79,68,73,78,71,32,49,48,48,56,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 53,48,10,70,56,10,70,56,10,55,48,10,50,48,10,48, 48,10,50,48,10,55,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,54,52,10,69,78,67,79,68, 73,78,71,32,49,48,48,56,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,53,48,10,70,56,10,70,56,10,70,56,10,55, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,54,53,10,69,78,67,79,68,73,78,71, 32,49,48,48,56,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 54,48,10,70,48,10,70,56,10,55,67,10,70,56,10,70, 48,10,54,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,54,54,10,69,78,67,79,68,73,78,71,32,49,48, 48,56,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,56,10,66,48,10,49,48,10, 68,56,10,70,56,10,70,48,10,54,48,10,54,56,10,51, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,54, 55,10,69,78,67,79,68,73,78,71,32,49,48,48,56,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,52,48,10,57,48,10,66,56,10, 55,67,10,53,67,10,66,67,10,66,56,10,53,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,55,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,48,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,70,56,10,68,56,10,57,56,10,68,56,10, 68,56,10,56,56,10,70,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,55,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,48,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,70,56,10,68,56,10,65,56,10,69,56,10,68,56,10, 56,56,10,70,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,55,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,48,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,70,56, 10,68,56,10,65,56,10,68,56,10,69,56,10,57,56,10, 70,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,48,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,70,56,10,66,56, 10,66,56,10,57,56,10,56,56,10,68,56,10,70,56,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 55,65,10,69,78,67,79,68,73,78,71,32,49,48,49,48, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,70,56,10,56,56,10,66,56, 10,57,56,10,69,56,10,57,56,10,70,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,55,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,48,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,70,56,10,67,56,10,66,56,10,57,56, 10,65,56,10,68,56,10,70,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,55,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,48,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,70,56,10,56,56,10,69,56,10,68,56,10,68,56, 10,68,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,48,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,70, 56,10,68,56,10,65,56,10,68,56,10,65,56,10,68,56, 10,70,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,55,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,49,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,70,56,10,68, 56,10,65,56,10,67,56,10,69,56,10,57,56,10,70,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,55,70,10,69,78,67,79,68,73,78,71,32,49,48,49, 49,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,56,10,70,67,10,65,67,10,57, 52,10,57,52,10,57,52,10,65,67,10,70,67,10,55,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,56,48, 10,69,78,67,79,68,73,78,71,32,49,48,49,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,65,56,10,69,56,10,65, 56,10,65,56,10,65,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,56,49,10,69,78, 67,79,68,73,78,71,32,49,48,49,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,65,56,10,68,56,10,57,56,10,65, 56,10,70,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,56,50,10,69,78,67,79,68, 73,78,71,32,49,48,49,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,65,56,10,68,56,10,65,56,10,57,56,10,69, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,56,51,10,69,78,67,79,68,73,78,71, 32,49,48,49,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,56,56,10, 67,56,10,67,56,10,69,56,10,70,56,10,65,56,10,56, 56,10,55,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,56,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,55,48,10,56,56,10,70,56,10, 67,56,10,69,56,10,57,56,10,69,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,56, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,55,48,10,56,56,10,66,56,10,67,56,10, 69,56,10,68,56,10,65,56,10,56,56,10,55,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,56,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,48,10,56,56,10,70,56,10,57,56,10,65,56,10, 65,56,10,65,56,10,56,56,10,55,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,56,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,49,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,65,56,10,68,56,10,65,56,10,68,56,10, 65,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,56,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,50,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,65,56,10,68,56,10,66,56,10,57,56,10,69,56,10, 56,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,50,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,56,52,10,68,52, 10,69,67,10,69,67,10,69,67,10,68,52,10,56,52,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 56,65,10,69,78,67,79,68,73,78,71,32,49,48,49,50, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,70,56,10,68,56,10,57,56, 10,68,56,10,68,56,10,68,56,10,70,56,10,55,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,56,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,50,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,70,56,10,68,56,10,65,56,10,69,56, 10,68,56,10,56,56,10,70,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,56,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,50,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,55, 48,10,70,56,10,68,56,10,65,56,10,68,56,10,69,56, 10,57,56,10,70,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,50,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,70, 56,10,66,56,10,66,56,10,57,56,10,56,56,10,68,56, 10,70,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,56,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,50,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,70,56,10,56, 56,10,66,56,10,57,56,10,69,56,10,57,56,10,70,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,56,70,10,69,78,67,79,68,73,78,71,32,49,48,49, 50,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,70,56,10,67,56,10,66, 56,10,57,56,10,65,56,10,68,56,10,70,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,57,48, 10,69,78,67,79,68,73,78,71,32,49,48,49,50,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,70,56,10,56,56,10,69,56,10,68, 56,10,68,56,10,68,56,10,70,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,57,49,10,69,78, 67,79,68,73,78,71,32,49,48,49,50,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,70,56,10,68,56,10,65,56,10,68,56,10,65, 56,10,68,56,10,70,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,57,50,10,69,78,67,79,68, 73,78,71,32,49,48,49,51,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 70,56,10,68,56,10,65,56,10,67,56,10,69,56,10,57, 56,10,70,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,57,51,10,69,78,67,79,68,73,78,71, 32,49,48,49,51,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,56,10,70,67,10, 65,67,10,57,52,10,57,52,10,57,52,10,65,67,10,70, 67,10,55,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,57,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,51,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,51,48,10,49,56,10, 70,67,10,70,67,10,49,56,10,51,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,57, 56,10,69,78,67,79,68,73,78,71,32,49,48,49,51,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,56,48,10,52,48,10, 50,56,10,49,56,10,51,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,57,57,10,69, 78,67,79,68,73,78,71,32,49,48,49,51,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,48,10,51,48,10,70,56,10, 51,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,57,65,10,69,78,67,79, 68,73,78,71,32,49,48,49,51,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,56,10,49,56,10,50,56,10,52,48,10, 56,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,57,66,10,69,78,67,79,68,73,78, 71,32,49,48,49,51,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,52,48, 10,50,48,10,51,48,10,70,67,10,51,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,57,67,10,69,78,67,79,68,73,78,71,32,49, 48,49,52,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,51,48,10,49,56, 10,70,67,10,70,67,10,49,56,10,51,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 57,68,10,69,78,67,79,68,73,78,71,32,49,48,49,52, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,49,56, 10,70,67,10,49,56,10,49,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,57,69,10, 69,78,67,79,68,73,78,71,32,49,48,49,52,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,49,48,10,49,56,10,70,67,10,70,67, 10,49,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,57,70,10,69,78,67, 79,68,73,78,71,32,49,48,49,52,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,49,48,10,49,56,10,66,67,10,66,67,10,49,56, 10,49,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,65,48,10,69,78,67,79,68,73, 78,71,32,49,48,49,52,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,51,48,10,66,56,10,66,67,10,66,56,10,51,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,65,49,10,69,78,67,79,68,73,78,71,32, 49,48,49,52,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,50,48,10,51, 48,10,70,56,10,70,67,10,70,56,10,51,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,65,52,10,69,78,67,79,68,73,78,71,32,49,48,49, 52,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,67,48,10,55, 48,10,51,67,10,55,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,65,53, 10,69,78,67,79,68,73,78,71,32,49,48,49,52,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,66,48,10,70,56,10,70, 67,10,55,56,10,51,48,10,50,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,65,54,10,69,78, 67,79,68,73,78,71,32,49,48,49,53,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,51,48,10,55,56,10,70,67,10,70, 56,10,66,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,65,55,10,69,78,67,79,68, 73,78,71,32,49,48,49,53,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,50,48,10,50,48,10,51,48,10, 70,48,10,70,56,10,70,56,10,70,67,10,70,56,10,70, 56,10,70,48,10,51,48,10,50,48,10,50,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,66,50,10,69,78,67,79,68,73,78,71, 32,49,48,49,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,70,67,10,68,67,10, 67,67,10,48,52,10,48,48,10,48,52,10,67,67,10,68, 67,10,70,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,66,52,10,69,78,67,79,68,73,78,71,32,49,48, 49,54,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 69,48,10,49,52,10,48,67,10,49,67,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,66, 53,10,69,78,67,79,68,73,78,71,32,49,48,49,54,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,67,56,10, 55,67,10,67,56,10,57,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,66,54,10,69, 78,67,79,68,73,78,71,32,49,48,49,54,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,67,10,48,67,10,49,52,10,69,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,66,55,10,69,78,67,79, 68,73,78,71,32,49,48,49,54,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,50,48,10,50,48,10,69,48,10,49,52,10,48,67,10, 49,67,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,66,56,10,69,78,67,79,68,73,78, 71,32,49,48,49,54,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,57,48,10,67,56,10,55,67,10,67,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,49,54,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,49,67,10,48,67, 10,49,52,10,69,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 66,65,10,69,78,67,79,68,73,78,71,32,49,48,49,55, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,48,10,48,56, 10,70,67,10,48,56,10,49,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,66,66,10, 69,78,67,79,68,73,78,71,32,49,48,49,55,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,48,10,67,56,10,70,67, 10,67,56,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,66,67,10,69,78,67, 79,68,73,78,71,32,49,48,49,55,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,56,10,55,67,10,69,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,49,55,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,48,10,68,56,10,55,67,10,68,56,10,68,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,66,69,10,69,78,67,79,68,73,78,71,32, 49,48,49,55,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,65,48,10,53,48,10,50, 56,10,70,52,10,48,52,10,70,52,10,50,56,10,53,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,69,54,10,69,78,67,79,68,73,78,71,32,49,48,50, 49,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,70,56,10,65,48,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,70,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,55,69,55, 10,69,78,67,79,68,73,78,71,32,49,48,50,49,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,50,56,10,50,56,10,50,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,70,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,55,69,56,10,69,78, 67,79,68,73,78,71,32,49,48,50,49,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,50, 48,10,50,48,10,49,48,10,49,48,10,48,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,55,69,57,10,69,78,67,79,68, 73,78,71,32,49,48,50,49,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,52,48,10,50,48,10, 50,48,10,49,48,10,49,48,10,48,56,10,49,48,10,49, 48,10,50,48,10,50,48,10,52,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,55,69,65,10,69,78,67,79,68,73,78,71, 32,49,48,50,49,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,52,10,50,56,10,50,56,10, 53,48,10,53,48,10,65,48,10,53,48,10,53,48,10,50, 56,10,50,56,10,49,52,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,55,69,66,10,69,78,67,79,68,73,78,71,32,49,48, 50,49,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,65,48,10,53,48,10,53,48,10,50,56,10, 50,56,10,49,52,10,50,56,10,50,56,10,53,48,10,53, 48,10,65,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,55,70, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,50,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,70,67,10,52,48,10,50,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,55,70,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,51,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,48,56,10, 70,67,10,48,56,10,49,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,55,70,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,51,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,56,10,70,67,10, 52,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,55,70,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,51,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,50,48,10,55,67,10,56,48,10,55,67,10, 50,48,10,49,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,55,70,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,51,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,49,48,10,70,56,10,48,52,10,70,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,55, 70,65,10,69,78,67,79,68,73,78,71,32,49,48,50,51, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,52,56, 10,70,67,10,56,52,10,70,67,10,52,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,55,70,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,51,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,52,10,52,52, 10,70,67,10,52,52,10,50,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,55,70,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,51,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,57,48,10,56,56,10,70,67, 10,56,56,10,57,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,55,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,51,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,52,10,50,52,10,55,67,10,56,52,10,55,67, 10,50,52,10,49,52,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,55,70,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,51,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,65, 48,10,57,48,10,70,56,10,56,52,10,70,56,10,57,48, 10,65,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 55,70,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 51,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 56,10,53,67,10,65,67,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,48,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,52,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,48,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,52,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,48,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,48,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,52,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,48,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,52,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,48, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,52,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,48,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,52,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,48,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,52,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,48,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,48,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 48,65,10,69,78,67,79,68,73,78,71,32,49,48,50,53, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,48,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,53,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,48,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,53,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,48,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,53,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,48,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,53,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,48,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 53,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,49,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,53,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,49,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,53,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,49,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,53,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,49,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,53,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,49,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,54,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,49, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,54,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,49,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,54,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,49,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,54,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,49,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,54,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,49,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,54,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 49,65,10,69,78,67,79,68,73,78,71,32,49,48,50,54, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,49,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,54,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,49,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,54,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,49,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,54,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,49,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,55,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,49,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 55,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,50,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,55,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,50,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,55,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,50,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,55,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,50,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,55,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,50,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,55,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,50, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,55,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,50,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,55,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,50,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,55,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,50,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,56,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,50,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 50,65,10,69,78,67,79,68,73,78,71,32,49,48,50,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,50,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,50,67,10,69,78,67, 79,68,73,78,71,32,49,48,50,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,50,68,10,69,78,67,79,68,73, 78,71,32,49,48,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,50,69,10,69,78,67,79,68,73,78,71,32, 49,48,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,50,70,10,69,78,67,79,68,73,78,71,32,49,48,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,51,48, 10,69,78,67,79,68,73,78,71,32,49,48,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,51,49,10,69,78, 67,79,68,73,78,71,32,49,48,50,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,51,50,10,69,78,67,79,68, 73,78,71,32,49,48,50,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,51,51,10,69,78,67,79,68,73,78,71, 32,49,48,50,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,51,52,10,69,78,67,79,68,73,78,71,32,49,48, 50,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,51, 53,10,69,78,67,79,68,73,78,71,32,49,48,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,51,54,10,69, 78,67,79,68,73,78,71,32,49,48,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,51,55,10,69,78,67,79, 68,73,78,71,32,49,48,50,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,51,56,10,69,78,67,79,68,73,78, 71,32,49,48,50,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,51,57,10,69,78,67,79,68,73,78,71,32,49, 48,50,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 51,65,10,69,78,67,79,68,73,78,71,32,49,48,50,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,51,66,10, 69,78,67,79,68,73,78,71,32,49,48,50,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,51,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,51,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,51,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,51,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,52,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,52,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,52,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,52,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,52,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,52, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,52,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,52,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,52,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,52,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 52,65,10,69,78,67,79,68,73,78,71,32,49,48,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,52,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,52,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,52,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,52,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,52,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,53,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,53,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,53,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,53,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,53,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,53, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,53,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,53,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,53,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,53,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 53,65,10,69,78,67,79,68,73,78,71,32,49,48,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,53,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,53,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,53,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,53,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,53,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,54,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,54,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,54,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,54,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,54,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,54, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,54,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,54,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,54,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,54,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 54,65,10,69,78,67,79,68,73,78,71,32,49,48,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,54,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,54,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,54,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,54,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,54,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,55,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,55,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,55,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,55,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,67,48,10,67,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,55,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,55, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,55,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,67,48,10,67,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,55,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,67,48,10,67,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,55,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,55,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 55,65,10,69,78,67,79,68,73,78,71,32,49,48,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,55,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,67,48,10,67,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,55,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,67,48,10,67,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,55,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,67,48,10,67,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,55,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,67,48,10,67,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,55,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,56,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,56,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,56,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,56,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,56,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,56, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,56,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,56,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,55,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,56,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,55,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,56,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,55,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 56,65,10,69,78,67,79,68,73,78,71,32,49,48,51,55, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,56,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,55,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,56,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,56,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,56,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,56,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,56,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,56,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,56,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 56,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,57,48, 10,69,78,67,79,68,73,78,71,32,49,48,51,56,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,57,49,10,69,78, 67,79,68,73,78,71,32,49,48,51,56,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,57,50,10,69,78,67,79,68, 73,78,71,32,49,48,51,56,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,57,51,10,69,78,67,79,68,73,78,71, 32,49,48,51,56,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,57,52,10,69,78,67,79,68,73,78,71,32,49,48, 51,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,57, 53,10,69,78,67,79,68,73,78,71,32,49,48,51,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,57,54,10,69, 78,67,79,68,73,78,71,32,49,48,51,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,57,55,10,69,78,67,79, 68,73,78,71,32,49,48,51,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,57,56,10,69,78,67,79,68,73,78, 71,32,49,48,51,57,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,57,57,10,69,78,67,79,68,73,78,71,32,49, 48,51,57,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 57,65,10,69,78,67,79,68,73,78,71,32,49,48,51,57, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,57,66,10, 69,78,67,79,68,73,78,71,32,49,48,51,57,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,57,67,10,69,78,67, 79,68,73,78,71,32,49,48,51,57,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,57,68,10,69,78,67,79,68,73, 78,71,32,49,48,51,57,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,57,69,10,69,78,67,79,68,73,78,71,32, 49,48,51,57,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,57,70,10,69,78,67,79,68,73,78,71,32,49,48,51, 57,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,65,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,48,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,65,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,48,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,65,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,48,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,65,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,48,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,65,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,48,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,65, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,48,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,65,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,48,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,65,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,48,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,65,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,48,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,65,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,48,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 65,65,10,69,78,67,79,68,73,78,71,32,49,48,52,49, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,65,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,49,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,65,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,49,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,65,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,49,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,65,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,49,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,65,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 49,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,66,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,49,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,49,56,10,49,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,66,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,49,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,49,56,10,49,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,66,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,49,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,66,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,49,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,66,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,50,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,66, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,50,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,66,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,50,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,66,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,50,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,49,56,10,49,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,66,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,50,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,49,56,10,49,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,66,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,50,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 49,56,10,49,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 66,65,10,69,78,67,79,68,73,78,71,32,49,48,52,50, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,49,56,10, 49,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,66,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,50,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,66,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,50,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,66,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,50,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,66,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,51,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,66,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 51,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,67,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,51,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,67,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,51,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,67,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,51,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,67,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,51,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,67,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,51,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,67,48,10,67,48,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,67, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,51,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,67,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,51,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,67,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,51,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,67,48,10, 67,48,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,67,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,52,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,67,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,52,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 67,65,10,69,78,67,79,68,73,78,71,32,49,48,52,52, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,67,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,52,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,67,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,52,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,67,48, 10,67,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,67,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,52,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,67,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,52,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,67,48,10,67,48,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,67,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 52,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,67,48,10,67,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,68,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,52,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,68,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,52,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,68,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,53,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,68,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,48,48,10,48,48,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,68,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,53,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,67,48,10,67,48,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,68, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,53,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,67,48,10,67,48,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,68,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,53,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 67,48,10,67,48,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,68,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,53,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,67,48,10, 67,48,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,68,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,53,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,68,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,53,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 68,65,10,69,78,67,79,68,73,78,71,32,49,48,52,53, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,68,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,53,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,68,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,54,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,67,48, 10,67,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,68,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,54,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,68,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,54,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,68,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 54,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,67,48,10,67,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,69,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,54,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,69,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,54,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 56,10,49,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,69,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,54,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,67,48,10,67,48,10,48,48,10,49,56,10,49, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,69,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,54,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 67,48,10,67,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,69,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,54,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,68,56,10,68,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,69, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,54,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,69,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,55,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,69,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,55,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,67,48,10,67,48,10,48,48,10,68,56,10, 68,56,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,69,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,55,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,69,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,55,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,49,56,10,49,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 69,65,10,69,78,67,79,68,73,78,71,32,49,48,52,55, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,67,48,10,67,48, 10,48,48,10,49,56,10,49,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,69,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,55,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,67,48,10,67,48,10,48,48, 10,49,56,10,49,56,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,69,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,55,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,69,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,55,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,69,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,55,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,67, 48,10,67,48,10,48,48,10,68,56,10,68,56,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,69,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 55,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,67,48,10,67, 48,10,48,48,10,68,56,10,68,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,56,70,48, 10,69,78,67,79,68,73,78,71,32,49,48,52,56,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,56,10,49,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,56,70,49,10,69,78, 67,79,68,73,78,71,32,49,48,52,56,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,67,48,10, 67,48,10,48,48,10,49,56,10,49,56,10,48,48,10,49, 56,10,49,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,56,70,50,10,69,78,67,79,68, 73,78,71,32,49,48,52,56,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,68,56,10,68,56,10,48,48,10,49,56,10,49, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,56,70,51,10,69,78,67,79,68,73,78,71, 32,49,48,52,56,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,67,48,10,67,48,10,48,48,10, 68,56,10,68,56,10,48,48,10,49,56,10,49,56,10,48, 48,10,68,56,10,68,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,56,70,52,10,69,78,67,79,68,73,78,71,32,49,48, 52,56,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,56,10, 49,56,10,48,48,10,68,56,10,68,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,56,70, 53,10,69,78,67,79,68,73,78,71,32,49,48,52,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,67,48,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,56,70,54,10,69, 78,67,79,68,73,78,71,32,49,48,52,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,68,56,10,68,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,68,56,10,68,56,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,56,70,55,10,69,78,67,79, 68,73,78,71,32,49,48,52,56,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,67,48,10,67,48, 10,48,48,10,68,56,10,68,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,68,56,10,68,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,56,70,56,10,69,78,67,79,68,73,78, 71,32,49,48,52,56,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,49,56,10,49,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,49,56,10,49,56,10, 48,48,10,68,56,10,68,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,56,70,57,10,69,78,67,79,68,73,78,71,32,49, 48,52,56,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,68,56,10,68,56,10,48,48,10,49,56, 10,49,56,10,48,48,10,49,56,10,49,56,10,48,48,10, 68,56,10,68,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,56, 70,65,10,69,78,67,79,68,73,78,71,32,49,48,52,57, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,49,56,10,49,56,10,48,48,10,68,56,10, 68,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,56,70,66,10, 69,78,67,79,68,73,78,71,32,49,48,52,57,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,49,56,10,49,56,10,48,48,10,68,56,10,68,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,56,70,67,10,69,78,67, 79,68,73,78,71,32,49,48,52,57,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,56,10,49, 56,10,48,48,10,49,56,10,49,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,68,56,10,68,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,56,70,68,10,69,78,67,79,68,73, 78,71,32,49,48,52,57,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,68,56,10,68,56,10,48, 48,10,49,56,10,49,56,10,48,48,10,68,56,10,68,56, 10,48,48,10,68,56,10,68,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,56,70,69,10,69,78,67,79,68,73,78,71,32, 49,48,52,57,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,49,56,10,49,56,10,48,48,10,68, 56,10,68,56,10,48,48,10,68,56,10,68,56,10,48,48, 10,68,56,10,68,56,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 56,70,70,10,69,78,67,79,68,73,78,71,32,49,48,52, 57,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,68,56,10,68,56,10,48,48,10,68,56,10,68, 56,10,48,48,10,68,56,10,68,56,10,48,48,10,68,56, 10,68,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,57,48,54, 10,69,78,67,79,68,73,78,71,32,49,48,53,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,49,52,10,50,52,10,55, 67,10,56,52,10,55,67,10,50,52,10,49,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,57,48,55,10,69,78, 67,79,68,73,78,71,32,49,48,53,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,65,48,10,57,48,10,70,56,10,56, 52,10,70,56,10,57,48,10,65,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,57,56,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,51,56,10,53,48,10, 53,48,10,53,48,10,53,48,10,57,48,10,53,48,10,53, 48,10,53,48,10,53,48,10,51,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,57,56,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,69,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,52,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,69,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,57,56,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,56,10,49,48,10,51,48,10,51,48,10, 53,48,10,53,48,10,53,48,10,51,48,10,51,48,10,49, 48,10,48,56,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,57,56, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,52,48,10,50,48,10,51,48,10,51,48,10,50,56,10, 50,56,10,50,56,10,51,48,10,51,48,10,50,48,10,52, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,57,56,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,51,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,51,48,10,51,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,51,48,10,51,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,57,56,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,54,48, 10,54,48,10,53,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,54,48,10,54,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,57,56,57,10,69,78,67,79,68,73,78, 71,32,49,48,54,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,49,56,10,49,56, 10,50,56,10,50,56,10,52,56,10,50,56,10,50,56,10, 49,56,10,49,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,57,56,65,10,69,78,67,79,68,73,78,71,32,49, 48,54,51,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,54,48,10,54,48,10,53,48, 10,53,48,10,52,56,10,53,48,10,53,48,10,54,48,10, 54,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,57, 56,66,10,69,78,67,79,68,73,78,71,32,49,48,54,51, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,52,48,10,55,48,10, 48,48,10,55,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,57,56,67,10, 69,78,67,79,68,73,78,71,32,49,48,54,51,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,49,48,10,49,48,10,55,48,10,48,48,10, 55,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,57,56,68,10,69,78,67, 79,68,73,78,71,32,49,48,54,51,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,54, 48,10,53,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,55,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,57,56,69,10,69,78,67,79,68,73, 78,71,32,49,48,54,51,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,55,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,53,48,10,51,48,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,57,56,70,10,69,78,67,79,68,73,78,71,32, 49,48,54,51,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,55,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,53,48, 10,54,48,10,55,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 57,57,48,10,69,78,67,79,68,73,78,71,32,49,48,54, 52,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,55,48,10,51,48,10,53,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,55,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,57,57,49, 10,69,78,67,79,68,73,78,71,32,49,48,54,52,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,56,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 56,10,50,48,10,50,48,10,49,48,10,49,48,10,48,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,57,57,50,10,69,78, 67,79,68,73,78,71,32,49,48,54,52,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,49,48,10,52,56,10,49, 48,10,49,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,57,57,51,10,69,78,67,79,68, 73,78,71,32,49,48,54,52,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 50,48,10,51,56,10,54,48,10,65,48,10,54,48,10,51, 56,10,50,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,57,57,52,10,69,78,67,79,68,73,78,71, 32,49,48,54,52,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,52,48,10,50,48,10, 69,48,10,51,48,10,50,56,10,51,48,10,69,48,10,50, 48,10,52,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 50,57,57,53,10,69,78,67,79,68,73,78,71,32,49,48, 54,52,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,56,10,53,48,10,68,48,10, 55,48,10,53,56,10,55,48,10,68,48,10,53,48,10,50, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,50,57,57, 54,10,69,78,67,79,68,73,78,71,32,49,48,54,52,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,65,48,10,53,48,10,53,56,10,55,48,10, 68,48,10,55,48,10,53,56,10,53,48,10,65,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,50,57,57,55,10,69, 78,67,79,68,73,78,71,32,49,48,54,52,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,54,48,10,54,48,10,54,48,10,54,48,10, 54,48,10,54,48,10,54,48,10,50,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,50,57,57,56,10,69,78,67,79, 68,73,78,71,32,49,48,54,52,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,51,48,10,51,48,10,51,48,10,51,48,10,51,48,10, 51,48,10,51,48,10,50,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,50,57,70,67,10,69,78,67,79,68,73,78, 71,32,49,48,55,52,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,48,56,10,49,48, 10,49,48,10,50,48,10,52,48,10,50,48,10,49,48,10, 49,48,10,48,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,50,57,70,68,10,69,78,67,79,68,73,78,71,32,49, 48,55,52,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,52,48,10,52,48,10,50,48,10,50,48, 10,49,48,10,48,56,10,49,48,10,50,48,10,50,48,10, 52,48,10,52,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,50,65, 48,48,10,69,78,67,79,68,73,78,71,32,49,48,55,53, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,55,48,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 55,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,50,65,48,49,10, 69,78,67,79,68,73,78,71,32,49,48,55,53,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,55, 48,10,65,56,10,65,56,10,65,56,10,65,56,10,70,56, 10,65,56,10,65,56,10,65,56,10,65,56,10,55,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,50,65,48,50,10,69,78,67, 79,68,73,78,71,32,49,48,55,53,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,55,48,10,56, 56,10,68,56,10,68,56,10,65,56,10,65,56,10,65,56, 10,68,56,10,68,56,10,56,56,10,55,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,50,65,48,51,10,69,78,67,79,68,73, 78,71,32,49,48,55,53,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,65,56, 10,65,56,10,56,56,10,55,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,50,65,48,52,10,69,78,67,79,68,73,78,71,32, 49,48,55,53,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,65,56,10,65,56,10,70,56,10,65,56, 10,65,56,10,55,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,50, 65,48,53,10,69,78,67,79,68,73,78,71,32,49,48,55, 53,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,50,65,48,54, 10,69,78,67,79,68,73,78,71,32,49,48,55,53,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,70,56, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,50,65,48,57,10,69,78, 67,79,68,73,78,71,32,49,48,55,54,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,56,56,10, 56,56,10,53,48,10,53,48,10,50,48,10,50,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,50,65,49,68,10,69,78,67,79,68, 73,78,71,32,49,48,55,56,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,52,10,67,67,10,66,52,10,66,52,10,66,52,10,67, 67,10,56,52,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,50,65,51,70,10,69,78,67,79,68,73,78,71, 32,49,48,56,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,69,67,10,52,56,10, 52,56,10,52,56,10,52,56,10,52,56,10,52,56,10,52, 56,10,70,67,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,48,48,10,69,78,67,79,68,73,78,71,32,49,50, 50,56,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,48, 49,10,69,78,67,79,68,73,78,71,32,49,50,50,56,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,48,50,10,69, 78,67,79,68,73,78,71,32,49,50,50,57,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,53,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,48,51,10,69,78,67,79, 68,73,78,71,32,49,50,50,57,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,50,56,10,50,56,10,53,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,48,53,10,69,78,67,79,68,73,78, 71,32,49,50,50,57,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,55,56,10,52,56,10, 66,48,10,57,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,48,54,10,69,78,67,79,68,73,78,71,32,49, 50,50,57,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,56,10,53,48,10,65,48,10,66,48,10,67,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 48,56,10,69,78,67,79,68,73,78,71,32,49,50,50,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,49,48,10,49,48,10,50,48,10,50,48, 10,52,48,10,50,48,10,50,48,10,49,48,10,49,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,48,57,10, 69,78,67,79,68,73,78,71,32,49,50,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,50,48,10,49,48,10,49,48,10,48,56, 10,49,48,10,49,48,10,50,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,48,65,10,69,78,67, 79,68,73,78,71,32,49,50,50,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,49,52,10,50, 56,10,50,56,10,53,48,10,53,48,10,65,48,10,53,48, 10,53,48,10,50,56,10,50,56,10,49,52,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,48,66,10,69,78,67,79,68,73, 78,71,32,49,50,50,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,65,48,10,53,48,10,53, 48,10,50,56,10,50,56,10,49,52,10,50,56,10,50,56, 10,53,48,10,53,48,10,65,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,48,67,10,69,78,67,79,68,73,78,71,32, 49,50,51,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,48,68,10,69,78,67,79,68,73,78,71,32,49,50,51, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,48,69, 10,69,78,67,79,68,73,78,71,32,49,50,51,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 70,56,10,56,56,10,66,56,10,65,48,10,65,48,10,65, 48,10,65,48,10,65,48,10,65,48,10,69,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,48,70,10,69,78, 67,79,68,73,78,71,32,49,50,51,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 51,56,10,50,56,10,50,56,10,50,56,10,50,56,10,50, 56,10,50,56,10,69,56,10,56,56,10,70,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,49,48,10,69,78,67,79,68, 73,78,71,32,49,50,51,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,55,56,10,55,48,10, 55,48,10,54,48,10,54,48,10,54,48,10,54,48,10,54, 48,10,55,48,10,55,48,10,55,56,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,49,49,10,69,78,67,79,68,73,78,71, 32,49,50,51,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,56,10,51,56,10,51,56,10, 49,56,10,49,56,10,49,56,10,49,56,10,49,56,10,51, 56,10,51,56,10,55,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,49,50,10,69,78,67,79,68,73,78,71,32,49,50, 51,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,49, 51,10,69,78,67,79,68,73,78,71,32,49,50,51,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,70,56,10,48,48,10,70,56,10,70,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,49,52,10,69, 78,67,79,68,73,78,71,32,49,50,51,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,49,48, 10,50,48,10,52,48,10,52,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,50,48,10,49,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,49,53,10,69,78,67,79, 68,73,78,71,32,49,50,51,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,52,48,10,50,48, 10,49,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,49,54,10,69,78,67,79,68,73,78, 71,32,49,50,51,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,70,56,10,57,48,10,57,48, 10,65,48,10,65,48,10,65,48,10,65,48,10,65,48,10, 57,48,10,57,48,10,70,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,49,55,10,69,78,67,79,68,73,78,71,32,49, 50,51,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,70,56,10,52,56,10,52,56,10,50,56, 10,50,56,10,50,56,10,50,56,10,50,56,10,52,56,10, 52,56,10,70,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 49,56,10,69,78,67,79,68,73,78,71,32,49,50,51,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,56,10,49,48,10,51,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,51,48,10,49,48,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,49,57,10, 69,78,67,79,68,73,78,71,32,49,50,51,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,51,48,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,51,48,10,50,48,10,52,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,49,65,10,69,78,67, 79,68,73,78,71,32,49,50,51,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,70,56,10,65, 48,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,65,48,10,65,48,10,65,48,10,70,56,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,49,66,10,69,78,67,79,68,73, 78,71,32,49,50,51,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,70,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,50,56,10,50,56, 10,50,56,10,50,56,10,70,56,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,49,67,10,69,78,67,79,68,73,78,71,32, 49,50,51,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,57,56,10,54,52,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,49,68,10,69,78,67,79,68,73,78,71,32,49,50,51, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,53,48,10,53,48,10,50,56,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,49,69, 10,69,78,67,79,68,73,78,71,32,49,50,51,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,50,56,10,50,56,10,53,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,49,70,10,69,78, 67,79,68,73,78,71,32,49,50,51,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,56,10,50,56,10,53,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,51,54,10,69,78,67,79,68, 73,78,71,32,49,50,51,52,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,55,48,10, 56,56,10,70,56,10,56,56,10,70,56,10,65,56,10,65, 56,10,56,56,10,55,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,51,70,10,69,78,67,79,68,73,78,71, 32,49,50,51,53,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,68,56,10, 68,56,10,65,56,10,65,56,10,65,56,10,68,56,10,68, 56,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,57,57,10,69,78,67,79,68,73,78,71,32,49,50, 52,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,56,10,48,52,10,48,56,10,48,52,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,57, 65,10,69,78,67,79,68,73,78,71,32,49,50,52,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,67,10,48,67,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,57,66,10,69, 78,67,79,68,73,78,71,32,49,50,52,52,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,52,48,10,50,48, 10,56,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,57,67,10,69,78,67,79, 68,73,78,71,32,49,50,52,52,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,52,48,10,65,48,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,65,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,52,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,53,48,10,54,48,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,65,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,53,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,56,10,48,56,10,50,56, 10,50,56,10,51,48,10,50,48,10,50,48,10,52,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 65,51,10,69,78,67,79,68,73,78,71,32,49,50,52,53, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,49,48,10,50,48,10,54,48,10,65,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,65,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,53,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,49,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,65,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,53,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,52,48,10,69,48, 10,65,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,65,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,53,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,50,48,10,50,48,10,70, 56,10,56,56,10,56,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,65,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,53,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,65,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 53,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,65,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,53,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,70,48,10,50,48,10,54,48,10,65,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,65,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,53,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,49,48,10,70,56,10,49,48,10,51,48,10,53, 48,10,57,48,10,49,48,10,51,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,65,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,53,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,56,10,50,56,10,50,56,10,52, 56,10,52,56,10,57,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,65,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,54,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,50,56,10,50,52,10, 70,56,10,50,56,10,50,56,10,50,56,10,52,56,10,52, 56,10,57,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,65,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,54,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,53,56,10, 69,48,10,50,48,10,51,56,10,68,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,65, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,54,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,56, 10,48,52,10,52,56,10,52,52,10,53,56,10,69,48,10, 50,48,10,51,56,10,68,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,65,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,54,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,52,56,10,52,56,10,56,56,10,48,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,66,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,54,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,55,56, 10,52,67,10,52,56,10,56,56,10,48,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,66,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,54,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,52,48,10,52,48, 10,55,56,10,57,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,66,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,54,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,56,10,48,52,10,52,56,10,52,52,10,55,56, 10,57,48,10,49,48,10,49,48,10,50,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 66,51,10,69,78,67,79,68,73,78,71,32,49,50,52,54, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,66,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,54,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,56,10,48, 52,10,48,56,10,70,67,10,48,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,66,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,54,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,53, 48,10,53,48,10,70,56,10,53,48,10,53,48,10,49,48, 10,50,48,10,50,48,10,52,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,66,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,55,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,56,10,48,52,10,53,56,10,53, 52,10,70,56,10,53,48,10,53,48,10,49,48,10,50,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,66,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,55,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,67,48,10,48, 56,10,67,56,10,48,56,10,48,56,10,49,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,66,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 55,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,56,10,48,52,10,48,56,10,67,52,10,48,56,10,67, 56,10,48,56,10,48,56,10,49,48,10,50,48,10,67,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,66,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,55,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,56,10,48,56,10,49,48,10,49, 48,10,51,48,10,51,48,10,52,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,66,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,55,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,56,10,48,52,10, 70,56,10,48,67,10,48,56,10,49,48,10,49,48,10,51, 48,10,51,48,10,52,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,66,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,55,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,52,48,10, 52,48,10,55,56,10,67,56,10,53,48,10,52,48,10,52, 48,10,52,48,10,51,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,66,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,55,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,52,56,10,52,52,10, 55,56,10,67,56,10,53,48,10,52,48,10,52,48,10,52, 48,10,51,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,66,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,55,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,56,56,10,52,56,10, 52,56,10,49,48,10,49,48,10,50,48,10,50,48,10,52, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,66, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,55,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,56, 10,48,52,10,48,56,10,56,67,10,52,56,10,52,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,66,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,55,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,55,56,10,52,56,10,52,56,10,54,56,10,57,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,67,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,56,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,55,56, 10,52,67,10,52,56,10,54,56,10,57,56,10,49,48,10, 49,48,10,50,48,10,52,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,67,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,56,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,49,48,10,50,48, 10,54,48,10,50,48,10,70,56,10,50,48,10,50,48,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,67,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,56,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,56,10,48,52,10,49,56,10,50,52,10,54,48, 10,50,48,10,70,56,10,50,48,10,50,48,10,52,48,10, 56,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 67,51,10,69,78,67,79,68,73,78,71,32,49,50,52,56, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,65,56,10,65,56,10,48,56,10,49,48,10,69,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,67,52,10, 69,78,67,79,68,73,78,71,32,49,50,52,56,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,65,56,10,65,56,10,65,56,10,48,56, 10,48,56,10,49,48,10,50,48,10,67,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,67,53,10,69,78,67, 79,68,73,78,71,32,49,50,52,56,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,56,10,48,52,10,48, 56,10,65,67,10,65,56,10,65,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,67,54,10,69,78,67,79,68,73, 78,71,32,49,50,52,56,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,55,48,10,48, 48,10,48,48,10,70,56,10,50,48,10,50,48,10,50,48, 10,52,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,67,55,10,69,78,67,79,68,73,78,71,32, 49,50,52,56,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,56,10,48,52,10,55,56,10,48,52,10,48, 48,10,70,56,10,50,48,10,50,48,10,50,48,10,52,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,67,56,10,69,78,67,79,68,73,78,71,32,49,50,52, 56,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,48,10,56,48,10,56,48,10,67, 48,10,65,48,10,57,48,10,56,48,10,56,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,67,57, 10,69,78,67,79,68,73,78,71,32,49,50,52,56,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,56,56,10,57,48,10,56,56,10,67,48,10,65, 48,10,57,48,10,56,48,10,56,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,67,65,10,69,78, 67,79,68,73,78,71,32,49,50,52,57,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,50, 48,10,52,48,10,52,48,10,56,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,67,66,10,69,78,67,79,68, 73,78,71,32,49,50,52,57,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,67,67,10,69,78,67,79,68,73,78,71, 32,49,50,52,57,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,56,10,52,56,10,51,48,10,49,48,10,50,56,10,52, 48,10,56,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,67,68,10,69,78,67,79,68,73,78,71,32,49,50, 52,57,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,70,56,10, 49,48,10,50,48,10,55,48,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,67, 69,10,69,78,67,79,68,73,78,71,32,49,50,52,57,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,56,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,67,70,10,69, 78,67,79,68,73,78,71,32,49,50,52,57,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,53,48,10,53,48,10,53,48,10,52,56,10, 52,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,68,48,10,69,78,67,79, 68,73,78,71,32,49,50,52,57,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,56,10,48,52,10,48,56, 10,53,52,10,53,48,10,53,48,10,52,56,10,52,56,10, 56,56,10,56,56,10,56,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,68,49,10,69,78,67,79,68,73,78, 71,32,49,50,52,57,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,67,10,48,67,10,53,48, 10,53,48,10,53,48,10,52,56,10,52,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,68,50,10,69,78,67,79,68,73,78,71,32,49, 50,52,57,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,56,48,10,56,48,10,70,56, 10,56,48,10,56,48,10,56,48,10,56,48,10,56,48,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 68,51,10,69,78,67,79,68,73,78,71,32,49,50,52,57, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 56,10,48,52,10,56,56,10,56,52,10,70,56,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,55,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,68,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,48,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 67,10,56,67,10,56,48,10,70,56,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,55,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,68,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,48,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,68,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,48,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,56,10,48,52,10,48,56,10,70, 67,10,48,56,10,48,56,10,48,56,10,49,48,10,49,48, 10,50,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,68,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,48,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,67,10,48,67,10,48,48,10,70,56,10,48, 56,10,48,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,67,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,68,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 48,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,50,48,10,50,48,10,53, 48,10,53,48,10,57,48,10,48,56,10,48,56,10,48,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,68,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,48,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,50,52,10,50,56,10,53,52,10,53, 48,10,57,48,10,48,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,68,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,48,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,67,10,50,67,10,50,48,10,53,48,10,53,48,10,57, 48,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,68,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,48,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 50,48,10,70,56,10,50,48,10,50,48,10,65,56,10,65, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,68,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,48,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,56,10,48,52,10,50,56,10,50,52,10, 70,56,10,50,48,10,50,48,10,65,56,10,65,56,10,50, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,68,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,48,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,67,10,50,67,10,50,48,10,70,56,10, 50,48,10,50,48,10,65,56,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,68, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,49,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 49,48,10,53,48,10,54,48,10,50,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,68,70,10,69, 78,67,79,68,73,78,71,32,49,50,53,49,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,51,48,10,48,48,10,67,48,10,51,48,10, 48,48,10,56,48,10,54,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,69,48,10,69,78,67,79, 68,73,78,71,32,49,50,53,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,49,48,10,49,48,10,50,48,10,50,48,10,53,48,10, 52,56,10,57,56,10,69,52,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,69,49,10,69,78,67,79,68,73,78, 71,32,49,50,53,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,69,50,10,69,78,67,79,68,73,78,71,32,49, 50,53,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,48,10,52,48, 10,70,56,10,52,48,10,52,48,10,52,48,10,52,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 69,51,10,69,78,67,79,68,73,78,71,32,49,50,53,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,52,48,10,55,56,10,67,56,10,50,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,69,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,52,48,10,52,48,10,55,56,10,67,56,10,51,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,69,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,49,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,54,48,10,50,48, 10,50,48,10,50,48,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,69,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,49,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,55, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,49,48, 10,49,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,69,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,49,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,48,10,49,48,10,70,48,10,49,48, 10,70,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,69,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 50,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,56,10,48, 56,10,70,56,10,48,56,10,48,56,10,48,56,10,70,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,69,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,50,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,70,56,10,48,48,10,70,56,10,48,56,10,48, 56,10,48,56,10,49,48,10,50,48,10,67,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,69,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,50,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,56,10,49, 48,10,49,48,10,50,48,10,52,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,69,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,50,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 53,48,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,57,56,10,57,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,69,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,50,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,56,10,57, 48,10,69,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,69,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,50,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,69, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,50,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 56,56,10,48,56,10,48,56,10,49,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,48,69,70,10,69, 78,67,79,68,73,78,71,32,49,50,53,50,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,48,70,48,10,69,78,67,79, 68,73,78,71,32,49,50,53,50,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,49,48,10,70,56,10,53,48,10,53,48,10,70,56,10, 49,48,10,49,48,10,49,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,48,70,49,10,69,78,67,79,68,73,78, 71,32,49,50,53,50,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,55,56, 10,48,56,10,51,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,70,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,48,70,50,10,69,78,67,79,68,73,78,71,32,49, 50,53,51,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,56,10,48,56, 10,70,56,10,48,56,10,48,56,10,49,48,10,50,48,10, 67,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,48, 70,51,10,69,78,67,79,68,73,78,71,32,49,50,53,51, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,56,48,10,52,48,10,48,56, 10,48,56,10,48,56,10,49,48,10,50,48,10,67,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,48,70,52,10, 69,78,67,79,68,73,78,71,32,49,50,53,51,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,56,10,50, 52,10,50,56,10,70,67,10,56,56,10,56,56,10,48,56, 10,48,56,10,49,48,10,50,48,10,52,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,48,70,53,10,69,78,67, 79,68,73,78,71,32,49,50,53,51,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,70,56,10,50,56, 10,52,56,10,52,56,10,57,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,48,70,54,10,69,78,67,79,68,73, 78,71,32,49,50,53,51,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,52,48,10,55,56,10,57,48,10,49,48, 10,50,48,10,52,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,48,70,55,10,69,78,67,79,68,73,78,71,32, 49,50,53,51,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,56,10,48,52,10,48,56,10,70,67,10,56, 56,10,56,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,54,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 48,70,56,10,69,78,67,79,68,73,78,71,32,49,50,53, 51,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,56,10,48,52,10,49,56,10,49,52,10,70,56,10,53, 48,10,53,48,10,70,56,10,49,48,10,49,48,10,49,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,48,70,57, 10,69,78,67,79,68,73,78,71,32,49,50,53,51,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,56,10, 48,52,10,48,56,10,48,52,10,55,56,10,48,56,10,51, 48,10,50,48,10,50,48,10,50,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,48,70,65,10,69,78, 67,79,68,73,78,71,32,49,50,53,51,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,56,10,48,52,10, 48,56,10,70,67,10,48,56,10,70,56,10,48,56,10,48, 56,10,49,48,10,50,48,10,67,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,48,70,66,10,69,78,67,79,68, 73,78,71,32,49,50,53,51,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,48,70,67,10,69,78,67,79,68,73,78,71, 32,49,50,53,52,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,48,70,68,10,69,78,67,79,68,73,78,71,32,49,50, 53,52,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 52,48,10,50,48,10,49,48,10,49,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,48,70, 69,10,69,78,67,79,68,73,78,71,32,49,50,53,52,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,49,48,10,48,56,10,49,48,10,52,56,10, 50,48,10,49,48,10,49,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,48,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,52,48,10,52,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,50,56,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,48,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,52,48,10,52,48,10,70,56,10,48,56,10,53,48,10, 53,48,10,50,48,10,68,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,48,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,48,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 48,57,10,69,78,67,79,68,73,78,71,32,49,50,53,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,52,48,10,56,48,10,70,56, 10,50,56,10,50,56,10,50,56,10,52,56,10,57,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,48,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,70,56, 10,50,48,10,50,48,10,52,56,10,70,56,10,48,56,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,48,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,49,48,10,51,56,10,48,56, 10,48,56,10,50,56,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,48,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,50,48,10,65,48,10,70,56,10,50,56,10,52,56, 10,52,56,10,57,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,48,68,10,69,78,67,79,68,73,78,71,32, 49,50,53,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,52,56,10,57,48,10,57,48,10,52,56, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,48,69,10,69,78,67,79,68,73,78,71,32,49,50,53, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,50,48,10,55,56,10,48,56,10,48,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,48,70, 10,69,78,67,79,68,73,78,71,32,49,50,53,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,52, 48,10,52,48,10,52,48,10,52,48,10,56,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,49,48,10,69,78, 67,79,68,73,78,71,32,49,50,53,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,56,10,52,56,10,53, 56,10,54,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,49,49,10,69,78,67,79,68, 73,78,71,32,49,50,53,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,49,48,10,49,48,10,50,48,10,50, 48,10,49,48,10,49,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,49,50,10,69,78,67,79,68,73,78,71, 32,49,50,53,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,50,48,10,49,48,10,49,48,10,49, 48,10,50,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,49,51,10,69,78,67,79,68,73,78,71,32,49,50, 53,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 65,56,10,65,56,10,65,56,10,70,56,10,50,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,49, 52,10,69,78,67,79,68,73,78,71,32,49,50,53,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,54,48,10, 48,56,10,55,48,10,65,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,49,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,56,10,48,56,10, 55,56,10,52,48,10,52,48,10,52,48,10,56,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,49,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,67,56,10,65,56,10, 65,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,49,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,52,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,53,56,10,52,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,49,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,50,48,10,50,48, 10,70,56,10,52,48,10,55,56,10,48,56,10,49,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 49,57,10,69,78,67,79,68,73,78,71,32,49,50,53,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,50,48,10,50,48,10,52,48,10,52,56,10,70,56,10, 48,56,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,49,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,56,10,53,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,49,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,50,48,10,54,48, 10,56,48,10,56,56,10,55,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,49,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,56,10,50,48,10,54,48,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,49,68,10,69,78,67,79,68,73,78,71,32, 49,50,53,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,53, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,52,48, 10,55,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,49,69,10,69,78,67,79,68,73,78,71,32,49,50,53, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,70, 56,10,53,48,10,53,48,10,55,56,10,50,56,10,67,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,49,70, 10,69,78,67,79,68,73,78,71,32,49,50,53,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,50, 48,10,68,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,50,48,10,69,78, 67,79,68,73,78,71,32,49,50,53,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,52,56,10,70,48,10,50, 48,10,52,48,10,53,48,10,70,56,10,48,56,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,50,49,10,69,78,67,79,68, 73,78,71,32,49,50,53,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,53,48,10,53, 48,10,50,48,10,68,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,50,50,10,69,78,67,79,68,73,78,71, 32,49,50,53,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,53,48,10,53,48,10,70,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,50,51,10,69,78,67,79,68,73,78,71,32,49,50, 53,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,56,48,10, 56,48,10,56,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,50, 52,10,69,78,67,79,68,73,78,71,32,49,50,53,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 70,56,10,50,48,10,53,48,10,53,48,10,57,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,50,53,10,69, 78,67,79,68,73,78,71,32,49,50,53,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,49,48,10,50,48,10, 50,48,10,52,48,10,52,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,50,54,10,69,78,67,79, 68,73,78,71,32,49,50,53,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,53,48,10,53,48,10,53,48,10, 53,48,10,53,48,10,53,56,10,56,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,50,55,10,69,78,67,79,68,73,78, 71,32,49,50,53,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,50,56,10,69,78,67,79,68,73,78,71,32,49, 50,53,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,56,10,50,56,10,49,48,10,51,48,10,52,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 50,57,10,69,78,67,79,68,73,78,71,32,49,50,53,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,50,65,10, 69,78,67,79,68,73,78,71,32,49,50,53,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,50,48,10,50,48, 10,51,56,10,52,56,10,52,56,10,57,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,50,66,10,69,78,67, 79,68,73,78,71,32,49,50,53,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,53,48,10,53,48,10,53,48, 10,53,48,10,53,48,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,50,67,10,69,78,67,79,68,73, 78,71,32,49,50,53,56,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,49,48,10,55,56,10,52,48,10,52,48,10,52,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,51,49,10,69,78,67,79,68,73,78,71,32, 49,50,53,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,56,10,49,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,51,50,10,69,78,67,79,68,73,78,71,32,49,50,53, 57,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,50,56,10,50, 56,10,50,56,10,50,56,10,50,56,10,53,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,51,51, 10,69,78,67,79,68,73,78,71,32,49,50,53,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,67,56,10,52,56,10,53,48,10,53, 48,10,53,56,10,54,56,10,65,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,51,52,10,69,78, 67,79,68,73,78,71,32,49,50,53,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,51,53,10,69,78,67,79,68, 73,78,71,32,49,50,53,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 66,56,10,57,48,10,57,48,10,57,48,10,65,56,10,65, 56,10,69,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,51,54,10,69,78,67,79,68,73,78,71, 32,49,50,53,57,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,66,56,10, 56,48,10,66,56,10,56,48,10,66,56,10,65,56,10,68, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,51,55,10,69,78,67,79,68,73,78,71,32,49,50, 53,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,70,56,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,70,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,51, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,70,56,10,65,48,10,65,48,10, 65,48,10,65,48,10,65,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,51,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,70,56,10, 56,48,10,56,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,51,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,50,56,10,50,56,10,69,56,10,56,56,10, 65,56,10,67,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,51,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,68,67, 10,53,52,10,53,52,10,68,52,10,57,52,10,66,52,10, 68,67,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,51,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,68,52,10,53,52, 10,53,52,10,68,67,10,57,52,10,66,52,10,68,67,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 51,68,10,69,78,67,79,68,73,78,71,32,49,50,54,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,69,52,10,50,52,10,50,56, 10,69,56,10,57,52,10,66,52,10,68,52,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,51,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,68,56,10,53,48,10,53,48,10,68,56, 10,57,48,10,66,48,10,68,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,51,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,68,67,10,52,48,10,53,52,10,68,52,10,57,52, 10,65,56,10,68,67,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,52,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,69, 67,10,50,48,10,51,67,10,69,56,10,57,67,10,66,52, 10,68,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,52,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,52,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,70,56,10,56,56,10,56,56,10,70,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,52,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,65,56,10,65,56,10,65,56,10,70, 56,10,65,56,10,65,56,10,70,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,52,52,10,69,78, 67,79,68,73,78,71,32,49,50,54,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,65,56,10,65,56,10,65,56,10,69,56,10,66, 52,10,66,52,10,68,52,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,52,53,10,69,78,67,79,68, 73,78,71,32,49,50,54,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,49,48,10,50,48,10,50,48,10,53,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,52,54,10,69,78,67,79,68,73,78,71, 32,49,50,54,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,56,10, 50,56,10,53,48,10,53,48,10,53,56,10,65,56,10,65, 52,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,52,55,10,69,78,67,79,68,73,78,71,32,49,50, 54,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,51,48,10,52,56,10, 56,52,10,56,52,10,56,52,10,52,56,10,51,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,52, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,56,10,49,48,10, 51,48,10,52,56,10,52,56,10,56,52,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,52,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,53,48,10,53,48,10,53,48,10, 65,56,10,65,56,10,65,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,52,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,48,10,70,56,10,50,48,10,50,48,10, 53,48,10,56,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,52,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,70,56,10,48,56,10,48,56,10, 49,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,52,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,70,56,10,56,48, 10,56,48,10,70,56,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 52,68,10,69,78,67,79,68,73,78,71,32,49,50,54,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,70,56,10,53,48,10,53,48, 10,53,48,10,53,48,10,53,48,10,70,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,52,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,48,48,10,70,56,10,48,48,10,55,48, 10,56,56,10,56,56,10,55,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,52,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,50,48,10,51,56,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,53,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,52, 56,10,52,56,10,55,56,10,52,56,10,52,56,10,52,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,53,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,51, 56,10,50,48,10,51,56,10,50,48,10,50,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,53,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,52,56,10,55,56,10,52, 56,10,55,56,10,52,56,10,52,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,53,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,51,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,51,49,53,52,10,69,78, 67,79,68,73,78,71,32,49,50,54,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,56,10,50,56,10,50,56,10,69,56,10,50,56,10,50, 56,10,50,56,10,48,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,51,49,53,53,10,69,78,67,79,68, 73,78,71,32,49,50,54,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 48,56,10,51,56,10,48,56,10,51,56,10,48,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,51,49,53,54,10,69,78,67,79,68,73,78,71, 32,49,50,54,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,56,10,50,56,10, 69,56,10,50,56,10,69,56,10,50,56,10,50,56,10,48, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 51,49,53,55,10,69,78,67,79,68,73,78,71,32,49,50, 54,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,50,48,10,70,56,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,51,49,53, 56,10,69,78,67,79,68,73,78,71,32,49,50,54,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,48,56,10,48,56,10,52,56,10, 52,67,10,53,56,10,69,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,51,49,53,57,10,69, 78,67,79,68,73,78,71,32,49,50,54,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,52,10,49,52,10,49,52,10,53,67,10,53,52,10, 55,52,10,68,52,10,48,52,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,51,49,53,65,10,69,78,67,79, 68,73,78,71,32,49,50,54,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,52,56,10,52,56,10,53,56,10,69,56,10, 48,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,51,49,53,66,10,69,78,67,79,68,73,78, 71,32,49,50,54,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,53,48,10,53,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,51,49,53,67,10,69,78,67,79,68,73,78,71,32,49, 50,54,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,50,48,10,50,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,51,49, 53,68,10,69,78,67,79,68,73,78,71,32,49,50,54,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,48,56,10,49,56, 10,69,56,10,52,56,10,55,56,10,52,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,51,49,53,69,10, 69,78,67,79,68,73,78,71,32,49,50,54,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,52,10,49,52,10,49,52,10,49,52,10,70,52, 10,53,52,10,55,52,10,53,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,51,49,53,70,10,69,78,67, 79,68,73,78,71,32,49,50,54,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,48,56,10,48,56,10,49,56,10,69,56,10,52,56, 10,52,56,10,52,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,51,49,54,48,10,69,78,67,79,68,73, 78,71,32,49,50,54,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,53,48,10,53,48, 10,53,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,51,49,54,49,10,69,78,67,79,68,73,78,71,32, 49,50,54,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,51, 49,54,50,10,69,78,67,79,68,73,78,71,32,49,50,54, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,49,56,10,69,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,51,49,54,51, 10,69,78,67,79,68,73,78,71,32,49,50,54,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,56,10,48,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,48,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,66,48,10,67, 56,10,56,56,10,65,56,10,66,48,10,56,48,10,56,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,48,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,66,48,10,67,56,10,56, 56,10,57,48,10,70,56,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,48,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,52,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,54,56,10,57,56,10,56,56,10,57, 56,10,54,56,10,48,56,10,48,56,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,48,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,56,10,56,56,10,56,56,10,56,56,10,55, 56,10,48,56,10,48,56,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,48, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 68,48,10,65,56,10,65,56,10,65,56,10,68,48,10,56, 48,10,56,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,48,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,70,56,10,56,48,10,56, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,48,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,53,56,10,65,56,10, 65,56,10,65,56,10,53,56,10,48,56,10,48,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,48,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,65,56,10,65,56,10, 65,56,10,70,56,10,48,56,10,48,56,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,48,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,56,48, 10,56,48,10,66,48,10,67,56,10,56,56,10,65,56,10, 66,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 48,57,10,69,78,67,79,68,73,78,71,32,53,55,51,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,66,48,10,67,56,10,56,56,10,57,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,48,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,56,10,51,56, 10,52,56,10,56,56,10,57,56,10,54,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,48,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,53,53,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,55,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,48,67,10,69,78,67,79,68,73, 78,71,32,53,55,51,53,54,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,48,10,56,48,10,68,48,10,65,56,10,65,56, 10,65,56,10,68,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,48,68,10,69,78,67,79,68,73,78,71,32, 53,55,51,53,55,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 48,10,56,48,10,68,48,10,65,56,10,65,56,10,65,56, 10,70,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,48,69,10,69,78,67,79,68,73,78,71,32,53,55,51, 53,56,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,56,10,48, 56,10,53,56,10,65,56,10,65,56,10,65,56,10,53,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,48,70, 10,69,78,67,79,68,73,78,71,32,53,55,51,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,70, 56,10,65,56,10,65,56,10,65,56,10,53,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,49,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,54,48,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,68,48,10,65, 56,10,65,56,10,65,56,10,68,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,49,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,54,49,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,68,48,10,65,56,10,65, 56,10,65,56,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,49,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,54,50,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,53,56,10,65,56,10,65,56,10,65, 56,10,53,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,49,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,54,51,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,56,10,65,56,10,65,56,10,65,56,10,53, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,49, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,54,52, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 66,48,10,67,56,10,56,56,10,65,56,10,66,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,49,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,54,53,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,66,48,10, 67,56,10,56,56,10,57,48,10,70,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,49,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,54,54,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,55,56,10,56,56,10, 56,56,10,57,56,10,54,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,49,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,54,55,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,56,56,10,56,56,10, 57,56,10,54,56,10,48,56,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,49,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,54,56,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,48,10,53,48,10,53,48,10,50,48,10,50,48,10, 52,48,10,57,56,10,54,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 49,57,10,69,78,67,79,68,73,78,71,32,53,55,51,54, 57,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,48, 10,53,48,10,53,48,10,65,48,10,50,48,10,52,48,10, 57,56,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,49,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,55,48,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,70,56,10,52,48, 10,56,48,10,56,48,10,56,48,10,52,56,10,51,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,49,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,55,49,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,56,10,52,48,10,56,48, 10,54,48,10,49,48,10,48,56,10,56,56,10,55,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,49,67,10,69,78,67,79,68,73, 78,71,32,53,55,51,55,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,52,48,10,56,48,10,56,48,10,57,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,49,68,10,69,78,67,79,68,73,78,71,32, 53,55,51,55,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,55,48,10,56,56,10,67,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,52,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,49,69,10,69,78,67,79,68,73,78,71,32,53,55,51, 55,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,52, 48,10,56,48,10,57,48,10,57,48,10,54,48,10,56,56, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,49,70, 10,69,78,67,79,68,73,78,71,32,53,55,51,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 56,10,51,48,10,52,56,10,52,56,10,48,56,10,49,48, 10,54,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,50,48,10,69,78, 67,79,68,73,78,71,32,53,55,51,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,50,48,10,53, 48,10,53,48,10,56,56,10,56,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,50,49,10,69,78,67,79,68, 73,78,71,32,53,55,51,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,49,48,10,49,48,10,55,48,10,66,48,10,57, 48,10,57,48,10,55,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,50,50,10,69,78,67,79,68,73,78,71, 32,53,55,51,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,50,48,10,53, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,50,51,10,69,78,67,79,68,73,78,71,32,53,55, 51,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,50, 52,10,69,78,67,79,68,73,78,71,32,53,55,51,56,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,50,53,10,69, 78,67,79,68,73,78,71,32,53,55,51,56,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,50,54,10,69,78,67,79, 68,73,78,71,32,53,55,51,56,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,50,55,10,69,78,67,79,68,73,78, 71,32,53,55,51,56,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,56,10,57,48,10,57,48,10, 66,48,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,50,56,10,69,78,67,79,68,73,78,71,32,53, 55,51,56,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,56,48, 10,56,48,10,70,48,10,56,56,10,56,56,10,65,56,10, 66,48,10,56,48,10,56,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 50,57,10,69,78,67,79,68,73,78,71,32,53,55,51,56, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,70,48,10,56,56,10,56,56,10,57,48,10,70,56,10, 56,48,10,56,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,50,65,10, 69,78,67,79,68,73,78,71,32,53,55,51,56,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,56,10,48,56,10,55,56, 10,56,56,10,56,56,10,57,56,10,54,56,10,48,56,10, 48,56,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,50,66,10,69,78,67, 79,68,73,78,71,32,53,55,51,56,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,56,10,48,56,10,70,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,56,10,48,56,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,51,48,10,69,78,67,79,68,73, 78,71,32,53,55,51,57,50,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,55,48,10,48,56,10,48,56, 10,52,56,10,51,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,51,49,10,69,78,67,79,68,73,78,71,32, 53,55,51,57,51,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,48,56,10,48,56,10,49,48, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,51,50,10,69,78,67,79,68,73,78,71,32,53,55,51, 57,52,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,51,56,10,52,48,10,52,48,10,52,56,10,51,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,51,51, 10,69,78,67,79,68,73,78,71,32,53,55,51,57,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 56,10,50,48,10,52,48,10,52,56,10,51,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,51,52,10,69,78, 67,79,68,73,78,71,32,53,55,51,57,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,51,53,10,69,78,67,79,68, 73,78,71,32,53,55,51,57,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,51,54,10,69,78,67,79,68,73,78,71, 32,53,55,51,57,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,51,55,10,69,78,67,79,68,73,78,71,32,53,55, 51,57,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,51, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,48,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,51,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,48,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,51,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,48,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,51,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,48,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,51,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 51,68,10,69,78,67,79,68,73,78,71,32,53,55,52,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,51,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,51,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,52,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,50, 48,10,53,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,52,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,53,48,10,50,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,52,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,52,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,49,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,53,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,52,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,49,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,52,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,49,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,52,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,49,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,48,10,49,48,10,50,48,10, 50,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,52,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,49,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,52,56,10,57,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,52, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,49,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,50,48,10,53,48,10,54,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,52,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,49,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,55,48, 10,65,56,10,66,48,10,65,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,52,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,49,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,50,48,10,53,48, 10,51,48,10,49,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,52,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,49,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,55,48,10,65,56,10,54,56, 10,50,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,52,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,50,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,55,56,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 52,68,10,69,78,67,79,68,73,78,71,32,53,55,52,50, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,55,56,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,52,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,50,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,52, 48,10,50,48,10,49,48,10,48,56,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,52,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,50,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,53,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,53,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,50,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,53,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,50,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,53,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 50,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,49, 48,10,50,48,10,50,48,10,49,48,10,49,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,53,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,50,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,65,48,10,68,48,10,56,56,10,65,56,10,68, 48,10,56,56,10,56,56,10,65,56,10,66,48,10,56,48, 10,56,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,53,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,50,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,52, 48,10,65,56,10,49,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,53,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,50,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,52,48,10,70, 56,10,49,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,53,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,51,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,50,48,10,50,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,53,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,51,49,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,56,10,57,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,53, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,51,50, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,54,48,10,53, 48,10,54,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,53,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,51,51,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,53,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,51,52,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,49,48,10,51,48,10,53,48,10,51,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,53,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,51,53,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,53,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,51,54,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,56,10,49,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 53,68,10,69,78,67,79,68,73,78,71,32,53,55,52,51, 55,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 52,48,10,54,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,53,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,51,56,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,69,48,53,70,10,69,78,67, 79,68,73,78,71,32,53,55,52,51,57,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,69,48,54,48,10,69,78,67,79,68,73, 78,71,32,53,55,52,52,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,69,48,54,49,10,69,78,67,79,68,73,78,71,32, 53,55,52,52,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,69, 48,54,50,10,69,78,67,79,68,73,78,71,32,53,55,52, 52,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,53,48,10,53,48,10,53,48,10,50,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,69,48,54,51, 10,69,78,67,79,68,73,78,71,32,53,55,52,52,51,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 67,10,65,56,10,65,56,10,65,56,10,53,52,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,69,48,54,52,10,69,78, 67,79,68,73,78,71,32,53,55,52,52,52,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,52,48,10,52,56,10,51,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,69,48,54,53,10,69,78,67,79,68, 73,78,71,32,53,55,52,52,53,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,70,48,10,65, 48,10,65,48,10,66,56,10,57,48,10,54,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,69,48,54,54,10,69,78,67,79,68,73,78,71, 32,53,55,52,52,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,48,10,56,48,10,70,67,10,65,56,10,65,56,10,65, 56,10,57,67,10,57,48,10,55,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 69,48,54,55,10,69,78,67,79,68,73,78,71,32,53,55, 52,52,55,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,53,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,69,48,54, 56,10,69,78,67,79,68,73,78,71,32,53,55,52,52,56, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,50,48,10,51,48,10,50,56,10,51,56,10,65, 48,10,52,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,69,48,54,57,10,69, 78,67,79,68,73,78,71,32,53,55,52,52,57,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,52,48,10,52,48,10,54,56,10, 53,52,10,53,52,10,53,52,10,55,67,10,56,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,69,48,54,65,10,69,78,67,79, 68,73,78,71,32,53,55,52,53,48,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,67,48,10,50,48,10,49,48,10,48,56,10, 52,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,69,48,54,66,10,69,78,67,79,68,73,78, 71,32,53,55,52,53,49,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,67,48,10,50,48,10,49,48,10,48,56,10,52,56,10, 56,56,10,55,48,10,48,56,10,55,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,69,48,54,67,10,69,78,67,79,68,73,78,71,32,53, 55,52,53,50,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,50,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,69,48, 54,68,10,69,78,67,79,68,73,78,71,32,53,55,52,53, 51,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,69,48,54,69,10, 69,78,67,79,68,73,78,71,32,53,55,52,53,52,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,50,48,10,53,48,10, 50,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,102,10,69,78,67,79,68,73,78,71, 32,54,52,50,53,54,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,50,56,10,53,52,10, 53,48,10,53,48,10,70,56,10,53,48,10,53,48,10,53, 48,10,53,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,105,10, 69,78,67,79,68,73,78,71,32,54,52,50,53,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,51,48,10,52,56,10,52,56,10,52,48,10,70,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,102,108,10,69,78,67,79,68,73,78,71, 32,54,52,50,53,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,51,56,10,52,56,10, 52,56,10,52,56,10,70,56,10,52,56,10,52,56,10,52, 56,10,52,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,102,102,105, 10,69,78,67,79,68,73,78,71,32,54,52,50,53,57,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,48,10,65,56,10,65,48,10,65,56,10,70, 56,10,65,56,10,65,56,10,65,56,10,65,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,102,102,108,10,69,78,67,79,68,73, 78,71,32,54,52,50,54,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,53,56,10,65, 56,10,65,56,10,65,56,10,70,56,10,65,56,10,65,56, 10,65,56,10,65,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,48,53,10,69,78,67,79,68,73,78,71,32, 54,52,50,54,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,53,48,10,53, 48,10,53,48,10,53,56,10,53,48,10,53,48,10,53,48, 10,52,56,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 66,48,54,10,69,78,67,79,68,73,78,71,32,54,52,50, 54,50,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,51,48,10,53,48,10,53,48,10,66, 56,10,57,48,10,53,48,10,51,48,10,51,48,10,67,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,49,51, 10,69,78,67,79,68,73,78,71,32,54,52,50,55,53,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,53,56,10,54,48,10,50,48,10,66,52,10,66, 52,10,66,52,10,66,52,10,66,52,10,54,67,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,49,52,10,69,78, 67,79,68,73,78,71,32,54,52,50,55,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 49,48,10,51,56,10,51,48,10,66,52,10,66,52,10,66, 52,10,66,52,10,66,67,10,55,52,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,49,53,10,69,78,67,79,68, 73,78,71,32,54,52,50,55,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,49,48,10, 51,48,10,51,48,10,66,56,10,66,52,10,66,52,10,66, 52,10,66,52,10,55,52,10,49,48,10,49,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,49,54,10,69,78,67,79,68,73,78,71, 32,54,52,50,55,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,54,48,10,54,48,10, 55,48,10,66,52,10,66,52,10,66,52,10,66,52,10,66, 52,10,54,67,10,50,48,10,51,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,49,55,10,69,78,67,79,68,73,78,71,32,54,52, 50,55,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,54,48,10,54,48,10, 70,52,10,70,52,10,70,52,10,70,52,10,70,52,10,54, 67,10,50,48,10,50,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,49, 68,10,69,78,67,79,68,73,78,71,32,54,52,50,56,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,49,48,10,48,48,10,49,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,49,69,10,69, 78,67,79,68,73,78,71,32,54,52,50,56,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,56,56, 10,55,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,55,48,53,10,69,78, 67,79,68,73,78,71,32,54,52,50,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,68,56,10,52,56,10,52, 56,10,48,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,50,48,10,69,78,67,79,68, 73,78,71,32,54,52,50,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,57,56,10,52,56,10,52,56,10,50, 56,10,50,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,50,49,10,69,78,67,79,68,73,78,71, 32,54,52,50,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,57,48,10,52,56,10,54,56,10,57,48,10,56, 56,10,67,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,50,10,69,78,67,79,68,73,78,71,32,54,52, 50,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,50, 51,10,69,78,67,79,68,73,78,71,32,54,52,50,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,56,10,48,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,50,52,10,69, 78,67,79,68,73,78,71,32,54,52,50,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,50,53,10,69,78,67,79, 68,73,78,71,32,54,52,50,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,56,48, 10,56,48,10,56,48,10,70,56,10,48,56,10,48,56,10, 48,56,10,49,48,10,54,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,50,54,10,69,78,67,79,68,73,78, 71,32,54,52,50,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,56,10,52,56,10,52,56,10,52,56,10, 52,56,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,50,55,10,69,78,67,79,68,73,78,71,32,54, 52,50,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,48,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 50,56,10,69,78,67,79,68,73,78,71,32,54,52,50,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,52,56,10,52,56,10,52,56,10,52,56,10,67,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,66,50,57,10, 69,78,67,79,68,73,78,71,32,54,52,50,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,50,48,10,50,48,10,70,56,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,97,102,105,105,53,55,54,57,52,10,69, 78,67,79,68,73,78,71,32,54,52,50,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,49,48,10,48,48,10,65,56,10,65,56,10, 65,56,10,69,56,10,56,56,10,70,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,97,102,105,105,53,55,54,57,53,10,69,78, 67,79,68,73,78,71,32,54,52,50,57,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,56,48,10,48,48,10,65,56,10,65,56,10,65, 56,10,69,56,10,56,56,10,70,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,50,67,10,69,78,67,79,68, 73,78,71,32,54,52,51,48,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,48,10,65,56,10,65,56,10,66,56,10,69, 56,10,56,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,50,68,10,69,78,67,79,68,73,78,71, 32,54,52,51,48,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,56,48,10, 48,48,10,65,56,10,65,56,10,66,56,10,69,56,10,56, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,50,69,10,69,78,67,79,68,73,78,71,32,54,52, 51,48,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,57,48,10, 52,56,10,54,56,10,57,48,10,56,56,10,67,56,10,48, 48,10,55,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,50, 70,10,69,78,67,79,68,73,78,71,32,54,52,51,48,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 54,56,10,57,48,10,56,56,10,67,56,10,48,48,10,55, 48,10,50,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,48,10,69, 78,67,79,68,73,78,71,32,54,52,51,48,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,57,48,10,52,56,10, 54,56,10,57,48,10,56,56,10,67,56,10,48,48,10,50, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,51,49,10,69,78,67,79, 68,73,78,71,32,54,52,51,48,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,48,10,49,48,10,53,48,10, 49,48,10,49,48,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,50,10,69,78,67,79,68,73,78, 71,32,54,52,51,48,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,52,48,10,50,48,10,49,48,10,57,48,10, 50,56,10,52,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,51,51,10,69,78,67,79,68,73,78,71,32,54, 52,51,48,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,49,48,10,49,48,10,53,48,10,49,48,10, 49,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,52,10,69,78,67,79,68,73,78,71,32,54,52,51,48, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,65,56,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,97,102,105,105,53,55,55,50, 51,10,69,78,67,79,68,73,78,71,32,54,52,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,51,48,10, 49,48,10,49,48,10,53,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,66,51,54,10,69, 78,67,79,68,73,78,71,32,54,52,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,70,56,10,50,48,10, 50,48,10,49,48,10,53,48,10,49,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,66,51,56,10,69,78,67,79, 68,73,78,71,32,54,52,51,49,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,57,56,10,56,56,10,65,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,66,51,57,10,69,78,67,79,68,73,78, 71,32,54,52,51,49,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,51,48,10,49,48,10,53,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,66,51,65,10,69,78,67,79,68,73,78,71,32,54, 52,51,49,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,70,56,10,48,56,10,48,56,10,50,56,10,48,56,10, 48,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,66, 51,66,10,69,78,67,79,68,73,78,71,32,54,52,51,49, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,52,56,10,48,56,10,48,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,66,51,67,10, 69,78,67,79,68,73,78,71,32,54,52,51,49,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,56,48,10,56,48,10,56,48,10,70,56,10,48,56, 10,52,56,10,48,56,10,49,48,10,54,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,66,51,69,10,69,78,67, 79,68,73,78,71,32,54,52,51,49,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,66,48,10,52,56,10,56,56, 10,65,56,10,56,56,10,66,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,66,52,48,10,69,78,67,79,68,73, 78,71,32,54,52,51,50,48,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,56,10,48,56,10,50,56,10,48,56, 10,48,56,10,55,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,66,52,49,10,69,78,67,79,68,73,78,71,32, 54,52,51,50,49,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,56,10,65,56,10,56,56,10,57,48, 10,69,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 66,52,51,10,69,78,67,79,68,73,78,71,32,54,52,51, 50,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 56,10,56,56,10,56,56,10,50,56,10,48,56,10,48,56, 10,48,56,10,48,56,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,66,52,52, 10,69,78,67,79,68,73,78,71,32,54,52,51,50,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,55,56,10,56, 56,10,65,56,10,48,56,10,48,56,10,70,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,52,54,10,69,78, 67,79,68,73,78,71,32,54,52,51,50,54,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,57,48,10,52,56,10,50, 56,10,57,48,10,48,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,55,10,69,78,67,79,68, 73,78,71,32,54,52,51,50,55,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,65,56,10,56, 56,10,56,56,10,66,48,10,56,48,10,56,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,52,56,10,69,78,67,79,68,73,78,71, 32,54,52,51,50,56,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,48,10,48,56,10,50,56,10,48,56,10,48, 56,10,48,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,57,10,69,78,67,79,68,73,78,71,32,54,52, 51,50,57,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,66,56,10,69,56,10,56,56,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,66,52, 65,10,69,78,67,79,68,73,78,71,32,54,52,51,51,48, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 52,56,10,53,56,10,52,56,10,52,56,10,67,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,97,102,105,105,53,55,55,48,48, 10,69,78,67,79,68,73,78,71,32,54,52,51,51,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,50,48,10,48,48,10,51,48,10,49, 48,10,49,48,10,49,48,10,49,48,10,49,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,66,52,67,10,69,78, 67,79,68,73,78,71,32,54,52,51,51,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,55,48,10,48,48,10,70,48,10,49,48,10,49, 48,10,49,48,10,49,48,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,66,52,68,10,69,78,67,79,68, 73,78,71,32,54,52,51,51,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 55,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,70,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,66,52,69,10,69,78,67,79,68,73,78,71, 32,54,52,51,51,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,55,48,10, 48,48,10,55,56,10,56,56,10,56,56,10,48,56,10,48, 56,10,70,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,66,52,70,10,69,78,67,79,68,73,78,71,32,54,52, 51,51,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 57,48,10,52,56,10,54,56,10,57,48,10,56,56,10,67, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,69,50, 48,10,69,78,67,79,68,73,78,71,32,54,53,48,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,51,67,10,67,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,69,50,49,10,69, 78,67,79,68,73,78,71,32,54,53,48,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,69,48, 10,49,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,69,50,50,10,69,78,67,79, 68,73,78,71,32,54,53,48,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,51,67,10,52,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,69,50,51,10,69,78,67,79,68,73,78, 71,32,54,53,48,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,56,10,70,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,48,49,10,69,78,67,79,68,73,78,71,32,54, 53,50,56,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,48,48,10, 50,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 48,50,10,69,78,67,79,68,73,78,71,32,54,53,50,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,53,48,10,53,48,10,53,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,48,51,10, 69,78,67,79,68,73,78,71,32,54,53,50,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,53,48,10,53,48,10,70,56,10,53,48, 10,70,56,10,53,48,10,53,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,48,52,10,69,78,67, 79,68,73,78,71,32,54,53,50,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,55,56,10,65,48,10,65,48,10,55,48,10,50,56, 10,50,56,10,70,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,48,53,10,69,78,67,79,68,73, 78,71,32,54,53,50,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,56,10,65, 56,10,53,48,10,49,48,10,50,48,10,52,48,10,53,48, 10,65,56,10,57,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,48,54,10,69,78,67,79,68,73,78,71,32, 54,53,50,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,65,48,10,65, 48,10,52,48,10,65,48,10,57,56,10,57,48,10,54,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,48,55,10,69,78,67,79,68,73,78,71,32,54,53,50, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,48,56, 10,69,78,67,79,68,73,78,71,32,54,53,50,56,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 49,48,10,50,48,10,50,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,52,48,10,50,48,10,50,48,10,49,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,48,57,10,69,78, 67,79,68,73,78,71,32,54,53,50,56,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,52,48,10, 50,48,10,50,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,50,48,10,50,48,10,52,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,48,65,10,69,78,67,79,68, 73,78,71,32,54,53,50,57,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 50,48,10,65,56,10,70,56,10,55,48,10,70,56,10,65, 56,10,50,48,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,48,66,10,69,78,67,79,68,73,78,71, 32,54,53,50,57,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,50,48,10,70,56,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,48,67,10,69,78,67,79,68,73,78,71,32,54,53, 50,57,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,51,48,10,50, 48,10,52,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,48, 68,10,69,78,67,79,68,73,78,71,32,54,53,50,57,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,48,69,10,69, 78,67,79,68,73,78,71,32,54,53,50,57,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,50,48,10,55,48,10,50,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,48,70,10,69,78,67,79, 68,73,78,71,32,54,53,50,57,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,49,48,10,49,48,10,50,48,10,52,48,10, 52,48,10,56,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,49,48,10,69,78,67,79,68,73,78, 71,32,54,53,50,57,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,50,48,10,53,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 53,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,49,49,10,69,78,67,79,68,73,78,71,32,54, 53,50,57,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 70,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 49,50,10,69,78,67,79,68,73,78,71,32,54,53,50,57, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,55,48,10,56,56,10,56,56,10,48,56, 10,49,48,10,50,48,10,52,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,49,51,10, 69,78,67,79,68,73,78,71,32,54,53,50,57,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,70,56,10,48,56,10,49,48,10,50,48,10,55,48, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,49,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,48,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,49, 48,10,49,48,10,51,48,10,53,48,10,53,48,10,57,48, 10,70,56,10,49,48,10,49,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,49,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,48,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,66,48,10,67,56,10,48,56,10,48,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,49,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,48,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,55,48,10,56,56,10,56, 48,10,56,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,55,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,49,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 48,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,70,56,10,48,56,10,49,48,10,49, 48,10,50,48,10,50,48,10,52,48,10,52,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,49,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,48,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,55,48,10,56,56,10,56,56,10,56,56,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,49,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,48,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,56,56,10,56,56,10,56,56,10,55,56,10,48, 56,10,48,56,10,56,56,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,49,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,48,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,55,48,10,50,48,10,48,48,10,48, 48,10,50,48,10,55,48,10,50,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,49,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,48,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,55,48,10,50,48,10,48,48,10,48,48,10,51, 48,10,50,48,10,52,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,49,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,48,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,49,48,10,50,48,10, 52,48,10,56,48,10,52,48,10,50,48,10,49,48,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,49, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,48,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,70,56,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,49,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,49,48,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,48,10,52,48,10,50,48,10,49,48,10,48,56,10, 49,48,10,50,48,10,52,48,10,56,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,49,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,49,49,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,48,56,10,49,48,10,50,48,10, 50,48,10,48,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,50,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,49,50,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,56,10,57,56,10,65,56,10,65,56,10,66,48,10, 56,48,10,55,56,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,50,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,49,51,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,53,48,10,56,56, 10,56,56,10,56,56,10,70,56,10,56,56,10,56,56,10, 56,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 50,50,10,69,78,67,79,68,73,78,71,32,54,53,51,49, 52,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,52,56,10,52,56,10,52,56, 10,55,48,10,52,56,10,52,56,10,52,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,50,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,49,53,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,50,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,49,54,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 48,10,52,56,10,52,56,10,52,56,10,52,56,10,52,56, 10,52,56,10,52,56,10,70,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,50,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,49,55,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,56, 48,10,56,48,10,56,48,10,70,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,50,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,49,56,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,70,56,10,56,48,10,56, 48,10,56,48,10,70,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,50,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 49,57,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,55,48,10,56,56,10,56,48,10,56, 48,10,56,48,10,57,56,10,56,56,10,56,56,10,55,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,50,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,50,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,56,56,10,56,56,10,70, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,50,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,50,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 55,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,50,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,50,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,51,56,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,49, 48,10,57,48,10,54,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,50,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,50,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,56,10,56,56,10, 57,48,10,65,48,10,67,48,10,65,48,10,57,48,10,56, 56,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,50,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,50,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,56,48,10,56,48,10,56,48,10,70, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,50, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,50,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,56,56,10,56,56,10,68,56,10,65,56,10, 65,56,10,56,56,10,56,56,10,56,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,50,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,50,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,56,56,10,67,56,10,67,56,10,65,56,10,65,56,10, 57,56,10,57,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,50,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,50,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,55,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,51,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,50,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,70,48,10,56,56, 10,56,56,10,56,56,10,70,48,10,56,48,10,56,48,10, 56,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,51,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,50,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,48,10,56,56,10,56,56, 10,56,56,10,56,56,10,56,56,10,56,56,10,65,56,10, 55,48,10,48,56,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 51,50,10,69,78,67,79,68,73,78,71,32,54,53,51,51, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,70,48,10,56,56,10,56,56,10,56,56, 10,70,48,10,65,48,10,57,48,10,56,56,10,56,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,51,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,51,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,55,48,10,56,56,10,56,48,10,56,48,10,55,48, 10,48,56,10,48,56,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,51,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,51,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,51,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,51,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,56,56,10,56, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,56,56, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,51,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,51,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,53,48,10,53,48,10,53,48,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,51,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 51,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,56,56,10,56,56,10,56, 56,10,65,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,51,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,51,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,56,10,56,56,10,53,48,10,53,48,10,50, 48,10,53,48,10,53,48,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,51,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,51,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,56,10,56,56,10,53,48,10,53,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,51,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,51,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,56,10,49,48,10,49,48,10,50,48,10,52,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,51,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,51,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,55,48,10,52,48,10,52,48,10, 52,48,10,52,48,10,52,48,10,52,48,10,52,48,10,52, 48,10,52,48,10,55,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,51,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,52,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,56,48,10,56,48,10,52,48,10, 52,48,10,50,48,10,49,48,10,49,48,10,48,56,10,48, 56,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,51, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,52,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,55,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 49,48,10,49,48,10,49,48,10,49,48,10,49,48,10,55, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,51,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,52,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,53,48,10,56,56,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,51,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,52,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,70,56,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,52,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,52,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,50,48,10,49,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,52,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,52,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,48,10,48,56,10,55,56,10,56,56,10,56,56,10, 55,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 52,50,10,69,78,67,79,68,73,78,71,32,54,53,51,52, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,70,48, 10,56,56,10,56,56,10,56,56,10,56,56,10,70,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,52,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,52,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,56,48,10,56,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,52,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,52,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 56,10,48,56,10,48,56,10,55,56,10,56,56,10,56,56, 10,56,56,10,56,56,10,55,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,52,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,52,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,55,48,10,56,56,10,70,56,10,56,48, 10,56,56,10,55,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,52,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,53,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,51,48,10,52,56,10,52, 48,10,52,48,10,70,48,10,52,48,10,52,48,10,52,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,52,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 53,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,56,56,10,56,56,10,56,56,10,55,56,10,48,56, 10,56,56,10,55,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,52,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,53,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,66,48,10,67, 56,10,56,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,52,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,53,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,50,48,10,48,48,10,54,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,55,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,52,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,53,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 49,48,10,48,48,10,51,48,10,49,48,10,49,48,10,49, 48,10,49,48,10,57,48,10,57,48,10,54,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,52,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,53,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,56,48,10,56,48,10, 56,48,10,57,48,10,65,48,10,67,48,10,65,48,10,57, 48,10,56,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,52,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,53,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,54,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,55, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,52, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,53,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,68,48,10, 65,56,10,65,56,10,65,56,10,65,56,10,56,56,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,52,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,53,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,66,48,10,67,56,10, 56,56,10,56,56,10,56,56,10,56,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,52,70,10,69,78,67,79, 68,73,78,71,32,54,53,51,53,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,55,48,10,56,56,10,56,56,10, 56,56,10,56,56,10,55,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,53,48,10,69,78,67,79,68,73,78, 71,32,54,53,51,54,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,70,48,10,56,56,10,56,56,10,56,56,10, 70,48,10,56,48,10,56,48,10,56,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,53,49,10,69,78,67,79,68,73,78,71,32,54, 53,51,54,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,55,56,10,56,56,10,56,56,10,56,56,10,55,56,10, 48,56,10,48,56,10,48,56,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 53,50,10,69,78,67,79,68,73,78,71,32,54,53,51,54, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,66,48, 10,67,56,10,56,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,53,51,10, 69,78,67,79,68,73,78,71,32,54,53,51,54,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,55,48,10,56,56, 10,54,48,10,49,48,10,56,56,10,55,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,53,52,10,69,78,67, 79,68,73,78,71,32,54,53,51,54,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,52,48,10,52,48,10,70,48,10,52,48,10,52,48, 10,52,48,10,52,56,10,51,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,53,53,10,69,78,67,79,68,73, 78,71,32,54,53,51,54,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,56,56,10,56,56,10,56,56,10,56,56, 10,57,56,10,54,56,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,53,54,10,69,78,67,79,68,73,78,71,32, 54,53,51,54,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,56,56,10,56,56,10,56,56,10,53,48,10,53,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,53,55,10,69,78,67,79,68,73,78,71,32,54,53,51, 54,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,56, 56,10,56,56,10,65,56,10,65,56,10,65,56,10,53,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,53,56, 10,69,78,67,79,68,73,78,71,32,54,53,51,54,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,56,56,10,53, 48,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,53,57,10,69,78, 67,79,68,73,78,71,32,54,53,51,54,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,57,56,10,54,56,10,48,56,10,56,56,10,55,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,53,65,10,69,78,67,79,68, 73,78,71,32,54,53,51,55,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,70,56,10,49,48,10,50,48,10,52, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,53,66,10,69,78,67,79,68,73,78,71, 32,54,53,51,55,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,49,56,10,50,48,10,50,48,10, 50,48,10,50,48,10,67,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,49,56,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,53,67,10,69,78,67,79,68,73,78,71,32,54,53, 51,55,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,53, 68,10,69,78,67,79,68,73,78,71,32,54,53,51,55,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,67,48,10,50,48,10,50,48,10,50,48,10,50,48,10, 49,56,10,50,48,10,50,48,10,50,48,10,50,48,10,67, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,53,69,10,69, 78,67,79,68,73,78,71,32,54,53,51,55,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,56,10,65,56,10,57,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,54,49,10,69,78,67,79, 68,73,78,71,32,54,53,51,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 50,48,10,53,48,10,50,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,54,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,52,48, 10,52,48,10,52,48,10,52,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,54,51,10,69,78,67,79,68,73,78,71,32,54, 53,51,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,49,48,10,49,48,10,49,48,10,49,48,10, 55,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 54,52,10,69,78,67,79,68,73,78,71,32,54,53,51,56, 48,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,52,48,10,50,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,54,53,10, 69,78,67,79,68,73,78,71,32,54,53,51,56,49,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,50,48,10,55,48, 10,50,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,54,54,10,69,78,67, 79,68,73,78,71,32,54,53,51,56,50,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,70,56,10,48,56,10,48,56, 10,49,48,10,50,48,10,67,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,54,55,10,69,78,67,79,68,73, 78,71,32,54,53,51,56,51,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,70,48,10,49,48,10,53,48, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,54,56,10,69,78,67,79,68,73,78,71,32, 54,53,51,56,52,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,49,48,10,50,48,10,54,48,10,65,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,54,57,10,69,78,67,79,68,73,78,71,32,54,53,51, 56,53,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,52,48,10,69,48,10,65,48,10,50,48,10,52,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,54,65, 10,69,78,67,79,68,73,78,71,32,54,53,51,56,54,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,55, 48,10,50,48,10,50,48,10,50,48,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,54,66,10,69,78, 67,79,68,73,78,71,32,54,53,51,56,55,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,50,48,10,70, 48,10,50,48,10,54,48,10,65,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,54,67,10,69,78,67,79,68, 73,78,71,32,54,53,51,56,56,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,52,48,10,55,56,10,67, 56,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,54,68,10,69,78,67,79,68,73,78,71, 32,54,53,51,56,57,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,54,48,10,50,48,10,50,48,10,50, 48,10,70,56,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,54,69,10,69,78,67,79,68,73,78,71,32,54,53, 51,57,48,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,70,48,10,49,48,10,55,48,10,49,48,10,70, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,54, 70,10,69,78,67,79,68,73,78,71,32,54,53,51,57,49, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 65,56,10,65,56,10,48,56,10,49,48,10,69,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,55,48,10,69, 78,67,79,68,73,78,71,32,54,53,51,57,50,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,55,49,10,69,78,67,79, 68,73,78,71,32,54,53,51,57,51,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,50,56,10,51,48,10,50,48,10, 50,48,10,52,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,55,50,10,69,78,67,79,68,73,78, 71,32,54,53,51,57,52,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,49,48, 10,50,48,10,54,48,10,65,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,55,51,10,69,78,67,79,68,73,78,71,32,54, 53,51,57,53,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,50,48,10,50,48,10,70,56,10,56,56, 10,56,56,10,48,56,10,48,56,10,49,48,10,50,48,10, 52,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 55,52,10,69,78,67,79,68,73,78,71,32,54,53,51,57, 54,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,55,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,50,48,10,50,48,10,70,56,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,55,53,10, 69,78,67,79,68,73,78,71,32,54,53,51,57,55,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,49, 48,10,49,48,10,70,56,10,49,48,10,49,48,10,51,48, 10,53,48,10,57,48,10,49,48,10,49,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,55,54,10,69,78,67, 79,68,73,78,71,32,54,53,51,57,56,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,50, 48,10,50,48,10,70,67,10,50,52,10,50,52,10,50,52, 10,52,52,10,52,52,10,57,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,55,55,10,69,78,67,79,68,73, 78,71,32,54,53,51,57,57,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,52,48,10,52, 48,10,53,56,10,69,48,10,50,48,10,51,56,10,68,48, 10,49,48,10,49,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,55,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,48,48,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,52,48,10,55,56,10,52, 56,10,56,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,55,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 48,49,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,52,48,10,52,48,10,55,67,10,56, 56,10,48,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,55,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,48,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,48, 56,10,48,56,10,48,56,10,48,56,10,70,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,55,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,48,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 52,56,10,52,56,10,70,67,10,52,56,10,52,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,55,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,48,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 56,48,10,52,48,10,48,48,10,56,56,10,52,56,10,49, 48,10,50,48,10,67,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,55,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,48,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,70,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,49,48,10,51,48,10,52, 56,10,56,52,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,55,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,48,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,52,48,10,52,48,10,55,67,10, 67,52,10,52,56,10,52,48,10,52,48,10,52,48,10,51, 67,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,55, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,48,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,56,56,10,52,56,10,52,56,10, 49,48,10,49,48,10,50,48,10,50,48,10,52,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,56,48,10,69, 78,67,79,68,73,78,71,32,54,53,52,48,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,52,48,10,55,56,10,52,56,10,56,56,10,50,56,10, 49,48,10,49,48,10,50,48,10,52,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,56,49,10,69,78,67,79, 68,73,78,71,32,54,53,52,48,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,49,48, 10,50,48,10,54,48,10,50,48,10,70,56,10,50,48,10, 50,48,10,52,48,10,56,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,56,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,49,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,65,48, 10,65,56,10,65,56,10,48,56,10,48,56,10,49,48,10, 50,48,10,67,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,56,51,10,69,78,67,79,68,73,78,71,32,54, 53,52,49,49,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,55,56,10,48,48,10,48,48, 10,70,67,10,49,48,10,49,48,10,50,48,10,50,48,10, 67,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 56,52,10,69,78,67,79,68,73,78,71,32,54,53,52,49, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,56,48,10,56,48,10,56,48,10,67,48, 10,65,48,10,57,48,10,56,48,10,56,48,10,56,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,56,53,10, 69,78,67,79,68,73,78,71,32,54,53,52,49,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,50,48,10,50,48,10,70,56,10,50,48,10,50,48, 10,50,48,10,52,48,10,52,48,10,56,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,56,54,10,69,78,67, 79,68,73,78,71,32,54,53,52,49,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,55,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,56,55,10,69,78,67,79,68,73, 78,71,32,54,53,52,49,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,56,10,52,56,10,51,48,10,49,48,10,50,56, 10,52,48,10,56,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,56,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,49,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,50,48,10,50,48,10,70, 56,10,48,56,10,49,48,10,51,48,10,54,56,10,65,52, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,56,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 49,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,48,56,10,48,56,10,48, 56,10,49,48,10,49,48,10,50,48,10,52,48,10,56,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,56,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,49,56,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,53,48,10,53,48,10,53,48,10,52, 56,10,52,56,10,56,56,10,56,56,10,56,56,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,56,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,49,57,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 56,48,10,56,48,10,70,56,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,48,10,55,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,56,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,50,48,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 48,56,10,48,56,10,48,56,10,48,56,10,49,48,10,49, 48,10,50,48,10,67,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,56,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,50,49,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,50,48,10, 50,48,10,53,48,10,53,48,10,56,56,10,56,56,10,48, 52,10,48,52,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,56,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,50,50,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,70,56,10, 50,48,10,50,48,10,65,56,10,65,56,10,50,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,56, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,50,51, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,49,48,10, 53,48,10,54,48,10,50,48,10,49,48,10,49,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,57,48,10,69, 78,67,79,68,73,78,71,32,54,53,52,50,52,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,67,48,10,51,48,10,48,48,10,67,48,10,51,48,10, 48,48,10,56,48,10,54,48,10,49,56,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,57,49,10,69,78,67,79, 68,73,78,71,32,54,53,52,50,53,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,49,48,10,49,48,10,50,48,10,50,48,10,53,48,10, 52,56,10,66,56,10,67,52,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,57,50,10,69,78,67,79,68,73,78, 71,32,54,53,52,50,54,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,52,56,10,50,56,10,49,48,10,49,48,10,50,56,10, 52,48,10,56,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,57,51,10,69,78,67,79,68,73,78,71,32,54, 53,52,50,55,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,70,48,10,52,48,10,52,48, 10,70,56,10,52,48,10,52,48,10,52,48,10,52,48,10, 51,56,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 57,52,10,69,78,67,79,68,73,78,71,32,54,53,52,50, 56,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,52,48,10,52,48,10,53,67,10,69,52, 10,50,52,10,50,56,10,49,48,10,49,48,10,49,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,57,53,10, 69,78,67,79,68,73,78,71,32,54,53,52,50,57,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,55,56,10,48,56,10,48,56,10,48,56, 10,49,48,10,49,48,10,49,48,10,70,67,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,57,54,10,69,78,67, 79,68,73,78,71,32,54,53,52,51,48,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,48,56,10,48,56,10,70,56,10,48,56, 10,48,56,10,48,56,10,70,56,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,57,55,10,69,78,67,79,68,73, 78,71,32,54,53,52,51,49,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,70,56,10,48, 48,10,48,48,10,70,56,10,48,56,10,48,56,10,49,48, 10,50,48,10,67,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,57,56,10,69,78,67,79,68,73,78,71,32, 54,53,52,51,50,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,56, 56,10,56,56,10,48,56,10,49,48,10,49,48,10,50,48, 10,52,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,57,57,10,69,78,67,79,68,73,78,71,32,54,53,52, 51,51,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,53,48,10,53,48,10,53, 48,10,53,48,10,57,48,10,57,48,10,57,52,10,57,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,57,65, 10,69,78,67,79,68,73,78,71,32,54,53,52,51,52,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,56,48,10,56,48,10,56,48,10,56,48,10,56, 48,10,56,48,10,56,56,10,57,48,10,69,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,57,66,10,69,78, 67,79,68,73,78,71,32,54,53,52,51,53,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,56,10,56,56,10,56,56,10,56, 56,10,56,56,10,56,56,10,70,56,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,57,67,10,69,78,67,79,68, 73,78,71,32,54,53,52,51,54,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,70,56,10, 56,56,10,56,56,10,56,56,10,49,48,10,49,48,10,50, 48,10,50,48,10,52,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,57,68,10,69,78,67,79,68,73,78,71, 32,54,53,52,51,55,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 56,48,10,52,48,10,48,48,10,48,52,10,48,56,10,51, 48,10,67,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,57,69,10,69,78,67,79,68,73,78,71,32,54,53, 52,51,56,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,52,48,10,50,48,10,56,48,10,52,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,57, 70,10,69,78,67,79,68,73,78,71,32,54,53,52,51,57, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,52,48, 10,65,48,10,52,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,65,49,10,69, 78,67,79,68,73,78,71,32,54,53,52,52,49,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,56,10,49,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,65,50,10,69,78,67,79, 68,73,78,71,32,54,53,52,52,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,70,56,10,50,56,10,50,56,10,50,56,10,50,56,10, 50,56,10,53,48,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,65,51,10,69,78,67,79,68,73,78, 71,32,54,53,52,52,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,67,56, 10,52,56,10,53,48,10,53,48,10,53,56,10,54,56,10, 65,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,65,52,10,69,78,67,79,68,73,78,71,32,54, 53,52,52,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,56,48,10,56,48, 10,56,48,10,56,48,10,56,48,10,56,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 65,53,10,69,78,67,79,68,73,78,71,32,54,53,52,52, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,66,56,10,57,48,10,57,48, 10,57,48,10,65,56,10,65,56,10,69,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,65,54,10, 69,78,67,79,68,73,78,71,32,54,53,52,52,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,66,56,10,56,48,10,66,56,10,56,48, 10,66,56,10,65,56,10,68,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,65,55,10,69,78,67, 79,68,73,78,71,32,54,53,52,52,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,70,56,10,56,48,10,56,48,10,56,48,10,56,48, 10,56,48,10,70,56,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,65,56,10,69,78,67,79,68,73, 78,71,32,54,53,52,52,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,65,48,10,65,48,10,65,48,10,65,48,10,65,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,65,57,10,69,78,67,79,68,73,78,71,32, 54,53,52,52,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,48, 56,10,48,56,10,70,56,10,56,48,10,56,48,10,70,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,65,65,10,69,78,67,79,68,73,78,71,32,54,53,52, 53,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,70,56,10,50,56,10,50, 56,10,69,56,10,56,56,10,65,56,10,67,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,65,66, 10,69,78,67,79,68,73,78,71,32,54,53,52,53,49,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,68,67,10,53,52,10,53,52,10,68, 52,10,57,52,10,66,52,10,68,67,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,65,67,10,69,78, 67,79,68,73,78,71,32,54,53,52,53,50,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,68,52,10,53,52,10,53,52,10,68,67,10,57, 52,10,66,52,10,68,67,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,65,68,10,69,78,67,79,68, 73,78,71,32,54,53,52,53,51,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 69,52,10,50,52,10,50,56,10,69,56,10,57,52,10,66, 52,10,68,52,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,65,69,10,69,78,67,79,68,73,78,71, 32,54,53,52,53,52,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,68,56,10, 53,48,10,53,48,10,68,56,10,57,48,10,66,48,10,68, 56,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,65,70,10,69,78,67,79,68,73,78,71,32,54,53, 52,53,53,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,48,10,68,67,10,52,48,10, 53,52,10,68,52,10,57,52,10,65,56,10,68,67,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,66, 48,10,69,78,67,79,68,73,78,71,32,54,53,52,53,54, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,69,67,10,50,48,10,51,67,10, 69,56,10,57,67,10,66,52,10,68,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,66,49,10,69, 78,67,79,68,73,78,71,32,54,53,52,53,55,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,70,56,10,56,56,10,56,56,10,56,56,10, 56,56,10,56,56,10,70,56,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,66,50,10,69,78,67,79, 68,73,78,71,32,54,53,52,53,56,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,48, 10,56,56,10,56,56,10,56,56,10,70,56,10,56,56,10, 56,56,10,70,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,66,51,10,69,78,67,79,68,73,78, 71,32,54,53,52,53,57,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,48,10,65,56, 10,65,56,10,65,56,10,70,56,10,65,56,10,65,56,10, 70,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,66,52,10,69,78,67,79,68,73,78,71,32,54, 53,52,54,48,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,48,10,65,56,10,65,56, 10,65,56,10,69,56,10,66,52,10,66,52,10,68,52,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 66,53,10,69,78,67,79,68,73,78,71,32,54,53,52,54, 49,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,48,10,49,48,10,49,48,10,50,48, 10,50,48,10,53,48,10,53,48,10,56,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,66,54,10, 69,78,67,79,68,73,78,71,32,54,53,52,54,50,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,50,56,10,50,56,10,53,48,10,53,48, 10,53,56,10,65,56,10,65,52,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,66,55,10,69,78,67, 79,68,73,78,71,32,54,53,52,54,51,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,51,48,10,52,56,10,56,52,10,56,52,10,56,52, 10,52,56,10,51,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,66,56,10,69,78,67,79,68,73, 78,71,32,54,53,52,54,52,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,48,10,70, 56,10,48,56,10,49,48,10,51,48,10,52,56,10,52,56, 10,56,52,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,66,57,10,69,78,67,79,68,73,78,71,32, 54,53,52,54,53,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,48,10,70,56,10,53, 48,10,53,48,10,53,48,10,65,56,10,65,56,10,65,56, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,66,65,10,69,78,67,79,68,73,78,71,32,54,53,52, 54,54,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,48,10,55,48,10,48,48,10,70, 56,10,50,48,10,50,48,10,53,48,10,56,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,66,66, 10,69,78,67,79,68,73,78,71,32,54,53,52,54,55,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,70,56,10,48,56,10,48,56,10,70, 56,10,48,56,10,48,56,10,49,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,66,67,10,69,78, 67,79,68,73,78,71,32,54,53,52,54,56,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,70,56,10,56,48,10,56,48,10,70,56,10,56, 48,10,56,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,66,68,10,69,78,67,79,68, 73,78,71,32,54,53,52,54,57,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,53,48,10,53,48,10,53, 48,10,70,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,66,69,10,69,78,67,79,68,73,78,71, 32,54,53,52,55,48,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,55,48,10,48,48,10, 70,56,10,48,48,10,55,48,10,56,56,10,56,56,10,55, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,67,50,10,69,78,67,79,68,73,78,71,32,54,53, 52,55,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 51,56,10,50,48,10,50,48,10,50,48,10,50,48,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,67, 51,10,69,78,67,79,68,73,78,71,32,54,53,52,55,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,56,10,52,56,10,52,56,10,55,56,10, 52,56,10,52,56,10,52,56,10,48,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,67,52,10,69, 78,67,79,68,73,78,71,32,54,53,52,55,54,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,50,48,10,50,48,10,51,56,10,50,48,10,51,56,10, 50,48,10,50,48,10,50,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,67,53,10,69,78,67,79, 68,73,78,71,32,54,53,52,55,55,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,52,56,10,55,56,10,52,56,10,55,56,10,52,56,10, 52,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,67,54,10,69,78,67,79,68,73,78, 71,32,54,53,52,55,56,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,51,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,67,55,10,69,78,67,79,68,73,78,71,32,54, 53,52,55,57,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,48,56,10,50,56,10,50,56, 10,69,56,10,50,56,10,50,56,10,50,56,10,48,56,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 67,65,10,69,78,67,79,68,73,78,71,32,54,53,52,56, 50,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,48,56,10,48,56,10,51,56,10,48,56, 10,51,56,10,48,56,10,48,56,10,48,56,10,48,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,67,66,10, 69,78,67,79,68,73,78,71,32,54,53,52,56,51,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,56,10,50,56,10,69,56,10,50,56,10,69,56, 10,50,56,10,50,56,10,48,56,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,67,67,10,69,78,67, 79,68,73,78,71,32,54,53,52,56,52,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,48, 48,10,48,48,10,48,48,10,50,48,10,50,48,10,50,48, 10,70,56,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,67,68,10,69,78,67,79,68,73, 78,71,32,54,53,52,56,53,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,48,56,10,48, 56,10,48,56,10,52,56,10,52,67,10,53,56,10,69,56, 10,48,56,10,48,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,67,69,10,69,78,67,79,68,73,78,71,32, 54,53,52,56,54,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,48,52,10,49,52,10,49, 52,10,53,67,10,53,52,10,55,52,10,68,52,10,48,52, 10,48,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,67,70,10,69,78,67,79,68,73,78,71,32,54,53,52, 56,55,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,48,56,10,48,56,10,52,56,10,52, 56,10,53,56,10,69,56,10,48,56,10,48,56,10,48,48, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,68,50, 10,69,78,67,79,68,73,78,71,32,54,53,52,57,48,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,53,48,10,53, 48,10,53,48,10,70,56,10,48,48,10,48,48,10,48,48, 10,48,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,68,51,10,69,78, 67,79,68,73,78,71,32,54,53,52,57,49,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,48,48,10,70,56,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,68,52,10,69,78,67,79,68, 73,78,71,32,54,53,52,57,50,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,48,56,10, 48,56,10,48,56,10,49,56,10,69,56,10,52,56,10,55, 56,10,52,56,10,48,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,68,53,10,69,78,67,79,68,73,78,71, 32,54,53,52,57,51,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,52,10,49,52,10, 49,52,10,49,52,10,70,52,10,53,52,10,55,52,10,53, 52,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,68,54,10,69,78,67,79,68,73,78,71,32,54,53, 52,57,52,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,48,56,10,48,56,10,48,56,10, 49,56,10,69,56,10,52,56,10,52,56,10,52,56,10,48, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,68, 55,10,69,78,67,79,68,73,78,71,32,54,53,52,57,53, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 70,56,10,53,48,10,53,48,10,53,48,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,68,65,10,69, 78,67,79,68,73,78,71,32,54,53,52,57,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 48,48,10,48,48,10,48,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,68,66,10,69,78,67,79, 68,73,78,71,32,54,53,52,57,57,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,48,48,10,48,48,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,49,56,10, 69,56,10,48,56,10,48,48,10,48,48,10,48,48,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,68,67,10,69,78,67,79,68,73,78, 71,32,54,53,53,48,48,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,48,56,10,48,56, 10,48,56,10,48,56,10,48,56,10,48,56,10,48,56,10, 48,56,10,48,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,83,84,65,82,84,67,72,65,82,32,117,110, 105,70,70,69,48,10,69,78,67,79,68,73,78,71,32,54, 53,53,48,52,10,83,87,73,68,84,72,32,52,56,48,32, 48,10,68,87,73,68,84,72,32,54,32,48,10,66,66,88, 32,54,32,49,51,32,48,32,45,50,10,66,73,84,77,65, 80,10,48,48,10,48,48,10,50,48,10,55,48,10,65,56, 10,65,48,10,65,48,10,65,56,10,55,48,10,50,48,10, 48,48,10,48,48,10,48,48,10,69,78,68,67,72,65,82, 10,83,84,65,82,84,67,72,65,82,32,117,110,105,70,70, 69,49,10,69,78,67,79,68,73,78,71,32,54,53,53,48, 53,10,83,87,73,68,84,72,32,52,56,48,32,48,10,68, 87,73,68,84,72,32,54,32,48,10,66,66,88,32,54,32, 49,51,32,48,32,45,50,10,66,73,84,77,65,80,10,48, 48,10,48,48,10,51,48,10,52,56,10,52,48,10,52,48, 10,69,48,10,52,48,10,52,48,10,52,56,10,66,48,10, 48,48,10,48,48,10,69,78,68,67,72,65,82,10,83,84, 65,82,84,67,72,65,82,32,117,110,105,70,70,69,50,10, 69,78,67,79,68,73,78,71,32,54,53,53,48,54,10,83, 87,73,68,84,72,32,52,56,48,32,48,10,68,87,73,68, 84,72,32,54,32,48,10,66,66,88,32,54,32,49,51,32, 48,32,45,50,10,66,73,84,77,65,80,10,48,48,10,48, 48,10,48,48,10,48,48,10,48,48,10,48,48,10,70,56, 10,48,56,10,48,56,10,48,48,10,48,48,10,48,48,10, 48,48,10,69,78,68,67,72,65,82,10,83,84,65,82,84, 67,72,65,82,32,117,110,105,70,70,69,51,10,69,78,67, 79,68,73,78,71,32,54,53,53,48,55,10,83,87,73,68, 84,72,32,52,56,48,32,48,10,68,87,73,68,84,72,32, 54,32,48,10,66,66,88,32,54,32,49,51,32,48,32,45, 50,10,66,73,84,77,65,80,10,48,48,10,48,48,10,70, 56,10,48,48,10,48,48,10,48,48,10,48,48,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,48,48,10, 69,78,68,67,72,65,82,10,83,84,65,82,84,67,72,65, 82,32,117,110,105,70,70,69,52,10,69,78,67,79,68,73, 78,71,32,54,53,53,48,56,10,83,87,73,68,84,72,32, 52,56,48,32,48,10,68,87,73,68,84,72,32,54,32,48, 10,66,66,88,32,54,32,49,51,32,48,32,45,50,10,66, 73,84,77,65,80,10,48,48,10,48,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,50,48,10,50,48, 10,50,48,10,50,48,10,48,48,10,48,48,10,69,78,68, 67,72,65,82,10,83,84,65,82,84,67,72,65,82,32,117, 110,105,70,70,69,53,10,69,78,67,79,68,73,78,71,32, 54,53,53,48,57,10,83,87,73,68,84,72,32,52,56,48, 32,48,10,68,87,73,68,84,72,32,54,32,48,10,66,66, 88,32,54,32,49,51,32,48,32,45,50,10,66,73,84,77, 65,80,10,48,48,10,48,48,10,56,56,10,56,56,10,53, 48,10,53,48,10,70,56,10,50,48,10,70,56,10,50,48, 10,50,48,10,48,48,10,48,48,10,69,78,68,67,72,65, 82,10,83,84,65,82,84,67,72,65,82,32,117,110,105,70, 70,69,54,10,69,78,67,79,68,73,78,71,32,54,53,53, 49,48,10,83,87,73,68,84,72,32,52,56,48,32,48,10, 68,87,73,68,84,72,32,54,32,48,10,66,66,88,32,54, 32,49,51,32,48,32,45,50,10,66,73,84,77,65,80,10, 48,48,10,48,48,10,56,56,10,56,56,10,70,56,10,56, 56,10,70,56,10,65,56,10,65,56,10,68,56,10,56,56, 10,48,48,10,48,48,10,69,78,68,67,72,65,82,10,83, 84,65,82,84,67,72,65,82,32,117,110,105,70,70,69,56, 10,69,78,67,79,68,73,78,71,32,54,53,53,49,50,10, 83,87,73,68,84,72,32,52,56,48,32,48,10,68,87,73, 68,84,72,32,54,32,48,10,66,66,88,32,54,32,49,51, 32,48,32,45,50,10,66,73,84,77,65,80,10,50,48,10, 50,48,10,50,48,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,50,48,10,50,48,10,50,48, 10,50,48,10,69,78,68,67,72,65,82,10,83,84,65,82, 84,67,72,65,82,32,117,110,105,70,70,69,57,10,69,78, 67,79,68,73,78,71,32,54,53,53,49,51,10,83,87,73, 68,84,72,32,52,56,48,32,48,10,68,87,73,68,84,72, 32,54,32,48,10,66,66,88,32,54,32,49,51,32,48,32, 45,50,10,66,73,84,77,65,80,10,48,48,10,48,48,10, 48,48,10,48,48,10,48,48,10,50,48,10,52,48,10,70, 56,10,52,48,10,50,48,10,48,48,10,48,48,10,48,48, 10,69,78,68,67,72,65,82,10,83,84,65,82,84,67,72, 65,82,32,117,110,105,70,70,69,65,10,69,78,67,79,68, 73,78,71,32,54,53,53,49,52,10,83,87,73,68,84,72, 32,52,56,48,32,48,10,68,87,73,68,84,72,32,54,32, 48,10,66,66,88,32,54,32,49,51,32,48,32,45,50,10, 66,73,84,77,65,80,10,48,48,10,48,48,10,50,48,10, 55,48,10,65,56,10,50,48,10,50,48,10,50,48,10,50, 48,10,50,48,10,50,48,10,48,48,10,48,48,10,69,78, 68,67,72,65,82,10,83,84,65,82,84,67,72,65,82,32, 117,110,105,70,70,69,66,10,69,78,67,79,68,73,78,71, 32,54,53,53,49,53,10,83,87,73,68,84,72,32,52,56, 48,32,48,10,68,87,73,68,84,72,32,54,32,48,10,66, 66,88,32,54,32,49,51,32,48,32,45,50,10,66,73,84, 77,65,80,10,48,48,10,48,48,10,48,48,10,48,48,10, 48,48,10,50,48,10,49,48,10,70,56,10,49,48,10,50, 48,10,48,48,10,48,48,10,48,48,10,69,78,68,67,72, 65,82,10,83,84,65,82,84,67,72,65,82,32,117,110,105, 70,70,69,67,10,69,78,67,79,68,73,78,71,32,54,53, 53,49,54,10,83,87,73,68,84,72,32,52,56,48,32,48, 10,68,87,73,68,84,72,32,54,32,48,10,66,66,88,32, 54,32,49,51,32,48,32,45,50,10,66,73,84,77,65,80, 10,48,48,10,48,48,10,50,48,10,50,48,10,50,48,10, 50,48,10,50,48,10,50,48,10,65,56,10,55,48,10,50, 48,10,48,48,10,48,48,10,69,78,68,67,72,65,82,10, 83,84,65,82,84,67,72,65,82,32,117,110,105,70,70,69, 68,10,69,78,67,79,68,73,78,71,32,54,53,53,49,55, 10,83,87,73,68,84,72,32,52,56,48,32,48,10,68,87, 73,68,84,72,32,54,32,48,10,66,66,88,32,54,32,49, 51,32,48,32,45,50,10,66,73,84,77,65,80,10,48,48, 10,48,48,10,48,48,10,48,48,10,48,48,10,70,56,10, 70,56,10,70,56,10,70,56,10,70,56,10,48,48,10,48, 48,10,48,48,10,69,78,68,67,72,65,82,10,83,84,65, 82,84,67,72,65,82,32,117,110,105,70,70,69,69,10,69, 78,67,79,68,73,78,71,32,54,53,53,49,56,10,83,87, 73,68,84,72,32,52,56,48,32,48,10,68,87,73,68,84, 72,32,54,32,48,10,66,66,88,32,54,32,49,51,32,48, 32,45,50,10,66,73,84,77,65,80,10,48,48,10,48,48, 10,48,48,10,48,48,10,51,48,10,52,56,10,56,52,10, 56,52,10,52,56,10,51,48,10,48,48,10,48,48,10,48, 48,10,69,78,68,67,72,65,82,10,83,84,65,82,84,67, 72,65,82,32,117,110,105,70,70,70,67,10,69,78,67,79, 68,73,78,71,32,54,53,53,51,50,10,83,87,73,68,84, 72,32,52,56,48,32,48,10,68,87,73,68,84,72,32,54, 32,48,10,66,66,88,32,54,32,49,51,32,48,32,45,50, 10,66,73,84,77,65,80,10,53,52,10,65,48,10,65,52, 10,65,48,10,55,52,10,50,56,10,66,52,10,50,56,10, 66,67,10,48,52,10,56,52,10,49,52,10,65,56,10,69, 78,68,67,72,65,82,10,83,84,65,82,84,67,72,65,82, 32,117,110,105,70,70,70,68,10,69,78,67,79,68,73,78, 71,32,54,53,53,51,51,10,83,87,73,68,84,72,32,52, 56,48,32,48,10,68,87,73,68,84,72,32,54,32,48,10, 66,66,88,32,54,32,49,51,32,48,32,45,50,10,66,73, 84,77,65,80,10,48,48,10,48,48,10,55,48,10,68,56, 10,65,56,10,69,56,10,68,56,10,68,56,10,70,56,10, 68,56,10,55,48,10,48,48,10,48,48,10,69,78,68,67, 72,65,82,10,69,78,68,70,79,78,84,10,}; size_t lxFNT6x13_bdf_size = 550764; therion-5.4.1/loch/lxFNTFreeSans_ttf.h000066400000000000000000027624461307545355600176300ustar00rootroot00000000000000FT_Byte lxFNTFreeSans_ttf[] = { 0,1,0,0,0,15,0,128,0,3,0,112,71,68,69,70, 85,149,93,142,0,0,0,252,0,0,0,114,71,80,79,83, 120,189,136,27,0,0,1,112,0,0,18,36,71,83,85,66, 249,2,197,18,0,0,19,148,0,0,2,6,79,83,47,50, 75,64,204,87,0,0,21,156,0,0,0,86,99,109,97,112, 235,21,241,230,0,0,21,244,0,0,9,130,99,118,116,32, 0,33,2,121,0,0,31,120,0,0,0,4,103,97,115,112, 255,255,0,3,0,0,31,124,0,0,0,8,103,108,121,102, 155,243,51,102,0,0,31,132,0,3,76,16,104,101,97,100, 219,187,238,20,0,3,107,148,0,0,0,54,104,104,101,97, 8,21,10,153,0,3,107,204,0,0,0,36,104,109,116,120, 5,62,143,235,0,3,107,240,0,0,33,252,108,111,99,97, 12,152,136,28,0,3,141,236,0,0,34,0,109,97,120,112, 8,222,1,90,0,3,175,236,0,0,0,32,110,97,109,101, 251,79,242,251,0,3,176,12,0,0,6,78,112,111,115,116, 90,188,188,203,0,3,182,92,0,0,81,43,0,1,0,0, 0,12,0,0,0,106,0,0,0,2,0,15,0,3,0,243, 0,1,0,244,0,245,0,2,0,246,3,109,0,1,3,110, 3,110,0,2,3,111,7,23,0,1,7,24,7,26,0,2, 7,27,7,27,0,1,7,28,7,28,0,2,7,29,7,29, 0,1,7,30,7,32,0,2,7,33,8,72,0,1,8,73, 8,79,0,2,8,80,8,124,0,1,8,125,8,125,0,2, 8,126,8,126,0,1,0,4,0,0,0,2,0,0,0,0, 0,1,0,0,0,10,0,48,0,62,0,2,68,70,76,84, 0,14,108,97,116,110,0,26,0,4,0,0,0,0,255,255, 0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,0, 0,1,107,101,114,110,0,8,0,0,0,1,0,1,0,2, 0,6,0,14,0,2,0,0,0,1,0,16,0,2,0,0, 0,1,2,138,0,1,2,86,0,4,0,0,0,20,0,50, 0,64,0,102,0,116,0,154,0,188,0,250,1,32,1,70, 1,96,1,134,1,148,1,162,1,176,1,190,1,204,1,218, 2,8,2,22,2,36,0,3,6,205,255,206,6,209,255,215, 8,72,255,156,0,9,0,36,255,249,0,55,255,176,0,57, 255,210,0,58,255,237,0,60,255,164,0,131,255,249,0,134, 255,249,0,135,255,249,0,136,255,245,0,3,6,205,255,205, 6,209,255,215,8,72,255,155,0,9,0,36,255,206,0,55, 255,130,0,57,255,163,0,58,255,190,0,60,255,123,0,131, 255,206,0,134,255,206,0,135,255,206,0,136,255,202,0,8, 0,36,255,189,0,55,255,251,0,58,0,12,0,60,255,247, 0,131,255,189,0,134,255,189,0,135,255,189,0,136,255,177, 0,15,0,15,255,196,0,17,255,196,0,36,255,184,0,71, 255,236,0,82,255,230,0,85,255,238,0,86,255,238,0,87, 255,249,0,89,255,254,0,90,0,2,0,92,255,250,0,131, 255,184,0,134,255,184,0,135,255,184,0,136,255,171,0,9, 0,36,255,204,0,55,0,9,0,57,0,15,0,58,0,27, 0,60,0,5,0,131,255,204,0,134,255,204,0,135,255,204, 0,136,255,192,0,9,0,36,255,203,0,55,0,11,0,57, 0,15,0,58,0,26,0,60,0,7,0,131,255,203,0,134, 255,203,0,135,255,203,0,136,255,190,0,6,0,36,0,30, 0,55,255,181,0,57,255,187,0,58,255,222,0,60,255,165, 0,136,0,30,0,9,0,36,255,212,0,55,255,135,0,57, 255,168,0,58,255,196,0,60,255,128,0,131,255,212,0,134, 255,212,0,135,255,212,0,136,255,208,0,3,8,64,255,254, 8,67,255,217,8,72,255,210,0,3,8,64,255,219,8,67, 255,231,8,72,255,220,0,3,8,64,255,254,8,67,255,223, 8,72,255,207,0,3,8,64,0,5,8,67,255,200,8,72, 255,172,0,3,8,64,0,1,8,67,255,230,8,72,255,180, 0,3,8,64,0,1,8,67,255,226,8,72,255,213,0,11, 0,15,255,137,0,17,255,137,0,29,255,179,8,62,255,228, 8,63,255,233,8,64,255,163,8,65,255,226,8,66,255,216, 8,67,255,252,8,68,255,228,8,72,255,203,0,3,8,64, 0,1,8,67,255,223,8,72,255,208,0,3,8,64,255,253, 8,67,255,219,8,72,255,213,0,12,0,15,255,182,0,17, 255,182,8,61,255,194,8,62,255,187,8,63,255,189,8,64, 255,175,8,65,255,189,8,66,255,194,8,67,255,166,8,68, 255,191,8,69,255,191,8,72,255,138,0,1,0,20,0,15, 0,16,0,17,0,125,6,204,6,205,6,208,6,209,6,210, 6,226,8,61,8,62,8,63,8,64,8,65,8,66,8,67, 8,68,8,69,8,72,0,1,14,210,0,4,0,0,0,76, 0,162,1,60,1,130,1,172,1,226,2,88,2,138,2,156, 2,238,3,100,3,182,3,224,4,54,4,172,4,214,5,148, 5,202,6,100,6,246,7,32,7,178,7,188,7,210,7,224, 7,234,8,4,8,74,8,100,8,110,8,120,8,182,8,188, 8,206,8,232,9,6,9,16,9,26,9,200,9,210,10,16, 10,22,10,128,10,230,11,0,11,106,11,152,12,10,12,56, 12,102,12,216,13,78,13,84,13,98,13,120,13,134,13,148, 13,174,13,180,13,186,13,216,13,222,14,0,14,14,14,28, 14,42,14,56,14,70,14,84,14,98,14,112,14,126,14,132, 14,154,14,172,14,182,14,200,0,38,0,15,0,5,0,16, 255,253,0,17,0,5,0,38,255,220,0,42,255,221,0,50, 255,223,0,52,255,224,0,55,255,163,0,56,255,219,0,57, 255,181,0,58,255,205,0,60,255,157,0,68,255,252,0,69, 0,4,0,70,255,245,0,71,255,248,0,72,255,240,0,74, 255,246,0,82,255,243,0,84,255,248,0,87,255,240,0,88, 255,244,0,89,255,225,0,90,255,235,0,92,255,222,0,109, 255,212,0,137,255,220,0,152,255,223,0,155,255,219,0,156, 255,219,0,157,255,219,0,158,255,219,0,169,255,246,0,206, 255,220,0,207,255,245,6,205,255,191,6,209,255,200,6,225, 255,216,0,17,0,36,255,235,0,50,255,249,0,57,255,215, 0,58,255,231,0,60,255,212,0,131,255,235,0,132,255,235, 0,133,255,235,0,134,255,235,0,135,255,235,0,136,255,235, 0,148,255,249,0,149,255,249,0,150,255,249,0,152,255,249, 0,154,255,255,1,20,255,251,0,10,0,36,255,224,0,43, 255,244,0,46,255,246,0,50,255,248,0,131,255,224,0,134, 255,224,0,135,255,224,0,136,255,223,0,149,255,248,0,152, 255,248,0,13,0,36,255,214,0,45,255,251,0,55,255,211, 0,57,255,205,0,58,255,227,0,59,255,203,0,60,255,193, 0,130,255,214,0,131,255,214,0,132,255,214,0,133,255,214, 0,134,255,214,0,135,255,214,0,29,0,15,255,148,0,16, 255,242,0,17,255,148,0,36,255,187,0,45,255,205,0,50, 255,234,0,68,255,223,0,72,255,232,0,76,255,246,0,77, 255,244,0,82,255,235,0,85,255,221,0,88,255,223,0,130, 255,187,0,131,255,187,0,132,255,187,0,133,255,187,0,134, 255,187,0,135,255,187,0,152,255,234,0,163,255,223,0,166, 255,223,0,167,255,223,0,168,255,227,0,171,255,232,0,181, 255,235,0,184,255,235,0,186,255,235,1,21,255,233,0,12, 0,36,255,250,0,55,255,212,0,57,255,206,0,58,255,228, 0,60,255,194,0,130,255,250,0,131,255,250,0,132,255,250, 0,133,255,250,0,134,255,250,0,135,255,250,0,136,255,253, 0,4,0,36,255,224,0,134,255,224,0,135,255,224,0,136, 255,225,0,20,0,16,255,209,0,38,255,205,0,42,255,205, 0,50,255,208,0,54,255,218,0,55,0,20,0,68,255,245, 0,72,255,224,0,82,255,227,0,88,255,237,0,92,255,194, 0,149,255,208,0,152,255,208,0,166,255,245,0,167,255,245, 0,168,255,249,0,181,255,227,0,184,255,227,0,190,255,237, 1,20,255,211,0,29,0,16,255,131,0,36,0,17,0,38, 255,215,0,42,255,214,0,50,255,215,0,54,255,237,0,55, 255,151,0,56,255,221,0,57,255,151,0,58,255,188,0,60, 255,135,0,88,255,249,0,92,255,200,0,131,0,17,0,134, 0,17,0,135,0,17,0,136,0,20,0,137,255,219,0,148, 255,215,0,149,255,215,0,150,255,215,0,151,255,215,0,152, 255,215,0,158,255,221,0,190,255,249,0,206,255,215,1,34, 255,237,6,205,255,107,6,209,255,115,0,20,0,15,255,249, 0,17,255,249,0,36,255,247,0,38,255,253,0,42,255,254, 0,68,255,251,0,82,0,2,0,131,255,247,0,134,255,247, 0,135,255,247,0,136,255,250,0,137,255,253,0,163,255,251, 0,166,255,251,0,167,255,251,0,168,255,254,0,181,0,2, 0,184,0,2,0,186,0,4,0,206,255,253,0,10,0,36, 255,221,0,55,255,214,0,57,255,211,0,58,255,233,0,59, 255,210,0,60,255,197,0,131,255,221,0,134,255,221,0,135, 255,221,0,136,255,217,0,21,0,15,255,121,0,16,255,216, 0,17,255,121,0,36,255,178,0,45,255,178,0,68,255,228, 0,72,255,225,0,82,255,229,0,131,255,178,0,134,255,178, 0,135,255,178,0,136,255,170,0,163,255,228,0,166,255,228, 0,167,255,228,0,168,255,232,0,171,255,225,0,181,255,229, 0,184,255,229,0,186,255,229,1,21,255,228,0,29,0,16, 255,254,0,38,255,240,0,42,255,241,0,50,255,243,0,55, 255,233,0,56,255,239,0,57,255,217,0,58,255,229,0,60, 255,213,0,68,255,241,0,72,255,244,0,82,255,247,0,88, 255,247,0,92,255,248,0,137,255,240,0,149,255,243,0,152, 255,243,0,158,255,239,0,163,255,241,0,166,255,241,0,167, 255,241,0,168,255,244,0,171,255,244,0,181,255,247,0,184, 255,247,0,188,255,247,0,190,255,247,1,20,255,245,1,21, 255,245,0,10,0,36,255,234,0,55,255,228,0,57,255,214, 0,58,255,228,0,60,255,208,0,87,255,253,0,131,255,234, 0,134,255,234,0,135,255,234,0,136,255,234,0,47,0,15, 255,156,0,16,255,179,0,17,255,156,0,29,255,123,0,30, 255,127,0,36,255,161,0,38,255,212,0,42,255,211,0,45, 255,156,0,50,255,214,0,54,255,232,0,57,0,12,0,58, 0,16,0,60,0,20,0,68,255,156,0,70,255,166,0,72, 255,161,0,74,255,167,0,76,255,253,0,77,255,251,0,82, 255,164,0,85,255,164,0,86,255,164,0,88,255,165,0,89, 255,161,0,90,255,163,0,92,255,156,0,109,255,135,0,130, 255,161,0,131,255,161,0,132,255,161,0,133,255,161,0,134, 255,161,0,135,255,161,0,136,255,159,0,148,255,214,0,149, 255,214,0,150,255,214,0,151,255,214,0,152,255,214,0,154, 255,215,0,168,255,159,0,186,255,169,1,20,255,221,1,34, 255,232,1,35,255,196,6,225,255,139,0,13,0,15,255,229, 0,17,255,231,0,36,255,220,0,80,255,252,0,81,255,252, 0,83,0,3,0,85,255,252,0,131,255,220,0,132,255,220, 0,133,255,220,0,134,255,220,0,135,255,220,0,136,255,217, 0,38,0,15,255,167,0,16,255,218,0,17,255,167,0,29, 255,190,0,30,255,190,0,36,255,185,0,38,255,213,0,42, 255,214,0,50,255,216,0,54,255,221,0,55,0,15,0,68, 255,197,0,72,255,199,0,74,255,206,0,76,255,251,0,82, 255,202,0,85,255,214,0,88,255,215,0,92,255,236,0,109, 255,173,0,130,255,185,0,131,255,185,0,132,255,185,0,133, 255,185,0,134,255,185,0,135,255,185,0,136,255,178,0,148, 255,216,0,149,255,216,0,150,255,216,0,151,255,216,0,152, 255,216,0,154,255,223,0,168,255,201,0,186,255,206,0,207, 255,213,1,34,255,221,6,225,255,176,0,36,0,15,255,200, 0,16,255,243,0,17,255,200,0,29,255,204,0,30,255,203, 0,36,255,206,0,38,255,233,0,42,255,234,0,50,255,236, 0,54,255,232,0,55,0,19,0,68,255,218,0,72,255,224, 0,74,255,231,0,76,255,255,0,82,255,227,0,85,255,228, 0,88,255,228,0,92,255,250,0,109,255,198,0,130,255,206, 0,131,255,206,0,132,255,206,0,133,255,206,0,134,255,206, 0,135,255,206,0,136,255,200,0,148,255,236,0,149,255,236, 0,150,255,236,0,151,255,236,0,152,255,236,0,154,255,243, 0,168,255,222,0,186,255,231,6,225,255,202,0,10,0,16, 255,205,0,38,255,208,0,50,255,211,0,52,255,212,0,68, 255,241,0,72,255,220,0,82,255,223,0,88,255,232,0,92, 255,195,0,152,255,211,0,36,0,15,255,145,0,16,255,172, 0,17,255,145,0,29,255,169,0,30,255,168,0,36,255,160, 0,38,255,198,0,42,255,198,0,50,255,200,0,54,255,215, 0,55,0,23,0,68,255,168,0,72,255,167,0,74,255,173, 0,76,0,3,0,82,255,170,0,83,255,202,0,88,255,193, 0,89,255,220,0,109,255,133,0,130,255,160,0,131,255,160, 0,132,255,160,0,133,255,160,0,134,255,160,0,135,255,160, 0,136,255,153,0,148,255,200,0,149,255,200,0,150,255,200, 0,151,255,200,0,152,255,200,0,154,255,202,0,168,255,172, 0,186,255,174,6,225,255,137,0,2,0,89,255,223,0,92, 255,218,0,5,0,77,255,252,0,89,255,235,0,90,255,243, 0,92,255,230,6,205,255,233,0,3,0,89,255,245,0,90, 255,253,0,92,255,241,0,2,0,75,0,1,0,78,0,7, 0,6,0,87,255,246,0,89,255,241,0,90,255,247,0,91, 255,229,0,92,255,237,6,205,255,238,0,17,0,68,255,247, 0,72,255,241,0,73,0,22,0,76,255,254,0,77,255,252, 0,79,255,253,0,82,255,246,0,87,0,24,0,163,255,247, 0,166,255,247,0,167,255,247,0,168,255,251,0,171,255,241, 0,181,255,246,0,184,255,246,0,186,255,247,1,21,255,244, 0,6,0,68,255,251,0,166,255,251,0,167,255,251,0,168, 255,255,0,181,0,3,0,184,0,3,0,2,0,92,255,238, 6,205,255,241,0,2,0,55,255,249,0,77,255,253,0,15, 0,16,255,215,0,68,255,254,0,72,255,235,0,74,255,240, 0,82,255,237,0,86,255,253,0,88,255,245,0,163,255,254, 0,166,255,254,0,167,255,254,0,168,0,2,0,171,255,235, 0,181,255,237,0,184,255,237,0,190,255,250,0,1,0,92, 255,251,0,4,0,83,0,5,0,89,255,243,0,90,255,249, 0,92,255,238,0,6,0,55,255,160,0,83,0,5,0,89, 255,243,0,90,255,249,0,92,255,238,6,205,255,242,0,7, 0,55,255,157,0,87,255,246,0,89,255,238,0,90,255,246, 0,91,255,229,0,92,255,234,6,205,255,235,0,2,0,87, 255,252,0,92,255,240,0,2,0,70,0,8,0,88,0,4, 0,43,0,15,255,187,0,16,255,209,0,17,255,187,0,29, 255,234,0,30,255,234,0,68,255,251,0,70,255,250,0,71, 255,255,0,72,255,245,0,73,0,26,0,74,255,252,0,76, 0,1,0,78,0,6,0,79,0,1,0,82,255,250,0,83, 0,8,0,84,255,253,0,86,0,4,0,87,0,28,0,88, 0,2,0,89,0,29,0,90,0,31,0,91,0,20,0,92, 0,24,0,93,0,9,0,162,255,251,0,163,255,251,0,164, 255,251,0,166,255,251,0,167,255,251,0,168,255,255,0,169, 255,247,0,170,255,245,0,171,255,245,0,172,255,245,0,180, 255,250,0,181,255,250,0,182,255,250,0,184,255,250,0,186, 255,250,0,207,255,250,1,21,255,248,6,205,0,1,0,2, 0,87,255,253,6,205,255,234,0,15,0,29,255,228,0,30, 255,228,0,54,255,248,0,68,255,255,0,72,255,242,0,75, 255,253,0,82,255,244,0,163,255,255,0,166,255,255,0,167, 255,255,0,168,0,2,0,171,255,242,0,181,255,244,0,184, 255,244,6,205,255,255,0,1,6,205,255,248,0,26,0,15, 255,187,0,16,255,244,0,17,255,187,0,29,255,233,0,30, 255,233,0,68,255,238,0,70,255,240,0,72,255,235,0,74, 255,242,0,82,255,239,0,86,255,247,0,162,255,238,0,163, 255,238,0,164,255,238,0,165,255,238,0,166,255,238,0,167, 255,238,0,168,255,242,0,170,255,235,0,171,255,235,0,172, 255,235,0,180,255,239,0,181,255,239,0,184,255,239,0,186, 255,239,0,207,255,240,0,25,0,15,255,206,0,16,255,255, 0,17,255,206,0,29,255,233,0,30,255,233,0,68,255,241, 0,70,255,249,0,72,255,244,0,74,255,250,0,82,255,247, 0,86,255,251,0,162,255,241,0,163,255,241,0,164,255,241, 0,165,255,241,0,166,255,241,0,167,255,241,0,168,255,245, 0,170,255,244,0,171,255,244,0,172,255,244,0,180,255,247, 0,181,255,247,0,184,255,247,0,186,255,250,0,6,0,68, 255,239,0,70,255,233,0,72,255,228,0,82,255,231,0,84, 255,236,0,171,255,228,0,26,0,15,255,186,0,16,255,242, 0,17,255,186,0,29,255,229,0,30,255,229,0,68,255,234, 0,70,255,237,0,72,255,232,0,74,255,239,0,79,255,252, 0,82,255,236,0,86,255,244,0,162,255,234,0,163,255,234, 0,164,255,234,0,165,255,234,0,166,255,234,0,167,255,234, 0,168,255,238,0,170,255,232,0,171,255,232,0,172,255,232, 0,180,255,236,0,181,255,236,0,184,255,236,0,186,255,237, 0,11,0,15,0,5,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,28, 0,15,0,5,0,16,255,253,0,17,0,5,0,38,255,220, 0,42,255,221,0,50,255,223,0,52,255,224,0,55,255,163, 0,56,255,219,0,57,255,181,0,58,255,205,0,60,255,157, 0,68,255,252,0,69,0,4,0,70,255,245,0,71,255,248, 0,72,255,240,0,74,255,246,0,82,255,243,0,84,255,248, 0,87,255,240,0,88,255,244,0,89,255,225,0,90,255,235, 0,92,255,222,0,109,255,212,6,205,255,191,6,225,255,216, 0,11,0,15,0,5,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,11, 0,15,0,5,0,17,0,5,0,38,255,220,0,42,255,221, 0,50,255,223,0,52,255,224,0,55,255,163,0,56,255,219, 0,57,255,181,0,58,255,205,0,60,255,157,0,28,0,15, 0,5,0,16,255,253,0,17,0,5,0,38,255,220,0,42, 255,221,0,50,255,223,0,52,255,224,0,55,255,163,0,56, 255,219,0,57,255,181,0,58,255,205,0,60,255,157,0,68, 255,252,0,69,0,4,0,70,255,245,0,71,255,248,0,74, 255,246,0,82,255,243,0,84,255,248,0,87,255,240,0,88, 255,244,0,89,255,225,0,90,255,235,0,92,255,222,0,109, 255,212,6,205,255,191,6,209,255,200,6,225,255,216,0,29, 0,15,0,5,0,16,255,253,0,17,0,5,0,38,255,220, 0,42,255,221,0,50,255,223,0,52,255,224,0,55,255,163, 0,56,255,219,0,57,255,181,0,58,255,205,0,60,255,157, 0,68,255,252,0,69,0,4,0,70,255,245,0,71,255,248, 0,72,255,240,0,74,255,246,0,82,255,243,0,84,255,248, 0,87,255,240,0,88,255,244,0,89,255,225,0,90,255,235, 0,92,255,222,0,109,255,212,6,205,255,191,6,209,255,200, 6,225,255,216,0,1,0,36,255,225,0,3,0,55,255,214, 0,57,255,211,0,60,255,197,0,5,0,36,255,221,0,55, 255,214,0,57,255,211,0,58,255,233,0,60,255,197,0,3, 0,55,255,214,0,57,255,211,0,60,255,197,0,3,0,55, 255,214,0,57,255,211,0,60,255,197,0,6,0,36,255,221, 0,55,255,214,0,57,255,211,0,58,255,233,0,59,255,210, 0,60,255,197,0,1,0,36,255,223,0,1,0,36,255,220, 0,7,0,15,255,229,0,17,255,231,0,36,255,220,0,80, 255,252,0,81,255,252,0,83,0,3,0,85,255,252,0,1, 0,36,255,220,0,8,0,15,255,229,0,17,255,231,0,36, 255,220,0,69,0,3,0,80,255,252,0,81,255,252,0,83, 0,3,0,85,255,252,0,3,0,89,255,235,0,90,255,243, 0,92,255,230,0,3,0,89,255,235,0,90,255,243,0,92, 255,230,0,3,0,89,255,235,0,90,255,243,0,92,255,230, 0,3,0,89,255,235,0,90,255,243,0,92,255,230,0,3, 0,89,255,240,0,90,255,246,0,92,255,236,0,3,0,89, 255,241,0,90,255,247,0,92,255,237,0,3,0,89,255,241, 0,90,255,247,0,92,255,237,0,3,0,89,255,238,0,90, 255,246,0,92,255,234,0,3,0,89,255,238,0,90,255,246, 0,92,255,234,0,1,0,87,255,246,0,5,0,87,255,246, 0,89,255,238,0,90,255,246,0,91,255,229,0,92,255,234, 0,4,0,36,255,224,0,43,255,244,0,46,255,246,0,50, 255,248,0,2,0,75,0,1,0,78,0,7,0,4,0,36, 255,234,0,55,255,228,0,57,255,214,0,87,255,253,0,2, 0,89,255,223,0,92,255,218,0,2,0,20,0,36,0,39, 0,0,0,41,0,42,0,4,0,45,0,47,0,6,0,49, 0,51,0,9,0,53,0,61,0,12,0,68,0,70,0,21, 0,72,0,76,0,24,0,78,0,92,0,29,0,130,0,135, 0,44,0,137,0,137,0,50,0,148,0,152,0,51,0,154, 0,158,0,56,0,162,0,163,0,61,0,166,0,168,0,63, 0,171,0,172,0,66,0,180,0,182,0,68,0,184,0,184, 0,71,0,206,0,207,0,72,1,34,1,34,0,74,1,63, 1,63,0,75,0,1,0,0,0,10,0,84,0,110,0,4, 68,70,76,84,0,26,97,114,109,110,0,38,104,101,98,114, 0,50,108,97,116,110,0,62,0,4,0,0,0,0,255,255, 0,1,0,0,0,4,0,0,0,0,255,255,0,1,0,1, 0,4,0,0,0,0,255,255,0,1,0,1,0,4,0,0, 0,0,255,255,0,1,0,1,0,2,102,114,97,99,0,14, 108,105,103,97,0,20,0,0,0,1,0,0,0,0,0,1, 0,3,0,4,0,10,0,18,0,26,0,34,0,4,0,8, 0,1,0,32,0,4,0,8,0,1,0,204,0,4,0,8, 0,1,1,78,0,4,0,8,0,1,1,94,0,1,0,166, 0,5,0,16,0,38,0,80,0,102,0,144,0,2,0,6, 0,14,7,24,0,3,6,230,0,24,7,24,0,3,0,18, 0,24,0,4,0,10,0,18,0,26,0,34,7,30,0,3, 6,230,0,27,7,30,0,3,0,18,0,27,7,25,0,3, 6,230,0,24,7,25,0,3,0,18,0,24,0,2,0,6, 0,14,7,26,0,3,6,230,0,24,7,26,0,3,0,18, 0,24,0,4,0,10,0,18,0,26,0,34,7,31,0,3, 6,230,0,27,7,31,0,3,0,18,0,27,7,28,0,3, 6,230,0,25,7,28,0,3,0,18,0,25,0,2,0,6, 0,14,7,32,0,3,6,230,0,27,7,32,0,3,0,18, 0,27,0,1,0,5,0,21,0,22,0,23,0,24,0,26, 0,1,0,122,0,6,0,18,0,28,0,74,0,84,0,94, 0,104,0,1,0,4,0,244,0,2,0,45,0,5,0,12, 0,20,0,28,0,34,0,40,8,77,0,3,0,73,0,79, 8,76,0,3,0,73,0,76,8,75,0,2,0,79,8,74, 0,2,0,76,8,73,0,2,0,73,0,1,0,4,0,245, 0,2,0,77,0,1,0,4,8,79,0,2,0,87,0,1, 0,4,8,78,0,2,0,87,0,2,0,6,0,12,8,77, 0,2,0,79,8,76,0,2,0,76,0,1,0,6,0,44, 0,73,0,76,0,86,1,65,8,73,0,1,0,18,0,1, 0,8,0,1,0,4,3,110,0,2,3,105,0,1,0,1, 3,76,0,1,0,18,0,1,0,8,0,1,0,4,8,125, 0,2,3,145,0,1,0,1,3,133,0,0,0,1,1,225, 1,144,0,5,0,0,0,200,0,200,0,0,0,200,0,200, 0,200,0,0,0,200,0,49,1,2,0,0,2,11,5,4, 2,2,2,2,2,4,192,95,142,255,80,7,96,251,0,0, 2,160,0,0,0,0,80,102,69,100,0,64,0,32,255,253, 4,117,254,53,0,90,4,117,1,203,128,2,0,191,221,245, 0,1,0,0,0,0,0,3,0,0,0,3,0,0,0,28, 0,1,0,0,0,0,8,124,0,3,0,1,0,0,0,28, 0,4,8,96,0,0,2,20,2,0,0,8,0,20,0,13, 0,126,1,128,1,137,1,140,1,147,1,153,1,159,1,165, 1,169,1,171,1,174,1,227,1,237,1,245,2,27,2,31, 2,51,2,84,2,89,2,92,2,97,2,106,2,109,2,115, 2,117,2,127,2,133,2,137,2,142,2,144,2,156,2,158, 2,160,2,199,2,203,2,221,3,4,3,8,3,12,3,15, 3,20,3,40,3,117,3,122,3,126,3,138,3,140,3,161, 3,206,4,95,4,196,4,200,4,204,4,245,4,249,5,86, 5,94,5,135,5,138,5,185,5,196,5,234,7,13,7,44, 7,74,9,2,9,11,9,13,9,17,9,51,9,57,9,67, 9,69,9,73,9,77,9,81,9,112,9,131,9,140,9,144, 9,168,9,176,9,178,9,185,9,188,9,196,9,200,9,205, 9,215,9,221,9,227,9,250,10,10,10,16,10,40,10,48, 10,51,10,54,10,57,10,60,10,66,10,72,10,77,10,92, 10,94,10,112,10,116,10,130,10,139,10,168,10,176,10,179, 10,185,10,195,10,200,10,204,10,208,10,239,11,3,11,7, 11,9,11,11,11,15,11,19,11,24,11,26,11,29,11,33, 11,43,11,48,11,51,11,57,11,67,11,71,11,96,11,111, 11,131,11,138,11,144,11,149,11,154,11,156,11,159,11,164, 11,170,11,181,11,185,11,193,11,200,11,205,11,215,11,221, 11,225,12,131,12,138,12,144,12,154,12,156,12,168,12,179, 12,239,13,131,13,133,13,139,13,145,13,148,13,156,13,158, 13,162,13,165,13,171,13,177,13,187,13,189,13,198,13,202, 13,212,13,214,13,217,13,223,31,21,31,29,31,69,31,77, 31,87,31,89,31,91,31,93,31,125,31,180,31,196,31,211, 31,219,31,239,31,244,31,254,32,16,32,20,32,35,32,38, 32,55,32,61,32,68,32,73,32,75,32,113,32,121,32,137, 32,168,32,170,32,172,33,12,33,18,33,22,33,28,33,34, 33,40,33,45,33,51,33,127,33,149,33,181,33,212,34,0, 34,3,34,9,34,19,34,23,34,26,34,30,34,32,34,46, 34,52,34,60,34,62,34,67,34,73,34,96,34,101,34,151, 34,165,35,0,37,202,38,106,48,3,48,5,48,17,48,21, 48,147,48,153,48,155,48,254,246,65,246,190,246,195,246,220, 251,6,251,54,251,60,251,62,251,65,251,68,251,79,255,253, 255,255,0,0,0,13,0,32,0,160,1,130,1,139,1,142, 1,153,1,157,1,165,1,167,1,171,1,173,1,196,1,230, 1,240,1,248,2,30,2,38,2,80,2,86,2,91,2,96, 2,101,2,109,2,111,2,117,2,121,2,130,2,135,2,140, 2,144,2,156,2,158,2,160,2,198,2,202,2,216,3,0, 3,6,3,10,3,15,3,17,3,38,3,116,3,122,3,126, 3,132,3,140,3,142,3,163,4,0,4,140,4,199,4,203, 4,208,4,248,5,49,5,90,5,97,5,137,5,176,5,187, 5,208,7,0,7,16,7,48,9,1,9,5,9,13,9,16, 9,19,9,53,9,60,9,69,9,71,9,75,9,80,9,102, 9,129,9,133,9,143,9,147,9,170,9,178,9,182,9,188, 9,190,9,199,9,203,9,215,9,220,9,223,9,230,10,5, 10,15,10,19,10,42,10,50,10,53,10,56,10,60,10,62, 10,71,10,75,10,89,10,94,10,102,10,114,10,129,10,133, 10,149,10,170,10,178,10,181,10,189,10,199,10,203,10,208, 10,230,11,2,11,5,11,9,11,11,11,15,11,19,11,21, 11,26,11,28,11,31,11,42,11,47,11,50,11,54,11,62, 11,71,11,96,11,102,11,130,11,133,11,142,11,146,11,153, 11,156,11,158,11,163,11,168,11,174,11,183,11,190,11,198, 11,202,11,215,11,218,11,225,12,131,12,133,12,142,12,146, 12,156,12,158,12,176,12,230,13,130,13,133,13,137,13,145, 13,148,13,153,13,158,13,160,13,164,13,167,13,173,13,179, 13,189,13,192,13,202,13,207,13,214,13,216,13,223,31,0, 31,24,31,32,31,72,31,80,31,89,31,91,31,93,31,95, 31,128,31,182,31,198,31,214,31,221,31,242,31,246,32,16, 32,19,32,24,32,38,32,48,32,57,32,68,32,71,32,75, 32,112,32,116,32,128,32,167,32,170,32,172,33,11,33,16, 33,22,33,27,33,34,33,38,33,42,33,48,33,83,33,144, 33,181,33,208,34,0,34,2,34,5,34,15,34,23,34,26, 34,29,34,32,34,39,34,52,34,60,34,62,34,65,34,73, 34,96,34,100,34,149,34,165,35,0,37,202,38,106,48,1, 48,5,48,7,48,20,48,65,48,153,48,155,48,161,246,57, 246,190,246,195,246,220,251,0,251,29,251,56,251,62,251,64, 251,67,251,70,255,253,255,255,255,245,255,227,255,194,255,193, 255,192,255,191,255,186,255,183,255,178,255,177,255,176,255,175, 255,154,255,152,255,150,255,148,255,146,255,140,255,112,255,111, 255,110,255,107,255,104,255,102,255,101,255,100,255,97,255,95, 255,94,255,92,255,91,255,80,255,79,255,78,255,41,255,39, 255,27,254,249,254,248,254,247,254,245,254,244,254,227,254,152, 254,148,254,145,254,140,254,139,254,138,254,137,254,88,254,44, 254,42,254,40,254,37,254,35,253,236,253,233,253,231,253,230, 253,193,253,192,253,181,252,160,252,158,252,155,250,229,250,227, 250,226,250,224,250,223,250,222,250,220,250,219,250,218,250,217, 250,215,250,195,250,179,250,178,250,176,250,174,250,173,250,172, 250,169,250,167,250,166,250,164,250,162,250,153,250,149,250,148, 250,146,250,136,250,132,250,130,250,129,250,128,250,127,250,126, 250,124,250,123,250,119,250,117,250,106,250,105,250,98,250,97, 250,85,250,83,250,74,250,73,250,72,250,71,250,68,250,65, 250,63,250,60,250,39,250,21,250,20,250,19,250,18,250,15, 250,12,250,11,250,10,250,9,250,8,250,0,249,253,249,252, 249,250,249,246,249,243,249,219,249,214,249,196,249,195,249,192, 249,191,249,188,249,187,249,186,249,183,249,180,249,177,249,176, 249,172,249,168,249,167,249,158,249,156,249,153,248,248,248,247, 248,244,248,243,248,242,248,241,248,234,248,184,248,38,248,37, 248,34,248,29,248,27,248,23,248,22,248,21,248,20,248,19, 248,18,248,17,248,16,248,14,248,11,248,7,248,6,248,5, 248,0,230,224,230,222,230,220,230,218,230,216,230,215,230,214, 230,213,230,212,230,210,230,209,230,208,230,206,230,205,230,203, 230,202,230,185,230,183,230,180,230,178,230,169,230,168,230,162, 230,160,230,159,230,123,230,121,230,115,230,86,230,85,230,84, 229,246,229,243,229,240,229,236,229,231,229,228,229,227,229,225, 229,194,229,178,229,147,229,121,229,78,229,77,229,76,229,71, 229,68,229,66,229,64,229,63,229,57,229,52,229,45,229,44, 229,42,229,37,229,15,229,12,228,221,228,208,228,118,225,173, 225,14,215,120,215,119,215,118,215,116,215,73,215,68,215,67, 215,62,18,4,17,136,17,132,17,108,13,73,13,51,13,50, 13,49,13,48,13,47,13,46,8,129,0,1,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,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, 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,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,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,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,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,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,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,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, 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,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,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,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,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,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,6,0,0,1,146,178,0,0,0,0,159,1,3, 0,160,192,1,0,0,0,0,0,0,0,127,126,123,128,117, 116,104,111,1,0,0,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,96,97,0,134,135,137,139,147,152,158,163,162,164, 166,165,167,169,171,170,172,173,175,174,176,177,179,181,180,182, 184,183,188,187,189,190,0,114,100,101,105,0,120,161,112,107, 0,118,106,0,136,154,0,115,0,0,103,119,0,0,0,0, 0,108,124,0,168,186,129,99,110,0,0,0,0,109,125,0, 98,130,133,151,0,0,0,0,0,0,0,0,185,0,193,0, 0,0,0,0,0,0,0,121,0,0,0,132,140,131,141,138, 143,144,145,142,149,150,0,148,156,157,155,0,0,0,113,0, 0,0,122,0,0,0,0,0,0,33,2,121,0,0,0,1, 255,255,0,2,0,2,0,33,0,0,1,110,2,154,0,3, 0,7,0,46,177,1,0,47,60,178,7,4,0,237,50,177, 6,5,220,60,178,3,2,0,237,50,0,177,3,0,47,60, 178,5,4,0,237,50,178,7,6,1,252,60,178,1,2,0, 237,50,51,17,33,17,37,33,17,33,33,1,77,254,212,1, 11,254,245,2,154,253,102,33,2,88,0,2,0,124,0,0, 0,208,2,217,0,5,0,9,0,0,19,17,7,35,39,17, 19,21,35,53,208,22,39,22,83,84,2,217,254,174,223,223, 1,82,253,143,104,104,0,2,0,52,1,208,1,49,2,197, 0,5,0,11,0,0,19,51,21,7,35,39,55,51,21,7, 35,39,52,93,27,39,27,160,93,27,39,27,2,197,111,134, 134,111,111,134,134,0,0,2,0,14,255,236,2,30,2,185, 0,27,0,31,0,0,1,7,51,21,35,7,51,21,35,7, 35,55,35,7,35,55,35,53,51,55,35,53,51,55,51,7, 51,55,3,35,7,51,1,229,36,93,106,31,105,117,39,76, 38,124,39,76,38,101,114,31,108,121,36,76,36,125,35,48, 124,32,125,2,185,196,68,174,68,211,211,211,211,68,174,68, 196,196,196,254,248,174,0,3,0,32,255,130,2,6,3,2, 0,51,0,58,0,67,0,0,19,51,21,22,23,22,23,20, 21,35,38,39,38,39,38,35,21,22,23,22,21,20,7,6, 7,6,7,21,35,53,38,39,38,55,52,53,51,22,23,22, 23,22,23,17,38,39,38,53,52,55,54,55,17,53,6,7, 6,21,20,23,17,54,55,54,53,52,39,38,243,59,126,47, 19,2,79,1,57,20,24,6,7,100,31,85,68,11,13,49, 75,59,154,43,14,1,79,7,14,2,2,35,71,93,33,71, 140,26,31,96,17,3,175,61,31,42,47,29,3,2,54,9, 93,38,47,5,5,77,34,11,4,1,249,31,17,48,106,104, 61,10,8,29,6,103,103,10,117,39,48,9,8,74,24,3, 4,48,9,1,16,28,24,51,95,146,42,8,4,254,201,240, 13,76,14,16,90,127,254,249,7,30,40,60,61,30,18,0, 0,5,0,29,255,236,3,91,2,197,0,16,0,33,0,37, 0,53,0,70,0,0,19,50,31,1,22,21,20,7,6,35, 34,39,38,53,52,55,54,23,34,15,1,6,21,20,23,22, 51,50,55,54,53,52,39,38,37,51,1,35,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,34,7,6, 21,20,23,22,51,50,55,54,53,52,47,1,38,199,84,51, 18,18,63,47,60,81,52,38,63,47,60,54,30,12,5,45, 26,31,54,30,17,48,24,1,124,66,254,117,66,1,218,85, 51,35,63,47,60,81,52,38,64,47,59,54,30,17,47,25, 30,54,30,17,48,23,15,2,173,66,28,37,42,79,51,39, 63,48,60,81,52,38,70,46,23,16,16,53,31,17,45,25, 30,57,30,15,94,253,39,1,86,66,46,60,79,51,39,63, 48,60,81,51,38,70,45,25,30,55,30,16,45,25,29,57, 30,10,5,0,0,3,0,52,255,233,2,125,2,197,0,41, 0,56,0,69,0,0,1,51,20,7,23,35,39,6,7,6, 35,34,39,38,53,52,55,54,55,38,39,38,53,52,55,54, 51,50,31,1,22,23,22,21,20,7,6,7,23,54,53,52, 39,54,55,54,53,52,39,38,35,34,7,6,21,20,23,19, 39,6,7,6,21,20,23,22,51,50,55,54,1,237,80,58, 122,109,62,49,28,56,76,116,56,33,52,36,74,70,9,2, 65,46,60,90,46,15,9,2,1,55,29,54,133,31,208,81, 15,7,45,19,23,60,20,6,25,178,160,94,20,8,54,35, 42,67,68,8,1,78,94,89,151,78,48,17,36,82,49,68, 81,53,36,43,88,48,13,14,77,47,33,66,28,21,24,9, 9,69,49,26,30,163,54,60,3,99,51,37,15,20,52,23, 10,50,16,20,33,35,254,164,200,60,50,20,24,65,38,25, 65,8,0,1,0,48,1,208,0,142,2,197,0,5,0,0, 19,51,21,7,35,39,48,94,27,40,27,2,197,111,134,134, 0,1,0,73,255,44,1,35,2,217,0,17,0,0,19,51, 6,7,6,21,20,23,22,23,35,38,39,38,53,52,55,54, 236,55,124,12,1,122,7,8,55,113,37,13,93,31,2,217, 200,229,21,20,233,213,13,12,148,192,68,63,179,179,61,0, 0,1,0,38,255,44,1,0,2,217,0,17,0,0,23,35, 54,55,54,53,52,39,38,39,51,22,23,22,21,20,7,6, 93,55,124,12,1,122,7,8,55,113,37,13,93,31,212,200, 229,21,20,233,213,13,12,148,192,68,63,179,179,61,0,1, 0,40,1,185,1,87,2,217,0,14,0,0,19,51,7,55, 23,7,23,7,39,7,39,55,39,55,23,160,63,5,106,19, 108,70,51,62,63,50,69,108,19,106,2,217,112,38,59,30, 89,36,93,93,36,89,30,59,38,0,0,1,0,50,255,246, 2,22,1,218,0,11,0,0,1,21,35,21,35,53,35,53, 51,53,51,21,2,22,207,70,207,207,70,1,11,70,207,207, 70,207,207,0,0,1,0,87,255,109,0,192,0,104,0,11, 0,0,55,51,21,20,35,53,54,55,54,61,1,35,87,105, 105,43,10,7,60,104,120,131,38,2,31,19,39,18,0,1, 0,46,0,240,1,28,1,56,0,3,0,0,1,21,35,53, 1,28,238,1,56,72,72,0,0,1,0,87,0,0,0,191, 0,104,0,3,0,0,55,21,35,53,191,104,104,104,104,0, 0,1,255,248,255,236,1,28,2,217,0,3,0,0,19,51, 3,35,229,55,237,55,2,217,253,19,0,2,0,43,255,233, 1,251,2,197,0,17,0,27,0,0,1,50,19,22,21,16, 7,6,35,34,39,38,53,52,55,54,55,50,23,34,17,16, 51,50,55,54,53,16,1,19,218,13,1,138,42,52,176,43, 13,69,54,95,7,7,142,140,118,21,5,2,197,254,183,21, 22,254,241,69,20,216,66,84,195,93,71,7,78,254,223,254, 220,192,46,57,1,30,0,1,0,102,0,0,1,91,2,197, 0,11,0,0,1,35,53,54,55,54,55,54,55,51,17,35, 1,3,157,102,30,30,21,2,2,58,88,1,249,63,13,23, 22,71,6,6,253,59,0,1,0,34,0,0,1,255,2,197, 0,35,0,0,1,50,31,1,22,21,20,15,1,6,7,6, 7,33,21,33,54,55,54,63,1,54,53,52,39,38,35,34, 15,1,6,7,35,54,55,54,1,28,121,64,19,23,150,100, 91,24,9,4,1,117,254,40,7,50,42,100,92,96,60,35, 45,75,40,7,17,4,88,3,35,60,2,197,80,30,44,54, 132,82,54,53,49,20,24,87,128,67,55,57,52,55,85,72, 39,22,57,12,32,68,100,54,92,0,0,1,0,32,255,233, 1,250,2,197,0,49,0,0,5,34,39,38,39,51,22,23, 22,51,50,55,54,53,52,35,7,35,53,54,55,54,53,52, 39,38,35,34,15,1,6,7,35,54,55,54,51,50,23,22, 21,20,7,22,23,22,21,20,7,6,1,10,197,32,3,2, 88,8,105,17,19,104,32,11,147,37,11,113,34,27,70,24, 31,78,35,6,15,1,88,4,186,15,17,140,52,24,99,93, 20,7,94,60,23,184,21,24,132,16,3,79,28,35,129,1, 75,2,31,25,53,85,27,9,53,10,29,60,210,18,1,94, 43,58,108,39,32,76,26,35,123,60,38,0,0,2,0,28, 0,0,2,8,2,197,0,10,0,13,0,0,37,33,53,1, 51,17,51,21,35,21,35,53,17,3,1,71,254,213,1,66, 65,105,105,88,222,170,93,1,190,254,52,79,170,249,1,54, 254,202,0,1,0,35,255,233,2,1,2,197,0,36,0,0, 1,21,33,7,54,51,50,23,22,21,20,7,6,35,34,39, 38,39,38,39,51,22,51,50,55,54,53,52,39,38,35,34, 7,6,7,35,19,1,220,254,217,28,59,72,120,64,45,87, 64,92,112,65,8,7,27,16,88,31,114,101,38,16,76,34, 45,64,45,10,11,81,53,2,197,87,198,43,87,61,88,129, 72,53,67,9,9,33,79,119,81,36,47,109,42,19,43,10, 13,1,130,0,0,2,0,43,255,233,2,1,2,197,0,30, 0,46,0,0,5,34,17,52,55,54,55,54,51,50,23,22, 23,35,38,39,38,35,34,7,6,21,54,51,50,23,22,21, 20,7,6,3,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,1,25,238,64,56,100,17,17,115,55,23,8,88, 18,73,13,15,111,34,13,58,105,111,62,44,82,62,84,85, 40,22,61,36,47,76,40,25,71,29,23,1,90,185,100,84, 15,2,93,40,52,88,16,3,144,54,71,79,83,59,83,119, 68,52,1,130,66,36,47,86,46,27,63,40,51,102,37,15, 0,1,0,46,0,0,2,8,2,197,0,12,0,0,1,21, 2,3,6,7,35,54,55,54,55,33,53,2,8,202,66,12, 8,94,50,93,55,93,254,129,2,197,74,254,244,254,241,47, 49,218,171,101,132,87,0,3,0,37,255,233,2,1,2,197, 0,28,0,44,0,60,0,0,1,22,21,20,7,6,35,34, 39,38,53,52,55,38,39,38,53,52,55,54,51,50,23,22, 21,20,15,1,6,39,34,15,2,20,23,22,51,50,55,54, 53,52,39,38,3,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,135,122,86,63,89,124,67,47,121,72,16, 8,81,55,77,116,59,38,45,32,9,127,80,30,10,3,61, 27,35,80,30,13,65,25,33,89,39,20,66,34,46,91,39, 20,67,35,1,117,58,119,112,61,46,82,58,80,118,58,45, 48,23,31,99,53,37,76,48,65,68,41,26,6,252,58,26, 28,70,28,13,57,24,29,75,27,11,254,215,64,33,42,82, 38,20,65,33,42,82,38,19,0,2,0,38,255,233,1,253, 2,197,0,30,0,48,0,0,1,50,17,20,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,53,6,7, 34,39,38,53,52,55,54,23,34,15,2,6,21,20,23,22, 51,50,55,54,53,52,39,38,1,14,239,65,53,97,20,20, 115,55,23,8,88,18,73,13,15,111,34,13,70,92,112,62, 44,82,62,87,76,40,15,8,2,71,29,38,83,41,23,61, 37,2,197,254,166,185,100,81,17,3,93,40,52,88,16,3, 144,54,71,77,2,83,59,83,119,68,52,77,64,30,35,13, 13,102,37,15,65,36,48,87,46,27,0,2,0,110,0,0, 0,214,2,12,0,3,0,7,0,0,55,21,35,53,19,21, 35,53,214,104,104,104,104,104,104,1,164,104,104,0,0,2, 0,110,255,109,0,215,2,12,0,3,0,15,0,0,19,21, 35,53,3,51,21,20,35,53,54,55,54,61,1,35,215,104, 1,105,105,43,10,7,60,2,12,104,104,254,92,120,131,38, 2,31,19,39,18,0,0,1,0,45,255,247,2,22,1,218, 0,6,0,0,55,53,37,21,13,1,21,45,1,233,254,118, 1,138,198,69,207,79,161,164,79,0,0,2,0,50,0,111, 2,22,1,97,0,3,0,7,0,0,1,21,33,53,5,21, 33,53,2,22,254,28,1,228,254,28,1,97,70,70,172,70, 70,0,0,1,0,50,255,247,2,27,1,218,0,6,0,0, 1,21,5,53,45,1,53,2,27,254,23,1,138,254,118,1, 11,69,207,79,161,164,79,0,0,2,0,77,0,0,1,253, 2,229,0,37,0,41,0,0,37,35,53,52,55,54,55,54, 55,54,55,52,47,1,38,35,34,7,6,21,35,52,55,54, 51,50,31,1,22,21,20,7,6,7,6,7,6,29,2,35, 53,1,74,90,28,17,35,7,17,74,1,61,31,17,19,82, 30,17,85,180,19,20,126,56,16,15,51,19,30,63,10,6, 90,199,55,50,37,22,33,6,15,66,66,70,30,10,4,58, 34,64,211,21,2,83,30,36,43,70,59,23,27,58,27,15, 24,142,104,104,0,2,0,34,255,114,3,183,2,229,0,70, 0,89,0,0,1,51,3,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,34,35,34,15,1,6,21,20,23,22,51, 50,55,23,6,35,34,39,38,39,38,53,52,55,54,55,54, 55,54,51,50,23,22,23,22,21,20,7,6,35,34,39,6, 35,34,39,38,53,52,55,54,55,50,23,39,34,7,6,21, 20,23,22,51,50,55,54,55,54,55,39,38,39,38,2,153, 83,90,12,29,10,11,64,53,51,97,99,141,7,8,147,113, 34,99,105,108,162,79,114,28,112,114,180,131,122,19,3,95, 28,35,108,151,37,37,166,123,116,18,3,86,76,110,96,14, 66,76,82,47,34,79,77,101,84,38,128,66,50,45,47,24, 28,58,44,33,16,4,1,2,11,47,16,1,245,254,232,35, 15,27,13,4,72,71,87,120,89,92,6,102,34,113,142,141, 97,100,32,67,42,107,100,147,23,23,154,130,39,31,98,25, 6,101,94,135,21,21,121,102,89,77,72,69,49,65,109,84, 83,1,87,23,71,63,80,67,34,17,65,48,84,22,17,26, 48,16,6,0,0,2,0,17,0,0,2,141,2,217,0,7, 0,10,0,0,37,33,7,35,1,51,1,35,11,2,1,218, 254,231,77,99,1,4,120,1,0,104,101,112,120,219,219,2, 217,253,39,1,41,1,76,254,180,0,0,3,0,79,0,0, 2,111,2,217,0,18,0,28,0,39,0,0,51,17,33,50, 23,22,21,20,7,22,23,22,23,20,21,20,7,6,35,3, 51,50,55,54,52,39,38,43,1,1,52,39,38,43,1,21, 51,50,55,54,79,1,40,103,55,58,101,105,21,6,1,56, 57,102,236,180,72,34,40,40,34,72,180,1,102,71,26,34, 227,227,65,32,34,2,217,51,52,82,112,47,41,80,20,23, 6,7,88,59,61,1,159,26,31,118,31,26,254,72,87,28, 11,251,35,36,0,1,0,48,255,233,2,165,2,229,0,31, 0,0,1,35,38,39,38,39,34,7,6,21,20,23,22,51, 50,55,54,55,54,55,51,2,33,34,39,38,53,52,55,54, 51,50,2,150,95,15,38,54,90,128,61,40,95,59,83,109, 51,6,4,22,11,96,33,254,245,141,82,106,102,82,149,238, 1,247,75,35,44,2,115,75,112,170,79,49,77,8,9,42, 71,254,223,85,109,185,183,111,91,0,0,2,0,89,0,0, 2,155,2,217,0,11,0,22,0,0,51,17,33,50,31,1, 22,21,20,7,6,35,39,51,50,55,54,53,52,39,38,43, 1,89,1,25,163,79,22,33,116,73,108,188,172,174,37,9, 168,25,27,172,2,217,132,43,81,108,209,95,61,82,181,45, 56,246,32,5,0,1,0,90,0,0,2,101,2,217,0,11, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,183,1, 174,253,245,1,249,254,100,1,141,1,76,250,82,2,217,82, 233,82,0,1,0,90,0,0,2,67,2,217,0,9,0,0, 19,17,35,17,33,21,33,21,33,21,183,93,1,233,254,116, 1,92,1,76,254,180,2,217,82,233,82,0,0,1,0,44, 255,233,2,197,2,229,0,41,0,0,1,17,35,39,6,35, 34,39,38,53,52,55,54,55,54,51,50,23,22,23,35,38, 39,38,35,34,7,6,21,20,23,22,23,22,23,50,55,54, 61,1,35,53,2,197,59,23,104,145,153,94,87,102,14,16, 85,133,179,81,33,12,95,21,95,42,53,132,71,53,61,8, 8,72,112,114,66,49,222,1,129,254,123,97,116,114,104,162, 176,110,15,13,70,118,49,66,98,36,17,104,78,115,126,84, 10,9,72,2,80,60,84,20,82,0,0,1,0,83,0,0, 2,132,2,217,0,11,0,0,1,33,17,35,17,51,17,33, 17,51,17,35,2,39,254,138,94,93,1,119,93,93,1,76, 254,180,2,217,254,197,1,59,253,39,0,1,0,100,0,0, 0,194,2,217,0,3,0,0,19,17,35,17,194,94,2,217, 253,39,2,217,0,1,0,17,255,233,1,170,2,217,0,21, 0,0,1,51,17,20,7,6,35,34,39,38,61,1,51,21, 20,23,22,51,50,55,54,53,1,77,93,90,49,67,124,52, 27,95,81,13,15,58,31,23,2,217,253,221,124,53,28,86, 46,61,64,47,111,18,3,45,34,82,0,1,0,79,0,0, 2,146,2,217,0,11,0,0,19,21,35,17,51,17,1,51, 9,1,35,1,172,93,93,1,107,120,254,215,1,44,110,254, 255,0,255,255,2,217,254,143,1,113,254,215,254,80,1,118, 0,1,0,80,0,0,2,21,2,217,0,5,0,0,19,17, 33,21,33,17,173,1,104,254,59,2,217,253,121,82,2,217, 0,1,0,75,0,0,2,249,2,217,0,12,0,0,33,35, 3,17,35,17,51,27,1,51,17,35,17,1,212,98,207,88, 129,216,212,129,88,2,99,253,157,2,217,253,133,2,123,253, 39,2,99,0,0,1,0,76,0,0,2,134,2,217,0,9, 0,0,1,17,35,1,17,35,17,51,1,17,2,134,105,254, 135,88,101,1,125,2,217,253,39,2,79,253,177,2,217,253, 172,2,84,0,0,2,0,38,255,233,2,230,2,229,0,18, 0,34,0,0,1,50,31,1,22,21,20,7,6,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,1,133,174,97,26,56,82,20,24, 91,135,167,98,87,111,95,145,130,72,56,95,67,97,129,72, 58,98,66,2,229,123,38,96,131,148,105,26,20,77,117,104, 161,184,107,91,82,102,80,118,158,83,59,100,79,117,165,83, 56,0,0,2,0,91,0,0,2,105,2,217,0,12,0,24, 0,0,19,17,35,17,33,50,23,22,21,20,7,6,35,39, 51,50,55,54,53,52,47,1,38,43,1,184,93,1,45,161, 47,17,63,58,83,229,194,102,30,10,79,34,14,15,194,1, 53,254,203,2,217,118,41,55,97,57,52,82,74,24,30,90, 28,8,2,0,0,2,0,38,255,197,2,230,2,229,0,18, 0,37,0,0,5,7,39,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,7,39,23,54,53,52,39,38,35,34, 7,6,21,20,23,22,51,50,55,39,2,221,47,105,86,105, 167,98,87,111,96,145,166,98,88,103,158,89,79,94,68,97, 131,72,56,95,67,96,60,60,74,1,58,87,51,117,104,161, 184,107,91,116,104,160,172,113,129,73,89,139,157,83,59,102, 80,118,159,83,58,28,62,0,0,2,0,93,0,0,2,167, 2,217,0,29,0,40,0,0,19,17,35,17,33,50,23,22, 21,20,7,6,7,22,23,22,23,22,23,22,23,21,35,38, 53,55,52,39,38,35,39,51,50,55,54,53,52,39,38,43, 1,186,93,1,80,170,41,11,72,19,24,62,19,17,1,2, 17,9,16,113,21,1,80,18,22,240,225,121,18,4,38,32, 73,225,1,58,254,198,2,217,120,33,42,98,51,13,12,27, 40,37,86,96,27,13,11,23,48,71,65,109,17,4,82,86, 17,22,66,32,28,0,0,1,0,48,255,233,2,109,2,229, 0,54,0,0,1,35,38,39,38,35,34,15,1,6,21,20, 23,22,31,1,22,23,22,21,20,7,6,7,6,35,34,39, 38,39,51,23,22,23,22,51,50,55,54,55,54,53,52,47, 2,38,53,52,55,54,51,50,23,22,2,84,88,1,109,32, 40,104,41,12,6,54,25,41,183,120,28,7,58,11,11,73, 132,169,76,42,1,88,3,7,28,51,117,89,45,44,7,1, 110,24,181,143,104,64,91,176,63,28,2,3,111,29,8,62, 24,17,20,56,28,13,11,49,33,97,25,28,84,63,11,9, 56,104,57,94,38,41,33,61,31,31,56,7,7,76,35,7, 48,37,133,124,56,34,111,49,0,1,0,21,0,0,2,81, 2,217,0,7,0,0,1,17,35,17,35,53,33,21,1,98, 93,240,2,60,2,135,253,121,2,135,82,82,0,1,0,85, 255,233,2,133,2,217,0,21,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 2,40,93,104,72,105,165,73,41,93,110,34,42,124,45,19, 2,217,254,0,130,65,45,101,58,81,2,0,254,0,117,31, 10,80,34,44,0,1,0,30,0,0,2,133,2,217,0,6, 0,0,33,35,1,51,27,1,51,1,136,100,254,250,100,214, 202,99,2,217,253,151,2,105,0,1,0,22,0,0,3,161, 2,217,0,12,0,0,33,35,11,1,35,3,51,27,1,51, 27,1,51,2,232,102,168,163,102,187,104,137,162,100,166,134, 104,2,87,253,169,2,217,253,176,2,80,253,176,2,80,0, 0,1,0,22,0,0,2,137,2,217,0,11,0,0,9,1, 35,11,1,35,1,3,51,27,1,51,1,135,1,2,115,199, 200,113,1,2,242,113,187,188,111,1,118,254,138,1,48,254, 208,1,118,1,99,254,226,1,30,0,0,1,0,13,0,0, 2,149,2,217,0,8,0,0,1,17,35,17,1,51,27,1, 51,1,131,93,254,231,115,214,208,111,1,30,254,226,1,30, 1,187,254,157,1,99,0,1,0,28,0,0,2,71,2,217, 0,9,0,0,1,21,1,33,21,33,53,1,33,53,2,69, 254,76,1,182,253,213,1,182,254,102,2,217,84,253,205,82, 82,2,53,82,0,1,0,64,255,44,0,250,2,217,0,7, 0,0,19,21,35,17,51,21,35,17,250,103,103,186,2,217, 72,252,227,72,3,173,0,1,255,248,255,236,1,28,2,217, 0,3,0,0,27,1,35,3,47,237,55,237,2,217,253,19, 2,237,0,1,0,23,255,44,0,209,2,217,0,7,0,0, 23,53,51,17,35,53,51,17,23,103,103,186,212,72,3,29, 72,252,83,0,0,1,0,44,1,73,1,169,2,197,0,6, 0,0,19,51,19,35,11,1,35,197,73,155,69,122,121,69, 2,197,254,132,1,44,254,212,0,1,255,234,255,80,2,66, 255,130,0,3,0,0,5,21,33,53,2,66,253,168,126,50, 50,0,0,1,0,22,2,80,0,231,2,228,0,3,0,0, 19,23,35,39,135,96,60,149,2,228,148,148,0,2,0,42, 255,233,2,23,2,27,0,45,0,62,0,0,37,21,6,35, 34,39,38,39,6,7,34,39,38,53,52,55,54,55,54,55, 54,55,54,61,1,52,39,38,35,34,7,6,7,35,54,55, 54,51,50,23,22,21,17,20,51,50,39,53,6,7,6,7, 6,7,6,21,20,23,22,51,50,55,54,2,23,35,22,71, 13,1,1,87,91,110,43,19,92,36,94,16,22,73,11,3, 81,17,19,103,17,2,1,84,3,33,55,119,176,19,2,45, 9,137,32,82,9,11,106,16,4,67,16,20,72,52,32,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,0,0,2,0,54,255,233,2,11,2,217,0,16, 0,32,0,0,19,51,17,54,51,50,23,22,21,20,7,6, 35,34,39,21,35,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,83,57,105,128,59,37,91,57,80,107, 59,75,229,83,39,24,69,33,44,84,42,27,72,37,2,217, 254,236,86,108,68,99,161,77,49,90,67,1,205,84,50,69, 125,52,26,79,51,70,127,53,25,0,0,1,0,31,255,233, 1,221,2,27,0,32,0,0,1,35,38,47,1,34,7,6, 21,20,23,22,51,50,55,51,6,7,6,35,34,39,38,53, 52,55,54,51,50,23,22,23,22,1,215,84,13,84,27,94, 35,16,79,29,39,107,21,84,11,104,43,56,129,62,41,92, 59,82,106,58,4,4,29,1,92,97,15,2,100,46,63,137, 45,17,126,137,46,20,105,70,101,160,77,49,68,5,5,43, 0,2,0,26,255,233,1,239,2,217,0,18,0,36,0,0, 1,17,35,53,6,7,6,35,34,39,38,53,52,55,54,51, 50,23,17,3,34,7,6,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,239,74,58,86,11,12,130,60,38,89, 57,79,108,53,147,85,41,20,5,1,70,36,47,83,39,24, 72,33,2,217,253,39,69,83,8,1,112,71,103,154,75,47, 81,1,15,254,244,82,38,51,16,16,122,54,27,82,50,69, 131,51,23,0,0,2,0,40,255,233,2,1,2,27,0,25, 0,36,0,0,37,33,22,23,22,51,50,55,51,6,7,6, 35,34,39,38,53,52,55,54,51,50,23,22,23,22,5,33, 54,53,52,39,38,35,34,7,6,2,1,254,126,1,27,43, 83,102,35,84,22,104,44,54,136,63,39,94,60,86,115,65, 20,12,21,254,128,1,38,1,59,38,48,85,41,20,234,72, 40,68,105,121,43,18,110,68,100,158,77,49,82,25,31,55, 44,2,4,80,45,29,75,36,0,1,0,18,0,0,1,2, 2,220,0,21,0,0,1,21,35,17,35,17,35,53,51,53, 52,55,54,51,50,23,21,38,35,34,29,1,1,2,87,83, 70,70,74,22,27,23,24,19,10,58,2,12,68,254,56,1, 200,68,89,88,24,7,5,69,1,53,82,0,0,2,0,29, 255,38,1,233,2,27,0,39,0,55,0,0,1,51,17,20, 7,6,7,6,7,6,35,34,39,38,39,51,22,23,22,51, 50,55,54,61,1,6,15,1,34,39,38,39,38,53,52,55, 54,51,50,23,39,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,156,77,41,7,7,48,109,11,11,138,50, 17,4,85,6,26,36,59,81,35,30,59,73,27,83,61,3, 3,66,85,57,81,98,62,151,88,37,20,78,29,39,89,35, 18,82,27,2,12,254,74,154,64,10,9,60,6,1,88,31, 39,39,21,28,49,41,102,27,82,10,2,64,3,3,77,129, 153,79,54,91,14,90,48,66,139,47,18,92,46,63,150,43, 14,0,0,1,0,70,0,0,1,230,2,217,0,23,0,0, 19,51,17,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,83,54,66,21,27,110,39, 16,83,34,32,42,84,37,21,83,2,217,254,235,70,13,4, 74,30,39,254,116,1,107,55,24,24,77,42,58,254,223,0, 0,2,0,66,0,0,0,150,2,217,0,3,0,7,0,0, 19,17,35,17,55,21,35,53,150,83,83,84,2,12,253,244, 2,12,205,105,105,0,0,2,255,238,255,38,0,153,2,217, 0,15,0,19,0,0,19,51,17,20,7,34,35,34,39,53, 22,51,50,55,54,53,19,21,35,53,70,83,128,7,8,13, 15,17,3,52,11,5,83,83,2,12,253,135,103,6,3,71, 1,32,14,23,3,37,105,105,0,1,0,58,0,0,1,246, 2,217,0,11,0,0,19,17,55,51,7,19,35,3,7,21, 35,17,141,222,107,182,214,103,177,81,83,2,217,254,85,222, 181,254,169,1,28,80,204,2,217,0,0,1,0,68,0,0, 0,152,2,217,0,3,0,0,19,17,35,17,152,84,2,217, 253,39,2,217,0,1,0,70,0,0,2,250,2,27,0,42, 0,0,19,51,21,54,55,54,51,50,23,22,23,54,55,54, 51,50,23,22,21,17,35,17,52,39,38,35,34,7,6,21, 17,35,17,52,39,38,35,34,7,6,21,17,35,70,77,54, 74,15,18,89,43,5,4,54,63,20,24,122,25,5,84,63, 16,18,61,37,25,84,71,12,14,62,37,24,84,2,12,74, 76,11,2,65,7,8,65,11,4,98,22,26,254,119,1,105, 81,19,5,54,37,46,254,183,1,105,87,15,3,56,36,45, 254,183,0,1,0,70,0,0,1,231,2,27,0,23,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,77,54,76,20,24,105,42, 19,83,59,21,28,84,37,21,84,2,12,88,85,14,4,70, 32,41,254,116,1,107,70,24,9,77,42,58,254,223,0,2, 0,36,255,233,1,254,2,27,0,15,0,31,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,23,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,16, 152,57,29,102,56,79,144,60,33,105,55,77,93,38,19,78, 31,41,90,39,21,82,30,2,27,129,65,91,167,71,39,119, 67,95,174,70,37,77,92,48,64,137,48,19,88,47,66,145, 46,16,0,2,0,54,255,38,2,11,2,27,0,18,0,34, 0,0,23,17,51,21,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,17,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,77,59,108,127,60,38,89,39,52,21, 23,97,64,146,83,39,24,69,33,44,84,42,26,71,35,218, 2,230,79,94,111,71,104,154,75,33,10,4,78,254,239,2, 167,84,50,69,125,52,26,81,50,69,127,53,26,0,0,2, 0,26,255,38,1,239,2,27,0,16,0,32,0,0,5,35, 17,6,35,34,39,38,53,52,55,54,51,50,23,53,51,7, 34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,1, 239,83,57,105,128,59,37,91,57,80,107,60,74,229,84,42, 27,70,36,47,82,40,24,71,33,218,1,22,83,108,68,99, 161,77,49,85,70,63,81,51,71,122,54,27,81,50,69,131, 51,24,0,1,0,69,0,0,1,65,2,27,0,17,0,0, 19,51,21,54,55,54,51,50,23,21,6,7,6,7,6,21, 17,35,69,77,58,58,13,14,11,21,72,31,3,3,59,84, 2,12,95,93,14,3,3,85,1,21,2,2,43,110,254,240, 0,1,0,34,255,233,1,203,2,27,0,48,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,1,182, 88,3,102,82,23,6,66,14,17,80,118,23,7,90,52,74, 194,14,1,88,6,18,33,71,84,28,10,54,27,78,119,31, 16,84,49,68,145,35,10,1,122,84,49,14,16,45,22,4, 4,19,28,70,21,27,96,44,26,162,8,9,47,20,35,47, 16,19,46,19,8,19,29,51,28,43,93,42,25,101,27,0, 0,1,0,14,255,233,0,254,2,156,0,23,0,0,19,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,254,86,22,9,15,25,15,39,29,89, 11,1,71,71,83,2,12,68,254,153,38,6,3,4,70,7, 67,7,9,1,140,68,144,144,0,1,0,65,255,233,1,226, 2,12,0,23,0,0,33,35,53,6,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,17,51,1,226, 75,56,74,20,25,107,41,19,83,59,22,27,85,38,20,83, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,0,0,1,0,10,0,0,1,230,2,12,0,6, 0,0,33,35,3,51,27,1,51,1,29,91,184,94,140,148, 94,2,12,254,87,1,169,0,0,1,0,6,0,0,2,196, 2,12,0,12,0,0,33,35,11,1,35,3,51,27,1,51, 27,1,51,2,42,95,106,101,94,152,92,107,100,102,103,104, 94,1,155,254,101,2,12,254,104,1,152,254,104,1,152,0, 0,1,0,17,0,0,1,217,2,12,0,11,0,0,1,19, 35,39,7,35,19,3,51,23,55,51,1,36,181,97,131,133, 95,185,175,95,126,126,94,1,15,254,241,201,201,1,11,1, 1,190,190,0,0,1,0,20,255,38,1,222,2,12,0,19, 0,0,1,51,3,6,7,6,35,34,39,53,22,51,50,55, 54,63,1,3,51,19,1,132,90,233,22,35,34,44,31,25, 27,17,45,18,2,2,32,177,89,134,2,12,253,134,57,26, 25,13,75,6,40,5,6,83,2,14,254,104,0,1,0,31, 0,0,1,201,2,12,0,9,0,0,1,21,1,33,21,33, 53,1,33,53,1,187,254,201,1,69,254,86,1,57,254,220, 2,12,74,254,135,73,75,1,120,73,0,1,0,43,255,44, 1,20,2,217,0,41,0,0,1,21,35,34,15,1,29,1, 20,15,1,6,7,22,29,1,20,23,22,59,1,21,35,34, 39,38,61,1,52,39,38,39,53,54,55,54,61,1,52,55, 54,51,1,20,15,47,11,5,41,23,8,10,82,25,13,25, 15,46,82,21,6,35,16,27,54,14,10,71,18,20,2,217, 65,27,26,14,181,98,35,16,4,4,38,120,181,50,11,6, 65,80,23,28,167,93,27,12,6,69,11,44,29,54,167,102, 23,6,0,1,0,100,255,44,0,160,2,217,0,3,0,0, 19,51,17,35,100,60,60,2,217,252,83,0,0,1,0,29, 255,44,1,6,2,217,0,38,0,0,23,53,51,50,55,54, 61,1,52,55,38,61,1,52,39,38,43,1,53,51,50,23, 22,29,1,20,23,22,23,21,6,7,6,29,1,20,7,6, 35,29,16,48,11,5,82,82,26,13,25,16,47,83,21,6, 36,15,25,52,15,9,73,17,20,212,65,27,14,26,181,120, 37,38,120,181,50,11,6,65,81,23,27,167,94,27,12,5, 69,11,46,28,53,167,103,23,5,0,0,1,0,75,1,12, 1,252,1,182,0,27,0,0,1,51,21,20,7,6,35,34, 47,1,38,35,34,7,6,7,35,54,55,54,51,50,31,1, 22,51,50,55,1,199,53,57,21,27,39,42,98,23,20,29, 16,5,3,53,7,84,8,9,27,27,117,28,22,44,6,1, 155,16,85,30,12,26,63,14,35,14,29,131,13,1,16,69, 17,49,255,255,0,0,0,0,0,0,0,0,16,6,0,3, 0,0,0,2,0,121,255,51,0,205,2,12,0,5,0,9, 0,0,23,17,55,51,23,17,3,53,51,21,122,22,39,22, 84,84,205,1,82,223,223,254,174,2,113,104,104,0,0,2, 0,52,255,136,1,254,2,116,0,30,0,37,0,0,1,17, 54,55,51,6,7,6,7,21,35,53,38,39,38,53,52,55, 54,55,53,51,21,22,23,22,23,35,38,39,38,3,17,6, 21,20,23,22,1,56,96,18,84,7,93,43,55,42,129,56, 33,98,51,69,42,136,42,12,2,84,9,69,14,58,131,85, 21,1,206,254,103,11,116,124,52,24,3,97,98,11,112,64, 88,163,76,39,7,90,89,9,109,33,40,85,23,5,254,106, 1,150,24,184,138,45,11,0,0,1,0,26,255,233,2,23, 2,217,0,63,0,0,1,21,35,22,21,20,7,6,7,54, 51,50,23,22,51,50,55,23,6,35,34,39,38,39,38,35, 34,7,39,54,55,54,53,52,39,35,53,51,38,39,38,53, 52,55,54,51,50,23,22,23,22,23,35,38,35,34,7,6, 21,20,31,1,22,23,1,110,136,15,58,23,37,59,63,35, 47,55,24,40,43,42,57,74,44,83,9,10,33,33,53,56, 48,102,18,5,24,110,81,46,5,2,80,66,92,113,62,9, 8,27,1,88,4,132,89,36,16,22,21,4,12,1,120,55, 43,28,55,69,28,37,39,15,16,30,66,56,28,3,4,11, 37,66,88,63,19,21,38,40,55,76,33,12,18,99,63,52, 74,12,13,46,87,154,63,29,36,38,42,39,4,24,0,2, 0,67,0,133,1,233,2,39,0,27,0,44,0,0,37,7, 39,6,35,34,39,7,39,55,38,53,52,55,39,55,23,54, 51,50,23,55,23,7,22,21,20,7,39,34,15,1,6,21, 20,23,22,51,50,55,54,53,52,39,38,1,229,58,53,40, 60,53,41,51,56,48,32,32,54,56,55,44,53,58,40,59, 57,55,26,29,157,57,31,12,6,47,27,33,55,32,19,48, 27,190,54,53,30,25,51,57,49,43,59,57,45,55,53,55, 26,28,53,58,55,41,52,50,47,201,47,24,17,17,55,31, 18,45,27,31,58,31,17,0,0,1,0,11,0,0,2,33, 2,197,0,22,0,0,1,21,35,21,51,21,35,21,35,53, 35,53,51,53,35,53,51,3,51,27,1,51,3,1,239,170, 170,170,88,172,172,172,151,205,85,185,179,85,201,1,98,51, 77,51,175,175,51,77,51,1,99,254,190,1,66,254,157,0, 0,2,0,100,255,44,0,160,2,217,0,3,0,7,0,0, 19,51,17,35,21,51,17,35,100,60,60,60,60,2,217,254, 111,139,254,111,0,2,0,43,255,43,1,250,2,217,0,66, 0,80,0,0,1,35,53,52,39,38,35,34,15,1,6,21, 20,23,22,31,1,22,23,22,21,20,7,22,23,22,21,20, 7,6,35,34,39,38,39,38,53,51,20,23,22,51,50,55, 54,53,52,47,1,38,39,38,53,52,55,54,55,38,53,52, 55,54,51,50,23,22,21,1,23,54,53,52,47,1,6,7, 6,21,20,23,22,1,208,84,55,19,23,54,24,9,2,43, 7,7,146,82,19,8,109,48,4,1,71,50,66,100,52,15, 8,11,85,18,29,55,64,23,9,55,170,84,7,1,79,12, 14,44,68,50,67,99,48,28,254,236,166,73,73,161,62,7, 2,30,13,2,12,26,71,23,8,43,23,9,10,36,31,5, 5,94,53,56,25,33,115,41,55,48,7,8,85,49,34,69, 20,24,33,53,54,24,44,47,18,21,50,38,117,58,81,9, 9,84,51,8,7,51,51,79,49,37,74,43,60,254,189,123, 39,63,61,51,109,40,42,9,10,41,29,12,0,2,0,30, 2,100,1,40,2,203,0,3,0,7,0,0,19,21,35,53, 33,21,35,53,134,104,1,10,104,2,203,103,103,103,103,0, 0,3,255,243,255,234,2,239,2,230,0,32,0,56,0,72, 0,0,19,20,23,22,51,50,55,54,55,51,6,7,6,35, 34,39,38,53,52,55,54,51,50,31,1,35,38,39,38,35, 34,7,6,19,50,23,22,23,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,54,55,54,23,34,7,6,7, 20,23,22,23,50,55,54,53,52,39,38,250,54,31,40,82, 22,1,1,71,16,25,49,87,101,54,39,80,49,68,120,39, 7,71,20,50,12,16,75,32,18,119,151,110,108,12,1,106, 103,153,13,12,145,109,107,14,2,103,102,147,15,15,129,92, 92,1,91,95,124,135,92,91,92,91,1,102,95,48,27,114, 5,5,79,37,70,85,61,85,131,64,40,129,26,77,13,3, 76,41,1,73,103,101,147,15,15,155,110,108,9,1,102,101, 143,18,18,151,110,108,12,1,62,93,93,134,130,94,94,2, 95,93,133,131,94,93,0,3,0,37,1,47,1,77,2,230, 0,3,0,43,0,55,0,0,1,21,33,53,37,21,6,35, 34,39,52,39,6,35,34,39,38,53,52,55,54,55,54,55, 54,61,1,52,39,34,7,6,7,35,54,55,50,51,50,29, 1,20,51,50,39,53,6,7,6,15,1,22,23,50,55,54, 1,64,254,235,1,34,16,16,44,10,1,49,56,74,23,7, 57,32,68,43,5,1,67,47,13,5,3,59,3,115,5,6, 122,23,4,84,14,62,63,8,1,9,48,52,27,12,1,98, 51,51,95,44,6,37,3,3,43,56,18,22,62,25,13,5, 3,19,5,6,13,43,1,28,11,17,103,5,94,179,23,71, 51,6,10,8,32,14,43,4,35,15,0,2,0,98,0,106, 1,199,1,182,0,6,0,13,0,0,55,53,55,21,7,23, 21,55,53,55,21,7,23,21,98,152,106,106,53,152,106,106, 227,89,122,83,83,83,83,121,89,122,83,83,83,83,0,1, 0,40,0,86,2,32,1,119,0,5,0,0,19,33,17,35, 53,33,40,1,248,70,254,78,1,119,254,223,219,0,0,1, 0,46,0,240,1,28,1,56,0,3,0,0,1,21,35,53, 1,28,238,1,56,72,72,0,0,4,255,243,255,234,2,239, 2,230,0,25,0,33,0,57,0,73,0,0,1,21,35,17, 51,50,21,20,15,1,22,23,22,23,22,23,22,23,21,35, 38,53,55,52,47,2,51,54,55,52,47,1,35,55,50,23, 22,23,22,21,20,7,6,7,6,35,34,39,38,39,38,53, 52,55,54,55,54,23,34,7,6,7,20,23,22,23,50,55, 54,53,52,39,38,1,16,70,206,141,32,22,33,7,4,1, 1,13,3,6,79,15,1,46,18,134,129,71,4,52,23,129, 97,151,110,108,12,1,106,103,153,13,12,145,109,107,14,2, 103,102,147,15,15,129,92,92,1,91,95,124,135,92,91,92, 91,1,69,185,1,189,126,51,30,18,21,29,19,43,61,14, 4,4,25,35,42,40,59,8,1,63,9,58,58,7,2,220, 103,101,147,15,15,155,110,108,9,1,102,101,143,18,18,151, 110,108,12,1,62,93,93,134,130,94,94,2,95,93,133,131, 94,93,0,1,0,28,2,119,1,46,2,189,0,3,0,0, 1,21,33,53,1,46,254,238,2,189,70,70,0,2,0,151, 1,127,1,198,2,174,0,15,0,31,0,0,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,1,47,74,45, 32,60,41,52,72,46,32,60,40,52,52,28,15,44,23,26, 55,27,14,44,23,2,174,59,41,51,76,45,31,59,41,52, 74,46,31,57,44,23,27,51,29,15,46,22,27,52,28,14, 0,2,0,50,255,245,2,22,2,111,0,11,0,15,0,0, 1,21,35,21,35,53,35,53,51,53,51,21,19,21,33,53, 2,22,207,70,207,207,70,207,254,28,1,160,70,207,207,70, 207,207,254,155,70,70,0,1,0,19,1,28,1,70,2,197, 0,33,0,0,1,21,33,54,55,54,63,1,54,53,52,39, 38,35,34,7,6,7,35,54,55,50,51,50,31,1,22,21, 20,15,1,6,15,1,1,67,254,208,4,38,26,59,58,59, 43,19,23,51,23,10,3,62,4,134,6,7,87,39,13,7, 96,63,49,16,8,1,86,58,85,42,29,31,31,32,47,45, 21,9,39,17,43,145,7,59,25,20,22,82,47,32,26,34, 20,0,0,1,0,16,1,14,1,66,2,197,0,45,0,0, 19,53,50,55,54,53,52,47,1,34,7,6,21,35,54,51, 50,23,22,21,20,7,22,21,20,7,6,35,34,39,38,53, 51,22,23,22,51,50,55,54,53,52,39,38,39,38,135,85, 17,8,50,26,53,19,9,63,3,141,96,32,11,57,71,71, 36,48,113,29,9,62,4,63,11,13,72,15,3,40,8,10, 15,1,220,51,26,13,22,52,13,3,35,17,37,142,66,24, 30,59,26,24,76,82,34,18,86,25,31,78,9,2,56,11, 14,46,18,4,2,2,0,1,0,92,2,80,1,45,2,228, 0,3,0,0,19,51,7,35,188,113,149,60,2,228,148,0, 0,1,0,65,255,36,2,32,2,12,0,30,0,0,37,21, 6,35,34,39,38,53,6,35,34,39,21,35,17,51,17,20, 23,22,51,50,55,54,53,17,51,17,20,51,50,2,32,33, 24,79,6,1,59,104,54,36,83,83,58,22,27,85,38,20, 83,45,8,49,63,9,73,5,5,83,26,223,2,232,254,141, 70,24,9,78,42,57,1,41,254,76,41,0,0,1,0,48, 255,79,2,10,2,217,0,19,0,0,1,21,35,17,35,17, 35,17,35,17,38,39,38,39,38,53,52,55,54,51,2,10, 57,64,82,64,77,48,73,8,1,77,62,85,2,217,64,252, 182,3,74,252,182,1,180,4,40,61,105,10,10,112,71,57, 0,1,0,87,1,46,0,211,1,171,0,3,0,0,19,21, 35,53,211,124,1,171,125,125,0,1,0,39,255,42,1,31, 0,0,0,29,0,0,59,1,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,39,55,23,22,23,50,55,54,53,38, 39,34,7,39,165,38,23,13,15,70,8,1,66,25,32,44, 63,8,10,21,9,57,32,38,13,3,7,39,15,16,12,56, 2,55,5,7,63,22,8,26,4,4,40,4,28,1,29,7, 9,34,3,8,7,0,0,1,0,61,1,28,0,222,2,197, 0,10,0,0,19,35,53,55,54,55,54,55,51,17,35,160, 99,15,61,18,13,11,43,62,2,68,46,1,6,20,15,41, 254,87,0,3,0,40,1,47,1,68,2,230,0,3,0,19, 0,36,0,0,1,21,33,53,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,15,1,20,21,20,23, 22,51,50,55,54,53,52,39,38,1,58,254,249,131,108,26, 8,79,28,35,101,30,11,84,26,32,59,19,6,55,14,15, 59,19,6,58,12,1,98,51,51,1,132,106,31,37,119,37, 13,95,34,43,126,34,11,52,67,38,7,7,93,22,5,67, 22,29,97,20,4,0,0,2,0,98,0,106,1,195,1,182, 0,6,0,13,0,0,19,21,7,53,55,39,53,5,21,7, 53,55,39,53,252,154,108,108,1,97,154,108,108,1,61,89, 122,83,83,83,83,121,89,122,83,83,83,83,0,4,0,61, 255,236,3,81,2,197,0,10,0,14,0,25,0,28,0,0, 19,35,53,55,54,55,54,55,51,17,35,1,51,1,35,37, 35,53,19,51,17,51,21,35,21,35,61,1,7,160,99,15, 61,18,13,11,43,62,1,227,58,254,60,58,2,17,188,204, 46,67,67,62,129,2,68,46,1,6,20,15,41,254,87,1, 169,253,39,120,59,1,10,254,240,53,100,153,170,170,0,3, 0,61,255,236,3,76,2,197,0,10,0,14,0,49,0,0, 19,35,53,55,54,55,54,55,51,17,35,1,51,1,35,37, 21,33,54,55,54,63,1,54,53,52,39,38,35,34,7,6, 7,35,54,55,50,51,50,31,1,22,21,20,15,1,6,7, 6,7,160,99,15,61,18,13,11,43,62,1,203,58,254,60, 58,2,162,254,208,4,38,26,59,58,59,43,19,23,51,23, 10,3,62,4,134,6,7,87,39,13,7,96,63,49,16,5, 3,2,68,46,1,6,20,15,41,254,87,1,169,253,39,78, 58,85,42,29,31,31,32,47,45,21,9,39,17,43,145,7, 59,25,20,22,82,47,32,26,34,9,11,0,0,4,0,16, 255,236,3,81,2,197,0,45,0,49,0,60,0,63,0,0, 19,53,50,55,54,53,52,47,1,34,7,6,21,35,54,51, 50,23,22,21,20,7,22,21,20,7,6,35,34,39,38,53, 51,22,23,22,51,50,55,54,53,52,39,38,39,38,37,51, 1,35,37,35,53,19,51,17,51,21,35,21,35,61,1,7, 135,85,17,8,50,26,53,19,9,63,3,141,96,32,11,57, 71,71,36,48,113,29,9,62,4,63,11,13,72,15,3,40, 8,10,15,1,211,58,254,60,58,2,7,188,204,46,67,67, 62,129,1,220,51,26,13,22,52,13,3,35,17,37,142,66, 24,30,59,26,24,76,82,34,18,86,25,31,78,9,2,56, 11,14,46,18,4,2,2,233,253,39,120,59,1,10,254,240, 53,100,153,170,170,0,0,2,0,95,255,39,2,16,2,12, 0,35,0,39,0,0,1,51,21,20,7,6,7,6,7,6, 7,20,23,22,51,50,55,54,53,51,20,7,6,35,34,39, 38,53,52,55,54,55,54,55,54,61,2,51,21,1,19,90, 28,18,41,5,13,74,1,61,30,38,82,30,17,85,180,19, 20,129,55,30,49,20,31,63,11,6,90,1,69,55,50,37, 23,36,5,12,66,66,70,30,14,58,34,64,211,21,2,85, 45,62,70,58,22,29,57,26,15,26,142,104,104,0,0,3, 0,17,0,0,2,141,3,171,0,7,0,10,0,14,0,0, 37,33,7,35,1,51,1,35,11,2,19,23,35,39,1,218, 254,231,77,99,1,4,120,1,0,104,101,112,120,88,96,60, 149,219,219,2,217,253,39,1,41,1,76,254,180,2,130,148, 148,0,0,3,0,17,0,0,2,141,3,171,0,7,0,10, 0,14,0,0,37,33,7,35,1,51,1,35,11,2,19,51, 7,35,1,218,254,231,77,99,1,4,120,1,0,104,101,112, 120,154,113,149,60,219,219,2,217,253,39,1,41,1,76,254, 180,2,130,148,0,3,0,17,0,0,2,141,3,172,0,7, 0,10,0,17,0,0,37,33,7,35,1,51,1,35,11,2, 19,51,23,35,39,7,35,1,218,254,231,77,99,1,4,120, 1,0,104,101,112,120,72,95,96,63,81,79,64,219,219,2, 217,253,39,1,41,1,76,254,180,2,131,150,96,96,0,3, 0,17,0,0,2,141,3,148,0,7,0,10,0,32,0,0, 37,33,7,35,1,51,1,35,11,2,19,51,6,35,34,39, 38,35,34,7,35,54,55,54,51,50,23,22,23,22,51,50, 1,218,254,231,77,99,1,4,120,1,0,104,101,112,120,218, 58,15,74,21,64,35,14,23,10,58,16,59,5,6,23,42, 2,3,39,24,25,219,219,2,217,253,39,1,41,1,76,254, 180,2,107,104,25,13,37,93,9,1,17,1,1,18,0,4, 0,17,0,0,2,141,3,146,0,7,0,10,0,14,0,18, 0,0,37,33,7,35,1,51,1,35,11,2,19,21,35,53, 33,21,35,53,1,218,254,231,77,99,1,4,120,1,0,104, 101,112,120,90,104,1,10,104,219,219,2,217,253,39,1,41, 1,76,254,180,2,105,103,103,103,103,0,4,0,17,0,0, 2,141,3,185,0,7,0,10,0,27,0,43,0,0,37,33, 7,35,1,51,1,35,11,2,19,50,31,1,22,21,20,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,1,218,254,231,77,99,1, 4,120,1,0,104,101,112,120,119,50,26,9,3,43,21,24, 48,27,13,42,21,25,29,12,3,27,8,9,29,12,3,28, 8,219,219,2,217,253,39,1,41,1,76,254,180,2,144,43, 23,11,11,49,26,12,42,21,25,47,27,13,44,27,8,8, 29,11,4,27,8,8,31,10,3,0,0,2,0,11,0,0, 3,182,2,217,0,15,0,19,0,0,37,33,7,35,1,33, 21,33,21,33,21,33,21,33,21,33,25,1,35,3,1,212, 254,243,85,103,1,43,2,110,254,141,1,96,254,160,1,133, 254,30,100,138,214,214,2,217,82,233,82,250,82,1,40,1, 95,254,161,0,0,1,0,48,255,42,2,165,2,229,0,66, 0,0,5,7,54,51,50,23,22,21,20,7,6,35,34,39, 38,39,55,23,22,51,50,55,54,53,38,39,34,7,39,55, 38,39,38,39,38,39,38,53,52,55,54,55,54,51,50,23, 35,38,39,38,39,34,7,6,21,20,23,22,51,50,55,54, 55,54,55,51,2,1,123,13,13,15,70,8,1,66,25,32, 46,68,5,6,21,9,57,32,38,13,3,7,39,15,16,11, 31,85,45,9,10,109,27,8,97,3,2,82,149,238,43,95, 15,38,55,88,129,61,40,96,59,82,109,51,6,4,22,11, 96,33,23,33,2,55,5,7,63,22,8,29,2,3,40,4, 29,29,7,9,34,3,8,7,69,12,27,6,7,78,159,43, 47,178,111,2,3,91,238,75,35,43,3,115,75,112,172,79, 48,77,8,9,43,71,254,223,0,2,0,90,0,0,2,101, 3,171,0,11,0,15,0,0,19,21,33,21,33,17,33,21, 33,21,33,21,1,23,35,39,183,1,174,253,245,1,249,254, 100,1,141,254,252,96,60,149,1,76,250,82,2,217,82,233, 82,2,95,148,148,0,0,2,0,90,0,0,2,101,3,171, 0,11,0,15,0,0,19,21,33,21,33,17,33,21,33,21, 33,21,3,51,7,35,183,1,174,253,245,1,249,254,100,1, 141,214,113,149,60,1,76,250,82,2,217,82,233,82,2,95, 148,0,0,2,0,90,0,0,2,101,3,172,0,11,0,18, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,1,51, 23,35,39,7,35,183,1,174,253,245,1,249,254,100,1,141, 254,229,95,96,63,81,79,64,1,76,250,82,2,217,82,233, 82,2,96,150,96,96,0,3,0,90,0,0,2,101,3,146, 0,11,0,15,0,19,0,0,19,21,33,21,33,17,33,21, 33,21,33,21,1,21,35,53,33,21,35,53,183,1,174,253, 245,1,249,254,100,1,141,254,247,104,1,10,104,1,76,250, 82,2,217,82,233,82,2,70,103,103,103,103,0,2,0,1, 0,0,0,210,3,171,0,3,0,7,0,0,19,17,35,17, 55,23,35,39,193,93,14,96,60,149,2,217,253,39,2,217, 210,148,148,0,0,2,0,71,0,0,1,24,3,171,0,3, 0,7,0,0,19,17,35,17,55,51,7,35,193,93,67,113, 149,60,2,217,253,39,2,217,210,148,0,2,255,255,0,0, 1,30,3,172,0,3,0,10,0,0,19,17,35,17,39,51, 23,35,39,7,35,193,93,5,95,96,63,81,79,64,2,217, 253,39,2,217,211,150,96,96,0,3,0,9,0,0,1,19, 3,139,0,3,0,7,0,11,0,0,19,17,35,17,55,21, 35,53,33,21,35,53,193,93,13,104,1,10,104,2,217,253, 39,2,217,178,103,103,103,103,0,2,0,20,0,0,2,155, 2,217,0,15,0,30,0,0,19,35,53,51,17,33,50,31, 1,22,21,20,7,6,35,33,19,17,51,50,55,54,53,52, 39,38,43,1,21,51,21,89,69,69,1,26,163,78,22,33, 117,73,106,254,230,93,173,178,34,7,161,27,31,173,171,1, 83,67,1,67,132,43,81,108,211,95,59,1,83,254,255,191, 42,50,239,37,6,241,67,0,0,2,0,76,0,0,2,134, 3,148,0,9,0,31,0,0,1,17,35,1,17,35,17,51, 1,17,39,51,6,35,34,39,38,35,34,7,35,54,55,54, 51,50,23,22,23,22,51,50,2,134,105,254,135,88,101,1, 125,91,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,217,253,39,2,79,253,177,2, 217,253,172,2,84,187,104,25,13,37,93,9,1,17,1,1, 18,0,0,3,0,38,255,233,2,230,3,171,0,18,0,34, 0,38,0,0,1,50,31,1,22,21,20,7,6,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,3,23,35,39,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,145,130,72,56,95, 67,97,129,72,58,98,66,126,96,60,149,2,229,123,38,96, 131,148,105,26,20,77,117,104,161,184,107,91,82,102,80,118, 158,83,59,100,79,117,165,83,56,1,24,148,148,0,0,3, 0,38,255,233,2,230,3,171,0,18,0,34,0,38,0,0, 1,50,31,1,22,21,20,7,6,7,6,35,34,39,38,53, 52,55,54,23,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,3,51,7,35,1,133,174,97,26,56,82,20,24, 91,135,167,98,87,111,95,145,130,72,56,95,67,97,129,72, 58,98,66,67,113,149,60,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,24,148,0,3,0,38,255,233,2,230, 3,172,0,18,0,34,0,41,0,0,1,50,31,1,22,21, 20,7,6,7,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,3,51,23, 35,39,7,35,1,133,174,97,26,56,82,20,24,91,135,167, 98,87,111,95,145,130,72,56,95,67,97,129,72,58,98,66, 142,95,96,63,81,79,64,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,25,150,96,96,0,3,0,38,255,233, 2,230,3,148,0,18,0,34,0,56,0,0,1,50,31,1, 22,21,20,7,6,7,6,35,34,39,38,53,52,55,54,23, 34,7,6,21,20,23,22,51,50,55,54,53,52,39,38,19, 51,6,35,34,39,38,35,34,7,35,54,55,54,51,50,23, 22,23,22,51,50,1,133,174,97,26,56,82,20,24,91,135, 167,98,87,111,95,145,130,72,56,95,67,97,129,72,58,98, 66,7,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,229,123,38,96,131,148,105,26, 20,77,117,104,161,184,107,91,82,102,80,118,158,83,59,100, 79,117,165,83,56,1,1,104,25,13,37,93,9,1,17,1, 1,18,0,4,0,38,255,233,2,230,3,146,0,18,0,34, 0,38,0,42,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,3,21,35,53,33,21,35, 53,1,133,174,97,26,56,82,20,24,91,135,167,98,87,111, 95,145,130,72,56,95,67,97,129,72,58,98,66,124,104,1, 10,104,2,229,123,38,96,131,148,105,26,20,77,117,104,161, 184,107,91,82,102,80,118,158,83,59,100,79,117,165,83,56, 0,255,103,103,103,103,0,1,0,95,0,34,1,232,1,171, 0,11,0,0,1,23,7,23,7,39,7,39,55,39,55,23, 1,182,49,146,147,50,147,146,50,147,146,49,146,1,171,50, 146,147,50,147,146,49,147,146,49,145,0,3,0,30,255,233, 2,232,2,243,0,21,0,30,0,39,0,0,63,1,38,53, 52,55,54,51,50,23,55,23,7,22,21,20,7,6,35,34, 39,7,55,1,38,35,34,7,6,21,20,9,1,22,51,50, 55,54,53,52,30,81,76,112,95,145,137,93,87,40,89,84, 112,95,145,144,97,77,105,1,128,73,98,132,72,55,1,209, 254,125,74,107,132,72,55,19,89,106,146,184,106,91,81,95, 36,97,106,158,184,106,91,90,84,193,1,163,64,103,79,117, 104,1,42,254,91,74,103,79,117,114,0,2,0,85,255,233, 2,133,3,171,0,21,0,25,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 3,23,35,39,2,40,93,104,72,105,165,73,41,93,110,34, 42,124,45,19,218,96,60,149,2,217,254,0,130,65,45,101, 58,81,2,0,254,0,117,31,10,80,34,44,2,210,148,148, 0,2,0,85,255,233,2,133,3,171,0,21,0,25,0,0, 1,51,17,20,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,3,51,7,35,2,40,93,104,72,105, 165,73,41,93,110,34,42,124,45,19,165,113,149,60,2,217, 254,0,130,65,45,101,58,81,2,0,254,0,117,31,10,80, 34,44,2,210,148,0,0,2,0,85,255,233,2,133,3,172, 0,21,0,28,0,0,1,51,17,20,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,3,51,23,35, 39,7,35,2,40,93,104,72,105,165,73,41,93,110,34,42, 124,45,19,234,95,96,63,81,79,64,2,217,254,0,130,65, 45,101,58,81,2,0,254,0,117,31,10,80,34,44,2,211, 150,96,96,0,0,3,0,85,255,233,2,133,3,146,0,21, 0,25,0,29,0,0,1,51,17,20,7,6,35,34,39,38, 53,17,51,17,20,23,22,51,50,55,54,53,3,21,35,53, 33,21,35,53,2,40,93,104,72,105,165,73,41,93,110,34, 42,124,45,19,216,104,1,10,104,2,217,254,0,130,65,45, 101,58,81,2,0,254,0,117,31,10,80,34,44,2,185,103, 103,103,103,0,0,2,0,13,0,0,2,149,3,171,0,8, 0,12,0,0,1,17,35,17,1,51,27,1,51,37,51,7, 35,1,131,93,254,231,115,214,208,111,254,216,113,149,60,1, 30,254,226,1,30,1,187,254,157,1,99,210,148,0,0,2, 0,91,0,0,2,104,2,217,0,14,0,25,0,0,55,21, 35,17,51,21,51,50,23,22,21,20,7,6,35,39,51,50, 55,54,53,52,39,38,43,1,184,93,93,208,139,56,29,78, 53,72,229,194,100,29,9,78,26,34,194,189,189,2,217,120, 95,49,68,110,58,40,82,75,24,29,91,27,10,0,0,1, 0,67,255,241,2,59,2,216,0,49,0,0,1,54,55,52, 47,1,38,35,34,15,1,20,21,17,35,17,52,55,54,51, 50,23,22,21,20,7,34,7,22,23,22,21,20,7,6,35, 34,39,53,22,51,50,55,52,53,52,39,34,43,1,1,38, 148,7,75,38,18,21,115,21,6,88,93,56,82,147,61,31, 79,1,2,64,34,18,142,49,61,20,33,22,22,164,6,152, 9,9,16,1,171,9,104,74,26,9,3,86,40,8,8,254, 2,2,20,113,52,31,83,41,56,95,51,2,17,74,39,36, 180,52,17,7,75,3,140,5,5,133,7,0,0,3,0,42, 255,233,2,23,2,228,0,45,0,62,0,66,0,0,37,21, 6,35,34,39,38,39,6,7,34,39,38,53,52,55,54,55, 54,55,54,55,54,61,1,52,39,38,35,34,7,6,7,35, 54,55,54,51,50,23,22,21,17,20,51,50,39,53,6,7, 6,7,6,7,6,21,20,23,22,51,50,55,54,3,23,35, 39,2,23,35,22,71,13,1,1,87,91,110,43,19,92,36, 94,16,22,73,11,3,81,17,19,103,17,2,1,84,3,33, 55,119,176,19,2,45,9,137,32,82,9,11,106,16,4,67, 16,20,72,52,32,138,96,60,149,49,63,9,63,7,7,76, 1,75,35,45,102,38,15,12,2,3,9,29,8,12,22,64, 12,2,75,9,9,72,37,61,116,13,14,254,204,41,118,94, 15,11,1,2,15,54,12,15,65,15,4,47,29,2,102,148, 148,0,0,3,0,42,255,233,2,23,2,228,0,45,0,62, 0,66,0,0,37,21,6,35,34,39,38,39,6,7,34,39, 38,53,52,55,54,55,54,55,54,55,54,61,1,52,39,38, 35,34,7,6,7,35,54,55,54,51,50,23,22,21,17,20, 51,50,39,53,6,7,6,7,6,7,6,21,20,23,22,51, 50,55,54,3,51,7,35,2,23,35,22,71,13,1,1,87, 91,110,43,19,92,36,94,16,22,73,11,3,81,17,19,103, 17,2,1,84,3,33,55,119,176,19,2,45,9,137,32,82, 9,11,106,16,4,67,16,20,72,52,32,85,113,149,60,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,2,102,148,0,3,0,42,255,233,2,23,2,229, 0,45,0,62,0,69,0,0,37,21,6,35,34,39,38,39, 6,7,34,39,38,53,52,55,54,55,54,55,54,55,54,61, 1,52,39,38,35,34,7,6,7,35,54,55,54,51,50,23, 22,21,17,20,51,50,39,53,6,7,6,7,6,7,6,21, 20,23,22,51,50,55,54,3,51,23,35,39,7,35,2,23, 35,22,71,13,1,1,87,91,110,43,19,92,36,94,16,22, 73,11,3,81,17,19,103,17,2,1,84,3,33,55,119,176, 19,2,45,9,137,32,82,9,11,106,16,4,67,16,20,72, 52,32,160,95,96,63,81,79,64,49,63,9,63,7,7,76, 1,75,35,45,102,38,15,12,2,3,9,29,8,12,22,64, 12,2,75,9,9,72,37,61,116,13,14,254,204,41,118,94, 15,11,1,2,15,54,12,15,65,15,4,47,29,2,103,150, 96,96,0,3,0,42,255,233,2,23,2,205,0,45,0,62, 0,84,0,0,37,21,6,35,34,39,38,39,6,7,34,39, 38,53,52,55,54,55,54,55,54,55,54,61,1,52,39,38, 35,34,7,6,7,35,54,55,54,51,50,23,22,21,17,20, 51,50,39,53,6,7,6,7,6,7,6,21,20,23,22,51, 50,55,54,3,51,6,35,34,39,38,35,34,7,35,54,55, 54,51,50,23,22,23,22,51,50,2,23,35,22,71,13,1, 1,87,91,110,43,19,92,36,94,16,22,73,11,3,81,17, 19,103,17,2,1,84,3,33,55,119,176,19,2,45,9,137, 32,82,9,11,106,16,4,67,16,20,72,52,32,14,58,15, 74,21,64,35,14,23,10,58,16,59,5,6,23,42,2,3, 39,24,25,49,63,9,63,7,7,76,1,75,35,45,102,38, 15,12,2,3,9,29,8,12,22,64,12,2,75,9,9,72, 37,61,116,13,14,254,204,41,118,94,15,11,1,2,15,54, 12,15,65,15,4,47,29,2,79,104,25,13,37,93,9,1, 17,1,1,18,0,4,0,42,255,233,2,23,2,203,0,45, 0,62,0,66,0,70,0,0,37,21,6,35,34,39,38,39, 6,7,34,39,38,53,52,55,54,55,54,55,54,55,54,61, 1,52,39,38,35,34,7,6,7,35,54,55,54,51,50,23, 22,21,17,20,51,50,39,53,6,7,6,7,6,7,6,21, 20,23,22,51,50,55,54,3,21,35,53,33,21,35,53,2, 23,35,22,71,13,1,1,87,91,110,43,19,92,36,94,16, 22,73,11,3,81,17,19,103,17,2,1,84,3,33,55,119, 176,19,2,45,9,137,32,82,9,11,106,16,4,67,16,20, 72,52,32,144,104,1,10,104,49,63,9,63,7,7,76,1, 75,35,45,102,38,15,12,2,3,9,29,8,12,22,64,12, 2,75,9,9,72,37,61,116,13,14,254,204,41,118,94,15, 11,1,2,15,54,12,15,65,15,4,47,29,2,77,103,103, 103,103,0,4,0,42,255,233,2,23,2,242,0,45,0,62, 0,79,0,95,0,0,37,21,6,35,34,39,38,39,6,7, 34,39,38,53,52,55,54,55,54,55,54,55,54,61,1,52, 39,38,35,34,7,6,7,35,54,55,54,51,50,23,22,21, 17,20,51,50,39,53,6,7,6,7,6,7,6,21,20,23, 22,51,50,55,54,3,50,31,1,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,2,23,35,22,71,13,1,1,87,91, 110,43,19,92,36,94,16,22,73,11,3,81,17,19,103,17, 2,1,84,3,33,55,119,176,19,2,45,9,137,32,82,9, 11,106,16,4,67,16,20,72,52,32,113,50,26,9,3,43, 21,24,48,27,13,42,21,25,29,12,3,27,8,9,29,12, 3,28,8,49,63,9,63,7,7,76,1,75,35,45,102,38, 15,12,2,3,9,29,8,12,22,64,12,2,75,9,9,72, 37,61,116,13,14,254,204,41,118,94,15,11,1,2,15,54, 12,15,65,15,4,47,29,2,116,43,23,11,11,49,26,12, 42,21,25,47,27,13,44,27,8,8,29,12,3,27,8,8, 31,10,3,0,0,3,0,34,255,233,3,77,2,27,0,59, 0,76,0,85,0,0,37,51,6,7,6,7,34,39,38,39, 38,39,6,7,6,35,34,39,38,53,52,55,54,55,54,55, 54,61,1,52,35,34,7,6,7,35,54,55,54,51,50,23, 54,55,54,51,50,23,22,23,22,23,22,21,33,22,23,22, 51,50,37,53,6,7,34,7,6,7,6,21,20,23,22,51, 50,55,54,55,33,52,39,38,35,34,7,6,2,239,84,22, 100,51,50,107,59,6,6,4,12,93,91,16,16,103,43,22, 100,54,106,70,12,5,118,103,16,2,1,84,3,33,55,117, 128,47,49,94,15,15,111,66,15,10,5,4,21,254,126,1, 27,43,83,101,254,179,33,91,5,5,103,18,5,60,18,22, 61,50,49,80,1,38,65,34,45,85,41,20,159,118,44,18, 2,67,8,8,6,21,97,11,2,72,36,47,105,37,20,9, 6,26,10,17,22,78,77,7,9,72,37,61,82,69,11,2, 80,18,21,9,10,55,112,72,40,68,103,101,14,14,1,15, 48,14,18,61,18,5,38,38,176,93,44,23,75,36,0,1, 0,31,255,42,1,221,2,27,0,63,0,0,5,7,54,51, 50,23,22,21,20,7,6,35,34,39,38,39,55,23,22,51, 50,55,54,53,38,39,34,7,39,55,38,39,38,39,38,53, 52,55,54,51,50,23,22,23,22,23,35,38,47,1,34,7, 6,21,20,23,22,51,50,55,51,6,7,6,1,8,13,14, 14,67,10,2,66,25,32,44,60,9,12,21,9,55,34,38, 13,3,7,39,15,16,12,31,57,36,90,10,1,92,59,82, 106,58,4,4,29,6,84,13,84,27,94,35,16,79,29,39, 107,21,84,7,91,50,23,33,2,50,8,9,63,22,8,24, 4,5,41,4,29,29,7,9,34,3,8,7,71,11,26,64, 142,15,16,160,77,49,68,5,5,43,70,97,15,2,100,46, 64,137,45,17,127,122,53,28,0,3,0,40,255,233,2,1, 2,228,0,25,0,36,0,40,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 23,35,39,2,1,254,126,1,27,43,83,102,35,84,22,104, 44,54,136,63,39,94,60,86,115,65,20,12,21,254,128,1, 38,1,59,38,48,85,41,20,119,96,60,149,234,72,40,68, 105,121,43,18,110,68,100,158,77,49,82,25,31,55,44,2, 4,80,45,29,75,36,1,133,148,148,0,3,0,40,255,233, 2,1,2,228,0,25,0,36,0,40,0,0,37,33,22,23, 22,51,50,55,51,6,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,23,22,5,33,54,53,52,39,38,35,34,7, 6,19,51,7,35,2,1,254,126,1,27,43,83,102,35,84, 22,104,44,54,136,63,39,94,60,86,115,65,20,12,21,254, 128,1,38,1,59,38,48,85,41,20,175,113,149,60,234,72, 40,68,105,121,43,18,110,68,100,158,77,49,82,25,31,55, 44,2,4,80,45,29,75,36,1,133,148,0,0,3,0,40, 255,233,2,1,2,229,0,25,0,36,0,43,0,0,37,33, 22,23,22,51,50,55,51,6,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,22,5,33,54,53,52,39,38,35, 34,7,6,19,51,23,35,39,7,35,2,1,254,126,1,27, 43,83,102,35,84,22,104,44,54,136,63,39,94,60,86,115, 65,20,12,21,254,128,1,38,1,59,38,48,85,41,20,106, 95,96,63,81,79,64,234,72,40,68,105,121,43,18,110,68, 100,158,77,49,82,25,31,55,44,2,4,80,45,29,75,36, 1,134,150,96,96,0,0,4,0,40,255,233,2,1,2,203, 0,25,0,36,0,40,0,44,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 21,35,53,33,21,35,53,2,1,254,126,1,27,43,83,102, 35,84,22,104,44,54,136,63,39,94,60,86,115,65,20,12, 21,254,128,1,38,1,59,38,48,85,41,20,124,104,1,10, 104,234,72,40,68,105,121,43,18,110,68,100,158,77,49,82, 25,31,55,44,2,4,80,45,29,75,36,1,108,103,103,103, 103,0,0,2,255,251,0,0,0,204,2,228,0,3,0,7, 0,0,19,17,35,17,55,23,35,39,177,83,14,96,60,149, 2,12,253,244,2,12,216,148,148,0,0,2,0,65,0,0, 1,18,2,228,0,3,0,7,0,0,19,17,35,17,55,51, 7,35,177,83,67,113,149,60,2,12,253,244,2,12,216,148, 0,2,255,249,0,0,1,24,2,229,0,3,0,10,0,0, 19,17,35,17,39,51,23,35,39,7,35,177,83,5,95,96, 63,81,79,64,2,12,253,244,2,12,217,150,96,96,0,3, 0,3,0,0,1,13,2,196,0,3,0,7,0,11,0,0, 19,17,35,17,55,21,35,53,33,21,35,53,177,83,13,104, 1,10,104,2,12,253,244,2,12,184,103,103,103,103,0,2, 0,36,255,233,1,254,2,231,0,33,0,49,0,0,19,7, 39,55,38,39,55,22,23,55,23,7,22,31,1,22,23,20, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 219,97,36,85,30,52,44,37,74,97,40,90,89,47,11,67, 5,121,50,66,155,56,26,104,52,62,24,39,39,5,93,38, 19,77,32,41,90,39,21,82,30,2,101,45,39,40,23,29, 44,16,47,45,37,41,68,65,17,102,113,11,12,193,63,26, 132,62,87,178,66,35,13,40,102,92,48,64,135,49,20,88, 47,66,145,46,16,0,0,2,0,70,0,0,1,231,2,205, 0,23,0,45,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,1,51, 6,35,34,39,38,35,34,7,35,54,55,54,51,50,23,22, 23,22,51,50,70,77,54,76,20,24,105,42,19,83,59,21, 28,84,37,21,84,1,52,58,15,74,21,64,35,14,23,10, 58,16,59,5,6,23,42,2,3,39,24,25,2,12,88,85, 14,4,70,32,41,254,116,1,107,70,24,9,77,42,58,254, 223,2,205,104,25,13,37,93,9,1,17,1,1,18,0,3, 0,36,255,233,1,254,2,228,0,15,0,31,0,35,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 3,23,35,39,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,66,96,60, 149,2,27,129,65,91,167,71,39,119,67,95,174,70,37,77, 92,48,64,137,48,19,88,47,66,145,46,16,1,22,148,148, 0,3,0,36,255,233,1,254,2,228,0,15,0,31,0,35, 0,0,1,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,51,7,35,1,16,152,57,29,102,56,79,144,60, 33,105,55,77,93,38,19,78,31,41,90,39,21,82,30,13, 113,149,60,2,27,129,65,91,167,71,39,119,67,95,174,70, 37,77,92,48,64,137,48,19,88,47,66,145,46,16,1,22, 148,0,0,3,0,36,255,233,1,254,2,229,0,15,0,31, 0,38,0,0,1,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,23,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,3,51,23,35,39,7,35,1,16,152,57,29, 102,56,79,144,60,33,105,55,77,93,38,19,78,31,41,90, 39,21,82,30,85,95,96,63,81,79,64,2,27,129,65,91, 167,71,39,119,67,95,174,70,37,77,92,48,64,137,48,19, 88,47,66,145,46,16,1,23,150,96,96,0,0,3,0,36, 255,233,1,254,2,205,0,15,0,31,0,53,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,23,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,51, 6,35,34,39,38,35,34,7,35,54,55,54,51,50,23,22, 23,22,51,50,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,64,58,15, 74,21,64,35,14,23,10,58,16,59,5,6,23,42,2,3, 39,24,25,2,27,129,65,91,167,71,39,119,67,95,174,70, 37,77,92,48,64,137,48,19,88,47,66,145,46,16,0,255, 104,25,13,37,93,9,1,17,1,1,18,0,0,4,0,36, 255,233,1,254,2,203,0,15,0,31,0,35,0,39,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 39,21,35,53,33,21,35,53,1,16,152,57,29,102,56,79, 144,60,33,105,55,77,93,38,19,78,31,41,90,39,21,82, 30,67,104,1,10,104,2,27,129,65,91,167,71,39,119,67, 95,174,70,37,77,92,48,64,137,48,19,88,47,66,145,46, 16,253,103,103,103,103,0,3,0,50,0,0,2,22,1,216, 0,3,0,7,0,11,0,0,1,21,33,53,5,21,35,53, 19,21,35,53,2,22,254,28,1,38,104,104,104,1,15,70, 70,167,104,104,1,112,104,104,0,3,0,18,255,226,2,17, 2,27,0,21,0,30,0,39,0,0,1,7,22,21,20,7, 6,35,34,39,7,39,55,38,53,52,55,54,51,50,23,55, 7,3,22,51,50,55,54,53,52,5,19,38,35,34,7,6, 21,20,2,17,63,44,106,55,75,103,60,61,32,66,48,106, 55,76,101,65,58,92,238,43,63,93,38,19,254,233,239,41, 69,93,38,19,1,255,71,73,109,176,70,35,62,69,28,74, 71,115,175,70,36,65,65,168,254,243,48,92,48,64,66,183, 1,13,52,92,48,64,68,0,0,2,0,65,255,233,1,226, 2,228,0,23,0,27,0,0,33,35,53,6,7,6,35,34, 39,38,53,17,51,17,20,23,22,51,50,55,54,53,17,51, 39,23,35,39,1,226,75,56,74,20,25,107,41,19,83,59, 22,27,85,38,20,83,239,96,60,149,73,79,13,4,70,32, 41,1,148,254,141,70,24,9,78,42,57,1,41,216,148,148, 0,2,0,65,255,233,1,226,2,228,0,23,0,27,0,0, 33,35,53,6,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,17,51,39,51,7,35,1,226,75,56, 74,20,25,107,41,19,83,59,22,27,85,38,20,83,186,113, 149,60,73,79,13,4,70,32,41,1,148,254,141,70,24,9, 78,42,57,1,41,216,148,0,0,2,0,65,255,233,1,226, 2,229,0,23,0,30,0,0,33,35,53,6,7,6,35,34, 39,38,53,17,51,17,20,23,22,51,50,55,54,53,17,51, 39,51,23,35,39,7,35,1,226,75,56,74,20,25,107,41, 19,83,59,22,27,85,38,20,83,255,95,96,63,81,79,64, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,217,150,96,96,0,0,3,0,65,255,233,1,226, 2,203,0,23,0,27,0,31,0,0,33,35,53,6,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 17,51,39,21,35,53,33,21,35,53,1,226,75,56,74,20, 25,107,41,19,83,59,22,27,85,38,20,83,237,104,1,10, 104,73,79,13,4,70,32,41,1,148,254,141,70,24,9,78, 42,57,1,41,191,103,103,103,103,0,0,2,0,20,255,38, 1,222,2,228,0,19,0,23,0,0,1,51,3,6,7,6, 35,34,39,53,22,51,50,55,54,63,1,3,51,27,1,51, 7,35,1,132,90,233,22,35,34,44,31,25,27,17,45,18, 2,2,32,177,89,134,28,113,149,60,2,12,253,134,57,26, 25,13,75,6,40,5,6,83,2,14,254,104,2,112,148,0, 0,2,0,54,255,38,2,10,2,202,0,18,0,34,0,0, 23,17,51,21,54,55,50,23,22,21,20,7,6,7,6,35, 34,39,17,19,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,54,83,60,101,120,61,43,89,39,52,21,23,97, 64,146,83,39,24,69,33,44,84,42,26,71,35,218,3,164, 255,78,2,105,73,108,154,75,33,10,4,78,254,239,2,167, 84,50,69,125,52,26,81,50,69,127,53,26,0,3,0,20, 255,38,1,222,2,203,0,19,0,23,0,27,0,0,1,51, 3,6,7,6,35,34,39,53,22,51,50,55,54,63,1,3, 51,19,3,21,35,53,33,21,35,53,1,132,90,233,22,35, 34,44,31,25,27,17,45,18,2,2,32,177,89,134,26,104, 1,10,104,2,12,253,134,57,26,25,13,75,6,40,5,6, 83,2,14,254,104,2,87,103,103,103,103,0,0,3,0,17, 0,0,2,141,3,132,0,7,0,10,0,14,0,0,37,33, 7,35,1,51,1,35,11,2,1,21,33,53,1,218,254,231, 77,99,1,4,120,1,0,104,101,112,120,1,0,254,238,219, 219,2,217,253,39,1,41,1,76,254,180,2,91,70,70,0, 0,3,0,42,255,233,2,23,2,189,0,45,0,62,0,66, 0,0,37,21,6,35,34,39,38,39,6,7,34,39,38,53, 52,55,54,55,54,55,54,55,54,61,1,52,39,38,35,34, 7,6,7,35,54,55,54,51,50,23,22,21,17,20,51,50, 39,53,6,7,6,7,6,7,6,21,20,23,22,51,50,55, 54,19,21,33,53,2,23,35,22,71,13,1,1,87,91,110, 43,19,92,36,94,16,22,73,11,3,81,17,19,103,17,2, 1,84,3,33,55,119,176,19,2,45,9,137,32,82,9,11, 106,16,4,67,16,20,72,52,32,23,254,238,49,63,9,63, 7,7,76,1,75,35,45,102,38,15,12,2,3,9,29,8, 12,22,64,12,2,75,9,9,72,37,61,116,13,14,254,204, 41,118,94,15,11,1,2,15,54,12,15,65,15,4,47,29, 2,63,70,70,0,3,0,17,0,0,2,141,3,163,0,7, 0,10,0,24,0,0,37,33,7,35,1,51,1,35,11,3, 51,22,51,50,55,54,53,51,6,35,34,39,38,1,218,254, 231,77,99,1,4,120,1,0,104,101,112,120,31,59,8,84, 77,13,1,59,11,141,86,42,20,219,219,2,217,253,39,1, 41,1,76,254,180,2,122,66,57,4,5,135,57,26,0,3, 0,42,255,233,2,23,2,220,0,45,0,62,0,76,0,0, 37,21,6,35,34,39,38,39,6,7,34,39,38,53,52,55, 54,55,54,55,54,55,54,61,1,52,39,38,35,34,7,6, 7,35,54,55,54,51,50,23,22,21,17,20,51,50,39,53, 6,7,6,7,6,7,6,21,20,23,22,51,50,55,54,1, 51,22,51,50,55,54,53,51,6,35,34,39,38,2,23,35, 22,71,13,1,1,87,91,110,43,19,92,36,94,16,22,73, 11,3,81,17,19,103,17,2,1,84,3,33,55,119,176,19, 2,45,9,137,32,82,9,11,106,16,4,67,16,20,72,52, 32,254,249,59,8,84,77,13,1,59,11,141,86,42,20,49, 63,9,63,7,7,76,1,75,35,45,102,38,15,12,2,3, 9,29,8,12,22,64,12,2,75,9,9,72,37,61,116,13, 14,254,204,41,118,94,15,11,1,2,15,54,12,15,65,15, 4,47,29,2,94,66,57,4,5,135,57,28,0,2,0,17, 255,51,2,180,2,217,0,24,0,27,0,0,37,33,7,35, 1,51,1,6,21,20,51,50,55,21,6,35,34,39,38,53, 52,55,54,55,35,11,2,1,218,254,231,77,99,1,4,120, 1,0,96,72,37,26,48,28,33,36,63,70,14,17,36,101, 112,120,219,219,2,217,253,39,46,59,55,10,45,10,13,24, 57,58,38,7,8,1,41,1,76,254,180,0,0,2,0,43, 255,51,2,84,2,27,0,56,0,73,0,0,37,21,6,7, 20,51,50,55,21,6,35,34,39,38,39,52,55,54,55,38, 39,6,35,34,39,38,53,52,55,54,55,54,55,54,55,54, 61,1,52,39,34,7,6,7,35,54,55,54,51,50,23,22, 21,17,20,51,50,39,53,6,7,6,7,6,7,6,21,20, 23,22,51,50,55,54,2,24,72,4,72,38,26,42,29,31, 43,61,2,47,9,12,57,6,81,97,110,43,19,93,35,93, 17,23,70,12,4,117,104,16,1,1,84,3,32,56,118,176, 19,2,45,9,138,32,82,9,11,106,16,4,67,16,20,72, 52,32,49,63,35,56,55,10,45,10,13,20,60,46,30,7, 6,10,67,77,75,35,45,101,39,15,12,2,3,9,26,10, 13,22,77,1,77,7,9,71,38,61,116,13,14,254,204,41, 118,94,15,11,1,2,15,54,12,15,65,15,4,47,29,0, 0,2,0,48,255,233,2,165,3,171,0,31,0,35,0,0, 1,35,38,39,38,39,34,7,6,21,20,23,22,51,50,55, 54,55,54,55,51,2,33,34,39,38,53,52,55,54,51,50, 39,51,7,35,2,150,95,15,38,54,90,128,61,40,95,59, 83,109,51,6,4,22,11,96,33,254,245,141,82,106,102,82, 149,238,213,113,149,60,1,247,75,35,44,2,115,75,112,170, 79,49,77,8,9,42,71,254,223,85,109,185,183,111,91,198, 148,0,0,2,0,31,255,233,1,221,2,228,0,32,0,36, 0,0,1,35,38,47,1,34,7,6,21,20,23,22,51,50, 55,51,6,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,23,22,3,51,7,35,1,215,84,13,84,27,94,35,16, 79,29,39,107,21,84,11,104,43,56,129,62,41,92,59,82, 106,58,4,4,29,167,113,149,60,1,92,97,15,2,100,46, 63,137,45,17,126,137,46,20,105,70,101,160,77,49,68,5, 5,43,1,66,148,0,255,255,0,48,255,233,2,165,3,151, 16,39,1,239,0,144,0,178,16,6,0,38,0,0,255,255, 0,31,255,233,1,221,2,202,16,39,1,239,0,131,255,229, 16,6,0,70,0,0,255,255,0,48,255,233,2,165,3,105, 16,39,1,244,0,218,0,157,16,6,0,38,0,0,255,255, 0,31,255,233,1,221,2,156,16,38,1,244,92,208,16,6, 0,70,0,0,0,2,0,48,255,233,2,165,3,172,0,31, 0,38,0,0,1,35,38,39,38,39,34,7,6,21,20,23, 22,51,50,55,54,55,54,55,51,2,33,34,39,38,53,52, 55,54,51,50,39,35,39,51,23,55,51,2,150,95,15,38, 54,90,128,61,40,95,59,83,109,51,6,4,22,11,96,33, 254,245,141,82,106,102,82,149,238,191,95,96,63,81,79,64, 1,247,75,35,44,2,115,75,112,170,79,49,77,8,9,42, 71,254,223,85,109,185,183,111,91,49,150,96,96,0,0,2, 0,31,255,233,1,221,2,229,0,32,0,39,0,0,1,35, 38,47,1,34,7,6,21,20,23,22,51,50,55,51,6,7, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,39, 35,39,51,23,55,51,1,215,84,13,84,27,94,35,16,79, 29,39,107,21,84,11,104,43,56,129,62,41,92,59,82,106, 58,4,4,29,152,95,96,63,81,79,64,1,92,97,15,2, 100,46,63,137,45,17,126,137,46,20,105,70,101,160,77,49, 68,5,5,43,173,150,96,96,0,3,0,89,0,0,2,155, 3,172,0,11,0,22,0,29,0,0,51,17,33,50,31,1, 22,21,20,7,6,35,39,51,50,55,54,53,52,39,38,43, 1,55,35,39,51,23,55,51,89,1,25,163,79,22,33,116, 73,108,188,172,174,37,9,168,25,27,172,204,95,96,63,81, 79,64,2,217,132,43,81,108,209,95,61,82,181,45,56,246, 32,5,143,150,96,96,0,3,0,26,255,233,2,136,2,217, 0,18,0,36,0,50,0,0,1,17,35,53,6,7,6,35, 34,39,38,53,52,55,54,51,50,23,17,3,34,7,6,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,19,51,21, 20,7,6,43,1,53,50,53,52,53,35,1,239,74,58,86, 11,12,130,60,38,89,57,79,108,53,147,85,41,20,5,1, 70,36,47,83,39,24,72,33,241,100,48,20,24,8,55,55, 2,217,253,39,69,83,8,1,112,71,103,154,75,47,81,1, 15,254,244,82,38,51,16,16,122,54,27,82,50,69,131,51, 23,1,12,103,76,32,13,38,78,4,4,0,0,2,0,20, 0,0,2,155,2,217,0,15,0,30,0,0,19,35,53,51, 17,33,50,31,1,22,21,20,7,6,35,33,19,17,51,50, 55,54,53,52,39,38,43,1,21,51,21,89,69,69,1,26, 163,78,22,33,117,73,106,254,230,93,173,178,34,7,161,27, 31,173,171,1,83,67,1,67,132,43,81,108,211,95,59,1, 83,254,255,191,42,50,239,37,6,241,67,0,0,2,0,26, 255,233,2,45,2,217,0,24,0,40,0,0,1,51,21,35, 17,35,53,6,35,34,39,38,53,52,55,54,51,50,23,53, 35,53,51,53,51,3,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,238,63,63,74,70,98,118,62,46,89, 56,79,97,64,150,150,83,229,85,41,26,68,36,48,84,39, 23,72,32,2,141,53,253,168,59,82,101,75,111,153,75,47, 78,139,53,76,254,240,81,49,69,118,53,28,82,49,66,128, 50,23,0,2,0,90,0,0,2,101,3,132,0,11,0,15, 0,0,19,21,33,21,33,17,33,21,33,21,33,21,3,21, 33,53,183,1,174,253,245,1,249,254,100,1,141,98,254,238, 1,76,250,82,2,217,82,233,82,2,56,70,70,0,0,3, 0,40,255,233,2,1,2,189,0,25,0,36,0,40,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,23,22,5,33,54,53,52,39, 38,35,34,7,6,1,21,33,53,2,1,254,126,1,27,43, 83,102,35,84,22,104,44,54,136,63,39,94,60,86,115,65, 20,12,21,254,128,1,38,1,59,38,48,85,41,20,1,33, 254,238,234,72,40,68,105,121,43,18,110,68,100,158,77,49, 82,25,31,55,44,2,4,80,45,29,75,36,1,94,70,70, 255,255,0,90,0,0,2,101,3,136,16,39,1,243,0,177, 0,172,16,6,0,40,0,0,255,255,0,40,255,233,2,1, 2,187,16,38,1,243,114,223,16,6,0,72,0,0,0,2, 0,90,0,0,2,101,3,147,0,11,0,15,0,0,19,21, 33,21,33,17,33,21,33,21,33,21,3,21,35,53,183,1, 174,253,245,1,249,254,100,1,141,183,104,1,76,250,82,2, 217,82,233,82,2,71,104,104,0,3,0,40,255,233,2,1, 2,204,0,25,0,36,0,40,0,0,37,33,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,5,33,54,53,52,39,38,35,34,7,6,19, 21,35,53,2,1,254,126,1,27,43,83,102,35,84,22,104, 44,54,136,63,39,94,60,86,115,65,20,12,21,254,128,1, 38,1,59,38,48,85,41,20,204,104,234,72,40,68,105,121, 43,18,110,68,100,158,77,49,82,25,31,55,44,2,4,80, 45,29,75,36,1,109,104,104,0,1,0,90,255,51,2,140, 2,217,0,28,0,0,19,21,33,21,6,21,20,51,50,55, 21,6,35,34,39,38,53,52,55,54,55,33,17,33,21,33, 21,33,21,183,1,174,96,72,37,26,46,29,33,37,63,76, 11,14,254,57,1,249,254,100,1,141,1,76,250,82,45,61, 54,10,45,10,13,24,57,61,38,6,6,2,217,82,233,82, 0,2,0,40,255,52,2,2,2,27,0,48,0,58,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,7,6,21,20, 23,22,51,50,55,21,6,35,34,39,38,53,52,55,54,55, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,22,21, 20,39,53,52,39,38,35,34,7,6,7,2,1,254,126,1, 27,45,81,101,37,84,14,67,63,7,1,49,11,12,38,26, 41,28,96,32,11,28,10,30,40,28,142,61,36,95,60,85, 113,65,20,14,21,89,59,38,48,85,41,20,3,234,70,42, 68,105,77,67,65,41,9,9,41,8,2,10,45,9,51,17, 20,37,31,10,23,8,114,67,96,159,77,49,79,25,34,54, 99,7,61,6,80,45,29,75,36,49,0,2,0,90,0,0, 2,101,3,172,0,11,0,18,0,0,19,21,33,21,33,17, 33,21,33,21,33,21,3,35,39,51,23,55,51,183,1,174, 253,245,1,249,254,100,1,141,188,95,96,63,81,79,64,1, 76,250,82,2,217,82,233,82,1,202,150,96,96,0,0,3, 0,40,255,233,2,1,2,229,0,25,0,36,0,43,0,0, 37,33,22,23,22,51,50,55,51,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,23,22,5,33,54,53,52,39, 38,35,34,7,6,55,35,39,51,23,55,51,2,1,254,126, 1,27,43,83,102,35,84,22,104,44,54,136,63,39,94,60, 86,115,65,20,12,21,254,128,1,38,1,59,38,48,85,41, 20,201,95,96,63,81,79,64,234,72,40,68,105,121,43,18, 110,68,100,158,77,49,82,25,31,55,44,2,4,80,45,29, 75,36,240,150,96,96,255,255,0,44,255,233,2,197,3,152, 16,103,1,239,0,240,1,26,64,0,55,10,16,6,0,42, 0,0,255,255,0,29,255,38,1,233,2,202,16,38,1,239, 88,229,16,6,0,74,0,0,0,2,0,44,255,233,2,197, 3,163,0,41,0,55,0,0,1,17,35,39,6,35,34,39, 38,53,52,55,54,55,54,51,50,23,22,23,35,38,39,38, 35,34,7,6,21,20,23,22,23,22,23,50,55,54,61,1, 35,53,3,51,22,51,50,55,54,53,51,6,35,34,39,38, 2,197,59,23,104,145,153,94,87,102,14,16,85,133,179,81, 33,12,95,21,95,42,53,132,71,53,61,8,8,72,112,114, 66,49,222,156,59,8,84,77,13,1,59,11,141,86,42,20, 1,129,254,123,97,116,114,104,162,176,110,15,13,70,118,49, 66,98,36,17,104,78,115,126,84,10,9,72,2,80,60,84, 20,82,2,34,66,57,4,5,135,57,26,0,0,3,0,29, 255,38,1,233,2,220,0,39,0,55,0,69,0,0,1,51, 17,20,7,6,7,6,7,6,35,34,39,38,39,51,22,23, 22,51,50,55,54,61,1,6,15,1,34,39,38,39,38,53, 52,55,54,51,50,23,39,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,3,51,22,51,50,55,54,53,51,6, 35,34,39,38,1,156,77,41,7,7,48,109,11,11,138,50, 17,4,85,6,26,36,59,81,35,30,59,73,27,83,61,3, 3,66,85,57,81,98,62,151,88,37,20,78,29,39,89,35, 18,82,27,163,59,7,85,77,13,1,59,11,141,86,42,20, 2,12,254,74,154,64,10,9,60,6,1,88,31,39,39,21, 28,49,41,102,27,82,10,2,64,3,3,77,129,153,79,54, 91,14,90,48,66,139,47,18,92,46,63,150,43,14,1,14, 66,57,4,5,135,57,28,0,255,255,0,44,255,233,2,197, 3,105,16,39,1,244,0,229,0,157,16,6,0,42,0,0, 255,255,0,29,255,38,1,233,2,156,16,38,1,244,88,208, 16,6,0,74,0,0,0,2,0,44,254,227,2,197,2,229, 0,41,0,54,0,0,1,17,35,39,6,35,34,39,38,53, 52,55,54,55,54,51,50,23,22,23,35,38,39,38,35,34, 7,6,21,20,23,22,23,22,23,50,55,54,61,1,35,53, 3,51,21,20,7,6,35,53,50,53,52,53,35,2,197,59, 23,104,145,153,94,87,102,14,16,85,133,179,81,33,12,95, 21,95,42,53,132,71,53,61,8,8,72,112,114,66,49,222, 68,100,59,17,24,55,55,1,129,254,123,97,116,114,104,162, 176,110,15,13,70,118,49,66,98,36,17,104,78,115,126,84, 10,9,72,2,80,60,84,20,82,254,67,103,88,25,8,38, 78,4,4,0,0,3,0,29,255,38,1,233,3,49,0,39, 0,55,0,69,0,0,1,51,17,20,7,6,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,61,1,6, 15,1,34,39,38,39,38,53,52,55,54,51,50,23,39,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,55,35, 53,52,55,54,51,21,7,6,21,20,21,51,1,156,77,41, 7,7,48,109,11,11,138,50,17,4,85,6,26,36,59,81, 35,30,59,73,27,83,61,3,3,66,85,57,81,98,62,151, 88,37,20,78,29,39,89,35,18,82,27,37,100,59,17,24, 2,53,55,2,12,254,74,154,64,10,9,60,6,1,88,31, 39,39,21,28,49,41,102,27,82,10,2,64,3,3,77,129, 153,79,54,91,14,90,48,66,139,47,18,92,46,63,150,43, 14,130,103,88,25,8,38,1,1,75,4,5,255,255,0,83, 0,0,2,132,3,151,16,39,1,239,0,200,0,178,16,6, 0,43,0,0,255,255,255,224,0,0,1,230,3,151,16,39, 1,239,255,204,0,178,16,6,0,75,0,0,0,2,0,39, 0,0,2,176,2,217,0,3,0,23,0,0,19,21,33,53, 37,53,51,21,33,53,51,21,51,21,35,17,35,17,33,17, 35,17,35,53,176,1,119,254,44,93,1,119,93,44,44,93, 254,138,94,44,1,248,90,90,72,153,153,153,153,70,254,6, 1,76,254,180,1,250,70,0,0,1,0,7,0,0,1,230, 2,217,0,31,0,0,19,51,21,35,21,54,55,54,51,50, 23,22,21,17,35,17,52,39,38,35,34,7,6,21,17,35, 17,35,53,51,53,51,153,150,150,54,66,21,27,110,39,16, 83,34,32,42,84,37,21,83,63,63,83,2,141,53,148,70, 13,4,74,30,39,254,116,1,107,55,24,24,77,42,58,254, 223,2,88,53,76,0,255,255,255,246,0,0,1,48,3,105, 16,39,1,247,255,241,0,156,16,6,0,44,0,0,255,255, 255,235,0,0,1,37,2,156,16,38,1,247,230,207,16,6, 0,243,0,0,0,2,0,20,0,0,1,18,3,132,0,3, 0,7,0,0,19,17,35,17,55,21,35,53,194,94,174,254, 2,217,253,39,2,217,171,70,70,0,0,2,255,240,0,0, 0,231,2,189,0,3,0,7,0,0,19,17,35,17,55,21, 35,53,149,83,165,247,2,12,253,244,2,12,177,70,70,0, 255,255,255,253,0,0,1,42,3,136,16,39,1,243,255,238, 0,172,16,6,0,44,0,0,255,255,255,241,0,0,1,30, 2,187,16,38,1,243,226,223,16,6,0,243,0,0,0,1, 0,66,255,52,0,234,2,217,0,22,0,0,19,17,6,21, 20,23,22,51,50,55,21,6,35,34,39,38,53,52,55,54, 55,35,17,194,56,34,8,9,18,27,32,27,73,26,10,51, 11,15,43,2,217,253,39,51,56,40,10,2,9,45,9,49, 17,22,52,44,9,11,2,217,0,2,0,25,255,52,0,190, 2,217,0,24,0,28,0,0,19,17,6,7,6,21,20,23, 22,51,50,55,21,6,35,34,39,38,53,52,55,54,55,35, 17,55,21,35,53,150,42,9,2,34,7,9,16,27,31,27, 70,27,10,45,12,17,32,83,84,2,12,253,244,38,49,9, 7,42,11,3,9,45,9,47,19,22,48,43,11,14,2,12, 205,105,105,0,0,2,0,96,0,0,0,200,3,147,0,3, 0,7,0,0,19,17,35,17,55,21,35,53,195,94,99,104, 2,217,253,39,2,217,186,104,104,0,0,1,0,94,0,0, 0,178,2,12,0,3,0,0,19,17,35,17,178,84,2,12, 253,244,2,12,255,255,0,100,255,233,2,114,2,217,16,39, 0,45,0,200,0,0,16,6,0,44,0,0,255,255,0,66, 255,38,1,49,2,217,16,39,0,77,0,152,0,0,16,6, 0,76,0,0,255,255,0,17,255,233,2,11,3,151,16,39, 1,239,0,216,0,178,16,6,0,45,0,0,0,2,255,224, 255,38,0,255,3,17,0,15,0,22,0,0,19,51,17,20, 7,34,35,34,39,53,22,51,50,55,54,53,3,51,23,35, 39,7,35,70,83,128,7,8,13,15,17,3,52,11,5,6, 95,96,63,81,79,64,2,12,253,135,103,6,3,71,1,32, 14,23,3,93,150,96,96,0,0,2,0,79,254,227,2,146, 2,217,0,11,0,24,0,0,19,21,35,17,51,17,1,51, 9,1,35,1,19,51,21,20,7,6,35,53,50,53,52,53, 35,172,93,93,1,107,120,254,215,1,44,110,254,255,8,100, 59,17,24,55,55,0,255,255,2,217,254,143,1,113,254,215, 254,80,1,118,254,78,103,88,25,8,38,78,4,4,0,2, 0,58,254,227,1,246,2,217,0,11,0,24,0,0,19,17, 55,51,7,19,35,3,7,21,35,17,19,51,21,20,7,6, 35,53,50,53,52,53,35,141,222,107,182,214,103,177,81,83, 159,100,59,17,24,55,55,2,217,254,85,222,181,254,169,1, 28,80,204,2,217,252,235,103,88,25,8,38,78,4,4,0, 0,1,0,58,0,0,1,246,2,12,0,10,0,0,19,21, 55,51,9,1,35,37,21,35,17,141,222,107,254,240,1,48, 103,254,254,83,2,12,222,222,254,252,254,248,216,216,2,12, 0,2,0,70,0,0,2,21,3,171,0,5,0,9,0,0, 19,17,33,21,33,17,55,51,7,35,173,1,104,254,59,86, 113,149,60,2,217,253,121,82,2,217,210,148,0,2,0,63, 0,0,1,16,3,171,0,3,0,7,0,0,19,17,35,17, 55,51,7,35,152,84,91,113,149,60,2,217,253,39,2,217, 210,148,0,2,0,80,254,227,2,21,2,217,0,5,0,18, 0,0,19,17,33,21,33,17,19,51,21,20,7,6,35,53, 50,53,52,53,35,173,1,104,254,59,177,100,59,17,24,55, 55,2,217,253,121,82,2,217,252,235,103,88,25,8,38,78, 4,4,0,2,0,63,254,227,0,163,2,217,0,3,0,16, 0,0,19,17,35,17,3,51,21,20,7,6,35,53,50,53, 52,53,35,152,84,5,100,59,17,24,55,55,2,217,253,39, 2,217,252,235,103,88,25,8,38,78,4,4,0,2,0,80, 0,0,2,21,2,217,0,5,0,19,0,0,19,17,33,21, 33,17,59,1,21,20,7,6,43,1,53,50,53,52,53,35, 173,1,104,254,59,193,100,48,20,24,8,55,55,2,217,253, 121,82,2,217,103,76,32,13,38,78,4,4,0,2,0,68, 0,0,1,49,2,217,0,3,0,17,0,0,19,17,35,17, 59,1,21,20,7,6,43,1,53,50,53,52,53,35,152,84, 137,100,48,20,24,8,55,55,2,217,253,39,2,217,103,76, 32,13,38,78,4,4,255,255,0,80,0,0,2,21,2,217, 16,39,0,121,1,0,0,0,16,6,0,47,0,0,255,255, 0,68,0,0,1,177,2,217,16,39,0,121,0,222,0,0, 16,6,0,79,0,0,0,1,0,0,0,0,2,40,2,217, 0,13,0,0,19,55,21,7,21,33,21,33,17,7,53,55, 17,51,173,171,171,1,123,254,40,80,80,93,1,150,121,76, 122,247,82,1,24,57,77,56,1,117,0,1,0,0,0,0, 0,212,2,217,0,11,0,0,19,55,21,7,17,35,17,7, 53,55,17,51,146,66,66,83,63,63,83,1,165,51,64,51, 254,155,1,57,50,64,50,1,96,0,0,2,0,76,0,0, 2,134,3,171,0,9,0,13,0,0,1,17,35,1,17,35, 17,51,1,17,39,51,7,35,2,134,105,254,135,88,101,1, 125,169,113,149,60,2,217,253,39,2,79,253,177,2,217,253, 172,2,84,210,148,0,0,2,0,70,0,0,1,231,2,228, 0,23,0,27,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,19,51, 7,35,70,77,54,76,20,24,105,42,19,83,59,21,28,84, 37,21,84,240,113,149,60,2,12,88,85,14,4,70,32,41, 254,116,1,107,70,24,9,77,42,58,254,223,2,228,148,0, 0,2,0,76,254,227,2,134,2,217,0,9,0,22,0,0, 1,17,35,1,17,35,17,51,1,17,1,51,21,20,7,6, 35,53,50,53,52,53,35,2,134,105,254,135,88,101,1,125, 254,252,100,59,17,24,55,55,2,217,253,39,2,79,253,177, 2,217,253,172,2,84,252,235,103,88,25,8,38,78,4,4, 0,2,0,70,254,227,1,231,2,27,0,23,0,36,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,23,51,21,20,7,6,35,53, 50,53,52,53,35,70,77,54,76,20,24,105,42,19,83,59, 21,28,84,37,21,84,159,100,59,17,24,55,55,2,12,88, 85,14,4,70,32,41,254,116,1,107,70,24,9,77,42,58, 254,223,60,103,88,25,8,38,78,4,4,0,0,2,0,76, 0,0,2,134,3,172,0,9,0,16,0,0,1,17,35,1, 17,35,17,51,1,17,39,35,39,51,23,55,51,2,134,105, 254,135,88,101,1,125,149,95,96,63,81,79,64,2,217,253, 39,2,79,253,177,2,217,253,172,2,84,61,150,96,96,0, 0,2,0,70,0,0,1,231,2,229,0,23,0,30,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,1,35,39,51,23,55,51,70, 77,54,76,20,24,105,42,19,83,59,21,28,84,37,21,84, 1,0,95,96,63,81,79,64,2,12,88,85,14,4,70,32, 41,254,116,1,107,70,24,9,77,42,58,254,223,2,79,150, 96,96,0,1,0,70,0,0,1,231,2,27,0,23,0,0, 19,51,21,54,55,54,51,50,23,22,21,17,35,17,52,39, 38,35,34,7,6,21,17,35,70,77,54,76,20,24,105,42, 19,83,59,21,28,84,37,21,84,2,12,88,85,14,4,70, 32,41,254,116,1,107,70,24,9,77,42,58,254,223,0,2, 0,76,255,38,2,134,2,217,0,15,0,25,0,0,37,51, 17,20,7,6,35,34,39,53,22,51,50,55,54,53,19,17, 35,1,17,35,17,51,1,17,2,46,88,99,22,27,13,15, 17,3,52,11,5,88,105,254,135,88,101,1,125,224,254,179, 87,18,4,3,71,1,32,14,23,3,37,253,39,2,79,253, 177,2,217,253,172,2,84,0,0,1,0,70,255,38,1,231, 2,27,0,35,0,0,1,17,20,7,34,35,34,39,53,22, 51,50,55,54,53,17,52,39,38,35,34,7,6,21,17,35, 17,51,21,54,55,54,51,50,23,22,1,231,128,7,8,13, 15,17,3,52,11,5,59,21,28,84,37,21,84,77,54,76, 20,24,105,42,19,1,140,254,7,103,6,3,71,1,32,14, 23,1,183,70,24,9,77,42,58,254,223,2,12,88,85,14, 4,70,32,0,0,3,0,38,255,233,2,230,3,132,0,18, 0,34,0,38,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,55,21,33,53,1,133,174, 97,26,56,82,20,24,91,135,167,98,87,111,95,145,130,72, 56,95,67,97,129,72,58,98,66,42,254,238,2,229,123,38, 96,131,148,105,26,20,77,117,104,161,184,107,91,82,102,80, 118,158,83,59,100,79,117,165,83,56,241,70,70,0,0,3, 0,36,255,233,1,254,2,189,0,15,0,31,0,35,0,0, 1,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 55,21,33,53,1,16,152,57,29,102,56,79,144,60,33,105, 55,77,93,38,19,78,31,41,90,39,21,82,30,99,254,238, 2,27,129,65,91,167,71,39,119,67,95,174,70,37,77,92, 48,64,137,48,19,88,47,66,145,46,16,239,70,70,255,255, 0,38,255,233,2,230,3,136,16,39,1,243,0,224,0,172, 16,6,0,50,0,0,255,255,0,36,255,233,1,254,2,187, 16,38,1,243,108,223,16,6,0,82,0,0,0,4,0,38, 255,233,2,230,3,171,0,18,0,34,0,38,0,42,0,0, 1,50,31,1,22,21,20,7,6,7,6,35,34,39,38,53, 52,55,54,23,34,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,3,51,7,35,37,51,7,35,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,145,130,72,56,95, 67,97,129,72,58,98,66,121,113,149,60,1,14,113,149,60, 2,229,123,38,96,131,148,105,26,20,77,117,104,161,184,107, 91,82,102,80,118,158,83,59,100,79,117,165,83,56,1,24, 150,150,150,0,0,4,0,36,255,233,2,14,2,228,0,15, 0,31,0,35,0,39,0,0,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,3,51,7,35,37,51,7,35, 1,16,152,57,29,102,56,79,144,60,33,105,55,77,93,38, 19,78,31,41,90,39,21,82,30,72,113,149,60,1,14,113, 149,60,2,27,129,65,91,167,71,39,119,67,95,174,70,37, 77,92,48,64,137,48,19,88,47,66,145,46,16,1,22,150, 150,150,0,2,0,43,255,236,3,191,2,229,0,26,0,39, 0,0,1,21,33,21,33,53,6,7,34,39,38,53,52,55, 54,55,54,51,50,23,53,33,21,33,21,33,21,5,17,38, 35,34,7,6,21,20,23,22,51,50,2,106,1,85,254,78, 70,114,131,80,87,103,69,105,11,11,121,62,1,173,254,176, 1,72,254,91,59,124,101,54,51,51,54,100,125,1,71,245, 82,74,92,2,92,100,184,206,101,69,8,1,88,76,82,238, 82,145,1,101,120,78,77,144,144,76,78,0,0,3,0,40, 255,233,3,131,2,27,0,37,0,57,0,66,0,0,37,51, 6,7,6,35,34,39,38,39,6,35,34,39,38,53,52,55, 54,51,50,23,54,55,54,51,50,23,22,23,22,21,33,22, 23,22,51,50,1,34,7,6,7,20,21,20,23,22,51,50, 55,54,53,52,39,38,39,38,23,33,52,39,38,35,34,7, 6,3,36,84,22,102,44,55,124,64,3,3,63,131,155,56, 26,122,49,66,135,61,54,103,18,18,115,65,20,12,21,254, 126,1,27,43,83,102,254,20,93,38,16,3,79,31,40,91, 39,20,81,17,19,16,221,1,38,65,34,45,85,41,20,159, 120,43,19,93,5,5,103,133,62,87,192,63,25,106,88,15, 3,82,25,31,55,112,72,40,68,1,152,93,39,53,9,9, 139,47,19,89,48,65,143,46,9,4,4,160,93,44,23,75, 36,0,0,3,0,93,0,0,2,167,3,171,0,29,0,40, 0,44,0,0,19,17,35,17,33,50,23,22,21,20,7,6, 7,22,23,22,23,22,23,22,23,21,35,38,53,55,52,39, 38,35,39,51,50,55,54,53,52,39,38,43,1,19,51,7, 35,186,93,1,80,170,41,11,72,19,24,62,19,17,1,2, 17,9,16,113,21,1,80,18,22,240,225,121,18,4,38,32, 73,225,197,113,149,60,1,58,254,198,2,217,120,33,42,98, 51,13,12,27,40,37,86,96,27,13,11,23,48,71,65,109, 17,4,82,86,17,22,66,32,28,1,36,148,0,2,0,69, 0,0,1,75,2,228,0,17,0,21,0,0,19,51,21,54, 55,54,51,50,23,21,6,7,6,7,6,21,17,35,19,51, 7,35,69,77,58,58,13,14,11,21,72,31,3,3,59,84, 149,113,149,60,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,240,2,228,148,0,0,3,0,93,254,227,2,167, 2,217,0,29,0,40,0,53,0,0,19,17,35,17,33,50, 23,22,21,20,7,6,7,22,23,22,23,22,23,22,23,21, 35,38,53,55,52,39,38,35,39,51,50,55,54,53,52,39, 38,43,1,19,51,21,20,7,6,35,53,50,53,52,53,35, 186,93,1,80,170,41,11,72,19,24,62,19,17,1,2,17, 9,16,113,21,1,80,18,22,240,225,121,18,4,38,32,73, 225,133,100,59,17,24,55,55,1,58,254,198,2,217,120,33, 42,98,51,13,12,27,40,37,86,96,27,13,11,23,48,71, 65,109,17,4,82,86,17,22,66,32,28,253,61,103,88,25, 8,38,78,4,4,0,0,2,0,65,254,227,1,65,2,27, 0,17,0,30,0,0,19,51,21,54,55,54,51,50,23,21, 6,7,6,7,6,21,17,35,7,51,21,20,7,6,35,53, 50,53,52,53,35,69,77,58,58,13,14,11,21,72,31,3, 3,59,84,4,100,59,17,24,55,55,2,12,95,93,14,3, 3,85,1,21,2,2,43,110,254,240,60,103,88,25,8,38, 78,4,4,0,0,3,0,93,0,0,2,167,3,172,0,29, 0,40,0,47,0,0,19,17,35,17,33,50,23,22,21,20, 7,6,7,22,23,22,23,22,23,22,23,21,35,38,53,55, 52,39,38,35,39,51,50,55,54,53,52,39,38,43,1,55, 35,39,51,23,55,51,186,93,1,80,170,41,11,72,19,24, 62,19,17,1,2,17,9,16,113,21,1,80,18,22,240,225, 121,18,4,38,32,73,225,218,95,96,63,81,79,64,1,58, 254,198,2,217,120,33,42,98,51,13,12,27,40,37,86,96, 27,13,11,23,48,71,65,109,17,4,82,86,17,22,66,32, 28,143,150,96,96,0,0,2,0,48,0,0,1,79,2,229, 0,17,0,24,0,0,19,51,21,54,55,54,51,50,23,21, 6,7,6,7,6,21,17,35,19,35,39,51,23,55,51,69, 77,58,58,13,14,11,21,72,31,3,3,59,84,170,95,96, 63,81,79,64,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,240,2,79,150,96,96,0,0,2,0,48,255,233, 2,109,3,171,0,54,0,58,0,0,1,35,38,39,38,35, 34,15,1,6,21,20,23,22,31,1,22,23,22,21,20,7, 6,7,6,35,34,39,38,39,51,23,22,23,22,51,50,55, 54,55,54,53,52,47,2,38,53,52,55,54,51,50,23,22, 3,51,7,35,2,84,88,1,109,32,40,104,41,12,6,54, 25,41,183,120,28,7,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,110,24,181,143,104,64, 91,176,63,28,234,113,149,60,2,3,111,29,8,62,24,17, 20,56,28,13,11,49,33,97,25,28,84,63,11,9,56,104, 57,94,38,41,33,61,31,31,56,7,7,76,35,7,48,37, 133,124,56,34,111,49,1,102,148,0,0,2,0,34,255,233, 1,203,2,228,0,48,0,52,0,0,1,35,38,35,34,7, 6,21,20,23,22,31,1,22,23,22,21,20,7,6,35,34, 39,38,53,51,22,23,22,51,50,55,54,53,52,47,2,38, 39,38,53,52,55,54,51,50,23,22,3,51,7,35,1,182, 88,3,102,82,23,6,66,14,17,80,118,23,7,90,52,74, 194,14,1,88,6,18,33,71,84,28,10,54,27,78,119,31, 16,84,49,68,145,35,10,163,113,149,60,1,122,84,49,14, 16,45,22,4,4,19,28,70,21,27,96,44,26,162,8,9, 47,20,35,47,16,19,46,19,8,19,29,51,28,43,93,42, 25,101,27,1,73,148,255,255,0,48,255,233,2,109,3,173, 16,39,1,239,0,172,0,200,16,6,0,54,0,0,255,255, 0,34,255,233,1,203,2,202,16,38,1,239,86,229,16,6, 0,86,0,0,0,1,0,47,255,42,2,109,2,229,0,87, 0,0,5,7,54,51,50,23,22,21,20,7,6,35,34,47, 1,55,23,22,51,50,55,54,53,38,39,34,7,39,55,38, 35,39,38,39,38,53,52,53,51,23,22,23,22,51,50,55, 54,55,54,53,52,47,2,38,53,52,55,54,51,50,23,22, 21,35,38,39,38,35,34,15,1,6,21,20,23,22,31,1, 22,23,22,21,20,7,6,7,6,1,79,15,14,14,70,8, 1,66,25,32,45,66,14,21,9,57,32,38,13,3,7,39, 14,17,11,31,9,2,44,117,49,26,88,3,7,28,51,117, 89,45,44,7,1,110,24,181,143,104,64,91,176,63,28,88, 1,109,32,40,104,41,12,6,54,25,41,183,120,28,7,71, 28,35,56,24,32,2,55,5,7,63,22,8,28,6,40,4, 29,29,7,9,34,3,7,6,69,3,7,25,98,52,62,4, 4,38,41,33,61,31,31,56,7,7,76,35,7,48,37,133, 124,56,34,111,49,66,111,29,8,62,24,17,20,56,28,13, 11,49,33,97,25,28,94,64,26,14,22,0,0,1,0,34, 255,42,1,203,2,27,0,77,0,0,23,7,54,51,50,23, 22,21,20,7,6,35,34,39,38,39,55,23,22,51,50,55, 54,53,38,39,34,7,39,55,38,39,51,22,23,22,51,50, 55,54,53,52,47,2,38,39,38,53,52,55,54,51,50,23, 22,21,35,38,35,34,7,6,21,20,23,22,31,1,22,23, 22,21,20,7,6,7,6,244,14,14,14,70,8,1,66,25, 32,45,66,6,8,21,9,57,32,38,13,3,7,39,14,17, 11,31,168,3,88,6,18,33,71,84,28,10,54,27,78,119, 31,16,84,49,68,145,35,10,88,3,102,82,23,6,66,14, 17,80,118,23,7,65,16,17,38,24,32,2,55,5,7,63, 22,8,28,3,3,40,4,29,29,7,9,34,3,7,6,71, 17,160,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,33,84,49,14,16,45,22,4,4,19,28, 70,21,27,79,47,11,8,17,0,2,0,48,255,233,2,109, 3,172,0,54,0,61,0,0,1,35,38,39,38,35,34,15, 1,6,21,20,23,22,31,1,22,23,22,21,20,7,6,7, 6,35,34,39,38,39,51,23,22,23,22,51,50,55,54,55, 54,53,52,47,2,38,53,52,55,54,51,50,23,22,39,35, 39,51,23,55,51,2,84,88,1,109,32,40,104,41,12,6, 54,25,41,183,120,28,7,58,11,11,73,132,169,76,42,1, 88,3,7,28,51,117,89,45,44,7,1,110,24,181,143,104, 64,91,176,63,28,216,95,96,63,81,79,64,2,3,111,29, 8,62,24,17,20,56,28,13,11,49,33,97,25,28,84,63, 11,9,56,104,57,94,38,41,33,61,31,31,56,7,7,76, 35,7,48,37,133,124,56,34,111,49,209,150,96,96,0,2, 0,34,255,233,1,203,2,229,0,48,0,55,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,39,35, 39,51,23,55,51,1,182,88,3,102,82,23,6,66,14,17, 80,118,23,7,90,52,74,194,14,1,88,6,18,33,71,84, 28,10,54,27,78,119,31,16,84,49,68,145,35,10,144,95, 96,63,81,79,64,1,122,84,49,14,16,45,22,4,4,19, 28,70,21,27,96,44,26,162,8,9,47,20,35,47,16,19, 46,19,8,19,29,51,28,43,93,42,25,101,27,180,150,96, 96,0,255,255,0,21,255,42,2,81,2,217,16,39,0,122, 0,128,0,0,16,6,0,55,0,0,255,255,0,14,255,19, 1,37,2,156,16,38,0,122,6,233,16,6,0,87,0,0, 0,2,0,21,0,0,2,81,3,172,0,7,0,14,0,0, 1,17,35,17,35,53,33,21,39,35,39,51,23,55,51,1, 98,93,240,2,60,238,95,96,63,81,79,64,2,135,253,121, 2,135,82,82,143,150,96,96,0,2,0,14,255,233,1,65, 3,32,0,23,0,37,0,0,19,21,35,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,35,53,51,53,51,21, 19,51,21,20,7,6,43,1,53,50,53,52,53,35,254,86, 22,9,15,25,15,39,29,89,11,1,71,71,83,53,100,48, 20,24,8,55,55,2,12,68,254,153,38,6,3,4,70,7, 67,7,9,1,140,68,144,144,1,20,103,76,32,13,38,78, 4,4,0,1,0,21,0,0,2,81,2,217,0,7,0,0, 1,17,35,17,35,53,33,21,1,98,93,240,2,60,2,135, 253,121,2,135,82,82,0,1,0,14,255,233,0,254,2,156, 0,23,0,0,19,21,35,17,20,23,22,51,50,55,21,6, 35,34,39,38,53,17,35,53,51,53,51,21,254,86,22,9, 15,25,15,39,29,89,11,1,71,71,83,2,12,68,254,153, 38,6,3,4,70,7,67,7,9,1,140,68,144,144,255,255, 0,85,255,233,2,133,3,105,16,39,1,247,0,203,0,156, 16,6,0,56,0,0,255,255,0,65,255,233,1,226,2,156, 16,38,1,247,112,207,16,6,0,88,0,0,0,2,0,85, 255,233,2,133,3,132,0,21,0,25,0,0,1,51,17,20, 7,6,35,34,39,38,53,17,51,17,20,23,22,51,50,55, 54,53,3,21,33,53,2,40,93,104,72,105,165,73,41,93, 110,34,42,124,45,19,50,254,238,2,217,254,0,130,65,45, 101,58,81,2,0,254,0,117,31,10,80,34,44,2,171,70, 70,0,0,2,0,65,255,233,1,226,2,189,0,23,0,27, 0,0,33,35,53,6,7,6,35,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,39,21,33,53,1,226, 75,56,74,20,25,107,41,19,83,59,22,27,85,38,20,83, 71,254,238,73,79,13,4,70,32,41,1,148,254,141,70,24, 9,78,42,57,1,41,177,70,70,0,255,255,0,85,255,233, 2,133,3,136,16,39,1,243,0,200,0,172,16,6,0,56, 0,0,255,255,0,65,255,233,1,226,2,187,16,38,1,243, 108,223,16,6,0,88,0,0,0,3,0,85,255,233,2,133, 3,185,0,21,0,38,0,54,0,0,1,51,17,20,7,6, 35,34,39,38,53,17,51,17,20,23,22,51,50,55,54,53, 3,50,31,1,22,21,20,7,6,35,34,39,38,53,52,55, 54,23,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,2,40,93,104,72,105,165,73,41,93,110,34,42,124,45, 19,187,50,26,9,3,43,21,24,48,27,13,42,21,25,29, 12,3,27,8,9,29,12,3,28,8,2,217,254,0,130,65, 45,101,58,81,2,0,254,0,117,31,10,80,34,44,2,224, 43,23,11,11,49,26,12,42,21,25,47,27,13,44,27,8, 8,29,11,4,27,8,8,31,10,3,0,3,0,65,255,233, 1,226,2,242,0,23,0,40,0,56,0,0,33,35,53,6, 7,6,35,34,39,38,53,17,51,17,20,23,22,51,50,55, 54,53,17,51,39,50,31,1,22,21,20,7,6,35,34,39, 38,53,52,55,54,23,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,226,75,56,74,20,25,107,41,19,83, 59,22,27,85,38,20,83,209,50,26,9,3,43,21,24,48, 27,13,42,21,25,29,12,3,27,8,9,29,12,3,28,8, 73,79,13,4,70,32,41,1,148,254,141,70,24,9,78,42, 57,1,41,230,43,23,11,11,49,26,12,42,21,25,47,27, 13,44,27,8,8,29,12,3,27,8,8,31,10,3,0,3, 0,85,255,233,2,133,3,171,0,21,0,25,0,29,0,0, 1,51,17,20,7,6,35,34,39,38,53,17,51,17,20,23, 22,51,50,55,54,53,3,51,7,35,37,51,7,35,2,40, 93,104,72,105,165,73,41,93,110,34,42,124,45,19,223,113, 149,60,1,14,113,149,60,2,217,254,0,130,65,45,101,58, 81,2,0,254,0,117,31,10,80,34,44,2,210,150,150,150, 0,3,0,65,255,233,2,18,2,228,0,23,0,27,0,31, 0,0,33,35,53,6,7,6,35,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,39,51,7,35,37,51, 7,35,1,226,75,56,74,20,25,107,41,19,83,59,22,27, 85,38,20,83,239,113,149,60,1,14,113,149,60,73,79,13, 4,70,32,41,1,148,254,141,70,24,9,78,42,57,1,41, 216,150,150,150,0,1,0,85,255,51,2,133,2,217,0,40, 0,0,5,21,6,35,34,39,38,53,52,55,54,55,6,35, 34,39,38,53,17,51,17,20,23,22,51,50,55,54,53,17, 51,17,20,7,6,7,6,21,20,51,50,2,90,48,27,33, 37,63,59,6,8,57,44,168,73,40,93,110,34,42,124,45, 19,93,50,15,48,65,72,37,150,45,10,13,24,56,52,41, 4,5,13,102,57,81,2,0,254,0,117,31,10,80,34,44, 2,0,254,0,84,67,20,46,62,44,54,0,0,1,0,65, 255,52,2,9,2,12,0,42,0,0,1,17,6,7,6,21, 20,23,22,51,50,55,21,7,35,34,39,38,53,52,55,35, 53,6,7,6,35,34,39,38,53,17,51,17,20,23,22,51, 50,55,54,53,17,1,226,59,15,3,45,10,12,23,26,51, 1,96,30,10,96,22,56,74,20,25,107,41,19,83,59,22, 27,85,38,20,2,12,253,244,34,52,11,11,40,10,2,10, 45,9,54,18,21,61,50,73,79,13,4,70,32,41,1,148, 254,141,70,24,9,78,42,57,1,41,255,255,0,22,0,0, 3,161,3,151,16,39,1,239,1,56,0,178,16,6,0,58, 0,0,255,255,0,6,0,0,2,196,2,202,16,39,1,239, 0,194,255,229,16,6,0,90,0,0,255,255,0,13,0,0, 2,149,3,151,16,39,1,239,0,174,0,178,16,6,0,60, 0,0,255,255,0,20,255,38,1,222,2,202,16,38,1,239, 86,229,16,6,0,92,0,0,0,3,0,13,0,0,2,149, 3,146,0,8,0,12,0,16,0,0,1,17,35,17,1,51, 27,1,51,37,21,35,53,33,21,35,53,1,131,93,254,231, 115,214,208,111,254,163,104,1,10,104,1,30,254,226,1,30, 1,187,254,157,1,99,185,103,103,103,103,0,0,2,0,28, 0,0,2,71,3,171,0,9,0,13,0,0,1,21,1,33, 21,33,53,1,33,53,37,51,7,35,2,69,254,76,1,182, 253,213,1,182,254,102,1,35,113,149,60,2,217,84,253,205, 82,82,2,53,82,210,148,0,0,2,0,31,0,0,1,201, 2,228,0,9,0,13,0,0,1,21,1,33,21,33,53,1, 33,53,55,51,7,35,1,187,254,201,1,69,254,86,1,57, 254,220,226,113,149,60,2,12,74,254,135,73,75,1,120,73, 216,148,0,2,0,28,0,0,2,71,3,147,0,9,0,13, 0,0,1,21,1,33,21,33,53,1,33,53,37,21,35,53, 2,69,254,76,1,182,253,213,1,182,254,102,1,59,104,2, 217,84,253,205,82,82,2,53,82,186,104,104,0,2,0,31, 0,0,1,201,2,204,0,9,0,13,0,0,1,21,1,33, 21,33,53,1,33,53,55,21,35,53,1,187,254,201,1,69, 254,86,1,57,254,220,251,104,2,12,74,254,135,73,75,1, 120,73,192,104,104,0,0,2,0,28,0,0,2,71,3,172, 0,9,0,16,0,0,1,21,1,33,21,33,53,1,33,53, 37,35,39,51,23,55,51,2,69,254,76,1,182,253,213,1, 182,254,102,1,54,95,96,63,81,79,64,2,217,84,253,205, 82,82,2,53,82,61,150,96,96,0,0,2,0,31,0,0, 1,201,2,229,0,9,0,16,0,0,1,21,1,33,21,33, 53,1,33,53,55,35,39,51,23,55,51,1,187,254,201,1, 69,254,86,1,57,254,220,246,95,96,63,81,79,64,2,12, 74,254,135,73,75,1,120,73,67,150,96,96,0,1,0,18, 0,0,1,2,2,220,0,17,0,0,51,35,17,35,53,51, 53,52,55,54,51,50,23,21,38,35,34,21,171,83,70,70, 74,22,27,23,24,19,10,58,1,200,68,89,88,24,7,5, 69,1,53,0,255,255,0,26,255,233,2,45,2,217,16,71, 0,211,2,71,0,0,192,0,64,0,255,255,0,79,0,0, 2,112,2,217,16,6,2,105,0,0,0,2,0,54,255,233, 2,11,2,217,0,15,0,34,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,17,33,21,33,21, 54,51,50,23,22,21,20,7,6,35,34,39,21,1,27,83, 39,24,69,33,44,84,42,27,72,37,254,239,1,135,254,204, 57,105,128,59,37,91,57,80,107,59,1,205,84,50,69,125, 52,26,79,51,70,127,53,25,254,52,2,217,73,203,86,108, 68,99,161,77,49,90,67,0,0,2,0,0,0,0,2,112, 2,217,0,10,0,31,0,0,55,51,50,55,54,53,52,39, 38,43,1,53,21,51,50,23,22,21,20,7,6,35,33,17, 7,53,55,53,51,21,55,21,172,212,81,41,24,65,35,46, 212,165,250,32,4,84,61,85,254,198,79,79,93,172,82,62, 35,46,84,39,21,170,88,173,24,28,114,65,47,1,221,52, 77,52,175,113,113,76,0,2,255,247,255,233,2,11,2,217, 0,15,0,40,0,0,1,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,39,21,54,51,50,23,22,21,20,7, 6,35,34,39,21,35,17,7,53,55,53,51,21,55,21,1, 27,83,39,24,69,33,44,84,42,27,72,37,190,57,105,128, 59,37,91,57,80,107,59,75,63,63,83,66,1,205,84,50, 69,125,52,26,79,51,70,127,53,25,127,134,86,108,68,99, 161,77,49,90,67,2,31,50,64,50,122,78,51,64,255,255, 0,48,255,233,2,165,2,229,16,15,0,38,2,213,2,206, 192,0,0,2,0,48,255,233,2,237,2,229,0,15,0,47, 0,0,1,53,52,55,54,51,50,23,21,38,35,34,7,6, 29,1,49,35,38,39,38,39,34,7,6,21,20,23,22,51, 50,55,54,55,54,55,51,2,33,34,39,38,53,52,55,54, 51,50,2,63,73,24,30,23,24,19,10,51,6,1,95,15, 38,54,90,128,61,40,95,59,83,109,51,6,4,22,11,96, 33,254,245,141,82,106,102,82,149,238,1,247,89,92,28,9, 5,79,1,40,6,7,82,75,35,44,2,115,75,112,170,79, 49,77,8,9,42,71,254,223,85,109,185,183,111,91,0,1, 0,31,255,233,2,46,2,44,0,40,0,0,1,54,51,50, 23,21,38,35,34,7,6,29,1,35,38,47,1,34,7,6, 21,20,23,22,51,50,55,51,6,7,6,35,34,39,38,53, 52,55,54,51,50,1,148,25,82,23,24,19,10,51,6,1, 84,13,84,27,94,35,16,79,29,39,107,21,84,11,104,43, 56,129,62,41,92,59,82,84,1,238,62,5,69,1,40,6, 7,82,97,15,2,100,46,63,137,45,17,126,137,46,20,105, 70,101,160,77,49,0,255,255,0,20,0,0,2,155,2,217, 16,6,0,146,0,0,255,255,0,78,0,0,2,112,2,217, 16,71,2,105,2,190,0,0,192,0,64,0,255,255,0,54, 255,233,2,11,2,217,16,71,1,68,2,65,0,0,192,0, 64,0,255,255,0,90,0,0,2,101,2,217,16,71,0,40, 2,191,0,0,192,0,64,0,0,2,0,38,255,233,2,230, 2,229,0,30,0,39,0,0,19,54,55,54,51,50,31,1, 22,21,20,7,6,7,6,35,34,39,38,53,52,55,33,38, 39,38,35,34,7,6,7,5,33,22,23,22,51,50,55,54, 47,29,123,82,108,174,97,26,56,82,20,24,91,135,167,98, 87,1,2,97,9,101,63,86,130,72,32,14,1,249,254,0, 19,101,59,77,129,72,44,1,196,160,77,52,123,38,96,131, 148,105,26,20,77,117,104,161,17,9,156,73,45,102,45,60, 149,141,65,38,100,60,0,1,0,48,255,233,2,109,2,229, 0,57,0,0,1,35,34,7,6,21,20,23,22,23,22,51, 50,55,54,53,52,53,51,6,7,6,35,34,39,38,39,38, 53,52,55,54,55,38,53,52,55,54,51,50,23,22,21,35, 38,39,38,35,34,15,1,6,21,20,23,22,59,1,1,156, 108,81,51,31,43,4,5,45,89,117,51,38,88,1,42,76, 169,132,73,64,13,3,109,10,11,105,104,64,91,176,63,28, 88,1,109,32,40,104,41,12,6,48,49,61,88,1,65,59, 35,36,56,38,4,3,31,61,45,62,3,2,94,57,104,56, 51,84,16,16,114,51,5,4,45,108,124,56,34,111,49,66, 111,29,8,62,24,17,20,47,45,45,0,2,0,2,255,38, 2,67,2,217,0,13,0,23,0,0,55,51,17,20,7,6, 35,34,39,53,22,51,50,53,19,17,35,17,33,21,33,21, 33,21,90,93,88,29,36,13,15,17,3,68,93,93,1,233, 254,116,1,92,224,254,179,79,23,7,3,81,1,59,1,152, 254,180,2,217,82,233,82,0,0,1,0,11,255,44,2,30, 2,226,0,33,0,0,1,21,35,3,6,7,6,7,34,39, 55,22,51,50,55,54,55,19,35,53,51,55,54,55,54,51, 50,23,7,38,35,34,15,1,1,211,126,75,19,46,58,77, 36,19,17,25,26,69,24,1,2,78,113,125,22,16,45,51, 64,35,44,30,32,20,71,23,12,1,206,70,254,115,103,47, 55,2,10,84,16,97,8,8,1,157,70,104,80,44,48,19, 79,18,126,70,0,2,0,44,255,233,3,18,2,229,0,15, 0,57,0,0,1,53,52,55,54,51,50,23,21,38,35,34, 7,6,29,1,23,17,35,39,6,35,34,39,38,53,52,55, 54,55,54,51,50,23,22,23,35,38,39,38,35,34,7,6, 21,20,23,22,23,22,23,50,55,54,61,1,35,53,2,100, 73,24,30,23,24,19,10,51,6,1,10,59,23,104,145,153, 94,87,102,14,16,85,133,179,81,33,12,95,21,95,42,53, 132,71,53,61,8,8,72,112,114,66,49,222,1,252,89,92, 28,9,5,79,1,40,6,7,82,123,254,123,97,116,114,104, 162,176,110,15,13,70,118,49,66,98,36,17,104,78,115,126, 84,10,9,72,2,80,60,84,20,82,0,1,0,58,0,0, 1,246,2,220,0,21,0,0,51,17,52,55,54,51,50,23, 21,38,35,34,21,17,55,51,7,19,35,3,7,21,58,74, 22,27,23,24,19,10,58,222,107,182,214,103,177,81,2,101, 88,24,7,5,69,1,53,254,208,222,181,254,169,1,28,80, 204,0,0,1,255,244,255,38,2,134,2,217,0,19,0,0, 23,17,51,1,17,51,17,35,1,17,20,7,6,35,34,39, 53,22,51,50,76,101,1,125,88,105,254,135,99,22,27,13, 15,17,3,66,76,3,37,253,172,2,84,253,39,2,79,253, 68,87,18,4,3,76,1,0,0,1,0,70,255,56,1,231, 2,27,0,23,0,0,19,51,21,54,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,17,35,70,77, 54,76,20,24,105,42,19,83,59,21,28,84,37,21,84,2, 12,88,85,14,4,70,32,41,253,172,2,51,70,24,9,77, 42,58,254,223,0,3,0,38,255,233,2,230,2,229,0,18, 0,27,0,36,0,0,1,50,31,1,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,1,38,39,38,35,34,7, 6,7,5,33,22,23,22,51,50,55,54,1,133,174,97,26, 56,82,20,24,91,135,167,98,87,111,95,1,148,9,101,63, 86,129,72,50,6,2,3,253,254,15,99,62,81,129,73,46, 2,229,123,38,96,131,148,105,26,20,77,117,104,161,184,107, 91,254,156,156,73,45,101,71,102,70,145,69,42,100,65,0, 0,3,0,54,255,38,2,72,2,80,0,15,0,34,0,50, 0,0,1,53,52,55,54,51,50,23,21,38,35,34,7,6, 29,1,1,17,51,21,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,17,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,1,164,86,15,16,23,24,19,10,51,6, 1,254,69,77,59,108,127,60,38,89,39,52,21,23,97,64, 146,83,39,24,69,33,44,84,42,26,71,35,1,128,89,100, 16,3,5,69,1,40,6,7,82,253,166,2,230,79,94,111, 71,104,154,75,33,10,4,78,254,239,2,167,84,50,69,125, 52,26,81,50,69,127,53,26,255,255,0,48,255,233,2,109, 2,229,16,71,0,54,2,157,0,0,192,0,64,0,255,255, 0,34,255,233,1,203,2,27,16,71,0,86,1,237,0,0, 192,0,64,0,0,1,0,28,0,0,2,71,2,217,0,11, 0,0,19,3,53,33,21,33,19,3,33,21,33,53,247,217, 2,13,254,102,219,219,1,182,253,213,1,109,1,24,84,82, 254,230,254,229,82,82,0,1,0,14,255,38,0,254,2,156, 0,33,0,0,23,38,39,17,35,53,51,53,51,21,51,21, 35,17,20,23,22,51,50,55,21,20,7,6,35,34,39,53, 22,51,50,55,54,53,170,80,5,71,71,83,86,86,22,9, 15,25,15,114,14,16,13,15,17,3,52,11,5,22,15,67, 1,140,68,144,144,68,254,153,38,6,3,4,163,96,12,1, 3,71,1,32,14,23,0,1,0,14,255,233,0,255,2,220, 0,33,0,0,19,21,51,21,35,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,35,53,51,53,52,55,54,51, 50,23,21,38,35,34,168,86,86,22,9,15,25,15,39,29, 89,11,1,71,71,74,22,27,23,24,19,10,58,2,94,82, 68,254,153,38,6,3,4,70,7,67,7,9,1,140,68,89, 88,24,7,5,69,1,0,2,0,21,255,38,2,81,2,217, 0,13,0,21,0,0,37,17,20,51,50,55,21,6,35,34, 39,38,53,17,19,17,35,17,35,53,33,21,1,98,68,3, 17,15,13,118,28,7,93,93,240,2,60,224,254,212,59,1, 81,3,70,18,21,1,77,1,167,253,121,2,135,82,82,0, 255,255,0,89,0,0,5,3,3,172,16,39,1,63,2,188, 0,0,16,6,0,39,0,0,255,255,0,89,0,0,4,141, 2,229,16,39,1,64,2,196,0,0,16,6,0,39,0,0, 255,255,0,26,255,233,3,245,2,229,16,39,1,64,2,44, 0,0,16,6,0,71,0,0,255,255,0,80,255,233,3,214, 2,217,16,39,0,45,2,44,0,0,16,6,0,47,0,0, 255,255,0,80,255,38,2,197,2,217,16,39,0,77,2,44, 0,0,16,6,0,47,0,0,255,255,0,68,255,38,1,119, 2,217,16,39,0,77,0,222,0,0,16,6,0,79,0,0, 255,255,0,76,255,233,4,110,2,217,16,39,0,45,2,196, 0,0,16,6,0,49,0,0,255,255,0,76,255,38,3,107, 2,217,16,39,0,77,2,210,0,0,16,6,0,49,0,0, 255,255,0,70,255,38,2,197,2,217,16,39,0,77,2,44, 0,0,16,6,0,81,0,0,255,255,0,17,0,0,2,141, 3,163,16,39,1,240,0,174,0,190,16,6,0,36,0,0, 255,255,0,42,255,233,2,23,2,217,16,38,1,240,112,244, 16,6,0,68,0,0,255,255,0,3,0,0,1,34,3,163, 16,39,1,240,255,240,0,190,16,6,0,44,0,0,255,255, 255,249,0,0,1,24,2,217,16,38,1,240,230,244,16,6, 0,243,0,0,255,255,0,38,255,233,2,230,3,163,16,39, 1,240,0,226,0,190,16,6,0,50,0,0,255,255,0,36, 255,233,1,254,2,217,16,38,1,240,110,244,16,6,0,82, 0,0,255,255,0,85,255,233,2,133,3,163,16,39,1,240, 0,202,0,190,16,6,0,56,0,0,255,255,0,65,255,233, 1,226,2,217,16,38,1,240,111,244,16,6,0,88,0,0, 255,255,0,85,255,233,2,133,4,0,16,39,0,113,0,200, 1,67,16,6,0,158,0,0,255,255,0,65,255,233,1,226, 3,57,16,38,0,113,109,124,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,78,16,39,0,118,0,243,1,106, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,135, 16,39,0,118,0,152,0,163,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,80,16,39,1,240,0,202,1,107, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,137, 16,39,1,240,0,112,0,164,16,6,0,190,0,0,255,255, 0,85,255,233,2,133,4,78,16,39,0,67,0,164,1,106, 16,6,0,158,0,0,255,255,0,65,255,233,1,226,3,135, 16,39,0,67,0,73,0,163,16,6,0,190,0,0,255,255, 0,40,255,233,2,1,2,27,16,15,0,72,2,41,2,4, 192,0,255,255,0,17,0,0,2,141,4,0,16,39,0,113, 0,170,1,67,16,6,0,134,0,0,255,255,0,42,255,233, 2,23,3,57,16,38,0,113,108,124,16,6,0,166,0,0, 255,255,0,17,0,0,2,141,3,227,16,39,0,113,0,172, 1,38,16,39,1,244,0,170,0,169,16,6,0,36,0,0, 255,255,0,42,255,233,2,23,3,25,16,38,0,113,110,92, 16,38,1,244,108,223,16,6,0,68,0,0,255,255,0,11, 0,0,3,182,3,83,16,39,0,113,1,200,0,150,16,6, 0,136,0,0,255,255,0,34,255,233,3,77,2,137,16,39, 0,113,1,18,255,204,16,6,0,168,0,0,255,255,0,44, 255,233,2,197,3,163,16,39,1,240,0,232,0,190,16,6, 0,42,0,0,255,255,0,29,255,38,1,233,2,217,16,38, 1,240,90,244,16,6,0,74,0,0,255,255,0,79,0,0, 2,146,3,163,16,39,1,240,0,204,0,190,16,6,0,46, 0,0,255,255,255,212,0,0,1,246,3,151,16,39,1,240, 255,193,0,178,16,6,0,78,0,0,255,255,0,38,255,35, 2,230,2,229,16,39,1,246,0,201,255,240,16,6,0,50, 0,0,255,255,0,36,255,35,1,254,2,27,16,38,1,246, 84,240,16,6,0,82,0,0,255,255,0,38,255,35,2,230, 3,83,16,39,0,113,0,224,0,150,16,39,1,246,0,201, 255,240,16,6,0,50,0,0,255,255,0,36,255,35,1,254, 2,137,16,38,0,113,107,204,16,38,1,246,84,240,16,6, 0,82,0,0,255,255,255,223,255,38,0,254,2,202,16,38, 1,240,204,229,16,6,8,70,0,0,255,255,0,89,0,0, 5,25,2,217,16,39,0,61,2,210,0,0,16,6,0,39, 0,0,255,255,0,89,0,0,4,155,2,217,16,39,0,93, 2,210,0,0,16,6,0,39,0,0,255,255,0,26,255,233, 3,245,2,217,16,39,0,93,2,44,0,0,16,6,0,71, 0,0,255,255,0,44,255,233,2,197,3,161,16,39,0,118, 1,16,0,189,16,6,0,42,0,0,255,255,0,29,255,38, 1,233,2,215,16,39,0,118,0,130,255,243,16,6,0,74, 0,0,255,255,0,76,0,0,2,134,3,161,16,39,0,67, 0,160,0,189,16,6,0,49,0,0,255,255,0,70,0,0, 1,231,2,215,16,38,0,67,78,243,16,6,0,81,0,0, 255,255,0,17,0,0,2,141,4,117,16,39,0,118,0,213, 1,145,16,6,0,135,0,0,255,255,0,42,255,233,2,23, 3,174,16,39,0,118,0,153,0,202,16,6,0,167,0,0, 255,255,0,11,0,0,3,182,3,161,16,39,0,118,1,243, 0,189,16,6,0,136,0,0,255,255,0,34,255,233,3,77, 2,215,16,39,0,118,1,61,255,243,16,6,0,168,0,0, 255,255,0,30,255,233,2,232,3,175,16,39,0,118,1,12, 0,203,16,6,0,154,0,0,255,255,0,18,255,226,2,17, 2,215,16,39,0,118,0,151,255,243,16,6,0,186,0,0, 255,255,254,250,0,0,2,141,3,163,16,39,2,4,0,106, 0,191,16,6,0,36,0,0,255,255,254,188,255,233,2,23, 2,217,16,38,2,4,44,245,16,6,0,68,0,0,255,255, 255,110,0,0,2,141,3,148,16,47,1,243,0,170,5,233, 192,0,16,6,0,36,0,0,255,255,255,48,255,233,2,23, 2,202,16,47,1,243,0,108,5,31,192,0,16,6,0,68, 0,0,255,255,255,0,0,0,2,101,3,163,16,39,2,4, 0,112,0,191,16,6,0,40,0,0,255,255,254,193,255,233, 2,1,2,217,16,38,2,4,49,245,16,6,0,72,0,0, 255,255,255,115,0,0,2,101,3,148,16,47,1,243,0,175, 5,233,192,0,16,6,0,40,0,0,255,255,255,52,255,233, 2,1,2,202,16,47,1,243,0,112,5,31,192,0,16,6, 0,72,0,0,255,255,254,60,0,0,0,194,3,163,16,39, 2,4,255,172,0,191,16,6,0,44,0,0,255,255,254,49, 0,0,0,178,2,217,16,38,2,4,161,245,16,6,0,243, 0,0,255,255,254,176,0,0,0,194,3,148,16,47,1,243, 255,236,5,233,192,0,16,6,0,44,0,0,255,255,254,164, 0,0,0,178,2,202,16,47,1,243,255,224,5,31,192,0, 16,6,0,243,0,0,255,255,255,46,255,233,2,230,3,163, 16,39,2,4,0,158,0,191,16,6,0,50,0,0,255,255, 254,185,255,233,1,254,2,217,16,38,2,4,41,245,16,6, 0,82,0,0,255,255,255,162,255,233,2,230,3,148,16,47, 1,243,0,222,5,233,192,0,16,6,0,50,0,0,255,255, 255,44,255,233,1,254,2,202,16,47,1,243,0,104,5,31, 192,0,16,6,0,82,0,0,255,255,254,174,0,0,2,167, 3,163,16,39,2,4,0,30,0,191,16,6,0,53,0,0, 255,255,254,108,0,0,1,65,2,217,16,38,2,4,220,245, 16,6,0,85,0,0,255,255,255,34,0,0,2,167,3,148, 16,47,1,243,0,94,5,233,192,0,16,6,0,53,0,0, 255,255,254,224,0,0,1,65,2,202,16,47,1,243,0,28, 5,31,192,0,16,6,0,85,0,0,255,255,255,22,255,233, 2,133,3,163,16,39,2,4,0,134,0,191,16,6,0,56, 0,0,255,255,254,186,255,233,1,226,2,217,16,38,2,4, 42,245,16,6,0,88,0,0,255,255,255,138,255,233,2,133, 3,148,16,47,1,243,0,198,5,233,192,0,16,6,0,56, 0,0,255,255,255,46,255,233,1,226,2,202,16,47,1,243, 0,106,5,31,192,0,16,6,0,88,0,0,0,2,0,48, 254,227,2,109,2,229,0,54,0,67,0,0,1,35,38,39, 38,35,34,15,1,6,21,20,23,22,31,1,22,23,22,21, 20,7,6,7,6,35,34,39,38,39,51,23,22,23,22,51, 50,55,54,55,54,53,52,47,2,38,53,52,55,54,51,50, 23,22,1,51,21,20,7,6,35,53,50,53,52,53,35,2, 84,88,1,109,32,40,104,41,12,6,54,25,41,183,120,28, 7,58,11,11,73,132,169,76,42,1,88,3,7,28,51,117, 89,45,44,7,1,110,24,181,143,104,64,91,176,63,28,254, 207,100,59,17,24,55,55,2,3,111,29,8,62,24,17,20, 56,28,13,11,49,33,97,25,28,84,63,11,9,56,104,57, 94,38,41,33,61,31,31,56,7,7,76,35,7,48,37,133, 124,56,34,111,49,253,127,103,88,25,8,38,78,4,4,0, 0,2,0,34,254,227,1,203,2,27,0,48,0,61,0,0, 1,35,38,35,34,7,6,21,20,23,22,31,1,22,23,22, 21,20,7,6,35,34,39,38,53,51,22,23,22,51,50,55, 54,53,52,47,2,38,39,38,53,52,55,54,51,50,23,22, 3,51,21,20,7,6,35,53,50,53,52,53,35,1,182,88, 3,102,82,23,6,66,14,17,80,118,23,7,90,52,74,194, 14,1,88,6,18,33,71,84,28,10,54,27,78,119,31,16, 84,49,68,145,35,10,241,100,59,17,24,55,55,1,122,84, 49,14,16,45,22,4,4,19,28,70,21,27,96,44,26,162, 8,9,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,254,41,103,88,25,8,38,78,4,4,0, 0,2,0,21,254,227,2,81,2,217,0,7,0,20,0,0, 1,17,35,17,35,53,33,21,1,51,21,20,7,6,35,53, 50,53,52,53,35,1,98,93,240,2,60,254,179,100,59,17, 24,55,55,2,135,253,121,2,135,82,82,253,61,103,88,25, 8,38,78,4,4,0,0,2,0,14,254,227,0,254,2,156, 0,23,0,36,0,0,19,21,35,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,35,53,51,53,51,21,3,51, 21,20,7,6,35,53,50,53,52,53,35,254,86,22,9,15, 25,15,39,29,89,11,1,71,71,83,57,100,59,17,24,55, 55,2,12,68,254,153,38,6,3,4,70,7,67,7,9,1, 140,68,144,144,253,184,103,88,25,8,38,78,4,4,255,255, 0,83,0,0,2,132,3,163,16,39,1,240,0,201,0,190, 16,6,0,43,0,0,255,255,0,70,0,0,1,230,3,151, 16,39,1,240,0,116,0,178,16,6,0,75,0,0,255,255, 0,17,0,0,2,141,3,117,16,39,1,244,0,170,0,169, 16,6,0,36,0,0,255,255,0,42,255,233,2,23,2,171, 16,38,1,244,108,223,16,6,0,68,0,0,255,255,0,90, 255,49,2,101,2,217,16,39,0,122,0,168,0,7,16,6, 0,40,0,0,255,255,0,40,255,26,2,1,2,27,16,38, 0,122,94,240,16,6,0,72,0,0,255,255,0,38,255,233, 2,230,4,0,16,39,0,113,0,225,1,67,16,6,0,152, 0,0,255,255,0,36,255,233,1,254,3,57,16,38,0,113, 108,124,16,6,0,184,0,0,255,255,0,38,255,233,2,230, 4,2,16,39,0,113,0,231,1,69,16,6,0,151,0,0, 255,255,0,36,255,233,1,254,3,59,16,38,0,113,114,126, 16,6,0,183,0,0,255,255,0,38,255,233,2,230,3,117, 16,39,1,244,0,222,0,169,16,6,0,50,0,0,255,255, 0,36,255,233,1,254,2,171,16,38,1,244,105,223,16,6, 0,82,0,0,255,255,0,38,255,233,2,230,3,227,16,39, 0,113,0,224,1,38,16,39,1,244,0,222,0,169,16,6, 0,50,0,0,255,255,0,36,255,233,1,254,3,25,16,38, 0,113,107,92,16,38,1,244,105,223,16,6,0,82,0,0, 255,255,0,13,0,0,2,149,3,83,16,39,0,113,0,172, 0,150,16,6,0,60,0,0,255,255,0,20,255,38,1,222, 2,137,16,38,0,113,84,204,16,6,0,92,0,0,255,255, 0,42,255,233,2,23,2,27,16,15,0,68,2,65,2,4, 192,0,0,2,0,26,255,242,1,229,2,26,0,19,0,35, 0,0,19,52,55,54,51,50,23,53,51,17,35,53,6,15, 1,34,35,34,39,38,37,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,26,86,54,80,90,66,83,83,57,61, 49,1,1,85,62,60,1,115,58,38,53,74,38,23,55,41, 56,81,34,17,1,2,159,74,47,80,66,253,244,57,54,12, 5,86,84,107,111,59,38,89,55,66,96,60,45,96,48,0, 255,255,0,68,255,242,2,15,2,26,16,15,1,193,2,41, 2,12,192,0,0,3,0,54,255,233,2,11,2,220,0,13, 0,30,0,46,0,0,19,53,52,55,54,51,50,23,21,38, 35,34,29,1,35,51,21,54,51,50,23,22,21,20,7,6, 35,34,39,21,35,19,34,7,6,21,20,23,22,51,50,55, 54,53,52,39,38,54,74,22,27,23,24,19,10,58,83,83, 57,105,128,59,37,91,57,80,107,59,75,229,83,39,24,69, 33,44,84,42,27,72,37,2,12,89,88,24,7,5,69,1, 53,82,71,86,108,68,99,161,77,49,90,67,1,205,84,50, 69,125,52,26,79,51,70,127,53,25,255,255,0,31,255,233, 1,221,2,27,16,15,0,70,1,252,2,4,192,0,0,2, 0,26,255,38,2,76,2,217,0,17,0,46,0,0,1,34, 7,6,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 19,6,7,6,35,34,39,38,53,52,55,54,51,50,23,17, 51,17,20,23,22,51,50,55,21,6,35,34,53,1,9,85, 41,20,5,1,70,36,47,83,39,24,72,33,114,58,86,11, 12,130,60,38,89,57,79,108,53,83,42,13,18,3,17,15, 13,139,1,205,82,38,51,16,16,122,54,27,82,50,69,131, 51,23,254,120,83,8,1,112,71,103,154,75,47,81,1,15, 252,219,56,10,3,1,71,3,109,0,0,2,0,26,255,233, 2,70,2,220,0,17,0,46,0,0,1,34,7,6,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,55,17,35,53, 6,7,6,35,34,39,38,53,52,55,54,51,50,23,53,52, 55,54,51,50,23,21,38,35,34,1,9,85,41,20,5,1, 70,36,47,83,39,24,72,33,188,74,58,86,11,12,130,60, 38,89,57,79,108,53,74,22,27,23,24,19,10,58,1,205, 82,38,51,16,16,122,54,27,82,50,69,131,51,23,145,253, 162,69,83,8,1,112,71,103,154,75,47,81,155,88,24,7, 5,69,1,0,255,255,0,40,255,233,2,1,2,27,16,71, 0,72,2,41,0,0,192,0,64,0,255,255,0,40,255,233, 2,1,2,27,16,15,0,72,2,41,2,4,192,0,255,255, 0,34,255,233,1,203,2,27,16,71,2,143,1,237,0,0, 192,0,64,0,255,255,0,34,255,233,1,203,2,27,16,6, 2,143,0,0,0,3,0,29,255,38,2,64,2,138,0,15, 0,55,0,71,0,0,1,53,52,55,54,51,50,23,21,38, 35,34,7,6,29,1,39,51,17,20,7,6,7,6,7,6, 35,34,39,38,39,51,22,23,22,51,50,55,54,61,1,6, 15,1,34,39,38,39,38,53,52,55,54,51,50,23,39,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,156, 86,15,16,23,24,19,10,51,6,1,77,77,41,7,7,48, 109,11,11,138,50,17,4,85,6,26,36,59,81,35,30,59, 73,27,83,61,3,3,66,85,57,81,98,62,151,88,37,20, 78,29,39,89,35,18,82,27,1,186,89,100,16,3,5,69, 1,40,6,7,82,82,254,74,154,64,10,9,60,6,1,88, 31,39,39,21,28,49,41,102,27,82,10,2,64,3,3,77, 129,153,79,54,91,14,90,48,66,139,47,18,92,46,63,150, 43,14,255,255,0,29,255,38,1,233,2,27,16,6,0,74, 0,0,255,255,0,70,255,51,1,230,2,12,16,15,0,75, 2,44,2,12,192,0,0,2,0,70,0,0,1,230,2,220, 0,13,0,37,0,0,19,53,52,55,54,51,50,23,21,38, 35,34,29,1,35,51,21,54,55,54,51,50,23,22,21,17, 35,17,52,39,38,35,34,7,6,21,17,35,70,74,22,27, 23,24,19,10,58,83,83,54,66,21,27,110,39,16,83,34, 32,42,84,37,21,83,2,12,89,88,24,7,5,69,1,53, 82,72,70,13,4,74,30,39,254,116,1,107,55,24,24,77, 42,58,254,223,0,1,0,70,255,38,1,230,2,220,0,45, 0,0,5,17,52,39,38,35,34,7,6,21,17,35,17,52, 55,54,51,50,23,21,38,35,34,29,1,54,55,54,51,50, 23,22,21,17,20,7,34,35,34,39,53,22,51,50,55,54, 1,147,34,32,42,84,37,21,83,74,22,27,23,24,19,10, 58,54,66,21,27,110,39,16,128,7,8,13,15,17,3,52, 11,5,76,1,183,55,24,24,77,42,58,254,223,2,101,88, 24,7,5,69,1,53,154,70,13,4,74,30,39,254,7,103, 6,3,71,1,32,14,0,2,255,248,0,0,0,230,2,217, 0,3,0,15,0,0,19,21,35,53,19,53,51,21,51,21, 35,21,35,53,35,53,150,84,1,83,80,80,83,75,2,217, 105,105,254,95,212,212,72,240,240,72,0,1,0,66,255,233, 0,235,2,12,0,15,0,0,19,17,20,23,22,51,50,55, 21,6,35,34,39,38,53,17,149,22,9,15,25,15,39,29, 89,11,1,2,12,254,85,38,6,3,4,70,7,67,7,9, 1,208,255,255,0,94,0,0,0,178,2,12,16,6,0,243, 0,0,0,1,0,68,255,38,0,240,2,217,0,15,0,0, 23,17,51,17,20,23,22,51,50,55,21,6,35,34,39,38, 68,84,32,13,23,3,17,15,13,134,9,1,109,3,70,252, 219,53,11,5,1,71,3,96,6,0,255,255,0,70,255,241, 2,250,2,12,16,15,0,80,3,64,2,12,192,0,0,1, 0,70,255,56,2,250,2,12,0,40,0,0,5,35,17,6, 15,1,34,39,38,39,6,15,1,34,39,38,53,17,51,17, 20,23,22,51,50,55,54,53,17,51,17,20,23,22,51,50, 55,54,53,17,51,2,250,77,54,74,33,89,43,5,4,54, 63,44,122,25,5,84,63,16,18,62,37,24,84,71,12,14, 62,37,24,84,200,1,18,76,11,2,65,7,8,65,11,4, 98,22,26,1,137,254,151,81,19,5,56,36,45,1,73,254, 151,87,15,3,56,36,45,1,73,0,0,2,0,70,255,38, 2,250,2,27,0,15,0,58,0,0,37,51,17,20,7,6, 35,34,39,53,22,51,50,55,54,53,1,51,21,54,55,54, 51,50,23,22,23,54,55,54,51,50,23,22,21,17,35,17, 52,39,38,35,34,7,6,21,17,35,17,52,39,38,35,34, 7,6,21,17,35,2,166,84,114,14,16,13,15,17,3,52, 11,5,253,160,77,54,74,15,18,89,43,5,4,54,63,20, 24,122,25,5,84,63,16,18,61,37,25,84,71,12,14,62, 37,24,84,224,254,179,96,12,1,3,71,1,32,14,23,2, 88,74,76,11,2,65,7,8,65,11,4,98,22,26,254,119, 1,105,81,19,5,54,37,46,254,183,1,105,87,15,3,56, 36,45,254,183,0,2,255,238,255,38,1,231,2,27,0,15, 0,39,0,0,55,51,17,20,7,6,35,34,39,53,22,51, 50,55,54,53,17,51,21,54,55,54,51,50,23,22,21,17, 35,17,52,39,38,35,34,7,6,21,17,35,70,84,114,14, 16,13,15,17,3,52,11,5,77,54,76,20,24,105,42,19, 83,59,21,28,84,37,21,84,224,254,179,96,12,1,3,71, 1,32,14,23,2,88,88,85,14,4,70,32,41,254,116,1, 107,70,24,9,77,42,58,254,223,0,0,2,0,70,255,38, 2,64,2,27,0,15,0,39,0,0,37,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,1,51,21,54,55,54, 51,50,23,22,21,17,35,17,52,39,38,35,34,7,6,21, 17,35,1,232,32,13,23,3,17,15,13,134,9,1,254,178, 77,54,76,20,24,105,42,19,83,59,21,28,84,37,21,84, 224,254,212,53,11,5,1,71,3,96,6,7,1,77,1,44, 88,85,14,4,70,32,41,254,116,1,107,70,24,9,77,42, 58,254,223,0,0,3,0,36,255,233,1,254,2,27,0,15, 0,24,0,33,0,0,1,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,38,39,38,35,34,7,6,7,5, 33,22,23,22,51,50,55,54,1,16,152,57,29,102,56,79, 144,60,33,105,55,226,12,87,23,27,92,38,15,4,1,41, 254,216,11,80,26,31,91,38,15,2,27,129,65,91,167,71, 39,119,67,95,174,70,37,249,131,32,9,91,35,46,70,119, 35,12,89,33,255,255,0,69,255,241,1,65,2,12,16,15, 0,85,1,134,2,12,192,0,0,1,0,69,255,241,1,65, 2,217,0,17,0,0,33,35,53,6,7,6,35,34,39,53, 54,55,54,55,54,53,17,51,1,65,77,58,58,13,14,11, 21,72,31,3,3,59,84,95,93,14,3,3,85,1,21,2, 2,43,110,1,221,0,0,2,0,69,255,38,1,153,2,12, 0,13,0,31,0,0,33,21,20,23,22,51,50,55,21,6, 35,34,61,1,51,35,53,6,7,6,35,34,39,53,54,55, 54,55,54,53,17,51,1,65,32,13,23,3,17,15,13,137, 77,77,58,58,13,14,11,21,72,31,3,3,59,84,76,53, 11,5,1,71,3,109,109,95,93,14,3,3,85,1,21,2, 2,43,110,1,16,0,0,1,0,69,255,56,1,65,2,27, 0,17,0,0,19,51,21,54,55,54,51,50,23,21,6,7, 6,7,6,21,17,35,69,77,58,58,13,14,11,21,72,31, 3,3,59,84,2,12,95,93,14,3,3,85,1,21,2,2, 43,110,254,40,0,1,0,69,255,38,1,65,2,27,0,29, 0,0,23,17,51,21,54,55,54,51,50,23,21,6,7,6, 7,6,21,17,20,23,22,51,50,55,21,6,35,34,39,38, 69,77,58,58,13,14,11,21,72,31,3,3,59,32,13,23, 3,17,15,13,134,9,1,109,2,121,95,93,14,3,3,85, 1,21,2,2,43,110,254,164,53,11,5,1,71,3,96,6, 0,1,0,84,0,0,1,0,2,27,0,15,0,0,51,35, 17,52,55,54,51,50,23,21,38,35,34,15,1,21,168,84, 114,14,16,13,15,17,3,52,11,5,1,174,96,12,1,3, 71,1,32,28,9,0,255,255,0,84,0,0,1,0,2,27, 16,71,1,223,1,84,0,0,192,0,64,0,0,1,255,202, 255,40,1,203,2,27,0,61,0,0,55,21,20,7,6,35, 34,39,53,22,51,50,55,54,61,1,51,22,23,22,51,50, 55,54,53,52,47,2,38,39,38,53,52,55,54,51,50,23, 22,21,35,38,35,34,7,6,21,20,23,22,31,1,22,23, 22,21,20,7,6,35,34,118,114,14,16,13,15,17,3,52, 11,5,88,6,18,33,71,84,28,10,54,27,78,119,31,16, 84,49,68,145,35,10,88,3,102,82,23,6,66,14,17,80, 118,23,7,90,52,74,77,2,109,96,12,1,3,71,1,32, 14,23,230,47,20,35,47,16,19,46,19,8,19,29,51,28, 43,93,42,25,101,27,33,84,49,14,16,45,22,4,4,19, 28,70,21,27,96,44,26,0,0,2,0,0,255,38,1,2, 2,220,0,15,0,37,0,0,55,51,17,20,7,6,35,34, 39,53,22,51,50,55,54,53,19,21,35,17,35,17,35,53, 51,53,52,55,54,51,50,23,21,38,35,34,29,1,88,84, 114,14,16,13,15,17,3,52,11,5,170,87,83,70,70,74, 22,27,23,24,19,10,58,224,254,179,96,12,1,3,71,1, 32,14,23,2,88,68,254,56,1,200,68,89,88,24,7,5, 69,1,53,82,0,2,0,0,255,38,1,2,2,220,0,15, 0,37,0,0,55,51,17,20,7,6,35,34,39,53,22,51, 50,55,54,53,19,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,88,84,114,14,16,13, 15,17,3,52,11,5,170,87,83,70,70,74,22,27,23,24, 19,10,58,224,254,179,96,12,1,3,71,1,32,14,23,2, 88,68,254,56,1,200,68,89,88,24,7,5,69,1,53,82, 0,1,0,0,255,38,1,2,2,220,0,23,0,0,19,52, 35,34,7,53,54,51,50,23,22,21,17,20,23,22,51,50, 55,21,6,35,38,39,87,58,10,19,24,23,91,25,7,32, 13,23,3,17,15,13,138,5,2,94,53,1,69,5,71,22, 26,253,79,53,11,5,1,71,3,7,102,0,255,255,0,14, 255,233,0,254,2,156,16,15,0,87,1,12,2,133,192,0, 0,1,0,14,255,38,0,254,2,156,0,23,0,0,19,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,254,86,22,9,15,25,15,39,29,89, 11,1,71,71,83,2,12,68,253,214,38,6,3,4,70,7, 67,7,9,2,79,68,144,144,255,255,0,65,255,233,1,226, 2,12,16,6,0,88,0,0,255,255,0,10,0,0,1,230, 2,12,16,15,0,89,1,240,2,12,192,0,255,255,0,6, 0,0,2,196,2,12,16,15,0,90,2,202,2,12,192,0, 255,255,0,20,0,0,1,222,2,230,16,15,0,92,1,242, 2,12,192,0,0,1,0,31,255,40,2,33,2,12,0,23, 0,0,41,1,53,1,33,53,33,21,1,33,21,20,23,22, 51,50,55,21,6,35,34,39,38,53,1,117,254,170,1,57, 254,220,1,135,254,201,1,69,32,13,23,3,17,15,13,134, 9,1,75,1,120,73,74,254,135,147,53,11,5,1,71,3, 96,6,7,0,0,1,0,36,0,0,1,208,2,14,0,11, 0,0,37,33,21,35,17,51,21,33,53,51,17,35,1,125, 254,251,84,83,1,6,83,83,236,236,2,14,218,218,253,242, 255,255,0,58,0,0,1,246,2,217,16,15,0,78,2,48, 2,217,192,0,0,2,0,26,255,38,2,70,2,138,0,15, 0,44,0,0,1,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,23,53,52,55,54,51,50,23,21,38,35,34, 7,6,21,17,35,17,6,35,34,39,38,53,52,55,54,51, 50,1,10,84,42,27,70,36,47,82,40,24,71,33,110,86, 15,16,23,24,19,10,51,6,1,83,57,105,128,59,37,91, 57,80,104,1,205,81,51,71,122,54,27,81,50,69,131,51, 24,3,73,100,16,3,5,69,1,40,6,7,253,26,1,22, 83,108,68,99,161,77,49,0,0,1,0,20,2,79,1,51, 2,229,0,6,0,0,19,51,23,35,39,7,35,116,95,96, 63,81,79,64,2,229,150,96,96,0,0,1,0,19,2,79, 1,50,2,229,0,6,0,0,19,35,39,51,23,55,51,210, 95,96,63,81,79,64,2,79,150,96,96,0,255,255,0,92, 2,80,1,45,2,228,16,6,0,118,0,0,255,255,0,22, 2,80,0,231,2,228,16,6,0,67,0,0,0,1,0,15, 2,85,1,60,2,220,0,13,0,0,19,51,22,51,50,55, 54,53,51,6,35,34,39,38,15,59,8,84,77,13,1,59, 11,141,86,42,20,2,220,66,57,4,5,135,57,28,0,1, 0,115,2,100,0,219,2,204,0,3,0,0,19,21,35,53, 219,104,2,204,104,104,0,2,0,79,2,67,0,255,2,242, 0,16,0,32,0,0,19,50,31,1,22,21,20,7,6,35, 34,39,38,53,52,55,54,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,167,50,26,9,3,43,21,24,48, 27,13,42,21,25,29,12,3,27,8,9,29,12,3,28,8, 2,242,43,23,11,11,49,26,12,42,21,25,47,27,13,44, 27,8,8,29,12,3,27,8,8,31,10,3,0,1,0,57, 255,51,1,9,0,0,0,19,0,0,59,1,6,7,6,21, 20,51,50,55,21,6,35,34,39,38,53,52,55,54,154,70, 73,14,7,72,37,26,48,28,33,36,63,74,11,41,31,15, 19,54,10,45,10,13,24,57,64,37,6,0,0,1,0,5, 2,101,1,63,2,205,0,21,0,0,1,51,6,35,34,39, 38,35,34,7,35,54,55,54,51,50,23,22,23,22,51,50, 1,5,58,15,74,21,64,35,14,23,10,58,16,59,5,6, 23,42,2,3,39,24,25,2,205,104,25,13,37,93,9,1, 17,1,1,18,0,2,255,221,2,78,1,92,2,228,0,3, 0,7,0,0,19,51,7,35,37,51,7,35,61,113,149,60, 1,14,113,149,60,2,228,150,150,150,255,255,254,201,2,80, 255,154,2,228,16,7,0,67,254,179,0,0,255,255,255,15, 2,80,255,224,2,228,16,7,0,118,254,179,0,0,255,255, 254,199,2,79,255,230,2,229,16,7,1,239,254,179,0,0, 255,255,254,184,2,101,255,242,2,205,16,7,1,247,254,179, 0,0,255,255,254,207,2,119,255,225,2,189,16,7,0,113, 254,179,0,0,255,255,254,194,2,85,255,239,2,220,16,7, 1,243,254,179,0,0,255,255,255,38,2,100,255,142,2,204, 16,7,1,244,254,179,0,0,255,255,254,209,2,100,255,219, 2,203,16,7,0,106,254,179,0,0,255,255,255,2,2,67, 255,178,2,242,16,7,1,245,254,179,0,0,255,255,254,144, 2,78,0,15,2,228,16,7,1,248,254,179,0,0,255,255, 254,198,2,79,255,229,2,229,16,7,1,240,254,179,0,0, 0,2,254,144,2,78,0,15,2,228,0,3,0,7,0,0, 3,23,35,39,35,23,35,39,81,96,60,149,61,96,60,149, 2,228,150,150,150,150,255,255,254,194,2,85,255,239,2,220, 16,15,1,243,255,254,5,49,192,0,255,255,1,198,2,71, 2,23,2,228,16,15,2,7,1,77,5,43,192,0,0,1, 255,54,2,71,255,135,2,228,0,10,0,0,3,51,21,20, 35,53,50,55,54,53,35,202,81,81,28,8,5,41,2,228, 69,88,42,14,11,20,255,255,1,198,2,71,2,23,2,228, 16,71,2,7,1,77,0,0,192,0,64,0,0,1,255,28, 254,227,255,128,255,196,0,12,0,0,7,51,21,20,7,6, 35,53,50,53,52,53,35,228,100,59,17,24,55,55,60,103, 88,25,8,38,78,4,4,0,255,255,254,218,255,42,255,210, 0,0,16,7,0,122,254,179,0,0,255,255,254,236,255,51, 255,188,0,0,16,7,1,246,254,179,0,0,0,1,0,39, 2,68,0,156,3,12,0,3,0,0,19,7,39,55,156,106, 11,66,2,204,136,64,136,0,0,1,0,22,255,62,0,139, 0,6,0,3,0,0,23,55,23,7,22,106,11,66,130,136, 64,136,0,1,0,129,255,3,1,29,255,181,0,17,0,0, 5,20,15,1,34,35,34,61,1,51,22,21,23,22,51,54, 63,1,1,29,27,27,9,19,74,76,1,6,5,15,21,2, 5,192,47,9,5,79,99,106,2,21,12,1,5,18,255,255, 0,110,255,109,0,215,2,12,16,6,0,30,0,0,0,1, 0,174,2,73,0,255,2,208,0,3,0,0,1,7,35,39, 0,255,22,41,18,2,208,135,135,0,255,255,0,75,2,67, 1,85,3,75,16,38,2,16,253,123,16,6,0,106,45,223, 255,255,0,8,0,0,2,166,2,208,16,38,2,16,196,0, 16,6,2,27,0,0,0,1,0,89,0,200,0,188,1,48, 0,15,0,0,19,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,138,32,13,4,30,9,10,31,13,5,30,9, 1,47,30,10,11,34,14,4,30,10,12,34,13,4,255,255, 255,212,0,0,2,102,2,208,16,39,2,16,255,38,0,0, 16,6,2,31,0,0,255,255,255,185,0,0,2,113,2,208, 16,39,2,16,255,11,0,0,16,6,2,33,0,0,255,255, 255,194,0,0,0,163,2,208,16,39,2,16,255,20,0,0, 16,6,2,35,0,0,255,255,255,240,255,248,2,222,2,208, 16,39,2,16,255,66,0,0,16,6,2,41,0,0,255,255, 255,158,255,254,2,151,2,208,16,39,2,16,254,240,0,0, 16,6,2,46,0,0,255,255,255,250,255,255,2,192,2,208, 16,39,2,16,255,76,0,0,16,6,2,50,0,0,255,255, 255,223,255,248,1,14,3,95,16,39,2,16,255,145,0,143, 16,38,0,106,193,243,16,6,2,66,0,0,0,2,0,8, 0,0,2,166,2,204,0,7,0,15,0,0,33,35,39,33, 7,35,1,51,19,3,38,39,6,7,6,7,2,166,106,84, 254,212,78,102,1,20,102,72,104,13,9,16,61,26,13,218, 218,2,204,254,90,1,24,37,31,86,156,68,38,0,0,3, 0,74,0,0,2,103,2,204,0,22,0,35,0,44,0,0, 37,20,15,1,6,35,33,17,33,50,31,1,22,23,22,21, 20,7,6,7,22,23,22,39,52,39,38,39,38,43,1,21, 51,50,55,54,23,52,39,38,43,1,21,51,50,2,103,62, 13,60,134,254,240,1,12,148,59,16,2,2,11,85,7,8, 37,21,77,129,51,9,9,35,70,144,156,63,27,72,30,109, 31,42,166,178,170,212,94,59,11,48,2,204,80,27,6,5, 36,28,96,48,4,4,12,14,53,219,69,25,5,2,9,216, 8,20,236,98,19,5,246,0,0,1,0,82,0,0,2,54, 2,204,0,5,0,0,1,33,17,35,17,33,2,54,254,124, 96,1,228,2,120,253,136,2,204,0,0,2,0,13,255,255, 2,171,2,204,0,5,0,14,0,0,33,37,4,35,1,51, 19,3,38,39,38,39,6,7,3,2,171,254,226,254,143,15, 1,20,102,154,169,12,9,8,10,11,27,152,2,2,2,204, 253,136,1,188,32,27,17,38,65,73,254,92,0,1,0,80, 0,0,2,102,2,204,0,11,0,0,41,1,17,33,21,33, 21,33,21,33,21,33,2,102,253,234,2,6,254,88,1,140, 254,116,1,184,2,204,84,220,84,244,0,1,0,35,0,0, 2,89,2,204,0,11,0,0,41,1,53,1,54,55,33,53, 33,21,1,33,2,89,253,202,1,112,43,31,254,112,2,0, 254,68,1,200,88,1,202,55,31,84,84,253,220,0,0,1, 0,65,0,0,2,113,2,204,0,11,0,0,33,35,17,33, 17,35,17,51,17,33,17,51,2,113,94,254,140,94,94,1, 116,94,1,82,254,174,2,204,254,218,1,38,0,3,0,45, 255,243,2,217,2,201,0,19,0,36,0,40,0,0,1,20, 7,6,35,34,39,38,39,38,53,52,55,54,51,50,23,22, 23,20,5,20,23,22,51,50,55,54,53,52,47,1,38,35, 34,7,6,5,33,53,33,2,217,106,93,143,90,75,80,48, 49,108,90,144,139,96,104,3,253,180,86,64,94,149,66,31, 89,29,54,72,162,57,27,1,156,254,176,1,80,1,93,170, 102,89,36,37,79,77,125,184,102,85,86,92,175,5,15,141, 76,55,130,62,89,152,78,21,33,141,65,107,82,0,0,1, 0,69,0,0,0,163,2,204,0,3,0,0,51,35,17,51, 163,94,94,2,204,0,0,1,0,74,0,0,2,154,2,204, 0,11,0,0,33,35,1,7,21,35,17,51,17,1,51,1, 2,154,126,254,254,114,94,94,1,98,120,254,222,1,106,114, 248,2,204,254,158,1,98,254,222,0,0,1,0,8,255,255, 2,166,2,188,0,10,0,0,33,35,3,48,23,3,6,7, 35,1,51,2,166,106,240,1,154,32,37,102,1,20,102,2, 115,1,254,77,87,104,2,188,0,1,0,64,0,0,2,236, 2,204,0,15,0,0,33,35,17,3,35,3,17,35,17,51, 19,22,23,55,19,51,2,236,92,208,86,206,92,144,168,27, 7,38,172,128,2,88,253,168,2,98,253,158,2,204,254,6, 69,37,114,1,242,0,0,1,0,56,0,0,2,108,2,204, 0,9,0,0,33,35,1,17,35,17,51,1,17,51,2,108, 96,254,136,92,98,1,120,90,2,50,253,206,2,204,253,206, 2,50,0,3,0,65,255,255,2,100,2,187,0,3,0,7, 0,11,0,0,1,33,53,33,3,33,53,33,19,33,53,33, 2,83,253,238,2,18,57,254,103,1,153,73,253,222,2,34, 2,105,82,254,131,82,254,112,82,0,0,2,0,50,255,248, 2,222,2,190,0,17,0,35,0,0,19,52,55,54,51,50, 23,22,23,22,21,20,7,6,35,34,39,38,55,20,23,22, 51,50,55,54,53,52,39,38,39,38,35,34,7,6,50,111, 90,141,88,78,77,50,49,106,94,142,181,94,67,96,86,64, 94,149,66,31,102,2,3,55,82,161,58,27,1,82,182,99, 82,37,38,80,78,122,167,99,87,124,91,128,138,73,54,127, 61,87,160,75,2,2,38,138,64,0,0,1,0,80,255,255, 2,128,2,188,0,7,0,0,33,35,17,33,17,35,17,33, 2,128,94,254,140,94,2,48,2,105,253,151,2,188,0,2, 0,78,255,255,2,112,2,188,0,14,0,25,0,0,1,20, 7,34,43,1,17,35,17,33,50,23,22,23,22,7,52,39, 38,43,1,21,51,50,55,54,2,112,252,8,8,184,94,1, 14,127,52,16,14,67,98,82,26,62,184,186,141,22,5,1, 242,206,7,254,227,2,188,28,8,12,58,100,91,27,6,251, 86,19,0,1,0,40,255,254,2,94,2,189,0,14,0,0, 5,33,53,19,39,53,33,21,33,22,23,22,23,3,33,2, 94,253,202,236,202,2,0,254,112,37,116,32,21,242,1,200, 1,86,1,35,243,82,82,38,142,38,25,254,217,0,0,1, 0,39,255,254,2,95,2,187,0,7,0,0,1,35,17,35, 17,35,53,33,2,95,238,94,236,2,56,2,105,253,150,2, 106,82,0,1,0,21,255,254,2,151,2,187,0,11,0,0, 9,1,17,35,17,1,51,23,22,23,54,55,2,151,254,232, 92,254,242,112,159,29,21,62,151,2,186,254,110,254,214,1, 42,1,146,243,46,39,103,225,0,3,0,29,255,254,2,176, 2,191,0,21,0,30,0,41,0,0,1,20,7,6,35,21, 35,53,34,39,38,53,52,55,54,51,53,51,21,50,23,22, 7,52,39,38,39,17,54,55,54,5,17,6,7,6,7,6, 21,20,23,22,2,176,82,82,124,83,124,82,82,93,81,115, 81,135,83,71,91,92,46,59,112,53,32,254,232,111,54,23, 7,2,91,46,1,88,122,75,77,71,71,77,74,123,129,81, 69,80,80,91,77,106,112,56,28,6,254,99,11,84,50,145, 1,157,11,80,35,43,16,17,117,59,29,0,0,1,0,36, 0,0,2,168,2,176,0,21,0,0,33,35,3,7,49,15, 1,35,1,3,51,23,22,23,54,55,54,55,54,55,51,3, 2,168,116,207,19,14,176,112,1,16,238,109,153,22,9,15, 13,13,120,21,13,102,246,1,36,31,21,240,1,103,1,72, 211,32,18,27,16,19,154,27,18,254,188,0,0,1,0,52, 255,253,2,182,2,186,0,35,0,0,1,20,7,6,7,6, 43,1,21,35,53,35,34,39,38,39,38,53,17,23,17,20, 23,22,59,1,17,51,17,51,50,55,54,53,17,55,2,182, 40,40,64,32,74,24,94,24,105,48,13,14,70,90,67,35, 60,26,86,26,113,31,18,90,1,100,88,50,53,15,9,144, 144,27,7,11,57,113,1,86,2,254,184,103,29,15,1,219, 254,37,59,32,56,1,72,2,0,1,0,42,255,255,2,192, 2,181,0,41,0,0,19,52,55,54,51,50,23,22,23,22, 21,20,7,6,7,51,21,33,53,54,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,23,21,33,53,51,38,39,38, 47,87,91,141,110,77,111,31,9,142,17,19,176,254,238,92, 46,47,83,65,97,123,65,46,115,26,31,254,248,174,143,22, 4,1,95,139,99,103,48,72,133,41,43,171,91,11,10,73, 77,36,74,77,90,131,76,60,104,71,95,156,84,20,14,77, 73,85,136,28,255,255,255,239,0,0,0,249,3,136,16,39, 0,106,255,209,0,189,16,6,2,35,0,0,255,255,0,21, 255,254,2,151,3,136,16,39,0,106,0,178,0,189,16,6, 2,46,0,0,255,255,0,48,255,243,2,71,2,208,16,38, 2,16,86,0,16,6,2,58,0,0,255,255,0,39,255,246, 1,220,2,208,16,38,2,16,63,0,16,6,2,62,0,0, 255,255,0,24,255,74,1,242,2,208,16,38,2,16,91,0, 16,6,2,64,0,0,255,255,0,56,255,248,1,14,2,208, 16,38,2,16,143,0,16,6,2,66,0,0,255,255,0,40, 255,242,1,222,3,95,16,39,2,16,0,48,0,143,16,38, 0,106,96,243,16,6,2,78,0,0,0,2,0,48,255,243, 2,71,2,18,0,34,0,50,0,0,5,34,39,38,61,1, 38,53,7,6,7,6,35,34,39,38,53,52,55,54,55,54, 51,22,31,1,53,51,17,20,51,50,55,23,6,3,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,1,247,51, 12,2,1,17,14,41,39,50,213,14,1,21,33,97,35,42, 111,51,8,72,21,11,12,21,43,116,41,34,73,127,15,2, 122,10,10,116,27,7,13,41,8,10,9,5,5,27,17,17, 16,241,16,17,53,67,104,32,12,2,70,16,78,254,91,31, 9,69,21,1,23,67,66,55,156,19,21,177,14,1,126,33, 0,2,0,50,255,58,1,248,2,220,0,24,0,50,0,0, 37,20,7,6,35,34,39,38,39,21,35,17,52,55,54,55, 54,51,50,23,22,21,6,7,22,3,50,55,54,53,52,39, 38,43,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,19,22,1,248,81,52,73,86,49,13,14,86,35,11,15, 53,86,137,45,18,8,96,158,224,105,23,6,39,47,76,50, 42,94,30,10,34,33,48,59,41,27,1,31,200,119,58,37, 40,11,15,250,2,176,112,52,16,15,47,98,39,51,122,34, 30,254,214,92,23,27,71,30,35,74,76,26,32,56,28,30, 41,27,106,254,170,83,0,1,0,25,255,58,2,11,2,18, 0,18,0,0,1,3,21,35,53,3,38,35,34,7,39,52, 55,50,23,22,23,27,1,2,11,188,86,167,9,16,13,13, 6,42,47,20,20,19,118,144,2,6,254,26,230,230,1,152, 14,6,70,7,5,18,20,52,254,208,1,126,0,2,0,37, 255,240,2,17,2,206,0,23,0,42,0,0,37,20,7,6, 35,34,39,38,53,52,55,54,51,50,23,39,53,33,21,33, 23,22,23,22,39,34,7,6,7,20,23,22,59,1,50,55, 54,55,54,53,52,39,38,2,17,120,53,81,105,68,65,148, 38,27,10,24,211,1,142,254,243,175,56,20,76,248,90,42, 20,2,95,24,29,28,47,22,54,12,3,82,33,250,190,53, 23,68,67,123,191,55,11,4,151,72,72,127,41,22,77,53, 84,43,55,142,34,8,16,40,92,19,19,122,41,17,0,1, 0,39,255,246,1,220,2,20,0,45,0,0,37,6,7,6, 35,34,53,52,55,38,53,52,55,54,55,51,50,23,22,23, 35,38,39,38,35,34,21,22,23,22,59,1,21,35,34,7, 6,7,20,23,22,51,50,55,54,55,1,220,15,106,42,60, 214,102,102,119,39,56,9,148,45,15,6,76,7,99,21,23, 129,9,61,23,35,46,46,92,25,8,3,104,12,13,101,36, 11,2,136,109,27,10,146,95,30,29,96,111,26,8,1,78, 28,40,60,13,3,85,66,15,6,59,48,16,23,74,9,1, 45,14,17,0,0,1,0,38,255,62,1,184,2,206,0,36, 0,0,5,20,7,39,54,53,52,39,38,35,34,39,38,53, 52,55,54,55,35,53,33,21,6,7,6,21,20,23,22,23, 22,23,22,23,22,23,22,1,184,38,76,34,30,13,23,87, 92,77,135,47,58,224,1,100,129,79,72,46,43,52,14,18, 75,26,2,3,31,42,55,97,28,69,33,46,10,4,61,50, 113,192,146,51,37,72,60,73,121,111,117,74,40,34,10,2, 2,6,21,2,3,31,0,1,0,24,255,74,1,242,2,19, 0,30,0,0,5,39,17,52,39,38,35,34,21,17,35,17, 52,35,34,7,39,54,51,50,31,2,54,51,50,23,22,23, 22,21,1,242,88,10,25,73,138,88,22,6,10,14,30,31, 49,16,5,1,67,97,147,26,3,1,1,182,24,1,218,53, 27,58,170,254,228,1,158,37,3,72,11,55,31,15,100,124, 17,18,7,44,0,3,0,45,255,244,1,234,2,218,0,15, 0,22,0,31,0,0,1,50,19,22,21,16,7,6,35,34, 39,38,39,38,53,18,23,34,17,33,52,39,38,19,33,20, 23,22,51,50,55,54,1,12,201,19,2,100,49,73,139,50, 11,8,15,7,216,137,1,19,29,29,58,254,237,80,24,33, 98,26,14,2,218,254,206,31,33,254,244,70,34,128,30,38, 72,104,1,108,66,255,0,108,76,72,254,184,209,45,14,119, 65,0,0,1,0,56,255,248,1,14,2,8,0,16,0,0, 55,20,23,22,59,1,54,55,23,6,35,34,39,38,53,17, 51,144,19,7,19,7,16,28,30,46,44,107,15,2,88,136, 27,20,10,2,13,81,21,108,15,18,1,131,0,1,0,66, 0,0,1,240,2,6,0,11,0,0,33,35,3,7,21,35, 17,51,21,55,51,7,1,240,108,172,62,88,88,208,114,198, 1,10,60,206,2,6,210,210,192,0,0,1,0,30,255,246, 2,44,2,220,0,40,0,0,37,6,35,34,47,1,53,39, 38,39,6,7,6,7,35,19,38,39,38,39,38,35,34,15, 1,55,54,51,50,23,22,23,22,31,1,19,23,22,51,50, 55,2,44,48,33,50,18,13,88,23,11,25,91,18,12,96, 198,24,12,13,20,13,26,19,24,11,10,33,23,53,32,8, 10,32,32,9,152,14,9,19,15,19,14,24,48,29,1,236, 64,54,87,249,48,36,2,8,69,17,19,12,7,6,2,82, 12,30,7,12,39,89,25,254,102,28,19,11,0,1,0,78, 255,56,1,242,2,6,0,28,0,0,5,34,39,38,39,21, 35,17,51,21,20,23,22,23,22,51,50,55,54,55,54,61, 1,51,17,35,53,6,7,1,32,65,39,8,10,88,88,12, 19,61,13,15,35,33,33,8,17,86,80,39,58,12,42,9, 13,252,2,206,218,120,35,61,13,3,22,22,25,55,106,220, 253,250,62,61,10,0,0,1,0,14,0,0,1,232,2,6, 0,10,0,0,1,3,35,3,51,19,22,23,54,55,19,1, 232,196,82,196,92,115,17,12,30,4,114,2,6,253,250,2, 6,254,194,52,44,89,9,1,60,0,0,1,0,15,255,62, 1,185,2,206,0,59,0,0,5,20,7,39,54,55,54,53, 52,39,38,43,1,34,39,38,53,52,53,54,55,54,55,38, 39,38,53,52,55,54,55,35,53,33,21,35,34,7,6,21, 20,23,22,59,1,21,35,34,7,6,21,20,23,22,51,50, 23,22,23,20,1,185,39,74,32,2,1,19,18,57,19,144, 59,31,4,50,53,61,75,32,15,52,12,12,100,1,116,166, 50,34,22,91,24,49,82,110,96,53,25,77,38,47,74,31, 69,5,39,61,94,28,81,25,2,12,30,7,9,78,40,56, 7,7,85,47,47,9,11,63,30,36,70,46,10,6,70,70, 56,37,39,76,28,8,64,68,31,43,77,34,17,7,11,80, 5,0,0,2,0,34,255,243,2,6,2,18,0,14,0,30, 0,0,5,34,39,38,53,52,55,54,50,23,22,21,20,7, 6,39,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,20,147,61,34,68,67,214,67,68,93,61,88,101,36, 15,73,33,46,101,36,15,42,40,12,117,65,90,135,68,67, 67,68,135,151,73,48,74,100,42,56,129,47,22,103,42,53, 98,49,51,0,0,1,0,53,255,252,2,105,2,8,0,25, 0,0,37,6,35,34,39,38,53,17,35,17,7,19,35,39, 33,21,35,17,20,23,22,51,50,55,54,55,2,105,48,26, 55,17,18,236,94,1,70,1,2,40,64,11,7,12,12,13, 3,2,14,18,29,29,60,1,80,254,62,2,1,196,70,70, 254,178,39,8,5,9,1,2,0,2,0,57,255,56,2,29, 2,20,0,20,0,36,0,0,1,20,7,6,7,6,7,6, 35,34,39,17,35,17,52,55,54,51,50,23,22,7,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,2,29,23, 30,34,16,27,43,71,99,53,88,71,71,98,140,65,39,90, 44,44,66,67,41,44,43,43,66,65,45,44,1,14,98,46, 58,26,12,15,25,71,254,251,1,214,138,62,62,106,65,97, 96,50,50,50,47,101,100,49,49,48,53,0,0,1,0,22, 255,74,1,245,2,24,0,46,0,0,1,35,52,39,38,35, 34,7,6,21,20,23,22,23,22,23,22,23,22,21,20,7, 39,54,55,54,53,52,39,38,35,38,39,38,47,1,38,39, 38,53,52,55,54,55,50,23,22,1,245,91,83,25,32,87, 43,22,81,24,34,17,90,87,26,23,48,90,26,14,1,72, 5,8,90,48,20,27,8,78,20,5,34,76,146,120,62,41, 1,68,98,28,8,78,40,66,104,46,13,11,5,8,12,30, 25,48,44,110,32,52,56,2,6,27,4,1,4,24,11,19, 6,53,104,28,29,83,58,117,2,81,54,0,0,2,0,34, 255,243,2,78,2,18,0,18,0,34,0,0,5,34,39,38, 53,52,55,54,51,50,23,33,21,35,22,21,20,7,6,39, 50,55,54,53,52,39,38,35,34,7,6,21,20,23,22,1, 20,147,61,34,68,67,107,31,19,1,8,136,64,93,61,88, 101,36,15,73,33,46,101,36,15,42,40,12,117,65,90,135, 68,67,4,82,82,102,151,73,48,74,100,42,56,129,47,22, 103,42,53,98,49,51,0,1,0,42,255,252,1,238,2,6, 0,23,0,0,1,35,17,20,23,22,23,22,51,50,55,23, 6,35,34,39,38,39,38,53,17,35,53,33,1,238,200,11, 3,5,9,22,13,20,19,35,33,80,26,2,2,12,164,1, 196,1,194,254,214,47,13,3,3,6,5,79,10,46,5,5, 30,62,1,50,68,0,0,1,0,40,255,242,1,222,2,6, 0,29,0,0,37,20,7,6,7,6,35,34,39,38,39,38, 53,17,51,17,20,23,22,23,22,51,50,55,54,55,52,53, 17,51,1,222,32,13,47,35,89,95,35,47,13,32,88,20, 6,9,36,61,60,35,32,3,88,198,97,51,16,28,20,20, 28,16,49,99,1,64,254,226,98,29,10,6,27,27,22,91, 12,18,1,30,0,2,0,46,255,56,2,185,2,10,0,36, 0,47,0,0,55,20,23,22,59,1,17,51,50,23,22,21, 20,7,6,7,6,43,1,21,35,53,35,34,39,38,39,38, 53,52,55,54,55,23,6,7,6,5,52,39,38,43,1,17, 51,50,55,54,130,69,48,66,20,88,137,78,61,108,2,2, 55,77,32,88,22,142,73,20,12,18,98,29,33,42,94,20, 4,1,227,69,43,60,20,24,95,46,27,254,91,54,38,1, 195,93,73,107,143,77,1,2,36,190,190,100,28,34,52,46, 134,88,25,17,68,60,91,20,25,101,50,31,254,151,76,44, 0,1,0,14,255,44,2,61,2,26,0,32,0,0,5,6, 43,1,34,47,1,3,35,19,3,38,39,38,35,6,35,53, 55,50,31,2,19,51,3,23,22,23,22,51,50,55,2,61, 25,26,8,66,49,97,184,104,234,149,15,15,11,17,13,11, 56,58,33,7,131,153,96,195,131,6,14,7,25,14,20,200, 12,89,197,254,238,1,104,1,4,28,6,4,4,78,6,49, 11,244,1,28,254,154,251,14,12,10,6,0,0,1,0,42, 255,56,2,108,2,6,0,27,0,0,37,20,7,6,35,21, 35,53,34,39,38,53,17,51,17,20,23,22,51,17,51,17, 50,55,54,53,17,51,2,108,157,40,49,86,199,38,9,90, 68,33,55,86,113,30,13,90,214,169,37,10,198,198,145,32, 39,1,48,254,236,121,33,16,1,172,254,84,78,35,57,1, 20,0,0,1,0,36,255,247,2,192,2,14,0,55,0,0, 37,50,55,54,53,52,39,55,22,23,22,21,20,15,1,6, 35,34,39,6,35,34,39,38,53,52,55,54,55,54,55,23, 6,7,6,7,6,21,20,23,22,51,54,55,54,55,54,61, 1,51,21,20,23,22,23,22,1,254,90,17,3,108,80,51, 36,25,99,9,34,48,96,48,46,98,117,48,25,51,3,4, 25,29,80,69,26,1,2,10,72,17,20,41,14,6,10,28, 84,28,22,17,10,63,122,23,27,148,117,26,41,106,74,64, 166,60,5,19,90,90,114,59,77,99,101,7,7,48,23,26, 69,94,7,7,40,48,137,28,7,2,11,4,9,28,36,223, 223,36,28,20,3,2,255,255,255,223,255,248,1,14,2,190, 16,38,0,106,193,243,16,6,2,66,0,0,255,255,0,40, 255,242,1,222,2,190,16,38,0,106,96,243,16,6,2,78, 0,0,255,255,0,34,255,244,2,6,2,208,16,38,2,16, 64,0,16,6,2,72,0,0,255,255,0,40,255,242,1,222, 2,208,16,38,2,16,53,0,16,6,2,78,0,0,255,255, 0,36,255,247,2,192,2,208,16,39,2,16,0,158,0,0, 16,6,2,82,0,0,255,255,0,90,0,0,2,101,3,149, 16,39,0,67,0,216,0,177,16,6,0,40,0,0,0,3, 0,79,0,0,2,90,3,146,0,11,0,15,0,19,0,0, 19,21,33,21,33,17,33,21,33,21,33,21,1,21,35,53, 33,21,35,53,172,1,174,253,245,1,249,254,100,1,141,254, 246,104,1,10,104,1,76,250,82,2,217,82,233,82,2,70, 103,103,103,103,0,1,0,28,255,108,2,206,2,216,0,32, 0,0,33,20,7,6,7,6,43,1,7,53,51,54,55,53, 19,52,39,35,17,35,3,35,53,33,21,35,21,51,50,23, 22,29,1,2,204,38,12,18,35,63,1,81,99,52,5,1, 66,238,93,1,199,1,234,197,232,99,44,22,71,34,11,10, 21,1,66,10,56,10,1,65,53,4,254,140,2,136,80,80, 194,75,37,44,1,0,0,2,0,90,0,0,2,67,3,149, 0,5,0,9,0,0,51,35,17,33,21,33,19,51,7,35, 183,93,1,233,254,116,143,113,149,60,2,217,82,1,14,148, 0,1,0,48,255,233,2,165,2,229,0,36,0,0,19,22, 23,22,51,50,55,54,55,54,55,51,2,33,34,39,38,53, 52,55,54,51,50,23,35,38,39,38,39,34,7,6,7,6, 7,33,21,142,8,98,56,74,109,51,6,4,22,11,96,33, 254,245,141,82,106,102,82,149,238,43,95,15,38,54,90,126, 61,22,10,5,2,1,108,1,76,163,71,39,77,8,9,42, 71,254,223,85,109,185,183,111,91,238,75,35,44,2,112,39, 50,21,23,82,255,255,0,48,255,233,2,109,2,229,16,6, 0,54,0,0,255,255,0,100,0,0,0,194,2,217,16,6, 0,44,0,0,255,255,0,8,0,0,1,18,3,140,16,39, 0,106,255,234,0,193,16,6,0,44,0,0,255,255,0,17, 255,233,1,170,2,217,16,6,0,45,0,0,0,2,0,83, 0,0,3,254,2,217,0,24,0,35,0,0,33,3,35,20, 7,2,7,6,35,53,50,55,54,39,53,33,17,51,23,22, 23,20,7,6,35,55,52,39,38,43,1,21,51,50,55,54, 2,2,1,225,3,19,139,20,24,82,21,9,1,1,157,144, 62,187,22,56,57,102,122,71,26,34,191,191,65,32,34,2, 135,220,54,254,186,41,6,94,205,91,177,162,254,198,3,23, 181,88,59,61,207,87,28,11,251,35,36,0,0,2,0,83, 0,0,3,204,2,217,0,19,0,30,0,0,33,17,33,17, 35,17,51,17,33,17,51,17,51,23,22,23,20,7,6,35, 55,52,39,38,43,1,21,51,50,55,54,1,225,254,208,94, 93,1,49,93,127,62,187,22,56,57,102,122,71,26,34,174, 174,65,32,34,1,76,254,180,2,217,254,197,1,59,254,198, 3,23,181,88,59,61,207,87,28,11,251,35,36,0,0,1, 0,28,0,0,2,206,2,216,0,19,0,0,1,51,50,23, 22,21,17,35,17,52,39,35,17,35,3,35,53,33,21,35, 1,65,232,99,44,22,93,66,238,93,1,199,1,234,197,1, 198,75,37,44,254,214,1,59,53,4,254,140,2,136,80,80, 0,2,0,79,0,0,2,146,3,149,0,10,0,14,0,0, 51,35,17,51,17,1,51,9,1,35,1,19,51,7,35,172, 93,93,1,107,120,254,100,1,159,110,254,136,186,113,149,60, 2,217,254,197,1,59,254,158,254,137,1,68,2,81,148,0, 0,2,0,76,0,0,2,134,3,149,0,9,0,13,0,0, 19,51,17,1,51,17,35,17,1,35,1,23,35,39,76,88, 1,125,101,88,254,135,105,1,38,96,60,149,2,217,253,172, 2,84,253,39,2,79,253,177,3,149,148,148,0,2,0,26, 0,0,2,107,3,136,0,7,0,21,0,0,51,35,55,3, 51,27,1,51,37,51,22,51,50,55,54,53,51,6,35,34, 39,38,252,113,129,242,113,185,184,111,254,65,59,7,85,77, 13,1,59,11,141,86,42,20,244,1,229,254,133,1,123,175, 66,57,4,5,135,57,28,0,0,1,0,83,255,121,2,133, 2,217,0,11,0,0,33,21,35,53,35,17,51,17,33,17, 51,17,1,148,80,241,94,1,118,94,135,135,2,217,253,121, 2,135,253,39,255,255,0,17,0,0,2,141,2,217,16,6, 0,36,0,0,0,2,0,79,0,0,2,112,2,217,0,16, 0,27,0,0,37,20,7,6,7,6,35,33,17,33,21,33, 21,51,32,23,20,5,51,50,55,54,55,52,39,38,43,1, 2,111,47,5,4,57,102,254,183,1,233,254,116,180,1,10, 5,254,61,227,65,32,32,2,34,32,65,227,218,88,59,5, 5,61,2,217,82,212,207,5,141,35,38,62,63,38,35,0, 255,255,0,79,0,0,2,111,2,217,16,6,0,37,0,0, 0,1,0,79,0,0,2,56,2,217,0,5,0,0,51,35, 17,33,21,33,172,93,1,233,254,116,2,217,82,0,0,2, 0,34,255,121,3,10,2,217,0,5,0,21,0,0,37,33, 17,33,21,6,7,54,55,54,39,53,33,17,51,21,35,53, 33,21,35,53,1,6,1,75,254,250,6,199,85,19,8,1, 1,194,91,80,253,184,80,82,2,53,228,238,107,39,212,86, 158,160,253,113,209,135,135,209,0,1,0,79,0,0,2,90, 2,217,0,11,0,0,19,21,33,21,33,17,33,21,33,21, 33,21,172,1,174,253,245,1,249,254,100,1,141,1,76,250, 82,2,217,82,233,82,0,1,0,63,0,0,3,180,2,217, 0,17,0,0,9,1,35,9,1,51,19,17,51,17,19,51, 9,1,35,1,17,35,1,203,254,226,110,1,69,254,229,116, 238,93,238,116,254,229,1,69,118,254,234,93,1,68,254,188, 1,119,1,98,254,204,1,52,254,204,1,52,254,158,254,137, 1,68,254,188,0,1,0,48,255,233,2,109,2,229,0,57, 0,0,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,35,54,55,54,51,50,23,22,23,22,21,20,7,22,23, 22,21,20,7,6,7,6,35,34,39,38,39,51,23,22,23, 22,51,50,55,54,55,54,53,52,39,38,35,1,1,88,73, 52,33,72,39,52,143,31,8,88,1,122,60,84,157,66,24, 8,4,105,115,14,1,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,51,48,64,1,65,82, 60,40,37,73,32,18,98,23,27,145,54,27,94,33,41,22, 24,108,45,43,106,12,13,84,63,11,9,56,104,57,94,38, 41,33,61,31,31,56,7,7,49,42,39,0,0,1,0,79, 0,0,2,137,2,217,0,9,0,0,19,51,17,1,51,17, 35,17,1,35,79,88,1,125,101,88,254,135,105,2,217,253, 165,2,91,253,39,2,86,253,170,0,0,2,0,79,0,0, 2,137,3,156,0,9,0,23,0,0,19,51,17,1,51,17, 35,17,1,35,19,51,22,51,50,55,54,53,51,6,35,34, 39,38,79,88,1,125,101,88,254,135,105,134,59,8,84,77, 13,1,59,11,141,86,42,20,2,217,253,165,2,91,253,39, 2,86,253,170,3,156,66,57,4,5,135,57,28,0,0,1, 0,79,0,0,2,109,2,217,0,10,0,0,51,35,17,51, 17,1,51,9,1,35,1,172,93,93,1,49,111,254,167,1, 122,124,254,187,2,217,254,206,1,50,254,167,254,128,1,77, 0,1,0,33,255,246,2,82,2,217,0,16,0,0,1,33, 20,7,2,7,6,35,53,50,55,54,39,53,33,17,35,1, 244,254,250,3,19,144,19,20,83,20,9,1,1,194,94,2, 135,223,54,254,173,36,5,94,216,91,175,163,253,39,0,1, 0,79,0,0,2,253,2,217,0,12,0,0,33,35,3,17, 35,17,51,27,1,51,17,35,17,1,216,98,207,88,129,216, 212,129,88,2,99,253,157,2,217,253,133,2,123,253,39,2, 99,0,0,1,0,79,0,0,2,128,2,217,0,11,0,0, 1,33,17,35,17,51,17,33,17,51,17,35,2,34,254,139, 94,93,1,118,94,94,1,76,254,180,2,217,254,197,1,59, 253,39,255,255,0,38,255,233,2,230,2,229,16,6,0,50, 0,0,0,1,0,79,0,0,2,128,2,217,0,7,0,0, 1,33,17,35,17,33,17,35,2,34,254,139,94,2,49,94, 2,135,253,121,2,217,253,39,0,2,0,79,0,0,2,93, 2,217,0,12,0,24,0,0,19,17,35,17,33,50,23,22, 21,20,7,6,35,39,51,50,55,54,53,52,47,1,38,43, 1,172,93,1,45,161,47,17,63,58,83,229,194,102,30,10, 79,34,14,15,194,1,53,254,203,2,217,118,41,55,97,57, 52,82,74,24,30,90,28,8,2,0,255,255,0,48,255,233, 2,165,2,229,16,6,0,38,0,0,255,255,0,21,0,0, 2,81,2,217,16,6,0,55,0,0,0,1,0,26,0,0, 2,107,2,217,0,7,0,0,51,35,55,3,51,27,1,51, 252,113,129,242,113,185,184,111,244,1,229,254,133,1,123,0, 0,3,0,64,0,0,3,61,2,217,0,24,0,33,0,42, 0,0,1,23,22,23,22,21,16,5,6,35,21,35,53,34, 39,38,53,52,55,54,51,50,51,53,51,17,50,55,54,53, 52,39,38,35,3,17,34,7,6,21,20,23,22,1,238,71, 217,39,8,254,221,19,25,95,165,78,92,204,54,68,4,5, 95,126,63,46,144,43,48,95,126,63,46,144,43,2,124,3, 21,171,35,41,254,254,12,1,94,94,58,67,146,211,48,12, 93,253,215,65,47,77,140,38,11,254,134,1,122,65,47,77, 140,38,11,0,255,255,0,22,0,0,2,137,2,217,16,6, 0,59,0,0,0,1,0,79,255,121,2,195,2,217,0,11, 0,0,37,17,51,17,51,21,35,53,33,17,51,17,2,34, 94,67,80,253,220,94,82,2,135,253,113,209,135,2,217,253, 121,0,0,1,0,79,0,0,2,57,2,217,0,15,0,0, 1,35,34,39,38,53,17,51,17,22,23,51,17,51,17,35, 1,220,232,99,44,22,93,10,66,228,93,93,1,19,75,37, 45,1,41,254,197,53,4,1,116,253,39,0,0,1,0,79, 0,0,2,237,2,217,0,11,0,0,37,51,17,51,17,33, 17,51,17,51,17,51,1,205,194,94,253,98,94,194,94,82, 2,135,253,39,2,217,253,121,2,135,0,1,0,79,255,121, 3,48,2,217,0,15,0,0,41,1,17,51,17,51,17,51, 17,51,17,51,17,51,21,35,2,224,253,111,94,194,94,194, 94,67,80,2,217,253,121,2,135,253,121,2,135,253,113,209, 0,2,0,81,0,0,3,89,2,217,0,14,0,25,0,0, 33,17,35,53,33,17,51,50,23,22,21,20,7,6,35,39, 51,50,55,54,53,52,39,38,43,1,1,56,231,1,68,165, 250,32,4,84,61,85,221,212,81,41,24,65,35,46,212,2, 135,82,254,234,173,24,28,114,65,47,82,62,35,46,84,39, 21,0,0,3,0,79,0,0,3,25,2,217,0,12,0,23, 0,27,0,0,37,20,7,6,35,33,17,51,17,51,50,23, 22,5,51,50,55,54,53,52,39,38,43,1,1,17,35,17, 2,111,84,61,85,254,198,93,165,250,32,4,254,61,212,81, 41,24,65,35,46,212,2,109,94,226,114,65,47,2,217,254, 234,173,24,172,62,35,46,84,39,21,1,104,253,39,2,217, 0,2,0,79,0,0,2,112,2,217,0,12,0,23,0,0, 37,20,7,6,35,33,17,51,17,51,50,23,22,5,51,50, 55,54,53,52,39,38,43,1,2,111,84,61,85,254,198,93, 165,250,32,4,254,61,212,81,41,24,65,35,46,212,226,114, 65,47,2,217,254,234,173,24,172,62,35,46,84,39,21,0, 0,1,0,48,255,233,2,165,2,229,0,35,0,0,1,33, 53,33,38,39,38,35,34,15,1,6,7,35,54,51,50,23, 22,21,20,7,6,35,32,3,51,22,23,22,23,22,51,50, 55,54,2,72,254,145,1,108,17,102,47,60,91,50,3,38, 15,95,43,238,149,82,102,106,82,141,254,245,33,96,11,22, 41,102,13,14,129,64,39,1,76,82,159,59,27,43,3,35, 75,238,91,111,183,185,109,85,1,33,71,42,82,11,1,111, 66,0,0,2,0,83,255,233,3,190,2,229,0,26,0,43, 0,0,1,35,17,35,17,51,17,51,54,55,54,51,50,23, 22,21,20,7,6,7,6,7,6,35,34,39,38,1,34,7, 6,21,20,23,22,51,50,55,54,53,52,47,1,38,1,39, 118,94,93,121,21,127,76,104,187,87,59,82,20,24,79,88, 17,19,177,90,61,1,68,141,61,36,102,56,81,139,62,38, 109,32,44,1,76,254,180,2,217,254,197,193,84,50,144,98, 146,148,105,26,20,67,8,2,133,90,1,203,124,73,103,181, 77,42,120,72,104,193,74,18,19,0,0,2,0,32,0,0, 2,111,2,217,0,15,0,26,0,0,9,1,35,1,34,39, 38,39,52,55,54,51,33,17,35,25,1,35,34,7,6,21, 20,23,22,59,1,1,163,254,235,110,1,17,157,51,13,5, 56,57,102,1,73,93,227,65,32,34,34,32,65,227,1,58, 254,198,1,58,134,33,40,88,59,61,253,39,1,58,1,77, 35,36,55,54,36,35,255,255,0,42,255,233,2,23,2,27, 16,6,0,68,0,0,0,2,0,36,255,233,1,254,3,7, 0,32,0,48,0,0,19,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,16,55,54,63,1,54,55,54,53,51,20, 7,6,15,1,6,7,6,23,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,117,44,111,152,57,29,102,56,79, 144,60,33,126,21,24,133,36,15,5,74,17,24,70,135,58, 32,12,151,93,38,19,78,31,41,90,39,21,82,30,1,213, 70,129,65,91,167,71,39,119,67,95,1,78,79,13,6,26, 9,30,10,10,60,25,33,17,29,14,71,27,37,92,48,64, 137,48,19,88,47,66,145,46,16,0,0,3,0,70,0,0, 1,212,2,12,0,16,0,31,0,43,0,0,37,20,7,6, 43,1,17,51,50,23,22,21,20,7,22,23,22,37,51,50, 55,54,55,54,53,52,39,38,39,38,43,1,17,51,50,55, 54,53,52,47,1,38,43,1,1,212,65,38,52,243,219,73, 39,40,69,83,11,2,254,198,98,51,25,24,3,2,22,3, 4,24,52,98,132,46,23,22,10,12,31,38,132,150,85,41, 24,2,12,36,37,59,81,34,32,68,13,143,18,19,15,7, 10,30,18,3,3,19,254,139,26,22,31,34,11,11,20,0, 0,1,0,70,0,0,1,124,2,12,0,5,0,0,19,33, 21,35,17,35,70,1,54,226,84,2,12,76,254,64,0,2, 0,30,255,136,2,60,2,12,0,14,0,20,0,0,55,54, 19,54,53,33,17,51,21,35,53,33,21,35,53,55,51,17, 35,7,6,87,75,6,1,1,83,64,70,254,110,70,173,221, 172,1,7,64,8,1,111,39,46,254,52,184,120,120,184,12, 1,116,142,155,255,255,0,40,255,233,2,1,2,27,16,6, 0,72,0,0,0,1,0,44,0,0,3,21,2,12,0,17, 0,0,1,35,21,39,35,23,1,51,55,21,51,53,23,51, 1,55,35,7,1,202,83,192,107,242,254,238,106,225,83,225, 106,254,238,242,107,192,2,12,201,201,250,254,238,226,226,226, 226,1,18,250,201,0,0,1,0,34,255,233,1,203,2,27, 0,48,0,0,55,53,51,50,55,54,53,52,39,38,35,34, 7,35,54,55,54,51,50,23,22,21,20,7,6,7,22,23, 20,7,6,35,34,39,38,53,51,22,23,22,51,50,55,54, 53,52,39,38,35,192,62,69,22,6,60,23,28,102,3,88, 1,111,34,44,122,53,26,57,4,4,83,3,90,52,74,194, 14,1,88,6,18,33,71,85,26,7,39,28,35,221,76,55, 15,16,53,19,7,84,119,32,10,73,37,50,71,36,3,2, 44,80,96,44,26,162,8,9,47,20,35,50,15,17,37,28, 20,0,0,1,0,70,0,0,1,241,2,12,0,9,0,0, 19,51,17,19,51,17,35,17,3,35,70,84,235,108,83,235, 109,2,12,254,99,1,157,253,244,1,157,254,99,0,0,2, 0,70,0,0,1,241,2,187,0,9,0,23,0,0,19,51, 17,19,51,17,35,17,3,35,19,51,22,51,50,55,54,53, 51,6,35,34,39,38,70,84,235,108,83,235,109,63,59,8, 84,77,13,1,59,11,141,86,42,20,2,12,254,99,1,157, 253,244,1,157,254,99,2,187,66,57,4,5,135,57,28,0, 0,1,0,70,0,0,1,228,2,12,0,10,0,0,19,21, 55,51,7,1,35,39,21,35,17,153,212,96,251,1,18,106, 225,83,2,12,212,212,250,254,238,226,226,2,12,0,0,1, 0,70,255,246,1,231,2,12,0,12,0,0,19,33,17,35, 17,35,7,2,35,53,50,55,54,148,1,83,84,172,2,14, 145,60,13,5,2,12,253,244,1,192,145,254,199,80,186,73, 0,1,0,70,0,0,2,36,2,12,0,12,0,0,19,51, 27,1,51,17,35,17,3,35,3,17,35,70,104,135,135,104, 84,130,50,130,84,2,12,254,186,1,70,253,244,1,107,254, 189,1,67,254,149,0,0,1,0,70,0,0,1,232,2,12, 0,11,0,0,19,51,21,51,53,51,17,35,53,35,21,35, 70,84,250,84,84,250,84,2,12,215,215,253,244,233,233,0, 255,255,0,36,255,233,1,254,2,27,16,6,0,82,0,0, 0,1,0,70,0,0,1,231,2,12,0,7,0,0,19,33, 17,35,17,35,17,35,70,1,161,84,249,84,2,12,253,244, 1,192,254,64,0,2,0,70,255,38,2,27,2,27,0,18, 0,34,0,0,23,17,51,21,54,51,50,23,22,21,20,7, 6,7,6,35,34,39,17,19,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,70,77,59,108,127,60,38,89,39, 52,21,23,97,64,146,83,39,24,69,33,44,84,42,26,71, 35,218,2,230,79,94,111,71,104,154,75,33,10,4,78,254, 239,2,167,84,50,69,125,52,26,81,50,69,127,53,26,0, 255,255,0,31,255,233,1,221,2,27,16,6,0,70,0,0, 0,1,0,60,0,0,1,176,2,12,0,7,0,0,19,33, 21,35,17,35,17,35,60,1,116,144,84,144,2,12,76,254, 64,1,192,0,255,255,0,20,255,38,1,222,2,12,16,6, 0,92,0,0,0,3,0,61,255,38,3,82,2,162,0,34, 0,50,0,66,0,0,1,54,51,50,23,22,21,20,15,1, 6,35,34,39,38,39,17,35,17,6,7,6,35,34,39,38, 53,52,55,54,51,50,23,53,51,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,47,1,37,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,1,239,45,100,141,48,21, 96,30,37,46,69,46,14,17,83,42,49,24,32,152,39,13, 104,44,60,94,49,83,131,95,27,9,84,21,26,94,31,12, 87,28,254,145,102,24,7,97,17,19,94,28,9,94,17,1, 189,94,141,61,84,174,68,17,17,43,14,21,254,239,1,22, 62,14,7,160,51,64,194,65,28,94,229,213,116,38,49,158, 36,9,104,42,54,159,37,8,2,126,34,43,170,28,5,112, 39,49,171,30,5,0,255,255,0,17,0,0,1,217,2,12, 16,6,0,91,0,0,0,1,0,70,255,136,2,36,2,12, 0,11,0,0,51,17,51,17,51,17,51,17,51,21,35,53, 70,84,249,84,61,70,2,12,254,64,1,192,254,52,184,120, 0,1,0,70,0,0,1,194,2,12,0,17,0,0,19,51, 21,20,23,22,59,1,53,51,17,35,53,35,34,39,38,53, 70,84,43,7,8,154,84,84,151,78,42,25,2,12,197,41, 8,1,247,253,244,201,50,31,42,0,0,1,0,70,0,0, 2,110,2,12,0,11,0,0,37,51,17,51,17,33,17,51, 17,51,17,51,1,132,150,84,253,216,84,150,84,76,1,192, 253,244,2,12,254,64,1,192,0,1,0,70,255,136,2,170, 2,12,0,15,0,0,41,1,17,51,17,51,17,51,17,51, 17,51,17,51,21,35,2,100,253,226,84,150,84,150,84,60, 70,2,12,254,64,1,192,254,64,1,192,254,52,184,0,2, 0,57,0,0,2,141,2,12,0,15,0,26,0,0,51,17, 35,53,33,21,51,23,22,23,20,21,20,7,6,35,39,51, 50,55,54,53,52,39,38,43,1,240,183,1,11,113,56,154, 6,69,42,56,162,124,105,8,1,83,14,17,124,1,192,76, 183,3,20,140,5,6,91,47,29,76,71,8,9,88,11,2, 0,3,0,70,0,0,2,108,2,12,0,13,0,24,0,28, 0,0,19,21,51,23,22,23,20,21,20,7,6,43,1,17, 19,51,50,55,54,53,52,39,38,43,1,1,17,35,17,154, 113,56,154,6,69,42,56,246,84,124,105,8,1,83,14,17, 124,1,210,83,2,12,183,3,20,140,5,6,91,47,29,2, 12,254,64,71,8,9,88,11,2,1,3,253,244,2,12,0, 0,2,0,70,0,0,1,227,2,12,0,13,0,24,0,0, 19,21,51,23,22,23,20,21,20,7,6,43,1,17,19,51, 50,55,54,53,52,39,38,43,1,154,113,56,154,6,69,42, 56,246,84,124,105,8,1,83,14,17,124,2,12,183,3,20, 140,5,6,91,47,29,2,12,254,64,71,8,9,88,11,2, 0,1,0,31,255,233,1,221,2,27,0,37,0,0,55,53, 51,38,39,38,35,34,7,6,7,35,54,55,54,55,54,51, 50,23,22,21,20,15,1,6,35,34,39,38,39,51,22,51, 50,55,54,55,163,224,17,84,19,22,94,25,3,2,84,6, 29,52,102,9,9,124,64,45,95,30,47,60,133,54,23,4, 84,21,107,96,35,14,2,232,77,121,26,6,89,12,13,70, 43,71,6,1,103,74,109,159,73,19,25,103,43,57,126,96, 36,46,0,2,0,70,255,233,2,209,2,27,0,22,0,39, 0,0,19,52,55,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,35,21,35,17,51,21,37,34,7,6,21,20,23, 22,51,50,55,54,53,52,47,1,38,250,36,63,134,152,57, 29,102,56,79,154,57,25,94,84,84,1,74,93,38,19,78, 31,41,90,39,21,82,29,18,1,53,58,62,110,129,65,91, 167,71,39,135,58,63,233,2,12,215,153,92,48,64,137,48, 19,88,47,66,145,46,11,5,0,2,0,14,0,0,1,217, 2,12,0,15,0,28,0,0,55,38,39,38,53,52,55,54, 59,1,17,35,53,35,7,35,1,35,34,7,6,21,20,23, 22,23,22,59,1,219,110,30,9,41,40,74,248,84,69,203, 103,1,119,137,46,23,22,10,4,8,31,38,137,221,9,86, 26,33,62,44,43,253,244,218,218,1,193,26,22,31,34,11, 6,5,20,0,255,255,0,40,255,233,2,1,2,228,16,38, 0,67,116,0,16,6,0,72,0,0,255,255,0,40,255,233, 2,1,2,204,16,38,0,106,123,1,16,6,0,72,0,0, 0,1,0,18,255,92,2,5,2,217,0,42,0,0,1,34, 7,6,29,1,19,35,17,35,53,51,53,51,21,51,21,35, 7,54,55,54,51,50,23,22,29,1,3,6,7,6,7,39, 53,54,55,54,55,53,52,39,38,1,70,88,36,18,1,83, 84,84,83,171,171,1,53,67,19,29,111,39,15,1,7,107, 68,59,17,47,52,73,4,34,32,1,195,82,41,53,1,254, 238,2,84,64,69,69,64,159,69,14,4,74,29,39,1,254, 237,131,83,54,1,1,40,2,48,69,99,252,55,24,24,0, 0,2,0,70,0,0,1,109,2,200,0,5,0,9,0,0, 19,33,21,35,17,35,19,51,7,35,70,1,39,211,84,139, 113,149,60,2,12,76,254,64,2,200,148,0,0,1,0,31, 255,233,1,221,2,27,0,35,0,0,37,35,22,23,22,51, 50,55,51,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,23,22,23,35,38,47,1,34,7,6,7,51,1,88, 226,7,82,26,32,107,21,84,11,104,43,56,129,62,41,92, 59,82,106,58,4,4,29,6,84,13,84,27,94,35,9,4, 223,232,129,37,12,126,137,46,20,105,70,101,160,77,49,68, 5,5,43,70,97,15,2,99,25,29,255,255,0,34,255,233, 1,203,2,27,16,6,0,86,0,0,255,255,0,66,0,0, 0,150,2,217,16,6,0,76,0,0,255,255,0,3,0,0, 1,13,2,196,16,38,0,106,229,249,16,6,0,243,0,0, 255,255,255,238,255,38,0,153,2,217,16,6,0,77,0,0, 0,2,0,70,0,0,3,48,2,12,0,31,0,45,0,0, 1,21,51,50,23,22,23,22,23,22,29,1,20,7,6,7, 6,43,1,17,35,7,6,7,6,35,53,50,55,54,61,1, 1,51,50,55,54,63,1,52,47,2,38,43,1,1,231,113, 142,45,16,7,2,2,2,54,7,8,43,55,246,172,3,5, 14,37,102,60,13,5,1,83,124,85,20,6,2,1,41,34, 8,18,13,124,2,12,214,55,20,29,10,11,18,11,1,72, 43,5,6,29,1,192,140,102,59,147,80,172,80,191,1,254, 64,34,10,15,17,55,16,8,1,2,0,2,0,70,0,0, 3,49,2,12,0,27,0,41,0,0,1,51,50,23,22,23, 22,23,22,29,1,20,7,6,7,6,43,1,53,35,21,35, 17,51,21,51,53,51,17,51,50,55,54,63,1,52,47,2, 38,43,1,1,232,113,142,45,16,7,2,2,2,54,7,8, 43,55,246,250,84,84,250,84,124,85,20,6,2,1,41,34, 8,18,13,124,1,54,55,20,29,10,11,18,11,1,72,43, 5,6,29,233,233,2,12,215,215,254,64,34,10,15,17,55, 16,8,1,2,0,1,0,18,0,0,2,5,2,217,0,33, 0,0,1,34,7,6,29,1,19,35,17,35,53,51,53,51, 21,51,21,35,7,54,55,54,51,50,23,22,29,1,3,35, 17,52,39,38,1,70,88,36,18,1,83,84,84,83,171,171, 1,53,67,19,29,111,39,15,1,82,34,32,1,195,82,41, 53,1,254,238,2,84,64,69,69,64,159,69,14,4,74,29, 39,1,254,131,1,92,55,24,24,0,0,2,0,58,0,0, 1,246,2,200,0,10,0,14,0,0,19,21,55,51,9,1, 35,37,21,35,17,55,51,7,35,141,222,107,254,240,1,48, 103,254,254,83,197,113,149,60,2,12,222,222,254,252,254,248, 216,216,2,12,188,148,0,2,0,70,0,0,1,231,2,200, 0,9,0,13,0,0,19,51,17,19,51,17,35,17,3,35, 19,23,35,39,70,84,235,98,83,235,99,217,96,60,149,2, 12,254,99,1,157,253,244,1,157,254,99,2,200,148,148,0, 255,255,0,20,255,38,1,222,2,187,16,38,1,243,83,223, 16,6,0,92,0,0,0,1,0,70,255,136,1,232,2,12, 0,11,0,0,33,21,35,53,35,17,51,17,51,17,51,17, 1,58,70,174,84,250,84,120,120,2,12,254,64,1,192,253, 244,0,0,2,0,79,0,0,2,111,2,217,0,11,0,22, 0,0,37,20,7,6,35,33,17,51,17,51,23,22,7,52, 39,38,43,1,21,51,50,55,54,2,111,56,57,102,254,183, 93,180,62,187,71,71,26,34,227,227,65,32,34,208,88,59, 61,2,217,254,198,3,23,182,87,28,11,251,35,36,0,2, 0,70,0,0,1,232,2,12,0,13,0,25,0,0,19,21, 50,23,22,23,22,21,20,7,6,35,33,17,19,51,50,55, 54,53,52,47,1,38,43,1,154,144,31,120,29,10,41,41, 73,254,249,84,152,46,23,22,12,10,31,38,152,2,12,217, 3,13,76,28,37,62,44,44,2,12,254,64,26,22,23,42, 14,8,20,0,255,255,0,91,0,0,2,105,2,217,16,6, 0,51,0,0,255,255,0,54,255,38,2,11,2,27,16,6, 0,83,0,0,0,1,0,90,0,0,2,67,3,57,0,7, 0,0,51,35,17,33,53,51,21,33,183,93,1,140,93,254, 116,2,217,96,178,0,0,1,0,70,0,0,1,109,2,117, 0,7,0,0,19,51,53,51,21,35,17,35,70,211,84,211, 84,2,12,105,181,254,64,0,0,1,0,90,0,0,2,67, 2,217,0,5,0,0,51,35,17,33,21,33,183,93,1,233, 254,116,2,217,82,0,0,1,0,70,0,0,1,109,2,12, 0,5,0,0,19,33,21,35,17,35,70,1,39,211,84,2, 12,76,254,64,0,1,0,90,0,0,2,67,2,217,0,5, 0,0,51,35,17,33,21,33,183,93,1,233,254,116,2,217, 82,0,0,1,0,70,0,0,1,109,2,12,0,5,0,0, 19,33,21,35,17,35,70,1,39,211,84,2,12,76,254,64, 0,1,0,63,0,0,3,180,2,217,0,17,0,0,9,1, 35,9,1,51,19,17,51,17,19,51,9,1,35,1,17,35, 1,203,254,226,110,1,69,254,225,120,238,93,238,120,254,225, 1,69,110,254,226,93,1,68,254,188,1,119,1,98,254,204, 1,52,254,204,1,52,254,158,254,137,1,68,254,188,0,1, 0,14,0,0,3,51,2,12,0,17,0,0,37,5,35,9, 1,51,23,53,51,21,55,51,9,1,35,37,21,35,1,119, 254,254,103,1,48,254,240,107,222,83,222,107,254,240,1,48, 103,254,254,83,216,216,1,8,1,4,222,222,222,222,254,252, 254,248,216,216,0,1,0,48,255,233,2,109,2,229,0,57, 0,0,1,53,51,50,55,54,53,52,39,38,35,34,7,6, 21,35,54,55,54,51,50,23,22,23,22,21,20,7,22,23, 22,21,20,7,6,7,6,35,34,39,38,39,51,23,22,23, 22,51,50,55,54,55,54,53,52,39,38,35,1,1,88,73, 52,33,72,39,52,143,31,8,88,1,122,60,84,157,66,24, 8,4,105,115,14,1,58,11,11,73,132,169,76,42,1,88, 3,7,28,51,117,89,45,44,7,1,51,48,64,1,65,82, 60,40,37,73,32,18,98,23,27,145,54,27,94,33,41,22, 24,108,45,43,106,12,13,84,63,11,9,56,104,57,94,38, 41,33,61,31,31,56,7,7,49,42,39,0,0,1,0,34, 255,233,1,203,2,27,0,48,0,0,55,53,51,50,55,54, 53,52,39,38,35,34,7,35,54,55,54,51,50,23,22,21, 20,7,6,7,22,23,20,7,6,35,34,39,38,53,51,22, 23,22,51,50,55,54,53,52,39,38,35,192,62,69,22,6, 60,23,28,102,3,88,1,111,34,44,122,53,26,57,4,4, 83,3,90,52,74,194,14,1,88,6,18,33,71,85,26,7, 39,28,35,221,76,55,15,16,53,19,7,84,119,32,10,73, 37,50,71,36,3,2,44,80,96,44,26,162,8,9,47,20, 35,50,15,17,37,28,20,0,0,1,0,79,0,0,2,146, 2,217,0,10,0,0,51,35,17,51,17,1,51,9,1,35, 1,172,93,93,1,107,120,254,100,1,159,110,254,136,2,217, 254,197,1,59,254,158,254,137,1,68,0,1,0,58,0,0, 1,246,2,12,0,10,0,0,19,21,55,51,9,1,35,37, 21,35,17,141,222,107,254,240,1,48,103,254,254,83,2,12, 222,222,254,252,254,248,216,216,2,12,0,1,0,79,0,0, 2,146,2,217,0,10,0,0,51,35,17,51,17,1,51,9, 1,35,1,172,93,93,1,107,120,254,100,1,159,110,254,136, 2,217,254,197,1,59,254,158,254,137,1,68,0,1,0,58, 0,0,1,246,2,12,0,10,0,0,19,21,55,51,9,1, 35,37,21,35,17,141,222,107,254,240,1,48,103,254,254,83, 2,12,222,222,254,252,254,248,216,216,2,12,0,1,0,79, 0,0,2,146,2,217,0,10,0,0,51,35,17,51,17,1, 51,9,1,35,1,172,93,93,1,107,120,254,100,1,159,110, 254,136,2,217,254,197,1,59,254,158,254,137,1,68,0,1, 0,58,0,0,1,246,2,12,0,10,0,0,19,21,55,51, 9,1,35,37,21,35,17,141,222,107,254,240,1,48,103,254, 254,83,2,12,222,222,254,252,254,248,216,216,2,12,0,1, 0,79,0,0,2,146,2,217,0,10,0,0,51,35,17,51, 17,1,51,9,1,35,1,172,93,93,1,107,120,254,100,1, 159,110,254,136,2,217,254,197,1,59,254,158,254,137,1,68, 0,1,0,58,0,0,1,246,2,12,0,10,0,0,19,21, 55,51,9,1,35,37,21,35,17,141,222,107,254,240,1,48, 103,254,254,83,2,12,222,222,254,252,254,248,216,216,2,12, 0,1,0,83,0,0,2,132,2,217,0,11,0,0,1,33, 17,35,17,51,17,33,17,51,17,35,2,38,254,139,94,93, 1,118,94,94,1,76,254,180,2,217,254,197,1,59,253,39, 0,1,0,70,0,0,1,232,2,12,0,11,0,0,19,51, 21,51,53,51,17,35,53,35,21,35,70,84,250,84,84,250, 84,2,12,215,215,253,244,233,233,0,0,1,0,83,0,0, 4,4,2,217,0,13,0,0,33,35,17,33,17,35,17,51, 17,33,17,33,21,33,2,132,94,254,139,94,93,1,118,1, 222,254,128,1,76,254,180,2,217,254,197,1,59,82,0,1, 0,70,0,0,2,187,2,12,0,13,0,0,33,35,53,35, 21,35,17,51,21,51,53,33,21,35,1,232,84,250,84,84, 250,1,39,211,233,233,2,12,215,215,76,0,0,1,0,83, 0,0,2,132,2,217,0,7,0,0,1,33,17,35,17,33, 17,35,2,38,254,139,94,2,49,94,2,135,253,121,2,217, 253,39,0,1,0,70,0,0,1,231,2,12,0,7,0,0, 19,33,17,35,17,35,17,35,70,1,161,84,249,84,2,12, 253,244,1,192,254,64,255,255,0,48,255,233,2,165,2,229, 16,6,0,38,0,0,255,255,0,31,255,233,1,221,2,27, 16,6,0,70,0,0,255,255,0,48,255,233,2,165,2,229, 16,6,0,38,0,0,255,255,0,31,255,233,1,221,2,27, 16,6,0,70,0,0,255,255,0,21,0,0,2,81,2,217, 16,6,0,55,0,0,0,1,0,60,0,0,1,176,2,12, 0,7,0,0,19,33,21,35,17,35,17,35,60,1,116,144, 84,144,2,12,76,254,64,1,192,0,255,255,0,13,0,0, 2,149,2,217,16,6,0,60,0,0,0,1,0,10,0,0, 1,230,2,12,0,6,0,0,33,35,3,51,27,1,51,1, 29,91,184,94,140,148,94,2,12,254,87,1,169,0,255,255, 0,13,0,0,2,149,2,217,16,6,0,60,0,0,0,1, 0,10,0,0,1,230,2,12,0,6,0,0,33,35,3,51, 27,1,51,1,29,91,184,94,140,148,94,2,12,254,87,1, 169,0,255,255,0,22,0,0,2,137,2,217,16,6,0,59, 0,0,255,255,0,17,0,0,1,217,2,12,16,6,0,91, 0,0,0,1,0,83,255,121,2,224,2,217,0,11,0,0, 37,17,51,17,51,21,35,53,33,17,51,17,2,38,94,92, 80,253,195,94,82,2,135,253,113,209,135,2,217,253,121,0, 0,1,0,70,255,136,2,56,2,12,0,11,0,0,51,17, 51,17,51,17,51,17,51,21,35,53,70,84,249,84,81,70, 2,12,254,64,1,192,254,52,184,120,0,1,0,83,0,0, 2,42,2,217,0,13,0,0,1,33,34,39,38,53,17,51, 17,33,17,51,17,35,1,205,254,227,78,13,2,93,1,29, 93,93,1,46,61,9,11,1,90,254,167,1,89,253,39,0, 0,1,0,69,0,0,1,176,2,12,0,13,0,0,19,51, 21,51,53,51,17,35,53,35,34,39,38,53,69,84,195,84, 84,195,64,14,6,2,12,225,225,253,244,223,33,15,25,0, 0,1,0,83,0,0,2,42,2,217,0,13,0,0,1,33, 34,39,38,53,17,51,17,33,17,51,17,35,1,205,254,227, 78,13,2,93,1,29,93,93,1,46,61,9,11,1,90,254, 167,1,89,253,39,0,0,1,0,69,0,0,1,176,2,12, 0,13,0,0,19,51,21,51,53,51,17,35,53,35,34,39, 38,53,69,84,195,84,84,195,64,14,6,2,12,225,225,253, 244,223,33,15,25,0,0,1,0,83,0,0,2,42,2,217, 0,13,0,0,19,33,50,23,22,21,17,35,17,33,17,35, 17,51,176,1,29,78,13,2,93,254,227,93,93,1,171,61, 9,11,254,166,1,89,254,167,2,217,0,1,0,69,0,0, 1,176,2,12,0,13,0,0,33,35,53,35,21,35,17,51, 21,51,50,23,22,21,1,176,84,195,84,84,195,64,14,6, 225,225,2,12,223,33,15,25,255,255,0,38,255,233,2,230, 2,229,16,15,1,78,3,12,2,206,192,0,255,255,0,40, 255,233,2,1,2,27,16,6,0,72,0,0,255,255,0,39, 255,233,2,154,2,143,16,70,0,72,243,5,84,179,77,24, 255,255,0,40,255,233,2,1,2,27,16,6,0,72,0,0, 255,255,0,100,0,0,0,194,2,217,16,6,0,44,0,0, 255,255,0,63,0,0,3,180,3,136,16,39,1,243,1,84, 0,172,16,6,2,110,0,0,255,255,0,44,0,0,3,21, 2,187,16,39,1,243,0,251,255,223,16,6,2,142,0,0, 0,1,0,79,0,0,2,146,2,217,0,10,0,0,51,35, 17,51,17,1,51,9,1,35,1,172,93,93,1,107,120,254, 100,1,159,110,254,136,2,217,254,197,1,59,254,158,254,137, 1,68,0,1,0,58,0,0,1,246,2,12,0,10,0,0, 19,21,55,51,9,1,35,37,21,35,17,141,222,107,254,240, 1,48,103,254,254,83,2,12,222,222,254,252,254,248,216,216, 2,12,0,1,0,83,0,0,2,132,2,217,0,11,0,0, 1,33,17,35,17,51,17,33,17,51,17,35,2,38,254,139, 94,93,1,118,94,94,1,76,254,180,2,217,254,197,1,59, 253,39,0,1,0,70,0,0,1,232,2,12,0,11,0,0, 19,51,21,51,53,51,17,35,53,35,21,35,70,84,250,84, 84,250,84,2,12,215,215,253,244,233,233,0,0,1,0,83, 0,0,2,42,2,217,0,13,0,0,1,33,34,39,38,53, 17,51,17,33,17,51,17,35,1,205,254,227,78,13,2,93, 1,29,93,93,1,46,61,9,11,1,90,254,167,1,89,253, 39,0,0,1,0,69,0,0,1,176,2,12,0,13,0,0, 19,51,21,51,53,51,17,35,53,35,34,39,38,53,69,84, 195,84,84,195,64,14,6,2,12,225,225,253,244,223,33,15, 25,0,255,255,0,17,0,0,2,141,3,136,16,39,1,243, 0,170,0,172,16,6,0,36,0,0,255,255,0,42,255,233, 2,23,2,187,16,38,1,243,103,223,16,6,0,68,0,0, 255,255,0,17,0,0,2,141,3,104,16,39,0,106,0,172, 0,157,16,6,0,36,0,0,255,255,0,42,255,233,2,23, 2,155,16,38,0,106,106,208,16,6,0,68,0,0,255,255, 0,11,0,0,3,182,2,217,16,6,0,136,0,0,255,255, 0,34,255,233,3,77,2,27,16,6,0,168,0,0,255,255, 0,79,0,0,2,90,3,136,16,39,1,243,0,177,0,172, 16,6,2,109,0,0,255,255,0,40,255,233,2,1,2,187, 16,39,1,243,0,156,255,223,16,6,0,72,0,0,255,255, 0,38,255,233,2,230,2,229,16,6,1,78,0,0,255,255, 0,40,255,233,2,1,2,27,16,15,0,72,2,41,2,4, 192,0,255,255,0,38,255,233,2,230,3,153,16,39,0,106, 0,225,0,206,16,6,1,78,0,0,255,255,0,40,255,233, 2,1,2,155,16,38,0,106,118,208,16,15,0,72,2,41, 2,4,192,0,255,255,0,63,0,0,3,180,3,104,16,39, 0,106,1,86,0,157,16,6,2,110,0,0,255,255,0,44, 0,0,3,21,2,155,16,39,0,106,0,254,255,208,16,6, 2,142,0,0,255,255,0,48,255,233,2,109,3,104,16,39, 0,106,0,168,0,157,16,6,2,111,0,0,255,255,0,34, 255,233,1,203,2,155,16,38,0,106,80,208,16,6,2,143, 0,0,0,1,0,48,255,233,2,109,2,229,0,57,0,0, 1,53,51,50,55,54,53,52,39,38,35,34,7,6,21,35, 54,55,54,51,50,23,22,23,22,21,20,7,22,23,22,21, 20,7,6,7,6,35,34,39,38,39,51,23,22,23,22,51, 50,55,54,55,54,53,52,39,38,35,1,1,88,73,52,33, 72,39,52,143,31,8,88,1,122,60,84,157,66,24,8,4, 105,115,14,1,58,11,11,73,132,169,76,42,1,88,3,7, 28,51,117,89,45,44,7,1,51,48,64,1,65,82,60,40, 37,73,32,18,98,23,27,145,54,27,94,33,41,22,24,108, 45,43,106,12,13,84,63,11,9,56,104,57,94,38,41,33, 61,31,31,56,7,7,49,42,39,0,0,1,0,34,255,233, 1,203,2,27,0,48,0,0,55,53,51,50,55,54,53,52, 39,38,35,34,7,35,54,55,54,51,50,23,22,21,20,7, 6,7,22,23,20,7,6,35,34,39,38,53,51,22,23,22, 51,50,55,54,53,52,39,38,35,192,62,69,22,6,60,23, 28,102,3,88,1,111,34,44,122,53,26,57,4,4,83,3, 90,52,74,194,14,1,88,6,18,33,71,85,26,7,39,28, 35,221,76,55,15,16,53,19,7,84,119,32,10,73,37,50, 71,36,3,2,44,80,96,44,26,162,8,9,47,20,35,50, 15,17,37,28,20,0,255,255,0,79,0,0,2,137,3,71, 16,39,0,113,0,196,0,138,16,6,2,112,0,0,255,255, 0,70,0,0,1,241,2,122,16,38,0,113,114,189,16,6, 2,144,0,0,255,255,0,79,0,0,2,137,3,104,16,39, 0,106,0,198,0,157,16,6,2,112,0,0,255,255,0,70, 0,0,1,241,2,155,16,38,0,106,116,208,16,6,2,144, 0,0,255,255,0,38,255,233,2,230,3,104,16,39,0,106, 0,227,0,157,16,6,0,50,0,0,255,255,0,36,255,233, 1,254,2,155,16,38,0,106,110,208,16,6,0,82,0,0, 255,255,0,38,255,233,2,230,2,229,16,6,0,50,0,0, 255,255,0,36,255,233,1,254,2,27,16,6,0,82,0,0, 255,255,0,38,255,233,2,230,3,104,16,39,0,106,0,227, 0,157,16,6,0,50,0,0,255,255,0,36,255,233,1,254, 2,155,16,38,0,106,110,208,16,6,0,82,0,0,255,255, 0,48,255,233,2,165,3,104,16,39,0,106,0,254,0,157, 16,6,2,133,0,0,255,255,0,31,255,233,1,221,2,155, 16,38,0,106,49,208,16,6,2,165,0,0,255,255,0,26, 0,0,2,107,3,71,16,39,0,113,0,158,0,138,16,6, 2,123,0,0,255,255,0,20,255,38,1,222,2,122,16,38, 0,113,84,189,16,6,0,92,0,0,255,255,0,26,0,0, 2,107,3,104,16,39,0,106,0,160,0,157,16,6,2,123, 0,0,255,255,0,20,255,38,1,222,2,155,16,38,0,106, 86,208,16,6,0,92,0,0,255,255,0,26,0,0,2,107, 3,151,16,39,1,248,0,166,0,179,16,6,2,123,0,0, 255,255,0,20,255,38,1,222,2,202,16,38,1,248,92,230, 16,6,0,92,0,0,255,255,0,79,0,0,2,57,3,104, 16,39,0,106,0,156,0,157,16,6,2,127,0,0,255,255, 0,70,0,0,1,194,2,155,16,38,0,106,88,208,16,6, 2,159,0,0,255,255,0,79,0,0,3,25,3,104,16,39, 0,106,1,22,0,157,16,6,2,131,0,0,255,255,0,70, 0,0,2,108,2,155,16,39,0,106,0,202,255,208,16,6, 2,163,0,0,0,1,0,79,255,215,2,217,2,204,0,28, 0,0,37,6,7,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,23,50,55,54,53,17,51,17,23,7,2, 67,28,69,60,60,185,61,22,9,6,94,28,17,33,43,60, 102,45,46,95,87,59,60,31,22,19,116,40,57,45,56,1, 158,254,99,117,44,26,18,23,2,47,46,137,1,157,253,172, 93,68,0,1,0,79,255,254,2,130,2,214,0,32,0,0, 1,35,53,52,39,38,39,34,15,1,6,21,23,33,21,33, 7,35,17,52,55,54,55,54,51,50,23,22,23,22,23,22, 21,2,130,95,45,44,104,118,41,5,18,2,1,209,254,47, 1,94,57,24,37,64,101,104,63,63,25,3,12,10,1,74, 81,135,47,46,2,80,12,46,132,128,93,152,1,158,159,69, 30,21,35,39,40,64,8,47,55,61,0,2,0,83,255,255, 2,231,2,214,0,25,0,50,0,0,37,35,21,35,53,35, 34,39,38,47,1,52,55,54,55,54,51,50,23,22,29,2, 22,21,51,37,20,23,22,23,22,23,22,51,55,53,23,53, 52,39,53,52,39,38,39,34,7,6,7,6,2,231,107,95, 215,70,58,76,30,9,46,24,42,65,103,196,60,13,1,110, 253,198,9,5,10,30,89,21,23,180,2,1,7,37,126,117, 51,17,6,5,134,135,135,35,52,101,90,148,65,35,26,40, 135,29,81,28,163,36,24,217,56,24,20,27,71,16,4,1, 110,2,130,9,9,21,24,18,88,4,61,21,27,42,0,1, 0,82,0,1,2,215,2,217,0,29,0,0,1,52,39,38, 39,34,7,6,29,1,35,53,52,55,54,55,54,51,50,23, 22,23,22,29,1,51,21,35,21,35,2,38,4,14,162,103, 45,45,95,47,24,41,64,104,196,60,9,11,7,82,82,95, 1,158,51,31,144,4,48,46,136,81,82,149,66,33,25,41, 135,21,57,42,59,176,94,144,0,1,0,79,0,5,2,130, 2,221,0,29,0,0,1,20,7,6,7,6,7,34,39,38, 53,17,51,23,33,21,33,7,20,23,22,23,22,51,50,55, 54,61,1,51,2,130,50,24,39,61,106,199,57,27,94,1, 1,209,254,47,1,27,17,34,43,60,103,44,46,95,1,64, 149,68,33,24,39,2,135,66,114,1,157,152,93,168,115,43, 27,20,24,47,46,136,81,0,0,1,0,30,255,250,2,199, 2,223,0,73,0,0,1,52,39,38,39,38,39,38,43,1, 15,1,6,7,6,15,1,6,21,55,21,33,53,54,55,54, 55,54,55,51,50,23,50,23,22,23,22,23,22,23,22,23, 22,21,20,7,6,7,6,7,51,50,23,22,23,39,52,39, 33,21,35,53,51,21,51,50,55,54,55,54,55,54,55,54, 2,50,8,7,31,15,44,61,53,14,17,29,112,33,2,1, 8,2,188,254,230,6,26,9,16,71,156,37,14,11,12,7, 48,39,35,56,7,5,13,20,16,6,20,84,34,39,123,70, 39,25,2,83,69,254,89,90,90,127,48,81,8,6,94,36, 7,6,8,1,164,71,22,32,43,21,23,28,2,6,29,103, 5,4,40,18,15,2,81,67,95,59,20,25,99,11,2,2, 7,16,12,53,7,5,14,54,48,46,46,27,124,86,35,20, 46,33,58,1,55,2,54,186,55,44,4,4,51,83,18,20, 32,0,0,1,0,84,0,0,1,174,2,209,0,9,0,0, 37,21,35,17,51,21,51,21,35,17,1,78,250,96,250,250, 79,79,2,209,233,77,254,180,0,1,0,74,0,0,2,127, 2,217,0,29,0,0,1,35,53,52,39,38,39,34,15,1, 6,7,17,5,7,37,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,1, 215,2,253,205,57,24,37,64,101,105,62,77,22,8,6,1, 18,140,134,48,47,1,68,24,41,97,254,186,1,87,1,1, 158,160,69,29,21,35,40,48,88,41,42,55,0,2,0,63, 255,254,3,15,2,216,0,15,0,65,0,0,37,20,23,22, 23,22,23,50,55,53,35,34,7,6,7,6,7,52,55,54, 59,1,53,52,39,38,39,35,34,39,35,34,7,17,35,17, 52,55,54,55,54,59,1,50,23,22,29,1,51,21,35,21, 20,7,6,43,1,34,39,34,39,34,39,38,39,38,1,84, 19,14,31,33,44,151,2,179,70,21,14,8,2,93,52,47, 108,180,44,42,62,179,9,1,15,122,2,95,13,48,143,16, 18,191,127,66,44,54,54,104,53,81,29,12,7,11,6,19, 32,89,25,14,218,78,26,19,11,7,1,137,155,26,19,49, 34,24,139,49,44,66,84,26,24,2,1,137,253,254,2,11, 40,39,112,13,1,80,52,73,75,78,164,120,57,31,1,1, 9,24,76,41,0,2,0,67,255,246,2,126,2,206,0,22, 0,41,0,0,5,34,39,38,61,1,52,55,54,55,50,59, 1,53,51,21,51,21,35,17,20,7,6,19,35,47,1,34, 7,6,7,21,20,23,22,23,50,55,54,55,54,55,1,48, 133,64,40,24,53,147,6,7,143,92,99,96,104,50,59,141, 9,14,43,39,37,2,23,46,73,72,32,8,8,21,2,10, 82,51,72,126,51,46,100,8,192,192,75,255,0,114,60,29, 1,203,1,1,30,27,87,107,60,29,46,2,30,7,10,29, 61,0,0,1,0,63,0,0,2,113,2,220,0,33,0,0, 1,34,7,6,7,6,7,17,35,17,51,21,54,55,54,51, 50,23,22,23,22,23,22,29,1,35,53,52,39,38,39,38, 39,38,1,95,130,43,10,4,5,2,94,98,13,98,38,29, 101,67,62,29,9,11,7,94,31,13,19,7,8,43,1,230, 68,17,20,29,66,254,226,2,220,214,31,19,7,38,32,68, 21,57,42,60,71,71,118,46,19,13,5,4,24,0,0,1, 0,93,0,0,1,117,2,204,0,5,0,0,51,17,51,17, 23,21,93,95,185,2,204,253,146,1,93,0,0,1,0,66, 255,244,3,15,2,211,0,41,0,0,37,55,61,1,51,21, 20,7,6,7,6,7,6,35,34,39,38,39,38,53,55,7, 17,35,17,51,21,23,21,20,23,22,23,22,23,50,55,54, 55,54,55,52,2,174,2,95,92,7,8,29,26,21,48,199, 57,13,7,8,1,108,95,95,203,28,17,32,43,60,49,18, 11,27,23,11,237,65,1,224,225,199,72,5,5,18,9,6, 135,37,41,48,86,114,1,254,64,2,211,195,1,224,117,44, 26,18,23,2,9,3,30,25,65,9,0,2,0,34,255,252, 3,0,2,250,0,38,0,54,0,0,1,7,38,39,38,35, 39,50,23,22,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,55,54,55,39,34,47,1,55,22,23,22,51,33,50, 23,3,52,39,38,35,34,7,6,21,20,23,22,23,50,55, 54,3,0,65,6,28,12,15,126,13,38,130,14,1,101,98, 138,136,96,96,103,19,21,41,9,81,114,9,1,83,2,6, 22,66,1,159,93,37,132,68,72,103,103,76,75,73,71,98, 101,77,75,2,134,63,33,9,2,1,27,83,176,15,15,134, 91,91,97,99,138,134,101,19,16,30,1,1,69,20,41,20, 8,27,45,254,166,109,77,80,82,82,106,96,73,71,2,74, 71,0,0,1,0,74,0,1,2,125,2,221,0,29,0,0, 37,35,53,6,7,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,23,50,55,54,55,54,61,1,51,2,124, 97,12,58,55,54,100,68,95,18,5,94,28,16,34,41,62, 107,52,17,10,7,95,1,215,25,19,13,37,52,137,40,51, 1,1,255,0,116,44,26,20,22,2,52,17,45,41,75,76, 0,1,0,23,255,182,2,55,2,213,0,19,0,0,1,50, 23,21,39,38,39,34,7,1,5,21,35,38,39,38,39,37, 1,54,1,248,44,19,13,17,23,38,38,254,241,1,128,32, 8,26,29,55,254,134,1,116,44,2,213,15,103,16,14,2, 46,254,184,176,163,45,29,34,25,170,1,184,56,0,0,2, 0,51,255,214,2,80,2,216,0,65,0,79,0,0,1,50, 23,22,23,21,20,7,6,7,6,7,22,23,22,23,7,38, 39,6,15,1,34,39,38,47,2,52,55,54,55,50,31,1, 22,23,22,23,54,55,54,61,1,52,39,38,39,38,35,34, 7,6,7,6,7,6,29,1,39,53,52,55,54,55,54,3, 20,23,50,55,54,55,38,39,38,35,34,7,6,1,76,141, 71,46,2,41,41,43,40,22,19,47,8,7,73,47,28,73, 45,20,65,32,34,8,7,3,82,19,22,27,27,12,17,21, 43,30,66,48,34,103,10,11,31,12,15,25,55,38,3,3, 20,95,94,24,27,48,134,62,28,20,22,8,20,39,20,19, 19,14,8,2,216,96,62,88,63,93,76,74,40,37,15,16, 58,10,8,34,40,38,38,8,1,26,27,25,22,17,101,24, 5,1,8,3,4,13,22,49,42,98,65,86,44,122,42,4, 3,9,6,6,56,4,4,32,50,61,2,66,105,70,18,12, 21,253,143,32,7,13,14,8,34,18,10,15,17,0,0,1, 0,79,0,0,2,138,2,216,0,29,0,0,33,35,17,52, 39,38,39,34,7,6,7,6,29,1,35,53,52,55,54,55, 54,51,50,23,22,23,22,21,17,51,2,138,192,43,40,59, 68,33,9,8,24,95,25,42,108,29,33,140,61,5,5,26, 97,2,5,83,27,24,2,29,7,10,31,59,204,210,50,47, 81,21,6,89,8,9,47,52,254,64,0,2,0,47,0,0, 2,113,2,212,0,24,0,34,0,0,41,1,52,55,54,55, 54,55,38,39,55,22,23,22,23,54,55,23,6,7,50,23, 22,23,22,47,1,38,39,34,7,6,7,6,7,2,113,253, 190,105,23,27,45,9,25,47,60,59,9,10,11,61,136,66, 122,64,8,48,111,35,13,88,17,61,117,3,38,47,37,47, 20,219,181,40,34,61,1,17,19,71,20,5,5,7,55,63, 67,55,45,66,149,200,72,26,69,210,121,53,67,75,99,106, 0,1,0,45,0,0,2,202,2,217,0,30,0,0,1,7, 17,20,7,6,15,1,6,7,6,35,34,39,38,39,38,53, 17,51,17,20,23,22,51,50,55,54,53,17,51,2,202,106, 57,12,14,31,2,2,64,101,104,63,64,24,25,95,45,45, 103,124,39,18,199,2,124,1,254,191,161,69,14,12,21,2, 1,34,39,40,64,73,98,1,158,254,98,134,48,47,91,44, 94,1,159,0,0,1,0,49,255,244,2,42,2,216,0,65, 0,0,37,20,7,6,35,34,39,34,39,38,39,38,39,38, 53,51,20,23,22,23,50,55,54,53,52,39,38,43,1,53, 51,50,55,54,55,52,39,38,35,34,7,6,15,1,20,21, 35,52,55,54,55,54,51,50,23,22,21,20,7,6,7,22, 23,22,23,22,2,42,101,66,89,27,6,73,67,7,5,28, 20,16,93,59,60,40,39,60,60,52,53,48,232,231,50,41, 40,2,117,16,7,11,21,70,16,6,96,21,21,50,50,79, 119,60,53,32,29,24,11,23,22,26,25,203,118,59,38,1, 52,5,5,26,41,44,32,72,27,28,4,28,27,91,87,28, 28,77,23,22,70,92,15,2,3,19,40,25,5,5,40,40, 39,27,26,57,53,77,79,33,33,10,1,14,12,43,40,0, 0,1,0,9,0,0,2,214,2,217,0,31,0,0,19,51, 17,20,23,22,23,22,51,50,55,54,61,1,51,21,20,7, 6,7,6,7,6,35,34,39,38,39,38,39,17,39,9,249, 27,17,33,43,60,103,45,45,95,53,16,21,10,12,64,104, 199,57,13,7,5,2,154,2,217,254,97,115,43,27,20,24, 47,46,136,140,140,153,69,20,17,8,7,40,134,36,43,40, 61,1,65,1,0,1,0,40,255,244,2,44,2,227,0,50, 0,0,19,5,21,39,38,47,1,34,7,34,15,1,6,7, 6,29,1,20,23,22,31,3,50,55,54,55,53,51,21,20, 7,6,7,34,35,34,39,38,39,38,61,1,52,55,54,55, 54,55,39,92,1,166,114,9,9,22,18,30,9,15,25,48, 39,38,30,31,40,34,15,13,46,56,55,2,96,64,72,109, 5,5,123,77,27,16,18,43,41,43,40,25,140,2,227,97, 83,26,1,1,1,5,5,9,17,58,58,103,91,68,42,40, 15,11,2,1,34,32,92,64,70,78,73,72,4,84,29,35, 40,39,118,102,65,65,26,25,9,30,0,1,0,74,0,1, 2,125,2,217,0,27,0,0,37,35,17,52,39,38,39,34, 15,1,6,7,17,35,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,94, 57,24,37,64,101,105,62,77,22,8,6,1,1,157,134,48, 47,1,68,24,41,97,254,99,1,158,160,69,29,21,35,40, 48,88,41,42,55,0,0,1,0,66,255,242,2,71,2,216, 0,42,0,0,5,37,53,23,54,55,54,55,54,55,54,61, 1,52,39,38,39,38,39,34,7,6,7,21,7,53,52,55, 54,51,50,23,22,31,1,20,7,6,15,1,6,7,23,1, 232,254,110,131,23,11,54,54,48,41,38,31,41,65,7,22, 78,50,29,2,95,64,75,115,173,71,16,2,1,35,38,55, 31,41,48,151,14,105,85,37,2,2,8,27,23,56,55,90, 85,67,37,47,11,1,3,57,34,67,64,1,72,83,68,75, 147,42,37,116,78,57,60,35,17,21,10,40,0,1,0,74, 0,1,2,125,2,217,0,36,0,0,37,35,17,34,15,1, 6,7,6,7,6,7,21,35,53,52,55,54,55,54,51,50, 23,22,31,1,22,21,17,35,17,52,39,38,39,17,20,1, 139,95,28,7,25,30,21,1,2,16,2,94,57,24,37,64, 101,105,62,77,22,8,6,95,44,31,70,223,1,165,3,14, 18,50,3,4,41,97,42,43,160,69,29,21,35,40,48,88, 41,42,55,254,98,1,157,133,49,31,18,254,112,21,0,2, 0,42,255,248,2,199,2,224,0,22,0,80,0,0,1,6, 15,1,6,7,6,7,51,50,23,22,23,54,55,52,39,38, 39,38,39,38,35,1,39,52,39,33,21,35,53,51,21,51, 50,55,54,61,1,39,38,39,38,35,39,34,39,34,39,53, 52,55,54,55,54,59,1,50,23,50,23,22,23,22,23,22, 23,22,23,22,21,20,7,6,7,6,7,51,50,23,22,1, 73,88,48,14,28,18,9,2,21,179,100,76,20,41,3,35, 5,6,15,44,61,53,1,112,83,69,254,89,90,90,127,90, 52,33,2,12,92,70,103,80,18,7,6,6,16,8,32,73, 160,21,14,11,12,7,48,39,35,56,7,5,13,20,16,6, 20,84,34,39,123,115,18,3,2,148,10,50,15,34,56,34, 27,49,37,67,86,71,74,59,8,9,21,23,28,253,100,3, 55,2,54,186,55,42,28,38,13,8,52,26,19,2,1,2, 89,68,35,21,58,104,2,2,7,16,12,53,7,5,14,54, 48,46,46,27,124,86,35,20,108,15,0,1,0,74,0,1, 2,201,2,217,0,31,0,0,37,51,23,7,23,7,17,52, 39,38,39,34,15,1,6,7,17,35,17,52,55,54,55,54, 51,50,23,22,31,1,22,21,2,125,75,1,79,1,93,45, 45,103,108,43,12,16,2,94,57,24,37,64,101,105,62,77, 22,8,6,250,80,1,167,1,1,157,134,48,47,1,68,24, 41,97,254,99,1,158,160,69,29,21,35,40,48,88,41,42, 55,0,0,1,0,79,255,244,2,130,2,204,0,27,0,0, 1,51,17,20,7,6,7,6,35,34,39,38,39,38,53,17, 51,17,20,23,22,23,22,23,50,55,54,53,2,35,95,50, 24,39,62,105,185,61,22,9,6,94,28,17,33,43,60,102, 45,46,2,204,254,98,147,69,32,26,40,116,40,57,45,56, 1,158,254,99,117,44,26,18,23,2,47,46,137,0,0,1, 0,74,0,1,2,215,2,217,0,31,0,0,37,53,6,7, 6,35,34,39,38,39,38,61,1,51,21,20,23,22,23,22, 23,50,55,54,55,54,61,1,51,17,51,21,2,27,12,58, 55,54,100,68,95,18,5,94,28,16,34,41,62,107,52,17, 10,7,95,90,1,215,25,19,13,37,52,137,40,51,101,100, 116,44,26,20,22,2,52,17,45,41,75,252,253,134,94,0, 0,1,0,45,255,243,2,103,2,216,0,55,0,0,1,34, 7,6,21,20,23,22,23,22,23,22,23,22,31,1,20,7, 6,7,6,35,34,39,38,53,55,22,31,1,50,55,54,53, 52,47,1,38,39,38,39,38,39,52,55,54,51,50,31,1, 22,31,1,21,7,38,1,72,120,34,10,27,29,114,116,43, 61,31,22,6,2,32,47,106,39,41,239,56,10,89,13,167, 32,99,49,29,84,210,88,37,3,3,23,3,101,64,87,164, 67,3,17,12,6,91,12,2,133,64,20,24,39,24,26,25, 25,21,28,45,30,45,27,54,52,74,25,9,175,31,36,8, 142,22,1,51,29,41,71,30,58,29,50,4,5,33,57,108, 54,35,96,5,29,35,38,11,7,135,0,1,0,74,0,1, 2,125,2,217,0,27,0,0,1,35,53,52,39,38,39,34, 15,1,6,7,17,35,17,52,55,54,55,54,51,50,23,22, 31,1,22,21,2,125,95,45,45,103,108,43,12,16,2,94, 57,24,37,64,101,105,62,77,22,8,6,1,38,120,134,48, 47,1,68,24,41,97,254,99,1,158,160,69,29,21,35,40, 48,88,41,42,55,0,0,2,0,60,255,244,2,57,2,216, 0,59,0,81,0,0,1,50,23,20,15,1,6,7,22,23, 22,23,22,23,20,7,6,7,6,35,34,39,38,39,51,20, 23,22,31,2,50,55,54,55,54,53,52,39,38,47,3,34, 7,39,54,55,54,55,38,39,38,39,52,55,54,55,54,19, 50,55,54,53,52,39,38,39,38,35,34,7,6,7,6,21, 20,23,22,23,22,1,56,231,3,50,9,15,14,49,36,5, 4,15,2,30,47,112,32,35,120,69,61,3,93,35,33,38, 34,20,23,37,37,32,33,29,30,36,34,21,11,104,35,106, 14,30,34,17,22,31,30,2,15,16,52,54,96,97,31,12, 28,28,35,35,15,12,18,45,33,33,22,18,36,33,2,216, 184,76,40,6,10,6,12,68,9,10,37,59,59,52,83,23, 6,63,55,97,56,31,29,14,8,2,9,9,32,33,65,61, 34,34,9,7,2,1,53,1,44,23,23,7,8,31,30,71, 36,42,41,32,33,254,216,60,23,29,46,25,25,6,6,3, 9,24,24,48,35,28,18,19,12,0,0,1,0,76,0,0, 1,95,2,211,0,7,0,0,19,51,21,51,21,35,17,35, 76,95,180,180,95,2,211,248,80,254,117,0,0,3,0,42, 0,1,2,228,2,213,0,35,0,42,0,53,0,0,19,52, 55,54,55,54,55,53,51,21,51,50,31,1,22,23,22,23, 22,21,20,7,6,7,6,7,21,35,53,38,39,38,39,38, 39,38,55,20,23,17,6,7,6,1,54,55,54,55,54,55, 52,39,38,39,42,67,65,70,60,41,94,8,6,4,22,27, 34,65,68,67,66,66,68,65,36,94,75,66,17,11,50,17, 67,95,208,122,57,27,1,44,137,50,4,3,13,2,134,34, 41,1,106,124,70,67,23,19,5,55,55,1,4,6,12,18, 70,70,127,126,71,69,23,22,3,47,47,9,33,8,8,37, 22,68,127,193,41,1,209,13,100,49,254,209,25,103,8,8, 35,55,158,54,13,6,0,2,0,36,0,0,2,86,2,216, 0,28,0,45,0,0,1,34,39,38,39,21,33,21,33,21, 35,53,35,53,51,17,52,55,54,55,54,51,50,23,22,23, 20,7,6,39,20,23,22,51,50,53,52,39,38,39,34,7, 6,7,6,21,1,115,65,39,38,12,1,125,254,130,93,87, 87,15,21,69,53,80,166,53,12,2,116,46,214,65,41,48, 128,48,45,46,63,46,4,4,26,1,19,21,23,16,136,78, 121,121,78,1,68,47,26,64,39,29,132,40,35,170,54,22, 197,62,36,22,159,82,30,28,2,43,4,4,29,55,0,2, 0,48,255,244,2,221,2,217,0,19,0,34,0,0,5,34, 39,38,39,52,55,54,55,50,23,22,23,22,23,20,7,6, 7,6,1,20,23,22,51,50,54,53,52,39,38,35,34,7, 6,1,135,163,97,81,2,96,94,153,157,97,27,18,41,2, 44,52,111,64,254,196,69,71,104,107,138,115,58,70,100,74, 72,12,119,99,143,176,102,100,2,112,31,36,83,110,107,86, 104,46,26,1,103,129,74,75,150,138,180,73,37,69,69,0, 0,3,0,39,255,247,2,161,2,213,0,11,0,19,0,65, 0,0,1,35,17,51,50,55,54,61,1,52,39,38,37,20, 51,55,53,35,39,34,7,38,39,38,53,52,55,54,55,54, 59,1,21,51,50,23,22,23,21,20,15,1,6,7,35,7, 34,39,38,39,38,39,38,53,51,20,23,22,23,22,51,17, 39,34,39,38,1,180,46,46,70,43,29,27,41,254,157,109, 34,19,22,102,9,38,13,9,29,41,96,18,25,95,46,166, 57,12,2,79,25,51,82,133,27,46,58,55,37,11,19,11, 93,11,8,40,37,71,45,16,23,34,1,177,254,146,52,34, 65,55,69,35,56,145,72,1,146,1,191,20,38,18,37,64, 32,47,5,1,217,134,41,35,86,101,67,19,31,2,1,16, 17,40,13,35,41,22,32,18,19,22,18,1,112,1,5,5, 0,1,0,53,1,233,0,155,2,211,0,10,0,0,19,53, 51,21,20,7,6,7,39,54,53,61,94,15,20,46,21,53, 2,109,102,80,65,30,36,23,34,20,78,0,0,1,0,24, 2,76,0,153,2,206,0,3,0,0,19,55,51,7,24,88, 41,104,2,76,130,130,0,1,0,23,2,73,1,46,2,218, 0,22,0,0,19,34,7,6,7,39,54,55,54,55,54,59, 1,31,1,50,55,21,6,7,6,43,1,116,44,28,3,10, 8,5,12,8,24,22,22,34,19,41,44,48,36,40,5,5, 78,2,127,36,3,15,47,8,11,9,14,11,1,2,48,45, 38,6,1,0,0,1,0,43,2,71,0,227,2,208,0,3, 0,0,19,35,39,51,227,71,113,118,2,71,137,0,0,1, 0,21,2,83,1,44,3,14,0,34,0,0,1,52,39,38, 39,34,7,6,21,35,53,54,55,54,55,54,51,50,23,22, 21,20,7,6,35,34,53,51,20,23,22,23,50,55,54,0, 255,33,8,36,68,22,20,47,12,36,14,18,38,63,74,17, 7,63,15,18,90,44,28,8,12,37,8,3,2,172,43,7, 2,3,39,38,53,30,73,30,11,10,19,48,20,31,68,16, 4,90,38,8,2,1,24,10,0,1,0,65,255,246,3,0, 2,8,0,40,0,0,23,34,39,17,51,17,20,23,22,23, 22,51,50,55,54,53,17,51,17,20,23,22,51,50,55,54, 55,52,53,17,51,17,35,53,6,7,6,35,34,39,6,226, 158,3,88,16,8,15,23,30,54,36,37,88,72,9,11,34, 33,56,5,88,79,33,71,26,27,116,30,61,10,174,1,100, 254,185,69,22,11,11,14,36,36,81,1,45,254,175,105,11, 1,18,37,107,11,12,1,13,253,249,73,57,20,7,91,91, 0,1,0,74,255,45,1,239,2,17,0,29,0,0,37,35, 53,52,39,38,39,38,35,34,15,1,6,7,23,33,21,33, 7,35,17,51,21,54,51,50,31,1,22,21,1,239,88,6, 12,55,16,18,71,39,13,13,2,1,1,74,254,182,1,88, 79,60,104,78,53,14,33,189,98,73,19,55,15,5,54,22, 31,70,181,96,211,2,217,77,88,47,14,44,104,0,0,2, 0,35,255,47,2,49,2,18,0,24,0,40,0,0,19,50, 23,22,23,53,51,3,51,21,35,21,39,17,6,7,34,39, 38,39,38,53,52,55,54,19,52,39,38,35,34,7,6,21, 20,23,22,51,50,55,54,254,84,48,9,10,80,1,77,77, 87,50,86,58,57,83,22,6,103,50,217,43,43,56,55,42, 41,41,42,59,57,41,40,2,18,55,11,13,68,254,72,79, 209,1,1,6,63,3,34,52,120,33,36,163,70,34,254,238, 101,52,52,49,50,98,103,50,50,47,47,0,0,1,0,73, 255,47,2,55,2,3,0,28,0,0,1,50,31,1,22,23, 17,51,21,35,21,35,17,52,39,34,7,6,7,17,35,17, 51,21,54,55,54,55,54,1,65,89,38,10,7,2,100,100, 86,80,110,25,6,1,86,83,18,22,26,69,15,2,3,65, 18,22,25,254,189,62,209,2,44,91,2,114,25,31,254,242, 1,249,80,25,24,30,9,2,0,1,0,60,255,245,1,230, 2,209,0,31,0,0,33,35,53,6,35,34,39,38,39,38, 39,38,39,17,55,21,5,21,33,7,20,23,22,23,22,51, 50,55,54,61,1,51,1,225,79,58,107,92,46,3,3,17, 11,3,2,89,1,81,254,175,1,27,8,11,28,34,54,43, 41,87,74,85,52,4,4,24,42,29,56,2,7,2,201,1, 92,223,77,29,9,7,17,35,36,100,97,0,0,2,0,42, 255,47,2,66,2,6,0,26,0,44,0,0,55,52,55,54, 51,50,23,22,23,53,51,17,51,21,35,17,6,7,6,35, 34,39,38,39,38,39,38,23,50,55,54,55,52,39,38,35, 34,7,6,21,20,23,22,23,22,42,77,55,83,62,34,34, 10,82,99,184,41,85,12,13,108,57,6,7,8,9,6,228, 72,35,19,1,62,30,40,97,28,9,55,19,24,18,245,142, 76,55,25,25,17,54,253,112,58,1,15,65,10,1,108,13, 15,26,35,35,162,89,47,55,128,50,24,116,38,46,105,54, 19,8,5,0,0,1,0,94,255,135,1,101,2,209,0,11, 0,0,37,21,47,1,35,17,51,21,51,21,35,17,1,62, 75,1,148,86,177,177,74,195,2,119,2,209,243,77,254,185, 0,1,0,63,255,48,1,228,2,17,0,32,0,0,5,35, 17,52,39,38,39,38,35,34,15,1,6,7,6,7,19,33, 21,37,17,51,21,54,51,50,23,22,23,22,23,22,21,1, 228,88,5,12,53,17,20,66,39,15,1,1,14,2,1,1, 72,254,95,79,60,105,73,52,11,8,18,10,5,1,1,32, 76,16,53,17,5,48,23,2,3,33,68,254,119,92,2,2, 212,77,88,42,9,10,24,42,40,42,0,2,0,68,255,35, 2,42,2,6,0,42,0,56,0,0,55,52,55,54,55,51, 53,38,39,34,7,6,7,6,7,17,7,19,51,21,54,55, 54,55,54,51,55,50,23,22,23,21,51,21,35,21,20,7, 6,7,34,39,38,23,50,55,54,61,1,35,34,7,6,7, 20,23,22,208,59,38,51,83,8,125,26,27,50,21,30,3, 81,2,78,10,31,18,44,5,5,32,116,45,48,3,49,48, 33,38,75,94,39,19,152,66,13,3,95,53,15,3,1,44, 19,126,78,43,28,1,65,112,4,6,21,35,48,47,253,248, 1,2,214,65,20,28,18,9,1,2,48,63,54,80,60,63, 66,43,54,2,66,32,33,71,14,16,64,62,14,16,45,20, 8,0,0,2,0,48,255,242,2,70,2,211,0,27,0,41, 0,0,19,52,55,54,59,1,53,51,21,51,21,35,21,20, 7,6,43,1,39,34,39,34,39,38,39,38,39,38,37,35, 34,7,20,23,22,23,50,55,54,55,54,53,48,66,56,85, 140,89,98,98,105,48,67,14,18,4,8,4,38,11,15,86, 15,3,1,94,122,133,5,31,30,73,60,35,16,7,9,1, 2,120,73,61,211,212,68,233,132,62,30,2,2,13,4,12, 56,134,24,213,190,90,55,53,2,51,27,38,48,82,0,1, 0,66,255,51,1,232,2,204,0,25,0,0,23,17,51,17, 54,51,50,23,22,21,22,21,17,35,17,52,39,38,35,34, 7,6,7,6,21,17,66,88,62,93,151,22,1,5,88,88, 10,11,68,40,8,6,15,205,3,153,254,255,71,128,3,3, 33,34,254,183,1,73,112,12,2,52,11,12,36,60,254,23, 0,1,0,60,255,48,0,247,2,7,0,5,0,0,23,21, 35,3,51,19,247,186,1,87,1,125,83,2,215,253,124,0, 0,1,0,66,255,46,2,214,2,201,0,33,0,0,1,35, 17,35,17,51,21,51,17,20,23,22,23,22,23,50,55,54, 53,17,51,17,35,53,6,7,34,39,38,39,38,39,38,53, 1,48,153,85,85,242,26,8,12,25,36,56,41,41,88,79, 56,109,87,48,5,4,20,8,7,1,183,253,119,3,155,193, 254,194,76,29,9,8,15,2,36,34,101,1,28,253,249,74, 84,2,49,5,6,29,37,54,87,0,0,2,0,43,255,242, 2,11,2,230,0,43,0,64,0,0,5,34,39,38,53,52, 55,54,63,2,54,55,54,51,55,38,39,38,39,52,55,23, 6,7,20,23,22,23,51,21,35,22,23,22,23,22,31,1, 20,23,20,7,6,39,50,55,54,55,54,55,52,39,38,39, 38,35,34,15,1,6,21,20,23,22,1,13,129,66,31,6, 1,2,10,6,22,48,46,65,22,16,24,22,2,85,51,59, 1,26,27,41,146,102,7,11,23,14,1,1,2,1,71,57, 81,84,28,6,5,2,1,35,5,6,24,31,120,30,10,4, 115,12,14,126,65,81,29,31,14,3,31,14,58,40,39,1, 11,30,28,40,61,54,52,22,40,26,32,32,28,64,5,17, 30,84,7,6,33,25,14,115,69,55,70,101,22,28,25,27, 86,64,10,7,30,94,42,28,36,181,17,2,0,1,0,71, 255,45,1,238,2,209,0,23,0,0,5,39,17,6,7,34, 39,38,39,38,39,17,51,17,20,51,50,55,54,55,54,53, 17,51,1,238,88,61,95,115,42,1,2,18,1,88,110,71, 38,7,5,16,88,211,1,1,20,69,2,78,3,4,41,76, 2,12,253,244,126,55,9,11,37,59,1,23,0,1,0,66, 0,0,1,232,2,204,0,25,0,0,51,17,51,17,54,51, 50,23,22,21,22,21,17,35,17,52,39,38,35,34,7,6, 7,6,21,17,66,88,62,93,151,22,1,5,88,88,10,11, 68,40,8,6,15,2,204,254,255,71,128,3,3,33,34,254, 183,1,73,112,12,2,52,11,12,36,60,254,228,0,0,2, 0,40,255,242,1,216,2,224,0,50,0,73,0,0,1,20, 15,1,22,23,22,21,17,35,53,6,7,6,35,34,39,38, 39,38,53,52,55,54,55,54,55,54,55,54,55,52,39,38, 39,38,39,52,55,51,14,1,21,20,31,1,50,23,22,23, 22,1,20,23,22,23,50,55,54,53,52,55,52,39,38,39, 38,43,1,34,7,6,7,6,1,145,76,14,97,42,22,77, 7,34,32,62,62,50,51,28,29,13,7,16,18,10,35,68, 83,14,42,36,30,25,4,41,72,3,18,15,56,22,24,20, 4,1,254,240,67,30,42,90,34,8,1,37,24,47,11,10, 12,7,9,39,38,38,2,108,31,61,11,19,101,54,67,254, 236,63,19,29,29,33,34,62,69,76,32,36,25,27,30,10, 48,50,59,25,4,4,4,7,6,18,42,49,12,30,6,9, 6,8,6,8,16,6,254,139,128,49,22,1,120,56,11,11, 4,92,46,44,11,2,4,11,54,55,0,1,0,39,255,47, 2,20,2,3,0,23,0,0,5,35,17,52,39,34,7,6, 7,17,35,17,51,21,54,55,54,51,50,23,22,21,17,51, 2,20,185,81,91,37,8,5,86,82,41,15,41,68,75,35, 36,100,209,2,44,91,2,83,23,32,254,210,1,249,83,51, 12,30,41,39,50,253,237,0,0,2,0,43,0,0,1,251, 2,219,0,25,0,39,0,0,1,6,7,22,23,22,21,23, 49,7,20,7,33,38,39,52,55,54,55,54,55,39,55,23, 54,55,3,38,39,38,39,38,39,38,35,7,6,7,6,21, 1,251,32,156,150,25,1,3,1,1,254,61,1,1,39,8, 8,38,69,64,49,62,102,104,36,19,49,5,10,14,21,28, 5,4,54,40,35,2,171,31,166,166,228,2,3,56,21,8, 2,14,17,92,117,22,15,92,92,49,64,50,122,85,253,107, 143,88,13,17,26,28,37,7,78,102,90,75,0,1,0,73, 255,246,1,213,2,213,0,48,0,0,19,52,55,54,59,1, 50,23,21,39,34,15,1,20,31,1,22,23,22,21,17,35, 53,7,6,7,34,35,34,39,38,53,17,51,17,22,23,50, 55,54,55,53,52,39,38,39,38,39,38,244,100,19,25,64, 9,4,84,40,9,5,27,49,44,12,10,84,56,35,67,4, 3,84,47,16,86,9,71,122,19,2,2,16,17,36,37,16, 18,2,128,74,9,2,1,68,1,12,11,20,27,49,46,27, 24,27,254,98,56,36,28,2,66,34,25,1,134,254,160,84, 4,112,11,26,203,28,21,22,30,33,25,27,0,1,255,210, 255,46,0,153,2,7,0,15,0,0,23,50,55,54,53,17, 51,17,20,7,6,35,34,39,55,22,12,44,7,2,88,54, 28,48,42,27,17,27,133,51,16,40,2,33,253,221,128,35, 19,9,75,7,0,1,0,73,255,246,1,210,2,214,0,45, 0,0,33,35,53,7,6,7,6,7,6,7,34,47,1,38, 47,1,19,52,55,54,55,54,59,1,21,34,15,2,6,7, 20,7,17,20,23,22,23,50,55,50,55,54,55,17,51,1, 210,80,28,28,17,13,17,23,40,27,38,17,40,20,5,1, 48,8,9,45,72,65,102,33,13,5,6,4,1,46,9,25, 6,16,26,37,40,17,87,83,30,34,10,7,3,7,2,10, 9,24,46,33,1,169,65,62,12,8,42,61,39,22,12,25, 30,16,10,254,149,57,23,5,2,2,20,25,90,1,51,0, 0,1,0,53,255,47,1,137,1,254,0,47,0,0,1,52, 39,38,35,34,7,39,54,55,50,23,22,21,20,15,2,6, 7,6,21,22,59,1,54,55,21,35,34,47,1,34,39,38, 39,38,39,38,39,52,55,54,55,54,63,1,54,1,61,41, 26,32,51,46,43,59,86,79,51,39,40,28,34,102,22,24, 4,92,12,12,131,127,70,60,10,4,6,11,3,21,13,7, 8,15,35,109,34,22,37,12,1,66,52,35,23,56,58,73, 3,64,48,60,64,59,42,48,143,38,38,23,31,1,1,63, 5,2,3,2,3,7,15,13,31,26,31,59,154,47,33,56, 20,0,0,1,0,69,255,255,1,234,2,17,0,26,0,0, 5,35,17,52,39,38,39,38,35,34,15,1,6,7,17,35, 17,51,21,54,51,50,23,22,23,22,21,1,234,88,6,9, 51,19,22,69,40,14,13,2,88,79,60,105,75,53,9,7, 33,1,1,32,73,19,50,18,7,52,24,34,67,254,234,2, 7,77,88,45,8,8,44,104,0,1,0,35,255,47,1,101, 2,9,0,50,0,0,5,35,34,39,34,39,38,39,38,39, 52,63,1,54,55,52,39,38,39,38,39,52,55,54,55,23, 7,6,21,20,31,1,22,23,22,21,20,15,1,6,7,6, 21,23,22,59,1,55,51,55,51,1,101,107,74,29,16,31, 35,11,17,2,39,139,5,1,62,23,23,20,6,44,41,32, 86,71,41,2,61,38,15,15,23,69,66,16,9,2,7,87, 11,17,8,99,2,209,3,7,13,14,24,39,36,52,195,6, 11,27,41,16,20,19,18,21,68,58,42,19,85,53,20,5, 1,54,32,18,18,19,22,32,94,91,29,18,15,13,31,1, 1,0,0,1,0,65,255,43,3,0,2,8,0,40,0,0, 23,34,39,17,51,17,20,23,22,23,22,51,50,55,54,53, 17,51,17,20,23,22,51,50,55,54,55,52,53,17,51,17, 35,17,6,7,6,35,34,39,6,226,158,3,88,16,8,15, 23,30,54,36,37,88,72,9,11,34,33,56,5,88,79,33, 71,26,27,116,30,61,10,174,1,100,254,185,69,22,11,11, 14,36,36,81,1,45,254,175,105,11,1,18,37,107,11,12, 1,13,253,35,1,31,57,20,7,91,91,0,0,2,0,38, 255,47,1,207,2,20,0,55,0,86,0,0,19,54,55,54, 51,23,50,23,22,23,22,23,22,21,20,7,6,15,1,6, 7,6,21,20,23,51,55,51,55,51,21,35,34,39,38,39, 52,55,54,55,54,55,54,53,52,47,2,38,39,38,53,55, 52,55,52,55,34,7,6,7,20,23,22,23,22,23,22,23, 54,63,1,54,55,54,55,54,53,52,39,52,39,38,39,38, 39,38,45,21,84,46,43,33,15,15,30,24,88,16,3,9, 33,117,55,21,35,22,112,11,17,8,92,2,147,72,31,71, 10,40,5,2,37,19,14,42,39,36,30,11,3,2,2,192, 92,29,7,2,23,1,2,13,31,78,1,3,12,24,33,30, 4,3,30,3,6,16,46,4,5,38,1,137,78,40,21,1, 6,6,16,46,109,18,18,41,31,119,103,44,17,33,22,14, 35,1,1,1,63,3,7,62,27,45,5,3,39,28,22,20, 40,38,35,30,25,76,20,17,31,9,5,8,72,83,21,26, 36,35,1,3,21,31,58,90,2,12,26,33,52,7,6,57, 59,19,12,12,12,55,21,2,2,16,0,1,0,80,255,254, 1,247,2,17,0,41,0,0,1,54,53,52,39,38,39,34, 7,6,7,6,21,17,35,17,51,21,54,51,50,23,22,23, 22,23,22,23,20,7,6,7,6,15,1,51,7,39,53,50, 55,54,1,159,3,46,26,40,72,39,7,5,15,88,79,60, 104,74,53,11,7,10,12,11,2,16,10,19,13,4,112,116, 1,176,2,31,93,1,52,16,14,62,34,19,1,55,10,11, 34,67,254,234,2,7,77,88,44,8,9,12,42,33,26,43, 37,28,31,20,3,114,81,1,77,32,97,0,0,1,0,64, 255,244,1,228,2,7,0,29,0,0,33,53,6,35,34,39, 38,39,38,39,38,53,17,51,17,20,23,22,23,22,51,50, 55,54,55,54,53,17,51,17,1,150,61,104,70,54,12,8, 19,9,5,88,5,12,56,16,18,72,38,7,5,15,88,76, 88,42,9,10,25,41,45,37,1,66,254,224,77,16,54,16, 4,54,11,11,34,67,1,22,253,249,0,1,0,71,255,45, 2,68,2,204,0,25,0,0,5,17,6,7,34,39,38,39, 38,39,17,51,17,20,51,50,55,54,55,54,53,17,51,3, 51,21,1,150,61,95,115,42,1,2,18,1,88,110,71,38, 7,5,16,88,2,88,210,1,20,69,2,78,3,4,41,76, 1,68,254,188,126,55,9,11,37,59,1,218,252,172,75,0, 0,1,0,73,255,243,3,64,2,17,0,53,0,0,5,35, 17,52,39,38,39,38,35,34,7,6,7,6,7,17,35,53, 6,35,34,39,38,39,38,39,38,53,17,51,17,20,23,22, 23,22,51,50,55,54,55,54,53,17,51,21,54,51,50,23, 22,23,22,21,3,64,88,6,12,55,16,18,72,39,7,5, 13,2,84,61,104,71,54,11,8,19,9,5,88,5,12,56, 16,18,70,39,8,5,15,85,60,104,76,53,9,7,33,1, 1,32,73,19,55,15,5,55,10,11,31,70,254,234,76,88, 43,9,9,25,41,45,37,1,66,254,224,77,16,54,16,4, 53,11,12,35,66,1,22,77,88,45,8,8,44,104,0,1, 0,69,255,45,1,234,2,17,0,26,0,0,5,35,17,52, 39,38,39,38,35,34,15,1,6,7,17,35,17,51,21,54, 51,50,23,22,23,22,21,1,234,88,6,9,51,19,22,69, 40,14,13,2,88,79,60,105,75,53,9,7,33,1,1,32, 73,19,50,18,7,52,24,34,67,254,24,2,217,77,88,45, 8,8,44,104,0,2,0,32,255,46,1,233,2,18,0,35, 0,51,0,0,19,52,55,54,51,50,23,53,51,17,20,7, 6,7,6,35,34,39,38,39,38,53,23,22,23,50,55,54, 55,54,55,6,35,34,39,38,55,20,23,22,51,50,55,54, 53,52,39,38,35,34,7,6,32,79,58,88,92,59,81,24, 37,107,31,35,134,48,6,4,13,85,9,110,104,30,3,3, 4,2,57,87,129,59,35,90,40,40,62,60,41,41,42,43, 59,58,42,40,1,6,138,75,55,74,63,254,63,119,51,81, 23,6,74,9,10,29,45,13,79,3,77,7,9,28,85,68, 111,64,94,103,46,47,47,47,99,95,48,49,48,43,0,1, 0,76,0,0,1,31,1,249,0,5,0,0,19,17,51,21, 35,17,161,126,211,1,249,254,69,62,1,249,0,1,0,43, 255,50,3,34,2,211,0,53,0,0,1,50,23,22,23,22, 23,22,21,17,35,17,52,39,38,47,1,35,34,7,6,7, 6,21,17,35,17,6,35,34,39,38,39,38,53,17,51,17, 20,23,22,23,22,51,50,55,54,55,54,55,17,51,17,54, 2,113,77,53,9,6,17,10,5,88,5,12,53,31,6,69, 39,9,5,15,85,61,103,71,54,11,8,34,88,6,13,58, 14,16,73,38,7,5,13,2,84,60,2,17,46,7,8,25, 41,40,42,254,191,1,32,76,16,53,17,5,53,11,12,34, 67,254,29,1,25,88,43,8,10,44,104,1,66,254,224,74, 19,57,14,3,55,10,11,31,70,1,227,254,230,88,0,2, 0,25,255,47,2,55,2,6,0,28,0,47,0,0,37,34, 39,21,33,21,33,21,35,53,35,53,51,17,51,21,54,55, 54,51,50,23,22,21,20,7,6,7,6,55,52,47,1,34, 35,34,7,6,21,20,23,22,23,50,55,50,55,54,1,85, 80,50,1,53,254,203,86,100,100,81,7,35,34,62,133,62, 28,56,45,72,17,102,92,36,6,6,63,32,33,56,30,41, 14,5,85,27,10,34,65,165,58,85,85,58,2,59,65,19, 30,29,116,59,80,99,59,53,13,3,237,145,25,6,48,47, 81,96,49,26,2,1,96,35,0,2,0,50,255,244,2,24, 2,18,0,17,0,33,0,0,19,52,55,54,51,50,23,22, 21,20,7,6,7,6,7,34,39,38,55,20,23,22,51,50, 55,54,53,52,39,38,39,34,7,6,50,154,40,49,106,68, 69,80,17,21,55,70,109,67,67,90,44,42,67,65,43,44, 44,42,66,65,44,42,1,3,199,57,15,71,69,123,154,67, 14,12,30,2,70,68,133,101,48,49,49,50,102,95,50,49, 2,50,48,0,0,3,0,42,255,47,2,111,2,214,0,38, 0,47,0,55,0,0,19,52,55,54,55,50,55,21,51,50, 31,1,22,21,20,7,6,35,7,21,35,53,7,39,34,47, 1,38,39,38,53,51,20,51,17,7,34,39,38,5,17,51, 50,55,54,53,52,35,39,20,23,22,51,53,34,7,89,125, 17,19,1,114,61,142,42,7,6,100,50,61,45,87,56,12, 12,15,19,45,39,40,78,160,21,59,56,55,1,22,37,95, 30,11,141,227,72,15,20,98,8,2,68,110,28,3,3,1, 223,151,28,29,31,167,64,32,1,208,208,1,2,3,5,10, 32,33,59,74,1,110,1,35,36,70,254,146,105,38,48,175, 150,69,11,2,157,62,0,1,0,70,255,248,2,33,2,211, 0,25,0,0,55,50,55,53,51,3,51,23,7,53,6,7, 6,7,6,7,34,39,38,39,38,53,3,51,17,22,236,140, 3,86,1,80,1,163,37,20,20,26,23,39,45,40,4,5, 52,1,86,6,67,143,146,254,227,68,1,82,47,15,14,8, 6,2,24,2,3,37,57,2,96,253,200,85,0,2,0,90, 0,0,0,190,2,7,0,3,0,7,0,0,19,53,51,21, 3,53,51,21,90,100,100,100,1,162,101,101,254,94,100,100, 0,1,0,12,0,166,1,38,1,7,0,11,0,0,37,6, 7,34,39,55,22,23,22,23,50,55,1,38,65,85,42,90, 46,38,25,27,33,39,48,203,34,3,21,76,24,10,7,2, 15,0,0,2,0,0,255,2,0,71,255,196,0,3,0,7, 0,0,21,51,21,35,53,51,21,35,71,71,71,71,184,70, 194,71,0,5,0,0,255,2,1,79,255,196,0,3,0,7, 0,11,0,15,0,19,0,0,21,51,21,35,55,51,21,35, 7,51,21,35,55,51,21,35,53,51,21,35,71,71,129,71, 71,64,70,70,200,70,70,70,70,60,71,71,71,53,70,70, 70,194,71,0,0,3,0,0,255,2,1,73,255,196,0,3, 0,7,0,11,0,0,21,51,21,35,5,51,21,35,53,51, 21,35,188,188,1,3,70,70,70,70,60,71,53,70,194,71, 0,3,0,0,255,2,1,73,255,196,0,3,0,7,0,15, 0,0,5,51,21,35,53,51,21,43,1,21,35,53,35,53, 51,21,1,3,70,70,70,70,130,70,59,188,184,70,194,71, 117,117,71,71,0,1,0,0,255,125,0,71,255,196,0,3, 0,0,21,51,21,35,71,71,60,71,0,2,0,0,255,125, 0,200,255,196,0,3,0,7,0,0,21,51,21,35,55,51, 21,35,71,71,129,71,71,60,71,71,71,0,0,3,0,0, 255,2,0,200,255,196,0,3,0,7,0,11,0,0,21,51, 21,35,55,51,21,35,7,51,21,35,71,71,129,71,71,64, 70,70,60,71,71,71,53,70,0,1,0,0,255,125,0,188, 255,196,0,3,0,0,21,51,21,35,188,188,60,71,0,1, 0,0,255,8,0,188,255,196,0,7,0,0,23,21,35,53, 35,53,51,21,129,70,59,188,131,117,117,71,71,0,0,1, 0,0,2,148,0,71,2,219,0,3,0,0,17,51,21,35, 71,71,2,219,71,0,0,3,0,0,255,2,1,73,255,196, 0,3,0,7,0,11,0,0,5,51,21,35,39,51,21,35, 39,51,21,35,1,3,70,70,130,71,71,129,71,71,184,70, 135,70,129,71,0,1,0,0,1,14,0,71,1,85,0,3, 0,0,17,51,21,35,71,71,1,85,71,0,0,1,0,0, 255,8,0,71,255,196,0,3,0,0,23,21,35,53,71,71, 60,188,188,0,0,1,0,38,2,12,1,177,2,88,0,3, 0,0,1,33,53,33,1,177,254,117,1,139,2,12,76,0, 0,1,0,0,2,148,0,200,2,219,0,3,0,0,17,51, 21,35,200,200,2,219,71,0,0,1,0,62,255,156,0,149, 2,188,0,3,0,0,23,17,51,17,62,87,100,3,32,252, 224,0,0,1,2,127,2,128,2,198,2,199,0,3,0,0, 1,51,21,35,2,127,71,71,2,199,71,0,0,1,0,70, 2,128,0,141,2,199,0,3,0,0,19,51,21,35,70,71, 71,2,199,71,255,255,0,110,0,0,0,214,2,12,16,6, 0,29,0,0,0,1,0,0,2,148,0,71,2,219,0,3, 0,0,17,51,21,35,71,71,2,219,71,0,0,1,0,58, 0,0,2,70,2,88,0,37,0,0,19,6,7,6,7,6, 7,21,35,53,55,54,55,54,55,54,55,39,51,19,54,55, 54,55,54,55,53,51,21,7,6,7,6,7,6,7,23,35, 252,25,7,48,10,8,1,87,3,10,60,4,5,20,38,148, 102,228,25,7,47,10,9,1,87,3,11,58,5,5,20,38, 148,102,1,69,17,11,62,32,25,37,141,141,45,65,78,5, 6,25,25,210,254,187,17,11,61,25,25,36,150,150,43,62, 73,5,7,25,25,210,0,1,0,58,0,0,2,54,2,88, 0,27,0,0,37,17,38,39,38,39,38,39,38,39,35,53, 51,22,23,22,23,22,23,22,23,22,23,17,51,21,33,53, 1,149,13,16,6,7,34,106,8,18,139,145,94,49,12,12, 40,24,41,13,2,2,74,254,4,76,1,39,54,23,8,9, 39,16,1,3,76,11,20,5,6,17,32,52,61,8,10,254, 210,76,76,0,0,1,0,30,0,0,1,177,2,88,0,26, 0,0,37,7,35,55,51,39,38,39,38,39,38,39,38,39, 38,39,38,35,53,50,23,22,23,22,23,19,35,1,66,175, 117,207,81,22,6,19,6,11,13,16,1,4,62,32,15,19, 82,87,70,34,14,4,50,88,172,172,203,167,46,27,9,13, 15,8,1,2,28,4,1,76,42,31,82,32,34,254,133,0, 0,1,0,38,0,0,2,31,2,88,0,7,0,0,1,17, 35,17,33,53,33,21,1,204,87,254,177,1,249,2,12,253, 244,2,12,76,76,0,0,2,0,63,0,0,2,58,2,88, 0,26,0,30,0,0,1,17,35,17,38,39,38,39,38,47, 1,38,39,34,39,35,53,33,22,23,22,23,22,23,22,23, 22,1,17,51,17,2,58,87,11,14,5,6,10,12,6,38, 57,2,10,249,1,1,83,50,6,6,35,22,33,13,1,254, 6,87,1,122,254,134,1,116,55,24,8,8,14,7,4,21, 9,2,76,11,25,4,3,19,31,50,66,6,254,127,1,119, 254,137,0,1,0,62,0,0,0,149,2,88,0,3,0,0, 51,17,51,17,62,87,2,88,253,168,0,1,0,39,0,0, 1,40,2,88,0,7,0,0,19,17,35,17,35,53,33,21, 213,87,87,1,1,2,12,253,244,2,12,76,76,0,0,1, 0,63,0,0,2,59,2,88,0,24,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,17,35,17,33, 50,23,22,23,22,2,59,87,11,14,5,6,10,12,6,38, 57,2,10,163,87,1,1,64,63,8,11,81,1,122,254,134, 1,116,55,24,8,8,14,7,4,21,9,2,253,244,2,88, 33,4,6,41,0,1,0,61,0,0,2,58,2,88,0,68, 0,0,1,34,7,53,54,51,50,23,22,23,22,23,22,23, 21,6,7,6,7,6,7,6,35,34,39,38,39,38,39,38, 39,17,51,17,22,23,22,23,22,23,20,23,22,23,22,51, 54,55,54,55,54,55,52,55,54,55,52,55,53,38,39,38, 39,38,47,1,38,39,38,1,58,32,45,42,38,72,76,36, 20,34,12,2,1,12,27,5,5,21,35,77,72,73,77,33, 23,36,11,1,1,87,11,17,4,4,11,11,6,50,28,11, 15,43,35,8,17,16,9,3,24,10,2,11,17,4,4,11, 11,6,51,23,13,2,12,20,82,14,43,20,30,49,65,7, 8,156,71,44,7,7,33,17,43,43,17,33,52,64,6,7, 1,122,254,140,56,28,5,6,15,6,1,3,27,3,2,1, 17,5,9,10,10,1,4,34,49,4,8,144,56,28,5,6, 15,6,4,27,3,2,0,1,0,58,1,30,0,145,2,88, 0,3,0,0,19,51,17,7,58,87,87,2,88,254,233,35, 0,1,0,38,255,56,1,218,2,88,0,26,0,0,1,17, 35,17,38,39,38,39,38,47,1,38,39,34,39,35,53,51, 22,23,22,23,22,23,22,23,22,1,218,87,11,14,5,6, 10,12,6,38,57,2,10,178,186,83,50,6,6,35,22,33, 13,1,1,122,253,190,2,60,55,24,8,8,14,7,4,21, 9,2,76,11,25,4,3,19,31,50,66,6,0,1,0,57, 0,0,2,4,2,88,0,44,0,0,51,35,53,51,54,55, 54,55,54,55,54,55,54,63,1,53,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,21, 6,7,6,7,6,7,6,227,170,164,78,30,11,12,21,11, 1,2,26,12,4,13,16,6,7,34,106,8,18,164,170,95, 55,8,9,40,24,41,13,2,2,13,34,5,6,53,172,3, 76,11,12,4,6,10,12,2,2,32,46,16,142,54,23,8, 9,39,16,1,3,76,11,24,3,4,17,32,52,61,8,10, 156,69,47,7,8,69,21,1,0,1,0,37,0,0,2,33, 2,237,0,27,0,0,37,6,29,1,35,52,55,54,55,54, 55,54,55,54,55,53,33,53,51,21,33,21,20,15,1,6, 7,6,1,148,27,87,5,7,24,23,46,28,8,26,1,254, 91,87,1,165,31,5,22,46,29,208,42,97,69,120,30,49, 43,36,37,22,17,41,86,43,225,149,153,60,57,10,36,36, 23,0,0,2,0,63,0,0,2,60,2,88,0,10,0,20, 0,0,41,1,17,51,50,23,22,23,22,31,1,3,17,38, 39,38,39,38,39,35,17,2,59,254,4,217,85,84,39,26, 51,5,1,87,1,41,21,13,57,71,130,2,88,42,19,30, 63,53,18,254,213,1,43,51,39,18,8,32,1,254,64,0, 0,1,0,48,0,0,2,58,2,88,0,24,0,0,19,3, 35,19,35,53,51,50,23,22,23,22,21,17,33,53,51,17, 52,39,38,47,1,38,35,214,58,88,58,78,231,77,53,85, 45,31,254,214,211,18,28,31,35,36,56,2,12,253,244,2, 12,76,23,33,65,45,59,254,137,76,1,43,38,26,37,17, 16,15,0,1,0,62,255,56,0,149,2,88,0,3,0,0, 23,17,51,17,62,87,200,3,32,252,224,0,0,1,0,51, 0,0,1,70,2,88,0,20,0,0,41,1,53,51,17,38, 39,38,39,38,47,1,38,39,38,35,53,50,23,22,23,1, 70,254,237,188,11,14,5,6,10,12,6,52,29,10,13,73, 77,85,20,76,1,40,55,24,8,8,14,7,4,28,3,1, 76,43,46,133,0,2,0,61,0,0,2,57,2,88,0,28, 0,66,0,0,33,34,39,38,39,38,39,52,39,17,33,50, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,39,54,55,54,55,54,55,52,55,54,55,52,55,53,38, 39,38,39,38,47,1,38,39,34,39,35,17,22,23,22,23, 22,23,20,23,22,23,22,1,59,73,77,33,23,40,7,1, 1,1,64,66,7,9,36,20,34,12,2,1,12,27,5,5, 21,35,77,72,43,35,8,17,16,9,3,24,10,2,11,17, 4,4,11,11,6,38,57,2,10,163,11,15,4,5,11,11, 6,50,28,11,43,17,33,58,57,7,7,1,122,34,4,5, 20,30,49,65,7,8,156,71,44,7,7,33,17,43,76,1, 17,5,9,10,10,1,4,34,49,4,8,144,56,28,5,6, 15,6,4,21,9,2,254,216,56,25,7,7,15,6,1,3, 27,3,2,0,0,1,0,36,255,201,2,19,2,88,0,24, 0,0,55,3,51,19,55,54,55,54,55,54,63,1,17,51, 17,6,7,6,7,6,15,2,5,55,205,120,89,115,15,63, 10,13,11,26,10,7,87,14,12,13,23,37,65,31,2,254, 214,1,67,2,21,254,0,4,26,7,8,13,29,46,35,1, 88,254,162,74,25,26,26,41,25,11,1,76,79,0,0,1, 0,57,255,56,2,11,2,88,0,41,0,0,19,51,50,23, 22,23,22,23,22,23,22,23,17,35,17,38,39,38,39,38, 47,1,38,39,34,39,35,21,22,23,22,23,51,21,47,1, 38,39,38,39,38,39,57,215,64,63,8,11,35,22,33,13, 1,1,87,11,14,5,6,10,12,6,38,57,2,10,121,8, 20,14,66,34,40,71,36,31,43,6,1,1,2,88,33,4, 6,19,31,50,66,6,7,253,190,2,60,55,24,8,8,14, 7,4,21,9,2,127,52,12,8,6,76,1,7,7,23,36, 55,7,11,0,0,1,0,63,0,0,2,21,2,88,0,57, 0,0,51,35,53,51,50,55,54,55,54,55,54,55,53,38, 39,38,39,38,39,34,43,1,21,22,23,22,23,51,21,47, 1,38,39,38,39,52,39,53,51,50,23,22,23,22,23,22, 23,22,31,1,21,20,7,6,7,6,7,6,244,181,175,56, 55,7,13,44,23,9,1,2,44,14,17,59,53,9,10,88, 8,20,14,66,34,40,71,37,30,43,7,1,181,76,66,11, 14,30,29,3,2,47,10,1,36,11,11,29,35,97,76,24, 3,6,19,60,22,19,142,57,42,13,8,30,3,127,52,12, 8,6,76,1,7,7,23,36,58,6,9,210,30,5,7,15, 29,3,2,53,63,15,156,38,61,19,13,33,16,42,0,1, 0,13,255,56,1,229,2,88,0,25,0,0,1,54,55,54, 55,54,55,54,55,48,55,53,51,21,6,15,1,6,7,6, 7,17,35,17,3,51,1,21,46,14,11,11,2,2,23,11, 1,87,10,33,6,24,34,38,44,87,196,99,1,84,5,7, 6,13,4,2,29,42,5,147,154,55,48,8,34,16,16,4, 254,47,1,234,1,54,0,1,0,51,0,0,2,21,2,88, 0,28,0,0,1,54,55,54,55,54,55,54,55,54,55,48, 55,53,51,21,6,15,1,6,7,6,7,19,33,53,33,1, 51,1,60,46,10,2,2,11,11,2,2,23,11,1,87,10, 33,6,24,34,30,25,171,254,38,1,70,254,178,100,1,85, 5,4,1,1,6,13,4,2,29,42,5,147,154,55,48,8, 34,16,13,3,254,243,76,2,12,0,0,2,0,62,255,56, 2,38,2,88,0,18,0,22,0,0,37,35,53,51,54,55, 54,63,1,17,33,53,33,17,6,7,6,7,6,1,17,35, 17,1,44,62,55,104,31,23,9,3,254,111,1,232,12,24, 5,7,48,254,207,87,33,76,14,42,33,50,13,1,7,76, 254,167,71,40,8,10,73,1,117,253,142,2,114,0,0,1, 0,37,0,0,1,239,2,88,0,26,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,53,51,22,23, 22,23,22,23,22,23,22,1,239,87,11,14,5,6,10,12, 6,38,57,2,10,200,207,84,50,6,6,35,22,33,13,1, 1,122,254,134,1,116,55,24,8,8,14,7,4,21,9,2, 76,11,26,3,3,19,31,50,66,6,0,1,0,59,0,0, 2,209,2,88,0,60,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,151,13,61,17,16,36,47,8,82,34,38, 18,54,33,23,2,87,3,17,91,22,21,64,71,82,71,63, 67,45,4,4,35,87,99,39,17,6,10,24,3,1,87,3, 10,40,50,79,2,2,224,53,50,13,9,20,3,4,9,10, 27,52,38,40,3,3,1,82,254,174,39,92,71,16,11,31, 2,2,31,35,63,5,6,57,57,3,3,1,82,254,212,2, 12,4,8,24,28,6,9,207,207,36,49,34,50,0,0,1, 0,35,0,0,2,123,2,88,0,45,0,0,1,17,20,7, 6,7,6,15,1,6,43,1,53,51,50,55,54,55,54,55, 54,61,1,17,35,53,33,22,23,22,31,1,17,35,17,38, 39,38,39,38,39,38,39,38,47,1,1,16,9,6,11,13, 37,8,65,84,4,4,50,41,6,6,21,5,17,60,1,3, 155,48,33,12,3,87,11,15,4,6,11,12,2,3,38,59, 10,2,12,254,212,63,28,18,19,24,24,5,43,76,25,3, 4,14,8,24,44,29,1,41,76,21,72,50,64,15,254,134, 1,116,56,25,7,8,15,7,1,2,20,9,2,0,0,12, 0,56,0,2,2,55,1,248,0,15,0,31,0,47,0,63, 0,79,0,95,0,111,0,127,0,143,0,159,0,175,0,191, 0,0,37,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,64,34,16,6,31,20,5,33,16,6,30,12,13, 34,16,6,31,20,5,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,221,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,1,132,35,15,6, 31,15,10,32,16,7,29,12,14,35,15,6,31,15,10,32, 16,7,29,12,14,34,16,5,32,11,12,35,15,6,33,11, 205,36,15,5,30,19,7,33,16,6,30,12,13,36,15,5, 30,19,7,33,16,6,30,12,13,36,14,5,33,11,11,37, 14,5,33,11,113,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,196,30,19,7,34,15,6, 30,11,14,34,16,6,30,19,7,34,15,6,30,11,14,34, 16,6,34,10,12,35,15,5,33,10,12,37,14,5,1,31, 20,5,34,16,5,1,30,12,14,33,16,7,31,20,5,34, 16,5,1,30,12,14,33,16,7,33,11,12,35,15,6,32, 12,12,36,15,5,194,32,11,13,34,15,6,30,11,14,34, 16,6,32,11,13,34,15,6,30,11,14,34,16,6,34,10, 12,35,15,5,33,10,12,37,14,5,0,1,0,52,0,99, 0,163,0,210,0,15,0,0,55,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,107,34,16,6,31,12,13,33, 16,6,30,12,210,30,12,14,34,15,6,30,11,14,34,16, 6,0,0,1,0,50,255,144,0,161,255,255,0,15,0,0, 23,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 105,34,16,6,31,12,13,33,16,6,30,12,1,30,12,14, 34,15,6,30,12,13,34,16,6,0,0,6,0,51,0,100, 0,162,1,196,0,15,0,31,0,47,0,63,0,79,0,95, 0,0,55,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,106,36,15,5,30,12,14,33,16,6,30,12,13,36, 15,5,30,12,14,33,16,6,30,12,13,36,14,5,33,11, 11,37,14,5,33,11,12,34,16,6,31,12,13,33,16,6, 30,12,13,34,16,6,31,12,13,33,16,6,30,12,13,36, 14,5,33,11,11,36,15,5,34,10,211,32,11,13,34,15, 6,30,11,14,34,16,6,32,11,13,34,15,6,30,11,14, 34,16,6,34,10,12,35,15,5,33,10,12,37,14,5,241, 30,19,7,34,15,6,30,11,14,34,16,6,30,19,7,34, 15,6,30,11,14,34,16,6,34,10,12,35,15,5,33,10, 12,37,14,5,0,6,0,44,255,16,0,156,0,112,0,15, 0,31,0,47,0,63,0,79,0,95,0,0,23,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,39,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,100,34,16,6, 31,12,13,33,16,6,30,12,13,34,16,6,31,12,13,33, 16,6,30,12,13,36,14,5,33,11,11,36,15,5,34,10, 12,34,16,6,31,12,13,34,16,6,31,12,13,34,16,6, 31,12,13,34,16,6,31,12,13,35,15,6,32,12,12,36, 15,5,34,10,129,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,241,30,12,14,34,15,6, 31,11,13,34,16,6,30,12,14,34,15,6,31,11,13,34, 16,6,32,12,12,34,16,5,33,10,12,37,14,5,0,6, 0,106,0,1,1,138,0,113,0,15,0,31,0,47,0,63, 0,79,0,95,0,0,37,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,39,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,1,82,34,16,6,31,20,5,33,16, 6,30,12,13,34,16,6,31,20,5,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,189,34,16,6,31, 12,13,33,16,6,30,12,13,34,16,6,31,12,13,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,34,10,112, 30,12,14,34,15,6,30,11,14,34,16,6,30,12,14,34, 15,6,30,11,14,34,16,6,34,10,12,35,15,5,33,10, 12,37,14,5,1,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,0,0,6,0,106,255,146, 1,138,0,113,0,15,0,31,0,47,0,63,0,79,0,95, 0,0,37,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,39,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,82,34,16,6,31,20,5,33,16,6,30,12,13, 34,16,6,31,20,5,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,189,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,1,30,12,14,34, 15,6,30,11,14,34,16,6,30,12,14,34,15,6,30,11, 14,34,16,6,34,10,12,35,15,5,33,10,12,37,14,5, 112,30,12,14,34,15,6,30,11,14,34,16,6,30,12,14, 34,15,6,30,11,14,34,16,6,34,10,12,35,15,5,33, 10,12,37,14,5,0,0,6,0,106,255,147,1,138,0,112, 0,15,0,31,0,47,0,63,0,79,0,95,0,0,37,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,1,82, 34,16,6,31,20,5,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,13,36,14,5,33,11,11,36,15, 5,34,10,189,34,16,6,31,12,13,33,16,6,30,12,13, 34,16,6,31,12,13,33,16,6,30,12,13,36,14,5,33, 11,11,36,15,5,34,10,112,30,12,14,34,15,6,30,11, 14,34,16,6,30,12,14,34,15,6,30,11,14,34,16,6, 34,10,12,35,15,5,33,10,12,37,14,5,110,30,12,14, 34,15,6,30,11,14,34,16,6,30,12,14,34,15,6,30, 11,14,34,16,6,34,10,12,35,15,5,33,10,12,37,14, 5,0,0,6,0,84,0,97,1,53,1,194,0,15,0,31, 0,47,0,63,0,79,0,95,0,0,55,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,51,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,51,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,254,34,15,6,31,20, 4,34,16,6,31,12,13,34,15,6,31,20,4,34,16,6, 31,12,13,35,15,6,32,12,12,36,14,5,33,10,127,36, 15,5,31,12,13,33,16,6,30,12,13,36,15,5,31,12, 13,33,16,6,30,12,13,36,14,5,31,12,12,36,15,5, 33,11,208,30,12,14,35,15,5,31,11,13,34,16,6,30, 12,14,35,15,5,31,11,13,34,16,6,32,12,12,34,16, 5,32,11,12,37,14,5,242,32,11,13,34,15,6,30,12, 13,34,16,6,32,11,13,34,15,6,30,12,13,34,16,6, 34,10,12,34,15,6,33,10,12,37,14,5,0,6,0,87, 255,15,1,57,0,112,0,15,0,31,0,47,0,63,0,79, 0,95,0,0,5,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,51,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,51,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,51,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,1,1,34,16,6,31,20,5,35,15,5,30, 12,13,34,16,6,31,20,5,35,15,5,30,12,13,36,14, 5,32,11,12,36,15,5,34,10,127,36,15,5,30,12,14, 33,16,6,31,11,13,36,15,5,30,12,14,33,16,6,31, 11,13,34,16,5,31,12,12,37,14,5,33,11,130,30,12, 14,34,15,6,31,11,13,34,16,6,30,12,14,34,15,6, 31,11,13,34,16,6,34,10,12,36,14,5,33,10,12,37, 14,5,242,32,11,13,34,15,6,30,12,13,34,16,6,32, 11,13,34,15,6,30,12,13,34,16,6,32,12,12,34,15, 6,33,10,12,37,14,5,0,0,13,0,26,0,3,2,36, 2,200,0,15,0,31,0,47,0,63,0,79,0,95,0,111, 0,127,0,143,0,159,0,175,0,191,0,195,0,0,1,50, 31,1,21,20,7,6,7,34,39,38,53,52,55,54,51,50, 31,1,21,20,7,6,7,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,50, 31,1,21,20,7,6,35,34,39,38,53,52,55,54,51,50, 31,1,21,20,7,6,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,19,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 23,22,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,51,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,51,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,55,21, 33,53,1,121,35,15,6,31,15,10,32,16,7,29,12,14, 35,15,6,31,15,10,32,16,7,29,12,14,34,16,5,32, 11,12,35,15,6,33,11,188,34,16,6,31,12,13,33,16, 6,30,12,13,34,16,6,31,12,13,33,16,6,30,12,13, 36,14,5,33,11,11,36,15,5,34,10,75,34,16,6,31, 20,5,33,16,6,30,12,13,34,16,6,31,20,5,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,34,10,12, 34,16,6,31,20,5,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,13,36,14,5,33,11,11,36,15, 5,34,10,248,253,246,2,200,31,20,5,34,16,5,1,30, 12,14,33,16,7,31,20,5,34,16,5,1,30,12,14,33, 16,7,33,11,12,35,15,6,32,12,12,36,15,5,1,30, 19,7,34,15,6,30,11,14,34,16,6,30,19,7,34,15, 6,30,11,14,34,16,6,34,10,12,35,15,5,33,10,12, 37,14,5,253,171,30,12,14,34,15,6,30,11,14,34,16, 6,30,12,14,34,15,6,30,11,14,34,16,6,34,10,12, 35,15,5,33,10,12,37,14,5,240,30,19,7,34,15,6, 30,11,14,34,16,6,30,19,7,34,15,6,30,11,14,34, 16,6,34,10,12,35,15,5,33,10,12,37,14,5,170,92, 92,0,0,4,0,26,0,245,2,36,2,12,0,15,0,31, 0,47,0,51,0,0,1,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,15,1,35,34, 39,38,53,52,55,54,51,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,55,21,33,53,1,32,36,15,5,31, 20,5,33,16,6,30,12,13,36,15,5,31,20,5,33,16, 6,30,12,13,36,14,5,33,11,11,36,15,5,33,11,248, 253,246,1,100,32,11,13,34,15,6,30,11,14,34,16,6, 32,11,13,34,15,6,30,11,14,34,16,6,34,10,12,35, 15,5,33,10,12,37,14,5,168,92,92,0,0,1,0,136, 0,177,1,224,2,109,0,6,0,0,1,55,7,39,55,3, 55,1,176,48,24,140,50,230,77,1,16,31,126,24,30,1, 89,45,0,18,0,26,0,228,2,36,2,210,0,15,0,31, 0,47,0,63,0,79,0,95,0,99,0,103,0,119,0,135, 0,151,0,155,0,159,0,175,0,191,0,207,0,211,0,215, 0,0,1,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,50,31,1,21,20,7,6,7,34,39,38,53,52, 55,54,51,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,37,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,19,50,31,1,21,20,7,6,35,34,39,38,53,52, 55,54,19,35,3,51,23,21,33,53,5,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,37,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,19,50,31,1,21,20, 7,6,35,34,39,38,53,52,55,54,19,35,3,51,23,21, 33,53,5,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,3,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,19,3,35,19,1,33,21,33,1,199,35,15,6,31, 15,10,32,16,7,29,12,14,35,15,6,31,15,10,32,16, 7,29,12,14,34,16,5,32,11,12,35,15,6,33,11,10, 34,15,6,30,12,13,34,16,6,30,12,254,193,34,16,6, 31,12,13,33,16,6,30,12,13,34,16,6,31,12,13,33, 16,6,30,12,231,101,1,101,207,253,246,1,175,34,15,6, 30,12,13,34,16,6,30,12,254,193,34,16,6,31,12,13, 33,16,6,30,12,13,34,16,6,31,12,13,33,16,6,30, 12,231,101,1,101,207,253,246,1,175,35,15,6,32,12,12, 36,14,5,33,10,254,167,36,14,5,33,11,11,36,15,5, 34,10,12,36,14,5,33,11,11,36,15,5,34,10,206,1, 101,1,1,51,253,246,2,10,2,177,31,20,5,34,16,5, 1,30,12,14,33,16,7,31,20,5,34,16,5,1,30,12, 14,33,16,7,33,11,12,35,15,6,32,12,12,36,15,5, 254,207,31,20,5,34,16,6,31,12,13,32,17,7,2,30, 19,7,34,15,6,30,11,14,34,16,6,1,46,30,19,7, 34,15,6,30,11,14,34,16,6,254,52,1,238,198,92,92, 140,31,20,5,34,16,6,31,12,13,32,17,7,2,30,19, 7,34,15,6,30,11,14,34,16,6,1,46,30,19,7,34, 15,6,30,11,14,34,16,6,254,52,1,238,198,92,92,140, 33,11,12,35,15,6,34,10,12,36,15,5,2,34,10,12, 35,15,5,33,10,12,37,14,5,1,46,34,10,12,35,15, 5,33,10,12,37,14,5,254,52,1,238,254,18,1,40,92, 0,1,0,35,255,119,1,159,2,122,0,29,0,0,33,35, 6,7,35,54,55,54,55,54,61,1,52,55,52,39,38,47, 1,38,39,51,22,31,1,22,21,20,7,51,1,159,220,33, 44,83,57,46,1,21,20,1,15,1,1,28,16,25,85,31, 24,27,9,27,171,78,59,79,135,3,65,56,45,42,28,14, 75,46,3,3,90,50,37,41,68,76,23,55,79,202,0,1, 0,57,1,116,1,130,3,50,0,30,0,0,1,35,7,6, 7,6,7,35,54,63,1,54,55,54,39,52,39,38,39,38, 39,51,22,23,22,23,20,7,6,7,51,1,130,189,12,20, 13,6,6,83,33,24,21,20,14,4,1,2,5,15,30,15, 85,23,19,13,8,4,1,2,140,1,198,27,29,14,6,6, 35,41,37,35,64,16,31,25,26,38,28,54,16,29,47,34, 37,64,35,13,15,0,0,1,255,184,0,0,2,26,1,171, 0,7,0,0,41,1,53,33,53,33,53,33,2,26,253,158, 2,4,254,220,1,130,90,249,88,0,0,1,255,184,255,25, 2,97,2,29,0,34,0,0,5,34,39,38,53,52,55,39, 33,53,33,1,55,1,51,21,35,34,7,34,39,38,53,39, 6,7,23,55,22,51,22,21,20,7,6,1,221,40,12,3, 25,116,254,109,1,166,254,251,77,1,12,175,28,19,10,100, 14,3,24,19,39,102,15,7,11,35,25,8,231,33,8,9, 19,21,141,90,1,150,45,254,61,90,1,35,7,9,6,30, 36,125,2,1,12,32,29,19,5,0,0,1,255,184,255,25, 2,97,2,29,0,37,0,0,5,34,39,38,53,52,55,39, 33,53,51,55,7,51,1,55,1,51,21,35,34,7,34,39, 38,53,39,6,7,23,55,22,51,22,21,20,7,6,1,221, 40,12,3,25,116,254,109,212,98,40,152,254,251,77,1,12, 175,28,19,10,100,14,3,24,19,39,102,15,7,11,35,25, 8,231,33,8,9,19,21,141,90,154,154,1,150,45,254,61, 90,1,35,7,9,6,30,36,125,2,1,12,32,29,19,5, 0,2,0,107,255,113,1,217,1,173,0,3,0,18,0,0, 23,35,53,51,55,33,53,33,55,53,52,39,38,35,53,50, 23,22,21,241,121,121,232,254,146,1,40,2,39,40,151,178, 59,61,143,83,60,90,120,1,83,22,23,90,25,24,83,0, 0,1,0,107,0,0,1,217,1,173,0,14,0,0,41,1, 53,33,55,53,52,39,38,35,53,50,23,22,21,1,217,254, 146,1,40,2,39,40,151,178,59,61,90,120,1,83,22,23, 90,25,24,83,0,2,0,109,255,187,2,133,1,173,0,22, 0,38,0,0,5,35,17,35,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,54,51,5,1,50,55,54,53, 52,39,38,35,34,7,6,21,20,23,22,2,133,89,131,10, 14,39,75,13,13,69,53,26,11,13,66,46,68,1,100,254, 149,47,27,16,38,24,32,43,34,23,47,25,69,1,148,44, 69,88,33,86,15,2,59,29,34,38,44,118,64,45,2,254, 162,54,31,37,69,43,28,57,39,36,75,36,19,0,0,2, 0,100,0,0,2,26,1,171,0,15,0,31,0,0,55,52, 55,54,51,50,23,22,21,20,7,6,35,34,39,38,55,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,100,76, 60,84,103,62,53,77,59,82,104,62,54,217,60,40,27,54, 36,43,63,38,24,53,37,213,102,63,49,71,62,81,104,61, 48,71,61,205,51,33,38,60,39,26,52,31,38,57,40,29, 0,1,0,177,255,86,1,92,1,115,0,19,0,0,1,50, 21,20,15,1,6,7,39,54,55,54,55,38,39,38,53,52, 55,54,1,59,32,5,48,11,7,58,10,36,16,6,71,21, 17,16,23,1,115,215,115,49,133,26,3,16,6,94,42,6, 123,53,45,52,68,15,21,0,0,1,255,184,0,0,2,79, 1,34,0,14,0,0,33,35,39,21,35,39,21,33,53,51, 53,23,52,55,23,2,79,36,127,74,122,254,208,248,195,6, 214,112,112,115,115,90,189,195,92,114,193,0,0,2,255,184, 255,95,2,170,2,28,0,9,0,12,0,0,5,7,39,33, 53,33,1,55,1,51,7,35,23,2,170,175,95,254,28,1, 180,254,240,74,1,16,244,46,166,68,7,154,161,90,1,150, 44,254,62,90,95,0,0,1,255,184,255,95,2,170,2,28, 0,9,0,0,5,7,39,33,53,33,1,55,1,51,2,170, 175,95,254,28,1,180,254,240,74,1,16,244,7,154,161,90, 1,150,44,254,62,0,0,1,255,184,0,0,1,192,1,17, 0,7,0,0,37,39,7,33,53,33,53,23,1,192,106,7, 254,105,1,101,163,17,79,96,90,183,193,0,0,7,255,112, 255,83,2,245,3,0,0,15,0,31,0,47,0,63,0,65, 0,81,0,111,0,0,23,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,3,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,31,1,21,20,15,1,35,34, 39,38,53,52,55,54,39,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,1,23,55,50,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,37,51,53,23,21,39,7,35, 7,17,35,22,21,20,7,6,7,6,35,34,39,38,39,38, 53,52,55,54,51,5,222,34,16,6,31,12,13,33,16,6, 30,12,85,34,16,6,31,12,13,33,16,6,30,12,209,34, 16,6,31,20,5,33,16,6,30,12,85,34,16,6,31,12, 13,33,16,6,30,12,254,159,1,238,47,27,16,38,24,32, 43,34,23,47,25,1,141,134,163,106,7,184,91,131,10,14, 39,75,13,13,69,54,26,11,12,66,46,68,1,100,62,30, 12,14,34,15,6,30,11,14,34,16,6,2,178,30,19,7, 34,15,6,30,11,14,34,16,6,30,19,7,34,15,6,30, 11,14,34,16,6,140,30,19,7,34,15,6,30,11,14,34, 16,6,253,0,1,79,53,32,37,69,43,28,57,39,36,75, 36,19,14,183,193,63,79,98,68,1,148,44,69,88,33,86, 15,2,60,29,34,36,45,118,64,45,2,0,0,1,0,97, 255,40,2,37,1,219,0,19,0,0,5,35,54,53,52,35, 34,7,3,37,21,5,23,54,51,50,23,22,21,20,1,215, 90,92,64,68,116,128,1,97,254,254,69,92,73,91,25,7, 216,149,87,72,79,1,93,113,90,85,180,59,82,25,30,110, 0,1,255,184,0,0,2,112,2,152,0,6,0,0,41,1, 53,33,1,55,1,2,112,253,72,2,102,254,85,74,1,179, 90,1,251,67,253,205,0,2,0,107,255,118,2,133,1,171, 0,7,0,11,0,0,41,1,7,35,19,35,53,33,3,53, 35,7,2,133,254,145,61,83,189,216,2,26,79,159,94,138, 1,221,88,254,175,249,249,0,0,1,0,107,254,167,2,147, 1,3,0,5,0,0,63,1,1,7,1,7,107,115,1,181, 39,254,191,60,158,101,253,200,36,1,144,55,0,3,255,184, 255,255,2,177,1,168,0,30,0,48,0,65,0,0,1,50, 23,22,21,20,7,6,35,39,43,1,34,39,21,33,53,33, 38,39,52,55,54,55,54,51,50,23,22,23,54,23,52,39, 38,35,34,7,6,7,6,7,20,21,22,59,1,55,54,39, 53,52,39,38,35,34,7,6,21,20,23,22,23,54,55,54, 2,47,83,32,15,71,36,64,70,1,11,27,170,254,201,1, 23,39,1,31,8,8,34,61,56,45,10,41,53,119,37,25, 31,39,34,4,5,16,3,34,28,26,21,85,233,15,27,42, 40,26,19,77,22,43,19,7,1,1,111,101,45,53,114,38, 17,1,85,85,90,43,97,89,55,13,7,30,27,7,58,35, 198,54,39,27,50,5,8,31,95,6,5,9,4,12,146,20, 34,18,38,34,31,42,78,42,13,17,48,78,12,0,0,3, 0,167,255,50,2,177,1,168,0,37,0,55,0,72,0,0, 1,50,23,22,21,20,7,6,35,39,43,1,34,39,6,15, 1,39,55,38,39,38,39,38,39,38,53,52,55,54,55,54, 51,50,23,22,23,54,23,52,39,38,35,34,7,6,7,6, 7,20,21,22,59,1,55,54,39,53,52,39,38,35,34,7, 6,21,20,23,22,23,54,55,54,2,47,83,32,15,71,36, 64,70,1,11,8,32,4,40,100,72,154,52,55,2,3,37, 7,11,31,8,8,34,61,56,45,10,41,53,119,37,25,31, 39,34,4,5,16,3,34,28,26,21,85,233,15,27,42,40, 26,19,77,22,43,19,7,1,1,111,101,45,53,114,38,17, 1,4,13,63,134,50,180,14,44,2,2,40,24,34,46,89, 55,13,7,30,27,7,58,35,198,54,39,27,50,5,8,31, 95,6,5,9,4,12,146,20,34,18,38,34,31,42,78,42, 13,17,48,78,12,0,0,1,255,184,0,0,2,164,2,28, 0,24,0,0,37,6,35,34,39,38,39,6,7,33,53,37, 50,55,3,55,19,22,23,22,51,50,55,54,55,2,164,107, 70,80,52,6,7,36,6,254,128,1,38,56,44,220,65,188, 42,31,38,42,58,75,4,6,75,62,82,10,12,68,49,90, 1,41,1,109,43,254,192,66,28,35,66,4,5,0,0,2, 255,184,0,0,2,28,2,64,0,15,0,28,0,0,41,1, 53,33,39,6,35,34,39,38,39,38,53,52,63,1,3,39, 48,15,1,49,6,21,20,23,22,51,50,2,28,253,156,2, 10,12,62,37,67,56,47,13,3,127,197,45,22,119,28,30, 60,13,15,70,90,145,6,25,18,74,19,19,99,42,51,254, 243,165,29,11,27,36,55,12,3,0,0,2,255,184,0,0, 2,28,2,64,0,15,0,26,0,0,35,19,23,22,21,20, 7,6,7,6,35,34,39,7,33,21,1,22,51,50,55,54, 53,52,39,38,39,72,63,197,127,41,10,12,56,67,37,62, 12,2,10,254,8,41,70,71,14,3,30,12,135,2,64,51, 42,99,78,38,9,5,25,6,145,90,1,51,8,49,10,11, 36,27,11,29,0,1,0,127,254,147,2,130,1,16,0,43, 0,0,1,33,53,33,34,39,38,39,38,39,38,53,52,55, 22,23,22,23,22,59,1,54,51,53,23,21,39,7,35,34, 39,38,39,6,21,20,23,22,23,22,23,22,21,20,2,105, 254,41,1,140,9,73,211,93,12,10,7,27,10,32,43,27, 68,60,25,12,1,162,105,9,172,56,21,4,3,4,34,55, 184,60,16,73,254,147,90,29,84,124,16,17,10,43,95,129, 16,65,91,3,9,2,180,194,62,79,93,29,5,6,4,10, 27,33,55,87,29,9,39,31,10,0,0,2,255,184,0,0, 2,38,1,171,0,14,0,18,0,0,41,1,34,39,38,39, 38,39,7,21,35,53,51,17,33,3,53,35,21,2,38,254, 205,13,26,34,7,2,2,25,206,224,1,142,70,253,22,28, 11,4,4,4,65,100,1,71,254,185,239,239,0,2,0,107, 0,0,1,217,2,96,0,3,0,18,0,0,1,35,53,51, 19,33,53,33,55,53,52,39,38,35,53,50,23,22,21,1, 29,123,123,188,254,146,1,40,2,39,40,151,178,59,61,2, 14,82,253,160,90,120,1,83,22,23,90,25,24,83,0,1, 255,184,0,0,2,133,1,171,0,15,0,0,33,35,34,39, 7,33,53,33,39,35,53,33,23,7,23,51,2,133,205,47, 21,24,254,92,1,176,10,200,1,193,1,160,10,195,59,59, 90,247,90,89,1,247,0,1,0,99,255,246,2,107,1,235, 0,30,0,0,37,1,6,21,20,51,50,55,54,55,23,22, 23,22,23,7,38,39,34,7,6,35,34,39,38,53,52,55, 54,55,1,2,107,254,175,110,42,24,49,63,4,13,35,50, 3,2,40,29,40,14,52,54,18,85,21,5,49,53,91,1, 71,4,1,136,192,74,42,18,23,1,1,10,66,3,3,57, 38,12,24,23,79,21,24,73,104,103,94,254,108,0,0,3, 0,0,0,0,1,140,3,18,0,15,0,18,0,20,0,0, 1,7,39,7,39,55,39,55,23,55,23,7,23,7,39,7, 39,55,39,3,23,1,31,24,13,38,6,37,24,26,89,40, 22,44,36,26,34,53,7,39,61,246,1,2,100,16,43,24, 29,22,106,14,65,24,15,27,30,16,30,33,27,23,53,253, 12,1,0,3,0,0,254,207,1,189,0,1,0,15,0,18, 0,20,0,0,5,55,23,55,23,7,23,7,39,7,39,55, 39,55,23,55,23,7,23,1,23,1,109,24,13,38,5,36, 24,26,89,40,22,43,35,26,34,53,7,40,62,254,106,1, 131,16,43,24,29,22,106,14,65,23,14,27,30,16,30,33, 26,24,53,1,21,1,0,3,0,0,254,247,1,79,2,233, 0,3,0,7,0,9,0,0,5,51,21,35,17,51,21,35, 1,23,1,44,35,35,35,35,254,212,1,115,150,3,242,150, 253,174,1,0,0,3,0,0,0,0,1,224,3,8,0,3, 0,7,0,9,0,0,1,23,7,47,1,23,7,39,3,23, 1,194,30,75,30,55,30,75,30,245,1,2,189,18,129,17, 205,18,129,17,253,123,1,0,0,3,0,0,254,252,1,184, 0,1,0,3,0,7,0,9,0,0,5,23,7,47,1,23, 7,47,1,23,1,154,30,75,30,55,30,75,30,205,1,113, 18,129,17,205,18,129,17,169,1,0,0,3,0,0,0,0, 1,248,3,0,0,15,0,31,0,33,0,0,1,50,23,22, 21,20,15,1,35,34,39,38,53,52,55,54,39,50,31,1, 21,20,15,1,35,34,39,38,53,52,55,54,1,23,1,192, 36,15,5,31,20,5,33,16,6,30,12,152,34,15,6,31, 20,4,34,16,6,31,12,254,242,1,2,164,32,11,13,34, 15,6,30,11,14,34,16,6,92,30,19,7,35,15,5,31, 11,13,34,16,6,253,1,1,0,2,0,0,0,0,1,224, 3,8,0,11,0,13,0,0,1,7,39,55,39,7,39,55, 23,7,39,55,1,23,1,140,56,33,56,32,56,30,75,160, 75,30,55,254,82,1,2,174,94,19,95,19,96,17,130,93, 129,17,95,253,103,1,0,2,0,0,254,252,1,184,0,1, 0,11,0,13,0,0,5,55,23,7,23,55,23,7,39,55, 23,7,39,23,1,33,57,32,56,32,56,30,75,160,75,30, 55,255,1,170,94,19,95,19,96,17,130,93,129,17,95,151, 1,0,0,3,0,0,255,31,1,149,0,1,0,3,0,7, 0,9,0,0,5,51,21,35,39,51,21,35,39,23,1,114, 35,35,150,35,35,220,1,75,150,150,150,226,1,0,0,3, 0,0,254,246,1,154,0,1,0,3,0,7,0,9,0,0, 5,23,7,47,1,23,7,47,1,23,1,124,30,75,30,105, 30,75,30,125,1,64,18,129,17,75,18,129,17,250,1,0, 0,2,0,0,0,0,1,91,2,202,0,11,0,13,0,0, 19,53,51,53,35,53,51,21,35,21,51,21,1,23,169,72, 72,178,73,73,254,165,1,2,76,34,60,32,32,60,34,253, 181,1,0,2,0,0,255,68,1,210,0,1,0,11,0,13, 0,0,5,53,51,53,35,53,51,21,35,21,51,21,37,23, 1,32,72,72,178,73,73,254,46,1,188,34,60,32,32,60, 34,189,1,0,0,2,0,0,255,79,1,118,0,1,0,15, 0,17,0,0,5,50,23,22,21,20,15,1,35,34,39,38, 53,52,55,54,37,23,1,62,34,16,6,31,20,5,33,16, 6,30,12,254,207,1,66,30,12,14,34,15,6,30,11,14, 34,16,6,67,1,0,0,3,0,0,0,0,1,123,3,15, 0,15,0,24,0,26,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,7,47,1,53,51,55,23, 7,1,23,249,29,11,4,27,8,9,28,13,4,27,9,139, 30,47,131,141,43,24,43,254,176,1,2,149,26,9,9,30, 11,4,26,9,10,29,12,3,85,10,121,4,33,59,18,57, 253,61,1,0,0,3,0,0,255,1,1,205,0,1,0,14, 0,23,0,25,0,0,5,50,23,22,21,20,15,1,34,39, 38,53,52,55,54,7,55,31,1,21,35,7,39,55,37,23, 1,121,30,11,4,27,18,29,11,4,27,8,115,31,46,131, 140,43,25,43,254,216,1,45,27,9,9,29,12,3,27,8, 9,30,11,4,2,10,119,6,34,59,19,56,181,1,0,2, 0,0,0,0,1,118,2,217,0,15,0,17,0,0,1,50, 31,1,21,20,15,1,35,34,39,38,53,52,55,54,1,23, 1,62,34,16,6,31,20,5,33,16,6,30,12,254,207,1, 2,217,30,19,7,34,15,6,30,11,14,34,16,6,253,40, 1,0,0,2,0,0,255,102,1,113,0,1,0,3,0,5, 0,0,5,35,53,51,37,23,1,113,98,98,254,143,1,154, 93,62,1,0,0,2,0,0,0,0,1,118,2,217,0,15, 0,17,0,0,1,50,31,1,21,20,15,1,35,34,39,38, 53,52,55,54,1,23,1,62,34,16,6,31,20,5,33,16, 6,30,12,254,207,1,2,217,30,19,7,34,15,6,30,11, 14,34,16,6,253,40,1,0,0,2,0,0,255,79,1,118, 0,1,0,15,0,17,0,0,5,50,23,22,21,20,15,1, 35,34,39,38,53,52,55,54,37,23,1,62,34,16,6,31, 20,5,33,16,6,30,12,254,207,1,66,30,12,14,34,15, 6,30,11,14,34,16,6,67,1,0,0,3,0,0,0,0, 1,120,3,0,0,15,0,31,0,33,0,0,1,50,23,22, 21,20,15,1,35,34,39,38,53,52,55,54,55,50,31,1, 21,20,15,1,35,34,39,38,53,52,55,54,1,23,1,64, 36,15,5,30,19,7,33,16,6,30,12,13,34,16,6,31, 20,5,33,16,6,30,12,254,205,1,2,86,32,11,13,34, 15,6,30,11,14,34,16,6,170,30,19,7,34,15,6,30, 11,14,34,16,6,253,1,1,0,3,0,0,254,177,1,119, 0,1,0,15,0,31,0,33,0,0,5,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,55,50,23,22,21,20, 15,1,35,34,39,38,53,52,55,54,37,23,1,63,34,16, 6,31,20,5,35,15,5,30,12,13,34,15,6,31,20,4, 34,16,6,31,12,254,206,1,224,30,12,14,34,15,6,31, 11,13,34,16,6,170,30,12,14,35,15,5,30,12,13,34, 16,6,55,1,0,4,0,0,0,0,1,218,3,0,0,15, 0,31,0,47,0,49,0,0,19,50,31,1,21,20,7,6, 35,34,39,38,53,52,55,54,51,50,31,1,21,20,15,1, 35,34,39,38,53,52,55,54,39,50,31,1,21,20,15,1, 35,34,39,38,53,52,55,54,1,23,222,34,16,6,31,12, 13,33,16,6,30,12,209,34,16,6,31,20,5,33,16,6, 30,12,85,34,16,6,31,20,5,33,16,6,30,12,254,205, 1,2,116,30,19,7,34,15,6,30,11,14,34,16,6,30, 19,7,34,15,6,30,11,14,34,16,6,140,30,19,7,34, 15,6,30,11,14,34,16,6,253,1,1,0,0,4,0,0, 254,201,1,218,0,1,0,15,0,31,0,47,0,49,0,0, 23,52,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 55,52,55,54,51,50,23,22,21,20,15,1,35,34,39,38, 7,50,23,22,21,20,15,1,35,34,39,38,53,52,55,54, 37,23,167,31,12,12,36,15,5,34,10,12,34,16,5,196, 31,12,12,36,15,5,34,21,1,34,16,5,44,34,16,6, 31,20,5,33,16,6,30,12,254,206,1,110,33,17,6,32, 11,13,38,13,4,32,11,12,33,17,6,32,11,13,38,13, 4,32,11,78,30,12,14,34,15,6,30,12,13,34,16,6, 201,1,0,2,0,0,0,0,1,216,3,12,0,3,0,5, 0,0,19,37,23,5,3,23,170,1,30,16,254,230,190,1, 2,190,78,44,96,253,129,1,0,2,0,0,255,72,1,218, 0,1,0,3,0,5,0,0,23,5,7,37,39,23,186,1, 32,20,254,226,168,1,30,82,72,102,83,1,0,1,0,167, 2,55,1,212,3,33,0,35,0,0,19,23,55,23,7,23, 55,23,7,23,55,23,7,23,55,23,7,23,7,39,7,39, 55,39,7,39,55,39,7,39,55,39,7,39,55,39,178,30, 22,31,21,30,22,30,21,31,20,36,22,31,23,34,22,36, 15,36,23,35,24,30,23,34,24,29,24,30,23,30,24,32, 23,30,2,239,9,59,9,59,9,59,8,62,9,63,10,63, 10,64,10,64,12,40,13,68,13,67,10,67,12,67,11,66, 12,64,12,66,12,65,11,0,0,14,0,0,0,0,1,165, 3,27,0,11,0,23,0,35,0,46,0,57,0,71,0,81, 0,92,0,106,0,116,0,127,0,139,0,148,0,150,0,0, 19,23,53,51,21,51,21,35,7,35,39,35,55,52,55,50, 23,22,21,20,7,34,39,38,53,52,55,50,23,22,21,20, 7,34,39,38,23,50,55,52,38,35,34,7,20,23,22,23, 34,39,52,54,51,50,23,20,7,6,39,20,7,6,35,34, 39,38,53,52,55,54,51,50,39,52,51,22,23,20,7,6, 35,34,23,34,39,52,54,51,50,23,20,7,6,39,20,7, 6,35,34,39,38,53,52,55,54,51,50,39,52,51,22,23, 20,7,6,35,34,23,52,39,34,6,21,20,23,50,55,54, 39,52,39,34,7,6,21,20,23,50,55,54,53,52,39,38, 35,34,20,51,54,1,23,213,86,39,83,82,1,39,1,85, 149,22,10,6,6,22,14,6,2,22,10,6,6,22,14,6, 2,22,19,3,12,10,20,2,16,3,4,19,3,12,10,20, 2,16,3,114,16,3,3,12,9,1,6,6,10,20,42,22, 18,4,17,2,3,22,155,19,3,12,10,20,2,16,3,114, 16,3,3,12,9,1,6,6,10,20,42,22,18,4,17,2, 3,22,177,22,10,12,22,16,5,1,133,22,10,6,6,22, 16,5,1,16,3,3,22,22,18,254,242,1,2,204,1,80, 79,37,81,81,81,19,3,6,6,10,20,2,15,4,3,19, 3,6,6,10,20,2,15,4,19,22,10,12,22,16,5,1, 122,22,10,12,22,16,5,1,23,16,5,1,14,2,6,10, 6,6,99,22,4,18,17,4,1,122,22,10,12,22,16,5, 1,23,16,5,1,14,2,6,10,6,6,99,22,4,18,17, 4,1,100,19,3,12,10,20,2,16,3,4,19,3,6,6, 10,19,3,16,3,124,16,5,1,44,4,253,27,1,0,2, 255,21,1,253,0,48,2,177,0,3,0,24,0,0,3,7, 39,55,23,6,7,6,35,34,39,38,39,38,53,52,51,50, 23,22,51,50,55,54,55,49,47,47,47,144,18,58,37,29, 53,55,22,9,2,12,9,5,46,69,24,28,37,18,2,131, 45,45,46,100,35,28,17,54,21,19,6,3,12,8,70,16, 19,35,0,1,255,112,2,28,255,214,2,130,0,3,0,0, 3,7,39,55,42,51,51,51,2,79,51,51,51,0,0,1, 0,41,255,254,2,139,1,205,0,70,0,0,19,50,23,22, 21,20,7,22,23,22,51,50,55,53,35,53,51,21,35,17, 39,53,6,35,34,39,38,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,201,68,55,43,38,3,47,30,29,48,49,135,251, 71,45,28,44,35,23,6,4,5,62,38,43,82,91,21,16, 6,23,16,3,18,62,48,46,95,34,17,15,60,35,50,51, 44,17,24,33,6,3,118,47,29,38,37,1,205,40,31,39, 46,29,1,27,18,25,166,40,40,254,89,46,159,11,7,2, 2,12,12,57,33,21,100,23,23,9,7,16,8,56,42,32, 90,28,21,11,20,26,28,4,1,5,26,11,21,61,26,32, 34,0,0,1,0,41,255,254,3,53,1,205,0,74,0,0, 19,50,23,22,21,20,7,22,23,22,51,50,55,53,35,53, 33,21,35,17,39,17,35,17,39,53,6,35,34,39,38,39, 22,21,20,7,6,35,34,39,38,39,38,53,52,51,50,23, 22,23,22,51,50,53,52,39,38,35,34,7,39,54,55,54, 51,54,55,54,53,52,35,34,7,39,54,201,68,55,43,38, 3,47,30,29,48,49,135,1,165,69,45,127,45,28,44,35, 23,6,4,5,62,38,43,82,91,21,16,6,23,16,3,18, 62,48,46,95,34,17,15,60,35,50,51,44,17,24,33,6, 3,118,47,29,38,37,1,205,40,31,39,46,29,1,27,18, 25,166,40,40,254,89,46,1,121,254,89,46,159,11,7,2, 2,12,12,57,33,21,100,23,23,9,7,16,8,56,42,32, 90,28,21,11,20,26,28,4,1,5,26,11,21,61,26,32, 34,0,0,1,0,0,255,178,1,136,1,205,0,58,0,0, 55,34,39,38,53,52,55,54,59,1,53,35,53,33,21,35, 21,35,34,21,20,23,22,51,50,55,54,51,50,23,22,21, 20,7,6,7,23,7,39,35,38,39,38,53,52,51,50,23, 22,23,22,51,50,55,54,53,52,39,38,158,48,37,26,55, 21,23,99,245,1,136,100,157,37,29,11,11,4,4,17,11, 60,41,39,81,21,23,109,34,118,32,56,15,4,41,41,19, 3,2,8,9,46,36,22,36,5,184,41,28,31,47,18,7, 65,40,40,103,54,27,13,5,1,3,25,22,28,59,39,10, 6,97,15,108,7,42,11,12,34,44,7,8,3,32,20,22, 29,6,1,0,0,1,0,0,255,178,1,136,2,157,0,78, 0,0,55,34,39,38,53,52,55,54,59,1,53,35,53,51, 38,39,52,55,54,51,50,23,22,23,7,38,35,34,7,6, 21,20,23,51,21,35,21,35,34,21,20,23,22,51,50,55, 54,51,50,23,22,21,20,7,6,7,23,7,39,35,38,39, 38,53,52,51,50,23,22,23,22,51,50,55,54,53,52,39, 38,158,48,37,26,55,21,23,99,245,245,50,1,45,18,21, 45,40,11,8,17,33,42,30,12,4,38,110,100,157,37,29, 11,11,4,4,17,11,60,41,39,81,21,23,109,34,118,32, 56,15,4,41,41,19,3,2,8,9,46,36,22,36,5,184, 41,28,31,47,18,7,65,40,65,55,56,23,9,49,14,17, 36,69,38,11,13,49,50,40,103,54,27,13,5,1,3,25, 22,28,59,39,10,6,97,15,108,7,42,11,12,34,44,7, 8,3,32,20,22,29,6,1,0,1,0,0,0,32,1,203, 1,205,0,49,0,0,1,52,39,38,43,1,53,33,21,35, 22,21,20,7,22,21,20,7,6,35,34,39,38,39,38,53, 52,51,50,23,22,23,22,51,50,55,54,53,52,39,38,35, 34,7,39,54,55,54,51,54,1,63,52,30,35,202,1,203, 158,65,41,71,61,38,43,81,93,21,16,6,23,18,1,21, 61,47,46,66,22,8,32,19,16,60,35,49,50,47,16,22, 45,1,72,50,28,15,40,40,41,52,42,29,38,71,58,36, 22,101,23,23,9,7,16,9,56,41,33,52,19,23,29,28, 17,20,26,28,4,1,7,0,0,1,0,0,0,32,2,149, 1,205,0,70,0,0,1,52,39,38,39,38,43,1,53,33, 21,33,22,21,20,7,22,23,54,51,50,23,22,21,6,7, 6,7,39,54,53,52,35,34,7,22,21,20,7,6,35,34, 39,38,39,38,53,52,51,50,23,22,23,22,51,50,55,54, 53,52,39,38,35,34,7,39,54,55,54,51,54,1,67,54, 18,20,13,14,204,2,149,254,154,68,42,25,8,51,63,59, 36,21,4,31,11,6,56,63,57,58,44,12,62,38,44,82, 93,21,17,6,24,17,2,21,61,48,46,66,23,8,32,19, 16,61,35,50,50,54,14,19,46,1,72,51,27,9,4,2, 40,40,44,49,41,30,14,8,45,49,29,36,39,58,20,13, 22,70,57,56,41,24,28,58,36,22,101,23,23,9,7,16, 9,55,42,33,52,19,23,29,28,17,20,26,29,3,1,7, 0,1,0,0,255,254,2,133,1,205,0,62,0,0,1,33, 21,54,53,52,51,50,31,1,22,21,20,7,20,23,22,31, 1,6,21,20,51,50,55,23,6,35,34,39,38,53,52,55, 54,55,38,39,38,39,7,21,39,53,7,39,55,53,38,35, 34,7,39,54,51,50,23,22,23,53,33,53,33,2,133,254, 229,84,26,14,17,33,16,53,9,10,30,23,109,84,34,37, 14,29,41,70,47,31,55,7,8,14,7,2,2,96,45,214, 29,243,71,93,63,32,18,27,69,68,76,25,12,254,195,2, 133,1,165,173,39,45,32,9,18,9,11,18,32,4,15,15, 11,29,15,47,49,18,39,15,38,25,32,42,24,4,2,12, 17,4,4,48,204,46,137,104,32,118,18,53,24,42,21,33, 11,11,139,40,0,1,0,0,255,157,1,184,1,205,0,34, 0,0,5,7,39,54,53,52,47,1,38,61,1,35,53,33, 21,35,21,20,7,6,35,47,1,51,50,61,1,35,21,20, 31,1,22,21,20,1,174,25,48,18,23,240,70,42,1,169, 68,43,13,17,32,51,75,34,222,54,243,55,74,25,38,13, 9,8,12,125,36,26,253,40,40,217,36,13,4,1,39,15, 215,252,13,29,128,28,26,12,0,1,0,0,255,157,1,184, 2,160,0,44,0,0,1,51,21,35,21,20,7,6,35,47, 1,51,50,61,1,35,21,20,31,1,22,21,20,15,1,39, 54,53,52,47,1,38,61,1,35,53,33,38,43,1,39,51, 50,23,22,1,92,77,68,43,13,17,32,51,75,34,222,54, 243,55,10,25,48,18,23,240,70,42,1,54,84,46,56,37, 50,51,43,71,1,205,40,217,36,13,4,1,39,15,215,252, 13,29,128,28,26,12,7,25,38,13,9,8,12,125,36,26, 253,40,134,77,48,80,0,2,0,41,255,254,3,53,2,112, 0,20,0,95,0,0,1,6,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,51,50,55,54,55,5,50,23,22,21, 20,7,22,23,22,51,50,55,53,35,53,33,21,35,17,39, 17,35,17,39,53,6,35,34,39,38,39,22,21,20,7,6, 35,34,39,38,39,38,53,52,51,50,23,22,23,22,51,50, 53,52,39,38,35,34,7,39,54,55,54,51,54,55,54,53, 52,35,34,7,39,54,3,42,18,58,37,29,53,55,22,9, 2,12,9,5,46,69,24,28,37,18,253,194,68,55,43,38, 3,47,30,29,48,49,135,1,165,69,45,127,45,28,44,35, 23,6,4,5,62,38,43,82,91,21,16,6,23,16,3,18, 62,48,46,95,34,17,15,60,35,50,51,44,17,24,33,6, 3,118,47,29,38,37,2,77,35,28,17,54,21,19,6,3, 12,8,70,16,19,35,155,40,31,39,46,29,1,27,18,25, 166,40,40,254,89,46,1,121,254,89,46,159,11,7,2,2, 12,12,57,33,21,100,23,23,9,7,16,8,56,42,32,90, 28,21,11,20,26,28,4,1,5,26,11,21,61,26,32,34, 0,1,0,41,255,254,3,53,2,160,0,84,0,0,19,50, 23,22,21,20,7,22,23,22,51,50,55,53,35,53,33,38, 43,1,39,51,50,23,22,23,51,21,35,17,39,17,35,17, 39,53,6,35,34,39,38,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,201,68,55,43,38,3,47,30,29,48,49,135,1, 49,81,47,56,37,50,50,44,66,50,77,69,45,127,45,28, 44,35,23,6,4,5,62,38,43,82,91,21,16,6,23,16, 3,18,62,48,46,95,34,17,15,60,35,50,51,44,17,24, 33,6,3,118,47,29,38,37,1,205,40,31,39,46,29,1, 27,18,25,166,40,134,77,48,73,90,40,254,89,46,1,121, 254,89,46,159,11,7,2,2,12,12,57,33,21,100,23,23, 9,7,16,8,56,42,32,90,28,21,11,20,26,28,4,1, 5,26,11,21,61,26,32,34,0,1,0,41,255,254,3,53, 2,226,0,106,0,0,19,50,23,22,21,20,7,22,23,22, 51,50,55,53,35,53,33,38,39,38,35,7,39,38,53,52, 55,54,51,50,23,38,39,38,47,2,34,7,53,52,51,50, 23,22,23,22,23,51,21,35,17,39,17,35,17,39,53,6, 35,34,39,38,39,22,21,20,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,23,22,51,50,53,52,39,38,35,34, 7,39,54,55,54,51,54,55,54,53,52,35,34,7,39,54, 201,68,55,43,38,3,47,30,29,48,49,135,1,45,50,29, 20,29,35,36,2,32,6,5,65,99,6,26,14,33,22,12, 5,6,20,33,40,40,24,3,2,76,69,45,127,45,28,44, 35,23,6,4,5,62,38,43,82,91,21,16,6,23,16,3, 18,62,48,46,95,34,17,15,60,35,50,51,44,17,24,33, 6,3,118,47,29,38,37,1,205,40,31,39,46,29,1,27, 18,25,166,40,53,11,8,2,42,2,4,19,5,1,102,31, 72,29,21,10,2,2,53,20,52,50,138,20,17,40,254,89, 46,1,121,254,89,46,159,11,7,2,2,12,12,57,33,21, 100,23,23,9,7,16,8,56,42,32,90,28,21,11,20,26, 28,4,1,5,26,11,21,61,26,32,34,0,0,2,0,0, 255,254,2,91,1,205,0,45,0,58,0,0,1,33,21,54, 55,54,51,50,23,22,21,20,7,6,7,39,54,55,54,53, 52,39,38,35,34,15,1,21,39,53,6,35,34,39,38,53, 52,55,54,51,50,23,53,33,53,33,5,53,38,35,34,7, 6,21,20,23,22,51,50,2,91,254,238,49,14,24,29,47, 36,25,42,11,10,32,35,9,3,33,12,14,22,33,62,45, 48,68,60,40,26,58,26,31,82,45,254,228,2,91,254,193, 52,64,42,26,13,41,11,13,80,1,165,176,43,8,13,59, 41,38,53,43,11,6,29,32,38,13,39,37,17,7,28,56, 188,46,113,30,47,31,37,58,26,11,63,147,40,253,18,72, 34,17,19,45,13,4,0,3,0,0,255,254,2,116,1,205, 0,25,0,34,0,62,0,0,1,35,17,39,53,6,35,34, 35,38,39,38,39,55,54,51,50,23,54,55,54,61,1,35, 53,33,7,53,38,35,34,21,20,51,50,23,53,6,35,34, 39,38,39,55,54,55,54,51,50,23,22,23,53,33,21,20, 15,1,22,23,22,51,50,2,116,61,45,105,88,3,2,84, 95,83,21,1,7,20,31,29,15,11,3,158,2,116,106,50, 68,98,97,57,62,46,61,85,45,24,2,3,13,67,25,24, 71,46,8,6,254,196,33,32,27,61,42,41,113,1,165,254, 89,46,23,58,1,89,77,68,9,12,38,10,31,9,6,138, 40,242,35,53,63,69,54,53,39,53,29,38,21,44,19,7, 33,6,7,121,138,55,33,28,58,36,25,0,0,1,0,0, 255,254,1,174,1,205,0,20,0,0,1,35,17,39,17,35, 21,20,35,34,47,1,38,53,52,59,1,53,35,53,33,1, 174,70,45,149,25,16,17,54,15,31,51,121,1,174,1,165, 254,89,46,1,121,229,40,17,56,15,10,15,156,40,0,2, 0,0,255,254,1,222,1,205,0,21,0,50,0,0,1,35, 17,39,53,6,35,34,39,38,53,52,55,38,39,38,53,52, 55,35,53,33,7,53,33,34,7,6,21,20,23,22,23,22, 23,22,31,1,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,222,70,45,65,89,47,48,61,50,44,15,5,11,50, 1,222,115,255,0,14,7,1,19,7,1,16,65,34,28,31, 67,58,38,17,7,63,18,21,70,74,10,1,165,254,89,46, 131,56,27,34,58,37,20,26,37,11,11,14,27,40,236,196, 30,6,5,27,18,7,1,13,5,1,7,54,26,26,10,11, 53,15,5,56,8,0,0,2,0,0,0,0,2,0,1,205, 0,3,0,52,0,0,1,7,39,55,7,52,39,38,35,34, 39,38,53,52,55,54,59,1,53,33,53,33,21,35,21,35, 34,21,20,23,22,51,50,23,22,21,20,7,6,35,34,39, 38,53,52,51,50,23,22,51,50,55,54,1,252,45,46,46, 59,53,22,68,97,36,14,49,18,21,156,254,154,2,0,107, 203,38,49,17,38,71,56,55,75,31,40,138,117,6,14,11, 9,101,126,68,24,8,1,0,38,38,36,180,45,10,4,62, 25,23,50,18,7,65,40,40,103,62,36,7,2,29,28,34, 79,29,12,147,7,7,13,11,123,40,14,0,0,1,0,0, 255,254,2,12,1,205,0,29,0,0,1,35,17,39,53,6, 35,34,39,38,53,52,55,35,53,33,21,35,6,21,20,23, 22,51,50,55,53,33,53,33,2,12,70,45,65,75,68,49, 37,18,88,1,8,102,45,57,17,21,67,85,254,103,2,12, 1,165,254,89,46,122,50,50,37,44,26,21,40,40,20,37, 59,18,5,56,210,40,0,2,0,0,0,0,2,71,1,205, 0,60,0,73,0,0,1,35,21,22,23,22,21,20,7,6, 35,34,53,52,55,38,39,38,53,52,55,54,51,50,23,21, 38,35,34,21,20,23,22,51,50,55,51,23,35,34,21,20, 23,22,51,50,55,54,55,38,39,38,53,52,55,54,55,53, 33,53,33,7,34,7,6,21,20,23,22,23,54,53,52,39, 2,71,147,53,19,7,95,85,88,160,37,48,23,11,58,27, 30,41,31,35,46,58,56,23,19,11,12,54,12,75,67,40, 15,41,97,84,10,9,52,48,49,63,20,23,254,124,2,71, 183,29,26,16,41,38,42,18,45,1,165,89,20,59,22,24, 84,65,58,94,38,25,17,37,18,17,47,24,11,21,27,9, 62,29,16,7,4,40,55,39,10,4,74,9,9,19,37,39, 28,54,26,8,3,84,40,156,27,16,16,29,29,32,3,31, 49,55,14,0,0,1,0,0,255,254,2,41,1,205,0,36, 0,0,1,35,17,39,53,35,22,21,20,7,6,35,34,39, 38,39,55,54,51,50,23,22,23,22,51,50,53,52,39,38, 39,55,33,53,33,53,33,2,41,68,45,182,84,49,23,27, 52,65,70,14,1,2,7,11,6,29,57,44,40,57,37,41, 62,4,1,24,254,72,2,41,1,165,254,89,46,246,75,44, 49,24,11,56,60,71,11,4,13,67,47,36,60,23,37,41, 30,11,93,40,0,2,0,0,255,178,1,253,1,205,0,50, 0,70,0,0,55,34,39,38,53,52,55,54,59,1,53,35, 53,33,21,35,17,39,53,6,43,1,22,21,20,7,6,7, 23,7,39,35,38,39,38,53,52,51,50,23,22,23,22,51, 50,55,54,53,52,39,38,55,53,35,21,35,34,21,20,23, 22,51,50,55,54,51,50,23,22,51,50,158,48,37,26,55, 21,23,99,245,1,253,70,45,29,54,7,21,81,21,23,109, 33,119,32,56,15,4,41,41,19,3,2,8,10,45,37,23, 37,5,157,102,157,37,29,11,11,4,4,17,19,31,33,29, 12,49,184,41,28,31,47,18,7,65,40,40,254,89,46,158, 17,17,20,59,39,10,6,97,15,108,7,42,11,12,34,44, 7,8,3,32,20,22,29,6,1,70,167,103,54,27,13,5, 1,3,3,4,0,1,0,0,255,254,2,32,1,205,0,41, 0,0,1,35,17,39,53,35,6,7,6,35,34,39,38,53, 52,51,50,23,22,51,50,55,54,53,52,39,38,35,34,7, 39,54,51,50,23,22,23,51,53,33,53,33,2,32,70,45, 73,17,63,27,29,89,88,7,16,9,8,72,68,79,22,7, 32,10,10,56,22,46,25,76,68,34,12,4,69,254,83,2, 32,1,165,254,89,46,155,53,21,9,100,7,7,12,8,79, 45,13,16,43,14,4,28,21,46,54,17,20,183,40,0,1, 0,0,0,0,1,188,1,205,0,31,0,0,55,20,23,22, 51,50,55,54,55,23,6,35,34,39,38,53,52,55,54,59, 1,53,33,53,33,21,35,21,35,34,7,6,80,53,35,27, 92,34,15,15,27,52,77,102,62,43,46,37,38,98,254,251, 1,188,135,125,71,24,9,117,31,28,18,15,7,12,34,40, 50,36,50,53,46,36,150,40,40,190,63,23,0,2,0,0, 0,0,1,224,1,205,0,38,0,52,0,0,1,35,22,21, 20,7,6,21,20,23,22,23,22,21,20,7,6,35,34,39, 38,39,38,53,52,55,54,55,54,55,54,53,52,39,38,35, 33,53,33,3,52,35,34,7,6,21,20,23,22,51,50,55, 54,1,224,150,25,17,18,8,37,27,19,72,42,53,63,72, 58,9,3,100,30,102,20,12,4,29,8,10,254,252,1,224, 115,110,93,29,48,43,48,63,93,26,7,1,165,29,43,21, 28,24,5,5,5,18,46,31,27,76,39,24,57,47,44,14, 11,74,22,6,8,4,40,13,11,50,16,4,40,254,199,89, 9,15,54,35,39,45,65,19,0,1,0,0,0,0,2,10, 1,205,0,48,0,0,37,52,39,38,35,34,39,38,53,52, 55,54,59,1,53,33,53,33,21,35,21,35,34,21,20,23, 22,51,50,23,22,21,20,7,6,35,34,39,38,53,52,51, 50,23,22,51,50,55,54,1,150,53,22,68,99,36,14,49, 18,22,158,254,151,2,10,115,204,37,40,17,46,73,56,56, 74,32,41,141,117,6,15,12,9,102,126,62,26,11,112,45, 10,4,62,25,23,49,19,7,65,40,40,103,62,35,7,3, 29,29,33,77,30,13,147,7,7,13,11,123,37,16,0,2, 0,0,0,0,1,223,1,205,0,36,0,50,0,0,1,35, 21,35,34,21,20,23,22,23,38,53,52,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,59,1,53, 33,53,33,3,52,39,38,35,34,21,20,23,22,51,50,55, 54,1,223,114,190,87,61,27,27,10,58,17,19,69,35,19, 66,25,32,100,71,74,31,37,75,133,254,194,1,223,107,37, 11,13,81,13,5,18,75,24,7,1,165,134,90,60,54,24, 10,24,41,74,20,5,45,25,31,75,27,10,68,65,94,37, 28,34,95,40,254,163,43,15,4,71,37,25,1,42,14,0, 0,2,0,0,255,254,1,254,1,205,0,18,0,27,0,0, 1,35,17,39,17,35,21,20,7,6,35,34,39,38,61,1, 35,53,33,5,53,35,21,20,23,22,51,50,1,254,69,45, 125,48,25,26,46,48,37,41,1,254,254,227,138,45,15,11, 67,1,165,254,89,46,1,121,201,44,25,13,36,28,27,192, 40,241,201,209,19,13,4,0,0,1,0,0,255,254,1,189, 1,205,0,24,0,0,1,35,17,39,53,35,34,21,20,23, 35,38,39,38,39,55,54,55,54,59,1,53,33,53,33,1, 189,70,45,179,64,125,45,80,25,20,1,3,15,72,15,16, 168,254,182,1,189,1,165,254,89,46,245,63,82,125,88,50, 40,36,26,55,12,2,93,40,0,2,0,43,255,254,2,36, 1,205,0,38,0,50,0,0,1,35,17,39,53,6,35,34, 39,38,39,54,55,38,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,7,22,23,22,51,50,55,53,35,53,51,5, 52,35,34,21,20,23,22,51,50,55,54,2,36,70,45,62, 97,117,70,24,13,69,57,50,40,43,68,19,22,79,36,18, 94,37,35,16,72,32,22,80,92,96,211,254,202,75,73,63, 23,25,9,8,20,1,165,254,89,46,131,50,60,21,26,16, 31,5,30,31,24,69,18,5,50,26,33,58,51,20,10,27, 21,9,65,200,40,101,69,60,39,15,6,1,20,0,0,1, 0,0,255,206,1,171,1,205,0,42,0,0,55,52,55,54, 59,1,53,33,53,33,21,35,21,35,34,7,6,21,20,23, 22,51,50,55,38,53,52,55,23,22,23,22,21,20,7,23, 7,39,6,35,34,39,38,42,81,28,33,98,254,230,1,171, 99,121,84,26,9,54,47,53,7,7,2,44,24,32,7,1, 29,68,29,73,10,4,84,76,83,246,63,20,7,85,40,40, 124,47,15,19,45,33,31,1,6,11,44,6,1,8,31,6, 6,32,15,112,14,115,2,50,54,0,0,2,0,43,255,254, 2,14,1,205,0,48,0,62,0,0,1,35,17,39,53,6, 7,6,35,34,39,38,53,52,55,38,39,55,54,55,54,51, 50,23,22,21,20,7,6,7,22,23,51,23,7,38,35,34, 21,20,23,22,51,50,55,53,35,53,51,5,52,39,38,35, 34,21,20,23,22,51,50,55,54,2,14,69,45,44,82,22, 17,60,47,46,55,102,3,3,13,54,10,10,54,30,15,65, 6,6,26,38,54,37,10,23,42,96,70,17,17,103,65,108, 222,254,173,31,8,9,48,25,10,8,21,21,11,1,165,254, 89,46,108,29,12,3,34,34,33,49,25,36,68,22,41,9, 2,34,17,21,33,35,3,3,15,11,38,11,10,51,39,10, 3,64,210,40,75,24,9,3,43,22,15,5,27,13,0,1, 0,0,255,254,1,165,1,205,0,20,0,0,1,35,17,39, 53,35,21,20,35,34,47,1,38,53,52,59,1,53,33,53, 33,1,165,70,45,169,18,11,10,44,15,44,223,254,206,1, 165,1,165,254,89,46,191,51,25,10,48,17,13,27,147,40, 0,2,0,0,255,254,1,165,1,205,0,3,0,24,0,0, 55,7,39,55,1,35,17,39,53,35,21,20,35,34,47,1, 38,53,52,59,1,53,33,53,33,168,51,51,51,1,48,70, 45,169,18,11,10,44,15,44,223,254,206,1,165,50,51,51, 51,1,64,254,89,46,191,51,25,10,48,17,13,27,147,40, 0,2,0,0,255,254,1,150,1,205,0,14,0,23,0,0, 1,35,17,39,53,6,35,34,39,38,61,1,35,53,33,7, 53,35,21,20,23,22,51,50,1,150,69,45,47,73,49,46, 36,41,1,150,114,205,40,19,14,87,1,165,254,89,46,141, 47,42,34,33,174,40,208,168,195,24,18,8,0,2,0,0, 255,254,2,82,1,205,0,37,0,46,0,0,1,33,21,54, 51,50,23,22,21,20,7,6,7,39,54,55,54,53,52,39, 38,35,34,15,1,21,39,53,6,35,34,39,38,61,1,35, 53,33,5,53,35,21,20,23,22,51,50,2,82,254,255,61, 47,44,37,27,41,11,11,32,35,9,3,31,13,15,21,31, 57,45,47,73,49,46,36,41,2,82,254,210,205,40,19,14, 87,1,165,142,57,61,46,40,57,46,12,7,29,32,42,15, 42,40,21,9,26,51,222,46,141,47,42,34,33,174,40,208, 168,195,24,18,8,0,0,3,0,0,255,254,1,192,1,205, 0,22,0,31,0,40,0,0,1,35,17,39,53,6,7,6, 35,34,39,38,53,52,55,54,51,50,23,53,33,53,33,7, 53,38,39,38,43,1,23,54,7,39,6,21,20,23,22,51, 50,1,192,70,45,46,66,15,13,68,48,36,69,39,42,95, 47,254,179,1,192,115,37,33,25,45,17,93,26,59,95,54, 60,16,19,30,1,165,254,89,46,123,38,11,2,50,37,44, 55,29,16,65,139,40,247,22,46,15,12,135,12,24,137,24, 38,61,17,4,0,2,0,43,255,254,2,14,1,205,0,35, 0,46,0,0,1,35,17,39,53,35,21,20,35,34,47,1, 38,53,52,59,1,53,38,39,38,53,52,55,54,51,50,23, 22,29,1,51,53,35,53,51,5,53,52,39,38,35,34,21, 20,23,22,2,14,70,45,172,14,13,19,59,18,24,53,83, 43,24,43,22,22,44,34,31,172,132,247,254,179,26,9,8, 60,62,22,1,165,254,89,46,153,48,15,12,47,18,11,14, 53,9,41,22,28,36,24,12,34,31,28,132,185,40,147,69, 22,12,4,40,32,24,8,0,0,2,0,0,255,254,1,213, 1,205,0,20,0,24,0,0,1,35,17,39,53,35,21,20, 35,34,47,1,38,53,52,59,1,53,35,53,33,7,53,35, 21,1,213,70,45,196,21,16,19,47,15,32,40,112,1,213, 115,196,1,165,254,89,46,156,47,24,19,47,15,12,16,183, 40,223,183,183,0,2,0,0,255,254,1,201,1,205,0,18, 0,36,0,0,1,35,17,39,53,6,35,34,39,38,53,54, 53,52,47,1,35,53,33,7,53,35,22,21,20,7,6,7, 6,21,20,23,22,51,50,55,54,1,201,70,45,46,70,91, 56,38,133,33,12,129,1,201,115,159,43,40,42,43,3,39, 18,18,95,43,16,1,165,254,89,46,133,40,51,36,48,31, 48,31,30,9,40,231,191,37,47,19,29,29,10,8,7,33, 18,9,28,11,0,1,0,0,0,1,1,63,1,205,0,23, 0,0,1,35,21,20,7,23,7,39,38,53,52,51,50,23, 22,51,50,55,54,61,1,35,53,33,1,63,112,74,139,34, 135,56,25,31,26,2,1,9,9,11,161,1,63,1,165,147, 75,23,162,13,157,67,16,22,41,2,22,19,23,137,40,0, 0,2,0,0,255,255,1,63,1,205,0,3,0,27,0,0, 55,7,39,55,39,52,51,50,23,22,51,50,55,54,61,1, 35,53,33,21,35,21,20,7,23,7,39,38,136,51,51,51, 38,25,31,26,2,1,9,9,11,161,1,63,112,74,139,34, 135,56,50,51,51,51,140,22,41,2,22,19,23,137,40,40, 147,75,23,162,13,157,67,0,0,1,0,0,255,254,2,43, 1,205,0,47,0,0,1,35,17,39,53,38,35,34,15,2, 39,54,55,38,39,38,35,34,7,6,21,20,23,22,23,22, 21,20,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,53,33,53,33,2,43,70,45,37,13,57,30,25,3,41, 3,19,19,43,16,15,58,12,5,94,24,22,43,18,11,16, 184,55,23,30,67,60,43,59,32,29,254,72,2,43,1,165, 254,89,46,227,8,47,48,6,15,27,22,33,15,6,42,16, 25,57,78,20,14,27,12,7,13,114,101,70,28,12,63,46, 20,122,40,0,0,3,0,0,0,48,2,129,1,205,0,32, 0,46,0,57,0,0,55,34,39,38,53,52,55,54,51,50, 23,54,55,53,33,53,33,21,35,21,22,23,22,21,20,15, 1,6,7,39,38,39,6,37,52,47,1,35,34,7,6,7, 22,51,50,55,54,39,38,35,34,21,20,23,22,51,50,55, 188,74,44,29,72,36,44,93,29,38,81,254,78,2,129,160, 41,32,20,63,29,19,22,44,77,13,41,1,5,30,25,11, 60,34,17,20,6,91,66,24,10,232,15,84,108,44,20,22, 66,27,48,61,39,50,64,30,15,56,54,2,114,40,40,115, 4,49,33,30,81,39,13,7,1,2,10,68,81,150,53,11, 5,28,14,39,99,60,23,43,54,105,43,22,10,51,0,2, 0,0,255,254,1,192,1,205,0,22,0,37,0,0,1,35, 17,39,53,6,7,6,35,34,39,38,53,52,55,54,51,50, 23,53,33,53,33,7,53,38,39,38,35,34,7,6,21,20, 23,22,51,50,1,192,70,45,46,66,15,13,68,48,36,69, 39,42,96,46,254,179,1,192,115,38,32,25,45,56,33,17, 60,16,19,68,1,165,254,89,46,123,38,11,2,50,37,44, 55,29,16,64,138,40,249,25,45,15,12,33,18,21,61,17, 4,0,0,2,0,0,255,243,2,81,1,205,0,14,0,52, 0,0,1,52,35,34,15,1,6,21,20,23,22,51,50,55, 54,37,33,21,35,17,39,17,35,22,21,20,7,6,7,23, 7,47,1,38,39,38,53,52,51,50,23,55,54,55,54,55, 38,39,38,53,52,55,35,1,51,101,45,23,8,2,58,43, 46,7,8,17,254,205,2,81,69,45,175,49,48,47,71,131, 31,141,36,35,23,8,27,55,26,24,47,37,7,4,91,65, 34,20,101,1,63,102,23,12,5,4,52,31,24,1,20,170, 40,254,89,46,1,121,34,67,58,56,54,17,131,17,141,1, 5,22,8,20,40,53,2,10,37,7,6,16,48,25,51,28, 20,0,0,3,0,0,255,254,1,148,1,205,0,16,0,21, 0,34,0,0,1,35,17,39,53,6,7,6,35,34,39,38, 61,1,35,53,33,7,53,35,23,22,7,53,52,47,1,21, 20,23,22,51,50,55,54,1,148,70,45,27,65,13,12,49, 46,36,41,1,148,115,192,186,3,25,12,162,40,19,14,62, 29,10,1,165,254,89,46,134,30,8,2,42,34,33,174,40, 202,162,156,1,53,27,4,10,136,162,24,18,8,19,7,0, 0,2,0,0,255,254,2,0,1,205,0,29,0,37,0,0, 55,50,55,54,61,1,35,53,33,21,35,17,39,53,6,35, 34,39,6,7,23,7,39,38,53,52,51,50,23,22,37,53, 35,7,21,22,51,50,133,13,13,4,163,2,0,70,45,29, 54,72,44,16,48,141,34,137,57,25,32,26,2,1,9,187, 1,24,52,67,220,41,14,9,137,40,40,254,89,46,149,12, 43,34,14,162,13,157,66,17,22,41,2,14,187,158,1,42, 0,1,0,0,255,215,1,174,1,205,0,56,0,0,1,35, 21,35,34,21,20,23,22,23,54,51,50,23,22,21,20,7, 6,35,34,52,51,50,55,54,53,52,35,34,7,6,21,20, 23,22,23,21,38,39,38,53,52,55,38,39,38,53,52,55, 54,59,1,53,33,53,33,1,174,89,223,27,33,8,7,28, 47,74,45,29,36,19,20,27,16,26,10,3,98,71,20,5, 43,49,116,113,77,65,32,30,21,12,58,18,20,156,254,217, 1,174,1,165,104,40,29,17,3,2,16,41,26,35,38,24, 12,34,36,10,11,45,45,12,15,50,33,37,28,23,13,54, 46,58,40,38,11,36,20,17,45,15,4,65,40,0,0,1, 254,238,255,115,255,84,255,217,0,3,0,0,15,1,39,55, 172,51,51,51,90,51,51,51,0,1,0,45,0,48,1,112, 1,205,0,39,0,0,1,35,34,21,20,31,1,22,21,20, 7,6,35,34,39,38,39,38,53,52,51,50,23,22,23,22, 51,50,53,52,39,38,39,38,53,52,55,54,59,1,1,112, 189,24,45,84,45,34,36,58,79,50,12,8,7,9,16,17, 19,40,11,10,93,45,15,70,45,43,19,20,171,1,153,30, 23,37,69,44,36,49,34,39,60,15,16,13,10,12,30,31, 11,3,80,41,48,14,59,39,18,36,19,8,0,1,255,251, 255,254,0,177,1,205,0,7,0,0,19,35,17,39,17,35, 53,51,177,69,45,68,182,1,165,254,89,46,1,121,40,0, 0,1,255,250,255,254,1,162,2,98,0,27,0,0,19,52, 55,54,51,50,23,7,38,39,38,35,34,15,1,21,20,23, 51,21,35,17,39,17,35,53,51,38,32,63,33,37,134,119, 14,48,93,42,42,73,19,5,18,78,70,45,69,67,29,2, 11,50,25,12,122,25,66,28,13,38,18,3,25,25,40,254, 89,46,1,121,40,29,0,1,255,63,255,254,0,177,2,126, 0,27,0,0,19,35,17,39,17,35,53,51,38,39,38,35, 34,21,20,23,35,38,53,52,55,54,51,50,23,22,23,51, 177,69,45,68,69,13,51,36,40,81,33,33,36,58,21,24, 89,58,32,9,79,1,165,254,89,46,1,121,40,65,44,30, 52,32,55,53,31,64,22,7,80,44,53,0,0,1,254,125, 255,79,0,14,0,0,0,25,0,0,23,20,7,6,35,34, 39,55,22,51,50,55,54,53,52,39,38,35,34,7,39,54, 51,50,23,22,14,97,27,30,114,133,26,112,109,55,35,18, 28,20,13,25,32,46,25,54,47,44,40,97,59,16,5,108, 19,89,24,13,15,22,15,12,22,26,34,36,33,0,0,1, 255,41,255,69,0,149,0,0,0,30,0,0,7,52,55,54, 51,50,31,1,35,39,38,35,34,7,6,21,20,23,22,51, 50,54,59,1,23,6,7,39,38,39,38,215,45,23,27,44, 47,178,48,145,35,41,39,7,3,22,9,7,30,36,4,13, 23,20,53,32,29,22,34,80,47,22,11,39,148,120,29,34, 12,22,16,13,5,16,19,32,2,3,6,20,31,0,0,1, 255,30,255,126,255,243,0,38,0,21,0,0,7,6,35,34, 39,38,53,52,55,54,51,23,34,7,6,21,20,23,22,51, 50,55,13,23,40,60,45,45,67,31,33,48,86,32,12,41, 12,12,48,22,114,16,25,24,40,47,22,10,37,32,12,15, 25,11,3,16,0,1,255,21,1,253,0,48,2,112,0,20, 0,0,19,6,7,6,35,34,39,38,39,38,53,52,51,50, 23,22,51,50,55,54,55,48,18,58,37,29,53,55,22,9, 2,12,9,5,46,69,24,28,37,18,2,77,35,28,17,54, 21,19,6,3,12,8,70,16,19,35,0,1,254,181,1,205, 255,186,2,160,0,9,0,0,3,35,38,43,1,39,51,50, 23,22,70,38,84,46,56,37,50,51,43,71,1,205,134,77, 48,80,0,1,254,204,1,205,255,194,2,230,0,31,0,0, 3,35,38,39,38,39,7,39,38,53,52,55,54,51,50,23, 38,39,38,39,38,35,34,7,53,52,51,50,23,22,23,22, 62,42,50,28,18,24,46,36,2,32,6,5,65,99,6,26, 14,33,19,15,5,6,20,33,40,41,24,3,1,205,55,12, 7,2,2,42,2,4,19,5,1,102,31,72,29,21,12,2, 53,20,52,51,141,20,0,2,255,201,255,254,0,228,2,112, 0,20,0,28,0,0,19,6,7,6,35,34,39,38,39,38, 53,52,51,50,23,22,51,50,55,54,55,7,35,17,39,17, 35,53,51,228,18,58,37,29,53,55,22,9,2,12,9,5, 46,69,24,28,37,18,16,69,45,68,182,2,77,35,28,17, 54,21,19,6,3,12,8,70,16,19,35,195,254,89,46,1, 121,40,0,1,255,96,255,254,0,177,2,160,0,17,0,0, 19,35,17,39,17,35,53,51,38,43,1,39,51,50,23,22, 23,51,177,69,45,68,66,81,47,56,37,50,50,44,66,50, 77,1,165,254,89,46,1,121,40,134,77,48,73,90,0,1, 255,112,255,254,0,177,2,226,0,40,0,0,19,35,17,39, 17,35,53,51,38,39,38,35,34,7,39,38,53,52,55,54, 51,50,23,38,39,38,39,38,35,34,7,53,52,51,50,23, 22,23,22,23,51,177,69,45,68,62,50,29,20,29,14,21, 36,2,32,6,5,65,99,6,26,14,33,19,15,5,6,20, 33,40,40,24,3,2,76,1,165,254,89,46,1,121,40,53, 11,8,2,42,2,4,19,5,1,102,31,72,29,21,12,2, 53,20,52,50,138,20,17,0,0,1,255,104,255,79,0,153, 255,255,0,11,0,0,23,35,38,39,38,43,1,39,51,22, 23,22,153,36,45,61,59,26,43,35,81,75,99,30,177,52, 44,42,38,21,100,29,0,4,0,40,0,68,3,87,2,40, 0,3,0,26,0,107,0,121,0,0,1,7,39,55,23,6, 7,6,35,34,39,38,39,38,53,52,51,50,23,22,23,22, 51,50,55,54,55,23,50,23,22,21,22,7,6,7,6,35, 34,39,38,39,6,35,34,39,22,21,20,7,6,35,34,39, 38,39,38,53,52,51,50,23,22,23,22,51,50,55,54,53, 52,39,38,35,34,7,39,54,55,54,51,54,55,54,53,52, 35,34,7,39,54,51,50,23,22,23,22,21,20,7,22,51, 22,51,50,63,1,54,23,52,35,34,7,6,7,22,23,22, 51,50,55,54,2,55,48,45,45,151,20,45,46,37,56,57, 26,10,3,15,10,5,30,52,20,20,22,31,39,19,112,56, 34,19,1,8,6,12,29,43,62,47,10,7,67,84,29,50, 4,64,38,43,82,92,22,17,7,24,16,3,19,62,49,47, 69,21,7,34,18,15,62,35,49,49,50,16,22,33,7,3, 121,43,34,38,37,78,68,56,21,12,12,38,73,1,41,30, 56,45,72,43,114,52,43,36,5,21,13,41,19,19,48,14, 3,2,1,37,37,39,87,33,25,25,53,24,22,6,4,13, 8,49,20,7,17,21,37,90,52,31,36,21,21,17,15,38, 51,11,12,76,29,9,13,58,33,20,99,23,24,8,8,16, 8,55,42,34,53,17,21,27,22,11,20,25,29,4,1,6, 23,11,23,61,26,32,34,39,15,18,18,20,46,29,41,20, 49,92,49,121,81,50,7,30,37,19,10,46,12,0,0,1, 255,148,1,205,255,245,2,115,0,3,0,0,3,7,35,55, 11,59,38,62,2,100,151,166,0,2,0,148,0,98,1,175, 1,107,0,15,0,31,0,0,37,20,7,6,35,34,39,38, 53,52,55,54,51,50,23,22,39,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,1,175,49,43,50,87,36,18, 56,40,45,93,35,14,142,68,26,10,55,22,27,65,21,6, 33,20,245,62,45,40,61,29,38,61,44,32,60,25,46,50, 19,24,60,24,10,47,15,18,75,20,12,0,0,2,0,173, 255,178,1,193,1,205,0,29,0,42,0,0,5,22,21,20, 7,6,35,34,39,50,53,52,47,1,55,38,39,38,53,52, 55,54,51,50,23,22,21,20,15,1,55,52,39,38,35,34, 21,20,23,22,23,54,55,1,172,21,20,6,6,43,26,46, 5,178,96,68,40,26,59,23,28,55,38,25,29,105,86,32, 13,15,73,52,28,32,18,3,1,18,22,23,11,3,41,18, 4,5,153,96,15,49,32,34,61,22,9,55,38,40,57,29, 105,223,35,18,8,54,55,31,15,1,19,30,0,1,0,143, 255,189,1,196,1,205,0,36,0,0,1,50,23,22,21,20, 7,23,7,39,6,35,34,39,38,61,1,52,55,54,51,50, 23,22,51,50,55,54,53,52,39,38,35,34,7,39,54,1, 42,77,44,28,118,123,22,136,4,9,40,31,18,22,9,7, 29,23,20,10,55,30,16,47,31,32,71,60,29,71,1,205, 64,41,53,96,58,182,34,204,1,28,17,18,18,20,19,8, 50,5,48,26,30,49,37,23,27,33,33,0,0,1,0,133, 255,199,1,207,1,205,0,43,0,0,37,20,7,6,7,23, 7,39,38,39,38,53,52,55,54,51,50,23,55,54,55,54, 53,52,43,1,39,51,50,53,52,39,38,43,1,39,51,50, 23,22,21,20,7,22,1,207,90,13,14,78,33,83,58,36, 20,27,7,7,53,27,25,44,18,7,72,139,20,165,39,45, 17,19,137,31,158,61,44,32,31,66,178,72,45,7,5,93, 13,102,1,29,17,20,31,10,2,64,2,10,43,15,17,66, 39,69,44,18,7,40,49,35,40,43,30,42,0,2,0,47, 0,38,2,1,1,187,0,19,0,31,0,0,1,7,23,22, 21,20,7,6,35,34,39,38,53,52,63,1,39,55,23,55, 3,52,47,1,7,6,21,20,51,50,55,54,2,1,172,79, 38,68,32,33,53,40,41,37,53,234,13,246,189,84,35,58, 55,25,85,57,23,8,1,145,163,56,27,43,43,21,10,31, 32,30,25,34,50,169,32,177,179,254,196,21,23,44,52,24, 20,43,28,10,0,1,0,113,255,198,1,228,1,195,0,32, 0,0,5,7,39,6,35,34,39,38,39,53,54,55,23,6, 21,20,23,22,51,50,53,52,39,38,53,52,55,54,51,50, 21,20,7,1,228,31,88,35,51,94,46,21,4,5,36,30, 25,69,18,21,75,1,25,27,7,7,45,10,36,22,214,24, 72,32,42,41,59,73,42,66,83,68,17,4,31,5,3,21, 19,23,9,2,54,29,21,0,0,1,0,99,255,197,1,251, 1,205,0,54,0,0,5,7,39,7,49,34,39,38,39,38, 53,52,55,38,39,38,53,52,55,54,59,1,7,35,34,7, 6,21,20,23,22,59,1,7,35,34,21,20,23,22,51,50, 53,52,39,38,53,52,51,50,23,22,21,20,7,1,251,33, 83,59,130,65,22,10,3,49,33,17,2,50,28,34,159,22, 142,34,14,17,2,20,39,165,10,141,57,2,18,115,48,3, 6,34,36,26,14,15,44,15,117,2,68,24,29,9,8,39, 31,23,49,14,6,56,31,18,40,17,14,23,5,8,71,39, 46,4,14,81,19,5,6,12,11,27,38,21,20,18,11,0, 0,2,0,78,0,38,1,248,1,197,0,33,0,43,0,0, 37,20,7,6,35,34,39,38,53,52,51,50,21,20,23,22, 51,50,55,54,55,6,35,34,39,38,53,52,55,54,51,50, 23,22,35,52,35,34,7,6,21,20,51,50,1,248,71,40, 56,113,78,68,20,19,51,61,108,72,33,14,2,27,27,63, 37,22,42,21,24,82,36,17,46,82,34,15,6,70,67,234, 114,52,30,133,118,129,35,35,118,100,124,69,30,35,13,43, 25,31,51,27,13,72,35,68,33,12,14,53,0,1,0,102, 0,0,1,213,1,198,0,21,0,0,55,20,23,22,51,50, 55,23,6,7,6,35,34,39,38,53,52,55,1,23,3,6, 146,80,28,34,87,60,34,34,69,38,36,84,56,50,15,1, 7,27,250,11,129,63,20,7,92,29,56,29,17,49,42,51, 24,15,1,17,34,254,252,13,0,2,0,153,255,200,1,250, 1,205,0,27,0,41,0,0,5,20,7,6,35,34,53,50, 53,52,47,1,38,53,52,55,54,51,50,23,22,21,20,7, 6,7,23,22,3,52,47,1,35,34,21,20,23,22,51,50, 55,54,1,250,35,14,14,42,32,20,204,56,68,43,41,79, 36,18,40,33,78,175,43,113,31,26,5,130,27,17,16,56, 46,30,4,30,16,6,49,21,24,20,192,53,46,54,36,22, 52,26,34,40,31,28,27,164,40,1,76,55,11,4,91,24, 27,17,40,26,0,4,0,40,0,68,3,87,2,40,0,3, 0,26,0,107,0,121,0,0,1,7,39,55,23,6,7,6, 35,34,39,38,39,38,53,52,51,50,23,22,23,22,51,50, 55,54,55,23,50,23,22,21,22,7,6,7,6,35,34,39, 38,39,6,35,34,39,22,21,20,7,6,35,34,39,38,39, 38,53,52,51,50,23,22,23,22,51,50,55,54,53,52,39, 38,35,34,7,39,54,55,54,51,54,55,54,53,52,35,34, 7,39,54,51,50,23,22,23,22,21,20,7,22,51,22,51, 50,63,1,54,23,52,35,34,7,6,7,22,23,22,51,50, 55,54,2,55,48,45,45,151,20,45,46,37,56,57,26,10, 3,15,10,5,30,52,20,20,22,31,39,19,112,56,34,19, 1,8,6,12,29,43,62,47,10,7,67,84,29,50,4,64, 38,43,82,92,22,17,7,24,16,3,19,62,49,47,69,21, 7,34,18,15,62,35,49,49,50,16,22,33,7,3,121,43, 34,38,37,78,68,56,21,12,12,38,73,1,41,30,56,45, 72,43,114,52,43,36,5,21,13,41,19,19,48,14,3,2, 1,37,37,39,87,33,25,25,53,24,22,6,4,13,8,49, 20,7,17,21,37,90,52,31,36,21,21,17,15,38,51,11, 12,76,29,9,13,58,33,20,99,23,24,8,8,16,8,55, 42,34,53,17,21,27,22,11,20,25,29,4,1,6,23,11, 23,61,26,32,34,39,15,18,18,20,46,29,41,20,49,92, 49,121,81,50,7,30,37,19,10,46,12,0,0,2,0,20, 1,50,1,4,2,9,0,12,0,29,0,0,19,52,63,1, 22,31,1,20,15,1,38,39,38,39,22,31,1,54,55,54, 55,20,7,6,35,34,39,38,39,38,90,35,21,33,9,2, 35,21,34,8,2,70,38,64,21,56,41,11,9,64,25,30, 16,15,59,22,9,1,214,39,9,2,4,31,15,38,10,1, 3,32,7,52,141,21,3,3,102,27,33,134,53,22,6,24, 93,39,0,3,0,20,0,0,1,104,1,254,0,15,0,29, 0,40,0,0,19,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,23,48,23,22,51,50,55,54,48,39,38,35, 34,15,1,22,31,1,22,23,7,48,39,38,39,20,51,31, 38,69,34,17,51,31,38,69,34,17,50,8,20,42,52,16, 2,8,20,42,52,16,52,118,110,102,5,5,40,34,104,122, 1,164,47,27,16,44,21,25,47,27,16,44,21,25,24,36, 52,8,24,36,52,128,11,130,128,6,5,20,54,149,37,0, 0,4,0,19,0,100,1,5,1,254,0,15,0,29,0,45, 0,61,0,0,19,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,6,39,34,15,1,23,22,23,50,55,54,53,52, 39,38,3,34,39,38,53,52,55,54,51,50,23,22,21,20, 7,6,39,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,140,81,30,10,50,30,41,81,30,10,36,33,52,50, 16,3,3,13,53,51,15,4,7,18,45,81,30,10,50,30, 41,81,30,10,50,30,41,50,16,3,36,15,18,51,15,4, 7,18,1,74,52,18,20,50,25,15,52,18,20,41,25,24, 150,39,20,20,39,2,39,10,10,15,13,33,254,132,52,18, 20,50,25,15,52,18,20,50,25,15,150,39,11,11,38,15, 6,39,10,10,15,13,33,0,0,1,255,236,0,0,2,148, 2,88,0,44,0,0,1,23,35,17,39,6,7,35,38,39, 38,39,23,18,23,22,51,50,55,54,53,52,39,6,7,6, 35,34,39,38,39,54,55,54,51,50,23,22,21,20,7,23, 17,33,39,2,108,40,80,120,76,97,30,96,72,61,28,20, 67,121,36,36,71,46,38,24,3,46,13,15,18,15,39,1, 3,45,23,24,70,35,24,13,48,254,12,40,2,88,60,253, 228,165,152,11,14,150,130,204,20,254,225,76,23,75,61,81, 63,60,61,21,6,9,21,58,38,19,10,70,48,74,55,68, 76,1,174,60,0,1,255,236,0,0,3,32,2,88,0,53, 0,0,33,39,17,39,35,17,39,6,7,35,38,39,38,39, 23,18,23,22,51,50,55,54,53,52,39,20,7,6,35,39, 38,39,38,53,52,55,54,51,50,23,22,21,20,7,23,17, 33,39,33,23,53,51,23,35,2,208,60,39,41,118,77,98, 30,96,71,62,28,20,65,121,38,38,71,46,38,27,46,13, 15,22,45,8,1,43,24,26,74,35,23,14,49,254,12,40, 2,128,40,100,40,80,74,1,150,60,253,228,168,156,11,14, 150,130,205,20,254,230,78,24,73,60,80,66,63,63,21,7, 3,15,54,9,10,33,20,10,71,47,72,56,69,76,1,174, 60,60,60,60,0,2,255,236,0,0,2,28,3,22,0,18, 0,61,0,0,1,52,47,2,38,39,20,23,22,51,50,23, 22,21,33,23,33,39,1,22,23,22,23,7,38,39,38,49, 39,22,51,55,54,55,54,53,52,39,38,39,6,15,1,38, 39,38,53,52,55,54,51,22,23,22,23,22,21,7,6,7, 6,1,204,124,62,201,90,3,106,40,71,125,25,83,254,62, 40,2,8,40,254,160,23,146,100,43,40,112,227,41,40,39, 55,68,127,71,36,46,44,83,4,68,30,57,31,14,95,26, 31,123,91,50,17,9,4,24,166,71,2,88,102,24,7,3, 6,48,91,20,8,3,11,57,60,60,254,152,4,104,71,41, 20,124,99,17,60,12,4,14,44,22,23,25,21,20,15,76, 15,3,2,33,15,17,51,13,4,1,45,26,33,17,17,21, 67,35,15,0,0,2,255,236,0,0,2,28,3,22,0,18, 0,71,0,0,1,33,23,33,39,35,52,47,2,38,39,20, 23,22,51,50,23,22,19,7,39,38,53,52,55,6,7,6, 7,6,35,34,39,22,51,50,55,54,55,39,38,39,38,39, 20,7,6,35,34,39,38,53,55,54,55,54,51,50,23,22, 23,20,21,54,55,54,55,23,6,7,20,1,174,254,62,40, 2,8,40,40,124,62,201,90,3,106,40,71,125,25,83,10, 20,36,30,19,21,53,70,40,39,36,58,56,21,29,25,28, 64,39,2,2,18,3,2,49,15,16,48,22,11,2,11,46, 19,20,19,16,71,4,67,29,28,60,50,63,1,2,88,60, 60,102,24,7,3,6,48,91,20,8,3,11,253,131,20,67, 65,90,75,99,10,67,89,29,28,69,17,13,29,72,44,13, 18,3,2,63,21,6,43,21,28,22,41,17,8,6,26,110, 6,6,92,23,23,17,100,94,117,94,0,1,255,236,0,0, 2,38,3,22,0,51,0,0,19,51,21,23,54,55,21,6, 7,6,35,34,39,38,39,38,47,1,16,23,22,23,55,54, 55,54,53,52,39,6,15,2,53,33,39,35,52,47,2,38, 39,20,23,22,51,23,22,31,1,33,20,180,70,105,65,10, 77,43,51,56,49,109,22,2,1,20,124,59,75,37,89,56, 47,37,31,100,42,17,1,34,40,40,128,64,203,91,4,108, 41,74,124,100,11,2,254,52,2,28,240,70,39,71,52,116, 58,32,39,86,225,24,24,20,254,196,124,59,1,4,18,86, 74,94,81,83,73,47,17,3,240,60,103,23,7,3,11,43, 91,20,8,1,6,49,15,0,0,1,255,236,0,1,2,58, 3,22,0,63,0,0,1,51,23,33,21,54,55,54,55,22, 21,22,7,6,7,35,38,39,38,39,23,22,23,22,23,38, 39,38,53,52,55,23,18,23,22,51,50,55,54,55,6,7, 6,7,39,53,35,39,33,52,39,38,35,34,39,38,53,20, 23,22,23,50,23,22,1,234,40,40,254,222,107,48,9,6, 35,1,56,61,90,37,106,66,65,5,20,11,68,46,57,88, 26,9,1,20,10,89,36,41,65,48,40,11,62,52,17,18, 70,201,40,1,224,90,26,133,143,49,39,92,15,142,162,56, 43,2,88,60,240,46,68,13,13,84,80,105,76,83,10,10, 118,119,201,20,160,113,77,17,76,189,62,68,21,21,20,254, 247,95,37,83,70,104,68,27,8,7,70,240,60,57,11,3, 36,28,55,46,8,1,1,42,32,0,0,2,0,20,0,0, 2,118,2,88,0,37,0,43,0,0,33,17,51,39,35,17, 39,17,35,21,7,39,15,1,6,7,38,47,1,6,7,6, 21,20,31,1,54,55,54,55,23,5,23,22,23,22,21,53, 3,17,38,39,38,49,2,38,80,40,100,60,60,40,110,35, 14,11,14,6,42,22,39,13,4,47,25,57,39,27,5,80, 254,232,20,159,142,89,60,82,144,24,2,28,60,254,32,70, 1,154,100,20,120,84,21,13,5,50,11,2,3,34,11,12, 53,12,2,2,50,36,49,90,160,20,69,114,72,25,130,1, 59,254,197,106,56,8,0,1,0,20,255,254,1,124,2,88, 0,52,0,0,55,39,22,51,50,55,54,55,39,38,39,23, 6,7,6,35,34,39,38,53,52,55,51,22,23,22,21,20, 7,54,55,54,53,39,38,39,38,39,38,53,23,22,31,1, 22,21,20,7,6,7,6,35,38,50,30,25,34,51,28,12, 1,4,7,20,2,3,27,19,21,46,5,1,50,25,55,38, 27,15,99,9,2,4,12,76,90,14,94,20,8,97,135,100, 71,34,45,31,35,54,20,60,19,34,15,17,18,18,17,14, 21,14,12,49,6,6,63,8,7,48,36,41,30,29,21,105, 13,21,24,40,59,69,12,85,91,20,52,72,96,77,63,105, 64,31,13,9,1,0,0,1,0,20,0,0,1,184,2,88, 0,48,0,0,19,51,22,31,1,7,6,7,6,35,34,39, 38,53,52,55,54,55,54,49,23,17,38,35,34,15,1,6, 35,34,39,38,53,23,22,23,22,51,50,63,1,54,51,50, 23,17,48,7,6,207,17,34,13,5,3,1,2,18,46,46, 23,12,5,24,166,60,60,58,61,37,46,59,14,10,125,9, 1,20,13,42,10,14,19,35,60,25,23,56,43,59,91,1, 184,5,29,18,21,3,4,41,39,21,26,17,18,90,54,16, 70,253,238,64,25,33,6,208,15,17,20,117,17,4,10,22, 8,42,1,194,15,30,0,1,0,20,0,0,2,68,3,32, 0,72,0,0,1,52,39,38,39,38,39,38,53,20,31,1, 22,23,22,21,20,7,6,7,53,39,48,7,6,7,6,21, 23,22,31,1,54,55,54,53,52,39,38,39,38,35,34,7, 54,55,54,49,17,38,35,34,15,1,6,35,34,39,38,47, 1,22,23,50,55,54,51,50,23,19,50,55,54,2,68,149, 33,98,70,8,2,73,128,91,7,1,37,12,11,80,66,161, 23,5,3,12,44,24,44,18,6,10,5,9,17,19,5,4, 29,128,16,43,56,36,63,9,35,19,45,19,10,5,20,5, 130,16,48,60,45,66,70,1,45,39,35,1,234,154,65,14, 27,19,21,5,5,57,41,63,52,81,8,8,48,40,14,3, 145,70,18,54,88,18,16,27,45,12,3,1,40,13,12,16, 13,8,7,12,1,57,30,3,254,62,42,27,3,10,57,30, 51,20,235,5,27,34,61,1,109,43,37,0,0,1,0,20, 255,255,2,54,2,91,0,67,0,0,1,54,53,54,39,38, 39,38,35,34,7,6,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,35,54,51,50,23,22,21,20,7,38,39,7, 6,7,20,23,22,51,50,55,54,55,6,7,6,35,34,39, 38,47,1,18,23,22,51,50,55,54,53,52,39,54,2,49, 4,1,4,17,81,52,55,22,19,16,14,66,30,19,23,14, 14,39,19,9,11,13,32,55,49,48,27,39,32,21,33,5, 25,16,20,26,28,8,7,4,75,20,23,84,90,98,56,20, 75,160,50,55,87,63,52,32,5,1,129,18,19,17,16,76, 43,28,4,4,8,34,89,29,24,16,6,18,40,31,21,10, 19,43,42,55,39,40,28,1,4,18,37,32,26,16,28,7, 9,140,35,10,105,113,187,20,254,145,101,32,72,60,69,51, 38,10,0,1,0,20,0,0,2,168,3,32,0,95,0,0, 1,6,7,39,38,39,38,53,52,55,54,51,50,23,54,53, 39,38,39,38,35,7,6,7,23,22,31,1,22,21,20,7, 6,35,39,38,39,38,53,52,55,54,51,50,31,1,22,21, 20,7,54,55,54,53,52,47,2,38,53,20,23,22,23,22, 23,22,21,20,7,6,35,6,7,22,21,20,7,6,35,34, 39,38,39,38,39,23,22,23,22,51,50,55,54,55,54,1, 234,36,32,18,31,11,2,30,13,15,32,40,27,3,16,66, 35,32,23,14,8,11,8,6,10,4,39,13,14,21,34,14, 4,81,25,30,83,65,23,38,4,23,21,15,92,59,77,72, 4,13,76,113,48,106,56,35,33,20,6,31,62,61,79,24, 24,133,87,42,29,20,68,122,74,66,19,17,76,7,1,1, 4,43,1,3,13,42,9,7,36,16,7,29,39,39,29,60, 34,18,3,5,11,3,4,9,21,13,12,40,18,6,3,12, 35,10,9,101,29,9,55,23,46,55,19,19,7,40,30,28, 89,55,31,38,40,57,8,7,18,21,30,29,65,132,58,41, 26,62,13,38,50,77,63,61,6,36,213,104,140,20,225,113, 68,6,29,131,10,0,0,2,255,236,0,0,2,158,2,88, 0,5,0,38,0,0,1,7,48,23,22,23,19,50,23,22, 23,20,7,6,7,39,38,47,1,54,55,38,47,1,17,52, 39,38,39,38,47,1,37,53,33,39,33,23,33,1,94,250, 62,129,59,60,53,59,70,1,3,13,42,20,33,11,3,1, 71,16,100,14,94,143,132,11,10,20,1,94,254,182,40,2, 138,40,254,252,1,189,145,26,61,83,1,114,46,55,71,14, 14,62,3,2,11,32,20,46,24,52,16,2,254,72,23,78, 117,54,4,4,20,200,40,60,60,0,0,1,0,20,0,0, 1,254,2,88,0,46,0,0,19,54,55,23,22,21,20,7, 6,15,1,23,22,23,22,23,17,51,39,35,17,38,47,1, 55,54,53,52,39,38,35,48,23,6,7,38,39,7,6,7, 6,21,20,23,22,51,50,140,41,9,44,56,11,20,49,190, 20,134,148,107,1,80,40,100,77,149,24,140,59,57,47,65, 2,1,11,16,39,22,36,6,1,40,11,12,26,1,174,27, 83,2,9,32,14,16,29,28,110,20,54,114,83,29,2,28, 60,254,42,102,59,9,80,34,57,58,39,32,50,35,15,39, 1,3,11,32,5,5,53,15,4,0,0,1,0,20,0,0, 1,254,2,88,0,41,0,0,1,53,51,23,35,17,39,17, 38,35,7,6,7,6,7,54,55,23,22,23,7,6,7,39, 54,55,47,1,7,6,7,6,35,39,38,53,52,55,54,51, 50,23,1,114,100,40,80,60,82,79,25,58,39,12,5,43, 57,26,46,1,4,20,109,40,111,1,3,10,24,27,28,23, 20,16,11,82,45,63,72,70,1,189,155,60,253,228,64,1, 80,140,3,17,82,25,23,48,1,4,13,46,27,71,90,40, 98,29,7,4,3,8,15,13,3,6,14,151,64,35,120,0, 0,2,255,236,0,0,1,234,2,88,0,15,0,35,0,0, 1,33,6,21,20,23,22,23,55,23,7,23,22,23,22,23, 19,35,17,52,39,38,47,1,55,38,39,38,53,52,55,54, 55,35,39,33,1,94,254,242,5,96,56,3,50,40,220,29, 113,70,24,14,140,80,108,140,142,20,190,111,38,37,8,11, 27,30,40,1,214,2,28,7,7,28,42,24,2,30,30,130, 10,47,68,23,22,1,154,253,228,30,83,107,60,20,110,17, 18,17,23,10,12,15,18,60,0,2,0,18,0,0,1,250, 2,89,0,55,0,65,0,0,1,21,54,55,54,55,22,21, 20,7,6,7,6,35,34,39,38,39,38,53,23,22,23,22, 23,50,55,54,55,54,53,52,39,6,7,39,53,38,39,38, 39,22,51,52,55,54,51,23,22,23,22,21,7,6,7,6, 53,50,55,39,38,39,15,2,6,1,22,29,53,76,32,37, 13,31,85,47,51,50,45,119,34,12,20,12,110,53,63,32, 30,77,30,14,1,65,105,70,32,36,20,2,62,28,53,20, 22,22,20,9,15,3,16,75,7,50,1,3,6,11,11,9, 8,3,1,182,138,2,29,43,66,83,81,48,45,105,50,28, 28,73,227,78,94,20,248,101,49,1,14,34,94,44,51,11, 11,71,39,70,138,12,47,26,15,40,63,28,11,3,7,17, 29,23,22,47,13,1,60,25,15,14,1,3,9,18,11,0, 0,2,255,236,0,0,1,255,2,88,0,11,0,32,0,0, 19,17,54,55,54,53,39,38,39,38,39,38,39,22,31,1, 22,23,22,21,6,7,6,7,34,7,39,17,35,39,33,23, 33,110,101,88,91,2,5,61,126,55,18,13,53,93,110,47, 31,5,1,142,102,108,5,4,37,30,40,1,234,41,254,111, 1,224,254,107,30,70,72,65,21,8,15,31,54,18,61,73, 22,23,13,26,24,23,128,98,71,18,1,51,1,233,60,60, 0,2,255,236,255,176,2,39,2,88,0,8,0,47,0,0, 19,21,54,55,54,49,38,39,38,23,6,7,6,21,39,17, 35,39,33,23,33,21,22,31,1,22,31,1,6,7,6,7, 22,31,1,7,38,39,38,49,39,22,51,50,55,54,53,52, 110,73,82,3,39,60,37,197,75,156,11,37,30,40,2,18, 41,254,71,22,190,14,44,13,3,2,80,44,62,104,108,70, 40,110,214,46,30,47,45,119,53,27,1,196,154,6,64,2, 6,33,20,79,69,53,4,1,51,1,10,60,60,20,52,57, 5,21,58,33,80,43,24,7,30,102,68,20,121,74,15,60, 10,55,28,36,25,0,0,1,255,236,255,216,2,138,2,88, 0,63,0,0,1,35,21,22,51,55,54,55,54,55,22,23, 7,6,7,6,35,34,39,38,17,23,18,23,22,51,55,54, 55,54,53,6,35,34,47,1,53,35,39,33,23,33,48,23, 22,51,55,54,55,23,6,21,20,23,7,38,39,38,53,54, 55,48,39,38,1,64,90,1,7,17,41,36,11,7,45,1, 3,15,72,38,43,78,58,89,20,13,94,35,40,26,61,34, 27,97,34,21,23,15,140,40,2,118,40,254,222,22,45,51, 30,6,6,50,64,44,20,42,14,13,1,18,43,90,2,28, 220,6,5,20,50,16,15,95,92,49,109,52,29,87,134,1, 29,20,254,246,92,34,3,18,80,62,79,81,30,21,240,60, 60,24,43,3,2,2,100,94,124,97,85,20,80,60,57,67, 80,96,19,47,0,2,255,236,0,0,2,98,2,88,0,18, 0,24,0,0,33,17,51,39,35,17,39,17,33,23,33,21, 5,23,22,23,22,23,53,3,17,38,39,38,49,2,18,80, 40,100,60,254,82,40,1,74,254,162,20,154,150,84,2,60, 51,169,30,2,28,60,254,32,70,1,154,60,40,200,20,62, 125,71,22,130,1,59,254,197,85,73,12,0,0,2,0,24, 0,0,2,120,2,88,0,31,0,99,0,0,1,6,7,39, 38,39,55,54,55,50,23,22,23,54,53,39,38,35,7,6, 7,6,7,22,23,22,51,50,53,52,39,38,55,22,21,20, 7,6,35,34,39,38,39,17,38,39,7,6,7,6,35,34, 39,38,53,23,22,23,22,51,50,63,1,54,51,50,23,17, 48,7,6,7,51,22,31,1,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,49,23,21,54,55,51,22,31,1,20, 2,52,26,20,13,22,1,3,9,23,10,13,11,13,17,2, 6,15,19,43,37,17,8,22,54,29,20,23,10,3,25,36, 43,14,16,15,16,55,37,58,58,30,25,56,32,16,125,9, 1,20,13,42,10,14,19,35,57,23,22,52,43,54,83,23, 17,32,13,4,4,1,1,18,46,46,23,12,5,24,159,57, 60,47,65,25,44,13,3,1,84,28,3,2,8,35,23,29, 1,7,7,12,46,27,19,15,4,17,57,25,25,65,46,26, 34,22,35,12,34,53,48,55,19,7,6,21,75,254,232,63, 1,4,7,34,19,208,15,17,20,117,17,4,10,23,7,42, 1,194,16,29,45,5,29,19,21,3,3,41,39,21,26,17, 18,90,54,16,70,90,85,10,7,44,27,46,0,1,255,236, 0,0,2,19,3,22,0,55,0,0,1,51,23,33,17,54, 55,54,55,39,38,53,6,35,39,38,39,38,53,52,55,54, 55,51,22,23,20,23,22,21,20,7,6,7,6,7,39,17, 35,39,33,52,39,38,35,34,39,38,53,20,23,22,23,50, 23,22,1,194,40,41,254,91,82,91,101,6,1,1,31,31, 21,37,13,4,9,20,49,29,66,20,1,5,131,97,104,16, 15,37,30,40,1,184,83,24,121,132,44,36,84,14,132,148, 52,40,2,88,60,254,47,23,82,93,75,25,2,1,30,3, 12,43,12,13,18,13,31,7,8,78,3,3,23,24,127,113, 85,28,4,2,51,1,233,60,57,11,3,36,28,55,46,8, 1,1,42,32,0,2,255,236,255,255,1,245,3,37,0,20, 0,66,0,0,19,35,22,21,20,7,6,7,6,15,1,22, 51,55,54,55,54,53,52,39,38,55,22,21,22,7,6,7, 6,7,34,39,38,47,1,55,54,63,1,54,53,52,39,35, 39,51,39,38,39,53,54,51,50,31,1,38,39,15,1,6, 7,20,23,22,23,51,23,250,40,27,33,14,43,38,5,1, 42,45,27,62,40,31,34,25,9,120,1,12,29,78,50,54, 16,17,40,35,47,3,9,50,47,39,21,130,60,163,5,57, 7,9,66,22,29,40,29,22,23,15,13,1,5,17,61,250, 31,2,28,105,70,76,42,16,29,25,29,18,42,3,18,83, 65,73,77,60,43,30,91,148,44,44,110,62,41,1,4,11, 36,51,49,68,43,39,40,68,53,79,60,6,75,56,25,43, 5,60,10,1,3,8,11,19,11,13,45,41,60,0,0,1, 255,236,255,250,2,28,2,88,0,36,0,0,1,23,33,21, 54,55,54,55,22,23,7,6,7,6,35,34,39,38,17,23, 22,23,22,51,55,54,55,54,53,6,7,6,7,39,53,35, 39,1,244,40,254,252,92,35,22,11,40,1,4,16,82,54, 61,101,70,93,20,12,111,50,59,34,78,44,32,40,81,9, 30,70,190,40,2,88,60,240,40,34,21,25,85,82,48,111, 61,39,101,135,1,14,20,254,99,44,3,17,81,60,76,44, 31,4,11,70,240,60,0,1,255,236,0,0,2,19,2,88, 0,38,0,0,1,23,33,17,54,55,54,55,39,38,53,6, 35,39,38,39,38,53,52,55,54,63,1,22,23,20,23,22, 21,20,7,6,7,6,7,39,17,35,39,1,234,41,254,91, 82,91,101,6,1,1,31,31,20,37,13,4,8,20,49,30, 70,20,1,5,124,96,109,21,18,37,30,40,2,88,60,254, 47,23,82,93,75,25,2,1,30,3,12,43,13,13,17,13, 31,7,1,8,79,3,3,23,23,122,111,86,32,6,3,51, 1,233,60,0,0,1,0,20,0,0,1,234,2,88,0,39, 0,0,19,38,39,38,53,52,55,54,51,22,23,22,49,53, 51,23,35,17,39,17,38,35,34,7,6,21,20,23,54,55, 23,22,23,22,21,20,7,6,35,34,120,68,23,9,53,40, 57,57,113,8,102,40,80,60,103,70,66,24,8,11,30,45, 20,34,14,5,12,24,63,9,1,4,11,77,29,33,90,56, 44,1,102,7,110,60,253,228,64,1,115,94,76,27,31,36, 19,78,3,2,12,43,14,15,22,18,36,0,0,2,255,236, 255,254,2,48,2,88,0,3,0,44,0,0,1,39,33,23, 1,54,53,52,39,38,35,34,7,6,21,20,23,22,51,55, 54,55,54,53,22,21,7,6,7,6,35,34,39,38,39,38, 47,1,18,23,22,51,50,55,54,2,48,40,253,228,40,1, 194,15,85,19,23,48,32,18,46,13,15,22,45,8,1,26, 3,15,65,33,38,31,31,115,68,9,8,20,41,113,56,63, 80,69,26,2,28,60,60,254,158,72,58,144,33,8,30,16, 18,63,21,7,3,15,54,9,10,63,65,47,98,46,23,15, 60,242,33,35,20,254,203,128,64,99,38,0,0,1,0,20, 0,0,1,254,2,88,0,43,0,0,19,50,23,22,21,20, 15,1,48,23,22,23,17,51,23,35,17,39,38,39,38,39, 38,47,1,55,54,55,39,38,35,22,21,7,6,15,1,38, 39,38,53,52,55,54,150,93,42,20,45,140,65,133,52,100, 40,80,5,19,60,147,153,3,3,20,190,45,6,1,12,98, 10,3,11,38,24,43,16,5,80,23,2,88,68,32,36,58, 26,80,27,62,81,1,214,60,253,228,13,28,50,124,63,1, 1,20,110,26,38,19,47,27,23,26,39,10,3,2,37,13, 16,87,25,8,0,1,255,236,0,0,1,235,2,88,0,25, 0,0,19,17,33,39,33,23,51,17,23,48,55,54,55,6, 21,20,31,1,55,38,53,54,55,39,6,7,110,1,125,41, 254,42,40,30,60,70,93,50,19,46,20,20,44,1,63,50, 86,115,1,18,1,10,60,60,254,222,71,85,106,26,99,75, 105,82,35,20,85,94,117,94,100,24,147,0,0,2,0,20, 0,0,1,254,2,88,0,5,0,36,0,0,1,7,48,23, 22,23,3,55,53,51,23,35,17,52,39,38,47,1,55,48, 39,38,39,55,54,55,54,51,23,22,31,1,6,7,22,23, 22,1,114,250,69,133,48,115,115,100,40,80,93,134,163,20, 211,50,90,1,4,4,8,20,33,23,38,12,3,1,48,17, 35,12,1,189,145,30,65,75,1,48,66,100,60,253,228,28, 74,107,71,20,122,15,34,53,22,12,12,29,3,12,34,19, 37,27,23,5,2,0,0,1,255,236,0,0,1,214,2,88, 0,29,0,0,1,17,38,47,1,6,7,6,21,20,23,22, 51,50,55,54,53,52,39,22,23,22,23,22,23,17,51,39, 33,23,1,74,85,125,31,61,21,7,48,16,17,48,16,4, 29,80,85,8,82,8,7,80,40,254,62,40,2,28,254,153, 205,20,1,5,58,21,23,46,16,5,31,10,10,29,36,19, 139,14,149,15,13,2,28,60,60,0,0,2,0,19,0,0, 2,69,2,88,0,33,0,49,0,0,63,1,54,53,52,39, 38,35,34,15,1,6,7,6,35,39,38,53,52,55,54,51, 50,31,1,53,51,23,35,17,39,17,39,5,55,38,39,38, 35,34,7,55,22,23,22,21,7,6,7,48,120,27,11,48, 23,12,4,1,3,4,8,10,10,10,5,152,23,25,65,135, 20,101,40,80,61,20,254,242,220,26,54,39,36,97,46,10, 31,38,31,3,5,11,240,24,10,13,30,31,14,2,13,7, 5,6,2,3,6,225,30,5,139,21,160,60,253,228,60,1, 84,20,210,240,42,29,20,148,2,2,31,27,26,17,11,10, 0,1,255,236,0,0,2,158,2,88,0,48,0,0,1,17, 38,37,38,49,39,55,38,39,38,53,52,55,54,55,35,39, 33,23,33,6,21,20,31,1,7,48,23,22,23,17,51,50, 23,22,23,20,7,6,7,39,38,47,1,54,55,38,39,1, 154,87,254,225,16,20,190,111,38,37,8,11,27,30,40,2, 138,40,253,178,5,55,160,190,103,91,56,60,53,59,70,1, 3,13,42,20,33,11,3,1,71,16,100,1,184,254,72,94, 176,10,20,110,17,18,17,23,10,12,15,18,60,60,8,7, 21,25,69,110,63,58,49,1,114,46,55,71,14,14,62,3, 2,11,32,20,46,24,52,16,0,2,255,236,0,0,1,234, 2,88,0,5,0,18,0,0,1,7,48,23,22,23,17,33, 39,33,23,35,17,52,39,38,47,1,37,1,94,250,63,129, 58,254,182,40,1,214,40,80,93,133,164,20,1,94,1,189, 145,26,61,83,1,154,60,60,253,228,26,74,107,73,20,200, 0,2,255,236,0,1,2,98,2,88,0,3,0,52,0,0, 19,39,33,23,3,6,7,34,39,38,39,38,39,23,18,23, 22,51,50,55,54,53,52,39,6,7,39,38,39,38,53,52, 55,54,55,23,22,23,22,21,20,7,6,7,55,54,55,54, 55,22,31,1,6,20,40,2,78,40,131,78,95,24,24,113, 76,44,25,20,78,136,40,41,82,54,46,17,59,88,30,50, 31,22,30,27,31,21,37,17,7,18,14,23,29,46,51,18, 21,41,9,1,4,2,28,60,60,254,86,112,1,8,37,191, 111,152,20,254,227,76,22,75,63,82,48,45,122,8,1,9, 43,32,37,42,34,29,1,3,12,42,17,17,28,22,17,10, 1,8,77,26,38,32,104,60,112,0,0,2,255,237,0,0, 1,234,2,88,0,36,0,54,0,0,1,17,38,47,1,6, 7,39,38,39,53,54,63,1,22,23,48,55,54,53,52,39, 38,39,38,39,38,39,55,54,55,54,55,35,39,33,23,5, 22,21,20,15,1,48,23,22,23,17,33,7,22,23,22,23, 22,1,154,76,134,30,43,34,19,39,7,7,39,22,33,41, 20,13,1,6,77,80,17,15,2,1,4,24,8,5,25,41, 1,213,40,254,246,6,48,12,74,59,47,254,240,3,2,48, 65,19,9,2,28,253,228,123,64,13,33,1,3,13,53,31, 53,12,3,2,32,27,22,16,4,4,25,22,24,11,10,12, 17,12,21,7,6,60,60,156,12,13,32,62,15,43,38,39, 1,154,13,19,34,45,23,11,0,2,255,236,0,0,1,234, 2,88,0,11,0,33,0,0,1,33,6,21,20,31,1,7, 48,23,22,23,19,17,52,39,38,39,38,47,1,55,38,39, 38,53,52,55,54,55,35,39,33,23,1,94,254,242,5,55, 160,190,70,138,42,60,84,143,154,4,5,20,190,111,38,37, 8,11,27,30,40,1,214,40,2,28,8,7,21,25,69,110, 29,66,75,1,154,253,228,22,71,122,61,2,2,20,110,17, 18,17,23,10,12,15,18,60,60,0,0,3,255,236,0,0, 1,234,2,88,0,13,0,19,0,32,0,0,55,52,63,1, 22,23,22,21,20,15,1,38,39,38,19,7,48,23,22,23, 17,33,39,33,23,35,17,52,39,38,47,1,37,140,35,21, 33,9,2,35,21,34,8,2,210,250,65,127,58,254,182,40, 1,214,40,80,95,135,160,20,1,94,50,39,9,2,4,31, 7,8,38,10,1,3,32,7,1,146,145,28,63,79,1,154, 60,60,253,228,29,76,107,68,20,200,0,1,255,236,0,0, 1,234,2,88,0,51,0,0,55,54,55,23,22,31,1,6, 7,39,38,39,48,39,38,53,55,54,55,54,51,50,23,54, 51,50,31,2,22,23,53,33,39,33,23,35,17,39,17,38, 35,34,7,38,35,34,7,6,21,20,23,73,24,38,17,30, 11,2,1,47,32,20,25,21,49,3,11,41,20,21,60,44, 39,41,12,11,15,16,9,7,254,182,40,1,214,40,80,60, 36,32,41,41,51,49,37,17,7,21,237,71,2,4,12,39, 24,42,3,2,3,9,23,64,83,27,53,27,13,100,100,9, 16,29,20,26,150,60,60,253,228,64,1,36,54,90,90,46, 21,22,40,29,0,1,0,20,0,0,2,18,2,88,0,51, 0,0,19,6,7,39,38,53,52,55,54,55,38,39,7,6, 7,39,48,55,54,51,23,22,23,22,23,54,55,23,22,23, 22,23,53,51,23,35,17,39,17,38,39,7,6,7,22,23, 7,6,35,34,39,38,190,39,39,15,23,5,14,47,18,34, 15,20,16,17,17,24,25,20,29,27,14,14,48,54,20,45, 25,5,3,100,40,80,60,54,39,13,25,19,61,5,2,8, 26,27,28,13,1,114,74,1,3,11,34,15,15,45,32,89, 1,4,10,28,39,23,25,3,11,45,24,32,114,1,3,18, 85,17,18,156,60,253,228,64,1,90,129,1,3,14,73,42, 57,25,31,36,16,0,0,3,255,236,0,0,1,234,2,88, 0,6,0,12,0,32,0,0,1,39,7,48,23,22,23,17, 53,33,6,21,22,37,17,52,39,38,47,1,55,38,39,38, 53,52,55,54,55,35,39,33,23,1,94,91,159,64,128,58, 254,242,5,1,1,78,75,140,175,20,190,111,38,37,8,11, 27,30,40,1,214,40,1,110,27,93,27,62,81,1,15,139, 6,6,48,60,253,228,22,65,122,71,20,110,17,18,17,23, 10,12,15,18,60,60,0,2,255,236,0,0,1,234,2,88, 0,32,0,48,0,0,17,22,51,50,55,54,49,38,39,38, 53,38,55,54,55,35,39,33,23,35,17,39,17,38,39,15, 1,6,7,6,7,39,38,55,54,51,50,23,22,31,1,53, 33,6,21,23,22,23,22,17,23,71,105,14,148,45,31,1, 38,3,4,30,40,1,214,40,80,60,14,25,16,22,12,59, 74,47,22,32,223,34,17,6,6,8,23,6,254,241,5,3, 15,99,48,1,44,12,103,14,21,23,17,20,22,27,3,2, 60,60,253,228,60,1,50,44,1,4,14,9,60,75,2,3, 10,170,31,4,6,41,10,140,6,7,11,23,38,18,0,2, 255,236,0,0,2,28,2,88,0,3,0,46,0,0,1,33, 23,33,1,22,23,22,23,7,38,39,38,49,39,22,51,55, 54,55,54,53,52,39,38,39,6,15,1,38,39,38,53,52, 55,54,51,22,23,22,23,22,21,7,6,7,6,1,244,253, 248,40,2,8,254,120,23,146,100,43,40,112,227,41,40,39, 55,68,127,71,36,46,44,83,4,68,30,57,31,14,95,26, 31,123,91,50,17,9,4,24,166,71,2,88,60,254,212,4, 104,71,41,20,124,99,17,60,12,4,14,44,22,23,25,21, 20,15,76,15,3,2,33,15,17,51,13,4,1,45,26,33, 17,17,21,67,35,15,0,1,0,20,255,156,0,120,0,1, 0,13,0,0,23,52,63,1,22,23,22,21,20,15,1,38, 39,38,20,35,21,33,9,2,35,21,34,8,2,50,39,9, 2,4,31,7,8,38,10,1,3,32,7,0,0,1,255,236, 0,0,0,200,2,88,0,9,0,0,19,23,53,51,23,35, 17,39,17,39,20,40,100,40,80,60,80,2,88,60,60,60, 253,228,60,1,164,120,0,1,255,236,0,0,2,168,3,33, 0,26,0,0,19,39,51,39,54,51,50,23,22,23,22,23, 35,39,38,35,34,7,6,7,23,51,23,35,17,39,17,20, 40,80,20,94,148,97,153,116,14,10,8,20,241,83,50,47, 39,48,52,20,40,40,80,60,2,28,60,30,170,84,62,7, 4,3,76,24,20,24,66,30,60,253,228,60,1,224,0,1, 254,12,0,0,0,200,3,33,0,38,0,0,19,35,17,39, 17,35,39,51,39,38,39,38,35,34,7,6,7,6,21,20, 31,1,22,23,35,52,47,1,38,53,52,55,54,51,50,23, 22,21,51,200,80,60,40,40,80,1,12,88,81,115,129,54, 12,5,3,94,148,137,1,60,96,163,121,98,77,100,176,96, 73,40,2,28,253,228,60,1,224,60,29,64,36,33,34,8, 9,6,5,25,1,2,9,63,33,3,1,7,56,48,30,23, 68,52,81,0,0,2,0,20,255,106,1,24,0,0,0,11, 0,33,0,0,23,39,6,21,20,23,22,23,55,54,55,54, 23,6,7,39,38,47,1,54,63,1,22,23,55,51,7,22, 23,22,23,38,39,38,148,34,66,1,6,19,18,32,19,3, 28,46,48,20,31,7,1,6,57,39,16,17,14,30,18,60, 32,4,2,30,50,17,60,1,3,28,4,4,22,1,4,13, 33,6,3,70,6,1,8,30,19,39,10,3,1,2,37,46, 23,66,9,6,38,31,11,0,0,1,0,28,255,76,1,13, 0,0,0,31,0,0,23,38,39,7,6,7,6,21,20,23, 51,54,55,22,31,1,38,47,1,6,7,39,38,39,53,54, 63,1,22,23,55,51,159,18,37,24,20,4,2,25,18,22, 25,59,60,6,26,73,21,33,28,19,33,7,7,42,27,17, 19,8,30,55,13,1,3,5,18,6,7,28,6,3,21,4, 78,8,29,25,6,26,1,2,11,40,25,43,9,1,1,7, 24,0,0,1,0,35,255,106,0,173,0,0,0,5,0,0, 23,55,23,7,23,7,35,115,23,82,82,23,75,75,23,52, 52,23,0,2,255,206,255,14,0,213,0,0,0,5,0,11, 0,0,7,55,23,7,23,7,63,1,23,7,23,7,50,116, 22,82,82,22,9,115,23,82,82,23,167,75,23,52,52,23, 167,75,23,52,52,23,0,1,255,236,0,3,1,104,2,88, 0,30,0,0,3,33,23,35,7,6,21,20,23,22,23,54, 51,50,23,22,21,7,6,35,34,39,38,53,38,55,54,55, 54,49,35,20,1,84,40,170,50,80,10,23,77,27,35,28, 14,5,3,10,37,17,22,189,1,4,21,118,17,140,2,88, 60,83,142,104,35,30,70,36,68,34,12,13,19,26,6,54, 146,21,23,123,144,19,0,1,255,236,0,3,1,104,3,22, 0,48,0,0,19,52,39,38,35,34,39,38,53,20,23,22, 23,50,31,1,22,21,35,23,51,48,7,6,21,6,23,22, 23,55,54,55,39,38,39,35,6,7,6,7,38,53,52,55, 54,63,1,51,39,190,70,14,59,50,12,5,55,10,52,45, 12,5,1,180,40,140,44,115,1,190,17,14,24,33,1,3, 11,26,15,23,19,6,6,110,7,22,99,2,170,40,2,88, 114,17,3,26,11,19,102,14,2,1,29,26,8,8,60,55, 155,119,147,54,5,1,2,7,33,23,33,5,6,36,11,14, 51,119,30,34,108,154,4,60,0,2,255,236,0,0,2,248, 2,88,0,9,0,40,0,0,1,23,53,51,23,35,17,39, 17,39,41,1,23,35,7,6,21,20,23,22,23,54,51,50, 23,22,21,7,6,35,34,39,38,53,38,55,54,55,54,49, 35,2,68,40,100,40,80,60,80,253,208,1,84,40,170,50, 80,10,23,77,27,35,28,14,5,3,10,37,17,22,189,1, 4,21,118,17,140,2,88,60,60,60,253,228,60,1,150,134, 60,83,142,104,35,30,70,36,68,34,12,13,19,26,6,54, 146,21,23,123,144,19,0,2,255,236,0,0,2,248,3,22, 0,25,0,56,0,0,1,21,39,35,23,17,23,17,51,39, 35,52,47,1,38,49,38,39,20,23,22,23,50,31,1,22, 5,33,23,35,7,6,21,20,23,22,23,54,51,50,23,22, 21,7,6,35,34,39,38,53,38,55,54,55,54,49,35,2, 108,40,40,80,60,80,40,70,70,35,62,41,2,55,10,52, 45,12,5,1,253,128,1,84,40,170,50,80,10,23,77,27, 35,28,14,5,3,10,37,17,22,189,1,4,21,118,17,140, 2,88,60,60,120,254,92,60,2,28,60,114,17,3,1,10, 45,102,14,2,1,29,26,8,8,60,83,142,104,35,30,70, 36,68,34,12,13,19,26,6,54,146,21,23,123,144,19,0, 0,1,0,120,255,71,1,34,255,221,0,9,0,0,23,22, 23,22,23,7,48,39,38,39,120,63,62,43,2,20,26,49, 55,35,6,78,54,2,10,39,64,17,0,1,255,136,0,0, 0,200,3,22,0,26,0,0,19,21,39,35,23,17,23,17, 51,39,35,52,39,38,35,34,39,38,53,20,23,22,23,50, 31,1,22,60,40,40,80,60,80,40,70,70,14,59,50,12, 5,55,10,52,45,12,5,1,2,88,60,60,120,254,92,60, 2,28,60,114,17,3,26,11,19,102,14,2,1,29,26,8, 0,2,255,236,255,106,2,48,2,88,0,13,0,54,0,0, 23,52,63,1,22,23,22,21,20,15,1,38,39,38,1,23, 33,21,54,55,54,55,22,21,20,7,6,7,6,35,34,39, 38,39,38,53,23,22,23,22,51,50,55,54,55,54,53,52, 39,6,7,39,53,35,39,200,35,21,33,9,2,35,21,34, 8,2,1,64,40,254,212,31,57,77,25,37,13,31,85,47, 51,50,45,119,34,12,20,12,110,53,63,29,27,75,34,18, 1,65,105,70,180,40,100,39,9,2,4,31,7,8,38,10, 1,3,32,7,2,195,60,240,1,34,45,60,83,81,48,45, 105,50,28,28,73,227,78,94,20,248,101,49,10,30,88,49, 59,11,11,71,39,70,240,60,0,2,255,236,255,106,2,19, 2,88,0,13,0,52,0,0,23,52,63,1,22,23,22,21, 20,15,1,38,39,38,55,54,55,54,55,39,38,53,6,7, 39,38,39,38,53,52,55,54,63,1,22,23,20,23,22,21, 20,7,6,7,6,7,39,17,35,39,33,23,33,100,35,21, 33,9,2,35,21,34,8,2,10,82,91,101,6,1,1,31, 32,20,37,13,4,9,18,46,30,67,20,1,5,130,96,104, 16,14,37,30,40,1,254,41,254,91,100,39,9,2,4,31, 7,8,38,10,1,3,32,7,182,23,82,93,75,25,2,1, 30,1,3,12,42,13,13,19,15,29,7,1,8,79,3,3, 23,24,127,114,84,28,4,2,51,1,233,60,60,0,0,3, 255,236,0,0,1,234,2,88,0,13,0,25,0,45,0,0, 55,52,63,1,22,23,22,21,20,15,1,38,39,38,19,33, 6,21,20,31,1,7,48,23,22,23,19,17,52,39,38,47, 1,55,38,39,38,53,52,55,54,55,35,39,33,23,140,35, 21,33,9,2,35,21,34,8,2,210,254,242,5,55,160,190, 68,133,49,60,98,139,153,20,190,111,38,37,8,11,27,30, 40,1,214,40,50,39,9,2,4,31,7,8,38,10,1,3, 32,7,1,241,8,7,21,25,69,110,29,65,76,1,154,253, 228,28,78,109,65,20,110,17,18,17,23,10,12,15,18,60, 60,0,0,3,0,20,0,0,2,118,2,88,0,5,0,43, 0,49,0,0,63,1,23,7,23,7,33,17,51,39,35,17, 39,17,35,21,7,39,15,1,6,7,38,47,1,6,7,6, 21,20,31,1,54,55,54,55,23,5,23,22,23,22,21,53, 3,17,38,39,38,49,65,115,23,82,82,23,1,114,80,40, 100,60,60,40,110,35,14,11,14,6,42,22,39,13,4,47, 25,57,39,27,5,80,254,232,20,159,142,89,60,82,144,24, 75,75,23,52,52,23,2,28,60,254,32,70,1,154,100,20, 120,84,21,13,5,50,11,2,3,34,11,12,53,12,2,2, 50,36,49,90,160,20,69,114,72,25,130,1,59,254,197,106, 56,8,0,2,0,20,255,110,1,124,2,88,0,37,0,90, 0,0,23,39,22,51,55,54,55,39,38,39,15,2,38,53, 52,51,23,22,21,20,7,54,55,52,39,38,39,23,22,23, 22,23,20,7,6,35,34,47,1,22,51,50,55,54,55,39, 38,39,23,6,7,6,35,34,39,38,53,52,55,51,22,23, 22,21,20,7,54,55,54,53,39,38,39,38,39,38,53,23, 22,31,1,22,21,20,7,6,7,6,35,38,128,8,6,7, 14,9,1,3,2,3,1,7,11,10,14,15,19,4,25,2, 30,38,3,5,2,38,40,3,31,10,12,13,92,30,25,34, 51,28,12,1,4,7,20,2,3,27,19,21,46,5,1,50, 25,55,38,27,15,99,9,2,4,12,76,90,14,94,20,8, 97,135,100,71,34,45,31,35,54,140,14,4,2,5,8,9, 2,3,7,6,2,2,13,17,4,10,18,7,7,5,33,13, 22,34,23,5,13,26,28,20,37,12,4,165,60,19,34,15, 17,18,18,17,14,21,14,12,49,6,6,63,8,7,48,36, 41,30,29,21,105,13,21,24,40,59,69,12,85,91,20,52, 72,96,77,63,105,64,31,13,9,1,0,1,0,100,255,110, 0,188,0,0,0,37,0,0,23,39,22,51,55,54,55,39, 38,39,15,2,38,53,52,51,23,22,21,20,7,54,55,52, 39,38,39,23,22,23,22,23,20,7,6,35,34,108,8,6, 7,14,9,1,3,2,3,1,7,11,10,14,15,19,4,25, 2,30,38,3,5,2,38,40,3,31,10,12,13,140,14,4, 2,5,8,9,2,3,7,6,2,2,13,17,4,10,18,7, 7,5,33,13,22,34,23,5,13,26,28,20,37,12,4,0, 0,2,0,100,255,110,1,42,0,50,0,37,0,75,0,0, 23,39,22,51,55,54,55,39,38,39,15,2,38,53,52,51, 23,22,21,20,7,54,55,52,39,38,39,23,22,23,22,23, 20,15,1,39,34,7,39,22,51,55,54,55,39,38,39,15, 2,38,53,52,51,23,22,21,20,7,54,55,52,39,38,39, 23,22,23,22,23,20,7,6,35,34,218,8,6,7,14,9, 1,3,2,3,1,7,11,10,14,15,19,4,25,2,30,38, 3,5,2,38,40,3,31,21,24,2,112,8,6,7,14,9, 1,3,2,3,1,7,11,10,14,15,19,4,25,2,30,38, 3,5,2,38,40,3,31,10,12,13,90,14,4,2,5,8, 9,2,3,7,6,2,2,13,17,4,10,18,7,7,5,33, 13,22,34,23,5,13,26,28,20,37,12,4,4,49,14,4, 2,5,8,9,2,3,7,6,2,2,13,17,4,10,18,7, 7,5,33,13,22,34,23,5,13,26,28,20,37,12,4,0, 0,2,0,22,0,0,1,162,2,88,0,15,0,35,0,0, 51,34,39,38,53,52,55,54,51,50,23,22,21,20,7,6, 39,50,55,54,53,52,39,38,39,38,35,34,7,6,21,20, 23,22,23,22,220,105,55,38,65,53,80,106,54,37,64,53, 80,84,42,26,13,29,76,16,18,85,41,24,10,26,71,21, 116,79,105,143,87,70,116,78,103,143,88,72,80,94,57,72, 50,43,100,20,4,95,55,69,44,41,102,27,7,0,0,1, 0,20,0,0,1,124,2,88,0,29,0,0,19,20,31,1, 22,21,20,7,34,39,38,53,52,55,54,51,50,31,1,6, 7,50,55,54,53,52,47,1,38,39,40,95,140,105,216,101, 33,10,36,19,25,61,11,1,2,11,104,34,12,73,111,104, 2,2,68,44,70,101,82,61,201,21,66,21,24,49,26,14, 62,33,29,26,93,34,43,47,60,86,94,93,0,1,0,19, 0,0,1,225,2,88,0,29,0,0,19,22,23,22,23,7, 38,39,38,49,39,22,23,55,54,55,52,39,38,37,48,39, 48,23,4,23,22,21,20,7,189,26,233,17,14,40,116,216, 28,60,120,133,63,83,1,6,37,254,255,50,116,1,21,18, 1,208,1,14,5,216,16,13,20,128,117,15,100,39,1,3, 10,31,8,9,57,82,80,37,99,87,6,5,97,1,0,1, 0,19,255,251,1,246,2,91,0,39,0,0,37,55,38,39, 38,35,7,6,7,6,7,21,22,23,22,51,50,55,54,55, 22,21,20,7,6,35,34,39,38,3,38,47,1,18,23,22, 51,50,55,54,1,243,3,2,87,23,27,26,50,24,5,3, 8,46,16,16,25,20,31,14,27,58,41,52,21,22,111,77, 20,17,20,46,115,57,62,41,40,67,228,93,211,56,15,4, 14,48,12,13,30,53,20,6,13,20,44,67,76,121,77,55, 10,51,1,22,72,85,20,254,134,152,74,34,57,0,0,3, 0,21,0,0,1,103,2,88,0,28,0,45,0,63,0,0, 19,38,53,52,55,54,55,54,51,50,23,22,21,20,7,6, 7,22,23,7,6,7,6,35,34,39,38,53,52,55,34,7, 6,21,20,23,22,51,50,55,54,55,39,38,39,38,39,50, 55,54,53,39,38,39,38,35,34,7,6,21,23,22,23,22, 73,52,14,29,63,31,32,77,52,40,13,14,25,51,1,4, 16,60,41,48,72,53,44,169,101,25,6,48,36,48,75,38, 18,1,4,11,43,31,43,98,27,7,4,14,55,27,32,74, 39,19,4,17,87,12,1,43,32,69,35,36,77,35,17,75, 57,63,34,27,28,16,33,71,38,79,47,32,73,60,65,69, 2,59,14,16,51,34,25,54,25,29,24,37,18,12,62,58, 15,17,25,50,23,11,54,26,29,24,57,8,1,0,0,2, 0,24,255,254,1,95,2,88,0,16,0,42,0,0,19,6, 21,20,23,22,23,22,23,38,39,53,54,55,38,39,38,55, 7,23,22,23,22,23,55,23,6,21,20,23,22,23,35,38, 39,38,39,38,53,52,55,54,55,225,134,10,15,35,27,57, 36,7,9,84,37,17,6,70,40,3,13,41,1,2,20,16, 113,61,4,2,22,60,67,20,16,96,122,53,76,1,244,74, 124,33,35,54,45,35,20,44,68,40,87,51,31,57,22,50, 20,27,58,42,2,1,10,54,18,103,68,134,9,4,8,53, 16,17,103,99,112,104,45,43,0,1,0,24,0,0,2,0, 2,89,0,44,0,0,19,38,39,55,54,51,50,23,22,23, 21,54,55,54,55,22,21,20,7,6,7,6,35,34,39,38, 39,38,53,23,22,23,22,51,50,55,54,55,54,53,52,39, 6,7,39,224,20,1,3,4,8,22,36,4,4,31,57,77, 25,37,13,31,85,47,51,50,45,119,34,12,20,12,110,53, 63,29,27,75,34,18,1,65,105,70,2,28,19,22,13,7, 49,6,6,240,1,34,45,60,83,81,48,45,105,50,28,28, 73,227,78,94,20,248,101,49,10,30,88,49,59,11,11,71, 39,70,0,2,0,20,0,2,1,94,2,86,0,18,0,32, 0,0,1,6,35,34,39,38,53,52,55,54,55,54,51,50, 23,17,47,2,17,53,38,39,7,6,7,6,21,20,23,22, 51,50,1,33,45,39,128,42,14,5,18,58,30,34,94,89, 3,52,5,32,53,27,55,35,21,69,21,25,46,1,18,9, 88,31,37,23,23,77,35,19,136,254,53,2,55,2,1,32, 135,56,1,4,14,53,32,30,54,14,4,0,0,2,0,21, 0,0,1,180,2,87,0,25,0,36,0,0,1,6,15,1, 22,21,20,7,6,7,39,17,38,39,55,54,51,23,22,31, 1,21,52,63,1,54,1,54,55,54,55,6,7,6,15,2, 1,180,7,44,6,16,111,86,116,38,21,1,3,3,8,13, 15,21,19,88,149,95,254,180,177,54,16,1,14,91,109,24, 8,2,1,199,90,18,2,34,35,99,84,66,27,50,1,224, 22,25,15,6,4,9,26,29,201,37,11,15,14,254,180,69, 124,37,35,12,7,8,22,12,11,0,0,1,0,20,0,0, 1,125,2,88,0,45,0,0,19,39,20,31,1,22,21,20, 7,6,7,54,53,52,39,38,39,38,35,34,7,6,21,20, 23,55,54,63,1,52,39,22,21,20,7,23,50,55,54,53, 52,39,38,47,1,38,40,20,109,128,53,87,11,12,14,6, 17,57,27,25,26,16,20,46,22,37,13,4,2,33,53,30, 149,58,24,1,10,108,143,73,2,68,20,96,95,105,47,37, 126,28,4,2,29,29,19,18,55,28,13,14,18,35,60,5, 1,9,27,15,5,4,24,44,51,21,40,110,46,48,9,7, 76,80,100,56,0,3,255,246,0,0,1,244,2,88,0,9, 0,15,0,28,0,0,19,22,23,22,23,7,48,39,38,39, 55,7,48,23,22,23,17,33,39,33,23,35,17,52,39,38, 47,1,37,198,63,62,43,2,20,26,49,55,142,250,63,129, 58,254,182,40,1,214,40,80,93,133,164,20,1,94,1,133, 6,78,54,2,10,39,64,17,86,145,26,61,83,1,154,60, 60,253,228,26,74,107,73,20,200,0,0,3,255,243,0,0, 1,241,2,88,0,5,0,18,0,28,0,0,1,7,48,23, 22,23,17,33,39,33,23,35,17,52,39,38,47,1,37,3, 22,23,22,23,7,48,39,38,39,1,101,250,63,129,58,254, 182,40,1,214,40,80,93,133,164,20,1,94,230,63,62,43, 2,20,26,49,55,1,189,145,26,61,83,1,154,60,60,253, 228,26,74,107,73,20,200,254,162,6,78,54,2,10,39,64, 17,0,0,1,0,20,0,20,1,104,1,91,0,14,0,0, 19,54,51,23,22,23,22,23,39,48,39,38,39,38,35,20, 29,27,40,130,77,27,10,40,15,53,110,38,44,1,84,7, 4,25,181,64,53,20,50,137,39,14,0,1,255,236,0,0, 1,235,3,35,0,52,0,0,17,54,55,50,23,22,21,7, 35,23,51,17,23,54,55,54,55,52,39,38,39,7,6,7, 6,7,21,22,23,22,51,50,55,22,21,20,7,6,7,6, 7,17,33,39,33,53,52,39,7,6,7,6,7,59,31,19, 7,5,1,140,40,100,37,150,56,49,1,8,17,54,21,36, 14,2,1,6,29,9,10,16,18,5,7,11,33,32,90,1, 55,41,254,242,59,24,55,57,2,3,2,178,62,1,25,16, 26,226,60,254,163,51,21,53,46,78,31,37,81,3,3,10, 30,4,3,18,39,13,3,9,20,17,20,16,25,19,19,25, 1,69,60,232,110,1,4,17,66,3,3,0,0,1,0,20, 0,93,1,104,1,164,0,14,0,0,55,22,51,55,54,55, 54,55,7,48,7,6,7,6,35,20,29,27,40,131,77,26, 10,40,15,53,110,38,44,100,7,4,25,183,62,53,20,50, 137,39,14,0,0,1,0,20,0,93,1,104,1,164,0,41, 0,0,55,7,22,51,50,55,54,55,7,48,7,6,7,6, 7,54,53,39,38,39,38,35,34,7,6,15,1,21,20,23, 22,51,50,55,54,53,52,39,22,23,7,6,80,40,29,27, 146,78,30,10,40,9,34,104,8,7,16,3,12,49,15,15, 17,13,18,7,5,37,9,10,16,12,20,4,24,1,4,13, 160,60,7,187,73,67,20,49,136,39,3,2,33,29,28,46, 17,5,6,8,17,20,4,45,14,4,9,14,29,12,15,18, 31,23,39,0,0,1,0,20,0,98,1,104,1,164,0,42, 0,0,55,50,55,54,53,52,39,23,6,7,35,38,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,7,22,51,55, 54,55,54,63,1,6,7,6,7,34,39,38,39,80,40,25, 12,17,2,3,33,21,34,9,2,38,10,12,53,19,7,46, 23,30,20,26,27,63,53,47,4,40,17,85,66,66,36,27, 28,15,203,46,22,23,26,13,25,35,6,6,31,7,7,47, 12,3,54,19,21,63,33,17,3,15,3,18,80,72,72,20, 143,100,78,1,27,27,51,0,0,1,0,20,0,0,0,80, 2,88,0,3,0,0,19,17,23,17,20,60,2,88,253,228, 60,2,28,0,0,1,0,19,0,0,1,145,2,89,0,27, 0,0,19,17,23,48,55,54,55,6,21,20,31,1,55,38, 53,54,55,39,6,15,1,17,38,39,15,1,21,22,41,60, 70,93,50,19,46,20,20,44,1,63,50,86,115,49,40,25, 10,5,3,2,28,254,222,71,85,106,26,99,75,105,82,35, 20,85,94,117,94,100,24,147,65,1,10,59,2,3,8,15, 20,0,0,2,0,20,0,200,1,124,1,214,0,17,0,35, 0,0,55,34,39,38,53,55,54,55,54,51,50,23,22,21, 20,15,1,6,39,34,7,6,21,20,23,22,51,50,55,54, 53,52,39,38,39,38,200,111,47,22,4,16,73,38,49,112, 47,21,61,31,39,49,70,25,9,31,28,45,71,25,8,5, 19,60,10,200,67,31,36,29,65,27,15,69,30,36,66,39, 15,15,225,52,18,20,41,26,23,52,17,20,16,15,50,9, 1,0,0,2,0,20,0,176,1,124,1,234,0,14,0,32, 0,0,19,52,55,54,51,23,22,23,20,7,6,35,34,39, 38,39,22,23,22,51,50,55,54,55,20,7,6,7,34,39, 38,39,38,130,44,12,14,24,44,2,44,12,14,45,18,7, 110,53,87,20,20,78,60,24,18,83,43,53,24,23,77,35, 22,1,164,48,16,5,4,14,51,48,15,4,36,14,87,195, 42,10,128,51,68,185,84,44,1,10,32,114,69,0,0,1, 0,0,0,0,2,216,2,22,0,53,0,0,55,52,39,38, 39,35,53,51,22,23,22,23,54,55,54,55,22,23,22,23, 51,17,51,21,35,17,35,53,35,6,7,6,35,34,53,52, 55,54,55,52,39,38,39,6,7,6,7,22,21,20,35,34, 53,52,126,47,16,13,50,85,35,36,11,5,19,61,43,29, 52,38,20,28,152,114,50,64,152,6,32,30,34,49,59,16, 16,52,18,12,46,49,20,9,6,86,40,250,64,108,38,17, 57,39,104,31,22,39,47,32,6,18,65,35,76,1,10,57, 254,35,211,81,64,66,57,72,74,20,13,45,78,27,11,21, 65,25,21,43,37,141,58,65,255,255,0,0,0,0,3,116, 2,22,16,38,4,141,0,0,16,7,4,185,2,216,0,0, 255,255,0,0,255,245,2,146,2,187,16,38,4,186,0,0, 16,7,4,211,0,174,0,0,255,255,0,0,255,245,2,144, 2,187,16,38,4,211,0,0,16,7,4,187,1,226,0,0, 255,255,0,0,255,97,2,68,2,219,16,38,4,212,0,0, 16,7,4,188,2,48,0,0,255,255,0,0,255,13,2,68, 2,219,16,38,4,212,0,0,16,7,4,189,2,48,0,0, 255,255,0,0,255,245,1,228,2,209,16,38,4,211,0,0, 16,7,4,190,1,244,0,0,255,255,0,0,0,0,2,216, 3,11,16,38,4,141,0,0,16,7,4,191,2,198,0,0, 0,3,0,0,255,240,2,68,2,218,0,33,0,42,0,52, 0,0,1,51,21,35,34,7,6,7,33,21,35,20,7,6, 7,22,21,20,15,1,6,35,34,39,38,39,38,39,38,39, 35,53,51,54,19,50,55,54,53,52,39,33,22,1,33,7, 49,20,23,33,54,55,54,1,32,168,168,96,54,25,7,1, 218,22,57,18,21,36,81,33,27,31,104,81,36,19,29,19, 5,1,32,32,43,251,58,32,18,18,254,232,62,1,30,254, 134,2,14,1,36,32,23,19,2,218,67,62,29,38,57,94, 84,28,17,46,66,98,40,13,7,96,44,50,76,159,40,28, 57,196,253,89,43,25,31,42,33,174,1,160,55,72,48,19, 62,51,255,255,0,0,0,0,2,230,2,254,16,38,4,141, 0,0,16,7,4,193,3,42,0,0,0,2,0,0,0,0, 2,24,2,22,0,34,0,50,0,0,55,52,55,54,51,50, 23,22,23,54,55,54,53,33,53,33,21,35,20,15,1,6, 7,22,23,35,38,39,6,7,6,35,34,39,38,55,20,23, 22,51,50,55,54,55,38,39,38,35,34,7,6,35,72,43, 56,70,81,33,15,28,12,3,254,64,2,22,22,42,19,3, 2,64,26,66,17,38,31,95,49,36,99,46,24,69,52,21, 27,34,57,64,17,29,59,52,32,67,24,9,200,77,40,24, 40,17,16,32,123,31,23,57,57,118,102,39,4,4,82,128, 103,41,37,26,14,59,32,46,50,21,9,24,25,31,35,25, 20,44,16,0,0,2,0,0,0,0,2,6,2,22,0,22, 0,30,0,0,1,35,17,35,53,6,35,34,39,38,39,54, 53,52,39,35,53,51,22,23,33,53,51,3,53,33,6,7, 22,51,50,2,6,50,64,45,67,90,94,54,22,39,39,32, 86,42,6,1,14,114,114,254,242,3,25,84,98,80,1,221, 254,35,92,42,65,38,39,58,93,91,43,57,84,93,177,254, 153,125,53,51,84,0,0,2,0,0,255,244,2,90,2,22, 0,11,0,33,0,0,37,53,35,34,7,6,21,20,23,22, 51,50,17,33,53,33,21,35,17,35,17,35,17,20,35,34, 39,38,53,52,55,54,59,1,1,40,134,47,16,5,47,43, 36,76,254,216,2,90,50,64,128,122,90,61,57,63,26,33, 144,97,157,43,13,16,47,47,43,1,176,57,57,254,35,1, 221,254,125,102,61,57,76,85,31,13,0,1,0,0,0,0, 2,162,2,22,0,46,0,0,1,35,17,35,53,6,35,34, 39,6,35,34,39,38,39,54,53,52,39,35,53,51,22,21, 20,7,22,23,22,51,54,53,52,39,51,22,21,20,7,22, 23,22,51,50,55,17,51,2,162,50,64,21,55,96,52,22, 40,93,82,39,18,62,42,62,103,65,40,8,78,42,22,46, 50,68,46,20,23,59,18,16,57,19,114,1,221,254,35,68, 18,42,16,60,29,33,59,96,79,45,57,67,117,91,61,22, 26,13,46,112,137,102,114,144,75,45,29,13,4,49,1,119, 0,2,0,0,255,243,2,18,2,22,0,39,0,49,0,0, 1,33,21,33,50,23,22,21,20,7,22,23,22,23,35,38, 39,6,35,34,39,38,53,52,55,54,51,50,23,54,53,52, 39,38,35,33,53,35,53,33,3,38,39,38,35,34,21,20, 51,50,2,18,254,78,1,44,73,22,7,76,34,6,4,8, 70,6,25,73,87,79,47,31,80,34,40,115,57,64,54,11, 13,254,176,32,2,18,192,31,70,19,18,80,83,86,1,221, 116,67,22,26,98,55,45,14,11,23,15,33,61,48,32,41, 71,26,11,70,46,51,48,11,2,173,57,254,76,40,13,4, 56,53,0,2,0,0,255,243,1,246,2,22,0,21,0,31, 0,0,1,35,17,20,7,6,35,34,39,38,53,35,52,55, 54,51,21,33,53,33,53,33,3,33,21,22,23,22,51,50, 53,52,1,246,24,100,41,55,93,57,44,56,26,22,72,1, 6,254,98,1,246,88,254,250,5,26,41,58,133,1,221,254, 245,152,50,21,94,73,91,69,23,21,56,175,57,254,223,41, 46,45,69,168,22,0,0,3,0,0,255,244,2,64,2,22, 0,39,0,48,0,59,0,0,1,35,21,33,34,7,6,21, 20,51,33,50,23,22,21,20,7,6,7,6,35,34,39,38, 39,38,53,52,55,38,53,52,55,54,51,33,53,33,53,33, 3,52,43,1,21,51,50,55,54,37,20,23,22,59,1,53, 35,34,7,6,2,64,50,254,144,25,10,2,45,1,18,64, 23,8,41,13,15,44,110,104,60,50,21,10,23,32,55,22, 29,1,42,254,50,2,64,104,94,45,49,64,20,6,254,170, 48,20,24,47,45,58,25,11,1,221,149,32,8,9,43,64, 24,28,69,36,11,4,12,12,10,58,26,29,47,26,35,48, 68,27,11,92,57,254,93,64,128,38,12,14,40,17,7,128, 33,14,0,1,0,0,0,0,1,220,2,22,0,25,0,0, 1,35,17,35,53,35,20,7,6,7,35,54,55,35,38,53, 52,51,50,23,21,51,53,33,53,33,1,220,50,64,210,23, 2,1,64,25,1,56,1,96,16,9,210,254,150,1,220,1, 221,254,35,215,71,127,10,7,157,58,8,14,92,1,56,205, 57,0,0,2,0,0,0,0,2,46,2,22,0,6,0,57, 0,0,1,33,22,51,50,55,54,23,20,7,6,7,23,35, 47,1,38,39,38,53,52,55,54,51,50,23,22,51,50,55, 54,53,52,39,38,39,38,35,34,7,6,35,34,47,1,55, 38,39,35,53,33,21,35,6,7,6,7,22,1,216,254,166, 37,137,101,38,21,33,70,23,26,56,130,32,66,118,13,1, 43,15,16,43,43,48,43,70,24,9,4,5,11,34,73,42, 51,58,26,19,13,58,122,39,51,62,2,46,22,27,10,32, 41,67,1,221,139,53,30,235,71,37,13,5,60,38,1,9, 48,5,5,33,14,5,32,16,43,16,15,11,10,14,13,43, 17,20,4,64,14,30,127,57,57,77,23,65,18,34,0,2, 0,3,0,0,1,245,2,22,0,33,0,38,0,0,1,35, 21,33,34,21,20,23,22,51,33,21,35,20,51,55,49,21, 35,34,53,34,39,38,53,52,55,38,39,38,53,35,53,33, 7,53,33,20,23,1,245,32,254,185,41,31,9,11,1,61, 232,168,64,71,227,75,36,18,63,19,16,5,62,1,242,96, 254,236,38,1,221,154,48,39,13,4,57,107,2,57,162,51, 27,34,68,28,12,62,21,12,57,154,97,44,53,0,0,1, 0,0,255,244,1,254,2,22,0,33,0,0,1,35,21,38, 35,32,7,23,22,51,50,55,54,55,54,59,1,20,7,6, 35,34,39,38,39,54,55,54,59,1,53,33,53,33,1,254, 22,45,43,254,240,28,103,59,52,44,37,2,34,25,18,10, 56,54,60,58,76,75,73,33,90,74,183,12,254,88,1,254, 1,221,207,3,85,94,47,34,2,34,25,60,46,48,52,52, 90,90,30,25,150,57,0,2,0,0,255,244,2,28,2,22, 0,22,0,38,0,0,1,35,21,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,51,53,35,53,33,1,20,23, 22,51,50,55,54,53,52,39,38,35,34,7,6,2,28,232, 62,71,77,68,66,108,108,66,68,77,71,62,244,2,28,254, 76,65,55,52,60,56,56,72,47,53,77,54,41,1,221,123, 57,63,72,76,48,50,50,48,76,72,63,57,123,57,254,138, 43,38,31,37,38,37,67,39,26,48,37,0,0,2,0,0, 255,242,1,252,2,22,0,9,0,52,0,0,37,38,39,38, 35,34,21,20,51,50,1,53,33,21,35,20,7,22,21,20, 7,6,35,34,53,52,55,54,51,50,23,22,23,54,53,52, 39,38,35,34,35,6,35,34,53,52,51,23,49,50,55,54, 53,1,83,52,92,17,14,64,113,70,254,229,1,252,50,50, 68,20,55,177,184,99,21,22,101,68,21,12,27,29,30,48, 6,5,130,15,76,71,144,59,30,16,57,27,8,2,26,28, 1,181,57,57,140,39,85,70,37,32,88,88,61,12,3,39, 13,14,20,36,37,35,38,15,45,46,14,77,41,47,0,2, 0,0,255,243,2,0,2,22,0,30,0,42,0,0,37,20, 7,6,35,34,39,38,53,35,52,55,54,51,21,51,53,33, 53,33,21,35,21,33,20,23,54,51,50,23,22,7,52,39, 38,35,34,7,22,51,50,55,54,1,221,80,31,38,148,60, 32,56,31,25,64,246,254,114,2,0,50,254,202,28,46,97, 84,44,26,63,55,14,15,77,23,27,76,56,19,6,82,63, 23,9,123,66,91,75,21,17,56,153,57,57,210,104,37,61, 44,26,35,34,10,3,47,40,24,7,0,1,0,0,255,253, 2,46,2,22,0,42,0,0,5,34,39,38,39,54,55,54, 51,50,23,55,38,39,33,53,33,21,35,22,23,22,23,7, 38,47,1,7,38,35,34,7,6,7,22,23,22,51,50,55, 20,7,6,1,71,140,106,28,21,16,69,45,55,48,41,54, 38,34,254,224,2,46,214,12,90,50,40,30,51,53,20,83, 23,59,70,32,9,4,32,78,57,57,122,84,83,52,3,116, 30,35,78,43,29,23,51,31,90,57,57,48,60,34,13,71, 24,41,16,102,36,49,13,16,64,39,29,124,100,51,32,0, 0,1,0,0,255,250,1,212,2,22,0,47,0,0,17,53, 33,21,35,20,7,6,7,22,21,20,15,1,6,35,34,39, 38,39,51,55,51,22,23,55,54,55,54,53,52,39,38,35, 34,35,6,35,34,53,52,51,23,49,50,55,54,53,1,212, 22,47,11,12,79,78,29,33,52,118,68,26,13,5,7,2, 81,113,47,79,19,2,48,24,28,5,5,130,15,76,71,144, 59,30,16,1,219,59,59,101,62,15,9,55,75,80,52,16, 16,75,28,35,8,76,2,3,12,63,10,4,53,29,14,15, 45,46,14,76,41,46,0,3,0,0,0,0,2,6,2,22, 0,7,0,12,0,30,0,0,37,53,33,20,7,22,51,50, 39,33,53,33,22,39,35,53,33,21,35,17,35,53,6,35, 34,39,38,39,54,53,52,1,148,254,236,22,84,98,80,234, 1,14,254,209,26,95,32,2,6,50,64,45,67,90,94,54, 22,39,175,105,40,44,84,225,140,50,50,57,57,254,35,92, 42,65,38,39,58,93,91,0,0,1,0,0,255,243,1,232, 2,22,0,31,0,0,1,35,21,33,22,51,50,55,54,59, 1,6,7,6,35,34,39,38,39,35,53,52,55,54,59,1, 21,51,53,33,53,33,1,232,22,254,204,24,132,42,50,52, 16,10,2,62,48,58,163,45,9,3,56,37,19,36,28,244, 254,110,1,232,1,221,234,198,49,48,70,48,36,177,36,42, 29,71,18,10,71,177,57,0,0,2,0,0,0,0,2,6, 2,22,0,9,0,26,0,0,55,22,51,50,55,17,33,22, 21,20,39,35,53,33,21,35,17,35,53,6,35,34,39,38, 39,54,52,106,84,98,80,36,254,209,36,105,32,2,6,50, 64,45,67,90,94,54,22,39,226,84,63,1,16,73,70,65, 208,57,57,254,35,122,42,65,38,39,58,154,0,1,0,0, 255,254,2,10,2,22,0,44,0,0,1,35,21,22,23,22, 21,20,7,6,35,53,48,23,50,55,54,53,52,39,38,39, 6,7,6,21,20,23,22,51,55,49,21,34,39,38,53,52, 55,54,55,53,35,53,33,2,10,224,98,41,63,87,44,55, 14,44,38,26,76,49,45,61,57,54,49,31,28,16,99,54, 35,65,37,102,234,2,10,1,221,103,60,41,65,76,81,35, 18,59,2,35,23,25,64,63,41,11,15,59,55,50,36,29, 18,2,59,53,34,47,76,65,37,64,103,57,0,1,0,0, 0,0,2,6,2,22,0,26,0,0,55,22,51,50,55,17, 51,21,35,17,35,53,6,35,34,39,38,39,54,52,39,35, 53,51,22,21,20,106,84,98,80,36,114,50,64,45,67,90, 94,54,22,39,39,32,86,46,226,84,63,1,73,57,254,35, 122,42,65,38,39,58,154,43,57,82,101,68,0,2,0,0, 255,245,1,234,2,22,0,34,0,48,0,0,1,35,21,33, 34,7,20,23,54,55,54,51,50,23,22,21,20,7,6,35, 34,39,38,39,38,53,52,55,54,59,1,53,33,53,33,3, 52,35,34,7,6,21,20,23,22,51,50,55,54,1,234,22, 254,234,84,1,61,27,78,31,33,83,39,19,75,37,44,134, 93,8,7,38,124,12,14,214,254,108,1,234,68,86,60,32, 16,68,14,15,66,23,8,1,221,175,70,58,62,63,22,9, 48,24,32,68,30,15,108,9,10,53,64,114,11,1,118,57, 254,80,48,27,13,16,38,10,2,33,11,0,0,3,0,0, 0,0,2,34,2,22,0,17,0,22,0,34,0,0,1,35, 17,35,53,6,35,34,39,54,55,38,39,38,39,35,53,33, 7,53,33,22,31,1,53,35,34,7,6,7,22,23,22,51, 50,2,34,50,64,57,61,130,110,25,83,54,38,6,40,44, 2,34,114,254,193,23,104,192,116,94,45,14,13,39,75,32, 32,57,1,221,254,35,64,28,132,86,38,22,64,9,90,57, 209,152,108,44,200,143,47,14,21,59,24,10,0,2,0,0, 255,247,1,244,2,22,0,13,0,63,0,0,1,38,35,34, 7,6,21,20,23,22,51,50,55,54,5,22,23,22,51,50, 55,54,53,52,39,6,7,6,35,34,39,38,53,52,55,54, 51,50,23,54,53,52,39,33,53,33,21,35,20,15,1,22, 21,20,7,6,35,34,39,38,39,38,55,54,1,72,46,68, 62,25,14,41,21,24,64,42,20,254,219,40,96,54,35,67, 42,26,26,30,87,23,22,101,34,13,81,33,41,94,55,28, 2,254,126,1,244,50,30,18,46,85,46,58,122,82,20,15, 2,8,6,1,19,54,25,12,17,30,17,8,27,13,132,35, 30,17,44,28,35,33,34,41,13,4,59,22,29,74,28,11, 47,28,78,11,22,57,57,102,62,33,76,63,89,40,21,82, 20,23,2,4,4,0,0,1,0,0,255,251,2,18,2,22, 0,28,0,0,1,17,51,21,35,17,35,53,35,6,7,6, 35,38,53,52,55,54,63,1,38,39,35,53,51,22,23,22, 23,1,160,114,50,64,224,12,11,18,39,55,53,4,4,10, 25,31,72,128,25,30,7,2,1,12,1,10,57,254,35,211, 122,35,58,1,63,69,72,6,5,40,159,66,57,69,146,34, 17,0,0,2,0,0,0,0,2,142,2,22,0,17,0,29, 0,0,33,38,39,38,39,54,53,52,39,35,53,33,21,35, 17,35,53,35,37,22,21,20,7,22,23,22,23,53,51,53, 1,119,160,106,36,39,52,54,32,2,142,50,64,165,254,239, 45,37,23,100,49,29,229,2,81,28,43,56,95,99,73,57, 57,254,35,239,238,83,90,80,70,32,38,18,4,234,181,0, 0,2,0,0,255,245,2,10,2,22,0,19,0,33,0,0, 1,35,17,20,7,6,35,34,39,38,53,52,55,54,59,1, 53,33,53,33,3,53,35,34,21,20,23,22,23,22,51,50, 55,54,2,10,50,61,39,50,83,85,81,54,23,30,228,254, 104,2,10,114,206,67,59,7,7,55,54,64,20,7,1,221, 254,169,76,42,27,73,69,86,71,29,13,147,57,254,125,126, 56,56,56,6,6,43,56,19,0,2,0,0,255,254,2,198, 2,22,0,58,0,67,0,0,23,34,39,38,53,52,55,54, 55,38,39,35,53,33,21,35,6,7,22,23,22,21,20,7, 6,35,39,49,53,22,51,50,55,54,53,52,39,38,39,6, 7,6,7,38,39,38,39,6,7,6,21,20,23,22,51,50, 55,21,7,1,33,22,23,22,23,54,55,54,238,89,56,43, 49,24,75,19,35,144,2,198,134,35,19,74,25,49,63,55, 68,54,17,17,55,49,38,67,24,23,34,57,22,19,53,54, 16,9,51,37,26,59,42,39,19,17,52,1,18,254,208,15, 68,35,34,56,50,39,2,59,46,61,59,49,24,50,25,106, 57,57,106,25,49,25,49,59,78,47,41,2,57,4,42,33, 36,51,52,19,9,48,29,11,4,10,53,15,14,21,48,33, 29,48,37,26,4,57,2,1,223,80,78,41,18,28,78,60, 0,3,255,254,255,250,2,198,2,22,0,15,0,74,0,83, 0,0,55,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,39,38,53,52,55,54,55,38,39,35,53,33, 21,35,6,7,22,23,22,21,20,7,6,35,39,49,53,22, 51,50,55,54,53,52,39,38,39,6,7,6,7,38,39,38, 39,6,7,6,21,20,23,22,51,50,55,21,7,1,33,22, 23,22,23,54,55,54,31,25,7,1,21,6,6,23,8,2, 22,5,213,89,56,43,49,24,75,19,35,144,2,198,134,35, 19,74,25,49,63,55,68,54,17,17,55,49,38,67,24,23, 34,57,22,19,53,54,16,9,51,37,26,59,42,39,19,17, 52,1,18,254,208,15,68,35,34,56,50,39,60,23,5,5, 22,9,2,22,6,5,23,8,2,62,59,46,61,59,49,24, 50,25,106,57,57,106,25,49,25,49,59,78,47,41,2,57, 4,42,33,36,51,52,19,9,48,29,11,4,10,53,15,14, 21,48,33,29,48,37,26,4,57,2,1,223,80,78,41,18, 28,78,60,0,0,1,0,0,0,0,1,242,2,22,0,39, 0,0,1,35,21,33,34,7,6,21,20,23,22,51,33,21, 35,20,23,22,51,55,49,21,35,34,39,38,39,38,39,38, 53,52,55,54,59,1,53,33,53,33,1,242,32,254,176,31, 11,4,38,8,10,1,70,232,105,29,34,64,50,138,68,41, 1,84,36,18,56,28,34,254,254,110,1,242,1,221,154,28, 9,10,40,10,2,57,87,21,6,4,57,67,40,60,4,49, 24,31,62,29,14,97,57,0,0,3,0,0,255,250,2,18, 2,22,0,4,0,20,0,42,0,0,1,33,22,23,51,7, 50,23,22,21,20,7,6,35,34,39,38,53,52,55,54,19, 21,35,17,35,53,35,6,7,6,35,38,53,52,55,54,63, 1,38,39,35,53,1,160,254,240,28,20,224,126,25,7,1, 21,6,6,23,8,2,22,5,246,50,64,224,12,11,18,39, 55,53,4,4,10,25,31,72,1,221,82,127,208,23,5,5, 22,9,2,22,6,5,23,8,2,1,218,57,254,35,211,122, 35,58,1,63,69,72,6,5,40,159,66,57,0,2,0,0, 255,251,2,18,2,22,0,4,0,26,0,0,1,33,22,23, 51,19,21,35,17,35,53,35,6,7,6,35,38,53,52,55, 54,63,1,38,39,35,53,1,160,254,240,28,20,224,114,50, 64,224,12,11,18,39,55,53,4,4,10,25,31,72,1,221, 82,127,1,10,57,254,35,211,122,35,58,1,63,69,72,6, 5,40,159,66,57,0,0,1,0,0,255,244,1,245,2,22, 0,29,0,0,55,20,23,22,51,50,53,17,33,53,33,21, 35,17,20,35,34,39,38,39,38,53,52,55,54,59,1,21, 35,34,97,57,47,60,126,254,125,1,245,50,172,75,42,49, 42,39,58,28,35,52,56,52,210,70,52,43,127,1,49,57, 57,254,189,166,20,23,61,58,54,73,33,16,57,0,0,1, 0,84,0,0,0,194,0,114,0,3,0,0,55,21,35,53, 194,110,114,114,114,0,0,1,0,0,0,194,0,156,2,22, 0,7,0,0,19,17,35,17,35,53,51,21,124,64,60,156, 1,221,254,229,1,27,57,57,0,1,0,0,0,0,1,42, 2,187,0,29,0,0,1,35,53,52,39,38,35,34,7,6, 29,1,51,21,35,17,35,17,35,53,51,53,52,55,54,51, 50,23,22,21,1,42,64,37,11,12,41,15,4,60,60,64, 50,50,53,33,38,62,38,24,2,40,26,45,15,4,39,12, 13,44,57,254,35,1,221,57,46,60,37,22,51,32,38,0, 0,1,255,132,0,0,0,174,2,187,0,29,0,0,19,35, 17,35,17,35,53,51,53,52,39,38,35,34,7,6,29,1, 35,53,52,55,54,51,50,23,22,29,1,51,174,50,64,60, 60,37,11,12,41,15,4,64,53,33,38,62,38,24,50,1, 221,254,35,1,221,57,44,45,15,4,39,12,13,26,26,61, 37,23,50,32,37,46,0,1,254,97,255,97,255,150,255,164, 0,9,0,0,7,6,35,34,39,53,22,51,50,55,106,96, 59,58,96,96,58,59,96,151,8,8,59,8,8,0,0,2, 254,98,255,13,255,148,255,174,0,9,0,19,0,0,7,21, 6,35,34,39,53,22,51,55,29,1,6,35,34,39,53,22, 51,55,108,95,63,61,87,44,104,158,95,63,61,87,44,104, 158,82,56,4,4,56,6,6,101,56,4,4,56,6,6,0, 0,1,254,126,2,36,255,214,2,209,0,12,0,0,3,38, 35,34,39,38,53,52,55,23,22,23,22,42,158,115,38,24, 9,71,38,103,97,19,2,36,107,19,7,9,24,6,1,14, 112,22,0,1,254,120,2,32,255,208,3,11,0,27,0,0, 3,38,35,7,49,34,53,52,51,50,23,22,23,38,39,38, 35,34,35,39,38,53,52,63,1,22,23,22,48,103,109,80, 36,70,97,93,23,17,16,57,77,105,6,6,27,22,32,22, 81,95,100,2,32,64,7,28,37,56,15,15,40,42,54,2, 5,18,24,10,3,1,70,73,0,1,254,100,2,60,255,188, 3,2,0,13,0,0,3,35,38,43,1,34,39,51,22,59, 1,50,23,22,68,16,22,52,154,95,5,22,22,48,150,74, 19,7,2,60,64,134,70,60,26,0,0,1,254,55,2,32, 255,188,2,254,0,30,0,0,3,53,34,39,38,53,52,55, 51,22,51,55,49,50,29,1,35,53,50,53,52,39,38,35, 34,7,6,21,20,51,21,246,100,58,53,1,12,15,142,127, 92,64,13,24,8,8,26,10,3,16,2,32,82,40,35,52, 6,7,73,3,41,111,36,17,27,12,4,27,7,8,19,35, 0,1,255,52,255,72,0,50,255,232,0,12,0,0,23,38, 35,6,35,34,53,52,51,53,51,21,22,50,83,87,24,26, 34,72,64,87,184,77,12,24,45,26,36,30,0,3,0,0, 255,250,2,6,2,22,0,22,0,30,0,46,0,0,1,35, 17,35,53,6,35,34,39,38,39,54,53,52,39,35,53,51, 22,23,33,53,51,3,53,33,6,7,22,51,50,5,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,2,6,50, 64,45,67,90,94,54,22,39,39,32,86,42,6,1,14,114, 114,254,242,3,25,84,98,80,254,239,25,7,1,21,6,6, 23,8,2,22,5,1,221,254,35,92,42,65,38,39,58,93, 91,43,57,84,93,177,254,153,125,53,51,84,52,23,5,5, 22,9,2,22,6,5,23,8,2,0,0,3,255,254,255,244, 2,90,2,22,0,11,0,33,0,49,0,0,37,53,35,34, 7,6,21,20,23,22,51,50,17,33,53,33,21,35,17,35, 17,35,17,20,35,34,39,38,53,52,55,54,59,1,5,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,1,40, 134,47,16,5,47,43,36,76,254,216,2,90,50,64,128,122, 90,61,57,63,26,33,144,254,247,25,7,1,21,6,6,23, 8,2,22,5,97,157,43,13,16,47,47,43,1,176,57,57, 254,35,1,221,254,125,102,61,57,76,85,31,13,251,23,5, 5,22,9,2,22,6,5,23,8,2,0,2,0,0,255,250, 1,220,2,22,0,25,0,41,0,0,1,35,17,35,53,35, 20,7,6,7,35,54,55,35,38,53,52,51,50,23,21,51, 53,33,53,33,3,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,1,220,50,64,210,23,2,1,64,25,1,56, 1,96,16,9,210,254,150,1,220,231,25,7,1,21,6,6, 22,9,2,22,5,1,221,254,35,215,71,127,10,7,157,58, 8,14,92,1,56,205,57,254,38,23,5,5,22,9,2,21, 6,6,23,8,2,0,0,1,0,0,0,0,1,212,2,22, 0,54,0,0,55,38,53,52,51,50,23,22,23,55,54,55, 54,53,52,39,38,35,34,7,6,35,34,53,52,51,50,23, 51,54,55,54,53,33,53,33,21,35,20,7,6,7,22,21, 20,7,23,35,39,6,35,34,39,23,35,48,17,40,27,62, 59,23,41,77,14,3,50,19,23,22,29,42,55,93,109,41, 62,27,37,28,32,254,132,1,212,32,49,11,12,79,73,72, 72,50,17,33,76,68,30,64,90,37,11,24,24,24,2,2, 11,50,9,11,48,19,8,8,13,47,57,9,6,37,44,46, 57,57,80,56,12,9,48,74,73,49,76,58,10,36,84,0, 0,3,0,0,255,245,1,234,2,22,0,34,0,48,0,64, 0,0,1,35,21,33,34,7,20,23,54,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,39,38,53,52,55,54,59, 1,53,33,53,33,3,52,35,34,7,6,21,20,23,22,51, 50,55,54,5,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,1,234,22,254,234,84,1,61,27,78,31,33,83, 39,19,75,37,44,134,93,8,7,38,124,12,14,214,254,108, 1,234,68,86,60,32,16,68,14,15,66,23,8,254,165,25, 7,1,21,6,6,23,8,2,22,5,1,221,175,70,58,62, 63,22,9,48,24,32,68,30,15,108,9,10,53,64,114,11, 1,118,57,254,80,48,27,13,16,38,10,2,33,11,28,23, 5,5,22,9,2,22,6,5,23,8,2,0,0,2,0,0, 255,242,2,56,2,34,0,13,0,29,0,0,17,52,55,54, 51,50,22,21,20,6,35,34,39,38,37,52,39,38,35,34, 7,6,21,20,23,22,51,50,55,54,90,78,114,118,168,168, 118,128,82,72,1,248,74,63,83,98,67,55,74,63,83,98, 67,55,1,10,128,81,71,162,118,118,162,89,79,112,98,67, 58,76,64,83,98,67,58,76,64,0,0,2,0,0,0,0, 1,218,2,36,0,24,0,41,0,0,33,35,34,39,38,61, 1,6,35,34,39,38,53,52,55,54,51,50,23,22,21,17, 20,23,22,3,52,39,38,35,34,15,1,6,21,20,23,22, 51,50,55,54,1,218,66,66,18,10,52,73,93,56,40,76, 50,63,93,56,40,47,22,133,63,28,34,75,34,11,5,63, 28,34,75,34,16,41,21,83,108,39,62,44,61,87,48,32, 62,44,61,254,249,64,35,17,1,123,69,28,13,52,24,16, 18,69,28,13,52,25,0,1,255,250,0,2,1,250,2,37, 0,37,0,0,37,39,6,7,6,35,34,39,38,53,52,51, 50,23,54,55,54,53,52,39,38,35,34,7,6,7,55,54, 51,50,23,22,21,20,7,6,7,23,1,172,117,51,91,22, 17,67,39,24,130,76,118,79,19,7,65,62,76,87,111,19, 15,6,102,121,104,74,93,89,20,23,144,2,120,26,11,3, 41,24,31,82,57,21,68,26,36,53,41,43,53,9,9,70, 58,47,60,110,103,55,13,8,150,0,0,1,255,254,0,0, 1,168,2,24,0,57,0,0,3,52,55,54,51,50,23,22, 51,50,55,54,53,52,39,38,35,34,7,53,54,51,50,23, 22,21,20,7,22,21,20,7,23,35,47,1,35,34,39,38, 53,52,51,50,23,54,53,52,39,38,35,34,6,35,34,7, 35,34,2,82,17,29,4,50,40,32,57,24,11,41,47,90, 107,59,66,100,174,49,17,36,28,58,84,100,40,92,6,112, 50,24,106,29,139,56,29,9,12,28,110,14,10,9,24,87, 1,36,42,5,1,10,11,35,15,18,35,23,27,35,69,30, 87,29,39,57,56,43,43,63,49,70,30,2,36,18,24,34, 42,24,63,45,17,6,18,1,0,2,0,0,0,0,1,164, 2,22,0,43,0,59,0,0,19,20,23,22,51,50,55,54, 53,52,47,1,38,35,53,50,23,22,21,20,7,22,21,20, 7,6,43,1,34,39,38,53,52,55,38,53,52,55,54,51, 21,6,7,6,23,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,64,65,37,44,66,43,37,62,32,4,4,95, 45,26,80,56,67,43,54,44,78,50,36,56,80,76,39,51, 72,23,7,24,66,26,30,77,32,13,68,25,29,75,32,15, 1,126,52,28,16,33,28,35,65,22,7,1,57,64,36,48, 78,50,41,67,77,44,29,57,41,52,67,41,50,78,89,39, 20,57,4,53,17,253,62,22,9,47,20,26,53,19,7,39, 17,0,0,1,255,248,0,0,1,160,2,22,0,25,0,0, 55,50,55,54,53,17,51,17,35,53,6,35,34,39,38,39, 54,53,52,39,51,22,21,20,7,22,211,65,47,29,64,64, 38,89,125,73,18,12,29,34,66,31,21,51,181,28,17,21, 1,31,253,234,160,36,69,17,20,96,59,72,77,68,86,70, 71,58,0,1,255,252,0,0,1,194,2,189,0,66,0,0, 1,50,23,22,21,20,35,39,49,34,7,6,21,20,23,22, 51,33,21,33,34,39,38,53,52,55,38,39,38,53,52,55, 54,55,38,53,52,55,54,51,50,23,21,39,49,34,21,20, 23,50,23,22,21,20,35,34,38,35,34,7,6,21,20,23, 22,51,55,1,82,53,30,14,79,196,45,18,6,51,14,16, 1,22,254,222,79,36,18,57,51,25,12,161,30,33,39,144, 32,38,13,14,54,114,56,64,29,13,38,18,102,40,72,44, 38,59,21,26,168,1,20,32,15,17,40,18,37,13,15,50, 14,4,57,56,28,37,71,32,19,48,24,25,96,36,6,4, 62,45,89,19,4,1,59,2,70,53,38,34,15,19,36,38, 29,26,35,48,18,6,22,0,0,1,0,0,0,0,1,233, 2,10,0,33,0,0,19,38,53,52,55,54,51,50,23,22, 21,20,7,6,7,6,35,53,50,55,54,55,54,53,52,39, 38,35,34,7,6,21,20,23,114,10,79,47,61,104,57,37, 9,38,162,121,159,155,114,114,32,9,60,32,41,78,30,14, 9,1,34,33,33,94,45,27,69,46,63,31,33,148,75,57, 57,65,62,102,28,27,70,36,19,59,26,33,26,32,0,1, 0,0,255,252,2,12,2,22,0,19,0,0,1,21,33,20, 23,22,59,1,21,35,34,39,38,53,35,52,55,54,51,21, 2,12,254,132,64,72,198,46,46,230,92,76,80,28,27,89, 1,190,57,184,70,80,59,104,86,203,89,28,28,88,0,1, 0,4,255,252,2,2,2,217,0,40,0,0,1,20,23,22, 23,21,33,20,23,22,23,22,51,21,6,35,34,39,38,53, 35,52,55,54,51,21,51,38,53,52,55,54,51,50,23,21, 38,35,34,7,6,1,105,106,20,23,254,142,33,27,58,81, 171,46,18,222,83,65,72,34,27,75,238,87,102,40,51,19, 11,18,17,73,31,14,2,61,86,65,13,10,52,138,54,43, 23,34,57,2,98,77,176,84,24,20,72,73,101,104,34,14, 1,57,3,50,22,0,0,1,254,143,2,62,255,101,2,207, 0,23,0,0,3,35,54,53,52,39,38,35,34,21,20,23, 35,38,53,52,55,54,51,50,31,2,20,183,40,12,34,8, 10,50,10,38,28,58,23,26,66,29,9,3,2,62,8,22, 34,11,3,48,20,10,38,32,48,19,8,38,17,20,32,0, 0,2,0,0,255,244,1,228,2,22,0,34,0,41,0,0, 37,6,7,6,35,34,47,1,52,55,54,55,38,39,35,53, 33,21,35,21,35,38,35,34,7,6,7,22,23,22,51,50, 55,54,51,39,53,33,22,23,22,23,1,228,2,63,48,57, 96,71,103,67,12,13,78,26,32,1,226,22,44,51,39,37, 27,116,24,7,44,79,48,36,60,63,15,78,254,214,12,52, 17,19,142,70,47,36,50,83,66,72,14,10,55,138,57,57, 227,5,5,24,68,7,36,69,48,48,169,166,83,55,19,9, 0,4,0,0,255,240,2,68,2,219,0,31,0,40,0,50, 0,59,0,0,1,35,20,7,6,7,22,21,20,15,1,6, 35,34,39,38,39,38,39,38,39,35,53,51,54,55,23,22, 23,22,23,51,35,38,39,38,35,34,7,6,7,5,33,7, 49,20,23,33,54,55,54,3,50,55,54,53,52,39,33,22, 2,68,22,57,18,21,36,81,33,27,31,104,81,36,19,29, 19,5,1,32,32,42,214,55,129,56,24,6,22,96,8,74, 54,60,98,53,24,7,1,122,254,134,2,14,1,36,32,23, 19,158,58,32,18,18,254,232,62,1,221,94,84,28,17,46, 66,98,40,13,7,96,44,50,76,159,40,28,57,192,4,3, 15,92,38,48,60,40,29,63,29,37,67,55,72,48,19,62, 51,254,139,43,25,31,42,33,174,0,0,5,0,0,255,248, 3,212,2,192,0,51,0,74,0,84,0,93,0,109,0,0, 1,35,53,52,35,34,7,38,35,34,7,6,7,33,21,35, 20,7,6,7,22,21,20,7,6,35,34,39,38,39,38,39, 38,39,35,53,51,54,55,54,51,50,23,22,23,54,51,50, 31,1,22,21,1,34,39,38,53,52,55,54,51,50,23,22, 29,1,20,23,35,34,39,38,61,1,6,37,33,20,7,20, 23,51,54,55,54,7,52,39,35,22,51,50,55,54,37,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,3,212, 64,57,117,67,43,50,62,43,18,7,1,151,19,55,13,15, 32,73,33,42,68,61,64,25,10,10,12,2,28,28,23,64, 43,51,40,51,5,9,89,105,54,36,13,8,252,195,73,46, 32,63,41,47,83,43,25,96,66,66,18,10,38,2,64,254, 188,1,11,251,35,19,9,43,15,241,54,110,55,26,11,254, 16,45,20,21,48,26,12,43,21,22,48,26,12,2,79,16, 40,99,58,74,32,35,57,83,71,17,13,41,55,87,34,15, 53,55,91,37,60,71,49,57,105,57,37,30,2,6,78,36, 17,14,15,254,115,49,34,43,64,38,24,54,31,41,233,108, 10,41,21,83,102,22,183,41,7,59,44,20,72,32,246,37, 28,149,42,19,239,40,20,9,34,16,19,39,20,10,34,16, 0,2,254,193,1,228,0,88,2,162,0,12,0,26,0,0, 3,50,31,1,20,7,6,35,34,39,38,53,54,23,6,7, 6,35,34,39,38,39,51,22,51,50,55,118,28,11,4,27, 8,8,27,11,3,1,246,8,22,54,118,119,55,24,7,92, 12,101,88,17,2,162,24,17,24,10,3,24,7,8,39,57, 39,27,67,67,29,37,80,80,0,1,255,72,1,253,255,198, 2,125,0,15,0,0,3,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,121,41,16,6,34,13,16,38,18,7, 37,12,2,125,37,13,15,38,18,7,34,13,16,44,16,5, 0,1,0,39,0,0,2,187,1,187,0,47,0,0,37,50, 55,54,61,1,51,21,51,53,51,17,35,53,35,21,20,7, 6,35,34,39,35,39,51,50,55,54,53,52,43,1,55,51, 50,23,22,23,20,21,20,7,6,39,23,22,23,22,1,46, 58,34,20,89,101,95,94,100,85,52,66,196,19,47,1,142, 41,11,2,59,111,1,158,68,25,8,2,70,42,33,2,1, 2,26,90,45,26,33,205,99,143,254,69,230,56,82,42,26, 163,72,40,9,11,56,68,67,23,27,6,5,82,31,20,5, 17,4,5,71,0,2,0,39,0,0,3,125,1,187,0,3, 0,51,0,0,33,35,17,51,1,50,55,54,61,1,51,21, 51,53,51,17,35,53,35,21,20,7,6,35,34,39,35,39, 51,50,55,54,53,52,43,1,55,51,50,23,22,23,20,21, 20,7,6,39,23,22,23,22,3,125,93,93,253,177,58,34, 20,89,101,95,94,100,85,52,66,196,19,47,1,142,41,11, 2,59,111,1,158,68,25,8,2,70,42,33,2,1,2,26, 1,187,254,159,45,26,33,205,99,143,254,69,230,56,82,42, 26,163,72,40,9,11,56,68,67,23,27,6,5,82,31,20, 5,17,4,5,71,0,0,1,0,40,255,254,1,241,1,189, 0,48,0,0,1,35,34,7,6,29,1,20,7,6,35,34, 39,52,55,38,53,52,55,54,59,1,7,35,34,7,6,59, 1,21,35,34,7,6,21,22,23,22,51,50,55,54,61,1, 52,55,54,59,1,1,241,34,20,9,3,84,45,56,205,1, 59,57,36,28,23,136,1,74,47,1,2,53,72,64,30,19, 10,2,55,18,21,39,28,30,68,5,6,83,1,117,19,6, 6,217,74,34,19,145,51,41,29,73,43,35,28,69,46,57, 73,31,15,20,44,15,6,17,21,25,223,84,7,1,0,1, 0,40,255,254,1,237,2,102,0,50,0,0,1,35,34,21, 3,20,7,6,35,34,39,52,63,2,38,53,52,55,54,59, 1,7,35,34,7,6,21,22,59,1,21,7,6,21,22,23, 22,51,50,51,54,55,54,53,17,52,55,54,59,1,1,237, 35,32,1,87,41,51,205,1,25,25,1,49,36,28,23,136, 1,74,32,13,5,1,51,72,64,65,2,51,24,26,2,3, 47,31,17,22,21,28,83,2,42,41,254,124,79,33,15,145, 42,28,21,1,33,69,43,35,28,69,33,11,13,52,59,1, 1,58,48,23,10,2,34,19,20,1,123,49,22,24,0,1, 0,40,255,245,1,203,2,118,0,61,0,0,1,52,39,38, 43,1,53,51,50,23,22,21,20,21,6,7,22,23,22,21, 20,7,6,7,6,39,38,53,17,52,55,54,55,23,22,23, 7,38,39,38,35,34,35,6,21,3,20,23,22,51,54,55, 52,47,1,43,1,39,51,50,55,54,1,102,37,10,11,83, 136,54,28,15,1,54,31,3,30,108,45,55,91,62,58,62, 60,106,46,84,58,52,6,26,40,59,3,3,129,1,53,27, 32,107,1,33,19,5,75,1,76,40,14,4,1,69,36,10, 3,69,48,26,30,2,2,90,18,15,3,29,57,86,33,13, 1,2,50,45,60,1,20,92,58,58,2,3,13,68,57,16, 23,35,4,128,254,219,43,22,12,2,64,44,17,6,72,36, 11,0,0,1,0,40,255,246,2,122,2,107,0,59,0,0, 23,34,39,38,53,17,52,55,54,51,50,23,22,21,3,35, 19,52,39,38,35,34,7,6,21,3,20,23,22,51,50,55, 54,55,39,38,43,1,39,51,50,53,38,43,1,53,51,50, 23,22,21,20,7,6,35,22,21,20,7,6,251,110,60,41, 110,73,98,123,93,97,1,94,1,64,69,84,120,47,22,1, 30,35,52,79,23,6,1,3,10,46,73,1,74,60,2,58, 83,136,56,27,14,35,22,14,80,100,48,10,58,39,56,1, 20,109,55,36,57,58,85,254,93,1,163,44,43,45,63,29, 40,254,232,27,26,30,44,12,14,26,39,70,62,51,69,51, 26,31,57,32,19,20,84,83,34,16,0,1,0,30,255,246, 3,48,1,187,0,64,0,0,1,7,21,35,53,7,39,55, 52,39,38,35,34,7,6,7,6,21,39,52,55,54,51,50, 23,22,23,22,29,1,63,1,51,21,55,38,53,52,51,50, 23,15,1,6,7,22,23,22,21,20,7,6,35,34,39,55, 22,51,50,55,54,53,52,39,38,2,115,139,95,231,65,183, 28,35,36,23,27,19,17,13,52,39,49,61,80,50,10,7, 13,54,1,95,112,6,56,67,3,3,7,10,18,36,52,45, 86,27,29,74,41,47,28,35,10,12,48,40,53,1,31,66, 221,184,134,64,84,18,66,83,32,24,39,27,7,82,16,44, 58,109,21,23,39,14,4,28,189,155,49,9,26,61,61,28, 18,15,7,30,55,53,57,77,32,10,71,41,42,5,23,37, 36,36,47,0,0,1,0,39,255,249,2,39,1,197,0,43, 0,0,1,50,23,22,23,7,38,35,34,7,22,23,22,51, 33,23,35,22,23,20,7,6,35,34,39,55,22,23,22,51, 50,55,52,39,38,35,7,39,55,38,53,54,55,54,1,3, 54,73,10,5,6,45,52,83,1,2,27,8,8,1,35,1, 174,82,1,109,40,50,112,92,72,7,32,45,49,102,1,39, 29,11,233,14,144,75,2,85,29,1,197,16,2,2,69,19, 41,33,12,3,56,30,82,93,29,11,70,69,14,19,30,73, 41,30,23,56,74,28,16,64,64,20,7,0,0,1,0,39, 0,0,2,71,1,187,0,33,0,0,1,53,51,17,35,53, 35,21,20,7,6,35,34,39,38,61,2,38,43,1,55,51, 50,31,1,21,20,51,50,61,1,51,21,1,234,93,93,88, 34,40,68,69,44,40,3,16,49,1,94,57,10,2,51,56, 90,1,57,130,254,69,237,15,41,34,41,39,34,51,117,17, 9,70,56,21,133,51,49,168,86,0,0,2,0,39,0,0, 2,39,1,197,0,3,0,36,0,0,33,35,17,51,37,50, 23,22,23,20,21,6,35,34,39,38,39,55,6,23,22,51, 50,55,54,55,39,38,39,38,35,34,7,6,7,53,54,2, 39,93,93,254,159,128,46,18,1,1,188,70,52,32,9,72, 5,26,30,39,72,19,5,1,3,5,18,27,50,46,33,5, 2,39,1,187,10,84,34,45,4,4,181,48,29,23,43,4, 32,36,68,18,21,30,26,19,31,11,2,2,73,10,0,1, 0,38,0,0,2,8,1,199,0,46,0,0,37,48,17,51, 17,35,53,6,7,6,35,34,39,38,53,52,55,38,39,38, 53,55,54,55,54,51,50,23,7,38,35,34,35,6,21,20, 59,1,23,35,34,7,6,23,22,55,54,1,171,93,93,40, 84,30,22,114,60,38,71,18,20,33,3,12,40,44,67,87, 36,1,34,38,4,4,109,62,106,1,105,62,1,1,112,57, 63,44,177,1,10,254,69,90,33,18,6,54,35,49,55,35, 5,18,27,37,25,38,20,24,12,71,12,1,45,54,67,52, 51,6,3,33,22,0,0,2,0,40,255,244,2,21,1,197, 0,15,0,60,0,0,1,50,31,1,21,20,7,6,35,34, 39,38,53,52,55,54,3,50,55,54,53,39,38,47,1,38, 39,38,39,38,53,55,54,55,50,23,7,38,35,34,21,20, 31,2,22,23,22,21,20,7,6,35,34,39,38,39,55,22, 23,22,1,223,35,14,5,30,12,13,36,13,4,31,11,211, 71,30,12,3,8,28,35,3,4,88,41,51,3,21,154,48, 46,2,39,55,83,86,32,2,102,30,10,102,44,56,85,73, 47,16,76,8,34,50,1,110,32,20,3,32,14,6,32,9, 11,35,15,5,254,206,38,15,20,19,21,15,14,1,1,24, 24,32,46,32,90,1,15,76,21,50,26,24,8,1,26,61, 20,22,104,37,16,46,28,26,53,15,27,39,0,1,0,39, 0,35,1,181,1,187,0,39,0,0,37,6,7,6,35,34, 39,38,39,35,55,51,50,55,54,55,39,38,43,1,55,51, 50,23,22,21,20,7,6,7,6,35,34,39,22,51,54,55, 54,55,1,181,20,39,58,50,103,50,18,13,47,1,152,48, 13,2,1,3,10,51,127,1,168,72,31,14,53,4,4,38, 52,15,3,13,97,43,52,47,2,96,17,17,27,77,28,55, 71,38,8,9,20,32,70,62,28,32,67,34,3,2,21,1, 86,2,33,29,11,0,0,2,0,40,255,254,2,39,1,193, 0,56,0,71,0,0,19,20,23,22,59,1,7,35,34,7, 6,21,23,22,51,50,55,6,35,34,39,52,55,54,55,23, 22,31,1,22,21,20,21,6,7,6,35,34,39,38,53,52, 53,54,55,34,39,38,53,52,55,54,59,1,7,35,34,5, 50,55,54,53,52,39,38,35,34,7,23,22,23,22,134,29, 10,11,60,1,32,31,19,7,3,18,113,114,52,18,13,132, 2,55,30,39,32,62,27,11,5,2,68,75,115,190,37,8, 1,72,18,27,43,40,24,28,115,1,61,50,1,28,37,11, 3,29,10,13,51,4,3,10,29,7,1,74,35,13,5,73, 31,13,12,23,54,105,2,122,85,43,23,1,3,14,74,44, 31,36,3,3,95,70,77,98,21,25,3,3,55,37,18,28, 54,51,33,19,69,141,44,12,13,47,21,7,73,21,37,11, 2,0,0,1,0,40,255,252,2,84,1,199,0,54,0,0, 55,34,39,38,53,52,55,54,51,50,23,22,23,22,21,55, 23,7,22,23,22,21,20,21,6,7,6,35,38,39,38,53, 52,55,54,55,54,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,39,21,7,6,175,69,40,26,36,35,59,96,87, 6,5,29,139,64,161,8,13,18,2,56,13,20,66,19,6, 23,16,8,3,60,65,37,37,16,6,37,12,15,17,20,16, 1,18,19,164,58,38,49,66,39,41,113,7,8,41,5,170, 68,163,8,32,41,28,2,2,85,20,5,2,65,20,25,32, 48,32,8,7,71,77,43,16,17,47,19,7,12,11,1,73, 12,10,0,1,0,39,255,255,2,32,1,194,0,66,0,0, 55,50,55,54,53,52,39,38,35,34,7,55,54,51,22,23, 54,63,1,22,23,54,53,51,20,7,6,35,22,23,7,6, 7,6,7,39,38,39,38,53,55,22,51,55,54,55,54,53, 52,39,38,35,34,7,6,7,21,20,7,6,35,34,39,38, 39,53,22,103,70,26,10,15,24,51,25,37,1,54,31,120, 23,14,54,32,20,21,19,98,50,16,4,56,3,3,14,74, 18,21,32,7,8,27,1,21,19,15,17,16,19,42,16,21, 22,20,16,2,49,49,73,14,7,25,42,36,65,86,35,41, 52,42,63,25,74,17,2,113,12,21,3,1,6,19,60,57, 37,13,46,88,52,111,30,8,1,2,1,2,6,1,74,21, 3,8,26,36,58,69,26,10,24,18,9,46,80,61,64,1, 3,22,73,33,0,1,0,40,0,0,2,47,1,195,0,37, 0,0,19,54,51,50,23,22,23,51,53,51,17,35,53,35, 22,7,6,7,6,35,34,39,38,39,55,22,23,22,51,50, 55,39,38,39,38,35,34,7,78,49,52,91,60,36,10,90, 93,93,90,2,14,45,115,12,12,38,53,41,8,34,8,47, 26,15,110,5,3,13,54,21,24,62,29,1,168,26,67,40, 52,152,254,69,213,9,39,116,12,1,29,23,11,75,17,21, 11,126,31,58,23,9,23,0,0,1,0,40,255,244,1,179, 1,194,0,38,0,0,55,50,55,54,55,23,6,7,6,35, 34,39,38,53,52,55,54,55,38,39,38,35,34,7,55,54, 51,22,23,22,21,6,7,6,7,6,7,23,22,246,57,55, 19,10,48,42,97,28,28,127,49,24,148,104,1,2,43,14, 25,42,55,1,37,64,127,34,10,2,37,31,87,87,2,3, 15,56,54,19,19,77,60,18,5,76,36,50,80,42,29,36, 36,6,2,26,83,12,3,67,20,28,48,25,20,26,25,59, 24,49,0,2,0,40,255,244,1,203,1,194,0,33,0,53, 0,0,55,52,55,54,55,38,53,54,55,54,55,50,23,7, 38,35,34,7,23,22,23,22,23,22,23,22,21,20,7,6, 35,34,39,38,23,50,55,54,53,39,38,39,38,39,7,6, 7,6,21,20,23,22,23,22,40,61,27,31,46,2,98,33, 39,53,38,1,34,58,72,3,3,11,90,8,4,91,32,12, 93,45,60,182,33,6,219,48,32,20,3,12,56,34,40,14, 11,15,40,7,10,21,35,143,67,39,17,5,25,34,83,27, 9,1,12,75,20,56,10,19,16,1,1,15,63,25,29,101, 40,19,109,21,60,37,23,27,21,34,16,13,11,4,5,10, 26,42,16,16,22,15,26,0,0,1,0,40,255,244,1,206, 1,197,0,44,0,0,37,50,55,54,53,39,38,47,1,38, 39,38,39,38,53,55,54,55,50,23,7,38,35,34,21,20, 31,2,22,23,22,21,20,7,6,35,34,39,38,39,55,22, 23,22,0,255,73,29,11,3,8,28,35,3,4,89,40,51, 3,21,154,47,47,2,39,55,83,86,32,2,102,30,10,102, 44,56,85,73,48,14,75,7,35,49,60,39,15,19,19,21, 15,14,1,1,24,24,32,46,32,90,1,15,76,21,50,26, 24,8,1,26,61,20,22,104,37,16,46,30,24,53,15,27, 39,0,0,1,0,39,255,243,1,187,1,194,0,43,0,0, 37,50,23,20,21,6,7,6,39,38,39,55,54,55,54,53, 52,35,34,7,55,54,51,22,23,22,21,6,7,6,7,6, 21,20,23,22,51,50,55,54,55,54,55,54,1,84,101,1, 2,70,58,65,204,3,3,19,123,106,90,43,54,1,37,65, 129,39,13,2,39,36,85,85,48,22,17,6,6,1,2,9, 58,14,167,75,2,3,47,28,26,2,1,159,26,67,33,28, 35,42,26,85,12,3,64,22,31,50,26,23,18,18,54,57, 19,9,1,9,20,63,14,4,0,3,0,39,255,240,2,47, 1,193,0,3,0,31,0,50,0,0,33,35,17,51,7,6, 7,6,35,34,39,53,22,51,54,55,39,38,47,1,34,35, 6,7,55,54,51,50,23,22,21,20,7,50,55,54,55,23, 6,15,1,38,39,38,53,19,51,3,20,23,22,2,47,93, 93,150,2,86,26,31,30,31,33,18,66,1,2,11,40,24, 1,2,9,29,1,29,34,62,41,39,159,58,51,8,6,24, 33,89,29,96,58,53,1,96,1,52,28,1,187,143,112,29, 9,19,66,16,3,82,26,43,9,1,2,17,69,15,42,40, 61,3,249,22,4,4,76,15,6,1,3,61,56,76,1,6, 254,248,74,34,18,0,0,1,0,39,255,254,1,209,1,187, 0,26,0,0,1,53,51,17,35,17,35,34,7,6,21,23, 22,51,50,55,15,1,39,38,39,38,53,52,55,54,51,1, 116,93,93,134,70,25,9,3,17,107,18,5,23,27,35,120, 31,9,63,47,57,1,97,90,254,69,1,26,59,21,27,31, 72,1,73,1,5,20,101,29,35,78,50,36,0,1,0,39, 0,0,2,4,1,207,0,55,0,0,1,20,7,6,7,38, 35,6,21,20,23,22,23,55,54,55,54,55,53,51,17,35, 53,6,7,6,35,34,39,38,53,52,55,54,51,55,54,53, 52,39,38,35,34,21,20,23,35,38,53,52,55,54,51,50, 23,22,1,90,88,21,25,15,31,29,47,27,28,37,40,45, 54,8,93,93,23,37,56,64,108,58,38,33,12,51,48,80, 33,13,15,44,38,81,42,59,32,37,68,38,39,1,76,95, 28,7,2,1,2,15,34,22,13,1,3,7,25,29,16,249, 254,69,112,16,17,23,59,38,55,32,8,2,3,12,60,44, 20,7,44,22,26,26,36,55,28,14,35,33,0,1,0,40, 255,249,1,168,1,197,0,41,0,0,19,20,23,22,59,1, 21,35,34,7,6,21,22,23,22,23,55,54,55,23,6,35, 34,39,38,53,52,55,34,39,38,53,52,55,54,51,50,23, 21,38,35,34,139,39,11,12,119,114,44,16,6,1,27,28, 41,31,52,49,55,76,107,105,57,39,65,11,22,32,79,42, 52,51,74,51,36,111,1,69,30,11,3,66,40,14,14,34, 22,23,2,3,12,56,71,73,60,40,57,60,41,19,27,40, 68,31,17,15,71,15,0,1,0,36,0,0,2,3,2,3, 0,54,0,0,55,20,23,22,51,50,55,54,55,39,51,17, 35,55,6,7,34,35,39,38,39,38,53,52,55,38,39,38, 39,38,53,52,55,54,53,52,39,23,22,21,20,7,6,15, 1,6,21,20,23,22,59,1,23,35,34,140,63,21,22,47, 67,55,8,1,93,93,1,102,77,4,3,49,98,35,13,81, 54,23,5,2,3,107,27,3,76,5,55,40,8,5,1,23, 21,20,106,1,105,63,170,39,14,5,37,30,13,251,254,69, 99,53,6,3,14,62,23,29,55,35,29,42,9,9,14,10, 64,26,8,25,9,9,25,15,12,43,19,15,10,14,3,4, 19,16,18,69,0,2,0,39,0,0,2,27,1,187,0,12, 0,35,0,0,37,38,39,38,35,34,21,22,23,55,54,55, 54,23,20,7,6,35,34,39,38,53,52,55,54,51,33,53, 51,17,35,17,35,31,1,22,1,14,2,30,4,22,77,1, 65,23,36,8,2,73,69,33,41,102,40,19,65,33,41,1, 12,93,93,129,13,1,12,216,47,16,4,62,55,2,3,10, 28,6,10,62,28,13,60,28,37,74,35,17,94,254,69,1, 23,17,1,23,0,1,0,39,0,0,1,187,1,187,0,35, 0,0,37,17,51,17,35,53,6,15,1,38,39,38,61,1, 47,1,38,43,1,55,51,50,23,22,29,1,20,23,22,51, 55,54,55,50,55,54,1,94,93,93,32,65,20,69,45,29, 1,5,5,9,31,1,75,40,20,9,43,13,15,31,13,15, 11,21,3,185,1,2,254,69,111,23,5,1,3,49,33,40, 146,12,6,2,70,38,18,21,152,37,14,5,3,2,5,15, 2,0,0,1,0,40,255,151,2,18,1,197,0,55,0,0, 19,20,23,22,51,37,23,7,50,23,22,21,6,7,6,35, 34,39,23,35,39,38,39,38,39,55,22,23,22,51,50,55, 54,55,54,55,39,38,39,7,39,55,38,53,54,55,54,51, 50,23,22,23,7,38,7,6,219,25,9,5,1,3,13,170, 14,41,50,4,97,41,50,22,4,131,115,89,47,23,14,35, 72,7,30,41,50,27,23,13,12,36,2,3,15,79,220,11, 151,67,2,91,21,25,76,54,5,4,6,28,68,81,1,68, 13,13,4,33,75,14,30,37,47,84,30,12,2,105,110,12, 16,5,27,55,13,17,23,7,4,7,21,38,22,44,20,46, 84,15,25,57,68,16,4,17,1,2,62,13,1,3,0,1, 0,38,0,88,1,251,1,197,0,32,0,0,55,50,55,54, 61,1,51,21,51,7,35,21,6,7,6,7,39,38,53,52, 55,54,51,50,23,21,38,39,34,21,20,21,22,230,56,23, 9,92,97,1,96,5,46,47,71,51,151,70,32,42,34,41, 16,47,60,4,159,50,20,24,137,71,71,36,51,34,36,2, 3,21,173,107,41,19,11,63,5,1,102,4,5,115,0,1, 0,40,0,46,1,245,1,215,0,45,0,0,1,50,23,22, 29,1,51,21,35,21,20,7,6,35,34,35,38,39,38,53, 52,53,54,51,53,52,39,38,39,7,6,7,6,21,20,23, 22,23,7,38,39,38,53,52,55,54,1,1,71,48,35,90, 89,43,16,19,2,2,42,20,21,3,70,49,13,15,24,31, 25,34,32,23,14,68,19,29,42,89,53,1,215,49,35,44, 49,73,22,49,19,6,2,24,22,38,3,3,77,51,40,14, 4,1,3,8,33,44,65,65,56,39,8,37,15,47,68,65, 133,61,36,0,0,1,0,40,0,108,1,54,1,196,0,26, 0,0,55,34,39,38,53,52,51,53,52,39,38,35,34,7, 53,54,51,50,29,1,51,7,35,21,20,7,6,133,64,15, 4,82,20,5,6,29,32,48,26,106,90,1,89,49,18,108, 53,13,15,81,48,55,7,2,12,73,9,96,87,72,30,39, 15,5,0,1,255,175,0,0,2,2,1,188,0,57,0,0, 1,20,7,6,7,35,34,39,38,49,34,7,23,22,23,22, 51,50,51,54,55,17,51,3,35,39,6,7,6,35,34,39, 38,53,52,55,54,59,1,50,55,54,53,52,39,38,35,34, 7,6,7,55,54,55,23,22,23,22,1,85,58,18,20,36, 4,4,30,27,1,3,7,24,37,49,3,2,94,58,94,1, 93,1,11,34,53,52,87,68,75,26,10,11,86,40,24,10, 65,23,27,82,72,49,9,1,92,80,78,70,40,61,1,54, 63,27,8,2,1,2,21,17,18,18,30,2,67,1,9,254, 69,85,11,16,25,51,56,82,25,13,5,26,11,13,41,15, 6,30,26,5,86,39,2,3,6,20,33,0,0,1,0,39, 0,55,1,167,1,207,0,51,0,0,1,20,7,6,7,38, 35,6,21,20,23,22,23,55,54,55,54,55,21,6,7,6, 35,34,39,38,53,52,55,54,51,55,54,53,52,39,38,35, 34,21,20,23,35,38,53,52,55,54,51,50,23,22,1,90, 88,21,25,15,31,29,47,27,28,37,40,45,54,8,23,37, 56,64,108,58,38,33,12,51,48,80,33,13,15,44,38,81, 42,59,32,37,68,38,39,1,76,95,28,7,2,1,2,15, 34,22,13,1,3,7,25,29,16,82,16,17,23,59,38,55, 32,8,2,3,12,60,44,20,7,44,22,26,26,36,55,28, 14,35,33,0,0,2,0,39,0,0,1,240,1,189,0,28, 0,36,0,0,55,34,39,38,53,52,55,54,55,23,22,23, 7,38,35,34,7,6,21,20,23,22,51,50,55,54,55,7, 6,19,53,51,17,35,53,35,53,240,90,60,51,69,52,68, 52,20,20,1,29,21,91,32,12,84,22,28,23,22,4,3, 1,46,130,93,93,172,10,75,63,83,99,64,47,3,2,3, 4,67,10,78,31,39,116,28,8,12,2,2,73,11,0,255, 178,254,69,196,69,0,0,1,0,40,0,0,2,82,1,192, 0,41,0,0,1,38,35,6,21,20,21,7,6,7,6,35, 38,39,38,53,52,55,54,51,50,23,7,38,35,6,7,6, 21,22,23,54,55,54,53,52,55,54,59,1,17,35,1,245, 21,46,61,1,11,84,21,28,95,54,39,61,28,38,17,52, 1,21,21,44,12,3,1,87,53,12,4,65,28,41,169,93, 1,97,31,3,148,10,11,63,114,20,5,1,86,62,79,135, 52,23,15,64,8,3,89,22,22,156,1,2,69,28,58,148, 38,16,254,69,0,1,0,39,0,0,1,202,1,187,0,29, 0,0,37,6,35,34,39,38,53,52,55,54,55,54,23,21, 38,35,34,7,6,21,20,51,50,55,54,55,53,51,17,35, 1,109,72,72,129,39,14,83,35,45,40,41,22,28,45,22, 28,108,39,42,30,8,93,93,114,51,100,36,46,94,38,17, 2,2,14,66,7,16,21,52,90,24,16,11,246,254,69,0, 0,2,0,39,0,0,2,1,1,202,0,3,0,55,0,0, 33,35,17,51,7,6,7,6,7,22,31,1,22,23,22,23, 35,38,39,38,39,38,43,1,39,51,50,55,54,55,39,38, 39,7,6,7,23,22,23,50,55,23,6,43,1,38,39,38, 53,52,55,54,51,50,23,22,2,1,93,93,135,2,129,21, 23,41,45,3,22,24,9,1,107,22,68,4,3,16,49,39, 1,128,65,34,17,1,3,13,68,28,40,3,3,9,28,17, 15,13,17,33,8,70,29,13,84,28,34,105,52,31,1,187, 143,123,29,4,2,7,42,3,20,46,16,8,95,20,1,1, 3,71,54,27,34,27,55,6,3,9,35,15,21,1,10,54, 10,1,48,21,27,75,22,8,65,38,0,2,0,39,0,0, 1,226,1,187,0,9,0,29,0,0,37,39,21,20,23,22, 51,50,55,54,55,53,51,17,35,53,6,15,1,38,39,38, 53,55,39,38,43,1,55,51,1,126,191,44,12,14,51,40, 27,10,93,93,37,66,35,68,50,37,1,1,4,15,38,1, 109,206,152,144,46,13,4,26,18,53,195,254,69,128,31,13, 3,1,47,36,42,148,11,7,70,0,0,1,0,39,0,0, 2,23,1,187,0,40,0,0,1,53,51,17,35,53,35,6, 7,6,35,48,23,22,59,1,21,35,34,47,1,35,55,51, 50,55,54,53,38,39,38,43,1,53,51,50,31,1,22,23, 21,1,186,93,93,115,8,38,35,49,24,5,18,123,191,38, 9,31,59,1,159,34,19,9,1,38,12,13,123,162,65,34, 12,4,2,1,45,142,254,69,235,12,29,20,94,10,70,41, 133,70,34,15,18,42,15,5,70,52,26,13,14,37,0,1, 0,38,255,217,1,219,1,204,0,62,0,0,37,52,39,38, 35,34,7,6,7,6,23,22,51,55,54,55,21,6,35,34, 39,38,39,55,54,55,38,53,52,23,22,23,7,38,39,15, 1,6,21,20,23,22,23,22,23,22,23,22,21,20,15,1, 6,35,34,39,38,61,1,22,23,55,54,1,127,75,25,29, 88,23,6,1,2,47,44,65,55,67,48,66,104,114,66,68, 3,2,15,107,19,144,67,35,1,20,63,37,12,28,37,53, 21,86,34,12,2,1,65,41,17,21,21,42,31,16,56,30, 44,209,47,17,5,66,17,21,66,42,41,3,9,33,76,33, 57,58,95,38,88,37,28,28,70,1,2,14,66,20,3,1, 3,9,25,21,6,8,3,13,53,17,21,6,6,76,19,8, 2,5,5,1,68,5,8,2,9,0,0,1,0,40,255,244, 1,207,1,188,0,40,0,0,37,20,7,6,35,34,39,38, 39,55,22,23,22,51,50,55,39,38,39,38,39,38,39,55, 54,55,54,51,50,51,50,23,21,35,34,7,20,23,22,23, 22,1,206,130,33,39,85,73,46,16,64,3,43,55,51,114, 2,3,14,75,100,27,47,2,2,9,29,42,92,4,4,73, 39,115,80,2,43,52,25,143,136,116,25,7,49,31,26,64, 15,35,47,62,19,37,22,29,16,28,55,28,34,21,31,1, 69,44,22,16,16,7,44,0,0,1,0,70,0,0,0,163, 1,187,0,3,0,0,51,35,17,51,163,93,93,1,187,0, 0,1,0,69,0,0,2,46,2,151,0,20,0,0,1,34, 7,6,21,17,35,19,52,55,54,51,50,51,22,23,22,23, 7,39,38,1,36,82,33,14,94,1,88,44,60,3,2,144, 86,48,13,80,18,65,2,76,72,32,41,254,69,1,187,138, 54,27,2,68,39,36,35,28,75,0,0,1,255,77,0,0, 0,163,2,159,0,22,0,0,51,35,19,52,39,38,39,7, 6,21,20,23,35,38,53,52,53,54,51,50,23,22,21,163, 94,1,39,29,39,23,30,11,73,26,5,119,79,70,68,1, 155,85,58,42,1,3,10,43,24,36,29,45,3,3,110,88, 85,87,0,1,254,80,254,225,255,131,255,158,0,31,0,0, 5,50,55,54,53,52,35,34,35,6,7,39,63,1,54,51, 50,23,22,23,22,21,20,7,6,35,34,35,38,39,55,22, 254,215,64,28,9,51,6,7,47,15,33,25,1,34,39,24, 22,70,13,2,83,33,40,7,7,82,55,37,40,228,21,7, 8,34,3,15,47,15,1,14,6,17,57,10,11,57,21,8, 5,50,49,46,0,1,254,79,254,206,255,235,255,160,0,29, 0,0,5,52,55,54,51,50,23,22,23,7,52,39,38,39, 35,6,7,22,51,50,51,54,53,23,6,7,39,38,39,38, 254,79,91,33,41,106,79,45,17,64,41,55,70,38,62,6, 1,51,4,4,56,30,11,77,40,75,16,3,208,77,26,9, 79,43,43,45,21,53,69,4,14,36,40,3,8,52,12,1, 3,12,55,12,0,1,254,189,254,243,255,243,0,1,0,21, 0,0,5,52,55,54,59,1,21,35,34,7,6,21,22,51, 50,55,23,6,35,34,39,38,254,189,53,32,39,135,98,47, 23,11,1,98,41,52,38,55,82,74,49,50,129,67,38,24, 67,30,14,16,76,37,67,36,40,41,0,1,254,144,1,187, 255,192,2,153,0,3,0,0,3,35,39,51,64,80,224,124, 1,187,222,0,0,1,254,117,1,187,255,191,2,168,0,6, 0,0,3,39,55,23,35,39,55,181,97,86,127,77,253,67, 2,9,130,29,237,149,59,0,0,2,255,102,0,0,0,163, 2,153,0,3,0,7,0,0,19,35,39,51,19,35,17,51, 150,80,224,124,193,93,93,1,187,222,253,103,1,187,0,2, 255,75,0,0,0,163,2,168,0,6,0,10,0,0,19,39, 55,23,35,39,55,1,35,17,51,33,97,86,127,77,253,67, 1,21,93,93,2,9,130,29,237,149,59,253,117,1,187,0, 0,4,0,30,255,246,3,67,2,162,0,15,0,32,0,78, 0,127,0,0,1,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,23,6,7,6,7,39,38,39,38,39,51,22, 51,50,51,54,55,19,6,7,6,35,34,39,38,39,55,22, 23,22,51,50,55,54,53,52,39,38,35,34,15,1,6,35, 34,47,1,49,53,22,51,50,63,1,54,51,50,23,22,23, 22,21,20,37,34,15,1,39,54,51,50,51,22,21,20,7, 22,23,22,21,20,21,6,7,6,35,34,39,38,39,55,31, 1,22,51,50,55,39,38,39,38,43,1,55,51,50,55,39, 38,47,1,38,1,199,30,11,3,28,7,8,27,11,3,26, 7,233,10,5,52,155,55,117,38,7,6,92,39,85,4,3, 99,26,250,2,66,42,61,72,47,26,9,36,4,28,37,32, 42,29,32,13,16,33,35,23,44,29,76,18,9,13,20,13, 37,11,66,35,63,18,17,48,28,38,253,181,46,52,10,4, 80,45,4,4,164,56,28,5,30,2,103,36,44,94,73,47, 10,81,6,11,57,70,82,2,2,10,34,5,5,83,1,82, 49,1,3,6,21,26,14,2,162,26,7,8,26,9,2,24, 7,8,27,10,2,57,24,13,93,3,3,14,79,22,15,80, 3,77,254,126,125,63,42,26,21,7,72,9,20,25,44,48, 76,43,34,45,41,88,48,2,1,67,3,18,119,51,4,13, 43,56,88,3,146,12,3,68,15,3,108,90,20,19,5,30, 45,3,2,95,28,10,67,43,29,47,14,17,87,62,25,38, 7,1,72,60,20,18,10,7,2,0,0,2,0,39,0,33, 1,154,1,154,0,15,0,32,0,0,55,52,55,54,51,22, 23,22,21,20,7,6,35,34,39,38,23,50,55,54,53,52, 39,38,35,7,6,7,6,21,20,23,22,39,66,51,71,89, 54,40,53,52,78,79,54,55,189,48,20,8,19,21,37,21, 24,16,21,11,23,220,88,57,44,2,69,51,67,77,55,55, 55,54,32,60,25,28,45,30,36,3,8,25,31,43,32,27, 55,0,0,2,0,40,255,239,1,166,1,199,0,31,0,49, 0,0,19,50,23,22,21,17,20,23,55,54,55,23,6,35, 34,39,38,61,1,7,6,7,39,38,39,38,53,52,55,54, 55,54,23,34,7,6,21,20,23,22,51,55,54,55,54,61, 1,52,39,38,194,87,42,23,36,13,11,15,1,44,35,34, 23,40,20,26,34,29,31,26,40,39,2,3,40,73,44,17, 5,15,18,28,21,10,9,16,34,8,1,199,49,26,36,254, 249,29,2,3,6,19,83,12,12,20,55,122,13,11,1,3, 7,26,38,61,62,43,3,3,42,70,44,15,16,28,22,23, 4,3,8,13,5,77,28,8,2,0,0,1,0,38,255,249, 1,140,1,197,0,35,0,0,19,50,23,22,21,6,7,23, 21,22,51,50,55,21,6,35,34,39,38,53,38,39,54,51, 50,23,54,53,52,39,38,35,34,7,39,54,184,103,62,46, 1,161,14,23,44,34,48,58,43,88,36,19,111,2,2,71, 59,45,83,54,30,34,50,54,1,69,1,197,56,41,62,130, 26,35,1,35,20,75,19,68,34,36,7,72,68,76,24,67, 49,27,14,16,66,20,0,1,0,39,255,246,1,143,1,200, 0,49,0,0,37,20,7,6,35,34,39,55,22,51,54,55, 54,53,39,38,35,34,7,55,23,22,31,1,54,55,54,53, 39,38,35,34,7,6,7,39,54,51,50,51,22,23,22,23, 7,6,7,6,7,22,1,143,77,46,58,90,89,45,66,59, 79,15,3,3,18,101,29,32,1,3,11,8,49,84,12,1, 3,14,87,21,30,27,2,27,80,44,2,2,107,43,19,1, 3,6,21,7,26,83,130,77,39,24,58,63,47,3,55,9, 10,20,47,5,71,1,1,2,2,4,41,4,5,20,40,10, 9,2,67,27,2,58,26,34,33,30,17,7,8,20,0,2, 0,29,255,249,1,172,1,197,0,27,0,40,0,0,23,34, 39,38,53,54,55,38,39,38,47,1,22,23,22,23,22,21, 55,23,7,22,23,22,21,20,7,6,55,39,38,39,38,35, 6,21,20,23,22,51,50,225,82,45,28,2,103,18,53,28, 46,1,44,58,29,40,35,128,65,134,8,29,35,58,36,7, 3,6,17,24,5,64,16,16,28,55,7,56,35,49,77,75, 17,34,15,8,94,14,24,15,33,29,3,114,63,111,3,42, 53,44,72,42,26,142,21,19,22,31,58,45,22,19,19,0, 0,1,0,39,255,255,1,185,1,187,0,39,0,0,33,35, 39,38,61,1,6,35,34,35,38,39,38,53,55,39,38,43, 1,55,51,50,23,22,29,1,20,23,22,51,50,55,53,51, 17,20,23,22,59,1,1,185,81,24,33,48,35,3,2,75, 38,21,1,1,4,16,22,1,66,40,20,9,39,11,12,21, 44,92,5,6,8,28,2,8,33,94,22,4,51,29,36,112, 15,11,70,38,17,22,131,35,12,3,27,231,254,164,5,13, 7,0,0,1,0,39,255,106,1,145,1,197,0,55,0,0, 19,50,23,21,38,39,7,6,7,20,51,50,55,23,39,35, 6,7,6,21,23,22,23,22,23,22,21,20,7,6,35,34, 35,39,50,55,54,53,38,47,1,38,39,38,53,54,55,54, 55,38,39,38,53,52,55,54,218,22,87,22,72,35,47,3, 133,31,6,1,92,31,37,4,1,3,7,27,27,47,136,113, 25,28,6,6,13,76,18,4,2,58,57,76,22,46,2,39, 24,22,73,18,4,125,24,1,197,20,66,7,9,2,14,41, 68,3,82,10,6,36,4,4,16,16,12,9,14,40,66,93, 18,4,63,31,7,10,36,16,14,24,14,28,46,54,29,20, 1,31,46,11,11,94,13,3,0,2,0,39,255,255,1,187, 1,197,0,38,0,52,0,0,55,20,23,22,51,50,51,54, 55,54,39,34,39,55,54,55,54,51,50,51,22,23,22,21, 20,21,6,7,6,35,38,39,38,39,55,54,55,23,6,55, 39,38,39,7,6,21,20,21,22,23,22,51,54,116,48,20, 24,2,3,98,25,8,2,183,8,2,7,28,36,65,5,6, 85,38,19,3,114,38,55,144,37,10,1,2,5,14,65,10, 246,3,10,52,22,38,1,58,33,25,6,154,47,20,9,3, 65,20,4,149,37,41,23,32,4,69,35,46,3,2,225,51, 17,2,94,26,32,59,39,20,46,26,106,26,42,1,2,12, 60,3,3,47,26,16,13,0,0,1,0,40,255,249,1,130, 1,192,0,21,0,0,23,34,39,38,53,52,63,1,23,7, 6,21,20,23,22,51,50,55,23,6,7,6,226,97,54,35, 56,228,62,233,23,50,19,22,50,53,62,16,28,55,7,61, 40,56,75,44,179,66,182,18,40,47,18,7,68,82,16,16, 31,0,0,2,0,39,255,249,1,163,1,184,0,3,0,30, 0,0,37,35,53,51,5,52,55,54,51,50,23,21,38,35, 34,7,6,7,23,22,23,22,51,50,55,23,6,35,34,39, 38,1,163,198,198,254,132,80,66,88,31,38,33,29,66,46, 32,1,3,14,61,31,39,27,31,1,39,40,102,67,55,188, 68,36,101,65,54,12,73,11,54,38,48,35,72,33,17,16, 78,14,76,64,0,2,255,156,1,79,0,82,2,2,0,15, 0,31,0,0,19,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,7,52,39,38,35,34,7,6,21,20,23,22, 51,50,55,54,82,43,23,26,52,26,12,44,21,25,39,26, 27,37,32,11,12,32,15,6,30,11,12,35,15,5,1,169, 49,27,14,44,21,25,52,25,12,26,24,39,35,15,5,31, 12,12,33,15,5,31,10,0,0,3,255,216,255,246,0,209, 2,35,0,29,0,43,0,58,0,0,55,20,7,6,35,34, 39,38,53,52,55,54,55,38,39,38,53,52,55,54,51,50, 23,22,21,20,7,22,23,22,3,52,39,38,35,34,7,6, 21,20,23,22,23,54,21,52,47,1,6,7,6,21,20,23, 22,51,50,55,54,209,61,27,34,73,34,17,40,33,11,13, 32,42,54,32,40,77,31,15,77,8,31,38,46,42,17,20, 49,23,9,42,10,32,76,38,38,9,31,38,49,13,16,52, 18,6,119,82,33,14,58,30,37,47,58,51,3,3,44,54, 44,68,38,22,62,28,36,70,77,3,49,62,1,2,58,22, 9,46,20,22,39,46,12,25,63,244,45,52,41,6,42,56, 36,61,16,5,48,16,0,1,0,0,255,253,1,202,2,25, 0,71,0,0,55,50,55,54,53,17,51,17,35,53,6,7, 6,35,34,39,38,53,52,55,54,55,54,55,54,53,52,47, 1,34,15,1,21,35,53,38,39,38,35,34,7,6,21,20, 31,1,21,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,6,7,6,21,20,23,22,225,81,59,47, 46,46,38,84,37,34,100,58,41,98,24,43,51,36,24,34, 19,23,15,10,45,1,3,16,32,38,12,3,28,29,65,26, 11,47,24,28,43,31,29,48,54,25,12,46,20,164,45,70, 42,40,49,39,50,1,96,253,238,81,50,24,10,59,42,58, 82,50,12,17,17,41,28,26,48,14,3,15,16,71,66,8, 5,25,38,10,12,36,12,5,41,49,20,25,57,29,15,29, 29,53,25,29,57,40,18,83,32,53,55,32,20,0,0,2, 0,0,255,253,2,53,2,25,0,3,0,75,0,0,33,35, 3,51,1,50,55,54,53,17,51,17,35,53,6,7,6,35, 34,39,38,53,52,55,54,55,54,55,54,53,52,47,1,34, 15,1,21,35,53,38,39,38,35,34,7,6,21,20,31,1, 21,34,39,38,53,52,55,54,51,50,23,54,51,50,23,22, 21,20,7,6,7,6,21,20,23,22,2,52,43,1,45,254, 172,81,59,47,46,46,38,84,37,34,100,58,41,98,24,43, 51,36,24,34,19,23,15,10,45,1,3,16,32,38,12,3, 28,29,65,26,11,47,24,28,43,31,29,48,54,25,12,46, 20,164,45,70,42,2,18,254,22,49,39,50,1,96,253,238, 81,50,24,10,59,42,58,82,50,12,17,17,41,28,26,48, 14,3,15,16,71,66,8,5,25,38,10,12,36,12,5,41, 49,20,25,57,29,15,29,29,53,25,29,57,40,18,83,32, 53,55,32,20,0,3,255,253,255,252,2,22,2,25,0,59, 0,75,0,91,0,0,1,20,7,23,35,39,55,54,53,52, 39,38,35,34,7,6,21,20,31,1,55,54,51,50,23,22, 23,55,54,51,50,23,22,21,20,7,6,7,39,38,47,1, 7,6,35,34,39,38,61,1,55,38,53,52,55,54,51,50, 23,22,3,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,39,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,1,246,43,75,56,75,37,17,82,61,82,88,53,49, 25,27,7,21,40,26,26,8,2,16,23,24,60,18,5,51, 20,15,19,13,12,14,15,22,26,42,26,16,3,85,79,71, 80,106,79,90,168,26,9,12,32,13,4,24,12,15,34,9, 2,125,23,11,13,33,10,3,29,9,10,34,9,2,1,14, 95,59,117,115,69,48,42,109,64,47,56,52,73,46,34,27, 15,35,25,8,7,19,20,77,23,28,94,27,7,1,1,4, 12,21,19,19,56,33,36,29,8,58,98,100,66,56,64,73, 254,234,61,25,9,60,18,17,46,31,15,65,14,13,44,34, 17,66,15,14,62,19,6,62,12,0,0,1,255,253,255,248, 2,40,2,25,0,66,0,0,23,34,39,38,53,54,55,38, 53,52,55,54,51,50,23,22,21,20,7,23,35,39,54,55, 54,53,52,39,38,35,34,7,6,21,20,31,1,55,23,7, 6,7,6,21,20,23,22,51,50,55,54,61,1,52,39,38, 39,7,39,55,23,7,22,21,20,7,6,204,89,48,29,6, 4,51,84,76,88,109,76,90,43,75,56,76,37,13,4,84, 59,82,83,62,62,16,16,66,30,49,27,2,9,52,29,36, 69,33,17,21,4,3,66,31,128,34,34,44,50,50,8,64, 40,52,53,7,23,84,98,66,58,64,75,134,78,70,116,119, 37,72,20,19,119,63,44,53,54,69,34,22,14,65,27,50, 37,4,18,18,64,34,20,50,26,32,11,19,21,5,1,67, 32,128,31,32,37,53,67,42,44,0,0,2,255,253,255,165, 1,246,2,25,0,60,0,76,0,0,37,20,7,6,7,23, 35,39,51,50,53,52,39,38,39,54,53,52,39,38,35,34, 7,6,21,20,31,1,54,51,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,38,53,52,55,54,51,50,23,22,21, 20,7,6,7,22,23,22,5,50,55,54,53,52,39,38,35, 34,7,6,21,20,23,22,1,246,50,9,9,52,55,70,11, 79,36,13,24,43,58,58,75,76,52,54,26,32,38,52,65, 40,25,58,32,40,64,40,27,12,80,82,67,89,95,70,72, 8,1,7,19,17,10,254,206,43,22,11,37,18,21,45,22, 10,39,17,134,56,39,7,5,118,160,63,43,18,5,3,37, 79,75,49,49,55,55,68,40,26,21,35,55,35,42,74,38, 20,54,35,43,16,38,48,81,103,67,56,63,62,95,26,35, 14,19,3,43,24,112,43,20,24,45,25,12,42,19,21,52, 24,11,0,1,255,237,0,0,1,237,2,18,0,27,0,0, 33,35,1,51,1,17,6,15,2,22,21,20,7,6,35,34, 39,38,53,52,55,54,55,54,55,54,55,1,237,63,254,63, 67,1,143,51,11,30,17,29,31,11,12,42,14,5,25,74, 51,11,13,53,14,1,122,254,178,1,151,18,9,23,15,14, 32,35,15,5,34,11,12,33,25,58,29,6,6,28,3,0, 0,1,255,255,255,251,1,170,2,25,0,69,0,0,37,20, 7,6,35,34,39,38,53,52,55,51,6,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,35,34,7,6,7,39,55, 54,51,50,55,54,53,52,39,38,39,38,35,34,7,6,21, 6,21,20,23,7,38,53,52,55,54,51,50,23,22,21,20, 7,6,7,22,1,170,77,46,59,187,45,13,80,58,30,34, 29,168,13,14,103,25,7,51,23,29,35,36,3,3,35,30, 36,38,75,23,7,31,10,11,5,6,36,16,6,1,13,47, 19,49,29,34,59,34,20,20,23,25,76,150,86,43,26,182, 53,66,122,112,19,78,69,68,233,18,1,68,18,23,66,28, 13,42,4,4,37,31,30,57,19,23,47,25,7,3,1,27, 10,11,6,6,24,13,26,29,33,56,33,19,56,33,39,42, 34,38,9,36,0,2,255,254,0,0,1,232,2,25,0,60, 0,76,0,0,37,34,7,6,7,21,35,53,6,35,34,39, 38,61,1,55,39,38,53,52,55,54,51,50,23,22,21,20, 7,20,7,39,54,55,52,39,38,39,38,35,34,7,6,21, 20,23,55,54,51,50,23,54,51,50,23,22,29,1,35,53, 38,7,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,40,26,15,4,1,45,34,32,71,20,6,3,23,24, 81,66,88,104,73,78,5,5,43,5,1,73,51,65,9,8, 78,57,56,23,24,29,24,44,30,29,44,53,29,16,46,13, 185,39,11,3,42,6,7,35,15,6,32,12,233,33,10,10, 180,53,18,75,22,27,21,12,37,45,39,103,66,55,70,73, 111,17,25,9,15,18,24,26,94,62,43,5,1,51,51,65, 48,30,18,18,31,29,41,22,26,190,176,52,149,52,14,14, 65,10,1,43,16,17,52,20,8,0,0,2,255,254,255,251, 1,209,2,25,0,56,0,72,0,0,33,35,17,6,35,34, 39,38,53,52,55,6,7,6,21,20,31,1,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,38,53,52, 55,54,51,50,23,50,23,6,21,20,23,22,51,50,55,54, 55,53,51,3,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,1,209,46,56,54,75,24,8,17,54,32,86,33, 36,22,28,29,71,36,19,49,33,40,71,40,24,19,85,83, 66,88,18,22,7,14,45,32,13,12,39,40,9,23,46,192, 44,16,18,49,23,9,46,16,19,62,13,3,1,130,66,55, 19,23,23,52,14,19,51,96,44,22,15,14,15,58,31,40, 65,43,28,57,35,44,31,30,28,91,107,66,53,5,6,76, 32,30,14,5,49,10,39,63,254,113,53,19,7,42,17,21, 59,19,7,59,12,0,0,2,255,254,255,251,1,207,2,27, 0,44,0,60,0,0,33,35,17,52,39,38,35,34,7,6, 21,20,23,22,23,54,55,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,38,53,52,55,54,51,50,23,22, 23,53,51,3,52,47,1,35,34,7,6,21,20,23,22,51, 50,55,54,1,207,45,73,54,72,82,52,38,30,5,25,29, 44,8,7,71,36,19,49,33,40,72,37,21,9,80,65,64, 94,59,53,62,23,45,193,45,23,8,45,22,11,40,17,21, 52,18,6,1,116,36,49,36,65,49,61,45,30,5,15,29, 7,1,58,31,40,65,43,28,60,33,43,26,30,36,92,101, 62,61,25,29,30,75,254,113,58,18,6,41,20,22,54,24, 10,51,18,0,0,2,0,1,255,248,1,205,2,25,0,30, 0,66,0,0,33,35,53,7,6,35,34,39,38,39,6,7, 6,35,34,39,38,53,52,63,1,38,53,52,55,54,51,50, 23,53,51,1,50,55,54,61,1,51,21,20,23,22,51,50, 63,1,17,38,39,38,35,34,7,6,21,20,23,22,51,54, 55,23,6,21,20,23,22,1,205,45,16,21,34,39,27,6, 14,17,12,25,31,57,37,23,23,6,85,95,59,81,85,93, 47,254,228,31,18,7,48,35,15,16,31,22,14,34,13,61, 71,97,55,37,24,24,28,8,43,36,97,36,13,34,21,21, 24,5,20,26,7,16,45,28,33,43,41,11,27,109,116,57, 35,73,66,254,22,33,13,13,81,80,36,17,7,37,37,1, 36,34,9,43,64,42,58,40,26,27,17,35,37,66,81,40, 17,6,0,2,255,254,255,255,2,11,2,27,0,45,0,61, 0,0,1,20,15,1,39,54,55,52,39,38,35,34,7,6, 21,20,23,22,23,54,55,54,51,50,23,22,21,20,7,6, 35,34,39,38,53,38,39,38,53,52,55,54,51,50,23,22, 3,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 2,11,14,32,48,41,2,50,63,107,76,62,65,56,14,17, 25,63,15,16,67,37,23,56,32,39,64,39,24,44,21,65, 91,80,85,113,77,79,191,39,17,21,44,23,11,39,18,21, 45,22,10,1,25,43,36,58,17,47,71,71,62,78,52,52, 68,80,45,11,7,60,14,3,54,32,40,68,37,22,51,32, 39,24,19,60,91,96,69,59,77,75,254,251,46,22,10,39, 18,21,44,23,10,39,18,0,0,1,255,255,255,246,1,246, 2,25,0,75,0,0,55,52,55,54,51,50,23,21,35,53, 38,35,34,7,6,21,20,23,22,23,20,7,6,35,34,39, 38,53,52,55,39,38,39,38,53,52,55,54,51,50,22,21, 20,7,39,54,55,52,39,38,35,34,7,6,21,20,23,22, 23,54,51,21,39,34,7,6,21,20,23,22,51,50,55,54, 55,38,186,56,24,29,58,37,46,15,36,44,13,3,29,5, 6,8,23,72,62,35,22,12,42,3,2,17,80,67,89,111, 156,12,49,9,3,73,62,83,89,56,42,21,6,16,35,48, 9,39,17,8,38,14,17,37,16,1,1,39,158,61,26,12, 28,229,195,15,34,9,11,32,11,1,2,40,20,60,60,37, 43,29,30,42,3,3,29,45,102,67,57,150,108,25,48,13, 30,34,92,62,53,65,49,64,42,25,7,9,35,46,1,49, 21,25,57,21,8,37,3,3,29,0,0,2,255,253,255,251, 1,232,2,63,0,67,0,83,0,0,1,52,39,38,35,55, 22,23,22,21,20,7,6,35,34,39,38,61,1,55,34,15, 1,6,21,20,31,1,55,54,51,50,23,22,21,20,7,23, 7,39,7,6,35,34,39,38,53,52,55,38,53,52,55,54, 51,50,23,22,23,34,21,20,23,22,51,50,55,54,3,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,1,188, 33,17,17,15,82,12,2,54,33,41,79,36,18,2,144,32, 6,1,33,36,22,29,28,67,39,24,5,117,22,118,26,35, 37,71,40,24,19,85,94,61,83,39,16,4,3,26,44,19, 24,52,24,10,174,43,15,18,47,23,10,44,16,20,55,16, 5,1,197,38,28,14,42,31,68,12,15,65,40,24,64,33, 41,12,4,106,37,9,10,44,22,15,14,15,55,34,41,19, 20,50,46,49,24,25,57,35,44,31,30,27,92,113,57,38, 16,4,13,40,48,23,10,45,19,254,214,54,19,6,41,18, 21,57,21,7,53,15,0,2,255,253,255,255,1,207,2,20, 0,38,0,54,0,0,19,50,23,53,51,17,35,53,52,39, 38,35,34,7,6,21,20,23,54,55,50,23,22,21,20,7, 6,35,34,39,38,53,52,55,38,53,52,55,54,19,52,39, 38,35,34,7,6,21,20,23,22,51,50,55,54,233,115,69, 46,46,73,48,62,90,57,41,100,18,61,65,38,22,54,32, 39,76,34,18,16,116,85,68,150,39,18,21,45,22,9,38, 16,20,47,23,10,2,20,65,63,254,237,93,73,41,27,52, 37,52,73,50,26,1,55,32,40,67,37,22,62,31,39,10, 45,58,101,93,52,42,254,107,45,22,10,41,18,20,45,22, 9,40,17,0,0,2,0,1,255,248,1,215,2,25,0,15, 0,31,0,0,1,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,5,20,23,22,51,50,55,54,53,52,39,38, 35,34,7,6,1,215,68,67,102,107,69,57,64,68,101,110, 69,58,254,89,63,50,72,93,56,41,63,52,75,94,53,38, 1,11,106,85,84,94,79,102,108,79,83,92,76,102,109,67, 54,86,63,81,103,68,57,87,62,0,0,1,255,254,0,0, 1,222,2,25,0,56,0,0,55,34,39,38,53,52,55,38, 39,38,53,52,55,54,51,50,23,22,21,20,7,39,55,54, 53,52,39,38,35,34,7,6,21,20,31,1,54,55,54,55, 54,55,23,6,21,20,23,22,51,50,55,53,51,17,35,53, 6,195,69,33,16,7,70,13,3,77,64,84,119,75,61,29, 45,11,11,57,57,91,72,55,49,27,31,29,31,9,14,6, 6,23,96,39,17,20,58,33,45,45,37,30,59,30,36,17, 21,27,68,13,14,100,66,56,83,68,95,72,41,18,21,31, 38,84,61,61,59,51,65,35,27,20,29,10,3,4,1,3, 46,20,68,42,21,10,65,128,254,241,67,37,0,2,0,1, 0,0,1,217,2,25,0,26,0,56,0,0,19,50,23,53, 51,17,35,53,6,7,6,35,34,39,38,53,52,55,52,55, 38,39,38,53,52,55,54,3,20,23,22,51,50,55,54,55, 53,52,39,38,35,34,7,6,21,20,31,1,54,51,50,51, 23,35,6,7,6,232,111,85,45,47,22,17,53,68,84,55, 51,5,6,69,13,4,88,62,26,58,35,42,61,55,43,9, 68,55,71,84,55,49,36,37,17,34,4,3,34,19,37,20, 10,2,25,89,82,253,238,76,25,12,37,48,44,57,22,18, 5,11,25,61,19,23,104,58,40,254,131,58,34,20,46,34, 32,215,37,47,37,50,46,63,53,24,13,20,34,8,34,15, 0,3,255,253,0,0,2,115,2,25,0,39,0,55,0,83, 0,0,19,50,23,53,51,21,54,55,54,51,50,23,22,21, 20,7,6,35,34,39,17,35,53,6,7,6,35,34,39,38, 53,52,55,38,39,38,53,52,55,54,5,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,20,23,22,51,50, 55,54,55,53,52,39,38,35,34,7,6,21,20,31,1,54, 51,23,35,6,7,6,227,111,85,46,2,35,13,12,50,29, 17,42,25,29,45,17,48,59,78,10,12,84,55,51,12,70, 13,4,86,62,1,129,33,13,5,31,10,12,31,15,6,17, 15,254,81,58,35,42,61,55,45,6,68,55,70,84,55,50, 36,37,20,40,33,19,16,21,30,2,25,89,82,40,25,12, 5,50,28,32,53,34,20,42,254,155,76,67,6,1,48,44, 57,25,31,23,63,19,23,102,58,42,48,38,13,15,44,16, 5,37,14,14,27,19,20,254,179,58,34,20,46,38,28,215, 37,47,37,50,45,64,53,24,13,20,34,4,14,23,0,2, 255,248,0,0,2,38,2,25,0,37,0,66,0,0,1,50, 23,53,51,17,35,53,6,7,6,35,34,39,38,53,52,55, 7,22,31,1,20,7,34,39,38,53,52,55,54,63,1,38, 53,52,55,54,3,20,23,22,51,50,55,54,55,53,52,39, 38,35,34,7,6,21,20,31,1,54,59,1,23,35,6,7, 6,1,52,107,89,46,48,22,17,53,68,84,55,51,4,92, 14,1,3,40,36,11,3,36,2,3,102,58,88,62,26,58, 35,42,61,55,43,9,68,55,71,85,51,52,36,37,26,17, 16,33,19,37,20,10,2,25,89,82,253,238,76,25,12,37, 48,44,57,20,7,56,16,6,13,39,7,31,8,9,43,24, 1,2,60,30,86,104,58,40,254,131,58,34,20,46,34,32, 215,37,47,37,48,46,65,53,24,13,20,34,8,34,15,0, 0,2,0,1,255,252,1,249,2,25,0,43,0,59,0,0, 19,34,7,6,21,20,31,1,54,51,50,23,22,21,20,7, 6,35,34,39,38,61,1,55,38,53,52,55,54,51,50,23, 22,21,20,7,23,35,39,54,53,52,39,38,3,50,55,54, 53,52,39,38,35,34,7,6,21,20,23,22,236,83,56,45, 26,32,38,52,65,40,26,57,33,41,64,40,27,13,81,81, 68,88,104,73,85,68,73,56,76,78,94,51,106,43,22,11, 40,16,20,45,22,10,37,19,1,234,63,51,64,40,26,21, 35,55,35,42,71,39,22,54,35,43,16,38,48,81,102,67, 57,63,73,135,70,87,113,118,86,69,134,57,30,254,63,43, 20,24,50,23,9,42,19,21,49,25,13,0,0,1,0,1, 255,255,2,52,2,20,0,66,0,0,5,35,39,54,55,54, 53,52,39,38,35,34,21,20,31,1,55,54,51,50,31,1, 54,55,50,23,22,23,21,35,53,38,35,34,7,21,35,53, 38,39,38,39,38,35,34,7,21,35,53,34,39,38,39,38, 53,52,55,54,51,50,23,22,21,20,7,6,7,2,52,55, 73,18,22,17,57,63,102,220,29,30,12,22,41,23,23,19, 40,23,56,26,7,8,51,12,28,27,12,51,9,9,2,3, 10,13,23,19,48,30,35,14,6,7,106,67,92,138,76,64, 20,18,13,1,115,13,47,40,37,90,66,74,185,33,32,26, 18,19,12,15,24,3,41,12,30,159,163,32,30,165,167,13, 5,1,2,5,30,163,156,59,22,19,20,28,129,61,38,96, 82,111,39,45,43,6,0,1,255,251,0,0,1,246,2,25, 0,64,0,0,19,34,7,6,21,20,23,22,23,54,55,54, 51,50,31,1,54,55,50,23,22,23,21,35,53,52,39,38, 35,34,15,1,21,35,53,38,47,1,38,35,34,15,1,21, 35,53,38,53,52,55,54,51,50,23,22,21,20,15,1,39, 54,53,52,39,38,238,102,54,36,33,7,7,10,39,17,17, 26,21,19,37,27,56,26,8,7,51,23,9,9,17,14,9, 51,9,8,5,12,12,16,15,10,49,89,91,63,90,106,79, 78,19,5,46,23,63,62,1,234,79,54,73,47,36,8,4, 29,16,8,12,15,26,1,41,12,30,159,163,18,10,4,15, 15,165,167,14,4,3,5,15,15,163,134,59,100,130,67,47, 71,70,105,44,48,10,18,50,31,80,61,61,0,2,255,253, 255,240,1,234,2,27,0,56,0,72,0,0,33,35,17,38, 35,34,7,6,21,20,31,1,7,47,1,34,15,1,20,23, 22,51,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 63,1,38,53,52,55,54,59,1,23,52,55,54,51,50,23, 22,31,1,53,51,3,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,1,234,45,81,101,43,21,9,42,65,22, 130,15,66,12,2,36,18,19,41,56,66,39,25,56,33,41, 70,39,24,1,9,100,79,21,26,8,4,52,33,44,77,71, 2,2,29,45,192,39,18,22,46,24,11,39,19,23,46,23, 10,1,115,119,34,15,18,38,18,33,37,58,1,51,19,41, 24,11,38,56,35,42,70,38,23,55,34,41,31,27,29,82, 88,22,6,1,75,41,25,63,2,2,28,86,254,97,48,25, 13,43,20,23,49,26,13,45,20,0,0,4,255,253,255,253, 1,213,2,25,0,24,0,32,0,44,0,57,0,0,19,50, 23,53,51,17,35,53,6,7,6,35,34,39,38,53,52,55, 54,55,38,53,52,55,54,1,53,52,39,38,35,34,7,23, 39,6,7,6,21,20,23,22,51,50,55,7,20,23,22,51, 50,63,1,39,7,6,7,6,227,111,85,46,46,32,21,70, 79,78,48,33,19,2,1,87,79,66,1,25,71,55,67,55, 31,95,135,22,7,29,36,18,18,14,15,38,62,28,33,78, 61,45,145,115,35,8,4,2,25,89,82,253,238,83,30,13, 43,52,35,46,33,36,3,2,33,78,100,67,55,254,162,184, 37,47,37,23,157,134,26,10,47,51,37,24,12,9,126,49, 21,10,48,51,140,76,22,27,14,0,0,2,255,254,0,0, 1,178,2,23,0,17,0,34,0,0,33,35,37,55,38,39, 38,53,52,55,54,51,50,23,22,23,53,51,3,17,38,35, 34,7,6,21,20,23,22,51,50,63,1,23,7,1,178,47, 254,150,110,129,7,1,74,64,84,78,52,14,23,47,47,54, 110,75,52,51,55,32,35,25,17,83,31,201,101,88,31,96, 7,7,100,56,49,44,12,33,84,254,26,1,57,131,48,50, 55,53,32,19,17,58,33,151,0,1,0,1,255,244,1,192, 2,25,0,64,0,0,19,34,7,6,21,20,31,1,54,55, 54,55,23,6,7,20,23,22,59,1,50,55,53,51,21,35, 53,6,35,34,35,7,5,7,37,55,38,39,38,39,38,61, 1,38,53,38,39,38,53,52,55,54,51,50,23,22,21,20, 7,39,54,53,52,39,38,211,83,46,30,22,25,6,18,20, 16,30,48,5,62,3,4,4,43,28,44,43,37,48,4,5, 71,1,17,19,254,158,120,33,10,1,2,3,2,27,15,42, 78,58,74,106,69,62,18,44,13,70,50,1,234,57,38,51, 29,19,15,10,25,18,10,33,45,35,55,8,1,39,112,234, 64,27,52,43,38,53,95,27,20,4,3,8,10,20,6,1, 11,10,32,58,91,57,43,70,64,88,28,70,22,52,24,86, 52,37,0,1,0,20,0,4,0,65,2,7,0,3,0,0, 55,35,3,51,64,43,1,45,4,2,3,0,0,1,254,38, 2,65,255,185,2,174,0,17,0,0,3,7,38,39,38,35, 34,7,6,7,39,54,55,54,51,50,23,22,71,32,61,80, 15,18,78,58,12,16,33,76,86,16,17,101,66,19,2,96, 31,55,7,1,42,8,13,34,66,8,1,45,13,0,0,1, 255,221,0,0,0,128,2,27,0,5,0,0,51,35,17,7, 39,55,128,46,93,24,163,1,204,62,34,107,0,2,254,223, 254,53,0,134,255,35,0,30,0,42,0,0,19,6,7,6, 35,34,39,38,39,7,6,35,34,39,38,53,52,55,54,51, 50,23,53,51,21,22,23,50,55,54,55,7,38,39,38,35, 34,7,6,21,20,51,50,134,7,39,27,22,41,60,6,2, 15,42,59,64,27,12,44,25,28,33,51,43,70,27,24,25, 18,4,209,28,40,7,7,30,16,7,58,51,254,163,26,26, 18,37,4,1,25,57,49,21,27,50,30,16,30,75,105,45, 2,25,18,9,27,28,8,2,30,12,13,49,0,1,255,44, 254,61,0,207,255,22,0,37,0,0,3,52,55,54,51,53, 51,21,39,34,15,1,21,20,23,22,51,50,55,54,53,22, 51,50,63,1,23,6,35,34,39,6,7,6,35,34,39,38, 212,48,26,33,43,42,37,16,7,38,13,14,52,40,30,18, 65,27,25,20,29,45,59,38,31,10,45,40,35,64,34,18, 254,163,51,27,14,23,60,3,34,22,7,33,15,5,52,39, 19,58,19,19,23,60,28,27,28,24,46,25,0,1,254,76, 255,0,255,56,255,226,0,33,0,0,5,20,23,22,51,54, 55,52,47,1,34,7,63,1,50,31,1,21,20,7,6,35, 34,39,38,53,52,55,54,55,23,34,7,6,254,118,41,16, 19,74,5,33,15,11,30,20,28,55,19,6,77,18,22,67, 34,18,42,31,15,37,5,38,40,157,37,17,7,5,35,28, 7,2,7,39,2,39,21,8,63,14,4,45,24,30,35,50, 35,7,17,41,46,0,0,2,255,250,255,247,1,82,2,25, 0,28,0,42,0,0,37,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,7,38,35,34,7,6,21,55,51, 50,23,22,7,52,39,38,35,15,1,22,23,22,51,50,55, 54,1,82,48,35,45,108,61,47,80,52,77,70,38,8,18, 39,31,64,69,43,47,62,1,96,67,68,49,61,61,63,31, 29,21,129,7,7,49,22,10,131,63,44,33,103,78,102,146, 71,46,47,10,38,25,75,54,62,64,5,56,55,68,54,39, 40,1,3,218,10,1,52,22,0,2,0,1,255,199,1,244, 2,25,0,72,0,88,0,0,19,50,23,22,21,20,7,22, 23,20,7,22,23,20,7,6,35,23,35,39,22,51,50,55, 54,53,52,39,54,55,54,53,52,39,38,39,34,7,55,54, 53,52,39,38,35,34,7,6,21,20,31,1,54,51,50,23, 22,21,20,7,6,35,34,39,38,61,1,55,38,53,52,55, 54,19,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,238,108,70,61,12,33,2,30,26,4,35,13,16,53,52, 88,31,35,33,10,2,57,51,5,1,28,6,6,22,6,17, 17,73,53,66,76,52,54,26,32,38,52,65,40,26,57,33, 41,64,40,27,13,81,81,68,50,43,22,11,40,16,20,45, 22,10,37,19,2,25,71,61,88,14,18,21,42,42,21,24, 37,49,19,7,80,132,17,27,6,6,35,27,13,42,4,5, 22,12,2,1,5,19,23,20,84,52,37,55,55,68,40,26, 21,35,55,35,42,71,39,22,54,35,43,16,38,48,81,102, 67,57,254,16,43,20,24,50,23,9,42,19,21,49,25,13, 0,2,0,18,255,251,1,181,2,25,0,15,0,31,0,0, 1,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 7,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 1,181,62,62,88,85,62,60,60,62,85,86,63,63,34,53, 54,72,69,51,52,50,49,73,73,53,53,1,14,115,80,80, 81,80,114,112,78,77,77,78,112,91,65,65,63,64,94,95, 67,68,68,67,0,2,0,25,255,236,1,101,2,47,0,30, 0,46,0,0,19,52,55,54,51,50,23,22,21,20,7,6, 35,34,39,22,23,22,23,22,23,7,38,39,38,39,38,39, 38,39,38,37,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,25,72,42,55,80,49,34,60,41,55,60,49,6, 40,53,93,17,24,34,63,60,18,9,71,32,1,1,11,1, 22,52,27,32,63,32,18,50,29,34,59,34,18,1,127,101, 48,27,60,41,54,84,50,35,44,38,60,80,60,12,14,35, 35,54,17,12,83,114,3,3,44,53,63,32,17,51,27,34, 59,34,20,51,28,0,0,2,0,24,255,236,1,105,2,47, 0,31,0,47,0,0,1,20,7,6,7,6,7,6,7,6, 7,39,54,55,54,55,54,55,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,7,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,1,105,91,12,12,27,77,3,2,17, 24,27,18,72,72,45,13,7,27,36,37,85,51,36,69,45, 56,100,44,23,47,53,30,37,68,35,20,53,32,38,61,36, 23,1,127,138,119,15,13,33,54,2,2,12,15,40,7,50, 59,85,24,22,14,14,63,44,58,79,46,30,78,42,41,65, 36,21,55,30,37,62,37,23,52,32,0,1,255,244,0,0, 2,7,2,47,0,52,0,0,33,35,17,52,39,38,35,34, 7,6,21,17,35,17,38,39,38,35,34,7,6,21,20,51, 50,55,52,39,55,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,23,54,51,50,23,22,23,2,7,46, 44,25,29,45,30,16,45,11,9,31,44,59,33,20,48,37, 5,37,10,70,37,18,21,84,15,2,67,39,54,63,45,2, 2,46,67,84,39,11,12,1,183,40,24,14,33,19,21,254, 68,1,188,21,12,34,69,40,45,118,37,22,19,40,25,53, 49,24,12,114,19,22,119,55,32,47,2,2,55,61,17,45, 0,2,0,0,255,247,1,250,2,51,0,34,0,50,0,0, 1,6,7,6,7,22,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,63,1,38,39,38,39,55,22,23,54,55,54, 55,54,55,3,52,39,38,39,6,7,6,21,20,23,22,51, 50,55,54,1,250,45,109,18,26,19,41,56,47,47,69,87, 47,31,58,11,11,34,129,63,10,8,52,77,130,91,67,4, 5,12,9,73,101,7,7,17,39,56,52,27,33,67,32,16, 2,28,94,83,15,18,3,47,62,62,76,44,45,67,43,57, 66,60,11,9,26,85,93,13,14,25,141,65,44,104,7,7, 19,28,254,107,69,71,5,5,10,35,56,55,65,32,17,56, 29,0,0,3,255,249,0,0,2,12,2,45,0,47,0,59, 0,71,0,0,37,7,38,47,2,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,55,38,39,38,39,55,22,23,39, 38,53,52,55,54,51,50,23,22,21,20,7,6,7,22,23, 22,23,22,39,52,39,38,35,34,7,6,21,20,23,54,7, 52,39,6,21,20,23,22,51,50,55,54,2,12,27,49,26, 49,33,26,12,61,34,43,78,39,23,45,14,31,87,83,11, 16,35,66,100,19,19,58,37,46,72,40,24,48,11,38,96, 43,11,11,25,138,49,18,21,52,26,13,62,117,51,67,117, 45,20,24,74,17,4,162,34,51,16,28,16,46,30,25,78, 38,22,60,34,44,50,48,14,21,27,74,11,15,32,85,33, 30,37,38,72,42,26,58,36,44,61,44,11,20,34,35,9, 11,24,254,60,22,7,46,23,26,72,46,36,192,65,52,52, 69,56,25,12,64,15,0,1,0,0,255,255,1,222,2,56, 0,57,0,0,1,20,7,6,7,6,35,53,50,55,54,55, 54,53,52,39,38,35,34,7,6,21,20,31,1,22,31,2, 20,7,6,35,34,39,38,39,55,23,22,51,50,55,54,53, 52,39,38,39,38,53,52,55,54,51,50,23,22,1,222,184, 74,120,57,43,143,127,127,28,6,54,40,47,56,27,13,27, 54,31,3,1,1,56,32,36,58,47,32,6,39,26,35,41, 43,25,12,23,55,11,33,66,36,44,99,54,36,1,119,173, 117,46,26,13,49,78,79,111,26,26,69,48,35,36,16,21, 21,15,27,23,31,13,12,53,31,17,41,28,17,27,32,32, 30,14,17,20,14,27,8,25,37,67,35,20,75,50,0,2, 0,48,255,248,1,229,2,53,0,49,0,64,0,0,19,52, 55,54,51,50,23,22,21,20,7,6,7,6,15,1,53,50, 55,54,55,54,55,54,53,52,39,38,35,34,7,6,21,20, 31,1,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 23,52,47,1,34,15,1,21,20,23,22,51,50,55,54,48, 70,63,81,102,67,54,134,25,32,60,101,85,16,67,90,47, 107,36,24,67,46,61,73,49,44,21,2,7,24,63,60,27, 12,46,24,29,78,50,36,215,31,18,35,14,5,30,12,12, 35,11,3,1,105,84,63,57,80,65,86,138,92,17,18,36, 25,16,46,19,25,27,58,66,46,58,94,53,35,52,47,59, 29,34,4,28,61,48,22,27,52,29,16,66,48,18,38,12, 3,29,18,3,31,15,6,31,9,0,0,1,0,56,0,0, 1,166,2,53,0,5,0,0,1,33,17,35,17,33,1,166, 254,192,46,1,110,2,11,253,245,2,53,0,0,1,0,47, 255,248,1,123,2,56,0,22,0,0,1,39,7,6,21,20, 23,22,51,7,34,39,38,39,38,53,52,55,54,55,23,53, 51,1,123,198,61,28,157,47,8,48,7,47,102,37,16,102, 14,28,143,45,1,61,197,80,57,69,144,114,33,25,38,83, 111,47,47,148,74,10,18,144,141,0,0,2,0,83,2,16, 1,128,3,62,0,15,0,32,0,0,19,50,55,54,53,52, 39,38,35,34,7,6,21,20,23,22,55,50,31,1,22,21, 20,7,6,35,34,39,38,53,52,55,54,234,55,25,12,47, 20,25,58,25,11,52,19,23,68,47,18,17,57,43,50,69, 47,35,57,43,2,70,48,22,26,61,26,11,50,22,26,66, 22,8,248,58,27,33,34,69,46,35,58,42,50,69,48,35, 0,6,0,16,255,254,3,84,2,218,0,16,0,32,0,47, 0,62,0,79,0,95,0,0,1,20,23,22,51,50,55,54, 53,52,39,38,35,34,15,1,6,1,20,23,22,51,50,55, 54,53,52,39,38,35,34,7,6,5,34,39,38,53,52,55, 54,51,50,22,21,20,7,6,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,54,19,52,55,54,51,50,31,1,22, 21,20,7,6,35,34,39,38,1,52,39,38,35,34,7,6, 21,20,23,22,51,50,55,54,1,84,54,18,22,56,25,11, 26,24,42,60,24,8,2,254,247,54,18,21,60,22,8,47, 19,24,65,21,7,2,112,68,47,35,45,46,59,61,92,48, 46,253,178,60,44,46,46,45,59,60,46,46,92,175,57,42, 52,68,47,18,17,46,45,59,59,46,46,1,253,47,21,25, 61,22,9,50,19,23,58,25,10,2,66,68,21,7,49,21, 26,43,27,28,51,27,10,254,73,68,21,7,53,20,23,63, 24,10,56,19,173,56,42,52,61,45,47,92,61,58,46,46, 1,47,47,45,61,59,45,46,46,45,59,61,92,1,21,71, 47,34,58,26,33,35,59,45,46,46,45,254,142,60,26,11, 52,20,25,64,23,9,49,21,0,3,0,12,255,96,3,193, 1,226,0,13,0,22,0,71,0,0,1,34,21,20,23,22, 51,50,55,54,53,52,39,38,19,33,22,23,22,51,50,55, 54,1,52,55,54,51,50,23,22,21,20,7,51,17,51,17, 35,53,35,6,7,6,35,34,39,38,53,52,51,33,54,53, 52,47,1,38,35,34,7,22,23,22,21,6,7,6,35,34, 39,38,1,219,60,35,11,12,39,14,5,34,10,194,253,159, 23,107,77,84,174,104,23,254,205,80,53,67,109,68,53,14, 135,53,53,160,60,135,87,97,110,111,136,78,2,109,16,59, 25,42,49,23,27,50,23,11,7,62,20,24,81,28,7,1, 123,66,42,15,4,38,12,14,44,15,4,254,203,71,43,30, 97,22,1,23,81,46,31,89,70,94,50,48,1,84,253,137, 230,110,54,35,50,61,100,49,45,58,83,62,21,31,9,10, 53,25,27,79,24,7,81,18,0,3,0,8,254,244,4,115, 1,226,0,13,0,22,0,100,0,0,1,20,23,22,51,50, 55,54,53,52,35,34,7,6,5,33,22,23,22,51,50,55, 54,19,34,39,38,53,52,59,1,21,35,22,51,50,53,52, 47,1,38,35,34,7,21,35,53,35,6,7,6,35,34,39, 38,53,52,51,33,54,53,52,47,1,38,35,34,7,22,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,20,7,51,17,51,17,54,51,50,23,22,21,20,1, 152,32,15,12,38,15,5,54,32,21,10,1,13,253,159,23, 107,77,84,172,102,26,191,198,50,14,60,194,205,10,195,248, 43,23,7,8,27,25,55,158,60,135,87,97,110,111,136,78, 2,109,16,59,25,42,49,23,27,57,18,7,51,27,35,71, 29,13,70,59,70,109,68,53,14,133,55,30,33,68,34,17, 1,51,25,20,10,38,12,15,62,36,19,254,71,43,30,93, 24,254,201,63,17,22,55,55,55,147,49,21,8,1,13,152, 230,110,54,35,50,61,100,49,45,58,83,62,21,31,9,13, 53,18,21,67,34,19,64,28,35,75,45,38,89,70,94,50, 48,1,84,254,82,15,60,31,39,194,0,5,255,176,254,239, 3,91,2,220,0,15,0,90,0,100,0,113,0,126,0,0, 1,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 1,54,55,54,55,54,55,38,53,52,55,54,51,50,23,22, 21,17,35,17,52,39,38,35,34,7,6,21,20,23,54,55, 54,51,50,23,54,53,52,39,38,35,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,22,21, 20,7,6,35,34,39,6,35,34,39,38,1,38,35,34,7, 22,23,54,55,54,31,1,6,7,6,7,22,51,50,55,54, 53,52,5,6,7,6,7,23,22,23,22,51,50,55,38,1, 142,34,18,20,49,21,8,47,13,15,50,19,6,254,35,1, 40,11,29,14,63,67,131,127,185,252,98,54,48,150,83,119, 168,109,108,56,82,60,86,66,78,57,27,55,50,83,51,57, 30,36,56,38,39,83,52,65,120,71,57,34,106,74,53,66, 108,104,137,116,71,39,24,2,96,48,61,143,119,60,91,108, 90,12,59,2,91,109,9,9,76,76,72,30,38,253,221,41, 45,39,1,1,2,42,14,16,82,118,86,1,105,39,29,16, 47,19,22,48,14,4,40,13,254,30,56,42,12,26,13,45, 118,139,184,119,116,158,86,127,254,149,1,107,199,80,44,104, 104,169,123,102,44,18,24,22,54,54,73,71,65,47,62,70, 33,17,42,40,51,84,44,28,95,75,105,63,63,65,131,84, 50,36,62,91,57,34,1,25,14,76,88,63,58,123,16,6, 1,125,84,7,6,38,26,33,57,98,20,25,43,38,43,21, 42,15,5,76,65,0,0,3,0,16,255,254,2,133,1,226, 0,15,0,31,0,41,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,33,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,3,35,17,35,17,35,17,33, 21,35,197,30,13,4,29,8,10,32,11,4,31,7,1,68, 30,13,4,29,8,10,32,11,4,31,7,112,61,254,60,2, 117,254,1,8,29,9,10,32,12,4,30,8,10,35,11,2, 29,9,10,32,12,4,30,8,10,35,11,2,254,246,1,168, 254,88,1,228,60,0,0,2,0,12,255,254,3,19,1,226, 0,48,0,60,0,0,23,34,53,52,55,54,59,1,50,55, 54,53,52,39,38,35,34,7,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,6,43, 1,34,21,20,51,33,21,1,34,7,6,21,20,51,50,55, 54,53,52,127,115,57,21,25,127,52,48,39,75,34,44,54, 41,53,18,7,53,19,24,64,27,12,73,61,84,100,60,46, 67,61,78,115,54,54,2,160,253,96,38,12,3,47,35,13, 4,2,84,57,21,8,42,34,39,92,36,17,26,54,19,22, 61,22,8,49,21,27,89,43,37,69,53,71,75,52,49,31, 29,55,1,107,35,10,11,47,33,11,11,48,0,4,0,6, 255,254,4,156,1,226,0,45,0,94,0,106,0,116,0,0, 1,54,55,54,59,1,21,35,17,35,17,35,6,29,1,35, 53,52,39,38,35,34,7,6,21,54,51,50,23,22,21,20, 7,6,7,34,39,38,53,52,55,54,51,50,23,22,1,21, 33,34,53,52,55,54,59,1,50,55,54,53,52,39,38,35, 34,7,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,43,1,34,21,20,51,39, 50,55,54,53,52,35,34,7,6,21,20,5,20,23,22,51, 50,53,52,35,34,3,54,32,50,17,17,242,145,55,37,89, 55,59,30,38,33,40,46,29,28,63,31,17,57,32,27,53, 37,25,49,53,80,92,45,8,1,107,251,221,115,57,21,25, 127,58,46,35,75,34,44,54,41,53,18,7,53,19,24,64, 27,12,73,61,85,95,61,49,74,60,71,116,54,54,5,36, 12,3,46,38,12,3,1,239,39,9,10,51,59,50,1,133, 56,19,7,55,254,215,1,41,8,101,188,188,68,31,16,29, 34,45,15,49,25,32,68,29,11,2,60,42,43,84,64,71, 65,11,254,164,55,84,57,21,8,43,33,39,92,36,17,26, 54,19,22,61,22,8,49,21,27,89,43,37,68,53,72,79, 54,43,31,29,205,35,9,11,48,34,10,11,48,29,40,10, 3,47,56,0,0,2,0,14,255,254,2,203,1,221,0,28, 0,44,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,19,52,39,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,12,1,191,180,60,207,89,59,46,44,95,93,39,20, 50,43,51,102,60,45,85,71,141,39,26,25,51,33,20,50, 20,24,66,24,10,1,221,61,254,94,1,162,65,51,66,65, 67,34,44,69,47,40,84,64,83,114,72,62,254,178,39,35, 23,43,25,29,55,23,9,46,18,0,0,2,0,14,255,61, 2,203,1,221,0,30,0,46,0,0,37,7,35,55,17,35, 34,7,6,21,54,51,50,23,22,21,20,7,6,35,34,39, 38,53,52,55,54,51,33,21,35,3,52,39,38,35,34,7, 6,21,20,23,22,51,50,55,54,2,23,140,67,147,207,89, 59,46,44,95,93,39,20,50,43,51,102,60,45,85,71,98, 1,191,180,224,39,26,25,51,33,20,50,20,24,66,24,10, 4,199,211,1,144,65,51,66,65,67,34,44,69,47,40,84, 64,83,114,72,62,61,254,239,39,35,23,43,25,29,55,23, 9,46,18,0,0,2,0,12,254,244,3,25,1,221,0,105, 0,121,0,0,37,52,39,38,35,34,7,6,29,1,35,53, 52,39,38,35,34,15,1,6,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,6,35,33,34,7,6,21,20,23,22,51, 50,55,54,61,1,51,21,20,23,22,51,50,55,54,53,52, 47,1,52,55,54,51,22,21,20,7,6,35,34,39,38,39, 6,35,34,39,38,53,52,55,54,51,33,50,55,54,37,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,2,226, 51,41,54,74,40,25,55,60,45,57,67,41,15,2,2,25, 24,74,38,21,62,36,43,64,40,34,81,61,82,143,51,51, 111,96,59,46,84,53,76,254,168,95,42,21,60,37,42,76, 57,48,55,57,38,44,65,40,26,22,2,31,7,7,43,76, 53,66,94,56,15,9,56,141,115,55,33,103,53,68,1,82, 82,46,30,253,180,56,14,4,47,16,19,49,16,4,42,16, 240,78,58,46,66,41,51,151,145,78,52,40,41,19,3,4, 9,62,35,44,69,37,21,57,46,53,109,63,47,98,98,85, 66,86,132,64,40,48,24,32,58,34,21,52,43,55,18,41, 61,40,26,47,29,37,33,28,12,22,7,2,53,56,81,48, 34,61,16,19,93,68,40,57,97,41,21,73,47,134,48,13, 14,58,19,7,45,13,16,55,22,8,0,2,0,12,254,239, 2,244,1,226,0,97,0,113,0,0,1,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,6,21,20,23,22,59,1, 21,35,34,7,6,7,6,35,34,39,38,53,52,55,54,51, 50,23,22,21,35,38,35,34,7,6,21,20,51,50,55,54, 55,34,39,38,53,52,55,54,51,50,23,6,21,20,23,22, 51,50,55,54,53,52,39,38,35,34,7,6,7,54,51,50, 23,22,21,20,7,6,35,34,53,52,55,54,3,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,1,125,250,86, 39,60,40,56,79,32,14,9,49,50,32,40,66,66,33,29, 46,15,47,78,124,28,7,59,21,25,59,29,14,60,19,23, 27,12,5,92,67,33,49,21,53,30,17,45,43,63,30,26, 42,41,12,14,73,10,1,167,59,76,143,90,69,7,48,40, 78,29,12,50,32,39,152,123,103,74,48,22,10,42,15,16, 49,18,6,34,15,1,226,136,62,87,99,56,38,55,24,31, 24,30,31,58,66,39,25,54,44,68,12,44,85,21,26,67, 23,8,39,18,23,25,27,10,11,75,52,76,13,71,42,45, 63,51,52,21,53,43,49,15,4,104,13,15,171,49,17,69, 52,78,21,65,26,34,62,39,26,199,141,78,66,254,221,34, 15,17,44,16,6,38,13,15,36,21,9,0,0,3,0,12, 254,239,2,244,1,226,0,15,0,27,0,119,0,0,55,50, 55,54,53,52,39,38,35,34,7,6,21,20,23,22,19,50, 55,54,53,52,39,38,35,34,7,20,19,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,6,21,20,23,22,59,1, 21,35,34,7,6,7,6,35,34,53,52,55,54,51,50,23, 22,21,20,15,1,54,55,54,55,54,55,34,39,38,53,52, 55,54,51,50,23,6,21,20,23,22,51,50,55,54,53,52, 39,38,35,34,7,6,7,54,51,50,23,22,21,20,7,6, 35,34,53,52,55,54,150,59,16,5,41,15,16,51,18,5, 34,15,114,59,7,1,33,7,8,49,6,170,250,86,39,60, 40,56,79,32,14,9,49,50,32,40,66,66,33,29,46,15, 47,78,159,53,30,33,64,28,13,35,8,46,27,1,1,49, 21,53,30,17,45,43,63,30,26,42,41,12,14,73,10,1, 167,59,76,143,90,69,7,48,40,78,29,12,50,32,39,152, 123,103,59,41,12,13,42,16,6,38,12,14,36,21,9,254, 243,60,7,8,25,8,2,46,46,2,162,136,62,87,99,56, 38,55,24,31,24,30,31,58,66,39,25,54,44,68,12,44, 132,49,30,17,47,21,27,52,23,5,9,38,2,2,76,13, 71,42,45,63,51,52,21,53,43,49,15,4,104,13,15,171, 49,17,69,52,78,21,65,26,34,62,39,26,199,141,78,66, 0,4,0,12,254,239,5,200,1,226,0,45,0,55,0,153, 0,169,0,0,37,54,55,54,59,1,21,35,17,35,17,35, 6,21,17,35,17,52,39,38,35,34,7,6,21,54,51,50, 23,22,21,20,7,6,7,34,39,38,53,52,55,54,51,50, 23,22,5,20,23,22,51,50,53,52,35,34,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,6,21,20,23,22, 59,1,21,35,34,7,6,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,35,38,35,34,7,6,21,20,51,50, 55,54,55,34,39,38,53,52,55,54,51,50,23,6,21,20, 23,22,51,50,55,54,53,52,39,38,35,34,7,6,7,54, 51,50,23,22,21,20,7,6,35,34,53,52,55,54,3,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,4,98, 32,50,17,17,242,145,55,37,89,55,59,30,38,33,40,46, 29,28,63,31,17,57,32,27,53,37,25,49,53,80,92,45, 8,254,246,39,9,10,51,59,50,254,42,250,86,39,60,40, 56,79,32,14,9,49,50,32,40,66,66,33,29,46,15,47, 78,124,28,7,59,21,25,59,29,14,60,19,23,27,12,5, 92,67,33,49,21,53,30,17,45,43,63,30,26,42,41,12, 14,73,10,1,167,59,76,143,90,69,7,48,40,78,29,12, 50,32,39,152,123,103,74,48,22,10,42,15,16,49,18,6, 34,15,170,56,19,7,55,254,115,1,141,8,101,254,224,1, 32,68,31,16,29,34,45,15,49,25,32,68,29,11,2,60, 42,43,84,64,71,65,11,172,40,10,3,47,56,1,166,136, 62,87,99,56,38,55,24,31,24,30,31,58,66,39,25,54, 44,68,12,44,85,21,26,67,23,8,39,18,23,25,27,10, 11,75,52,76,13,71,42,45,63,51,52,21,53,43,49,15, 4,104,13,15,171,49,17,69,52,78,21,65,26,34,62,39, 26,199,141,78,66,254,221,34,15,17,44,16,6,38,13,15, 36,21,9,0,0,3,0,16,255,254,2,121,1,226,0,3, 0,15,0,55,0,0,19,21,51,53,7,34,7,6,21,20, 23,22,51,50,61,1,7,34,39,38,53,52,55,54,59,1, 53,33,21,35,21,51,50,23,22,21,20,7,6,35,34,39, 53,22,51,50,55,54,53,52,43,1,21,20,7,6,180,162, 217,28,15,6,60,44,43,119,119,95,62,50,38,22,26,23, 1,174,159,110,64,38,25,62,39,48,32,36,29,35,67,23, 8,96,86,80,41,1,172,139,139,194,38,14,14,49,38,28, 115,66,236,63,50,69,55,34,20,193,54,139,61,39,46,69, 41,27,15,61,16,43,15,19,91,91,87,38,20,0,0,1, 0,14,255,254,2,179,1,226,0,35,0,0,19,33,21,35, 21,54,51,50,23,22,21,20,7,51,17,51,17,33,53,51, 54,55,54,53,38,39,38,35,34,7,21,35,17,35,17,35, 14,1,162,145,34,44,71,47,33,55,176,54,254,53,133,58, 20,6,1,47,20,23,44,27,55,164,54,1,226,54,133,28, 53,38,46,91,42,1,173,254,28,55,18,64,20,25,46,21, 10,34,92,1,41,254,82,0,0,3,0,16,255,254,2,115, 1,226,0,21,0,33,0,37,0,0,23,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,51,21,35,21,20,7,6, 55,53,35,34,7,6,21,20,23,22,51,50,17,35,21,51, 223,95,62,50,39,21,26,23,1,174,159,231,231,80,41,67, 217,36,10,3,60,44,43,119,162,162,2,63,50,69,59,32, 18,193,54,139,55,91,87,38,20,170,66,43,11,12,49,38, 28,1,119,139,0,3,0,12,254,244,3,25,1,221,0,15, 0,31,0,128,0,0,5,20,23,22,51,50,55,54,53,52, 39,38,35,34,7,6,1,52,39,38,35,34,7,6,21,20, 23,22,51,50,55,54,7,34,39,38,53,52,55,54,51,50, 23,54,51,50,23,22,21,20,15,3,33,34,7,6,21,20, 23,22,51,50,63,1,54,51,50,23,22,21,20,15,1,6, 35,34,39,38,39,52,55,6,7,6,35,34,39,38,53,52, 55,54,51,33,50,55,54,53,52,39,38,35,34,7,6,29, 1,35,53,52,39,38,35,34,15,1,6,7,54,51,50,23, 22,21,20,7,6,2,84,45,10,11,50,19,7,40,14,16, 46,19,7,254,146,44,17,20,55,17,5,48,17,19,49,19, 6,80,94,32,12,81,61,82,143,51,51,111,96,59,46,104, 35,41,33,254,168,95,42,21,63,35,41,37,80,149,80,89, 73,39,23,57,28,21,21,61,33,16,1,14,19,198,76,59, 85,59,49,103,53,68,1,82,82,46,30,51,41,54,74,40, 25,55,60,45,57,67,41,15,2,2,25,24,74,38,21,62, 36,136,55,11,3,36,13,15,45,17,6,35,13,1,94,51, 20,8,45,13,16,51,19,6,40,14,110,83,32,41,109,63, 47,98,98,85,66,86,156,55,15,8,2,48,24,32,62,33, 18,51,96,52,57,33,42,63,34,13,6,55,28,33,34,26, 6,127,49,58,47,63,97,41,21,73,47,61,78,58,46,66, 41,51,151,145,78,52,40,41,19,3,4,9,62,35,44,69, 37,21,0,2,0,8,254,239,3,166,1,221,0,15,0,80, 0,0,37,20,23,22,51,50,55,54,53,52,39,38,35,34, 7,6,37,54,51,50,23,22,21,20,7,6,35,34,39,38, 53,52,63,1,50,21,6,21,20,23,22,51,50,55,54,53, 52,39,38,35,34,7,21,35,17,35,34,7,6,21,54,51, 50,23,22,21,20,7,6,35,34,39,38,53,52,55,54,51, 33,21,35,1,0,50,20,24,63,26,10,39,26,25,50,33, 20,1,162,40,56,98,43,23,145,122,175,193,142,149,78,11, 38,67,137,130,157,147,104,124,43,31,35,46,38,61,205,90, 59,46,50,90,93,39,19,56,39,50,101,60,46,76,76,104, 1,191,181,143,55,23,9,45,19,23,39,35,23,42,26,44, 33,88,47,61,164,88,74,119,126,190,198,97,2,25,109,163, 155,113,107,64,76,137,53,41,29,49,140,1,162,65,51,66, 65,68,33,44,75,48,33,83,64,84,105,72,71,61,0,1, 0,20,255,254,2,211,1,226,0,5,0,0,19,51,17,33, 21,33,20,54,2,137,253,65,1,226,254,83,55,0,0,4, 0,8,255,254,5,34,1,228,0,73,0,88,0,100,0,112, 0,0,1,50,23,54,55,54,51,33,21,35,17,35,17,35, 34,7,22,21,20,7,6,35,34,39,38,53,52,55,38,35, 34,7,22,21,20,15,1,6,35,34,39,38,53,52,55,38, 35,34,7,6,7,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,54,55,54,5,34,7,6, 15,1,20,23,22,51,50,53,52,39,38,5,20,23,22,51, 50,55,54,53,52,39,6,39,6,21,20,23,22,51,50,55, 54,53,52,2,168,116,65,60,64,8,7,1,58,156,60,98, 52,38,100,57,38,54,78,44,28,96,66,67,60,48,100,57, 23,32,38,76,44,29,94,53,62,137,74,39,10,42,48,82, 43,27,80,31,39,84,46,40,107,97,135,93,76,65,82,9, 254,18,44,34,18,2,2,48,23,29,95,43,24,2,46,39, 25,33,46,30,20,96,97,248,96,41,24,31,42,33,22,1, 226,41,35,5,1,54,254,82,1,174,18,82,137,98,56,39, 76,48,60,140,82,28,22,82,137,98,56,19,20,75,49,60, 144,78,24,71,37,50,27,64,39,51,99,33,13,66,55,72, 129,86,78,43,35,5,1,242,35,18,19,18,59,30,14,96, 48,31,18,49,72,44,28,63,41,40,121,65,79,79,75,111, 75,43,26,62,43,39,122,0,0,3,255,228,254,244,2,103, 1,226,0,57,0,61,0,73,0,0,23,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,51,50,23,22,21,20,7, 6,7,6,43,1,34,7,6,21,20,23,22,49,35,52,39, 52,55,54,59,1,50,55,54,53,52,39,38,39,34,43,1, 21,20,7,6,3,51,53,35,23,35,34,7,6,21,20,23, 22,51,50,53,223,95,62,50,39,21,26,23,1,174,159,43, 96,49,31,113,37,46,25,27,242,66,18,16,1,1,52,3, 58,29,48,235,154,47,18,69,18,23,6,6,43,80,41,95, 162,162,162,217,36,10,3,63,39,45,119,2,63,50,69,59, 32,18,193,54,139,79,49,65,153,60,19,6,4,20,18,38, 11,12,23,1,49,90,24,12,97,36,47,104,31,9,2,91, 87,38,20,1,35,139,194,43,11,12,58,35,22,115,0,1, 255,232,254,244,2,4,1,226,0,43,0,0,19,33,21,35, 21,54,51,50,23,22,21,20,7,6,7,35,34,7,21,23, 35,39,55,54,55,54,59,1,50,55,54,53,52,39,38,35, 34,7,21,35,17,35,17,35,8,1,179,144,39,33,82,40, 23,87,60,70,170,94,3,1,54,2,2,10,79,19,24,182, 124,33,11,47,25,34,45,11,55,181,55,1,226,54,164,18, 87,51,62,129,61,36,2,82,11,29,46,42,73,12,3,102, 32,40,81,40,22,39,188,1,174,254,82,0,0,3,0,8, 255,254,3,209,1,231,0,51,0,63,0,78,0,0,1,22, 21,20,15,1,6,35,34,39,38,53,52,55,38,35,34,7, 6,7,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,51,50,23,54,55,54,51,33,21,35,17,35,17, 35,34,7,6,21,20,23,22,51,50,55,54,53,52,1,50, 53,52,39,38,35,34,7,6,15,1,20,23,22,2,54,100, 57,23,32,38,76,44,29,94,53,62,137,74,39,10,42,48, 82,43,27,80,31,39,84,46,40,108,100,136,89,75,50,79, 9,8,1,59,159,60,96,54,92,96,41,24,31,42,33,22, 254,77,95,43,24,28,44,34,18,2,2,48,23,1,154,82, 137,98,56,19,20,75,49,60,144,78,24,71,37,50,27,64, 39,51,99,33,13,66,55,72,131,86,79,42,32,4,1,54, 254,82,1,174,51,75,111,75,43,26,62,43,39,122,254,246, 96,48,31,18,35,18,19,18,59,30,14,0,0,1,0,18, 255,254,2,39,1,226,0,7,0,0,19,51,17,33,17,51, 17,33,18,54,1,168,55,253,235,1,226,254,83,1,173,254, 28,0,0,2,0,14,255,254,2,133,1,226,0,17,0,31, 0,0,19,51,17,51,17,52,55,54,51,50,23,22,21,20, 7,6,35,33,37,52,39,38,35,34,7,6,21,17,51,50, 55,54,14,54,205,89,26,32,96,68,61,68,31,42,254,22, 2,66,53,48,69,67,17,10,176,52,24,12,1,226,254,83, 1,46,95,25,7,99,88,102,126,47,22,191,98,73,68,34, 20,38,254,229,68,32,0,1,0,14,255,251,2,131,1,226, 0,23,0,0,19,51,17,22,23,50,55,54,55,17,51,17, 33,17,51,17,33,53,6,7,6,35,34,53,14,54,6,37, 55,38,20,3,52,1,53,55,254,96,27,63,19,19,85,1, 226,254,132,46,4,53,28,29,1,64,254,83,1,173,254,28, 55,39,14,5,75,0,0,1,0,10,255,49,1,146,1,226, 0,11,0,0,19,33,21,35,17,7,53,55,17,35,17,35, 10,1,136,144,199,144,139,54,1,226,54,254,88,211,66,157, 1,156,254,82,0,1,255,253,254,244,2,56,1,226,0,59, 0,0,5,35,34,7,6,21,20,21,23,35,39,55,54,55, 54,59,1,50,55,54,53,52,35,34,7,6,21,17,35,17, 52,39,38,35,34,7,6,21,17,35,17,52,55,54,51,50, 23,22,23,54,55,54,51,50,23,22,21,20,7,6,1,53, 159,72,17,7,1,55,2,2,11,85,17,20,176,110,59,42, 145,44,29,17,55,43,22,26,35,25,13,54,55,31,41,68, 41,7,5,24,49,21,21,128,45,20,60,70,146,36,16,27, 5,4,34,45,42,76,11,2,106,76,101,237,45,26,27,254, 180,1,76,55,28,15,48,26,24,254,180,1,82,81,42,23, 53,9,10,43,20,9,142,62,81,137,94,112,0,2,0,12, 255,253,3,52,1,226,0,61,0,77,0,0,1,34,7,6, 21,54,51,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,51,50,23,22,21,20,21,20,7,6,49,23,22,23, 22,51,50,55,54,53,52,35,53,50,21,20,7,6,35,34, 39,38,53,52,53,55,39,38,39,38,7,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,1,8,70,63,61,51, 74,85,44,26,67,41,51,83,49,47,72,71,109,94,75,74, 1,2,2,11,66,10,11,96,43,23,176,230,71,55,79,97, 41,28,3,2,8,46,57,136,63,30,14,53,21,24,66,25, 10,40,24,1,172,61,60,67,57,65,39,50,78,41,26,67, 62,84,110,81,80,72,73,88,5,5,1,23,33,40,76,11, 2,83,45,59,188,54,242,119,70,53,65,44,56,5,6,55, 36,55,49,59,182,49,24,30,58,22,9,47,18,24,51,33, 19,0,0,2,0,10,255,254,3,64,1,226,0,47,0,63, 0,0,1,33,21,35,17,35,17,35,34,7,6,21,17,35, 17,52,39,38,35,34,7,6,21,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,22,23,54, 55,54,3,52,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,2,60,1,4,144,55,67,51,25,13,55,60,47,51, 93,60,47,53,76,93,38,18,63,39,49,112,46,23,74,74, 112,77,64,17,11,12,61,28,251,43,26,29,44,31,20,51, 22,27,59,24,10,1,226,54,254,82,1,174,59,29,33,254, 203,1,29,60,48,37,69,54,71,56,73,35,45,74,40,25, 99,51,67,112,77,78,63,16,18,61,25,11,254,167,52,32, 19,43,26,28,54,24,11,44,17,0,0,2,0,8,254,244, 2,133,1,226,0,13,0,67,0,0,37,52,39,38,35,34, 7,6,21,17,51,50,55,54,5,20,23,22,59,1,21,35, 34,15,1,6,35,34,39,38,53,52,55,54,59,1,21,35, 34,7,6,21,20,51,50,55,54,51,38,53,33,17,51,17, 51,17,52,55,54,51,50,23,22,21,20,7,6,35,2,80, 53,48,69,67,17,10,176,52,24,12,254,248,34,20,44,17, 23,56,51,81,48,49,90,28,9,35,18,19,115,109,21,7, 1,78,35,83,41,34,55,254,253,54,205,89,26,32,96,68, 61,68,31,42,189,98,73,68,34,20,38,254,229,68,32,155, 57,13,8,49,36,67,36,66,22,28,41,25,12,55,21,5, 5,61,82,39,20,78,1,228,254,83,1,46,95,25,7,99, 88,102,126,47,22,0,0,2,0,16,255,254,3,48,1,226, 0,41,0,57,0,0,1,34,7,6,7,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 21,20,7,33,17,51,17,33,53,54,55,54,53,52,39,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,39,78,63,45,7,45,39,81,43,26,66,37,47,100,45, 25,80,81,118,100,79,81,78,1,27,56,254,63,83,30,14, 71,56,187,58,22,9,49,20,26,60,23,9,48,22,1,172, 56,40,49,20,67,41,52,83,40,22,85,46,62,119,86,86, 70,74,98,128,59,1,173,254,28,49,29,81,36,41,90,58, 46,182,50,20,24,63,25,11,49,19,24,61,27,13,0,4, 0,10,255,49,4,62,1,226,0,8,0,24,0,40,0,109, 0,0,37,51,50,55,54,53,52,43,1,37,34,7,6,21, 20,23,22,51,50,55,54,53,52,39,38,37,34,7,6,21, 20,23,22,51,55,54,55,52,47,1,38,33,34,7,6,7, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,51,55,34,39,38,53,52,55, 54,51,50,23,22,21,20,15,1,51,50,23,22,21,20,15, 1,6,43,1,7,35,55,33,53,54,55,54,53,52,39,38, 2,254,207,42,17,7,98,115,253,116,58,22,9,49,20,26, 60,23,9,48,22,2,46,44,29,17,63,30,32,41,6,1, 44,27,6,254,35,78,63,45,7,45,39,81,43,26,66,37, 47,101,45,24,79,79,121,100,79,81,78,235,64,75,48,32, 43,42,60,75,39,23,10,35,107,80,32,15,57,26,14,16, 231,97,61,97,254,192,83,30,14,71,56,53,37,13,16,67, 60,50,20,24,63,25,11,49,19,24,61,27,13,182,52,32, 31,42,21,10,94,13,16,39,18,7,1,56,40,49,20,67, 41,52,83,40,22,85,47,61,122,85,84,70,74,98,128,59, 135,51,35,44,62,50,52,50,29,37,25,21,80,60,27,34, 77,31,10,3,205,205,49,29,81,36,41,90,58,46,0,2, 0,12,255,254,3,252,2,0,0,76,0,92,0,0,1,50, 23,22,7,20,21,15,1,20,51,50,55,54,53,52,39,53, 50,23,22,21,20,7,6,35,34,53,52,55,54,55,39,38, 39,38,35,34,7,6,21,17,35,17,52,39,38,35,34,7, 6,21,54,51,50,23,22,21,20,7,6,35,34,39,38,53, 52,55,54,51,50,23,22,23,54,55,54,1,20,23,22,51, 50,55,54,53,52,39,38,35,34,7,6,2,92,99,38,17, 1,3,5,77,64,43,32,139,96,56,42,67,51,76,133,7, 1,1,2,12,64,12,14,65,27,12,55,80,43,52,70,63, 61,51,74,85,44,26,67,41,51,83,49,47,72,71,109,108, 67,21,11,16,58,29,254,34,53,21,24,66,25,10,40,24, 28,63,30,14,1,226,81,35,45,7,8,42,72,139,81,60, 64,183,16,55,92,69,87,132,76,58,184,23,70,12,12,38, 75,13,3,59,25,31,254,197,1,47,74,34,19,61,60,67, 57,65,39,50,78,41,26,67,62,84,110,81,80,48,15,17, 46,22,12,254,173,58,22,9,47,18,24,51,33,19,49,24, 0,2,0,16,254,244,4,238,1,226,0,95,0,111,0,0, 1,34,7,6,7,54,51,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,51,17,52, 55,54,51,50,23,54,55,54,51,50,23,22,21,20,7,6, 35,33,34,15,1,20,21,23,35,39,55,54,55,54,51,33, 50,55,54,53,52,35,34,7,6,21,17,35,17,52,47,1, 38,35,34,7,6,21,17,33,53,54,55,54,53,52,39,38, 7,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,39,78,63,45,7,45,39,81,43,26,66,37,47,100,45, 25,80,81,118,100,79,81,78,228,55,31,41,85,36,32,51, 16,16,128,46,20,60,70,130,252,213,82,13,2,2,55,2, 2,11,85,17,20,3,54,110,62,45,145,43,29,17,55,43, 22,13,14,35,24,13,254,119,83,30,14,71,56,187,58,22, 9,49,20,26,60,23,9,48,22,1,172,56,40,49,20,67, 41,52,83,40,22,85,46,62,119,86,86,70,74,98,128,59, 1,27,81,42,23,72,51,16,5,140,63,82,137,94,112,52, 30,1,2,37,45,42,76,11,2,104,76,103,237,45,26,27, 254,180,1,76,54,29,11,4,47,26,25,254,180,49,29,81, 36,41,90,58,46,182,50,20,24,63,25,11,49,19,24,61, 27,13,0,1,0,10,255,254,1,140,1,226,0,9,0,0, 19,33,21,35,17,35,17,35,17,35,10,1,130,138,55,139, 54,1,226,54,254,82,1,174,254,82,0,1,254,143,255,254, 0,76,3,3,0,24,0,0,19,52,39,38,35,34,7,6, 21,20,23,35,38,53,52,55,54,51,50,31,1,22,21,17, 7,21,88,35,46,80,49,33,37,67,29,90,57,76,153,49, 13,7,55,2,6,144,47,18,55,37,49,52,52,60,47,98, 51,33,128,44,35,41,253,245,2,0,0,2,254,180,1,226, 255,244,3,2,0,27,0,39,0,0,3,35,38,39,38,53, 52,55,54,51,50,31,1,22,21,20,7,6,35,34,39,38, 53,52,55,6,21,20,55,34,7,6,21,20,51,50,53,52, 39,38,195,73,40,17,7,71,47,59,92,35,11,5,50,25, 30,57,32,18,13,65,153,35,10,3,54,49,32,11,1,226, 19,67,26,25,77,44,30,65,27,19,20,62,30,14,49,29, 33,27,22,12,78,87,179,36,9,10,56,50,40,16,5,0, 0,2,0,8,0,209,1,236,1,226,0,5,0,9,0,0, 19,33,17,33,53,35,33,21,51,53,8,1,228,254,247,219, 1,15,159,1,226,254,239,219,164,164,0,2,0,12,255,254, 2,39,3,9,0,37,0,53,0,0,19,52,55,54,51,50, 31,1,22,21,17,35,17,52,39,38,35,34,7,6,21,20, 23,54,55,54,51,50,23,22,21,20,7,6,35,34,39,38, 37,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 12,90,77,124,174,53,13,8,55,88,44,61,119,64,53,48, 12,70,33,41,98,31,12,65,36,45,143,67,44,1,9,57, 27,13,58,13,15,42,31,18,39,18,1,123,194,110,94,137, 44,36,42,253,248,2,13,126,50,26,118,97,128,116,104,83, 34,16,86,32,40,79,38,22,149,97,2,53,25,30,72,15, 4,44,26,26,60,29,14,0,0,3,0,10,255,254,2,97, 3,3,0,15,0,60,0,76,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,3,38,53,52,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,15,1,6,35,34,39,38,53,52,55, 34,7,6,21,20,23,22,55,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,1,189,45,31,19,55,20,25,62, 26,11,46,29,124,56,63,42,52,65,52,41,94,62,80,145, 110,108,104,104,167,105,65,49,76,33,24,26,76,43,28,57, 127,85,80,79,86,217,52,32,19,50,23,27,66,28,13,45, 29,2,181,43,25,27,60,22,8,46,20,24,44,32,19,253, 134,56,68,78,45,30,56,44,50,101,53,34,117,117,147,167, 112,113,61,46,66,92,38,11,6,62,39,49,69,47,108,101, 127,127,94,101,224,49,28,32,57,25,12,50,22,28,45,35, 23,0,0,3,0,18,255,254,3,156,1,229,0,56,0,70, 0,82,0,0,1,34,7,6,7,54,51,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,51,50,23,54,51,50, 23,22,21,20,7,39,54,55,54,53,52,39,38,35,34,7, 22,21,20,7,6,35,34,39,38,53,52,55,38,7,34,7, 6,21,20,23,22,51,50,53,52,39,38,23,20,23,22,51, 50,55,54,53,52,39,6,1,99,130,74,45,8,40,49,81, 44,26,80,31,39,93,47,30,108,98,135,95,71,73,70,112, 74,70,96,55,71,21,6,67,66,87,39,36,100,58,39,54, 76,43,29,96,55,230,63,24,9,48,21,27,97,45,24,214, 41,23,31,46,32,20,98,95,1,172,64,39,55,27,65,39, 50,99,33,13,79,49,65,129,86,79,44,41,89,83,115,125, 72,18,60,92,27,28,86,57,59,15,82,137,100,56,37,75, 50,59,140,82,24,188,52,21,24,59,25,12,96,50,30,17, 49,77,42,25,63,41,40,115,71,81,0,3,0,12,255,254, 4,172,3,9,0,9,0,47,0,63,0,0,1,33,21,35, 17,35,17,35,17,35,1,52,55,54,51,50,31,1,22,21, 17,35,17,52,39,38,35,34,7,6,21,20,23,54,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,37,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,3,42,1,130, 138,55,139,54,252,226,90,77,124,174,53,13,8,55,88,44, 61,119,64,53,48,12,70,33,41,98,31,12,65,36,45,143, 67,44,1,9,57,27,13,58,13,15,42,31,18,39,18,1, 226,54,254,82,1,174,254,82,1,125,194,110,94,137,44,36, 42,253,248,2,13,126,50,26,118,97,128,116,104,83,34,16, 86,32,40,79,38,22,149,97,2,53,25,30,72,15,4,44, 26,26,60,29,14,0,0,4,0,10,255,254,4,172,3,3, 0,15,0,60,0,76,0,86,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,3,38,53,52,55,54, 51,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,23,22,21,20,15,1,6,35,34,39,38,53,52,55, 34,7,6,21,20,23,22,55,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,37,33,21,35,17,35,17,35,17, 35,1,189,45,31,19,55,20,25,62,26,11,46,29,124,56, 63,42,52,65,52,41,94,62,80,145,110,108,104,104,167,105, 65,49,76,33,24,26,76,43,28,57,127,85,80,79,86,217, 52,32,19,50,23,27,66,28,13,45,29,1,79,1,130,138, 55,139,54,2,181,43,25,27,60,22,8,46,20,24,44,32, 19,253,134,56,68,78,45,30,56,44,50,101,53,34,117,117, 147,167,112,113,61,46,66,92,38,11,6,62,39,49,69,47, 108,101,127,127,94,101,224,49,28,32,57,25,12,50,22,28, 45,35,23,199,54,254,82,1,174,254,82,0,0,4,0,12, 255,254,6,96,3,9,0,48,0,64,0,102,0,118,0,0, 1,33,21,35,17,35,17,35,34,7,6,21,17,35,17,52, 39,38,35,34,7,6,21,54,51,50,23,22,21,20,15,1, 6,35,34,39,38,53,52,55,54,51,50,23,22,23,54,55, 54,3,52,39,38,35,34,7,6,21,20,23,22,51,50,55, 54,1,52,55,54,51,50,31,1,22,21,17,35,17,52,39, 38,35,34,7,6,21,20,23,54,55,54,51,50,23,22,21, 20,7,6,35,34,39,38,37,34,7,6,21,20,23,22,51, 50,55,54,53,52,39,38,5,92,1,4,144,55,67,51,25, 13,55,60,47,51,93,60,47,53,76,93,38,18,65,29,27, 30,112,46,23,74,74,112,77,64,17,11,12,61,28,251,43, 26,29,44,31,20,51,22,27,59,24,10,251,203,90,77,124, 174,53,13,8,55,88,44,61,119,64,53,48,12,70,33,41, 98,31,12,65,36,45,143,67,44,1,9,57,27,13,58,13, 15,42,31,18,39,18,1,226,54,254,82,1,174,59,29,33, 254,203,1,29,60,48,37,69,54,71,56,73,35,45,75,40, 14,10,99,51,67,112,77,78,63,16,18,61,25,11,254,167, 52,32,19,43,26,28,54,24,11,44,17,1,8,194,110,94, 137,44,36,42,253,248,2,13,126,50,26,118,97,128,116,104, 83,34,16,86,32,40,79,38,22,149,97,2,53,25,30,72, 15,4,44,26,26,60,29,14,0,1,0,118,2,164,0,213, 3,1,0,11,0,0,19,20,7,6,35,34,53,52,55,54, 51,50,213,28,10,10,47,31,8,9,47,2,213,31,14,4, 49,31,10,3,0,2,0,10,255,254,3,64,1,226,0,47, 0,63,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 17,35,17,52,39,38,35,34,7,6,21,54,51,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,55,54,3,52,39,38,35,34,7,6,21,20,23,22, 51,50,55,54,2,60,1,4,144,55,67,51,25,13,55,60, 47,51,93,60,47,53,76,93,38,18,63,39,49,112,46,23, 74,74,112,77,64,17,11,12,61,28,251,43,26,29,44,31, 20,51,22,27,59,24,10,1,226,54,254,82,1,174,59,29, 33,254,203,1,29,60,48,37,69,54,71,56,73,35,45,74, 40,25,99,51,67,112,77,78,63,16,18,61,25,11,254,167, 52,32,19,43,26,28,54,24,11,44,17,0,0,3,0,16, 255,254,2,199,1,226,0,11,0,15,0,39,0,0,37,53, 35,34,7,6,21,20,23,22,51,50,17,35,21,51,3,34, 39,38,53,52,55,54,59,1,53,33,21,35,21,33,53,51, 21,33,21,20,7,6,1,86,217,36,10,3,60,44,43,119, 162,162,119,95,62,50,39,21,26,23,1,174,159,0,255,60, 254,197,80,41,168,66,43,11,12,49,38,28,1,119,139,254, 221,63,50,69,59,32,18,193,54,139,193,248,91,87,38,20, 0,2,0,14,254,239,3,52,1,226,0,53,0,63,0,0, 37,52,39,38,47,1,38,35,34,7,53,54,55,54,51,50, 23,22,21,20,7,6,35,34,39,38,47,1,55,54,55,54, 55,54,51,50,23,22,21,7,6,7,6,21,20,21,23,22, 23,22,51,50,55,54,3,21,35,17,35,17,35,17,35,17, 2,254,44,10,11,22,16,18,67,41,18,53,22,20,98,46, 26,123,113,145,175,122,122,4,1,2,14,69,15,16,7,8, 20,4,1,3,59,28,12,1,6,105,101,152,121,100,111,90, 139,55,140,53,47,79,55,13,9,13,7,75,67,36,17,7, 99,56,73,141,93,86,106,108,172,32,64,139,84,18,13,6, 20,2,3,10,62,116,52,47,5,5,28,161,87,84,68,77, 2,38,54,254,82,1,174,254,82,1,228,0,0,5,0,16, 255,254,3,59,1,226,0,3,0,7,0,29,0,41,0,45, 0,0,37,51,21,35,39,51,21,35,5,34,39,38,53,52, 55,54,59,1,53,33,21,35,21,33,21,33,21,20,7,6, 39,20,23,22,51,50,61,1,35,34,7,6,37,35,21,51, 2,218,60,60,200,60,60,254,205,95,62,50,24,22,40,23, 1,174,159,1,175,254,81,78,41,201,58,44,45,119,217,36, 10,3,1,10,162,162,254,254,254,254,2,63,50,69,41,33, 35,193,54,139,55,91,86,38,21,170,49,38,28,115,66,43, 11,248,139,0,0,2,0,14,255,254,2,107,1,221,0,28, 0,44,0,0,1,33,21,35,17,35,17,35,34,7,6,21, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,19,50,55,54,53,52,39,38,35,34,7,6,21,20,23, 22,1,12,1,95,84,60,207,89,59,46,44,95,93,39,20, 50,43,51,102,60,45,85,71,41,65,25,10,37,26,27,51, 33,20,50,20,1,221,61,254,94,1,162,65,51,66,65,67, 34,44,69,47,40,84,64,83,114,72,62,254,91,46,18,23, 38,34,25,42,25,30,56,22,9,0,0,1,0,16,255,251, 2,203,1,216,0,27,0,0,19,50,23,22,23,53,33,21, 35,17,35,17,35,17,35,17,38,39,38,35,34,7,17,35, 17,52,55,54,79,67,51,14,8,1,240,110,78,228,80,7, 39,16,18,41,4,78,31,13,1,216,42,11,13,66,57,254, 92,1,164,254,92,1,86,52,21,9,25,254,113,1,164,45, 8,4,0,4,0,22,255,253,1,39,1,199,0,13,0,23, 0,33,0,47,0,0,37,20,7,6,35,34,53,52,55,54, 51,50,23,22,39,51,50,53,52,43,1,34,21,20,23,34, 21,20,59,1,50,53,52,35,3,50,23,22,21,20,35,34, 39,38,53,52,55,54,1,39,73,29,36,135,70,29,36,92, 33,13,189,103,38,38,103,32,32,39,39,103,31,31,52,93, 33,12,138,68,41,26,71,29,98,66,24,10,100,65,24,10, 52,21,189,45,41,42,44,173,42,43,43,42,1,59,54,20, 26,100,41,26,33,66,24,10,0,1,0,22,255,254,2,89, 1,199,0,55,0,0,1,34,7,6,21,20,23,51,21,35, 53,51,38,53,52,55,54,51,50,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,39,54, 53,52,35,34,21,20,23,22,51,50,55,54,53,52,1,211, 31,16,8,19,36,241,145,18,54,26,34,81,35,18,104,78, 107,127,81,82,46,46,60,66,25,9,13,52,6,33,93,61, 60,102,103,64,65,1,135,47,22,23,34,25,58,58,46,39, 78,35,17,106,54,68,117,64,48,66,64,99,93,68,67,49, 18,22,28,25,27,18,8,25,164,76,48,48,49,50,78,159, 0,2,0,17,255,254,2,54,1,199,0,59,0,69,0,0, 37,52,39,38,43,1,53,51,38,39,38,53,52,55,54,51, 50,23,22,21,20,7,22,21,20,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,39,54,53,52,39,38,35,34, 7,34,21,20,21,22,23,22,51,50,55,54,55,52,39,38, 35,34,21,20,51,54,1,211,18,6,6,231,177,39,7,5, 32,31,50,68,34,19,68,37,244,109,79,86,44,37,57,62, 30,15,14,61,10,20,5,4,8,5,71,2,98,46,61,117, 42,17,31,33,10,10,42,50,45,151,18,10,3,58,34,28, 16,22,46,34,35,57,31,39,48,65,27,41,149,61,66,102, 111,62,55,43,21,26,23,26,24,13,11,19,7,1,4,152, 4,4,101,39,19,44,17,211,27,12,4,43,79,9,0,2, 0,17,255,254,2,53,1,199,0,60,0,73,0,0,19,52, 55,54,51,50,23,54,51,50,23,22,21,20,7,6,7,22, 23,35,52,39,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,54,55,54,53,52,35,34,7,6,29,1,35,53,52, 39,38,35,34,21,20,23,7,38,39,38,23,20,23,22,51, 50,55,54,55,38,39,7,6,17,59,36,43,89,47,58,80, 81,36,19,22,26,27,48,1,59,25,85,95,94,52,43,128, 35,42,43,62,53,33,12,3,84,54,24,10,67,79,12,12, 69,51,61,42,10,7,128,57,26,27,27,50,61,11,25,114, 48,71,1,99,51,31,18,50,50,85,44,56,42,63,74,13, 54,26,18,31,49,34,28,38,85,22,6,30,25,24,31,71, 19,17,113,23,9,11,13,13,35,7,1,56,41,16,30,25, 32,21,206,35,17,8,12,13,21,52,2,3,10,0,0,4, 0,22,255,254,2,227,2,142,0,8,0,18,0,76,0,85, 0,0,1,34,7,6,7,33,52,39,38,5,50,55,54,53, 52,35,34,21,20,55,50,23,22,21,6,7,6,7,22,23, 22,21,20,7,35,54,53,52,39,35,6,7,6,35,34,39, 38,39,35,53,51,52,55,54,55,35,53,33,50,55,54,53, 52,39,55,22,21,20,7,22,21,51,38,53,52,55,54,1, 50,55,54,53,33,22,23,22,1,5,67,44,20,8,1,11, 51,43,1,75,33,14,5,69,52,59,89,26,8,7,40,25, 24,50,18,6,5,86,13,82,90,16,71,52,67,139,49,15, 4,32,32,61,14,11,103,1,54,56,20,7,15,52,32,120, 88,56,33,60,29,254,194,62,35,21,254,255,8,66,29,1, 127,65,29,34,55,41,32,128,41,15,16,56,56,72,200,87, 28,35,41,36,21,2,43,76,25,25,16,22,26,32,92,49, 99,57,43,115,37,47,58,47,71,16,10,56,59,22,25,35, 31,27,55,74,91,35,64,80,39,46,69,31,15,254,125,54, 33,42,83,32,14,0,0,1,0,14,255,254,4,80,1,205, 0,77,0,0,1,52,55,54,51,50,21,7,21,20,51,50, 55,54,53,52,39,38,39,55,22,23,22,23,16,35,34,39, 38,53,52,55,52,35,34,21,20,23,22,21,20,7,6,35, 34,39,38,53,52,55,54,51,50,21,20,7,6,7,39,54, 53,52,35,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,1,133,96,41,53,192,10,112,112,31,14,31,32,37, 71,55,32,12,4,231,117,43,19,7,122,126,7,11,81,50, 67,114,73,72,54,35,49,136,10,13,12,59,30,72,46,17, 7,50,52,89,101,23,5,11,2,1,33,111,39,16,163,104, 1,119,82,40,65,33,58,58,31,26,35,96,38,37,254,255, 90,40,54,38,35,128,86,18,24,41,36,100,49,31,79,79, 114,97,53,35,86,20,33,31,10,22,29,25,40,59,23,26, 90,61,64,81,19,23,34,30,32,0,0,1,0,14,255,254, 5,154,1,200,0,119,0,0,37,50,55,54,53,52,39,52, 55,54,51,50,23,22,21,20,15,2,35,34,39,38,53,52, 55,54,51,23,34,7,6,21,20,23,20,23,22,51,50,55, 39,38,39,38,35,34,7,6,21,22,21,20,7,6,35,34, 53,52,55,54,53,52,39,34,7,6,21,20,23,22,21,20, 35,34,39,38,53,52,55,54,51,50,23,22,21,20,15,1, 39,54,53,52,34,21,20,51,50,53,52,39,38,53,52,55, 54,51,50,51,22,23,22,23,22,21,20,7,6,21,20,3, 85,90,16,4,7,108,56,75,121,68,50,99,32,40,1,96, 30,10,70,29,37,10,54,16,4,6,45,11,12,92,3,3, 9,41,50,69,99,39,18,3,142,22,25,184,12,2,124,86, 28,9,4,9,216,93,62,64,43,38,57,66,43,27,17,8, 52,11,140,171,128,10,7,57,54,78,3,3,146,36,8,2, 1,9,2,68,69,19,25,36,38,125,50,25,87,65,92,156, 43,10,4,63,22,27,77,28,12,51,34,9,11,12,12,33, 10,2,158,39,53,36,44,61,29,38,29,23,176,25,4,166, 40,51,14,11,102,1,57,19,24,17,11,41,42,174,80,77, 115,92,49,44,42,28,33,31,20,10,14,17,14,47,100,215, 110,36,41,29,17,67,44,43,5,98,19,23,10,11,10,63, 15,13,120,0,0,1,0,17,255,253,2,35,1,248,0,44, 0,0,55,50,55,54,53,51,20,23,22,23,50,55,54,53, 52,39,38,39,38,39,55,22,21,20,7,6,35,38,39,6, 7,6,35,34,53,52,55,54,55,23,34,7,6,21,22,155, 50,32,21,67,33,25,34,6,6,46,5,6,44,43,52,36, 186,59,24,35,111,27,22,69,22,23,138,63,27,31,17,47, 17,5,3,68,43,27,32,52,29,23,1,1,4,63,7,57, 65,74,73,32,63,140,224,94,34,14,2,66,47,16,5,142, 65,33,14,3,64,28,9,14,72,0,0,1,0,17,255,254, 2,38,2,1,0,62,0,0,1,34,39,38,53,51,20,23, 22,51,50,55,23,22,23,22,23,22,21,20,7,6,35,34, 39,38,39,6,35,34,39,38,53,52,55,23,38,35,34,7, 6,21,20,23,22,51,50,55,54,53,51,20,51,50,55,54, 53,52,39,38,39,6,7,1,2,77,30,13,68,52,15,18, 44,3,39,107,44,17,4,1,61,26,34,71,44,18,5,42, 94,77,38,23,121,17,6,6,27,20,10,18,19,49,50,24, 12,67,88,47,13,8,40,41,48,29,32,1,113,73,31,40, 53,15,4,43,7,72,128,49,52,9,17,99,37,16,36,15, 19,70,61,35,46,81,34,71,3,24,12,11,38,18,16,49, 24,29,107,30,22,72,43,67,69,30,23,3,0,1,0,17, 255,254,2,35,1,199,0,62,0,0,1,34,7,6,21,35, 52,39,38,35,34,21,20,23,7,38,53,52,55,54,51,50, 23,54,51,50,23,22,29,1,20,15,1,6,35,34,39,6, 35,34,53,52,55,54,51,23,34,7,6,7,20,51,50,55, 54,53,51,20,51,50,61,1,52,1,138,45,26,13,52,48, 28,27,69,8,59,18,67,33,38,76,60,34,88,72,39,23, 65,26,13,14,105,33,49,87,138,74,21,26,17,42,20,6, 1,86,50,24,12,67,88,67,1,127,35,17,18,35,22,13, 43,21,14,8,30,42,51,23,12,64,64,60,36,46,173,99, 31,9,3,64,64,142,80,22,6,57,28,9,14,72,49,24, 29,102,116,86,113,0,0,1,255,251,255,254,2,47,1,199, 0,59,0,0,23,34,39,38,53,52,55,54,55,54,53,52, 35,34,21,20,23,7,38,53,52,55,54,51,50,23,22,21, 20,15,1,6,21,20,23,22,51,50,53,51,20,23,22,51, 50,55,54,53,52,39,55,22,21,20,7,6,35,34,39,6, 167,95,32,12,40,1,73,40,51,72,5,52,17,53,32,35, 94,31,11,40,75,40,22,17,47,88,67,58,12,16,52,14, 3,35,35,67,55,27,36,105,33,49,2,76,29,37,44,40, 1,60,31,24,59,45,12,15,14,14,42,44,27,15,55,20, 25,55,37,55,31,37,48,13,11,86,73,11,2,33,8,9, 29,23,57,31,56,85,38,19,64,64,0,1,255,251,255,253, 2,49,2,151,0,75,0,0,19,34,15,1,6,21,20,23, 7,38,53,52,55,54,55,52,39,38,53,52,55,23,6,21, 20,31,1,22,21,20,7,6,7,6,21,20,23,22,51,50, 53,51,20,23,22,51,50,55,54,53,52,39,55,22,23,20, 7,6,7,34,35,34,39,6,35,34,39,38,53,52,55,54, 55,54,55,52,131,49,19,6,1,8,52,17,24,24,36,31, 30,19,78,19,40,75,40,40,6,69,40,49,17,20,88,67, 56,14,16,53,11,2,32,35,53,16,66,21,27,3,3,105, 33,40,96,80,38,21,38,65,9,39,3,1,143,24,12,3, 3,9,14,21,14,42,29,30,28,5,27,44,42,30,28,31, 9,6,50,59,43,65,36,40,55,40,6,52,31,31,49,17, 6,86,66,16,4,36,7,7,29,29,56,23,69,98,32,11, 1,64,64,63,34,45,41,38,52,7,30,32,59,0,0,2, 255,251,255,254,2,107,2,112,0,35,0,92,0,0,1,20, 7,6,43,1,53,51,50,53,52,43,1,53,33,50,31,1, 22,23,7,6,7,6,35,34,53,51,20,23,50,53,52,43, 1,22,19,34,39,38,39,6,35,34,39,38,53,52,63,1, 54,53,52,35,34,21,20,23,7,38,53,52,55,54,51,50, 23,22,21,20,15,1,6,21,20,51,50,53,51,20,23,22, 51,50,53,52,39,55,22,21,20,7,6,1,21,42,17,19, 187,187,21,11,197,1,155,128,47,12,7,1,3,14,64,20, 24,122,70,42,78,138,152,6,154,80,31,9,8,40,96,85, 36,18,40,76,38,51,78,8,47,19,53,32,35,94,31,11, 40,75,40,86,88,67,56,14,16,70,26,26,68,38,37,2, 20,36,16,6,43,33,25,49,72,25,20,24,45,90,27,8, 112,55,5,103,107,7,253,198,38,11,15,64,66,33,43,42, 37,59,30,32,59,36,15,18,14,16,37,44,27,15,55,20, 25,55,37,55,31,37,72,86,66,16,4,57,29,37,49,26, 74,68,36,38,0,2,0,7,255,234,1,159,1,203,0,17, 0,51,0,0,37,52,39,38,35,34,7,6,21,20,21,22, 23,50,51,54,55,54,39,52,39,38,43,1,53,33,21,35, 22,20,7,51,21,35,22,21,20,7,6,35,34,39,38,53, 52,55,54,55,35,53,51,50,1,51,45,22,25,50,24,11, 10,66,5,4,65,21,6,101,16,6,5,172,1,40,52,14, 14,164,112,70,34,43,81,69,43,39,34,13,22,126,154,45, 127,47,25,12,39,17,20,4,4,82,1,4,47,15,249,20, 13,4,63,60,23,56,23,57,40,73,48,43,58,45,41,48, 75,31,11,11,57,0,0,2,0,14,255,254,2,240,1,192, 0,60,0,68,0,0,1,50,23,22,21,20,7,22,51,50, 53,52,39,38,39,35,53,51,23,22,21,20,7,6,35,34, 39,6,7,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,53,52,47,1,38,35,34,7,23,21,7,38,53,55, 54,55,54,3,20,51,50,55,38,35,34,1,17,87,45,28, 42,115,40,136,67,18,18,20,79,54,60,94,41,54,121,76, 47,92,30,28,72,44,39,45,43,67,70,69,16,10,30,39, 18,16,18,65,1,4,69,4,5,3,34,38,136,87,70,49, 51,68,87,1,189,75,46,62,90,52,58,135,85,81,21,15, 49,69,77,105,133,46,20,70,47,17,6,34,28,38,43,27, 29,33,8,8,30,74,70,39,13,9,41,23,1,5,4,23, 37,25,19,24,254,165,43,43,42,0,0,1,0,14,255,254, 1,239,1,204,0,25,0,0,37,20,7,35,54,53,52,39, 38,35,34,7,6,21,20,23,35,38,53,52,55,35,53,33, 23,22,1,239,35,69,35,60,51,62,62,49,60,36,69,35, 102,102,1,68,83,74,140,89,53,56,86,114,67,58,58,67, 114,50,92,50,92,157,102,61,91,82,0,4,0,5,255,113, 3,14,1,204,0,13,0,17,0,21,0,77,0,0,1,50, 23,22,21,20,7,6,35,34,39,38,53,52,19,35,55,51, 1,33,53,33,23,20,7,6,35,34,39,38,39,21,20,7, 6,35,34,39,6,35,34,39,38,53,52,55,54,55,23,34, 21,20,23,22,51,50,55,54,53,51,20,51,50,55,54,53, 39,53,55,20,23,22,51,50,55,53,23,22,1,23,34,14, 4,33,10,9,29,14,5,84,69,17,35,1,137,253,90,2, 166,91,50,36,39,68,30,9,3,54,39,53,86,36,63,73, 77,39,22,83,18,20,26,78,50,17,19,50,24,12,69,86, 44,19,8,1,114,27,19,16,55,12,66,2,1,86,26,8, 9,27,9,3,23,7,9,40,254,30,114,1,172,61,146,56, 41,28,32,10,11,53,92,57,40,57,57,61,35,46,69,34, 8,4,58,70,40,14,5,49,24,29,102,61,27,31,105,1, 30,22,27,19,50,54,26,14,0,2,255,252,255,254,2,114, 1,254,0,78,0,92,0,0,1,50,31,1,22,21,35,39, 38,47,1,38,35,34,7,6,7,6,15,1,6,21,20,51, 50,55,54,53,51,6,21,20,23,22,51,50,53,52,39,55, 22,23,22,21,20,7,6,35,34,39,6,35,34,39,38,53, 52,63,1,54,53,52,39,38,35,34,21,20,23,7,38,53, 52,55,54,51,50,23,54,23,50,23,22,21,20,7,6,35, 34,39,52,55,54,1,199,86,43,14,10,78,3,9,35,33, 24,30,50,40,20,5,7,47,79,40,96,75,18,5,75,2, 52,22,25,75,26,28,48,19,8,62,30,40,103,52,65,87, 104,37,15,45,83,45,40,8,9,87,8,55,17,64,41,46, 87,47,60,55,31,17,6,29,12,13,36,18,29,12,1,254, 61,27,25,31,23,30,15,9,4,40,20,21,40,41,61,34, 33,81,62,15,19,16,3,48,20,9,63,33,34,63,18,60, 23,26,88,38,18,55,55,81,34,44,47,39,61,36,41,53, 11,2,49,13,19,15,15,47,49,29,19,74,74,160,27,10, 11,29,15,7,51,27,15,6,0,1,255,251,255,254,2,83, 1,200,0,69,0,0,55,20,23,22,51,50,53,51,20,51, 50,53,52,43,1,53,51,53,35,53,51,23,21,51,21,35, 22,31,1,20,15,1,6,35,34,39,6,35,34,39,38,53, 52,53,52,63,1,54,53,52,35,34,21,20,23,7,38,53, 52,55,54,51,50,23,22,21,20,15,1,6,96,49,17,20, 88,67,86,69,77,61,87,87,62,93,86,76,34,5,1,47, 21,23,27,105,36,46,87,55,41,43,40,76,38,51,77,10, 50,19,53,32,35,94,31,11,40,75,40,140,49,17,6,86, 86,72,87,58,114,57,36,135,58,14,44,29,70,43,16,13, 64,64,39,40,58,3,2,48,36,56,27,33,59,41,11,19, 13,15,39,44,27,15,55,20,25,52,40,57,31,0,0,1, 0,10,255,253,2,63,1,199,0,75,0,0,1,50,55,54, 53,51,20,7,6,7,6,35,34,39,6,15,1,6,21,6, 21,20,51,50,53,51,20,23,22,51,50,55,54,53,52,39, 55,22,23,22,21,20,7,6,35,34,39,6,35,34,39,38, 53,52,63,1,54,53,52,35,34,21,20,23,7,38,53,52, 55,54,51,50,23,22,23,22,1,113,78,29,11,71,61,38, 37,45,37,59,26,7,38,65,33,3,88,86,69,52,16,18, 45,23,9,35,27,42,18,8,56,28,36,110,28,51,86,91, 33,14,38,70,37,42,65,7,62,15,60,36,39,52,44,11, 6,42,1,113,38,15,19,52,43,27,5,8,29,44,38,55, 30,28,9,7,56,86,62,18,6,27,11,13,24,27,70,16, 52,22,23,77,35,17,70,70,73,30,39,49,35,54,27,35, 49,31,14,10,21,13,43,44,26,16,38,9,9,30,0,3, 0,17,255,246,3,67,1,211,0,11,0,27,0,119,0,0, 37,50,55,54,55,38,39,38,21,20,23,22,1,50,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,23,52,39,38, 35,34,7,6,21,20,23,6,7,21,20,7,22,21,35,52, 39,38,39,6,35,34,39,38,53,52,55,54,51,50,23,22, 23,54,53,52,47,2,34,7,6,29,1,35,53,38,35,34, 35,6,21,20,23,22,23,7,38,53,52,55,54,51,50,23, 54,55,54,51,50,23,22,23,52,55,54,51,50,23,22,23, 21,6,7,6,7,39,54,1,19,32,45,19,6,35,67,105, 63,23,1,185,16,10,4,20,5,5,19,8,3,18,6,83, 36,18,23,56,14,7,2,21,36,68,52,69,12,13,17,72, 101,84,50,45,128,35,42,33,45,54,22,52,43,19,22,54, 24,10,67,15,73,7,8,71,2,17,34,51,69,67,32,39, 103,33,32,60,18,28,62,41,11,6,49,39,42,84,45,24, 2,3,9,19,38,42,51,62,27,11,10,40,2,2,44,29, 14,5,1,57,23,8,7,16,7,2,16,4,5,18,15,5, 67,55,30,16,44,22,14,7,4,8,16,24,89,91,42,58, 12,22,20,11,57,34,28,38,85,22,6,19,22,30,45,85, 70,30,10,3,23,9,11,13,13,43,5,42,3,6,41,16, 30,40,75,60,27,13,46,36,5,1,59,15,16,43,35,28, 59,31,40,51,31,29,53,53,66,60,0,1,0,26,0,16, 2,68,2,114,0,96,0,0,19,52,55,54,59,1,21,35, 38,35,34,21,20,23,22,51,50,23,22,21,20,7,39,54, 53,52,39,38,35,34,7,6,21,20,23,22,51,50,55,54, 53,51,7,20,23,22,51,50,55,54,53,52,35,53,51,50, 55,54,53,52,47,1,38,43,1,53,51,50,23,22,21,20, 7,6,7,34,39,22,21,20,7,6,15,1,34,39,38,39, 6,35,34,39,38,53,52,55,38,41,35,22,26,80,31,6, 12,49,37,21,24,67,27,11,22,58,14,30,12,12,27,26, 30,41,19,23,60,26,12,64,2,43,20,21,49,22,10,98, 34,36,27,17,41,22,8,9,17,32,72,37,22,30,27,24, 4,3,70,76,18,21,13,67,46,11,7,53,77,74,43,30, 80,65,2,19,46,30,19,69,2,43,38,27,15,50,21,25, 35,31,20,19,12,30,18,8,44,51,81,76,33,14,40,19, 23,15,37,21,9,43,18,21,151,53,44,26,25,59,25,8, 2,69,58,34,43,59,49,43,1,1,57,104,121,32,8,1, 1,35,9,10,54,74,50,65,149,68,56,0,0,3,0,5, 255,253,1,177,1,202,0,15,0,31,0,40,0,0,19,34, 7,6,7,20,23,22,51,50,55,54,53,52,39,38,37,51, 23,22,21,20,7,6,35,34,35,38,53,52,55,35,23,52, 55,54,51,50,20,35,34,229,80,39,16,4,77,27,35,100, 28,9,55,35,254,241,244,117,67,61,58,88,3,2,197,77, 96,182,29,6,7,41,41,42,1,127,81,34,41,112,35,12, 93,30,36,79,47,30,75,59,76,96,106,62,61,5,224,84, 88,172,39,11,2,104,0,2,0,10,255,254,2,3,1,202, 0,35,0,60,0,0,1,20,7,6,7,50,23,22,21,20, 15,1,6,35,34,39,6,7,6,35,34,39,38,53,52,55, 54,55,35,53,33,23,22,23,22,23,7,52,39,38,35,53, 50,53,52,35,34,7,6,7,21,22,23,22,51,50,53,51, 20,51,50,1,245,16,5,8,28,12,3,60,26,12,14,119, 19,10,68,21,21,63,42,30,59,24,27,110,1,69,103,27, 23,10,2,45,30,15,17,39,167,103,53,25,7,3,16,23, 26,87,68,87,68,1,41,64,15,4,3,56,17,15,84,30, 9,2,57,40,13,4,61,43,52,102,88,35,20,59,59,15, 43,20,16,165,27,20,10,43,48,95,97,45,57,33,28,23, 32,86,86,0,0,3,0,10,255,111,2,11,1,202,0,29, 0,33,0,64,0,0,37,52,47,1,38,35,53,50,53,52, 39,38,39,38,35,34,7,6,7,23,22,23,22,51,50,53, 51,20,51,50,7,55,51,23,55,20,15,1,6,35,34,39, 6,7,6,35,34,39,38,53,52,55,35,53,33,23,22,23, 22,23,20,7,22,23,22,1,199,29,16,4,3,39,4,19, 94,30,30,95,54,35,4,2,4,15,20,27,87,68,87,68, 223,16,35,17,223,51,28,20,21,119,19,10,68,21,21,63, 42,30,110,110,1,69,103,35,25,13,2,41,37,11,3,130, 19,32,14,2,43,50,14,9,48,17,5,80,52,67,36,28, 22,30,86,86,213,114,114,243,51,30,13,6,57,40,13,4, 61,43,52,150,95,59,59,21,37,19,19,75,17,16,65,16, 0,1,0,14,255,254,3,17,1,199,0,74,0,0,1,34, 15,1,6,21,35,52,39,38,35,34,21,20,51,21,34,21, 20,51,50,55,51,6,7,6,35,34,39,38,53,52,55,38, 39,38,53,52,55,54,51,50,23,54,51,50,23,22,23,22, 21,20,7,6,35,34,39,38,53,52,55,54,55,21,6,21, 20,51,50,55,54,53,52,39,38,2,51,68,42,15,12,86, 62,34,40,113,78,87,87,92,27,69,21,93,42,49,64,44, 30,68,46,9,3,87,41,52,106,81,52,120,119,61,35,6, 1,54,54,79,93,33,12,73,25,30,49,76,50,32,21,52, 48,1,127,41,18,19,22,55,29,16,70,86,57,43,65,48, 71,28,13,40,27,33,95,18,25,43,17,22,87,34,16,94, 94,92,53,73,13,13,95,58,60,54,20,26,64,30,10,3, 57,25,27,34,62,41,46,72,52,48,0,1,0,21,255,254, 1,243,1,202,0,44,0,0,1,52,39,38,35,33,53,33, 23,22,31,1,21,6,7,22,21,20,7,6,35,34,39,55, 54,55,23,6,21,22,51,50,55,54,53,52,39,38,43,1, 53,51,50,55,54,1,155,57,29,30,254,254,1,54,94,21, 12,3,8,38,68,72,69,97,235,4,2,12,70,34,51,1, 161,85,50,45,62,19,22,33,33,70,11,2,1,71,39,22, 11,59,59,13,50,31,6,50,22,30,66,59,38,36,142,30, 57,28,50,20,45,78,22,20,23,50,15,5,58,48,10,0, 0,4,0,10,255,111,2,11,1,202,0,23,0,39,0,43, 0,65,0,0,55,52,55,54,55,35,53,33,23,22,23,22, 21,20,7,6,35,34,39,6,35,34,39,38,37,20,7,6, 35,34,39,38,53,52,55,54,51,50,23,22,3,35,55,51, 55,50,55,54,53,52,39,38,39,38,35,34,7,6,7,21, 22,23,50,53,51,20,10,63,26,29,118,1,44,93,78,30, 12,47,32,41,118,22,48,87,51,33,34,1,47,27,10,11, 29,13,4,24,11,11,24,17,7,13,68,16,35,104,50,16, 5,3,15,56,54,65,78,59,44,7,15,53,87,68,140,104, 94,39,22,59,59,67,105,44,43,69,43,30,61,61,40,38, 194,25,12,4,24,8,9,23,18,8,27,11,254,86,114,99, 51,16,19,14,16,88,54,57,76,57,66,39,71,6,86,86, 0,2,0,10,255,253,2,11,1,202,0,20,0,44,0,0, 55,20,23,22,51,50,53,51,20,51,50,55,54,53,52,39, 38,35,34,7,6,37,23,22,23,22,21,20,7,6,7,6, 35,34,39,6,35,34,39,38,53,52,55,35,53,75,41,13, 16,87,68,87,39,20,10,65,53,73,79,57,54,1,9,73, 79,24,7,52,31,37,9,16,92,23,48,87,51,33,34,118, 118,161,65,21,7,86,86,47,23,27,99,65,54,73,68,216, 59,63,120,37,39,68,45,26,3,1,62,61,40,38,64,181, 78,59,0,3,0,10,255,111,2,11,1,202,0,22,0,44, 0,48,0,0,55,50,53,51,20,51,50,55,54,55,52,39, 38,39,38,35,34,7,6,7,6,21,20,37,20,7,6,35, 34,39,6,35,34,39,38,53,52,55,35,53,33,23,22,23, 22,5,51,23,35,145,87,68,87,28,21,20,1,10,17,36, 52,77,86,57,39,6,1,1,191,47,32,41,118,22,48,87, 51,33,34,108,108,1,84,63,81,22,7,254,237,35,17,68, 68,86,86,30,29,42,28,31,58,40,57,79,53,67,8,15, 93,72,69,43,30,61,61,40,38,64,187,72,59,59,76,115, 34,205,114,0,0,1,0,10,255,254,1,249,1,202,0,45, 0,0,55,52,55,54,51,50,23,22,21,23,22,51,50,53, 52,39,38,39,35,53,33,23,22,23,22,21,20,7,6,35, 34,39,38,39,38,39,38,35,34,7,6,21,20,23,7,38, 10,56,44,52,46,32,25,29,22,45,77,43,45,67,241,1, 37,85,45,26,14,66,37,50,63,44,9,7,20,4,16,34, 62,13,3,26,61,32,127,54,41,33,30,24,17,76,40,116, 57,62,68,28,59,89,47,73,37,28,108,50,28,73,16,17, 53,6,28,63,14,16,37,41,22,58,0,2,0,24,255,254, 1,177,1,202,0,19,0,33,0,0,19,23,22,23,22,21, 20,7,6,35,34,39,38,53,52,55,54,55,35,53,23,34, 7,6,21,20,23,22,51,50,53,52,39,38,249,107,44,23, 10,57,57,90,90,57,58,24,27,43,93,204,77,39,22,43, 43,59,130,57,34,1,202,39,52,79,34,27,102,63,64,66, 64,99,43,48,54,27,59,75,67,39,50,73,46,46,165,86, 44,26,0,4,0,10,255,255,2,39,1,205,0,30,0,44, 0,72,0,86,0,0,37,7,6,7,6,7,39,38,39,6, 35,38,39,38,55,52,55,54,51,50,21,20,7,51,38,53, 52,51,50,23,22,39,50,55,54,53,52,39,38,35,34,7, 6,21,20,23,52,39,6,7,6,7,21,33,53,38,39,38, 39,6,21,20,23,22,23,55,54,55,22,23,54,55,54,37, 20,23,22,51,50,53,52,39,38,35,34,7,6,2,38,3, 6,23,40,72,30,64,33,40,87,81,39,22,1,28,32,62, 83,6,138,5,83,91,25,7,123,36,11,3,10,28,22,25, 19,10,168,33,4,35,12,15,254,209,41,18,6,1,32,47, 38,47,27,59,31,40,77,59,40,35,254,65,29,10,11,63, 30,12,11,24,25,11,244,57,55,46,85,1,3,16,94,113, 2,106,62,77,89,60,65,121,14,20,25,9,121,136,37,18, 35,9,10,18,13,20,26,13,14,52,72,84,46,63,30,11, 2,19,20,6,59,19,21,47,83,65,51,41,1,3,17,99, 117,2,2,57,50,176,36,14,5,52,28,18,7,20,14,0, 0,1,0,12,255,254,2,83,1,199,0,42,0,0,1,52, 39,38,39,51,22,31,1,20,7,6,35,34,39,38,53,52, 55,54,51,22,23,22,21,20,7,39,54,53,52,35,34,15, 1,21,20,23,22,51,50,55,54,2,14,30,14,25,77,50, 8,3,94,79,119,111,85,95,48,49,65,64,32,16,35,52, 15,47,67,17,4,88,57,79,99,64,60,0,255,100,51,22, 27,54,81,65,130,69,58,65,74,118,83,59,58,8,38,18, 22,56,30,30,24,16,30,81,42,5,104,54,35,59,55,0, 0,2,0,12,255,254,2,63,2,97,0,84,0,96,0,0, 1,20,23,22,51,50,55,21,6,35,34,47,1,54,55,54, 51,50,51,22,31,1,22,21,20,7,6,7,22,21,20,7, 6,35,34,39,38,53,52,55,54,55,34,39,38,53,52,55, 54,51,50,31,1,20,21,20,7,6,35,34,39,53,22,51, 50,53,52,47,2,34,7,6,7,20,23,22,51,50,53,52, 39,38,35,34,3,20,51,50,53,52,39,38,39,15,1,6, 1,121,15,4,4,7,5,14,6,53,23,2,1,10,42,63, 3,4,87,34,12,5,104,37,46,17,54,30,35,64,35,20, 1,3,17,98,48,30,52,38,46,89,18,6,62,10,11,8, 12,10,9,16,10,15,1,52,25,9,2,137,33,37,220,45, 11,13,60,153,62,61,18,12,31,23,19,20,1,253,10,8, 2,4,60,2,62,21,34,10,50,4,92,41,28,31,145,75, 27,13,26,42,46,26,14,39,21,26,35,4,15,14,72,43, 60,63,43,32,55,30,5,6,61,9,2,2,51,6,21,19, 7,7,1,42,14,16,91,20,5,201,100,24,6,254,74,63, 57,38,9,5,2,2,8,14,0,2,0,64,255,254,2,32, 1,143,0,15,0,32,0,0,37,50,55,54,53,52,39,38, 35,34,7,6,21,20,23,22,19,50,23,22,23,22,21,20, 6,35,34,39,38,53,52,55,54,1,47,84,51,37,75,42, 55,73,52,47,67,49,56,120,69,33,12,7,138,103,102,69, 68,74,70,55,53,38,51,82,39,22,47,44,52,65,44,33, 1,88,71,34,44,26,27,85,114,57,57,85,85,60,57,0, 0,1,0,79,255,254,2,14,1,199,0,29,0,0,1,34, 7,6,15,1,21,20,23,7,38,39,38,53,52,55,54,51, 50,23,22,21,20,7,39,54,53,52,39,38,1,47,76,48, 32,1,2,38,51,35,10,7,61,64,99,97,66,60,67,70, 70,62,45,1,143,68,47,57,56,1,69,76,27,58,56,34, 81,95,64,69,76,71,81,138,91,27,88,114,90,50,30,0, 0,1,0,64,255,254,2,32,1,199,0,27,0,0,1,20, 23,22,51,21,38,53,52,51,50,23,22,21,20,7,6,35, 33,53,33,50,53,52,39,38,35,34,1,56,24,8,10,120, 137,109,43,21,126,42,54,254,254,1,2,153,29,28,39,67, 1,84,25,13,5,57,21,79,115,114,56,74,156,43,14,70, 159,66,49,49,0,2,0,79,255,254,2,32,1,227,0,41, 0,52,0,0,55,34,39,38,53,52,51,50,23,54,53,52, 39,38,35,34,15,1,21,39,54,51,50,21,20,7,20,23, 22,51,54,53,51,20,7,6,35,34,39,38,53,6,39,34, 15,1,20,51,50,53,52,39,38,200,69,34,18,120,52,61, 45,41,18,22,36,16,6,70,14,124,137,69,31,14,16,52, 77,63,26,32,59,38,40,43,44,41,11,2,37,88,39,17, 88,45,22,29,86,52,54,53,61,28,12,31,20,6,30,84, 156,99,74,50,25,11,13,29,73,28,11,32,30,50,22,139, 30,13,36,36,22,15,6,0,0,2,0,12,255,254,2,33, 1,199,0,7,0,58,0,0,37,50,55,52,35,34,21,20, 23,34,39,38,53,52,55,54,55,38,39,38,53,52,51,50, 21,35,55,38,53,38,35,52,35,34,21,20,23,20,23,22, 51,54,55,54,53,52,39,38,39,51,22,21,20,7,22,21, 20,7,6,1,30,46,5,51,52,42,56,34,19,11,7,12, 90,55,40,136,121,72,3,1,1,1,40,85,7,79,58,60, 135,41,24,8,8,1,67,19,174,31,68,26,47,51,56,56, 51,49,38,22,26,26,28,12,24,15,54,38,46,128,107,12, 2,2,9,26,46,13,13,53,37,26,30,65,38,55,19,16, 14,7,26,30,152,63,52,34,67,24,9,0,0,3,0,64, 255,253,2,14,1,199,0,9,0,70,0,80,0,0,55,50, 55,54,53,34,7,6,21,20,1,50,31,1,22,21,20,7, 6,7,20,23,22,23,22,21,20,7,35,54,53,52,39,6, 7,6,7,6,7,39,38,39,38,53,52,55,54,55,52,39, 38,35,34,21,35,52,55,54,51,22,23,22,21,48,55,54, 55,39,52,55,54,23,34,21,20,23,54,55,54,55,38,167, 27,29,21,14,26,52,1,15,62,28,10,3,22,20,43,21, 27,13,21,31,69,31,75,8,68,7,85,28,35,20,39,8, 2,45,38,72,22,21,24,45,58,58,20,25,65,34,19,52, 15,3,16,41,19,24,34,26,44,11,2,2,17,68,54,40, 29,17,35,45,26,1,131,41,21,11,13,28,22,20,29,12, 27,34,22,39,39,49,50,58,52,84,56,4,33,151,46,15, 1,2,12,52,10,10,53,45,35,38,54,45,45,44,70,22, 8,6,79,46,54,16,6,5,72,50,25,11,43,35,15,35, 20,24,5,7,29,0,0,2,0,64,255,254,2,14,1,191, 0,29,0,43,0,0,55,20,23,22,51,33,21,33,34,39, 38,53,52,55,39,55,23,50,23,22,21,6,7,6,35,34, 39,38,39,6,55,52,39,38,35,34,7,20,23,22,51,50, 55,54,140,61,23,27,1,19,254,220,95,47,28,103,27,69, 9,117,48,23,10,62,23,25,57,25,34,22,8,199,50,20, 18,75,19,52,36,25,33,25,11,145,51,19,7,70,66,38, 52,109,64,114,6,120,55,26,35,47,18,6,5,6,25,18, 69,27,15,6,27,24,24,16,23,10,0,1,0,96,255,254, 2,32,1,199,0,31,0,0,1,34,7,6,21,35,52,51, 50,23,22,21,6,15,1,6,21,20,23,22,51,33,21,33, 34,53,52,63,1,54,53,52,1,14,40,10,2,72,124,67, 34,18,3,58,106,56,51,16,18,1,37,254,219,155,59,108, 59,1,135,26,5,5,100,44,23,33,59,48,69,38,31,38, 13,4,57,112,59,42,59,33,37,51,0,1,0,64,255,254, 2,14,1,199,0,47,0,0,1,52,55,54,59,1,21,35, 34,21,20,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,39,52,39,38,35,34,7,6,21,20, 51,50,55,54,53,52,39,38,1,98,43,20,24,85,45,76, 52,52,67,65,91,137,56,29,34,33,51,70,29,14,61,31, 10,11,51,13,3,171,73,43,39,43,44,1,113,48,26,12, 56,32,16,65,62,40,76,54,56,102,53,74,65,38,39,56, 26,32,7,33,14,4,66,17,19,149,40,34,48,33,54,51, 0,2,0,80,255,254,2,14,1,199,0,7,0,47,0,0, 37,52,35,34,21,22,51,50,39,50,23,22,23,20,7,6, 35,34,39,6,21,20,23,22,51,50,55,21,34,39,38,53, 52,55,38,53,52,55,54,51,33,21,33,34,21,20,23,54, 1,66,61,79,23,42,75,52,65,25,10,1,51,24,26,58, 64,11,64,33,40,3,26,101,60,62,35,35,77,23,29,1, 61,254,185,65,14,64,240,30,52,16,111,44,18,24,43,20, 10,37,22,19,56,27,14,2,57,45,44,67,56,30,41,74, 73,21,6,56,60,23,33,30,0,2,0,60,0,104,1,143, 1,188,0,15,0,32,0,0,19,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,19,50,55,54,53,52,47,1, 38,35,34,7,6,21,20,23,22,227,85,51,36,49,48,70, 82,52,38,61,46,59,65,37,23,51,25,20,23,51,37,38, 50,31,1,188,64,45,59,70,50,52,63,47,61,81,51,37, 254,222,53,32,41,63,35,13,8,35,34,51,65,37,23,0, 0,4,0,7,0,50,0,210,2,13,0,14,0,30,0,48, 0,64,0,0,55,50,23,22,21,20,7,6,35,34,47,1, 52,55,54,23,52,39,38,35,34,7,6,21,20,23,22,51, 50,55,54,19,20,7,6,35,34,39,38,39,52,53,52,55, 54,51,50,23,22,7,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,105,58,31,16,28,27,40,42,31,32,43, 23,106,40,17,20,29,19,19,40,17,20,37,20,10,26,43, 22,28,46,30,30,2,43,22,28,60,31,17,23,52,17,21, 25,17,18,41,17,21,44,19,8,250,46,24,31,41,28,30, 29,72,54,29,16,98,43,21,9,22,27,25,43,20,8,36, 17,1,34,55,28,15,29,26,27,6,12,57,28,15,46,25, 29,51,18,6,23,26,27,45,21,9,40,17,0,3,0,31, 255,12,2,123,2,108,0,70,0,86,0,103,0,0,1,20, 7,6,35,34,47,1,17,50,55,7,6,7,21,6,15,1, 34,39,53,35,34,39,38,53,52,55,54,51,23,50,23,50, 23,52,47,2,34,7,6,35,34,39,38,53,52,55,54,55, 50,23,22,31,2,22,23,54,55,54,55,22,23,6,21,23, 22,23,22,5,20,23,22,51,31,1,50,55,17,38,35,7, 6,7,6,37,50,55,54,53,52,39,38,53,55,52,55,6, 15,1,21,22,2,123,44,23,27,24,19,27,37,63,5,38, 56,3,6,9,19,8,91,120,88,97,118,76,108,32,14,25, 5,15,22,58,16,24,42,39,36,34,12,4,65,29,33,39, 42,48,21,16,23,5,2,23,102,7,8,7,9,27,1,6, 21,18,254,54,67,55,71,22,29,3,2,32,24,34,84,45, 30,1,115,33,14,4,14,32,1,5,47,16,21,25,1,142, 52,29,15,10,18,254,219,42,34,40,5,213,24,4,3,30, 214,59,64,107,139,65,43,1,7,5,38,22,31,1,36,36, 29,9,10,56,23,7,2,15,19,23,20,40,12,13,78,47, 4,3,8,24,42,20,10,17,38,29,185,90,60,48,1,1, 1,1,134,7,3,15,73,48,46,34,10,12,22,20,50,19, 22,8,15,47,25,44,60,36,0,2,0,36,255,14,2,187, 2,99,0,141,0,162,0,0,5,20,15,1,35,38,47,1, 34,7,6,15,1,20,31,1,22,51,55,54,55,54,53,52, 39,38,39,38,47,1,38,39,38,39,53,22,51,50,51,23, 55,54,55,54,55,54,55,54,53,52,47,1,38,39,38,47, 1,34,7,6,15,1,21,20,31,1,22,51,50,63,1,7, 34,39,38,53,52,55,54,51,50,23,22,21,20,7,6,7, 6,35,34,39,38,53,52,55,54,55,54,55,54,51,23,51, 22,23,22,23,22,29,1,6,7,6,7,6,7,6,7,22, 23,22,23,22,21,20,7,6,35,34,39,38,39,38,53,52, 55,54,51,50,23,22,19,52,39,38,35,34,7,6,7,20, 21,20,23,22,31,2,51,50,55,54,1,144,27,18,2,19, 10,9,18,11,3,1,2,30,31,20,19,17,50,31,18,13, 14,11,23,63,7,108,45,13,30,88,99,5,6,41,29,49, 67,11,7,29,31,19,78,32,30,33,30,37,82,167,46,18, 3,1,104,26,46,27,30,36,25,23,66,39,26,63,26,35, 90,33,15,76,12,17,51,46,36,45,176,90,27,34,97,26, 26,27,42,1,66,71,100,33,23,24,73,22,29,8,9,39, 51,34,27,24,3,1,86,31,40,30,18,62,29,15,37,23, 38,31,24,25,57,58,19,23,37,28,24,1,45,8,8,19, 18,1,52,26,13,71,20,11,4,2,6,3,21,5,4,16, 27,21,15,5,1,8,41,24,28,24,17,22,8,23,12,1, 9,17,5,14,10,22,1,2,9,39,7,5,23,53,34,41, 92,64,23,17,8,7,5,4,65,25,35,13,10,101,53,13, 15,14,12,2,52,34,45,79,31,13,69,29,39,76,49,8, 9,27,14,50,175,131,69,20,12,26,3,4,1,9,37,58, 72,50,68,34,134,65,20,17,4,5,21,11,9,30,44,23, 7,6,74,39,15,7,17,48,25,27,39,37,20,14,12,1, 72,70,22,7,27,27,28,4,7,48,33,6,4,7,1,44, 22,0,0,6,0,30,255,254,3,18,3,106,0,16,0,32, 0,87,0,122,0,139,0,155,0,0,1,52,55,54,51,50, 31,1,22,21,20,7,6,35,34,39,38,55,52,39,38,35, 34,7,6,21,20,23,22,51,50,55,54,1,52,55,54,63, 1,54,55,54,63,1,54,55,54,63,1,50,23,15,1,6, 7,6,7,6,7,51,50,23,50,23,22,23,22,23,22,23, 22,21,22,21,20,7,6,7,6,35,39,34,39,38,39,38, 39,38,55,22,31,2,50,55,54,55,54,55,54,55,54,55, 53,52,39,38,39,38,43,1,34,7,6,7,6,7,6,7, 6,7,20,23,1,20,7,6,35,34,39,38,53,52,55,54, 55,50,31,1,22,7,52,39,38,35,34,7,6,21,20,23, 22,51,50,55,54,1,91,38,17,20,49,23,8,2,39,18, 21,43,24,12,129,28,12,13,28,12,5,31,8,10,35,11, 3,254,66,121,19,22,195,32,26,69,21,81,15,15,26,28, 21,35,12,1,9,12,25,46,68,120,88,32,17,10,16,36, 65,42,41,40,12,5,7,2,11,10,51,97,158,58,74,76, 60,30,8,15,46,98,38,71,51,86,64,22,26,18,62,59, 5,5,40,4,51,59,107,21,20,29,94,59,15,19,39,20, 20,30,12,4,32,2,162,39,18,21,43,24,12,21,29,25, 49,23,8,2,28,28,12,13,28,12,5,31,8,10,35,11, 3,2,247,47,22,9,41,22,9,9,44,23,11,39,19,20, 27,16,7,27,10,11,36,12,3,31,9,254,22,152,84,13, 12,91,16,16,45,20,79,15,22,36,12,4,38,24,29,31, 26,49,33,48,19,2,9,14,30,27,57,17,13,19,3,5, 11,111,49,42,62,108,3,33,27,38,10,22,67,5,48,17, 5,2,5,3,8,26,53,4,5,46,63,11,70,48,51,12, 3,27,6,11,20,23,17,44,16,58,53,42,1,104,44,23, 11,39,19,23,31,24,22,1,41,22,9,9,27,16,7,27, 10,11,36,12,3,31,9,0,0,1,0,19,254,184,3,10, 2,91,0,80,0,0,1,34,39,38,47,1,54,55,23,51, 50,23,22,23,22,23,7,21,35,39,34,7,6,7,6,7, 6,7,6,21,20,23,22,23,22,51,50,55,54,55,54,55, 54,55,52,39,55,22,21,7,20,7,6,7,6,35,34,39, 36,3,52,55,54,55,54,55,54,55,54,51,23,55,52,39, 38,47,1,34,15,1,6,1,131,43,19,6,1,2,9,99, 51,3,39,27,28,40,52,3,1,212,19,91,48,7,7,60, 24,9,9,13,45,44,88,46,51,45,33,157,65,3,3,5, 1,84,12,97,3,49,60,104,82,40,77,71,255,0,17,29, 37,58,26,41,31,22,55,81,237,4,46,15,16,29,37,46, 42,6,1,232,20,6,6,22,57,3,3,13,10,28,33,73, 21,29,1,26,4,4,39,57,22,32,56,50,125,87,97,41, 21,11,38,201,9,9,36,44,149,68,18,97,158,58,76,85, 106,41,22,29,88,1,78,68,58,80,40,18,19,13,5,4, 1,12,47,26,8,3,3,17,18,3,0,2,0,37,255,252, 2,240,3,39,0,82,0,95,0,0,1,52,55,38,47,1, 22,23,22,23,22,23,22,21,16,7,6,35,34,39,38,53, 52,55,54,55,35,34,53,52,55,54,51,33,52,39,38,47, 1,34,7,6,35,34,39,38,47,1,52,55,54,51,50,23, 39,6,7,34,7,6,21,23,22,23,22,51,50,55,54,53, 52,39,38,39,6,7,6,35,34,39,38,39,38,23,22,51, 50,55,38,39,38,39,6,21,20,23,1,150,48,31,8,5, 85,70,48,71,20,23,25,219,61,78,146,97,114,95,2,3, 66,16,11,2,2,1,15,15,14,33,14,15,52,26,21,34, 9,3,3,1,61,24,25,146,17,76,17,16,72,55,53,1, 12,99,54,144,171,87,61,7,6,23,39,62,20,16,81,42, 1,2,9,76,42,44,41,44,56,11,41,69,26,21,2,129, 54,64,19,11,18,18,58,38,95,27,54,68,49,254,192,66, 18,62,72,130,109,60,1,2,16,12,4,1,27,24,23,11, 1,35,16,19,7,9,12,39,16,7,172,1,1,1,42,39, 67,15,91,31,15,89,63,96,61,29,36,39,34,14,5,89, 3,4,26,32,45,38,84,9,44,32,35,43,46,26,0,3, 0,32,0,0,3,14,3,58,0,14,0,129,0,179,0,0, 1,34,7,6,7,20,23,22,51,50,63,1,52,39,38,7, 52,39,38,35,34,15,1,6,7,6,21,20,23,22,59,1, 50,55,54,55,54,55,54,53,20,23,22,31,1,50,55,54, 55,54,55,23,6,7,6,7,6,7,6,35,34,39,38,39, 38,39,6,15,1,6,35,34,39,38,53,52,55,54,63,2, 50,23,22,23,20,7,6,21,20,23,22,51,50,55,54,53, 52,39,38,39,22,21,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,5,54,53,52,61,1,39,52,39,38,39,38,39,38,39, 38,39,38,7,34,15,1,34,7,6,7,6,7,39,54,59, 1,50,23,22,23,22,23,22,23,22,23,22,23,22,21,20, 15,1,39,1,153,34,18,6,1,30,15,17,25,17,17,19, 17,173,23,8,7,15,12,28,56,24,13,52,52,69,19,61, 34,9,12,20,9,2,27,27,34,39,68,32,35,43,9,8, 40,11,53,24,34,13,24,22,26,46,30,30,30,7,9,11, 1,8,49,107,109,59,42,87,16,20,35,34,46,17,2,2, 12,27,110,21,22,132,18,3,18,19,34,13,24,22,33,60, 30,15,51,24,29,72,53,43,74,45,56,104,55,35,21,22, 1,189,22,4,5,3,12,40,33,31,83,30,58,44,49,18, 17,24,15,13,65,27,30,51,19,118,120,38,83,54,35,22, 54,69,17,9,26,33,41,4,1,22,40,12,2,26,31,11, 16,33,20,10,17,43,23,18,20,32,18,9,3,5,8,15, 74,51,82,67,46,47,20,6,8,14,25,6,5,15,30,26, 4,1,22,22,70,21,30,1,127,97,45,22,8,8,6,12, 15,37,8,38,33,1,11,65,114,82,111,158,62,12,9,15, 7,50,8,8,12,18,38,21,62,12,2,80,14,16,14,27, 28,10,19,33,34,26,27,42,20,26,52,26,12,51,42,52, 71,38,23,55,34,49,15,27,28,248,34,92,34,2,46,29, 19,15,12,23,85,33,34,43,14,18,11,1,1,1,4,7, 10,6,30,27,65,16,8,14,24,60,15,11,26,61,84,92, 19,22,84,48,80,66,0,2,0,35,0,0,3,145,2,89, 0,32,0,139,0,0,37,50,55,54,53,52,39,38,47,1, 6,7,6,7,23,48,23,22,59,1,54,55,54,55,54,53, 20,23,22,23,22,23,22,55,20,7,6,7,34,47,1,7, 6,7,6,35,34,39,38,39,38,35,34,7,6,35,39,38, 39,54,55,54,55,54,55,52,39,38,39,38,35,34,15,1, 6,35,34,39,38,53,39,52,55,54,51,50,23,22,23,22, 23,54,55,54,51,50,23,22,23,22,23,22,21,20,7,6, 15,2,6,43,1,34,47,1,23,51,50,55,54,55,54,55, 54,53,52,39,38,35,34,7,6,7,50,23,22,23,22,23, 22,1,243,67,31,15,117,58,47,55,72,42,55,54,69,49, 13,8,25,53,29,4,5,10,21,4,6,18,20,21,202,66, 35,53,86,46,7,11,23,44,30,26,42,35,21,16,4,27, 9,13,5,9,9,6,4,72,88,42,58,9,1,25,4,4, 13,23,39,23,20,6,61,35,16,7,1,51,51,68,20,11, 56,22,12,15,50,40,63,57,151,107,31,23,11,9,30,20, 21,44,45,31,44,39,13,17,18,6,15,16,35,20,55,33, 7,4,10,78,77,111,65,22,26,54,73,80,5,5,88,26, 15,138,69,34,42,78,51,28,12,1,47,53,69,96,44,14, 3,10,46,7,9,27,29,45,28,5,7,18,8,6,131,160, 70,38,1,114,26,30,51,35,24,50,34,51,16,25,18,3, 4,8,164,92,44,44,6,16,29,19,3,2,7,53,94,47, 30,12,14,13,66,52,54,4,13,28,16,35,38,27,36,83, 25,30,14,15,52,65,92,54,65,34,33,17,21,5,24,1, 7,14,67,13,14,41,73,112,84,83,7,6,40,45,3,3, 46,51,29,0,0,3,0,28,0,0,3,14,3,58,0,19, 0,92,0,142,0,0,37,52,39,38,35,34,7,6,7,6, 21,20,23,22,23,22,51,50,55,54,55,20,7,6,35,34, 39,38,53,52,55,54,51,50,23,22,21,20,7,6,15,1, 22,51,55,54,55,54,55,54,55,54,55,23,6,7,6,7, 6,35,34,35,34,39,7,39,63,1,54,55,54,53,52,39, 38,35,34,7,6,7,6,21,20,23,54,55,54,55,54,51, 50,23,22,37,54,53,52,61,1,39,52,39,38,39,38,39, 38,39,38,39,38,7,34,15,1,34,7,6,7,6,7,39, 54,59,1,50,23,22,23,22,23,22,23,22,23,22,23,22, 21,20,15,1,39,1,0,38,17,20,38,15,22,2,1,50, 2,2,17,16,35,21,10,26,40,23,29,92,44,26,66,66, 102,134,64,41,13,7,38,35,20,44,43,55,48,9,10,39, 44,9,8,40,10,10,24,96,42,40,3,8,89,64,75,16, 32,65,9,20,18,11,50,125,97,53,11,12,18,16,16,31, 11,10,11,19,39,30,32,1,169,22,4,5,3,12,40,33, 31,83,30,58,44,49,18,17,24,15,13,65,27,30,51,19, 118,120,38,83,54,35,22,54,69,17,9,26,33,41,4,1, 22,40,12,101,43,21,9,20,30,14,4,4,46,23,1,1, 5,37,18,19,51,31,18,100,59,77,103,81,80,83,54,77, 46,49,27,50,36,9,3,10,47,8,11,41,74,21,30,1, 108,28,95,58,23,64,65,16,30,67,9,41,41,29,24,19, 85,53,12,15,24,44,47,28,29,20,7,2,5,31,29,109, 34,92,34,2,46,29,19,15,12,23,85,33,34,43,14,18, 11,1,1,1,4,7,10,6,30,27,65,16,8,14,24,60, 15,11,26,61,84,92,19,22,84,48,80,66,0,1,0,63, 0,6,3,164,2,92,0,111,0,0,19,52,55,54,51,50, 23,22,23,21,38,39,35,6,7,6,21,23,20,23,22,23, 22,23,22,59,1,54,55,54,55,54,53,38,39,6,7,38, 39,52,55,54,55,54,55,54,51,50,23,22,21,7,20,7, 6,7,6,7,6,35,34,47,1,55,31,1,50,51,55,50, 55,54,55,54,55,52,39,38,39,38,39,38,35,34,7,6, 15,1,20,23,54,55,50,23,22,23,22,21,20,7,6,35, 34,35,39,38,39,38,39,38,39,38,63,93,70,107,38,19, 32,40,73,18,28,146,52,22,1,60,9,11,30,42,40,38, 31,83,20,6,4,45,4,73,16,38,8,1,11,8,34,30, 52,71,57,119,78,69,1,7,8,24,42,54,56,77,21,40, 33,1,47,29,1,1,13,37,26,19,31,57,1,13,22,81, 14,14,33,52,93,50,18,8,3,2,20,23,73,41,6,4, 13,48,71,122,4,4,10,102,19,66,54,17,10,23,1,44, 154,82,62,4,3,13,32,16,1,11,96,41,55,22,80,51, 7,8,22,19,13,14,10,3,3,24,39,74,13,2,12,40, 26,42,28,28,41,29,29,37,90,80,112,52,13,26,43,35, 71,38,36,12,12,20,17,3,1,17,12,31,64,105,77,39, 75,44,7,6,13,67,24,29,45,13,12,6,1,60,9,9, 35,42,63,49,66,2,19,8,25,72,23,22,54,0,0,4, 0,30,255,255,3,14,3,58,0,15,0,34,0,98,0,148, 0,0,19,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,23,20,15,1,55,54,51,54,55,54,55,52,47,1, 34,7,50,23,22,55,20,15,1,34,7,6,21,20,23,22, 51,50,63,1,54,55,54,55,20,23,22,23,22,51,50,55, 54,55,54,55,23,6,7,6,35,34,39,6,7,34,35,34, 39,38,39,52,53,52,55,54,55,35,34,39,38,53,52,55, 54,51,22,23,22,1,54,53,52,61,1,39,52,39,38,39, 38,39,38,39,38,39,38,7,34,15,1,34,7,6,7,6, 7,39,54,59,1,50,23,22,23,22,23,22,23,22,23,22, 23,22,21,20,15,1,39,95,30,11,3,26,10,11,35,11, 3,29,11,60,12,11,124,7,7,30,5,1,3,68,107,17, 14,27,17,8,181,91,34,72,41,44,57,39,87,40,25,14, 43,9,2,1,34,22,35,28,40,66,35,36,41,9,8,40, 11,50,47,104,107,74,50,100,6,6,84,56,48,4,52,12, 18,23,36,16,6,103,19,22,107,26,40,1,103,22,4,5, 3,12,40,33,31,83,30,58,44,49,18,17,24,15,13,65, 27,30,51,19,118,120,38,83,54,35,22,54,69,17,9,26, 33,41,4,1,22,40,12,1,253,28,8,9,32,12,5,31, 9,9,27,13,5,43,33,11,8,20,1,6,17,4,17,30, 11,3,2,28,13,6,73,8,2,37,37,57,80,32,19,16, 10,36,33,6,6,37,25,13,15,9,23,21,70,21,30,1, 127,96,89,95,90,6,71,64,79,10,10,84,53,12,15,37, 15,16,73,14,2,7,12,15,254,241,34,92,34,2,46,29, 19,15,12,23,85,33,34,43,14,18,11,1,1,1,4,7, 10,6,30,27,65,16,8,14,24,60,15,11,26,61,84,92, 19,22,84,48,80,66,0,2,0,35,0,10,2,253,3,58, 0,84,0,126,0,0,19,20,23,22,51,50,55,54,63,1, 54,55,54,55,54,55,51,21,6,49,20,7,6,7,6,7, 6,35,34,39,38,39,38,39,38,47,1,52,55,54,55,54, 55,54,55,39,38,53,52,55,5,52,39,38,35,34,7,6, 7,6,49,7,34,39,38,53,52,55,54,55,23,50,23,22, 23,22,23,22,21,35,34,7,6,7,6,37,38,39,52,39, 38,39,38,39,38,39,38,39,38,7,34,15,1,34,7,6, 7,6,7,39,54,59,1,50,23,22,23,22,23,22,23,22, 23,22,23,22,23,94,204,28,35,49,68,19,32,38,16,22, 67,29,9,8,47,2,9,11,26,39,104,70,100,56,46,51, 57,48,44,46,13,3,2,4,33,5,3,16,29,89,8,30, 1,40,51,32,31,33,11,6,30,8,21,29,9,3,47,34, 25,30,25,54,41,20,2,3,16,71,73,40,66,34,16,2, 114,4,7,5,3,12,40,33,31,83,30,58,44,49,18,17, 24,15,13,65,27,30,51,19,118,120,38,83,54,35,22,54, 69,17,9,43,34,14,5,3,1,1,70,113,45,5,11,4, 12,15,5,15,38,70,21,28,33,12,13,25,40,53,85,68, 43,10,9,25,20,50,49,49,62,20,21,29,35,5,3,13, 12,1,5,12,10,4,1,42,29,18,17,19,13,3,2,24, 7,7,37,16,8,3,3,27,23,33,4,5,31,42,8,8, 41,19,17,86,38,19,15,12,23,85,33,34,43,14,18,11, 1,1,1,4,7,10,6,30,27,65,16,8,14,24,60,15, 11,42,87,33,27,20,95,0,0,4,0,32,0,0,3,103, 3,37,0,14,0,29,0,37,0,140,0,0,1,34,15,1, 22,23,22,51,50,63,2,52,39,38,23,50,23,54,55,52, 39,34,7,6,21,51,50,23,50,39,52,55,54,55,6,15, 1,1,50,23,7,20,7,6,7,6,7,55,22,23,22,21, 6,7,22,23,22,21,20,7,6,15,1,34,39,38,53,52, 55,54,63,1,54,51,23,52,39,38,39,34,7,6,7,6, 35,39,38,39,52,55,54,51,23,50,23,22,23,22,21,7, 38,43,1,34,7,6,21,20,23,22,23,22,23,32,53,52, 47,1,38,39,6,7,34,35,34,39,38,39,35,52,55,54, 55,54,55,54,55,52,55,54,2,110,56,7,1,4,43,16, 18,24,15,27,3,61,12,42,10,26,6,1,93,53,10,5, 39,20,16,18,128,15,4,7,37,16,12,1,87,36,7,3, 10,36,61,121,21,30,25,25,59,1,6,58,17,12,129,98, 84,85,162,117,131,85,25,28,25,34,56,89,50,22,13,15, 24,18,47,33,11,17,21,7,64,36,38,22,48,33,40,19, 9,3,129,9,11,93,50,31,133,28,37,63,98,1,105,27, 19,6,7,23,62,6,5,65,35,11,5,70,15,24,68,61, 124,25,6,31,7,1,216,27,7,44,17,6,11,32,14,34, 8,2,18,8,22,12,67,10,33,15,48,2,3,47,21,5, 9,16,33,33,1,87,39,26,7,10,35,28,57,21,1,2, 12,33,64,16,22,45,41,30,75,113,71,51,6,2,75,84, 137,91,44,13,6,4,6,1,54,22,7,1,9,9,27,13, 2,8,35,37,22,12,1,21,19,46,22,24,39,1,50,31, 43,107,34,7,5,6,1,121,80,32,17,5,4,64,6,56, 19,22,48,30,45,24,56,53,11,49,42,12,3,0,0,2, 0,32,0,0,3,75,3,34,0,11,0,130,0,0,1,50, 55,52,39,38,35,15,1,20,23,22,19,20,15,1,6,7, 6,7,6,7,54,55,50,23,22,21,20,7,6,7,6,35, 34,39,38,39,38,53,52,55,6,7,6,7,51,23,50,23, 22,23,22,23,22,21,20,7,6,35,34,39,38,53,52,55, 54,63,1,54,51,23,38,39,34,7,6,7,6,35,39,38, 39,52,55,54,51,23,50,23,22,23,22,21,20,21,38,43, 1,34,7,6,21,20,23,22,23,22,23,50,55,54,53,52, 39,38,47,1,52,55,54,63,1,54,63,1,54,55,50,23, 22,2,110,48,5,30,11,12,53,1,31,11,233,41,69,47, 16,49,23,6,6,19,22,35,24,13,4,16,30,10,12,30, 14,2,3,30,5,27,20,21,1,65,59,33,28,33,25,66, 19,14,123,112,149,162,117,131,85,25,28,25,34,56,89,5, 80,15,24,18,47,33,11,17,21,7,64,36,38,22,48,33, 29,24,12,129,9,11,93,50,31,133,28,37,63,98,110,46, 195,39,31,59,213,63,21,25,9,58,68,44,22,19,43,18, 6,1,230,52,34,15,5,44,11,32,14,5,1,10,34,16, 10,9,8,16,32,9,12,7,1,37,20,22,15,8,40,8, 2,11,1,3,21,41,14,15,13,24,49,21,1,5,3,17, 43,44,31,43,126,78,70,75,84,137,91,44,13,6,4,6, 1,75,9,9,9,27,13,2,8,35,37,22,12,1,21,14, 37,25,53,8,13,1,50,31,43,107,34,7,5,6,1,7, 20,121,49,39,31,15,2,93,51,17,8,23,126,29,18,6, 1,28,10,0,0,3,0,25,255,48,4,194,2,97,0,33, 0,182,0,217,0,0,37,50,55,54,53,52,39,38,39,38, 35,34,7,6,7,6,7,54,55,50,23,22,23,50,55,54, 55,54,55,54,55,31,1,22,3,50,23,22,23,22,31,1, 54,55,54,55,50,31,1,54,55,50,23,22,23,22,21,20, 15,1,38,35,7,34,7,6,7,6,21,20,23,22,23,22, 23,55,50,63,1,23,7,6,35,34,39,38,53,52,55,54, 55,54,51,63,1,22,23,38,47,1,38,35,34,6,35,34, 39,38,39,38,53,38,35,34,7,6,7,23,50,23,22,23, 22,23,22,21,20,7,6,7,6,15,1,6,35,34,39,38, 53,20,7,6,35,34,39,38,39,38,35,7,6,15,1,39, 54,55,54,55,52,39,38,39,7,6,15,2,6,15,1,20, 7,6,7,6,35,34,39,38,53,52,55,54,1,54,55,54, 55,23,6,7,6,7,6,7,23,22,23,22,23,55,50,55, 54,63,1,21,6,7,34,39,38,39,38,53,52,55,54,1, 213,66,35,20,93,16,21,52,42,29,33,116,87,10,10,11, 30,9,61,18,13,13,6,64,24,3,2,15,1,3,16,35, 205,19,17,45,30,2,10,5,79,92,46,71,83,86,79,28, 97,63,51,51,21,43,1,1,30,45,100,74,54,52,30,18, 12,12,54,73,94,20,8,59,35,10,77,60,73,83,106,135, 69,69,90,37,95,42,58,34,39,8,51,36,28,42,22,82, 16,16,19,3,1,10,81,149,88,51,48,95,35,17,12,26, 33,134,28,6,51,2,1,27,26,30,9,10,21,48,57,46, 31,35,24,28,28,29,19,23,23,3,3,8,27,58,97,49, 75,12,12,23,19,14,12,26,6,1,3,2,10,30,26,7, 8,34,16,6,58,45,3,84,29,109,20,35,10,28,72,4, 3,28,4,1,1,1,15,60,12,8,26,3,2,12,62,59, 20,15,21,34,10,4,5,150,45,25,33,89,58,10,11,27, 10,91,150,19,19,5,5,16,5,2,2,16,39,4,4,37, 13,22,28,61,1,193,5,6,38,3,37,12,70,23,11,7, 20,19,33,4,21,22,20,34,60,9,9,22,7,4,23,24, 62,42,35,29,40,42,30,41,9,1,12,11,18,24,18,56, 69,97,106,57,54,9,4,1,1,2,7,66,20,9,6,60, 24,3,2,14,21,29,20,16,74,1,4,3,16,57,112,26, 28,100,65,2,2,38,9,5,1,30,36,36,48,33,21,25, 26,45,37,9,2,4,22,6,163,104,52,59,12,26,24,8, 1,4,12,30,12,2,55,16,9,10,37,6,1,37,15,16, 80,54,42,253,96,68,46,8,13,18,9,40,2,2,22,42, 25,3,3,51,5,1,9,1,1,6,23,40,3,5,4,39, 17,21,13,9,15,0,0,3,0,38,255,48,4,192,2,97, 0,23,0,143,0,178,0,0,1,52,39,38,47,2,34,7, 6,29,1,22,23,52,63,1,54,55,54,55,54,55,54,37, 50,23,22,23,22,21,20,15,1,38,35,15,1,34,7,6, 7,6,7,6,21,20,23,22,23,22,23,55,50,63,1,23, 7,6,35,34,39,38,53,52,55,54,55,54,51,54,55,50, 23,38,47,1,38,35,34,6,35,34,39,38,35,7,34,7, 6,21,31,1,22,23,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,22,21,20,7,6,7,6,21,20,23,22,23, 22,23,22,59,1,50,55,54,53,52,39,38,35,34,7,52, 55,54,51,50,31,1,54,19,54,55,54,55,23,6,7,6, 7,6,7,23,22,23,22,23,55,50,55,54,63,1,21,6, 7,34,39,38,39,38,53,52,55,54,1,73,33,7,7,22, 19,71,44,47,2,24,3,19,23,30,8,10,73,12,46,2, 145,87,73,16,11,43,1,1,41,42,40,23,15,12,85,42, 60,27,18,12,12,54,73,94,20,8,59,35,10,77,60,73, 83,106,135,67,68,90,38,100,37,27,50,58,8,51,36,28, 42,22,82,16,22,26,48,35,94,75,68,69,23,31,109,4, 99,82,108,127,88,90,50,56,87,18,8,122,66,152,11,6, 10,18,55,42,79,3,4,14,93,64,52,45,26,37,21,18, 73,67,100,78,62,52,30,99,29,109,20,35,10,28,72,4, 3,28,4,1,1,1,15,60,12,8,26,3,2,12,62,59, 20,15,21,34,10,4,5,1,253,31,19,4,2,5,1,65, 62,87,19,31,58,41,18,49,47,18,5,5,19,5,19,133, 44,10,10,34,60,9,9,22,10,2,1,4,12,18,27,58, 42,35,29,40,42,30,41,9,1,12,11,18,24,18,56,69, 97,111,55,56,10,4,2,2,11,66,20,9,6,60,42,12, 4,60,58,79,1,8,32,71,106,66,55,90,92,123,112,91, 101,2,21,80,46,33,69,47,31,21,27,24,54,25,19,7, 1,47,38,53,34,21,12,4,133,87,79,17,13,36,253,87, 68,46,8,13,18,9,40,2,2,22,42,25,3,3,51,5, 1,9,1,1,6,23,40,3,5,4,39,17,21,13,9,15, 0,2,0,43,0,0,3,6,3,58,0,49,0,97,0,0, 19,20,33,50,55,54,55,54,55,54,55,51,20,7,6,15, 1,6,7,6,7,34,35,34,39,38,61,1,55,52,55,54, 55,54,59,1,22,23,22,23,21,38,35,34,7,6,7,6, 7,6,37,54,53,52,39,52,39,38,39,38,39,38,47,1, 38,39,38,39,38,7,34,15,1,34,7,6,7,6,7,39, 54,59,1,50,23,22,23,22,23,22,23,22,23,22,21,7, 20,7,92,1,32,81,58,38,48,39,29,35,11,47,12,19, 39,4,13,21,115,151,4,5,104,106,130,1,10,46,94,20, 24,31,21,23,40,17,47,59,48,33,25,18,15,17,16,2, 115,9,2,5,3,12,22,16,28,36,16,28,42,30,58,44, 49,18,17,24,15,13,65,27,30,51,19,118,120,38,83,54, 35,22,53,71,16,9,30,31,36,3,10,1,58,148,19,10, 30,21,36,47,51,45,36,68,64,7,20,21,115,4,56,67, 99,31,66,15,24,107,17,4,1,3,7,10,25,19,12,9, 17,13,30,33,22,37,41,21,19,19,15,12,23,47,25,46, 27,12,18,22,14,18,11,1,1,1,4,7,10,6,30,27, 65,16,8,14,24,61,14,10,33,59,72,28,64,21,40,0, 0,2,0,28,0,0,3,18,3,42,0,88,0,105,0,0, 55,34,39,38,47,1,52,55,54,55,54,55,21,34,7,6, 7,6,21,20,31,1,22,51,50,55,54,55,54,53,20,23, 22,23,22,23,22,51,50,55,54,55,54,61,1,38,39,6, 7,6,35,34,39,38,39,38,53,52,55,38,39,38,47,1, 22,23,22,23,22,23,22,29,1,7,6,7,6,7,6,7, 6,35,34,39,38,39,15,1,6,19,22,23,22,51,50,55, 54,55,54,55,38,39,38,39,7,6,247,108,65,31,12,3, 91,40,50,38,35,25,42,33,50,65,82,44,21,24,66,59, 11,14,13,30,4,5,36,33,23,35,83,49,29,4,6,13, 53,26,42,35,30,41,36,46,15,4,34,39,11,4,2,6, 34,120,51,48,75,45,44,4,10,16,22,55,19,18,36,54, 42,24,37,40,7,14,54,97,8,56,28,34,29,36,24,7, 1,2,68,124,4,5,12,12,1,109,53,67,42,121,72,32, 14,7,2,22,10,4,49,60,73,84,49,20,6,62,11,26, 42,26,64,32,4,5,36,12,9,58,33,42,57,33,36,86, 65,31,19,13,21,29,56,17,17,49,59,19,16,6,7,19, 14,66,30,42,68,82,82,95,29,31,80,36,52,51,18,10, 24,18,28,70,17,21,77,2,142,72,31,16,15,14,7,2, 2,86,62,3,2,25,29,0,0,2,0,30,0,0,3,14, 3,58,0,77,0,127,0,0,37,20,7,6,35,34,39,38, 53,52,55,54,55,35,53,33,52,39,38,39,38,39,38,35, 34,7,6,35,34,39,38,53,52,55,54,51,50,23,22,21, 7,39,34,7,6,21,23,22,23,22,31,1,50,55,54,53, 20,23,22,59,1,55,50,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,37,54,53,52,61,1,39,52,39,38, 39,38,39,38,39,38,39,38,7,34,15,1,34,7,6,7, 6,7,39,54,59,1,50,23,22,23,22,23,22,23,22,23, 22,23,22,21,20,15,1,39,1,127,64,43,48,83,57,58, 14,16,48,72,1,70,26,3,3,23,18,9,12,29,33,36, 28,13,15,11,72,19,22,21,6,145,1,213,51,30,13,3, 17,124,10,11,24,53,32,27,56,21,30,26,28,66,35,36, 41,9,8,40,8,56,15,56,44,60,71,48,36,1,68,22, 4,5,3,12,40,33,31,83,30,58,44,49,18,17,24,15, 13,65,27,30,51,19,118,120,38,83,54,35,22,54,69,17, 9,26,33,41,4,1,22,40,12,115,55,36,24,72,73,95, 59,37,34,34,27,47,30,3,3,23,3,1,37,36,12,14, 16,57,15,4,2,15,133,37,1,60,39,24,27,87,20,2, 1,1,32,27,29,50,23,6,1,23,21,70,21,30,1,118, 106,32,34,23,43,32,175,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,2,0,19,0,0,3,22,3,42,0,113, 0,130,0,0,37,50,55,54,63,1,54,53,20,23,22,23, 22,23,22,23,50,55,54,61,1,38,39,6,7,6,35,34, 39,38,39,38,53,52,55,38,39,38,47,1,22,23,22,23, 22,23,22,29,1,7,6,7,6,7,6,7,6,35,34,39, 38,39,20,7,6,35,34,47,1,38,53,52,55,54,63,1, 35,34,53,52,51,33,52,39,38,35,34,15,2,34,39,38, 39,52,55,54,55,50,23,22,23,22,21,7,34,7,6,7, 6,21,20,23,22,19,22,23,22,51,50,55,54,55,54,55, 38,39,38,39,7,6,1,6,67,32,8,10,20,13,9,35, 25,10,12,33,35,152,13,6,13,53,26,42,35,30,41,36, 46,15,4,34,39,11,4,2,6,34,120,51,48,75,45,44, 4,10,15,21,49,37,22,36,40,93,37,10,7,43,42,74, 55,40,14,110,23,12,25,31,85,18,17,1,54,26,23,41, 24,26,50,22,39,10,2,1,57,22,21,55,31,68,32,13, 161,46,55,12,7,22,92,40,225,8,56,28,34,29,36,24, 7,1,2,68,124,4,5,12,12,145,25,6,10,24,31,24, 28,18,40,12,5,4,8,2,131,60,32,36,86,65,31,19, 13,21,29,56,17,17,49,59,19,16,6,7,19,14,66,30, 42,68,82,82,95,29,31,80,37,54,40,30,13,17,61,18, 43,48,36,36,22,9,65,132,85,37,19,25,25,22,20,28, 17,20,13,22,3,33,4,5,31,21,8,2,11,16,67,32, 36,1,51,12,9,35,44,87,33,15,1,254,72,31,16,15, 14,7,2,2,86,62,3,2,25,29,0,5,0,15,255,255, 4,244,3,50,0,126,0,142,0,189,0,207,0,216,0,0, 37,20,7,6,35,34,39,38,53,55,6,7,6,7,6,35, 34,39,38,47,1,38,39,34,39,35,34,15,1,38,39,54, 55,54,63,1,39,52,55,52,55,54,51,50,23,22,23,37, 22,23,20,7,6,7,6,7,6,15,1,22,23,22,23,22, 23,54,55,54,51,50,23,22,23,54,51,50,31,1,7,20, 7,6,35,34,39,38,53,55,20,23,22,51,50,55,54,53, 39,53,52,39,38,39,38,47,2,34,7,6,7,52,39,38, 39,38,35,34,7,6,7,6,21,54,51,50,23,22,7,52, 39,38,35,34,7,6,21,20,23,22,51,50,55,54,37,52, 55,54,51,50,23,22,23,20,7,6,35,39,38,39,38,39, 38,39,7,50,23,22,23,22,23,22,51,50,55,54,55,54, 53,52,39,38,39,5,22,23,22,23,38,39,38,55,52,39, 38,39,38,35,34,7,6,21,20,23,22,51,50,55,54,55, 38,39,34,7,6,21,23,21,3,197,48,25,32,59,34,20, 1,33,33,26,53,66,90,69,58,39,63,51,29,34,6,9, 6,17,6,30,3,12,11,71,15,6,91,5,1,70,63,94, 58,25,29,63,2,67,15,3,22,2,46,91,126,54,167,56, 59,19,8,5,7,6,38,96,3,3,47,30,30,32,36,68, 59,40,42,2,50,26,33,72,26,11,20,32,16,23,61,4, 1,1,18,7,10,19,9,13,20,57,21,4,4,24,27,54, 9,12,49,43,4,3,32,36,45,62,36,21,31,44,22,26, 25,24,20,42,21,24,30,22,22,253,186,42,23,26,34,29, 32,4,52,27,35,55,49,45,8,5,14,27,135,31,35,50, 71,27,21,54,49,127,76,55,10,4,22,19,51,254,163,16, 69,30,35,46,8,3,155,34,9,10,6,5,35,16,6,33, 14,17,34,16,7,63,50,92,112,48,26,1,223,56,30,16, 44,28,35,11,98,38,31,33,40,40,26,74,59,25,5,1, 2,13,4,16,26,44,9,4,54,49,5,4,79,54,48,4, 3,33,248,22,30,24,21,2,27,41,25,12,55,18,48,31, 13,13,20,38,84,14,1,11,9,35,59,46,113,210,64,32, 16,79,31,38,4,54,29,16,108,12,14,59,25,90,33,12, 11,19,3,4,2,70,13,17,29,33,34,3,1,42,3,4, 41,50,33,49,29,34,45,25,12,24,29,25,45,25,12,22, 31,136,45,25,13,23,25,51,57,28,16,3,8,35,6,6, 17,47,79,20,28,23,8,8,14,70,50,42,15,17,59,37, 37,37,166,69,30,13,2,19,29,12,21,36,18,5,2,1, 31,13,15,37,18,7,33,12,238,23,3,63,33,46,41,4, 0,2,0,33,0,0,3,141,2,82,0,102,0,125,0,0, 19,34,15,2,20,7,6,35,34,39,38,53,52,55,54,55, 54,51,50,23,22,23,22,23,54,55,54,55,50,51,23,50, 23,50,23,22,23,22,21,20,7,6,7,6,43,1,34,47, 1,23,51,50,55,54,55,54,55,54,53,52,39,38,39,38, 39,38,35,34,7,6,7,23,50,31,1,22,23,22,21,20, 7,6,35,34,39,38,47,1,38,39,7,39,54,55,54,63, 1,54,55,52,39,38,3,50,23,22,23,22,31,1,51,50, 55,54,53,52,39,38,47,1,34,7,6,7,6,225,33,23, 7,3,5,18,51,20,18,14,34,43,81,5,17,43,23,7, 11,13,5,47,53,57,65,6,6,44,24,15,33,37,167,32, 8,52,18,26,79,65,13,17,18,6,15,16,35,20,58,27, 7,3,5,36,39,86,37,38,40,48,66,41,20,17,66,14, 15,29,115,41,36,57,69,112,101,78,14,15,58,24,28,24, 24,63,84,15,13,62,2,1,19,17,141,12,33,33,26,30, 24,42,33,154,51,20,113,29,45,44,13,13,71,84,31,2, 30,46,13,68,10,8,48,18,20,24,55,49,60,16,1,26, 8,15,21,30,48,25,28,1,1,4,16,62,139,36,42,123, 66,23,22,59,5,24,1,7,18,57,14,15,30,46,95,57, 65,45,19,9,10,26,11,17,3,4,8,33,50,42,64,84, 78,96,59,10,13,50,15,3,42,12,129,106,18,15,73,8, 15,20,18,20,254,146,14,14,19,19,6,6,89,35,48,92, 44,12,12,3,2,65,118,43,0,2,0,37,255,252,2,240, 3,39,0,58,0,71,0,0,1,52,55,39,38,39,22,23, 22,23,22,23,22,21,16,7,6,35,34,39,38,53,52,55, 54,55,54,51,23,50,23,7,38,39,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,39,6,7,6,35,34,39, 38,39,38,23,22,51,50,55,38,39,38,39,6,21,20,23, 1,150,48,31,9,4,85,70,48,71,20,23,25,219,61,78, 146,97,114,46,56,48,26,40,25,8,18,6,19,20,114,41, 18,127,89,93,171,87,61,7,6,23,39,62,20,16,81,42, 1,2,9,76,42,44,41,44,56,11,41,69,26,21,2,129, 54,64,19,10,19,18,58,38,95,27,54,68,49,254,192,66, 18,62,72,130,111,52,63,14,7,1,6,27,6,2,103,45, 60,68,41,28,89,63,96,61,29,36,39,34,14,5,89,3, 4,26,32,45,38,84,9,44,32,35,43,46,26,0,0,2, 0,28,255,48,2,77,2,95,0,70,0,104,0,0,1,6, 7,6,7,6,7,6,21,20,23,22,23,22,23,55,50,63, 1,23,7,6,35,34,39,38,53,52,55,54,59,1,55,22, 23,50,23,38,39,38,39,38,35,34,6,35,34,39,38,39, 38,53,54,63,2,50,23,22,23,22,23,7,38,39,38,35, 6,7,39,38,3,54,55,54,55,23,6,15,1,6,7,23, 22,23,22,23,55,50,55,54,63,1,21,6,7,34,39,38, 39,38,53,52,55,54,1,155,109,35,26,21,8,8,19,12, 12,54,73,94,20,8,59,35,10,77,60,73,83,106,135,66, 86,206,24,47,80,18,2,2,8,51,16,20,28,42,22,82, 16,16,20,2,1,10,3,40,42,50,64,50,53,18,40,4, 3,69,23,28,12,7,12,13,11,54,29,109,20,35,10,28, 72,7,28,4,1,1,1,15,60,12,8,26,3,2,12,62, 59,20,15,21,34,10,4,5,1,166,19,22,16,31,11,15, 47,32,29,40,42,30,41,9,1,12,11,18,24,18,56,69, 97,109,57,71,1,10,6,1,66,20,6,3,6,60,25,3, 1,14,21,23,18,12,4,22,24,17,33,59,42,11,2,2, 13,1,4,7,254,17,68,46,8,13,18,9,40,4,22,42, 25,3,3,51,5,1,9,1,1,6,23,40,3,5,4,39, 17,21,13,9,15,0,0,2,0,32,0,0,3,14,3,58, 0,53,0,103,0,0,55,50,55,54,55,22,23,22,51,50, 55,54,55,54,55,23,21,7,6,7,6,35,34,39,38,47, 2,6,7,6,7,6,35,34,39,38,53,52,55,54,51,55, 22,31,1,35,34,7,6,21,20,23,22,37,54,53,52,61, 1,39,52,39,38,39,38,39,38,39,38,39,38,7,34,15, 1,34,7,6,7,6,7,39,54,59,1,50,23,22,23,22, 23,22,23,22,23,22,23,22,21,20,15,1,39,220,107,63, 8,9,34,34,31,36,66,35,36,41,9,8,41,10,25,30, 47,101,37,22,23,33,26,19,29,16,20,34,39,36,87,56, 56,80,53,93,34,7,7,2,45,146,36,11,58,40,2,27, 22,4,5,3,12,40,33,31,83,30,58,44,49,18,17,24, 15,13,65,27,30,51,19,118,120,38,83,54,35,22,54,69, 17,9,26,33,41,4,1,22,40,12,150,73,10,12,46,28, 22,23,21,70,21,30,1,32,48,94,50,89,9,9,24,27, 36,51,15,18,14,7,74,74,96,190,64,41,1,1,1,27, 121,36,44,79,48,33,100,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,2,0,31,0,2,3,130,2,87,0,116, 0,138,0,0,55,54,55,54,63,1,54,55,54,53,39,38, 35,34,7,6,21,20,23,20,7,6,7,6,35,34,47,1, 52,55,54,55,54,55,54,59,1,22,31,1,22,23,54,55, 54,55,54,55,50,23,22,23,22,23,20,7,6,7,6,7, 6,15,1,34,39,55,22,59,1,54,55,54,55,54,55,52, 39,38,35,34,15,1,6,7,55,50,23,22,23,22,23,22, 31,1,20,15,1,6,7,6,7,6,7,6,35,7,34,39, 38,39,38,39,38,39,22,23,22,1,7,6,15,1,6,7, 31,1,51,50,55,54,55,54,55,54,53,38,39,38,39,120, 14,16,16,30,55,9,7,9,2,12,43,35,26,4,4,5, 9,12,10,21,45,20,5,48,32,49,8,10,18,19,12,42, 20,6,11,6,36,65,27,34,18,74,95,93,120,16,7,1, 50,10,13,26,31,2,3,32,76,31,10,27,45,11,52,16, 7,4,8,2,81,85,140,36,20,73,34,16,64,27,27,73, 36,13,18,25,7,2,2,12,17,63,10,31,77,27,9,10, 71,56,34,32,47,9,22,17,29,53,22,3,1,16,42,94, 54,7,35,8,74,32,29,93,47,15,20,70,19,12,7,81, 17,23,126,64,45,51,57,76,14,14,23,15,18,37,56,12, 17,16,24,15,10,20,12,13,45,29,49,55,39,17,2,3, 6,5,24,8,22,50,49,30,16,8,5,10,45,60,115,61, 55,121,65,13,13,30,13,1,1,4,48,6,30,11,33,15, 22,46,55,126,81,85,3,24,18,18,7,9,16,36,14,24, 49,28,55,14,13,38,50,39,6,18,23,3,2,2,12,12, 30,7,25,19,49,30,2,1,1,27,3,16,106,15,110,39, 18,2,22,7,12,40,34,23,27,93,34,7,6,0,0,3, 0,26,255,21,2,70,2,108,0,45,0,78,0,118,0,0, 1,50,23,22,23,22,23,21,20,7,38,39,34,7,6,7, 6,21,20,23,22,23,22,51,63,1,15,1,6,35,38,39, 38,47,1,38,39,38,53,52,55,54,55,54,55,54,23,34, 39,38,39,38,39,6,7,6,21,20,23,54,55,54,51,23, 51,23,50,23,54,53,52,39,38,39,38,39,34,7,6,19, 54,55,54,55,23,6,7,6,7,6,21,20,23,22,23,22, 51,50,55,54,63,1,50,55,52,63,1,21,6,7,34,39, 38,39,38,55,52,55,54,1,87,89,68,48,17,9,7,2, 59,60,47,30,149,25,6,41,56,96,18,18,40,90,5,86, 57,59,75,8,81,21,6,83,29,26,29,6,10,40,92,68, 10,27,17,2,3,10,8,57,42,35,2,100,115,39,43,38, 22,15,21,70,3,23,19,30,9,26,22,76,38,13,33,107, 25,53,11,35,86,7,13,16,4,8,36,15,25,16,13,3, 2,9,3,2,17,6,68,68,23,17,22,40,12,1,4,6, 2,108,47,28,30,17,26,47,5,6,11,2,10,48,88,20, 22,74,48,71,13,2,2,20,18,22,13,4,3,22,11,4, 48,56,52,92,83,61,13,18,75,45,33,130,22,3,4,18, 1,12,67,55,59,18,6,116,25,8,1,4,15,4,7,17, 26,26,18,6,4,46,22,253,196,74,47,11,20,20,12,48, 5,19,29,29,14,11,37,16,10,4,1,1,2,1,1,6, 4,26,45,4,6,4,44,19,25,14,10,17,0,2,0,32, 0,0,3,58,2,105,0,82,0,97,0,0,19,52,55,54, 63,1,54,51,23,52,39,38,39,34,7,6,7,6,35,39, 38,39,52,55,54,51,23,50,23,22,23,22,21,7,38,43, 1,34,7,6,21,20,23,22,23,22,23,50,55,54,53,52, 39,38,47,2,52,55,54,55,54,59,1,23,50,31,1,22, 23,22,21,20,7,22,23,20,7,6,35,34,39,38,1,34, 7,6,21,63,1,50,63,1,52,39,38,39,38,32,85,25, 28,25,34,56,89,50,22,13,15,24,18,47,33,11,17,21, 7,64,36,38,22,48,33,40,19,9,3,129,9,11,93,50, 31,133,28,37,63,98,110,46,195,39,31,59,213,3,22,3, 2,58,91,28,18,7,10,26,39,18,8,47,98,1,123,112, 149,162,117,131,2,78,75,52,11,100,96,44,10,2,25,9, 3,37,1,40,91,44,13,6,4,6,1,54,22,7,1,9, 9,27,13,2,8,35,37,22,12,1,21,19,46,22,24,39, 1,50,31,43,107,34,7,5,6,1,7,20,121,49,39,31, 15,2,32,27,36,6,4,82,5,5,11,18,40,17,17,45, 24,35,126,126,78,70,75,84,1,167,73,20,28,1,2,30, 13,21,19,8,2,25,0,2,0,37,255,252,2,240,3,39, 0,79,0,92,0,0,1,52,55,38,47,1,22,23,22,23, 22,23,22,21,16,7,6,35,34,39,38,53,52,55,54,55, 54,55,23,50,23,52,39,38,47,1,34,7,6,35,34,39, 38,47,1,52,55,54,51,50,23,39,6,7,34,7,6,21, 23,22,23,22,51,50,55,54,53,52,39,38,39,6,7,6, 35,34,39,38,39,38,23,22,51,50,55,38,39,38,39,6, 21,20,23,1,150,48,31,8,5,85,70,48,71,20,23,25, 219,61,78,143,100,114,139,28,32,27,15,37,16,10,15,14, 33,14,15,52,26,21,34,9,3,3,1,61,24,25,146,17, 76,17,16,72,55,53,1,12,99,54,144,171,87,61,7,6, 23,39,62,20,16,81,42,1,2,9,76,42,44,41,44,56, 11,41,69,26,21,2,129,54,64,19,11,18,18,58,38,95, 27,54,68,49,254,192,66,18,67,75,122,139,51,10,6,1, 1,1,2,27,24,23,11,1,35,16,19,7,9,12,39,16, 7,172,1,1,1,42,39,67,15,91,31,15,89,63,96,61, 29,36,39,34,14,5,89,3,4,26,32,45,38,84,9,44, 32,35,43,46,26,0,0,3,0,32,255,255,3,14,3,58, 0,15,0,100,0,150,0,0,37,52,39,38,35,34,7,6, 21,20,23,22,51,50,55,54,55,20,7,6,43,1,39,22, 23,22,51,55,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,39,38,39,38,39,53,55,22,55,50, 55,54,53,52,39,38,35,34,7,6,15,1,20,23,22,23, 52,55,54,51,50,23,22,21,20,7,6,35,34,39,38,39, 38,39,52,53,54,55,54,55,54,51,50,23,22,23,54,53, 52,61,1,39,52,39,38,39,38,39,38,39,38,39,38,7, 34,15,1,34,7,6,7,6,7,39,54,59,1,50,23,22, 23,22,23,22,23,22,23,22,23,22,21,20,15,1,39,1, 13,35,17,18,29,14,19,34,17,19,35,19,8,250,77,20, 24,11,20,17,46,44,50,31,58,46,16,45,4,11,1,1, 40,12,34,8,10,71,98,68,37,37,19,1,3,39,4,4, 16,25,12,12,55,63,40,82,67,64,66,4,3,28,2,1, 39,25,30,56,32,18,46,25,31,39,25,22,28,50,4,2, 47,13,18,66,94,109,73,65,188,22,4,5,3,12,40,33, 31,83,30,58,44,49,18,17,24,15,13,65,27,30,51,19, 118,120,38,83,54,35,22,54,69,17,9,26,33,41,4,1, 22,40,12,97,36,21,10,18,25,22,35,22,10,33,15,194, 95,23,6,2,27,22,22,3,9,61,22,87,6,40,3,2, 1,140,58,14,12,88,12,12,21,2,3,44,39,30,24,9, 1,2,18,56,48,20,10,30,30,28,35,34,71,5,3,49, 32,20,43,25,31,52,31,17,14,13,33,63,73,7,7,116, 63,17,16,63,67,59,109,34,92,34,2,46,29,19,15,12, 23,85,33,34,43,14,18,11,1,1,1,4,7,10,6,30, 27,65,16,8,14,24,60,15,11,26,61,84,92,19,22,84, 48,80,66,0,0,1,0,28,0,0,3,115,2,94,0,98, 0,0,1,20,7,6,35,34,39,55,23,22,49,23,50,55, 54,53,52,39,38,39,38,47,1,34,7,6,21,22,23,22, 21,20,7,6,7,6,35,34,39,38,53,52,55,35,34,39, 52,55,33,52,39,48,39,38,39,38,35,7,6,7,6,35, 34,39,38,53,52,55,54,51,50,23,22,23,22,31,1,7, 34,7,6,21,20,23,22,51,50,55,54,53,52,35,52,55, 54,51,50,23,22,3,115,156,33,39,37,71,8,34,30,35, 78,47,34,31,26,45,35,46,33,86,49,33,46,18,46,111, 41,51,22,24,104,78,80,98,80,11,3,14,1,50,8,10, 15,29,8,8,13,29,26,31,22,34,11,2,46,20,23,63, 39,45,22,8,2,4,172,45,45,47,71,68,100,98,54,34, 92,52,63,107,190,51,18,1,35,238,44,9,34,24,16,10, 6,75,54,69,78,54,45,27,21,9,3,51,34,47,10,15, 37,92,106,45,16,6,2,78,79,98,120,59,15,14,2,17, 24,20,28,9,3,2,6,32,31,31,8,8,37,19,8,17, 18,46,17,18,52,1,57,57,70,51,36,37,43,27,38,61, 107,85,104,171,57,0,0,3,0,29,0,0,2,253,3,54, 0,15,0,128,0,170,0,0,1,52,39,38,35,34,15,1, 20,23,22,51,55,54,55,54,7,34,39,38,39,52,55,54, 51,50,23,22,23,22,23,22,21,20,15,1,6,7,6,7, 6,35,34,39,38,53,54,55,54,63,1,52,39,38,35,34, 7,6,7,6,29,1,20,23,22,23,22,51,50,55,54,55, 54,63,1,54,55,23,21,6,49,20,7,6,15,1,6,7, 6,7,34,35,34,39,38,39,38,39,52,55,54,55,54,51, 50,23,22,21,20,7,6,21,20,23,22,51,50,55,54,53, 52,39,22,23,22,21,20,7,6,51,52,39,52,39,38,39, 38,39,38,39,38,39,38,7,34,15,1,34,7,6,7,6, 7,39,54,59,1,50,23,22,23,22,23,22,23,22,23,22, 23,22,21,1,232,40,14,17,32,23,20,34,19,22,11,40, 15,5,75,57,30,8,4,73,15,19,35,37,1,3,75,24, 9,6,3,7,18,32,51,40,66,93,63,47,2,30,16,6, 2,13,11,24,17,27,21,20,26,12,31,95,83,83,81,58, 38,48,39,29,11,9,21,51,2,9,19,39,4,13,21,115, 151,4,5,87,112,120,21,12,2,52,27,40,17,14,34,29, 23,27,21,82,35,42,111,48,30,71,12,8,1,20,29,247, 4,5,3,12,40,33,31,83,30,58,44,49,18,17,24,15, 13,65,27,30,51,19,118,120,38,83,54,35,22,54,69,17, 9,43,34,14,5,6,1,218,51,18,7,20,50,40,24,12, 1,4,39,12,88,55,15,18,100,21,4,17,1,1,32,59, 25,19,31,15,7,20,21,41,21,15,41,31,43,37,44,22, 12,14,13,17,20,17,18,27,44,53,44,13,24,63,45,40, 19,10,30,21,36,19,16,66,1,33,12,13,25,68,64,7, 20,21,115,4,67,72,83,56,68,106,78,39,18,7,32,24, 29,30,32,27,22,63,25,10,60,40,43,62,26,9,41,5, 4,29,29,42,91,20,19,15,12,23,85,33,34,43,14,18, 11,1,1,1,4,7,10,6,30,27,65,16,8,14,24,60, 15,11,42,87,33,27,68,48,0,3,0,31,0,0,3,14, 3,58,0,14,0,160,0,210,0,0,1,52,39,38,35,34, 15,1,20,23,22,51,50,55,54,19,23,51,55,54,55,54, 55,54,55,23,6,7,6,7,6,7,34,35,34,39,38,53, 52,63,2,54,55,52,35,7,35,34,7,6,21,20,23,22, 23,22,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 51,50,31,1,7,20,23,22,51,50,55,54,53,38,47,1, 22,23,20,7,6,35,34,39,38,53,52,55,54,51,50,23, 22,21,20,7,6,35,34,39,38,47,1,54,55,54,53,52, 39,38,39,38,35,34,7,6,21,20,23,22,31,1,22,51, 50,55,54,53,52,39,38,53,52,55,54,63,1,50,23,50, 23,22,21,20,7,6,7,22,23,22,55,54,53,52,61,1, 39,52,39,38,39,38,39,38,39,38,39,38,7,34,15,1, 34,7,6,7,6,7,39,54,59,1,50,23,22,23,22,23, 22,23,22,23,22,23,22,21,20,15,1,39,1,230,29,15, 16,28,20,21,33,13,14,42,19,8,11,37,1,15,63,33, 29,45,9,8,40,11,53,22,41,40,41,4,10,48,39,40, 17,4,36,6,2,56,20,14,39,20,19,25,3,1,24,4, 7,46,47,55,115,57,38,68,47,71,48,26,5,14,4,38, 85,78,41,22,5,25,19,8,2,43,21,26,55,23,11,79, 19,19,56,41,31,71,44,54,49,47,48,15,1,1,6,9, 19,4,3,10,19,97,31,12,63,15,20,46,39,34,35,25, 9,32,32,45,9,9,49,37,29,19,17,20,31,29,3,4, 6,20,215,22,4,5,3,12,40,33,31,83,30,58,44,49, 18,17,24,15,13,65,27,30,51,19,118,120,38,83,54,35, 22,54,69,17,9,26,33,41,4,1,22,40,12,1,248,34, 19,10,20,48,39,16,6,35,14,254,159,1,4,10,24,21, 71,21,30,1,127,97,41,24,23,1,36,36,52,27,22,5, 21,5,7,30,1,5,3,26,11,13,1,1,22,8,11,15, 52,34,36,121,80,110,149,78,55,41,19,57,10,7,84,40, 22,29,50,19,11,20,22,52,26,13,43,18,24,60,33,6, 50,37,43,73,40,24,37,38,53,22,13,12,19,6,13,12, 2,1,3,140,54,68,84,40,10,9,18,12,13,14,3,9, 17,15,20,35,13,3,1,3,5,14,12,23,18,18,15,11, 11,6,5,114,34,92,34,2,46,29,19,15,12,23,85,33, 34,43,14,18,11,1,1,1,4,7,10,6,30,27,65,16, 8,14,24,60,15,11,26,61,84,92,19,22,84,48,80,66, 0,2,0,44,0,2,3,61,2,97,0,98,0,110,0,0, 19,50,23,22,23,6,7,21,54,49,38,34,7,6,21,20, 23,22,59,1,54,49,50,55,54,55,54,63,1,51,23,22, 23,22,23,22,51,54,55,54,63,1,52,39,38,39,38,47, 1,38,39,38,43,1,53,54,55,54,51,50,23,22,21,20, 15,1,31,1,22,21,20,7,6,7,6,15,2,34,39,38, 47,1,38,39,6,15,1,6,15,1,39,34,39,38,53,52, 55,54,37,34,7,51,50,31,1,54,55,52,39,38,254,53, 45,7,13,25,4,18,45,108,57,63,49,54,75,33,12,16, 20,49,19,3,2,10,8,3,3,15,15,46,45,53,90,33, 23,15,1,41,1,2,32,1,27,3,4,30,35,134,10,66, 55,59,92,35,14,29,21,17,23,38,7,6,24,46,69,47, 50,49,41,6,7,27,11,3,2,22,21,34,56,29,21,8, 17,182,55,61,1,227,109,34,130,26,66,11,29,4,2,17, 2,0,29,4,9,29,7,2,16,36,51,55,71,53,49,56, 2,9,17,42,7,7,59,35,17,26,29,21,18,9,43,30, 67,17,41,42,1,2,26,1,11,1,1,10,35,52,40,34, 54,22,29,51,21,12,14,32,69,61,51,25,28,37,70,19, 8,2,39,5,7,37,20,28,18,36,26,40,15,3,1,7, 49,206,101,70,76,60,97,26,2,9,38,14,4,60,0,2, 0,26,255,253,2,253,3,105,0,51,0,87,0,0,55,38, 39,38,39,52,63,1,54,55,54,63,1,54,55,54,63,1, 50,23,15,1,6,7,6,7,6,7,51,50,23,50,23,22, 23,22,23,22,21,20,7,6,7,6,7,6,7,6,35,39, 38,39,55,50,55,54,55,54,55,54,53,55,52,47,1,38, 39,38,39,35,34,7,6,15,1,6,7,6,7,20,23,22, 23,22,23,22,23,22,72,15,17,12,2,162,195,32,26,69, 21,81,15,15,26,28,21,35,12,1,9,12,25,46,68,120, 88,32,17,10,56,84,14,8,67,30,15,50,12,18,45,65, 13,14,41,68,67,96,54,185,94,44,15,19,72,21,39,1, 112,44,12,12,40,38,29,63,37,42,45,38,45,26,14,2, 12,11,20,2,3,34,74,74,130,20,34,38,34,174,87,91, 16,16,45,20,79,15,22,36,12,4,38,24,29,31,26,49, 33,48,19,2,40,7,5,41,84,42,43,104,70,17,21,54, 26,5,3,15,3,9,24,97,19,7,12,42,23,39,55,20, 108,52,17,3,3,7,1,10,9,25,22,27,54,38,37,29, 33,31,17,2,2,22,26,24,0,1,0,31,255,98,2,249, 2,84,0,94,0,0,1,20,35,38,39,38,39,38,53,52, 55,39,34,39,54,55,31,1,50,23,20,7,39,6,21,22, 31,2,50,53,52,39,38,35,34,7,6,7,6,21,20,23, 22,23,22,23,22,51,50,55,54,55,54,55,54,55,52,39, 38,39,55,22,23,6,7,6,7,6,15,1,6,35,39,38, 39,38,39,38,39,38,53,54,55,54,55,54,55,54,55,54, 51,50,23,22,2,183,184,71,21,18,15,30,28,76,18,2, 12,7,230,17,5,3,25,120,31,3,62,44,38,142,61,59, 150,118,73,7,8,30,17,14,56,49,54,68,46,47,50,54, 43,42,12,7,1,40,6,3,19,53,9,4,25,12,27,49, 82,44,38,31,33,95,44,60,45,80,31,30,4,12,9,16, 36,78,42,38,54,72,186,58,59,1,137,125,3,8,6,13, 24,38,31,28,1,15,11,2,1,3,10,11,4,1,12,36, 35,9,5,1,91,88,33,34,115,12,14,55,102,86,44,46, 74,65,22,25,10,9,42,41,29,18,21,35,62,10,5,20, 79,71,45,42,20,25,55,17,8,6,1,16,27,33,47,82, 58,60,76,97,34,25,23,62,53,28,12,20,41,39,0,2, 0,42,0,0,2,254,3,58,0,79,0,124,0,0,19,20, 23,22,51,50,55,54,55,54,55,54,55,51,21,6,49,20, 7,6,15,1,6,7,6,7,34,35,34,39,38,61,1,54, 55,54,55,54,55,54,55,54,51,55,52,39,38,35,34,7, 6,7,6,49,7,34,39,38,53,52,55,54,55,23,50,23, 22,23,22,23,22,21,35,34,7,6,7,6,7,6,37,38, 53,52,55,39,52,39,38,39,38,39,38,39,38,39,38,7, 34,15,1,34,7,6,7,6,7,39,54,59,1,50,23,22, 23,22,23,22,23,22,23,22,23,22,21,92,228,28,32,81, 58,61,61,20,12,27,18,47,2,9,19,39,4,13,21,115, 151,4,5,104,106,130,4,9,3,23,15,50,3,2,49,38, 122,51,32,31,33,11,6,30,8,21,29,9,3,47,34,25, 30,25,54,41,20,2,3,16,71,73,40,61,29,6,6,16, 2,120,15,1,1,5,3,12,40,33,31,83,30,58,44,49, 18,17,24,15,13,65,27,30,51,19,118,120,38,83,54,35, 22,54,69,17,9,26,33,41,4,1,1,58,130,16,2,19, 15,50,17,15,36,64,33,12,13,25,68,64,7,20,21,115, 4,56,67,99,71,53,18,7,25,16,23,2,1,14,1,42, 29,18,17,19,13,3,2,24,7,7,37,16,8,3,3,27, 23,33,4,5,31,42,8,8,32,7,8,22,19,46,50,12, 12,11,19,15,12,23,85,33,34,43,14,18,11,1,1,1, 4,7,10,6,30,27,65,16,8,14,24,60,15,11,26,61, 84,92,19,22,0,2,0,31,255,255,3,109,2,88,0,18, 0,122,0,0,37,54,55,38,35,7,6,7,6,7,6,21, 20,31,1,55,51,50,23,3,34,7,6,7,50,23,22,23, 22,23,22,21,20,7,20,7,6,7,6,43,1,38,39,38, 47,1,38,39,38,53,52,55,54,55,54,63,1,54,51,50, 23,21,38,39,34,7,6,7,6,21,23,20,23,22,51,50, 63,1,52,39,38,47,1,7,52,55,54,51,50,23,22,21, 20,7,6,7,38,39,38,35,34,7,38,39,38,53,52,55, 54,55,54,51,50,23,22,23,54,55,52,39,38,39,38,3, 0,24,20,35,53,11,61,16,1,1,7,19,17,48,1,23, 6,154,147,40,8,4,26,37,52,23,2,2,5,2,5,14, 64,62,80,16,63,31,23,9,37,53,22,23,21,20,49,26, 53,49,27,25,42,66,60,51,74,44,12,15,62,1,80,47, 81,149,39,4,39,13,12,34,40,63,72,105,194,63,26,10, 12,82,17,31,9,8,39,37,30,1,10,18,24,61,12,12, 31,21,21,29,7,3,46,39,40,57,56,39,61,53,1,6, 48,3,3,22,18,27,13,5,11,2,1,135,83,17,20,14, 17,51,5,6,20,19,16,8,16,15,73,41,43,7,15,13, 7,32,47,52,52,68,73,51,52,52,27,23,15,5,21,32, 15,2,35,9,15,60,80,25,90,56,34,80,17,35,25,8, 2,2,4,94,90,101,143,59,81,37,65,68,143,26,11,3, 40,61,3,26,20,44,32,39,8,2,10,7,32,33,34,67, 51,47,19,22,0,3,0,53,0,2,3,79,2,104,0,18, 0,36,0,133,0,0,1,34,15,1,20,23,22,51,55,50, 55,54,53,52,39,38,39,38,35,55,54,55,54,55,52,47, 1,38,35,34,7,6,21,51,22,23,50,37,50,23,22,29, 1,7,35,34,21,20,23,22,31,1,49,51,54,49,54,55, 54,53,52,39,6,7,22,23,22,31,2,20,7,6,35,7, 34,39,38,53,52,55,54,59,1,55,38,35,39,52,55,54, 55,54,51,50,31,1,22,23,20,15,1,22,23,22,21,20, 7,6,35,32,39,38,53,52,55,54,51,23,52,35,34,7, 6,7,34,39,38,53,52,55,54,55,54,1,69,67,14,3, 18,20,46,249,30,17,7,34,2,2,21,26,190,41,7,2, 1,61,38,9,10,55,41,41,114,17,13,40,254,54,99,47, 27,2,99,225,55,38,91,151,149,14,155,36,13,56,64,98, 31,4,4,4,14,4,42,14,16,220,76,30,28,74,21,23, 215,176,32,33,173,19,26,69,34,36,95,38,4,9,2,37, 11,34,24,13,228,82,113,254,241,74,26,94,64,88,96,101, 28,30,55,15,34,8,2,8,25,61,15,1,91,40,18,30, 15,13,2,31,13,13,28,17,1,1,10,105,5,28,7,9, 44,19,7,1,32,33,38,1,2,149,62,35,49,12,17,154, 69,37,25,12,5,4,14,72,26,35,76,44,20,35,10,3, 3,4,21,28,45,16,5,3,18,19,45,47,15,4,57,16, 1,45,41,54,25,13,72,9,31,20,36,20,5,23,63,35, 29,194,58,19,150,52,68,106,55,38,1,87,18,36,5,31, 6,8,16,11,39,5,1,0,0,2,0,47,0,0,3,66, 2,104,0,104,0,122,0,0,1,52,39,38,35,39,52,55, 54,55,54,51,50,31,1,22,21,20,7,6,7,50,23,22, 21,20,7,6,35,34,39,38,47,1,7,6,7,6,35,34, 39,38,53,52,55,54,55,35,38,53,52,55,33,52,35,34, 7,6,7,34,39,38,53,52,55,54,55,54,51,50,23,22, 29,1,7,35,34,7,6,21,20,23,22,59,1,50,55,54, 55,54,55,54,53,21,20,23,22,23,22,23,22,51,50,55, 54,39,54,55,54,55,52,47,1,38,35,34,7,6,21,51, 22,23,50,3,19,59,35,45,173,19,26,70,34,35,95,38, 4,10,40,4,5,10,33,34,73,60,88,111,43,8,6,3, 8,27,81,24,34,112,63,46,40,17,30,73,12,12,1,61, 101,28,30,55,15,34,8,2,8,25,61,15,24,88,51,36, 4,194,39,40,51,51,52,86,28,37,18,33,30,8,4,10, 13,7,20,23,29,34,41,128,38,12,71,42,7,1,1,61, 38,9,10,55,41,41,114,17,13,40,1,33,82,42,24,1, 45,41,55,25,12,72,9,31,19,39,21,3,2,57,67,50, 114,72,60,86,15,19,20,34,74,25,7,92,67,93,98,46, 19,20,3,14,12,6,87,18,36,5,31,6,8,16,11,39, 5,1,55,38,51,18,13,37,45,68,51,45,43,5,5,41, 11,9,20,46,13,16,36,13,22,25,10,8,82,27,198,4, 33,5,7,44,19,7,1,32,33,38,1,2,0,1,0,29, 255,255,3,124,2,93,0,118,0,0,37,34,39,38,39,38, 39,52,55,54,55,54,51,22,23,38,39,38,43,1,34,7, 6,15,2,38,39,38,53,52,55,54,51,50,23,22,23,20, 7,20,7,38,43,1,6,7,6,21,20,23,22,23,51,50, 55,54,53,52,39,38,39,48,7,53,54,55,54,55,54,63, 2,50,23,22,23,22,29,1,15,1,6,7,6,7,34,47, 1,55,50,23,22,51,50,55,54,55,54,55,52,39,38,35, 15,1,35,6,7,6,21,23,22,23,22,23,20,7,6,1, 27,145,69,18,11,9,2,23,21,69,60,61,36,40,5,5, 30,57,9,20,14,41,3,20,10,19,11,9,55,40,40,100, 39,15,1,2,9,49,29,11,96,37,55,92,36,45,12,66, 55,59,45,3,4,26,2,14,12,65,75,71,21,14,148,64, 13,9,9,12,11,31,80,41,66,55,54,1,6,2,3,52, 40,20,11,89,30,4,3,55,55,79,26,55,1,4,32,92, 1,54,36,24,2,82,69,1,108,27,34,36,32,32,64,53, 40,35,2,10,36,11,64,20,56,1,10,2,1,15,12,16, 38,30,21,99,31,14,11,6,6,23,14,13,30,37,62,95, 41,16,4,29,27,35,59,13,1,1,1,69,34,25,39,53, 60,9,1,1,151,32,37,42,36,36,63,32,95,35,19,9, 51,4,1,2,28,4,20,103,14,16,107,83,81,1,8,2, 8,20,76,19,4,49,41,51,77,52,44,0,0,2,0,26, 255,48,3,21,2,102,0,93,0,117,0,0,1,50,23,22, 23,22,23,47,1,34,7,6,35,20,23,22,31,1,51,50, 55,54,55,47,1,52,55,31,1,22,21,22,21,20,7,20, 7,6,35,39,34,39,38,39,52,39,6,15,1,6,21,31, 1,22,23,22,51,50,55,54,53,52,39,38,47,1,52,55, 51,22,31,1,22,29,1,7,21,7,6,7,6,35,34,39, 38,53,52,55,54,63,1,54,55,54,23,34,39,38,39,55, 6,7,6,7,54,55,23,51,50,23,52,47,1,38,35,34, 7,6,1,196,152,52,16,10,8,1,145,105,36,130,3,3, 132,28,33,15,20,111,51,20,6,1,3,11,10,4,1,6, 1,72,74,88,24,87,65,63,9,1,23,20,3,5,1,3, 16,72,93,132,104,70,87,8,8,12,1,10,6,3,5,11, 27,1,9,40,101,79,141,157,118,117,157,22,25,9,21,24, 73,96,44,11,3,2,3,79,34,7,5,100,102,91,43,22, 29,39,13,21,31,18,32,28,2,102,62,20,28,32,41,2, 3,16,1,162,49,10,4,2,65,25,32,28,20,6,3,1, 6,2,1,39,9,6,5,80,48,48,1,71,69,103,28,10, 8,98,12,24,27,55,47,111,83,103,61,73,136,20,16,23, 13,6,4,12,2,4,21,48,47,12,16,1,32,140,50,39, 107,107,153,206,66,9,6,28,45,23,69,101,25,6,8,22, 13,76,13,17,16,3,1,4,47,22,5,6,18,18,0,1, 0,40,0,0,3,123,2,82,0,74,0,0,1,50,23,22, 23,22,23,20,7,6,7,6,43,1,47,2,53,22,23,50, 55,54,55,54,55,53,52,39,38,35,7,6,15,1,35,52, 47,1,38,39,38,35,34,7,6,7,6,21,20,23,22,23, 55,54,55,15,2,34,47,1,38,39,38,53,52,55,54,51, 50,23,54,55,54,2,161,114,62,23,11,7,1,22,68,166, 17,18,41,25,27,6,52,45,26,52,52,33,35,7,46,47, 60,28,52,38,39,16,18,2,24,38,47,51,79,62,28,13, 16,154,34,40,55,16,36,4,40,44,73,55,11,137,25,5, 67,73,109,133,61,48,106,18,2,79,122,46,57,43,45,77, 44,143,13,1,1,3,1,24,11,1,13,15,38,47,69,14, 77,62,63,3,12,44,92,32,36,4,51,26,30,62,27,32, 35,49,138,58,12,8,1,1,4,22,3,1,25,5,64,138, 28,30,120,88,94,123,101,16,3,0,0,2,253,30,1,233, 254,22,3,151,0,36,0,45,0,0,1,3,52,53,38,39, 38,35,15,2,39,38,53,52,55,54,51,23,51,50,23,54, 51,50,23,22,21,20,7,6,35,34,39,38,49,3,17,22, 51,54,55,38,39,34,7,253,122,1,1,14,11,9,18,4, 19,9,6,6,12,23,22,1,25,24,20,39,7,7,62,40, 11,18,23,19,17,1,10,33,38,3,7,40,20,16,1,233, 1,96,7,8,1,22,9,4,2,8,2,4,8,7,6,11, 1,20,28,1,23,59,52,24,7,9,12,254,242,1,47,27, 6,50,51,4,27,0,0,1,0,3,0,3,1,80,2,93, 0,58,0,0,19,52,55,54,51,23,50,23,22,23,22,23, 20,7,6,7,6,15,1,6,7,39,38,39,38,39,38,39, 38,39,53,51,22,23,22,23,22,23,22,23,50,55,54,55, 54,63,1,52,39,52,39,38,39,38,35,34,7,6,7,3, 51,35,44,25,9,18,115,21,11,4,5,4,32,3,2,27, 42,70,37,29,20,31,6,4,3,3,2,15,1,7,8,11, 7,23,17,20,23,26,24,10,2,1,9,3,12,12,56,18, 14,37,26,9,12,1,221,62,39,27,1,6,31,113,66,161, 43,20,28,54,5,4,28,38,3,2,5,15,32,11,5,7, 9,18,22,18,12,13,13,7,16,6,1,15,17,32,6,5, 235,39,24,21,50,49,20,6,31,14,42,0,0,1,0,1, 255,22,1,126,1,154,0,34,0,0,19,33,6,7,20,23, 22,23,22,51,55,22,23,6,7,6,35,38,39,38,39,38, 53,52,63,1,54,55,35,39,38,55,48,55,54,17,1,35, 133,8,10,9,31,57,84,21,2,1,10,55,42,35,68,38, 7,6,85,41,87,38,47,233,7,7,1,7,4,1,154,127, 231,45,30,35,37,74,1,4,4,16,25,17,7,24,4,5, 58,120,65,76,145,52,57,3,7,7,10,3,0,1,0,15, 255,19,1,202,1,150,0,54,0,0,5,34,39,38,39,38, 39,38,53,52,55,54,55,54,55,35,53,55,39,38,39,38, 39,52,63,1,23,7,55,15,1,6,7,6,29,1,23,22, 23,22,23,22,51,50,63,1,51,22,23,15,2,6,7,6, 1,46,88,40,17,25,83,22,12,18,18,74,33,66,184,92, 95,7,7,1,7,7,20,168,94,199,29,22,43,30,28,4, 17,53,18,26,36,32,27,20,41,11,5,4,1,7,3,69, 13,32,237,18,9,16,52,56,29,36,43,42,40,75,35,42, 9,104,2,1,1,2,11,8,6,6,1,116,1,21,20,39, 50,49,57,19,25,97,43,14,13,14,5,7,3,7,10,8, 2,33,4,11,0,1,252,237,2,213,254,251,3,213,0,44, 0,0,1,52,39,38,47,1,38,35,39,34,7,6,7,20, 23,22,23,7,34,47,1,38,53,52,55,54,55,54,51,50, 31,1,22,21,20,7,6,35,34,35,39,55,50,55,54,254, 218,32,3,4,33,16,27,124,126,51,34,9,20,50,18,12, 10,5,54,41,6,15,36,87,111,73,42,96,60,29,34,45, 4,5,1,18,50,13,4,3,63,38,19,2,2,10,3,3, 22,9,52,23,20,35,11,11,5,34,30,43,13,24,48,19, 40,8,29,25,81,34,34,35,21,1,47,12,0,2,253,16, 2,213,255,15,3,219,0,16,0,59,0,0,1,34,7,6, 21,20,23,22,23,55,54,55,54,53,52,39,38,23,20,15, 1,6,35,34,39,38,53,52,55,38,47,1,35,34,7,6, 21,20,23,22,23,7,34,47,1,38,53,52,55,54,55,50, 51,23,51,50,23,50,23,22,254,188,36,19,8,41,8,10, 18,29,9,2,30,11,70,45,26,10,10,34,24,26,35,22, 86,16,50,69,48,46,20,50,18,12,10,5,54,41,58,47, 58,11,28,87,29,14,20,45,37,77,3,117,31,14,16,42, 13,2,1,2,10,33,8,8,36,16,6,60,48,23,9,2, 25,23,34,46,29,11,4,1,30,32,29,23,20,35,11,11, 5,34,30,43,78,39,30,3,1,4,26,50,0,1,252,237, 254,250,255,158,1,40,0,35,0,0,5,20,23,22,59,1, 50,55,54,51,50,23,22,59,1,17,55,17,33,34,39,38, 53,52,55,54,51,23,22,23,7,47,1,34,7,6,253,24, 69,20,17,24,41,84,42,33,28,67,33,26,128,34,253,189, 57,33,20,61,31,37,28,13,18,1,23,24,58,26,13,132, 55,34,7,41,20,37,18,1,190,72,253,210,57,35,41,69, 32,16,1,4,10,37,12,3,40,19,0,1,252,227,255,7, 255,153,1,31,0,43,0,0,5,20,23,22,51,50,55,54, 51,50,23,22,31,1,22,23,19,55,17,7,38,39,38,35, 34,7,6,35,34,39,38,53,52,55,54,51,50,23,7,38, 35,34,7,6,253,12,54,25,31,66,78,81,64,39,59,47, 8,18,18,25,1,39,32,8,86,87,38,51,55,138,43,78, 46,32,59,43,43,28,39,11,24,30,48,37,21,117,56,24, 12,37,36,13,13,4,13,14,7,1,165,66,253,242,10,7, 24,23,16,37,49,34,47,41,30,23,20,25,12,26,16,0, 0,2,0,13,255,254,1,111,2,90,0,52,0,69,0,0, 19,50,23,54,55,52,39,38,39,38,35,34,7,6,15,1, 39,54,55,54,55,54,51,50,23,22,23,22,23,22,21,20, 7,6,7,6,7,39,38,35,34,7,6,7,38,39,38,53, 52,55,54,55,54,19,54,55,38,39,38,35,6,7,6,21, 20,23,54,55,50,23,167,48,71,6,2,6,3,16,38,68, 19,15,18,49,28,10,11,8,55,42,18,21,43,40,51,29, 5,7,13,12,9,52,1,1,41,42,27,14,45,20,20,33, 27,10,24,28,60,21,124,17,1,51,29,6,5,84,27,14, 24,21,65,25,41,1,80,31,43,46,24,27,26,24,65,5, 4,27,22,18,18,7,45,8,4,18,20,87,13,24,54,64, 32,116,55,116,3,2,22,21,13,8,18,18,60,36,30,53, 48,53,28,8,254,232,87,110,30,2,1,5,62,39,48,42, 35,27,7,18,0,2,0,33,0,0,2,105,2,110,0,65, 0,82,0,0,19,52,55,54,51,50,23,22,23,22,23,22, 21,20,7,6,35,34,39,38,39,38,53,52,55,54,51,50, 23,22,23,7,39,38,35,34,7,6,21,20,23,22,51,50, 55,54,53,52,47,1,38,39,38,35,22,23,22,21,6,15, 1,6,35,38,39,38,55,52,39,38,35,34,7,6,7,21, 20,23,22,51,50,55,54,206,68,42,52,100,54,20,19,49, 6,1,88,83,115,126,89,39,22,22,97,96,136,89,58,14, 19,20,66,51,41,113,83,82,91,67,90,106,62,44,27,18, 6,8,32,36,31,14,5,6,31,9,37,48,95,28,9,222, 47,25,28,36,25,24,1,48,24,28,48,25,13,1,91,73, 41,25,38,14,20,52,77,19,27,105,69,65,92,41,50,51, 65,133,94,96,34,8,13,12,26,13,82,84,106,95,56,41, 58,42,58,87,33,17,4,5,17,22,49,17,16,58,28,7, 30,6,68,22,38,48,27,14,28,27,27,11,52,27,14,47, 23,0,0,1,0,42,255,254,2,66,2,89,0,79,0,0, 19,50,55,54,53,52,39,38,39,52,55,54,51,50,23,22, 21,20,7,6,35,34,47,1,38,39,55,20,23,22,31,2, 50,55,54,55,54,53,52,47,1,38,35,34,15,1,6,21, 22,21,20,7,6,35,34,39,38,53,52,55,54,51,55,50, 31,1,7,6,35,39,34,7,6,7,6,21,20,23,22,192, 57,21,8,8,7,41,68,9,10,93,88,88,66,68,90,70, 43,16,6,2,12,11,3,26,33,44,32,27,4,6,24,69, 22,14,17,33,18,7,1,42,32,30,46,75,45,30,48,28, 36,21,20,7,1,1,9,13,18,11,7,24,12,10,42,23, 1,92,39,15,18,28,18,15,14,92,12,2,82,82,109,134, 98,98,60,22,17,19,2,19,11,5,18,10,3,51,9,12, 53,157,165,47,11,5,27,16,5,4,10,80,43,29,30,60, 39,51,68,38,23,1,18,11,2,9,1,4,12,24,26,29, 64,34,18,0,255,255,255,158,255,243,2,71,2,244,16,38, 2,7,104,16,16,6,2,58,0,0,255,255,0,48,255,243, 2,138,2,244,16,103,2,7,1,191,0,16,192,0,64,0, 16,6,2,58,0,0,255,255,255,29,255,243,2,71,2,244, 16,39,0,67,0,215,0,16,16,38,2,7,231,16,16,6, 2,58,0,0,255,255,0,48,255,243,2,71,2,244,16,39, 0,67,0,220,0,16,16,103,2,7,1,57,0,16,192,0, 64,0,16,6,2,58,0,0,255,255,255,29,255,243,2,71, 2,244,16,39,0,118,0,145,0,16,16,38,2,7,231,16, 16,6,2,58,0,0,255,255,0,48,255,243,2,71,2,244, 16,39,0,118,0,150,0,16,16,103,2,7,1,57,0,16, 192,0,64,0,16,6,2,58,0,0,255,255,255,163,255,243, 2,71,3,132,16,39,1,247,0,114,0,183,16,38,2,7, 109,16,16,6,2,58,0,0,255,255,0,48,255,243,2,133, 3,132,16,39,1,247,0,114,0,183,16,103,2,7,1,186, 0,16,192,0,64,0,16,6,2,58,0,0,255,255,255,27, 0,0,2,166,2,235,16,38,2,7,229,7,16,6,2,27, 0,0,255,255,0,8,0,0,2,166,2,229,16,103,2,7, 1,75,0,1,192,0,64,0,16,6,2,27,0,0,255,255, 254,33,0,0,2,166,2,232,16,38,0,67,219,4,16,39, 2,7,254,235,0,4,16,6,2,27,0,0,255,255,255,217, 0,0,2,166,2,235,16,38,0,67,195,7,16,102,2,7, 32,7,192,0,64,0,16,6,2,27,0,0,255,255,254,63, 0,0,2,166,2,229,16,38,0,118,179,1,16,39,2,7, 255,9,0,1,16,6,2,27,0,0,255,255,0,8,0,0, 2,166,2,229,16,38,0,118,179,1,16,102,2,7,86,1, 192,0,64,0,16,6,2,27,0,0,255,255,254,210,0,0, 2,166,2,229,16,38,1,247,161,24,16,39,2,7,255,157, 255,113,16,6,2,27,0,0,255,255,255,166,0,0,2,166, 2,229,16,38,1,247,161,24,16,103,2,7,0,233,255,113, 192,0,64,0,16,6,2,27,0,0,255,255,255,140,255,246, 1,220,2,244,16,38,2,7,86,16,16,6,2,62,0,0, 255,255,0,39,255,246,2,119,2,244,16,103,2,7,1,173, 0,16,192,0,64,0,16,6,2,62,0,0,255,255,255,10, 255,246,1,220,2,244,16,39,0,67,0,196,0,16,16,38, 2,7,213,16,16,6,2,62,0,0,255,255,0,39,255,246, 1,241,2,244,16,39,0,67,0,201,0,16,16,103,2,7, 1,38,0,16,192,0,64,0,16,6,2,62,0,0,255,255, 255,10,255,246,1,220,2,244,16,38,0,118,126,16,16,38, 2,7,213,16,16,6,2,62,0,0,255,255,0,39,255,246, 1,241,2,244,16,39,0,118,0,131,0,16,16,103,2,7, 1,38,0,16,192,0,64,0,16,6,2,62,0,0,255,255, 254,118,0,0,2,102,2,229,16,39,2,7,255,64,0,1, 16,6,2,31,0,0,255,255,0,80,0,0,2,102,2,229, 16,103,2,7,0,151,0,1,192,0,64,0,16,6,2,31, 0,0,255,255,253,115,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,39,2,7,254,61,0,1,16,6,2,31, 0,0,255,255,255,67,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,102,2,7,138,1,192,0,64,0,16,6, 2,31,0,0,255,255,253,115,0,0,2,102,2,229,16,39, 0,118,254,231,0,1,16,39,2,7,254,61,0,1,16,6, 2,31,0,0,255,255,255,67,0,0,2,102,2,229,16,39, 0,118,254,231,0,1,16,102,2,7,138,1,192,0,64,0, 16,6,2,31,0,0,255,255,255,168,255,74,1,242,2,241, 16,38,2,7,114,13,16,6,2,64,0,0,255,255,0,24, 255,74,2,139,2,244,16,103,2,7,1,192,0,16,192,0, 64,0,16,6,2,64,0,0,255,255,255,27,255,74,1,242, 2,238,16,39,0,67,0,213,0,10,16,38,2,7,229,10, 16,6,2,64,0,0,255,255,0,24,255,74,1,251,2,238, 16,39,0,67,0,212,0,10,16,103,2,7,1,49,0,10, 192,0,64,0,16,6,2,64,0,0,255,255,255,21,255,74, 1,242,2,241,16,39,0,118,0,137,0,13,16,38,2,7, 223,13,16,6,2,64,0,0,255,255,0,24,255,74,1,248, 2,244,16,39,0,118,0,139,0,16,16,103,2,7,1,46, 0,16,192,0,64,0,16,6,2,64,0,0,255,255,255,155, 255,74,1,242,3,129,16,39,1,247,0,106,0,180,16,38, 2,7,101,13,16,6,2,64,0,0,255,255,0,24,255,74, 2,143,3,129,16,39,1,247,0,124,0,180,16,103,2,7, 1,196,0,13,192,0,64,0,16,6,2,64,0,0,255,255, 254,103,0,0,2,113,2,229,16,39,2,7,255,49,0,1, 16,6,2,33,0,0,255,255,0,65,0,0,2,113,2,229, 16,103,2,7,0,136,0,1,192,0,64,0,16,6,2,33, 0,0,255,255,253,100,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,39,2,7,254,46,0,1,16,6,2,33, 0,0,255,255,255,52,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,103,2,7,255,123,0,1,192,0,64,0, 16,6,2,33,0,0,255,255,253,100,0,0,2,113,2,229, 16,39,0,118,254,216,0,1,16,39,2,7,254,46,0,1, 16,6,2,33,0,0,255,255,255,52,0,0,2,113,2,229, 16,39,0,118,254,216,0,1,16,103,2,7,255,123,0,1, 192,0,64,0,16,6,2,33,0,0,255,255,253,247,0,0, 2,113,2,229,16,39,1,247,254,198,0,24,16,39,2,7, 254,194,255,113,16,6,2,33,0,0,255,255,254,203,0,0, 2,113,2,229,16,39,1,247,254,198,0,24,16,103,2,7, 0,14,255,113,192,0,64,0,16,6,2,33,0,0,255,255, 254,238,255,248,1,14,2,244,16,38,2,7,185,16,16,6, 2,66,0,0,255,255,0,56,255,248,1,218,2,244,16,103, 2,7,1,15,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,109,255,248,1,14,2,244,16,38,0,67,39,16, 16,39,2,7,255,55,0,16,16,6,2,66,0,0,255,255, 0,56,255,248,1,83,2,244,16,38,0,67,44,16,16,103, 2,7,0,137,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,109,255,248,1,14,2,244,16,38,0,118,225,16, 16,39,2,7,255,55,0,16,16,6,2,66,0,0,255,255, 0,56,255,248,1,83,2,244,16,38,0,118,230,16,16,103, 2,7,0,137,0,16,192,0,64,0,16,6,2,66,0,0, 255,255,254,243,255,248,1,14,3,132,16,39,1,247,255,194, 0,183,16,38,2,7,190,16,16,6,2,66,0,0,255,255, 255,199,255,248,1,213,3,132,16,39,1,247,255,194,0,183, 16,103,2,7,1,10,0,16,192,0,64,0,16,6,2,66, 0,0,255,255,254,107,0,0,0,163,2,229,16,39,2,7, 255,53,0,1,16,6,2,35,0,0,255,255,0,69,0,0, 1,86,2,229,16,103,2,7,0,140,0,1,192,0,64,0, 16,6,2,35,0,0,255,255,253,104,0,0,0,163,2,229, 16,39,0,67,255,34,0,1,16,39,2,7,254,50,0,1, 16,6,2,35,0,0,255,255,255,56,0,0,0,163,2,229, 16,39,0,67,255,34,0,1,16,103,2,7,255,127,0,1, 192,0,64,0,16,6,2,35,0,0,255,255,253,104,0,0, 0,163,2,229,16,39,0,118,254,220,0,1,16,39,2,7, 254,50,0,1,16,6,2,35,0,0,255,255,255,56,0,0, 0,163,2,229,16,39,0,118,254,220,0,1,16,103,2,7, 255,127,0,1,192,0,64,0,16,6,2,35,0,0,255,255, 253,251,0,0,0,163,2,229,16,39,1,247,254,202,0,24, 16,39,2,7,254,198,255,113,16,6,2,35,0,0,255,255, 254,207,0,0,0,221,2,229,16,39,1,247,254,202,0,24, 16,103,2,7,0,18,255,113,192,0,64,0,16,6,2,35, 0,0,255,255,255,158,255,244,2,6,2,244,16,38,2,7, 104,16,16,6,2,72,0,0,255,255,0,34,255,244,2,138, 2,244,16,103,2,7,1,191,0,16,192,0,64,0,16,6, 2,72,0,0,255,255,255,29,255,244,2,6,2,244,16,39, 0,67,0,215,0,16,16,38,2,7,231,16,16,6,2,72, 0,0,255,255,0,34,255,244,2,6,2,244,16,39,0,67, 0,220,0,16,16,103,2,7,1,57,0,16,192,0,64,0, 16,6,2,72,0,0,255,255,255,29,255,244,2,6,2,244, 16,39,0,118,0,145,0,16,16,38,2,7,231,16,16,6, 2,72,0,0,255,255,0,34,255,244,2,6,2,244,16,39, 0,118,0,150,0,16,16,103,2,7,1,57,0,16,192,0, 64,0,16,6,2,72,0,0,255,255,254,157,255,248,2,222, 2,232,16,39,2,7,255,103,0,4,16,6,2,41,0,0, 255,255,0,50,255,248,2,222,2,235,16,103,2,7,0,172, 0,7,192,0,64,0,16,6,2,41,0,0,255,255,253,175, 255,248,2,222,2,226,16,39,0,67,255,105,255,254,16,39, 2,7,254,121,255,254,16,6,2,41,0,0,255,255,255,115, 255,248,2,222,2,223,16,39,0,67,255,93,255,251,16,102, 2,7,186,251,192,0,64,0,16,6,2,41,0,0,255,255, 253,235,255,248,2,222,2,226,16,39,0,118,255,95,255,254, 16,39,2,7,254,181,255,254,16,6,2,41,0,0,255,255, 255,166,255,248,2,222,2,229,16,39,0,118,255,74,0,1, 16,102,2,7,237,1,192,0,64,0,16,6,2,41,0,0, 255,255,255,141,255,242,1,222,2,244,16,38,2,7,87,16, 16,6,2,78,0,0,255,255,0,40,255,242,2,121,2,244, 16,103,2,7,1,174,0,16,192,0,64,0,16,6,2,78, 0,0,255,255,255,12,255,242,1,222,2,244,16,39,0,67, 0,198,0,16,16,38,2,7,214,16,16,6,2,78,0,0, 255,255,0,40,255,242,1,242,2,244,16,39,0,67,0,203, 0,16,16,103,2,7,1,40,0,16,192,0,64,0,16,6, 2,78,0,0,255,255,255,12,255,242,1,222,2,244,16,39, 0,118,0,128,0,16,16,38,2,7,214,16,16,6,2,78, 0,0,255,255,0,40,255,242,1,242,2,244,16,39,0,118, 0,133,0,16,16,103,2,7,1,40,0,16,192,0,64,0, 16,6,2,78,0,0,255,255,255,146,255,242,1,222,3,132, 16,39,1,247,0,97,0,183,16,38,2,7,92,16,16,6, 2,78,0,0,255,255,0,40,255,242,2,116,3,132,16,39, 1,247,0,97,0,183,16,103,2,7,1,169,0,16,192,0, 64,0,16,6,2,78,0,0,255,255,0,21,255,254,2,151, 2,229,16,102,2,7,85,1,192,0,64,0,16,6,2,46, 0,0,255,255,255,1,255,254,2,151,2,229,16,39,0,67, 254,235,0,1,16,103,2,7,255,72,0,1,192,0,64,0, 16,6,2,46,0,0,255,255,255,1,255,254,2,151,2,229, 16,39,0,118,254,165,0,1,16,103,2,7,255,72,0,1, 192,0,64,0,16,6,2,46,0,0,255,255,254,152,255,254, 2,151,2,229,16,39,1,247,254,147,0,24,16,103,2,7, 255,220,255,113,192,0,64,0,16,6,2,46,0,0,255,255, 255,252,255,247,2,192,2,244,16,39,2,7,0,198,0,16, 16,6,2,82,0,0,255,255,0,36,255,247,2,232,2,244, 16,103,2,7,2,29,0,16,192,0,64,0,16,6,2,82, 0,0,255,255,255,123,255,247,2,192,2,244,16,39,0,67, 1,53,0,16,16,38,2,7,69,16,16,6,2,82,0,0, 255,255,0,36,255,247,2,192,2,244,16,39,0,67,1,58, 0,16,16,103,2,7,1,151,0,16,192,0,64,0,16,6, 2,82,0,0,255,255,255,123,255,247,2,192,2,244,16,39, 0,118,0,239,0,16,16,38,2,7,69,16,16,6,2,82, 0,0,255,255,0,36,255,247,2,192,2,244,16,39,0,118, 0,244,0,16,16,103,2,7,1,151,0,16,192,0,64,0, 16,6,2,82,0,0,255,255,0,1,255,247,2,192,3,132, 16,39,1,247,0,208,0,183,16,39,2,7,0,203,0,16, 16,6,2,82,0,0,255,255,0,36,255,247,2,227,3,132, 16,39,1,247,0,208,0,183,16,103,2,7,2,24,0,16, 192,0,64,0,16,6,2,82,0,0,255,255,254,158,255,255, 2,192,2,226,16,39,2,7,255,104,255,254,16,6,2,50, 0,0,255,255,0,42,255,255,2,192,2,229,16,103,2,7, 0,191,0,1,192,0,64,0,16,6,2,50,0,0,255,255, 253,161,255,255,2,192,2,232,16,39,0,67,255,91,0,4, 16,39,2,7,254,107,0,4,16,6,2,50,0,0,255,255, 255,113,255,255,2,192,2,232,16,39,0,67,255,91,0,4, 16,102,2,7,184,4,192,0,64,0,16,6,2,50,0,0, 255,255,253,248,255,255,2,192,2,226,16,39,0,118,255,108, 255,254,16,39,2,7,254,194,255,254,16,6,2,50,0,0, 255,255,255,170,255,255,2,192,2,190,16,39,0,118,255,78, 255,218,16,102,2,7,241,218,192,0,64,0,16,6,2,50, 0,0,255,255,254,67,255,255,2,192,2,229,16,39,1,247, 255,18,0,24,16,39,2,7,255,14,255,113,16,6,2,50, 0,0,255,255,255,29,255,255,2,192,2,238,16,39,1,247, 255,24,0,33,16,103,2,7,0,96,255,122,192,0,64,0, 16,6,2,50,0,0,255,255,0,48,255,243,2,71,2,235, 16,39,0,67,0,149,0,7,16,6,2,58,0,0,255,255, 0,48,255,243,2,71,2,235,16,38,0,118,79,7,16,6, 2,58,0,0,255,255,0,39,255,246,1,220,2,235,16,39, 0,67,0,131,0,7,16,6,2,62,0,0,255,255,0,39, 255,246,1,220,2,235,16,38,0,118,61,7,16,6,2,62, 0,0,255,255,0,24,255,74,1,242,2,235,16,39,0,67, 0,162,0,7,16,6,2,64,0,0,255,255,0,24,255,74, 1,242,2,235,16,38,0,118,98,7,16,6,2,64,0,0, 255,255,255,251,255,248,1,14,2,235,16,38,0,67,230,7, 16,6,2,66,0,0,255,255,255,251,255,248,1,14,2,235, 16,38,0,118,160,7,16,6,2,66,0,0,255,255,0,34, 255,244,2,6,2,235,16,39,0,67,0,149,0,7,16,6, 2,72,0,0,255,255,0,34,255,244,2,6,2,235,16,38, 0,118,79,7,16,6,2,72,0,0,255,255,0,40,255,242, 1,222,2,235,16,39,0,67,0,132,0,7,16,6,2,78, 0,0,255,255,0,40,255,242,1,222,2,235,16,38,0,118, 62,7,16,6,2,78,0,0,255,255,0,36,255,247,2,192, 2,235,16,39,0,67,0,243,0,7,16,6,2,82,0,0, 255,255,0,36,255,247,2,192,2,235,16,39,0,118,0,173, 0,7,16,6,2,82,0,0,255,255,255,158,255,8,2,71, 2,244,16,38,2,14,114,5,16,38,2,7,104,16,16,6, 2,58,0,0,255,255,0,48,255,8,2,138,2,244,16,38, 2,14,114,5,16,103,2,7,1,191,0,16,192,0,64,0, 16,6,2,58,0,0,255,255,255,29,255,8,2,71,2,244, 16,38,2,14,114,5,16,39,0,67,0,215,0,16,16,38, 2,7,231,16,16,6,2,58,0,0,255,255,0,48,255,8, 2,71,2,244,16,38,2,14,114,5,16,39,0,67,0,220, 0,16,16,103,2,7,1,57,0,16,192,0,64,0,16,6, 2,58,0,0,255,255,255,29,255,8,2,71,2,244,16,38, 2,14,114,5,16,39,0,118,0,145,0,16,16,38,2,7, 231,16,16,6,2,58,0,0,255,255,0,48,255,8,2,71, 2,244,16,38,2,14,114,5,16,39,0,118,0,150,0,16, 16,103,2,7,1,57,0,16,192,0,64,0,16,6,2,58, 0,0,255,255,255,163,255,8,2,71,3,132,16,38,2,14, 114,5,16,39,1,247,0,114,0,183,16,38,2,7,109,16, 16,6,2,58,0,0,255,255,0,48,255,8,2,133,3,132, 16,38,2,14,114,5,16,39,1,247,0,114,0,183,16,103, 2,7,1,186,0,16,192,0,64,0,16,6,2,58,0,0, 255,255,255,27,255,241,3,89,2,235,16,39,2,14,2,60, 0,238,16,38,2,7,229,7,16,6,2,27,0,0,255,255, 0,8,255,241,3,89,2,229,16,39,2,14,2,60,0,238, 16,103,2,7,1,75,0,1,192,0,64,0,16,6,2,27, 0,0,255,255,254,33,255,241,3,89,2,232,16,39,2,14, 2,60,0,238,16,38,0,67,219,4,16,39,2,7,254,235, 0,4,16,6,2,27,0,0,255,255,255,217,255,241,3,89, 2,235,16,39,2,14,2,60,0,238,16,38,0,67,195,7, 16,102,2,7,32,7,192,0,64,0,16,6,2,27,0,0, 255,255,254,63,255,241,3,89,2,229,16,39,2,14,2,60, 0,238,16,38,0,118,179,1,16,39,2,7,255,9,0,1, 16,6,2,27,0,0,255,255,0,8,255,241,3,89,2,229, 16,39,2,14,2,60,0,238,16,38,0,118,179,1,16,102, 2,7,86,1,192,0,64,0,16,6,2,27,0,0,255,255, 254,210,255,241,3,89,2,229,16,39,2,14,2,60,0,238, 16,38,1,247,161,24,16,39,2,7,255,157,255,113,16,6, 2,27,0,0,255,255,255,166,255,241,3,89,2,229,16,39, 2,14,2,60,0,238,16,38,1,247,161,24,16,103,2,7, 0,233,255,113,192,0,64,0,16,6,2,27,0,0,255,255, 255,168,255,18,1,242,2,241,16,38,2,14,209,15,16,38, 2,7,114,13,16,6,2,64,0,0,255,255,0,24,255,18, 2,139,2,244,16,38,2,14,209,15,16,103,2,7,1,192, 0,16,192,0,64,0,16,6,2,64,0,0,255,255,255,27, 255,18,1,242,2,238,16,38,2,14,209,15,16,39,0,67, 0,213,0,10,16,38,2,7,229,10,16,6,2,64,0,0, 255,255,0,24,255,18,1,251,2,238,16,38,2,14,209,15, 16,39,0,67,0,212,0,10,16,103,2,7,1,49,0,10, 192,0,64,0,16,6,2,64,0,0,255,255,255,21,255,18, 1,242,2,241,16,38,2,14,209,15,16,39,0,118,0,137, 0,13,16,38,2,7,223,13,16,6,2,64,0,0,255,255, 0,24,255,18,1,248,2,244,16,38,2,14,209,15,16,39, 0,118,0,139,0,16,16,103,2,7,1,46,0,16,192,0, 64,0,16,6,2,64,0,0,255,255,255,155,255,18,1,242, 3,129,16,38,2,14,209,15,16,39,1,247,0,106,0,180, 16,38,2,7,101,13,16,6,2,64,0,0,255,255,0,24, 255,18,2,143,3,129,16,38,2,14,209,15,16,39,1,247, 0,124,0,180,16,103,2,7,1,196,0,13,192,0,64,0, 16,6,2,64,0,0,255,255,254,103,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,39,2,7,255,49,0,1, 16,6,2,33,0,0,255,255,0,65,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,103,2,7,0,136,0,1, 192,0,64,0,16,6,2,33,0,0,255,255,253,100,255,235, 3,65,2,229,16,39,2,14,2,36,0,232,16,39,0,67, 255,30,0,1,16,39,2,7,254,46,0,1,16,6,2,33, 0,0,255,255,255,52,255,235,3,65,2,229,16,39,2,14, 2,36,0,232,16,39,0,67,255,30,0,1,16,103,2,7, 255,123,0,1,192,0,64,0,16,6,2,33,0,0,255,255, 253,100,255,235,3,65,2,229,16,39,2,14,2,36,0,232, 16,39,0,118,254,216,0,1,16,39,2,7,254,46,0,1, 16,6,2,33,0,0,255,255,255,52,255,235,3,65,2,229, 16,39,2,14,2,36,0,232,16,39,0,118,254,216,0,1, 16,103,2,7,255,123,0,1,192,0,64,0,16,6,2,33, 0,0,255,255,253,247,255,235,3,65,2,229,16,39,2,14, 2,36,0,232,16,39,1,247,254,198,0,24,16,39,2,7, 254,194,255,113,16,6,2,33,0,0,255,255,254,203,255,235, 3,65,2,229,16,39,2,14,2,36,0,232,16,39,1,247, 254,198,0,24,16,103,2,7,0,14,255,113,192,0,64,0, 16,6,2,33,0,0,255,255,255,252,255,9,2,192,2,244, 16,39,2,14,0,203,0,6,16,39,2,7,0,198,0,16, 16,6,2,82,0,0,255,255,0,36,255,9,2,232,2,244, 16,39,2,14,0,203,0,6,16,103,2,7,2,29,0,16, 192,0,64,0,16,6,2,82,0,0,255,255,255,123,255,9, 2,192,2,244,16,39,2,14,0,203,0,6,16,39,0,67, 1,53,0,16,16,38,2,7,69,16,16,6,2,82,0,0, 255,255,0,36,255,9,2,192,2,244,16,39,2,14,0,203, 0,6,16,39,0,67,1,58,0,16,16,103,2,7,1,151, 0,16,192,0,64,0,16,6,2,82,0,0,255,255,255,123, 255,9,2,192,2,244,16,39,2,14,0,203,0,6,16,39, 0,118,0,239,0,16,16,38,2,7,69,16,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,244,16,39,2,14, 0,203,0,6,16,39,0,118,0,244,0,16,16,103,2,7, 1,151,0,16,192,0,64,0,16,6,2,82,0,0,255,255, 0,1,255,9,2,192,3,132,16,39,2,14,0,203,0,6, 16,39,1,247,0,208,0,183,16,39,2,7,0,203,0,16, 16,6,2,82,0,0,255,255,0,36,255,9,2,227,3,132, 16,39,2,14,0,203,0,6,16,39,1,247,0,208,0,183, 16,103,2,7,2,24,0,16,192,0,64,0,16,6,2,82, 0,0,255,255,254,158,255,238,3,152,2,226,16,39,2,14, 2,123,0,235,16,39,2,7,255,104,255,254,16,6,2,50, 0,0,255,255,0,42,255,238,3,152,2,229,16,39,2,14, 2,123,0,235,16,103,2,7,0,191,0,1,192,0,64,0, 16,6,2,50,0,0,255,255,253,161,255,238,3,152,2,232, 16,39,2,14,2,123,0,235,16,39,0,67,255,91,0,4, 16,39,2,7,254,107,0,4,16,6,2,50,0,0,255,255, 255,113,255,238,3,152,2,232,16,39,2,14,2,123,0,235, 16,39,0,67,255,91,0,4,16,102,2,7,184,4,192,0, 64,0,16,6,2,50,0,0,255,255,253,248,255,238,3,152, 2,226,16,39,2,14,2,123,0,235,16,39,0,118,255,108, 255,254,16,39,2,7,254,194,255,254,16,6,2,50,0,0, 255,255,255,170,255,238,3,152,2,190,16,39,2,14,2,123, 0,235,16,39,0,118,255,78,255,218,16,102,2,7,241,218, 192,0,64,0,16,6,2,50,0,0,255,255,254,67,255,238, 3,152,2,229,16,39,2,14,2,123,0,235,16,39,1,247, 255,18,0,24,16,39,2,7,255,14,255,113,16,6,2,50, 0,0,255,255,255,29,255,238,3,152,2,238,16,39,2,14, 2,123,0,235,16,39,1,247,255,24,0,33,16,103,2,7, 0,96,255,122,192,0,64,0,16,6,2,50,0,0,255,255, 0,48,255,243,2,71,2,222,16,38,1,243,110,2,16,6, 2,58,0,0,255,255,0,48,255,243,2,71,2,157,16,38, 0,113,111,224,16,6,2,58,0,0,255,255,0,48,255,23, 2,71,2,235,16,38,2,14,105,20,16,39,0,67,0,149, 0,7,16,6,2,58,0,0,255,255,0,48,255,23,2,71, 2,18,16,38,2,14,105,20,16,6,2,58,0,0,255,255, 0,48,255,23,2,71,2,235,16,38,0,118,79,7,16,38, 2,58,0,0,16,6,2,14,105,20,255,255,0,48,255,243, 2,71,2,191,16,38,1,247,114,242,16,6,2,58,0,0, 255,255,0,48,255,23,2,71,2,191,16,38,2,14,105,20, 16,38,1,247,114,242,16,6,2,58,0,0,255,255,0,8, 0,0,2,166,3,168,16,39,1,243,0,169,0,204,16,6, 2,27,0,0,255,255,0,8,0,0,2,166,3,103,16,39, 0,113,0,170,0,170,16,6,2,27,0,0,255,255,0,8, 0,0,2,166,2,229,16,38,0,67,249,1,16,6,2,27, 0,0,255,255,0,8,0,0,2,166,2,229,16,38,0,118, 179,1,16,6,2,27,0,0,255,255,0,8,255,241,3,89, 2,204,16,39,2,14,2,60,0,238,16,6,2,27,0,0, 255,255,255,203,2,88,0,53,3,83,16,7,0,15,255,117, 2,235,255,255,0,23,0,0,0,179,0,178,16,7,2,14, 255,150,0,253,255,255,255,54,2,71,255,135,2,228,16,6, 2,7,0,0,255,255,255,99,2,108,0,157,2,212,16,7, 1,247,255,94,0,7,255,255,0,6,2,100,1,64,3,111, 16,39,1,247,0,1,0,162,16,6,0,106,0,0,255,255, 0,24,255,18,1,242,2,235,16,38,2,14,209,15,16,39, 0,67,0,162,0,7,16,6,2,64,0,0,255,255,0,24, 255,18,1,242,2,19,16,38,2,14,209,15,16,6,2,64, 0,0,255,255,0,24,255,18,1,242,2,235,16,38,0,118, 98,7,16,38,2,64,0,0,16,6,2,14,209,15,255,255, 0,24,255,74,1,242,2,224,16,38,1,247,109,19,16,6, 2,64,0,0,255,255,0,24,254,92,2,104,2,224,16,39, 2,14,1,75,255,89,16,38,1,247,109,19,16,6,2,64, 0,0,255,255,255,67,0,0,2,102,2,229,16,39,0,67, 255,45,0,1,16,6,2,31,0,0,255,255,255,67,0,0, 2,102,2,229,16,39,0,118,254,231,0,1,16,6,2,31, 0,0,255,255,255,52,0,0,2,113,2,229,16,39,0,67, 255,30,0,1,16,6,2,33,0,0,255,255,255,52,0,0, 2,113,2,229,16,39,0,118,254,216,0,1,16,6,2,33, 0,0,255,255,0,65,255,235,3,65,2,204,16,39,2,14, 2,36,0,232,16,6,2,33,0,0,255,255,255,54,2,71, 1,215,2,228,16,39,0,67,0,240,0,0,16,6,2,7, 0,0,255,255,255,54,2,71,1,215,2,228,16,39,0,118, 0,170,0,0,16,6,2,7,0,0,255,255,255,54,2,71, 1,68,3,116,16,39,1,247,0,4,0,167,16,6,2,7, 0,0,255,255,255,205,255,248,1,14,2,222,16,38,1,243, 191,2,16,6,2,66,0,0,255,255,255,219,255,248,1,14, 2,157,16,38,0,113,191,224,16,6,2,66,0,0,255,255, 255,223,255,248,1,14,3,122,16,39,0,67,255,230,0,150, 16,38,0,106,193,243,16,6,2,66,0,0,255,255,255,214, 255,248,1,14,3,104,16,39,0,118,255,190,0,132,16,38, 0,106,184,238,16,6,2,66,0,0,255,255,255,199,255,248, 1,14,2,191,16,38,1,247,194,242,16,6,2,66,0,0, 255,255,255,213,255,248,1,15,3,116,16,39,1,247,255,208, 0,167,16,38,0,106,193,243,16,6,2,66,0,0,255,255, 255,221,0,0,1,11,3,168,16,39,1,243,255,207,0,204, 16,6,2,35,0,0,255,255,255,235,0,0,0,253,3,103, 16,39,0,113,255,207,0,170,16,6,2,35,0,0,255,255, 255,56,0,0,0,163,2,229,16,39,0,67,255,34,0,1, 16,6,2,35,0,0,255,255,255,56,0,0,0,163,2,229, 16,39,0,118,254,220,0,1,16,6,2,35,0,0,255,255, 1,6,2,71,2,23,2,228,16,39,0,67,0,240,0,0, 16,71,2,7,1,77,0,0,192,0,64,0,255,255,1,6, 2,71,2,23,2,228,16,39,0,118,0,170,0,0,16,71, 2,7,1,77,0,0,192,0,64,0,255,255,0,9,2,71, 2,23,3,116,16,39,1,247,0,4,0,167,16,71,2,7, 1,77,0,0,192,0,64,0,255,255,0,40,255,242,1,222, 2,222,16,38,1,243,93,2,16,6,2,78,0,0,255,255, 0,40,255,242,1,222,2,157,16,38,0,113,94,224,16,6, 2,78,0,0,255,255,0,40,255,242,1,222,3,122,16,39, 0,67,0,132,0,150,16,38,0,106,96,243,16,6,2,78, 0,0,255,255,0,40,255,242,1,222,3,107,16,39,0,118, 0,82,0,135,16,38,0,106,76,241,16,6,2,78,0,0, 255,255,255,179,255,56,2,29,2,244,16,38,2,7,125,16, 16,6,2,74,0,0,255,255,0,57,255,56,2,159,2,244, 16,103,2,7,1,212,0,16,192,0,64,0,16,6,2,74, 0,0,255,255,0,40,255,242,1,222,2,191,16,38,1,247, 97,242,16,6,2,78,0,0,255,255,0,40,255,242,1,222, 3,118,16,39,1,247,0,99,0,169,16,38,0,106,96,243, 16,6,2,78,0,0,255,255,0,21,255,254,2,151,3,168, 16,39,1,243,0,176,0,204,16,6,2,46,0,0,255,255, 0,21,255,254,2,151,3,103,16,39,0,113,0,177,0,170, 16,6,2,46,0,0,255,255,255,1,255,254,2,151,2,229, 16,39,0,67,254,235,0,1,16,6,2,46,0,0,255,255, 255,1,255,254,2,151,2,229,16,39,0,118,254,165,0,1, 16,6,2,46,0,0,255,255,0,78,255,255,2,112,2,229, 16,103,2,7,0,149,0,1,192,0,64,0,16,6,2,43, 0,0,255,255,0,30,2,100,1,40,3,135,16,39,0,67, 0,36,0,163,16,6,0,106,0,0,255,255,0,30,2,100, 1,51,3,122,16,39,0,118,0,6,0,150,16,6,0,106, 0,0,255,255,0,22,2,80,0,231,2,228,16,6,0,67, 0,0,255,255,0,36,255,9,2,192,2,235,16,39,2,14, 0,203,0,6,16,39,0,67,0,243,0,7,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,14,16,39,2,14, 0,203,0,6,16,6,2,82,0,0,255,255,0,36,255,9, 2,192,2,235,16,39,0,118,0,173,0,7,16,38,2,82, 0,0,16,7,2,14,0,203,0,6,255,255,0,36,255,247, 2,192,2,191,16,39,1,247,0,208,255,242,16,6,2,82, 0,0,255,255,0,36,255,9,2,192,2,191,16,39,2,14, 0,203,0,6,16,39,1,247,0,208,255,242,16,6,2,82, 0,0,255,255,255,121,255,248,2,222,2,226,16,39,0,67, 255,99,255,254,16,6,2,41,0,0,255,255,255,184,255,248, 2,222,2,220,16,39,0,118,255,92,255,248,16,6,2,41, 0,0,255,255,255,119,255,255,2,192,2,217,16,39,0,67, 255,97,255,245,16,6,2,50,0,0,255,255,255,158,255,255, 2,192,2,193,16,39,0,118,255,66,255,221,16,6,2,50, 0,0,255,255,0,42,255,238,3,152,2,181,16,39,2,14, 2,123,0,235,16,6,2,50,0,0,255,255,0,92,2,80, 1,45,2,228,16,6,0,118,0,0,255,255,1,198,2,71, 2,23,2,228,16,71,2,7,1,77,0,0,192,0,64,0, 0,1,0,46,0,240,1,28,1,56,0,3,0,0,1,21, 35,53,1,28,238,1,56,72,72,0,0,1,255,251,0,240, 2,49,1,56,0,3,0,0,1,21,33,53,2,49,253,202, 1,56,72,72,0,1,255,247,0,240,3,233,1,56,0,3, 0,0,1,21,33,53,3,233,252,14,1,56,72,72,0,1, 0,65,1,221,0,158,2,197,0,12,0,0,19,35,53,52, 55,54,55,21,6,21,20,21,51,158,93,76,8,9,48,48, 1,221,101,110,18,2,1,38,7,77,3,3,0,1,0,64, 1,241,0,157,2,217,0,11,0,0,19,51,21,20,7,6, 7,53,54,55,53,35,64,93,81,6,6,45,3,48,2,217, 101,114,15,1,1,38,6,66,18,0,0,1,0,64,255,128, 0,158,0,104,0,12,0,0,55,51,21,20,7,6,35,53, 54,55,52,53,35,65,93,84,5,5,48,1,48,104,101,116, 14,1,38,7,70,6,7,0,0,1,0,64,1,241,0,157, 2,217,0,11,0,0,19,21,35,23,22,23,21,38,39,38, 61,1,157,48,3,7,38,82,10,1,2,217,104,40,45,5, 38,7,100,11,13,101,0,2,0,48,1,221,1,43,2,197, 0,12,0,25,0,0,19,35,53,52,55,54,55,21,6,21, 20,21,51,23,35,53,52,55,54,55,21,6,21,20,21,51, 141,93,76,8,9,48,48,158,93,76,8,9,48,48,1,221, 101,110,18,2,1,38,7,77,3,3,104,101,110,18,2,1, 38,7,77,3,3,0,0,2,0,49,1,221,1,46,2,197, 0,11,0,23,0,0,19,51,21,20,7,6,7,53,54,55, 53,35,55,51,21,20,7,6,7,53,54,55,53,35,49,93, 81,6,6,45,3,48,160,93,81,6,6,45,3,48,2,197, 101,114,15,1,1,38,6,66,18,104,101,114,15,1,1,38, 6,66,18,0,0,2,0,47,255,128,1,44,0,104,0,11, 0,23,0,0,55,51,21,20,7,6,7,53,54,55,53,35, 55,51,21,20,7,6,7,53,54,55,53,35,47,93,81,6, 6,45,3,48,160,93,81,6,6,45,3,48,104,101,114,15, 1,1,38,6,66,18,104,101,114,15,1,1,38,6,66,18, 0,2,0,49,1,221,1,46,2,197,0,11,0,23,0,0, 19,21,35,23,22,23,21,38,39,38,61,1,51,21,35,23, 22,23,21,38,39,38,61,1,142,48,3,7,38,82,10,1, 253,48,3,7,38,82,10,1,2,197,104,40,45,5,38,7, 100,11,13,101,104,40,45,5,38,7,100,11,13,101,0,1, 0,38,255,79,2,1,2,197,0,11,0,0,1,21,35,17, 35,17,35,53,51,53,51,21,2,1,194,88,193,193,88,1, 246,82,253,171,2,85,82,207,207,0,0,1,0,38,255,79, 2,1,2,197,0,19,0,0,1,21,35,17,51,21,35,21, 35,53,35,53,51,17,35,53,51,53,51,21,2,1,194,194, 194,88,193,193,193,193,88,1,246,82,254,205,82,208,208,82, 1,51,82,207,207,0,0,1,0,50,0,220,1,44,1,214, 0,15,0,0,19,50,23,22,21,20,7,6,35,34,39,38, 53,52,55,54,175,66,37,22,53,33,39,64,38,23,52,33, 1,214,54,32,41,63,37,23,52,33,40,64,38,23,0,1, 0,70,0,220,1,44,1,214,0,4,0,0,19,48,23,20, 7,70,230,230,1,214,125,1,124,0,0,3,0,115,0,0, 3,117,0,104,0,3,0,7,0,11,0,0,55,21,35,53, 33,21,35,53,33,21,35,53,219,104,1,181,104,1,181,104, 104,104,104,104,104,104,104,0,0,7,0,9,255,234,3,225, 2,226,0,15,0,31,0,35,0,51,0,67,0,83,0,99, 0,0,19,50,23,22,21,20,7,6,35,34,39,38,53,52, 55,54,23,34,7,6,21,20,23,22,51,50,55,54,53,52, 39,38,37,51,1,35,1,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,37,50,23,22,21,20,7,6,35,34, 39,38,53,52,55,54,23,34,7,6,21,20,23,22,51,50, 55,54,53,52,39,38,158,76,44,30,59,40,50,75,45,30, 59,40,50,49,27,14,43,22,26,49,27,14,44,21,1,52, 66,254,117,66,1,130,76,44,30,59,40,50,75,45,30,59, 40,50,49,27,14,43,22,25,50,27,14,44,21,1,78,76, 44,30,59,40,50,75,45,30,59,40,50,49,27,14,43,22, 25,50,27,14,44,21,2,216,60,41,51,72,46,31,60,40, 51,74,45,31,60,42,22,26,50,27,14,42,22,26,52,26, 13,70,253,10,1,43,60,41,51,72,46,31,60,40,51,74, 45,31,60,42,22,26,50,27,14,43,22,25,52,26,13,60, 60,41,51,72,46,31,60,40,51,74,45,31,60,42,22,26, 50,27,14,43,22,25,52,26,13,0,0,9,0,9,255,234, 5,73,2,226,0,15,0,31,0,47,0,64,0,80,0,96, 0,100,0,116,0,132,0,0,1,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,38,37,50,23,22,21,20,7,6, 35,34,39,38,53,52,55,54,23,34,7,6,21,20,23,22, 51,50,55,54,53,52,47,1,38,1,50,23,22,21,20,7, 6,35,34,39,38,53,52,55,54,23,34,7,6,21,20,23, 22,51,50,55,54,53,52,39,38,37,51,1,35,1,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,3,75,76, 44,30,59,40,50,75,45,30,59,40,50,49,27,14,43,22, 25,50,27,14,44,21,1,78,76,44,30,59,40,50,75,45, 30,59,40,50,49,27,14,43,22,25,50,27,14,44,24,11, 251,223,76,44,30,59,40,50,75,45,30,59,40,50,49,27, 14,43,22,26,49,27,14,44,21,1,52,66,254,117,66,1, 130,76,44,30,59,40,50,75,45,30,59,40,50,49,27,14, 43,22,25,50,27,14,44,21,1,23,60,41,51,72,46,31, 60,40,51,74,45,31,60,42,22,26,50,27,14,43,22,25, 52,26,13,60,60,41,51,72,46,31,60,40,51,74,45,31, 60,42,22,26,50,27,14,43,22,25,52,26,10,3,1,253, 60,41,51,72,46,31,60,40,51,74,45,31,60,42,22,26, 50,27,14,42,22,26,52,26,13,70,253,10,1,43,60,41, 51,72,46,31,60,40,51,74,45,31,60,42,22,26,50,27, 14,43,22,25,52,26,13,0,0,1,0,49,1,182,0,226, 2,204,0,5,0,0,19,23,15,1,39,55,141,85,56,85, 36,36,2,204,40,118,120,17,142,0,0,2,0,49,1,182, 1,181,2,204,0,5,0,11,0,0,19,23,15,1,39,55, 37,23,15,1,39,55,141,85,56,85,36,36,1,11,85,56, 85,36,36,2,204,40,118,120,17,142,119,40,118,120,17,142, 0,3,0,49,1,182,2,136,2,204,0,5,0,11,0,17, 0,0,1,23,15,1,39,55,39,23,15,1,39,55,37,23, 15,1,39,55,1,96,85,56,85,36,36,155,85,56,85,36, 36,1,222,85,56,85,36,36,2,204,40,118,120,17,142,119, 40,118,120,17,142,119,40,118,120,17,142,0,0,1,0,49, 1,182,0,226,2,204,0,5,0,0,19,31,1,7,47,1, 134,55,37,37,85,55,2,204,119,142,17,120,118,0,0,2, 0,49,1,182,1,181,2,204,0,5,0,11,0,0,1,31, 1,7,47,2,31,1,7,47,1,1,89,55,37,37,85,55, 126,55,37,37,85,55,2,204,119,142,17,120,118,40,119,142, 17,120,118,0,0,3,0,49,1,182,2,136,2,204,0,5, 0,11,0,17,0,0,1,31,1,7,47,1,37,31,1,7, 47,1,37,31,1,7,47,1,1,89,56,36,36,85,56,1, 40,56,36,36,85,56,254,175,56,36,36,85,56,2,204,119, 142,17,120,118,40,119,142,17,120,118,40,119,142,17,120,118, 0,1,0,91,0,106,0,243,1,182,0,6,0,0,55,53, 55,21,7,23,21,91,152,106,106,227,89,122,83,83,83,83, 0,1,0,85,0,106,0,239,1,182,0,6,0,0,19,21, 7,53,55,39,53,239,154,108,108,1,61,89,122,83,83,83, 83,0,0,5,0,98,0,68,2,12,1,237,0,15,0,30, 0,46,0,60,0,72,0,0,19,52,55,54,51,50,23,22, 21,20,7,6,35,34,39,38,55,50,23,22,21,20,7,6, 35,34,39,38,53,55,54,23,6,7,6,35,38,39,38,53, 52,55,54,51,50,23,22,7,34,47,1,52,55,54,51,23, 22,21,20,7,6,39,55,39,55,23,55,23,7,23,7,39, 7,98,23,8,7,22,12,4,24,7,7,22,12,4,213,22, 11,4,22,7,8,22,11,4,3,10,237,1,23,7,7,23, 11,4,23,8,7,21,13,4,213,23,11,3,22,7,8,15, 22,22,7,221,188,188,26,187,187,26,188,188,26,187,187,1, 24,23,11,4,23,8,7,21,13,4,22,8,220,22,7,8, 22,11,4,22,7,8,15,21,211,22,12,4,1,23,7,7, 23,11,4,22,8,220,22,15,22,11,4,3,11,23,22,11, 4,24,188,188,24,187,187,24,188,188,24,187,187,0,0,4, 0,124,0,0,1,230,2,217,0,5,0,9,0,15,0,19, 0,0,19,17,7,35,39,17,19,21,35,53,1,17,7,35, 39,17,19,21,35,53,208,22,39,22,83,84,1,106,22,39, 22,83,84,2,217,254,174,223,223,1,82,253,143,104,104,2, 113,254,174,223,223,1,82,253,143,104,104,0,0,3,0,77, 0,0,1,253,2,229,0,3,0,32,0,40,0,0,37,21, 35,53,17,6,15,1,21,35,52,55,54,51,50,31,1,22, 21,20,7,6,7,6,7,6,29,1,35,53,52,55,39,19, 21,55,54,55,52,39,38,1,74,90,61,13,4,85,180,19, 20,126,56,16,15,51,19,30,63,10,6,90,9,9,90,14, 74,1,62,13,104,104,104,2,39,20,70,49,9,211,21,2, 83,30,36,43,70,59,23,27,58,27,15,24,47,55,33,21, 83,1,12,255,13,66,66,71,30,6,0,1,255,82,255,236, 1,80,2,197,0,3,0,0,1,51,1,35,1,22,58,254, 60,58,2,197,253,39,255,255,0,77,0,0,4,41,2,229, 16,39,0,34,2,44,0,0,16,6,0,34,0,0,0,4, 0,77,0,0,2,252,2,229,0,5,0,9,0,47,0,51, 0,0,1,17,7,35,39,17,19,21,35,53,37,35,53,52, 55,54,55,54,55,54,55,52,47,1,38,35,34,7,6,21, 35,52,55,54,51,50,31,1,22,21,20,7,6,7,6,7, 6,29,2,35,53,2,252,22,39,22,83,84,254,162,90,28, 17,35,7,17,74,1,61,31,17,19,82,30,17,85,180,19, 20,126,56,16,15,51,19,30,63,10,6,90,2,217,254,174, 223,223,1,82,253,143,104,104,95,55,50,37,22,33,6,15, 66,66,70,30,10,4,58,34,64,211,21,2,83,30,36,43, 70,59,23,27,58,27,15,24,142,104,104,0,0,4,0,124, 0,0,3,19,2,229,0,5,0,9,0,46,0,50,0,0, 19,17,7,35,39,17,19,21,35,53,37,35,53,52,55,54, 55,54,55,54,55,52,39,38,35,34,7,6,21,35,52,55, 54,51,50,31,1,22,21,20,7,6,7,6,7,6,29,2, 35,53,208,22,39,22,83,84,1,228,90,28,17,35,7,17, 74,1,61,30,37,82,30,17,85,180,19,20,126,56,16,15, 51,19,30,63,10,6,90,2,217,254,174,223,223,1,82,253, 143,104,104,95,55,50,37,22,33,6,15,66,66,70,30,14, 58,34,64,211,21,2,83,30,36,43,70,59,23,27,58,27, 15,24,142,104,104,0,0,1,0,48,255,79,2,10,2,217, 0,18,0,0,19,51,50,23,22,21,20,15,1,6,7,17, 35,17,35,17,35,17,35,48,250,103,66,55,70,12,48,77, 64,82,64,57,2,217,81,67,92,107,68,11,40,4,254,76, 3,74,252,182,3,74,0,2,0,27,1,14,1,69,2,197, 0,13,0,23,0,0,19,50,21,20,7,6,35,34,39,38, 53,52,55,54,23,34,21,20,51,50,55,54,53,52,176,149, 111,18,20,130,17,2,44,38,67,91,90,82,9,1,2,197, 223,184,28,4,169,24,26,119,54,47,47,173,175,137,18,22, 171,0,0,2,0,160,255,56,0,222,0,131,0,3,0,7, 0,0,55,51,53,35,23,21,35,53,160,62,62,62,62,73, 58,106,225,225,0,2,0,20,1,28,1,81,2,197,0,10, 0,13,0,0,19,35,53,19,51,17,51,21,35,21,35,61, 1,7,208,188,204,46,67,67,62,129,1,128,59,1,10,254, 240,53,100,153,170,170,0,1,0,17,1,13,1,70,2,197, 0,34,0,0,1,21,35,7,54,51,50,31,1,22,21,20, 7,6,35,34,39,38,39,51,22,51,50,55,54,53,52,39, 38,35,34,15,1,35,55,1,46,190,18,38,46,87,40,13, 8,68,38,51,82,42,17,10,56,20,74,73,21,6,58,19, 23,46,33,5,52,34,2,197,52,119,26,64,28,23,27,86, 42,24,51,20,47,71,60,17,21,72,23,7,35,5,232,0, 0,2,0,16,1,14,1,63,2,197,0,26,0,42,0,0, 19,34,53,52,55,54,55,50,23,22,23,35,38,39,34,7, 6,21,54,51,50,23,22,21,20,7,6,39,34,7,6,21, 20,23,22,51,50,55,54,53,52,39,38,170,154,42,47,75, 86,32,8,3,56,19,58,82,16,4,38,67,81,38,21,63, 38,46,63,23,8,45,21,26,56,24,11,55,15,1,14,207, 112,59,59,2,72,18,21,60,4,111,23,27,47,61,32,42, 79,41,23,231,49,18,22,56,26,13,47,20,25,68,19,5, 0,1,0,22,1,28,1,71,2,197,0,12,0,0,1,21, 6,7,6,7,35,54,55,54,55,35,53,1,71,144,38,2, 1,61,35,75,31,47,247,2,197,44,179,186,8,8,143,118, 49,63,52,0,0,3,0,23,1,14,1,73,2,197,0,26, 0,42,0,58,0,0,19,22,21,20,7,6,35,34,39,38, 53,52,55,38,39,38,53,52,55,54,51,50,23,22,21,20, 7,39,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,7,34,7,6,21,20,23,22,51,50,55,54,53,52,39, 38,251,78,66,37,50,90,42,21,78,52,8,2,60,34,43, 83,37,17,35,102,60,15,4,46,15,18,57,17,5,49,14, 16,64,23,8,51,19,24,68,21,7,50,20,1,251,34,72, 74,36,21,61,31,40,71,34,30,34,11,14,64,32,17,55, 26,32,45,26,137,44,11,12,47,15,5,41,12,13,50,14, 4,178,47,16,20,55,21,8,49,16,19,54,21,8,0,2, 0,23,1,14,1,70,2,197,0,28,0,45,0,0,19,50, 21,20,7,6,7,34,35,34,39,38,39,51,22,23,50,55, 54,53,6,35,34,39,38,53,52,55,54,23,34,15,1,6, 21,20,23,22,51,50,55,54,53,52,39,38,172,154,42,38, 73,5,6,85,33,8,4,57,19,58,79,18,4,41,63,82, 38,20,63,38,47,56,24,8,2,53,16,19,60,25,10,47, 21,2,197,208,110,61,55,5,70,19,22,60,4,105,25,31, 47,61,33,41,79,41,23,46,48,25,10,10,67,20,6,47, 19,24,58,26,12,0,255,255,0,27,255,42,1,69,0,225, 16,7,6,235,0,0,254,28,255,255,0,61,255,56,0,222, 0,225,16,7,0,123,0,0,254,28,255,255,0,19,255,56, 1,70,0,225,16,7,0,116,0,0,254,28,255,255,0,16, 255,42,1,66,0,225,16,7,0,117,0,0,254,28,255,255, 0,20,255,56,1,81,0,225,16,7,6,237,0,0,254,28, 255,255,0,17,255,41,1,70,0,225,16,7,6,238,0,0, 254,28,255,255,0,16,255,42,1,63,0,225,16,7,6,239, 0,0,254,28,255,255,0,22,255,56,1,71,0,225,16,7, 6,240,0,0,254,28,255,255,0,23,255,42,1,73,0,225, 16,7,6,241,0,0,254,28,255,255,0,23,255,42,1,70, 0,225,16,7,6,242,0,0,254,28,0,4,0,91,255,233, 5,124,2,217,0,48,0,72,0,85,0,97,0,0,1,35, 38,35,34,7,6,21,20,23,22,31,1,22,23,22,21,20, 7,6,35,34,39,38,53,51,22,23,22,51,50,55,54,53, 52,47,2,38,39,38,53,52,55,54,51,50,23,22,37,21, 35,17,20,23,22,51,50,55,21,6,35,34,39,38,53,17, 35,53,51,53,51,21,5,17,35,17,33,50,23,22,21,20, 7,6,35,39,51,50,55,54,53,52,47,1,38,43,1,5, 103,88,3,102,82,23,6,66,14,17,80,118,23,7,90,52, 74,194,14,1,88,6,18,33,71,84,28,10,54,27,78,119, 31,16,84,49,68,145,35,10,254,50,86,22,9,15,25,15, 39,29,89,11,1,71,71,83,253,117,93,1,45,161,47,17, 63,58,83,229,194,102,30,10,79,34,14,15,194,1,122,84, 49,14,16,45,22,4,4,19,28,70,21,27,96,44,26,162, 8,9,47,20,35,47,16,19,46,19,8,19,29,51,28,43, 93,42,25,101,27,113,68,254,153,38,6,3,4,70,7,67, 7,9,1,140,68,144,144,215,254,203,2,217,118,41,55,97, 57,52,82,74,24,30,90,28,8,2,0,3,0,93,255,233, 4,157,2,217,0,48,0,78,0,89,0,0,1,35,38,35, 34,7,6,21,20,23,22,31,1,22,23,22,21,20,7,6, 35,34,39,38,53,51,22,23,22,51,50,55,54,53,52,47, 2,38,39,38,53,52,55,54,51,50,23,22,5,17,35,17, 33,50,23,22,21,20,7,6,7,22,23,22,23,22,23,22, 23,21,35,38,53,55,52,39,38,35,39,51,50,55,54,53, 52,39,38,43,1,4,136,88,3,102,82,23,6,66,14,17, 80,118,23,7,90,52,74,194,14,1,88,6,18,33,71,84, 28,10,54,27,78,119,31,16,84,49,68,145,35,10,252,50, 93,1,80,170,41,11,72,19,24,62,19,17,1,2,17,9, 16,113,21,1,80,18,22,240,225,121,18,4,38,32,73,225, 1,122,84,49,14,16,45,22,4,4,19,28,70,21,27,96, 44,26,162,8,9,47,20,35,47,16,19,46,19,8,19,29, 51,28,43,93,42,25,101,27,97,254,198,2,217,120,33,42, 98,51,13,12,27,40,37,86,96,27,13,11,23,48,71,65, 109,17,4,82,86,17,22,66,32,28,0,2,0,60,0,0, 3,27,2,88,0,19,0,36,0,0,37,3,51,3,6,7, 6,7,5,17,51,17,51,54,55,54,55,54,55,54,3,19, 35,19,38,47,1,33,17,35,17,33,50,23,22,23,22,2, 197,1,87,1,17,94,35,41,254,175,87,241,49,13,6,7, 21,13,1,136,1,87,1,3,50,19,254,244,87,1,108,60, 32,7,6,43,156,1,188,254,58,86,39,15,5,1,1,119, 254,213,11,8,4,5,16,30,4,1,76,254,221,1,25,39, 8,1,253,245,2,87,19,4,5,33,0,1,0,2,255,233, 2,31,2,197,0,47,0,0,19,53,52,55,35,55,51,54, 55,54,51,50,23,7,38,47,1,34,7,6,7,33,7,33, 6,21,20,23,51,7,35,22,51,50,55,54,55,21,6,35, 34,39,38,39,38,39,35,55,79,2,79,22,63,15,51,70, 128,98,94,32,85,57,25,107,44,9,6,1,28,23,254,242, 2,1,246,24,214,38,131,54,70,18,24,77,89,107,66,14, 11,44,18,83,22,1,57,25,22,19,59,95,75,101,67,80, 63,7,1,139,25,31,59,16,20,15,15,59,199,38,10,14, 93,47,71,15,17,72,102,59,0,2,0,33,255,234,4,216, 2,205,0,131,0,143,0,0,37,20,7,6,15,1,6,35, 34,39,38,53,52,63,1,35,34,15,1,6,7,6,35,34, 39,38,53,52,55,54,55,50,21,20,7,6,35,34,39,6, 21,20,23,22,51,50,55,54,55,6,7,6,43,1,34,53, 55,54,63,1,6,35,34,39,38,53,52,55,54,53,52,35, 34,7,6,7,6,43,1,34,53,52,55,54,51,50,31,1, 20,7,6,21,20,51,50,55,54,63,1,54,51,50,23,20, 7,3,51,54,55,54,51,50,21,20,7,6,7,6,15,1, 6,21,20,51,50,55,54,55,54,59,1,50,19,34,7,6, 7,54,55,54,55,54,53,52,3,152,1,74,72,29,7,7, 104,10,1,76,64,60,46,23,121,76,111,85,68,92,30,10, 26,19,38,33,29,14,13,19,11,9,80,17,18,100,150,43, 72,177,74,1,6,11,8,1,86,210,74,51,46,57,12,2, 13,24,25,37,59,7,11,4,3,11,8,1,82,61,58,11, 2,21,12,20,65,63,25,16,153,3,3,6,5,2,228,128, 166,126,55,51,71,49,85,224,16,17,73,99,57,62,87,6, 5,2,5,11,8,245,81,177,19,22,202,82,9,7,48,140, 3,2,103,30,9,1,85,8,9,84,107,89,1,168,108,67, 52,46,15,18,29,38,27,2,34,20,13,6,15,19,15,49, 10,2,215,62,89,21,105,3,8,5,121,20,87,23,29,6, 6,15,19,34,21,23,80,10,15,4,9,3,1,118,40,14, 24,32,16,11,16,47,19,22,149,3,14,5,3,254,213,225, 61,26,64,54,70,121,20,1,1,102,141,69,51,116,7,8, 3,2,26,231,25,30,17,93,10,10,68,43,45,0,0,1, 0,17,255,144,2,80,2,206,0,147,0,0,1,23,7,35, 38,35,38,7,6,7,6,15,1,22,23,22,23,51,54,55, 54,55,54,51,50,23,22,23,22,23,22,21,20,7,6,15, 2,6,35,34,39,55,54,61,1,52,39,38,39,15,1,6, 21,23,22,51,22,55,54,55,23,6,35,34,39,38,47,1, 52,55,54,55,54,55,54,55,22,23,22,31,1,54,55,54, 55,52,53,52,39,38,39,38,39,7,6,7,6,7,21,23, 22,23,20,21,7,6,7,6,7,34,39,38,39,55,54,51, 50,23,22,23,63,1,54,55,54,53,52,39,38,39,38,39, 38,53,52,55,54,55,54,55,54,55,54,55,50,51,54,1, 131,18,91,1,23,38,17,16,34,12,1,1,2,2,34,2, 1,1,4,37,56,38,33,35,12,13,90,42,12,6,4,6, 19,87,44,55,4,3,7,6,3,2,1,13,42,23,14,40, 2,10,36,4,4,22,31,8,38,31,7,6,44,11,2,2, 13,79,4,46,18,3,19,1,9,11,19,18,11,45,4,7, 20,66,33,36,28,36,40,22,2,2,23,4,2,11,51,46, 57,26,21,11,9,67,5,2,2,27,24,13,12,1,12,8, 7,6,7,37,6,4,22,29,5,37,37,14,12,14,11,41, 3,2,47,2,206,12,128,27,1,7,13,32,3,4,25,31, 64,3,2,5,40,59,18,16,2,16,111,33,36,33,27,33, 26,77,89,44,55,4,13,9,3,1,16,3,3,34,1,3, 6,23,50,22,41,1,1,3,20,21,25,1,7,55,31,9, 9,58,50,3,27,10,1,44,1,15,4,3,1,10,36,111, 15,20,43,27,74,37,18,2,1,7,40,23,4,7,4,40, 57,3,2,45,78,48,43,1,11,5,8,78,5,22,20,1, 3,1,7,18,15,18,17,18,23,71,11,9,45,51,60,51, 9,47,46,12,10,5,5,1,2,0,0,2,0,58,255,239, 3,184,2,205,0,11,0,87,0,0,1,20,23,55,54,55, 54,55,7,6,7,6,37,52,55,51,50,23,22,21,20,7, 6,7,6,15,1,6,7,6,35,34,39,38,53,52,55,54, 55,50,21,20,7,6,35,34,39,6,21,20,23,50,51,50, 55,54,63,1,38,39,52,53,52,55,54,55,54,55,54,55, 54,51,50,31,1,20,7,6,7,6,7,6,7,54,55,54, 53,52,1,193,62,126,6,6,75,123,155,129,54,60,1,75, 14,2,6,2,2,36,43,81,32,30,18,66,126,98,82,96, 30,10,25,19,38,33,29,14,13,20,9,8,99,9,10,86, 112,47,37,17,87,7,53,63,134,15,149,73,49,1,2,6, 2,2,3,155,92,30,43,18,14,81,57,47,1,85,60,20, 196,9,8,105,83,51,49,77,84,85,11,1,7,22,13,60, 51,60,34,14,4,28,103,67,52,45,14,18,27,37,27,2, 34,20,13,6,15,15,16,52,6,111,45,53,24,26,78,5, 6,65,76,89,46,5,41,20,20,1,6,11,6,1,97,132, 42,98,41,26,15,69,57,64,8,0,0,2,0,16,255,117, 1,239,2,194,0,53,0,133,0,0,1,20,7,6,35,34, 39,38,47,1,38,39,38,35,34,7,6,7,6,21,22,23, 7,38,47,1,53,38,39,38,47,1,54,55,54,55,54,63, 1,22,23,22,31,1,22,23,50,55,54,55,47,1,55,22, 1,38,53,52,55,54,51,54,23,22,23,22,23,55,54,55, 54,53,52,39,38,39,38,39,38,53,52,55,54,55,54,63, 1,22,23,22,21,35,52,39,38,35,34,15,1,6,7,21, 22,23,22,23,22,23,22,21,20,21,6,7,6,7,6,35, 34,39,38,39,38,39,38,35,7,6,35,6,21,31,1,6, 1,239,39,23,29,13,13,38,50,41,1,1,41,32,18,13, 48,15,5,2,48,59,12,4,2,2,18,9,1,1,2,7, 26,89,43,47,34,15,11,25,31,22,31,32,6,6,24,4, 3,6,20,12,254,79,12,28,25,44,5,6,30,43,43,32, 29,60,20,6,1,6,56,45,12,24,9,25,61,5,5,26, 50,16,4,22,19,15,17,13,10,10,5,1,3,15,7,44, 28,9,6,4,70,21,23,45,46,13,7,26,37,14,8,27, 26,20,1,1,16,3,4,1,2,92,49,30,18,4,10,52, 39,1,1,31,4,17,59,17,17,64,39,71,6,10,19,1, 8,38,17,13,28,20,21,91,47,22,6,1,2,6,13,47, 32,39,1,2,6,30,16,15,9,26,253,23,28,28,43,26, 25,1,1,4,39,39,6,1,9,66,23,24,10,9,54,73, 60,21,45,40,25,21,51,14,1,1,1,6,59,17,18,39, 22,16,8,13,10,14,28,23,31,14,67,42,32,20,26,6, 6,86,89,27,19,38,1,6,39,14,7,23,3,1,6,19, 22,17,4,0,0,3,0,12,255,239,4,9,2,205,0,86, 0,98,0,106,0,0,1,50,21,22,21,20,15,1,6,35, 34,7,6,7,6,21,20,23,22,51,50,55,18,55,54,51, 50,23,22,21,20,7,6,15,1,6,7,22,51,50,55,54, 55,54,59,1,50,21,20,7,6,7,6,15,1,34,39,38, 39,6,43,1,34,53,52,55,54,55,50,59,1,50,23,54, 63,1,6,35,34,39,38,53,52,55,54,55,54,1,50,55, 38,35,34,7,6,21,20,23,50,1,34,3,54,55,54,53, 38,2,59,33,4,2,4,2,4,69,78,39,24,37,84,40, 51,15,30,205,110,33,27,81,7,1,46,98,238,100,61,100, 110,71,69,76,36,22,2,4,12,8,2,55,92,45,39,19, 83,106,6,9,102,82,16,132,11,33,92,7,11,6,69,87, 80,58,86,10,22,146,56,25,40,53,93,50,254,147,58,72, 64,62,68,25,5,76,8,3,18,38,231,193,85,47,6,2, 192,6,2,4,3,2,6,3,59,29,35,51,43,66,25,12, 2,1,24,59,18,65,6,6,54,66,140,35,140,85,61,27, 56,26,31,3,8,1,4,78,46,22,5,1,44,2,4,50, 38,10,16,46,2,20,58,82,122,1,61,28,36,47,57,76, 41,22,253,70,45,22,36,6,7,17,1,2,176,254,191,37, 120,67,46,48,0,4,0,76,0,0,3,210,2,217,0,3, 0,20,0,36,0,46,0,0,1,21,35,53,19,50,23,22, 21,20,15,1,6,35,34,39,38,53,52,55,54,23,34,7, 6,21,20,23,22,51,50,55,54,53,52,39,38,39,17,35, 1,17,35,17,51,1,17,3,180,238,117,74,45,32,60,28, 30,35,72,46,32,60,40,52,51,28,16,44,23,26,55,27, 14,44,23,208,105,254,135,88,101,1,125,1,29,72,72,1, 88,59,41,51,76,45,17,14,59,41,52,74,46,31,57,43, 23,28,51,29,15,46,22,27,52,28,14,157,253,39,2,79, 253,177,2,217,253,172,2,84,0,3,255,254,255,239,3,119, 2,205,0,11,0,151,0,156,0,0,1,50,23,54,55,54, 53,52,39,6,15,1,3,20,23,22,51,50,55,54,55,54, 59,1,50,21,20,7,6,7,6,35,34,39,38,39,38,53, 52,63,1,54,55,54,53,6,35,7,6,7,6,35,34,39, 38,53,52,55,54,55,50,21,20,7,6,35,34,39,6,21, 20,23,22,51,50,55,54,63,1,52,55,54,55,38,35,34, 7,6,7,6,21,23,22,51,50,55,54,63,1,54,61,1, 52,55,50,23,20,7,6,7,6,7,6,35,34,39,38,39, 38,53,52,55,54,55,54,51,50,23,55,54,51,50,23,20, 15,1,22,49,22,21,20,7,6,7,6,7,22,21,20,15, 1,6,19,35,15,1,54,2,100,25,20,81,54,43,24,106, 102,14,33,10,10,21,34,41,52,42,3,4,11,9,2,57, 81,35,25,18,16,52,19,6,15,81,46,5,1,34,34,74, 71,117,90,73,95,32,12,24,23,35,33,30,12,13,16,9, 5,83,14,16,88,118,29,27,91,12,143,142,60,123,109,114, 115,63,55,1,7,66,29,37,30,35,79,29,21,8,2,71, 3,12,39,67,44,38,71,20,3,1,1,56,64,128,125,113, 133,74,47,1,2,8,3,4,36,14,33,40,40,83,12,32, 12,34,75,27,55,34,4,1,24,1,109,10,31,70,56,54, 39,27,82,163,22,254,180,15,10,2,36,42,61,3,8,1, 4,79,50,23,9,11,38,13,14,22,20,113,63,25,4,7, 7,110,101,65,50,42,14,19,26,34,26,3,34,20,13,5, 8,13,9,46,9,1,134,33,37,128,11,4,190,102,44,60, 60,89,79,52,12,54,29,23,50,100,40,22,6,7,6,18, 50,101,4,18,55,36,23,54,8,9,6,11,63,78,90,67, 65,47,29,1,17,3,3,23,14,36,47,51,56,55,41,5, 12,14,27,43,48,105,40,1,26,4,1,2,0,2,0,16, 255,242,2,111,2,193,0,162,0,181,0,0,19,20,23,22, 51,55,54,63,1,53,38,39,38,39,38,39,38,61,2,52, 55,54,55,54,55,54,51,50,23,22,23,22,23,54,55,54, 55,54,55,54,51,50,23,22,31,1,22,23,20,7,6,15, 1,6,21,23,49,22,49,22,23,22,23,22,23,55,54,55, 54,49,23,6,7,6,7,38,39,38,53,39,38,47,1,6, 7,6,7,23,21,23,7,6,7,6,35,39,38,47,1,38, 35,34,7,6,15,1,39,38,39,52,55,54,53,52,39,22, 51,54,55,54,55,23,6,7,6,21,20,23,22,51,50,55, 54,55,54,63,1,38,39,38,39,38,35,34,7,6,21,22, 23,22,23,22,21,20,7,6,7,35,38,39,38,53,37,55, 54,53,47,1,38,39,38,35,34,7,6,7,23,22,21,23, 22,39,31,8,8,17,27,8,1,3,44,49,8,5,3,10, 1,10,56,4,4,32,42,32,30,11,10,44,22,25,39,50, 3,12,13,11,3,4,12,48,7,6,4,14,1,2,50,20, 7,7,27,8,7,7,11,7,8,10,4,4,18,19,3,99, 2,2,54,12,1,27,2,13,14,9,11,10,1,2,3,1, 11,75,38,45,26,6,5,61,16,15,11,10,3,3,10,2, 10,1,6,13,7,24,13,39,45,5,2,14,16,10,24,31, 18,22,10,10,37,22,12,2,2,1,6,15,67,34,42,62, 18,5,1,57,46,7,35,8,23,55,22,45,12,3,1,87, 97,9,1,14,7,15,12,17,35,25,9,2,3,1,9,14, 1,68,52,16,4,3,13,36,21,2,26,15,17,6,3,3, 12,24,13,64,32,16,79,42,2,3,21,12,5,6,29,49, 37,17,21,1,5,10,8,7,30,55,43,13,2,19,2,2, 30,12,5,2,32,214,74,19,17,11,7,1,4,3,6,24, 11,5,135,3,2,60,121,7,7,210,26,4,1,1,6,4, 6,22,1,61,81,159,64,31,3,2,2,35,7,4,1,2, 4,1,4,12,2,8,22,27,19,20,2,2,27,3,1,17, 7,9,22,34,35,24,14,3,5,56,38,50,117,63,59,158, 45,26,65,17,14,38,39,32,7,35,41,19,22,62,7,6, 59,14,14,110,56,6,5,9,71,25,12,11,31,10,10,12, 2,1,29,57,0,2,0,63,1,36,3,170,2,217,0,7, 0,20,0,0,1,17,35,17,35,53,33,21,1,35,3,17, 35,17,51,27,1,51,17,35,17,1,29,68,154,1,119,1, 54,70,121,67,94,132,131,91,67,2,162,254,130,1,126,55, 55,254,130,1,85,254,171,1,181,254,150,1,106,254,75,1, 85,0,255,255,0,42,255,255,2,192,2,181,16,6,2,50, 0,0,0,1,0,42,0,0,2,192,2,210,0,40,0,0, 37,50,55,54,53,52,39,38,39,53,33,21,35,22,23,22, 21,20,7,14,1,35,34,39,38,53,52,55,54,55,35,53, 33,21,6,7,6,21,20,23,22,1,112,131,68,46,47,46, 92,1,18,176,142,28,8,37,37,154,110,147,91,81,41,37, 91,174,1,8,127,34,11,76,63,76,106,73,99,94,80,76, 38,80,76,77,134,39,44,91,78,81,102,115,102,139,92,74, 68,56,76,80,59,135,43,48,132,81,68,0,0,1,0,16, 255,116,1,232,2,194,0,135,0,0,19,7,49,38,39,38, 53,52,55,54,55,54,55,23,22,23,22,23,22,21,20,7, 6,7,6,7,22,23,22,23,22,21,20,7,6,7,6,7, 39,34,47,1,38,35,34,7,54,53,52,39,38,39,38,39, 34,7,6,7,6,7,23,22,23,22,51,21,34,39,38,53, 52,55,54,55,54,51,50,51,23,51,55,54,55,21,20,23, 51,54,55,54,53,52,39,38,47,1,38,35,34,7,6,21, 35,52,55,54,55,54,55,53,38,47,1,54,55,51,22,51, 50,55,54,55,54,55,54,53,52,39,38,35,34,7,6,15, 1,22,69,30,5,11,6,10,29,84,46,54,42,95,61,31, 12,7,16,33,77,16,32,25,31,71,22,7,22,32,71,17, 18,30,3,3,65,9,9,13,17,14,11,2,2,11,18,12, 13,5,4,36,1,3,13,34,5,5,53,22,7,2,11,44, 20,21,3,4,59,1,30,11,19,27,16,30,22,23,14,27, 75,13,38,35,45,20,18,61,74,12,12,26,14,42,35,4, 1,16,1,57,82,41,35,69,24,2,1,5,55,51,70,83, 59,40,8,2,1,1,145,10,2,32,23,26,33,34,91,45, 25,3,1,12,72,37,46,25,27,42,35,73,35,7,10,6, 22,48,85,27,26,47,39,61,21,5,2,1,1,28,3,7, 30,27,23,15,3,2,11,1,6,2,2,22,41,21,38,6, 1,33,55,20,22,13,11,45,20,8,11,3,2,6,83,51, 3,4,29,30,46,36,44,87,42,7,16,30,26,54,67,45, 7,5,12,3,1,13,23,6,2,16,50,15,29,65,4,5, 18,26,65,49,44,54,37,48,32,16,255,255,0,79,0,0, 2,146,2,217,16,6,0,46,0,0,255,255,0,17,0,0, 2,141,3,185,16,6,0,135,0,0,0,3,0,34,255,242, 3,160,2,196,0,141,0,153,0,163,0,0,19,20,51,50, 55,54,55,54,55,54,61,1,52,55,50,21,22,21,20,7, 6,7,6,35,34,39,38,39,38,53,52,55,54,55,54,51, 50,23,55,54,51,50,23,20,7,6,7,22,21,20,7,6, 7,22,21,20,7,6,7,6,35,34,39,38,53,52,55,54, 55,54,51,50,23,20,15,1,6,35,34,7,6,7,6,21, 20,23,22,51,50,55,54,55,54,53,52,39,6,35,34,39, 7,6,7,6,35,34,39,38,53,52,55,54,55,50,21,20, 7,6,35,34,39,6,21,20,23,22,51,50,55,54,55,54, 55,54,55,38,35,34,7,6,7,6,5,50,23,54,55,54, 53,52,39,6,7,54,7,48,7,22,51,50,55,38,35,34, 189,75,40,46,39,32,72,9,2,14,9,2,56,40,79,50, 44,75,17,2,1,2,55,64,129,120,111,134,73,52,1,3, 8,3,4,21,16,53,109,15,15,56,86,79,87,15,15,63, 14,2,33,32,77,32,28,6,2,1,4,3,4,42,43,43, 18,30,46,7,8,41,51,42,46,51,37,68,53,29,17,70, 72,118,90,73,98,30,9,24,19,38,33,29,14,13,20,9, 8,93,13,14,87,116,31,29,137,80,82,85,63,121,106,115, 114,60,54,1,239,39,30,45,41,37,27,77,128,21,12,20, 2,9,36,47,23,24,16,1,100,65,28,25,46,102,42,9, 8,8,6,5,8,18,9,77,78,56,34,21,57,6,6,12, 7,60,78,90,64,59,42,33,1,16,3,4,14,14,44,57, 86,88,12,10,34,62,83,84,78,16,3,47,6,13,40,47, 46,21,9,8,4,1,6,3,18,20,26,42,32,39,7,1, 37,31,63,71,54,43,21,37,6,98,102,66,51,45,14,17, 28,34,27,2,34,20,13,6,15,18,11,50,7,1,131,35, 41,192,88,89,63,39,58,57,86,76,34,9,35,59,53,45, 40,27,79,174,3,28,27,1,29,5,0,2,0,16,255,243, 2,88,2,194,0,123,0,156,0,0,55,20,15,1,38,39, 38,39,52,55,6,7,23,22,23,22,51,50,55,54,55,53, 38,39,38,53,38,55,54,55,54,51,50,23,22,31,2,51, 54,49,54,55,22,23,55,23,7,39,7,23,21,23,6,7, 6,35,34,39,63,1,54,53,52,39,6,7,6,21,20,23, 22,31,1,22,23,7,6,7,6,7,23,22,55,50,55,54, 55,54,55,23,22,23,21,6,15,1,6,7,6,35,34,47, 1,38,35,34,7,6,35,34,39,38,39,38,53,52,55,54, 63,1,22,23,22,63,2,54,53,52,53,38,39,38,39,38, 53,52,55,54,55,54,55,38,39,38,39,34,7,6,7,6, 7,23,22,23,22,140,26,15,13,10,9,1,6,32,1,4, 7,16,29,41,26,24,13,39,35,32,93,1,13,31,94,34, 38,48,37,17,11,12,2,10,3,18,104,14,14,17,6,115, 33,28,7,2,3,15,5,2,8,6,1,8,4,5,29,16, 14,8,5,36,19,6,2,1,11,62,18,3,33,46,38,25, 20,38,44,12,3,7,3,2,1,21,86,2,38,4,8,76, 77,12,15,2,2,13,56,56,19,19,46,18,7,1,9,41, 23,39,8,2,161,18,1,21,3,35,10,6,13,8,18,34, 32,25,16,16,25,31,22,21,21,17,59,7,1,11,96,18, 93,29,6,1,3,11,11,14,10,11,6,30,19,20,12,24, 11,6,30,1,23,38,107,156,57,63,144,47,16,25,13,13, 14,1,1,4,12,54,48,4,21,33,118,6,26,1,32,29, 27,7,9,13,21,17,16,18,18,13,27,22,28,22,25,17, 72,47,20,19,32,67,62,18,4,15,17,1,7,14,44,12, 1,3,2,4,7,5,20,89,1,39,1,40,6,9,10,45, 6,15,39,15,17,7,7,40,10,1,3,34,7,26,28,1, 39,34,3,4,41,86,27,16,39,34,27,23,42,28,26,5, 21,10,16,1,8,9,15,56,126,60,155,92,17,0,0,2, 0,45,255,248,2,199,2,196,0,120,0,130,0,0,1,52, 55,54,51,50,21,20,15,1,6,35,34,7,6,21,20,51, 50,55,54,55,54,53,52,39,34,35,34,7,6,7,6,21, 20,23,54,51,50,31,1,21,20,7,6,35,34,39,6,7, 6,7,6,21,20,23,22,51,50,55,54,55,54,53,52,39, 34,35,34,7,6,7,20,7,35,34,53,54,55,54,51,50, 23,22,21,20,7,6,7,6,35,34,39,38,53,52,55,54, 55,54,55,38,53,52,55,54,55,54,51,50,31,1,22,21, 20,7,6,35,34,39,38,7,50,55,52,39,38,35,34,7, 22,1,236,51,42,38,9,2,4,2,5,38,38,25,45,36, 42,7,5,28,114,5,5,43,48,40,41,56,5,30,21,53, 20,5,40,8,8,63,37,27,20,56,38,62,92,22,25,53, 56,52,36,27,84,6,7,44,43,31,7,12,4,7,9,55, 45,43,103,30,10,24,45,91,62,56,132,44,18,51,55,106, 16,15,16,93,84,92,14,13,97,33,10,3,54,49,49,51, 13,3,82,18,7,6,14,34,16,15,20,1,243,47,46,38, 8,3,2,6,3,51,34,25,32,48,9,7,38,34,70,4, 33,29,59,80,45,14,10,5,19,10,2,25,8,1,28,11, 11,34,57,89,60,76,18,4,33,31,53,36,31,52,5,58, 43,47,5,5,9,69,57,45,52,17,21,32,34,63,39,27, 72,30,39,67,71,75,39,6,4,20,35,88,82,73,13,2, 53,21,12,13,57,56,52,36,9,121,10,2,2,6,3,17, 0,2,255,187,255,44,2,222,2,226,0,33,0,43,0,0, 1,21,35,3,6,7,6,7,34,39,55,22,51,50,55,54, 55,19,35,53,51,55,54,55,54,51,50,23,7,38,35,34, 15,2,3,35,19,33,7,33,7,33,7,1,131,126,75,19, 46,58,77,36,19,17,25,26,69,24,1,2,78,113,125,22, 16,45,51,64,35,44,30,32,20,71,23,12,19,71,94,155, 1,233,17,254,117,50,1,91,17,1,206,70,254,115,103,47, 55,2,10,84,16,97,8,8,1,157,70,104,80,44,48,19, 79,18,126,70,130,254,180,2,217,82,233,82,0,1,0,90, 0,0,2,67,2,217,0,9,0,0,1,17,51,17,33,53, 33,53,33,53,1,230,93,254,23,1,140,254,164,1,141,1, 76,253,39,82,233,82,0,1,0,29,255,220,4,191,2,207, 0,126,0,0,55,51,54,55,54,55,54,55,54,55,54,55, 54,55,54,51,23,22,49,23,20,15,1,1,6,7,6,21, 20,51,50,1,54,63,2,54,51,23,22,21,20,15,1,6, 7,6,7,6,7,6,21,20,51,50,55,54,55,54,59,1, 50,23,20,7,6,7,6,35,34,39,52,39,38,53,52,55, 54,55,54,55,6,7,2,7,6,35,34,61,1,54,55,54, 55,54,55,6,7,6,15,1,6,7,6,35,34,39,38,53, 52,55,54,51,54,51,50,23,20,7,6,35,34,39,21,20, 23,22,124,9,75,86,17,102,31,25,74,167,165,60,4,5, 2,3,4,12,1,2,117,254,237,52,23,12,3,15,1,15, 67,154,29,169,2,4,11,5,1,118,41,97,57,44,54,13, 4,17,35,55,56,42,1,6,11,6,2,2,43,65,64,44, 58,12,1,1,45,36,122,17,14,117,71,244,45,6,3,45, 7,49,33,162,44,30,161,66,19,16,145,119,93,9,10,61, 20,7,18,7,2,16,31,34,1,31,14,13,8,6,3,17, 14,4,94,18,125,37,29,83,125,124,54,5,4,3,1,8, 4,1,4,146,254,127,72,56,28,9,5,1,64,79,135,31, 151,2,3,3,5,4,1,147,58,166,98,62,77,55,13,12, 20,41,42,59,4,8,3,2,62,46,47,56,5,4,5,11, 64,63,51,192,27,22,105,87,254,224,25,3,57,14,74,71, 47,208,57,41,120,67,19,18,172,133,11,1,33,11,13,22, 25,7,21,36,20,14,7,3,4,10,5,17,255,255,0,61, 255,236,3,91,2,197,16,39,0,117,2,25,254,234,16,39, 6,230,1,109,0,0,16,6,0,123,0,0,255,255,0,20, 255,236,3,91,2,197,16,39,0,117,2,25,254,234,16,38, 0,116,1,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,19, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,116,0,0,16,7,6,230,1,109,0,0,255,255,0,16, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 0,117,0,0,16,7,6,230,1,109,0,0,255,255,0,20, 255,236,3,95,2,197,16,39,6,238,2,25,254,234,16,38, 6,237,0,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,88,2,197,16,39,6,239,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,17, 255,236,3,88,2,197,16,39,6,239,2,25,254,234,16,38, 6,238,0,0,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 0,123,0,0,16,7,6,230,1,109,0,0,255,255,0,16, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 0,117,0,0,16,7,6,230,1,109,0,0,255,255,0,17, 255,236,3,98,2,197,16,39,6,241,2,25,254,234,16,38, 6,238,0,0,16,7,6,230,1,109,0,0,255,255,0,22, 255,236,3,98,2,197,16,38,6,240,0,0,16,39,6,241, 2,25,254,234,16,7,6,230,1,109,0,0,255,255,0,61, 255,236,2,189,2,197,16,38,0,123,0,0,16,7,6,230, 1,109,0,0,255,255,0,100,0,0,0,194,2,217,16,6, 0,44,0,0,255,255,0,100,0,0,1,216,2,217,16,39, 0,44,1,22,0,0,16,6,0,44,0,0,255,255,0,100, 0,0,2,238,2,217,16,39,0,44,2,44,0,0,16,39, 0,44,1,22,0,0,16,6,0,44,0,0,255,255,0,100, 0,0,3,155,2,217,16,39,0,57,1,22,0,0,16,6, 0,44,0,0,255,255,0,30,0,0,2,133,2,217,16,6, 0,57,0,0,255,255,0,30,0,0,3,93,2,217,16,39, 0,44,2,155,0,0,16,6,0,57,0,0,255,255,0,30, 0,0,4,115,2,217,16,39,0,44,3,177,0,0,16,39, 0,44,2,155,0,0,16,6,0,57,0,0,255,255,0,30, 0,0,5,137,2,217,16,39,0,44,4,199,0,0,16,39, 0,44,3,177,0,0,16,39,0,44,2,155,0,0,16,6, 0,57,0,0,255,255,0,100,0,0,3,159,2,217,16,39, 0,59,1,22,0,0,16,6,0,44,0,0,255,255,0,22, 0,0,2,137,2,217,16,6,0,59,0,0,255,255,0,22, 0,0,3,93,2,217,16,39,0,44,2,155,0,0,16,6, 0,59,0,0,255,255,0,22,0,0,4,115,2,217,16,39, 0,44,3,177,0,0,16,39,0,44,2,155,0,0,16,6, 0,59,0,0,255,255,0,80,0,0,2,21,2,217,16,6, 0,47,0,0,255,255,0,48,255,233,2,165,2,229,16,6, 0,38,0,0,255,255,0,89,0,0,2,155,2,217,16,6, 0,39,0,0,255,255,0,75,0,0,2,249,2,217,16,6, 0,48,0,0,255,255,0,66,0,0,0,150,2,217,16,6, 0,76,0,0,255,255,0,66,0,0,1,116,2,217,16,39, 0,76,0,222,0,0,16,6,0,76,0,0,255,255,0,66, 0,0,2,82,2,217,16,39,0,76,1,188,0,0,16,39, 0,76,0,222,0,0,16,6,0,76,0,0,255,255,0,66, 0,0,2,196,2,217,16,39,0,89,0,222,0,0,16,6, 0,76,0,0,255,255,0,10,0,0,1,230,2,12,16,6, 0,89,0,0,255,255,0,10,0,0,2,138,2,217,16,39, 0,76,1,244,0,0,16,6,0,89,0,0,255,255,0,10, 0,0,3,104,2,217,16,39,0,76,2,210,0,0,16,39, 0,76,1,244,0,0,16,6,0,89,0,0,255,255,0,10, 0,0,4,70,2,217,16,39,0,76,3,176,0,0,16,39, 0,76,2,210,0,0,16,39,0,76,1,244,0,0,16,6, 0,89,0,0,255,255,0,66,0,0,2,183,2,217,16,39, 0,91,0,222,0,0,16,6,0,76,0,0,255,255,0,17, 0,0,1,217,2,12,16,6,0,91,0,0,255,255,0,17, 0,0,2,138,2,217,16,39,0,76,1,244,0,0,16,6, 0,91,0,0,255,255,0,17,0,0,3,104,2,217,16,39, 0,76,2,210,0,0,16,39,0,76,1,244,0,0,16,6, 0,91,0,0,255,255,0,68,0,0,0,152,2,217,16,6, 0,79,0,0,255,255,0,31,255,233,1,221,2,27,16,6, 0,70,0,0,255,255,0,26,255,233,1,239,2,217,16,6, 0,71,0,0,255,255,0,70,0,0,2,250,2,27,16,6, 0,80,0,0,0,1,0,32,255,241,3,174,1,255,0,12, 0,0,1,21,33,22,23,7,38,39,54,55,23,6,7,3, 174,252,229,50,121,35,100,151,151,100,35,121,50,1,20,56, 49,151,35,119,144,144,119,35,151,49,0,1,0,45,0,0, 2,59,3,142,0,12,0,0,33,35,17,6,7,39,54,55, 22,23,7,38,39,1,80,56,49,151,35,119,144,144,119,35, 151,49,3,27,50,121,35,100,151,151,100,35,121,50,0,1, 0,49,255,241,3,191,1,255,0,12,0,0,55,53,33,38, 39,55,22,23,6,7,39,54,55,49,3,27,50,121,35,100, 151,151,100,35,121,50,220,56,49,151,35,119,144,144,119,35, 151,49,0,1,0,45,255,234,2,59,3,120,0,12,0,0, 1,51,17,54,55,23,6,7,38,39,55,22,23,1,24,56, 49,151,35,119,144,144,119,35,151,49,3,120,252,229,50,121, 35,100,151,151,100,35,121,50,0,1,0,24,255,241,4,0, 1,255,0,35,0,0,19,33,38,39,38,39,55,22,23,22, 23,6,15,1,39,54,55,54,55,33,22,31,1,7,38,39, 38,39,54,55,54,55,23,6,7,6,139,3,2,88,46,14, 23,37,112,68,32,37,108,105,36,37,69,58,16,28,252,254, 88,46,37,37,112,68,32,37,108,105,6,30,37,69,58,16, 1,18,92,62,19,32,32,134,65,31,33,96,125,42,32,96, 63,17,29,92,62,51,32,134,65,31,33,96,125,6,36,32, 96,63,17,0,0,1,1,5,255,234,3,19,3,142,0,36, 0,0,37,17,6,15,1,39,54,55,54,55,22,23,22,23, 7,38,39,38,39,17,54,55,54,55,23,6,7,6,7,38, 39,38,39,55,22,23,22,1,242,92,62,51,32,134,65,31, 33,96,125,6,36,32,96,63,17,29,92,62,19,32,32,134, 65,31,33,96,125,6,36,32,96,63,17,93,2,190,88,46, 37,37,112,68,32,37,108,105,6,30,37,69,58,16,28,253, 66,88,46,14,23,37,112,68,32,37,108,105,6,30,37,69, 58,16,0,1,0,15,255,240,2,90,2,117,0,8,0,0, 1,51,17,33,21,39,55,21,33,2,35,55,254,91,166,166, 1,110,2,117,253,207,84,112,111,84,0,1,0,30,255,241, 3,171,2,1,0,19,0,0,1,21,33,7,23,33,21,33, 23,7,38,39,38,39,54,55,54,55,23,7,3,171,253,24, 81,81,2,232,253,72,77,41,92,94,25,38,129,69,22,29, 41,77,1,126,53,80,80,53,98,33,114,90,24,36,122,80, 26,36,33,98,0,1,0,39,0,2,2,55,3,143,0,19, 0,0,19,39,54,55,54,55,22,23,22,23,7,39,17,35, 17,39,7,17,35,17,72,33,114,90,24,36,122,80,26,36, 33,98,53,80,80,53,2,109,41,92,94,25,38,129,69,22, 29,41,77,253,72,2,232,81,81,253,24,2,184,0,0,1, 0,45,255,236,3,186,1,252,0,19,0,0,5,39,55,33, 53,33,55,39,33,53,33,39,55,22,23,22,23,6,7,6, 2,193,41,77,253,72,2,232,81,81,253,24,2,184,77,41, 92,94,25,38,129,69,22,20,33,98,53,80,80,53,98,33, 114,90,24,36,122,80,26,0,0,1,0,44,255,237,2,60, 3,122,0,19,0,0,1,23,6,7,6,7,38,39,38,39, 55,23,17,51,17,23,55,17,51,17,2,27,33,114,90,24, 36,122,80,26,36,33,98,53,80,80,53,1,15,41,92,94, 25,38,129,69,22,29,41,77,2,184,253,24,81,81,2,232, 253,72,0,2,0,27,255,236,3,255,1,254,0,25,0,31, 0,0,19,33,39,55,22,23,22,23,6,7,6,7,39,55, 33,23,7,38,39,38,39,54,55,54,55,23,3,33,55,39, 33,7,241,2,56,76,40,110,68,30,42,111,82,19,38,40, 76,253,200,76,40,110,68,30,42,111,82,19,38,40,120,2, 145,84,84,253,111,84,1,125,95,34,132,65,29,39,101,96, 23,45,34,95,95,34,132,65,29,39,101,96,23,45,34,254, 195,86,86,86,255,255,0,17,0,0,2,141,2,217,16,71, 0,36,0,0,2,217,64,0,192,0,0,3,0,36,255,233, 1,254,2,229,0,19,0,35,0,51,0,0,1,22,31,1, 35,52,39,38,39,38,39,38,35,34,7,39,54,51,22,23, 7,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 1,211,37,4,2,80,16,7,14,40,59,17,19,80,46,60, 69,117,137,65,188,152,57,29,102,56,79,144,60,33,105,55, 77,93,38,19,78,31,41,90,39,21,82,30,2,61,90,119, 110,160,63,30,36,95,18,5,51,54,77,1,149,52,129,65, 91,167,71,39,119,67,95,174,70,37,77,92,48,64,137,48, 19,88,47,66,145,46,16,0,0,1,0,90,0,0,2,84, 2,217,0,11,0,0,1,33,53,33,53,33,53,33,17,33, 53,33,1,247,254,99,1,157,254,100,1,249,254,6,1,157, 1,76,82,233,82,253,39,82,0,3,0,43,255,213,1,251, 2,217,0,3,0,21,0,31,0,0,1,51,1,35,19,50, 19,22,21,16,7,6,35,34,39,38,53,52,55,54,55,50, 23,34,17,16,51,50,55,54,53,16,1,117,59,254,255,59, 159,218,13,1,138,42,52,176,43,13,69,54,95,7,7,142, 140,118,21,5,2,217,252,252,2,240,254,183,21,22,254,241, 69,20,216,66,84,195,93,71,7,78,254,223,254,220,192,46, 57,1,30,0,0,2,0,10,0,0,2,189,2,217,0,3, 0,6,0,0,51,1,51,9,1,3,33,10,1,38,100,1, 41,254,166,212,1,167,2,217,253,39,2,104,253,234,255,255, 0,10,0,0,2,189,2,217,16,71,7,82,0,0,2,217, 64,0,192,0,0,1,0,45,0,0,1,249,1,212,0,23, 0,0,1,21,33,22,23,22,59,1,21,35,34,39,38,52, 55,54,59,1,21,35,34,7,6,7,1,249,254,108,14,40, 49,64,237,237,113,74,36,36,74,113,237,237,64,49,40,14, 1,5,54,70,37,46,54,106,50,156,50,106,54,46,37,70, 0,3,0,44,255,198,1,249,2,43,0,31,0,38,0,42, 0,0,1,21,35,7,22,59,1,21,35,34,39,7,39,55, 38,39,38,53,52,55,54,55,54,59,1,55,23,7,51,21, 35,7,55,35,34,7,6,7,51,7,55,35,22,1,249,216, 80,18,33,245,255,41,26,45,44,44,54,19,20,22,50,97, 26,21,116,49,46,35,68,99,87,29,93,58,52,42,3,159, 93,64,128,12,1,5,54,141,12,54,19,77,25,78,51,42, 45,52,56,42,97,30,8,87,25,62,54,153,155,59,47,49, 167,113,71,0,0,1,0,105,255,61,2,205,2,217,0,7, 0,0,19,33,17,35,17,33,17,35,105,2,100,118,254,136, 118,2,217,252,100,3,55,252,201,0,255,255,0,105,255,61, 2,205,2,217,16,71,7,86,0,0,2,22,64,0,192,0, 0,1,0,41,255,61,2,180,2,217,0,11,0,0,19,33, 21,33,9,1,33,21,33,53,9,1,56,2,111,254,37,1, 77,254,168,1,243,253,117,1,103,254,168,2,217,96,254,158, 254,133,95,74,1,141,1,109,0,1,0,40,0,197,2,32, 1,11,0,3,0,0,1,21,33,53,2,32,254,8,1,11, 70,70,0,2,0,50,255,245,2,22,2,111,0,11,0,15, 0,0,37,35,21,35,53,35,53,51,53,51,21,51,17,33, 53,33,2,22,207,70,207,207,70,207,254,28,1,228,196,207, 207,70,207,207,1,31,70,0,0,1,0,64,0,134,1,172, 2,40,0,114,0,0,55,38,39,53,54,55,54,53,52,39, 7,6,15,1,6,35,6,39,38,53,52,63,1,54,55,39, 38,39,38,39,38,39,38,39,38,53,52,55,54,51,50,23, 22,23,22,23,22,23,63,1,38,39,38,39,38,53,52,55, 23,22,21,15,1,6,49,6,7,31,1,54,55,54,55,54, 55,54,51,50,23,22,21,7,6,7,6,15,2,6,21,23, 22,31,1,22,21,7,21,6,39,34,47,2,38,47,1,6, 21,20,23,22,23,7,6,246,32,5,1,16,12,5,10,45, 38,13,11,15,24,9,3,27,96,35,1,3,3,6,45,41, 13,11,21,11,4,6,7,20,21,18,5,19,20,36,10,4, 4,2,2,12,4,3,7,36,19,17,4,3,16,3,2,2, 4,4,10,38,24,10,8,18,21,20,7,6,3,7,17,5, 4,62,48,12,3,8,25,96,27,3,9,24,15,11,43,29, 12,12,10,5,19,8,2,1,8,134,5,32,15,14,39,30, 36,17,2,3,26,48,15,9,1,16,7,9,30,10,28,10, 11,7,3,3,21,6,2,3,6,20,8,9,10,10,12,14, 4,26,27,19,5,1,3,15,44,32,11,9,23,13,33,1, 3,7,23,28,9,51,15,30,15,3,1,5,20,34,16,6, 14,12,10,10,15,15,9,3,1,12,20,6,6,7,8,7, 28,8,31,16,1,16,1,9,49,25,8,7,3,2,17,38, 44,20,17,21,26,0,0,1,0,7,255,220,2,0,3,145, 0,7,0,0,1,23,11,1,7,39,55,19,1,220,36,152, 241,94,18,148,193,3,145,5,252,80,1,241,46,33,73,254, 116,0,0,2,0,26,0,123,2,127,1,149,0,55,0,74, 0,0,1,7,38,35,34,7,6,7,6,7,22,23,22,23, 22,51,50,63,1,23,6,35,34,39,38,47,1,6,7,6, 7,6,35,34,39,38,39,52,55,54,55,54,51,50,23,22, 23,22,23,54,55,54,55,54,51,50,5,38,35,7,6,7, 6,7,23,22,23,22,51,50,55,54,55,39,38,2,122,28, 38,24,20,24,37,45,22,6,13,55,9,8,42,31,18,17, 24,32,37,55,46,45,44,39,18,46,66,8,6,32,31,73, 42,24,1,1,6,48,37,47,31,33,38,40,2,47,79,35, 10,11,28,26,42,254,141,28,23,26,44,16,2,1,2,10, 43,16,18,20,22,47,69,48,31,1,116,38,20,8,13,44, 20,6,23,36,6,4,23,8,14,34,36,27,26,38,18,56, 33,4,2,12,59,35,42,7,6,60,39,29,12,14,35,1, 41,69,17,5,4,10,63,11,3,13,50,8,7,25,48,17, 7,8,16,66,42,24,0,3,0,25,0,124,2,177,1,149, 0,39,0,60,0,80,0,0,1,54,55,54,55,54,51,50, 23,22,23,7,6,7,6,35,34,39,38,47,1,7,6,7, 39,38,39,38,53,52,55,54,55,54,51,50,23,22,23,22, 7,38,39,38,39,38,35,34,15,1,6,21,22,23,22,51, 50,55,54,55,54,55,22,23,22,31,1,54,55,54,55,39, 38,39,38,35,34,7,6,7,6,1,101,71,33,11,14,30, 31,46,37,52,6,1,8,51,34,40,7,6,86,80,18,48, 63,73,31,64,34,19,1,7,58,35,41,31,30,46,53,10, 13,77,36,3,3,20,19,30,23,16,21,2,47,21,24,11, 11,47,38,10,103,60,21,20,31,27,51,26,11,1,3,14, 43,14,16,19,20,38,71,5,1,41,64,18,6,6,13,27, 37,61,31,62,37,25,1,8,80,18,46,53,7,1,9,62, 33,36,7,6,66,37,22,13,21,46,9,51,64,15,1,1, 7,18,16,27,32,51,24,12,3,11,33,9,36,58,12,12, 7,2,2,42,19,23,24,48,16,5,7,14,59,4,0,1, 0,26,0,0,2,226,2,161,0,5,0,0,1,23,1,33, 21,33,2,185,41,253,190,2,32,253,90,2,161,37,253,187, 55,0,0,1,0,23,0,0,2,71,1,198,0,5,0,0, 33,35,11,1,35,1,2,71,65,215,215,65,1,24,1,94, 254,162,1,198,0,1,0,30,0,0,2,66,1,221,0,5, 0,0,19,55,27,1,23,1,30,44,230,230,44,254,238,1, 192,29,254,137,1,119,29,254,64,0,0,1,0,40,0,0, 2,220,1,253,0,25,0,0,33,35,53,52,39,38,35,34, 7,6,29,1,35,53,52,55,54,55,54,51,50,23,22,23, 22,21,2,220,55,91,87,113,113,87,91,55,93,95,136,11, 11,138,102,97,8,1,190,109,79,76,76,79,109,190,180,125, 96,99,8,1,95,91,123,10,10,0,0,1,0,40,255,239, 2,220,1,236,0,25,0,0,1,51,21,20,7,6,7,6, 35,34,39,38,39,38,61,1,51,21,20,23,22,51,50,55, 54,53,2,165,55,93,65,90,48,50,138,102,97,8,1,55, 91,87,113,113,87,91,1,236,180,125,96,68,26,14,95,91, 123,10,10,180,190,109,79,76,76,79,109,0,0,1,0,100, 255,10,1,198,2,255,0,27,0,0,23,17,52,55,54,51, 50,23,7,38,35,34,7,6,7,17,20,7,6,7,6,35, 34,39,55,22,51,50,230,39,52,81,19,33,15,29,13,8, 4,68,2,37,37,68,25,25,13,10,2,19,15,94,33,2, 83,79,55,71,7,83,9,1,13,128,253,222,104,56,56,20, 8,3,86,8,0,2,0,100,255,10,2,182,2,255,0,27, 0,55,0,0,5,17,52,55,54,51,50,23,7,38,35,34, 7,6,7,17,20,7,6,7,6,35,34,39,55,22,51,50, 39,17,52,55,54,51,50,23,7,38,35,34,7,6,7,17, 20,7,6,7,6,35,34,39,55,22,51,50,1,214,39,52, 81,19,33,15,29,13,8,4,68,2,37,37,68,25,25,13, 10,2,19,15,94,240,39,52,81,19,33,15,29,13,8,4, 68,2,37,37,68,25,25,13,10,2,19,15,94,33,2,83, 79,55,71,7,83,9,1,13,128,253,222,104,56,56,20,8, 3,86,8,132,2,83,79,55,71,7,83,9,1,13,128,253, 222,104,56,56,20,8,3,86,8,0,0,3,0,100,255,10, 3,86,2,255,0,27,0,55,0,83,0,0,5,17,52,55, 54,51,50,23,7,38,35,34,7,6,7,17,20,7,6,7, 6,35,34,39,55,22,51,50,39,17,52,55,54,51,50,23, 7,38,35,34,7,6,7,17,20,7,6,7,6,35,34,39, 55,22,51,50,39,17,52,55,54,51,50,23,7,38,35,34, 7,6,7,17,20,7,6,7,6,35,34,39,55,22,51,50, 2,118,39,52,81,19,33,15,29,13,8,4,68,2,37,37, 68,25,25,13,10,2,19,15,94,200,39,52,81,19,33,15, 29,13,8,4,68,2,37,37,68,25,25,13,10,2,19,15, 94,200,39,52,81,19,33,15,29,13,8,4,68,2,37,37, 68,25,25,13,10,2,19,15,94,33,2,83,79,55,71,7, 83,9,1,13,128,253,222,104,56,56,20,8,3,86,8,132, 2,83,79,55,71,7,83,9,1,13,128,253,222,104,56,56, 20,8,3,86,8,132,2,83,79,55,71,7,83,9,1,13, 128,253,222,104,56,56,20,8,3,86,8,0,0,1,0,100, 255,10,1,198,2,255,0,27,0,0,23,17,52,55,54,51, 50,23,7,38,35,34,7,6,7,17,20,7,6,7,6,35, 34,39,55,22,51,50,230,39,52,81,19,33,15,29,13,8, 4,68,2,37,37,68,25,25,13,10,2,19,15,94,33,2, 83,79,55,71,7,83,9,1,13,128,253,222,104,56,56,20, 8,3,86,8,0,3,0,163,0,0,2,189,1,222,0,15, 0,31,0,47,0,0,55,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,37,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,3,52,55,54,51,50,23,22,21,20, 7,6,35,34,39,38,163,36,13,16,40,18,7,36,13,16, 40,18,7,1,152,36,13,16,40,18,7,36,13,16,39,18, 8,204,36,13,16,40,18,7,36,13,16,40,18,7,65,40, 18,7,36,13,16,40,18,7,36,13,16,40,18,7,36,13, 16,40,18,7,34,15,1,108,40,18,7,36,13,16,40,18, 7,36,13,0,0,1,0,17,0,203,2,17,1,51,0,32, 0,0,1,23,7,6,7,6,35,34,47,1,38,35,34,7, 6,7,39,54,55,54,55,23,22,23,22,23,22,23,50,55, 54,55,54,1,236,37,20,17,26,34,37,44,75,10,66,41, 24,20,23,34,41,27,4,38,66,37,30,79,11,8,40,32, 26,21,26,27,2,1,51,24,29,20,12,16,26,3,23,8, 10,37,25,33,3,37,5,1,4,28,4,3,12,1,8,10, 33,2,0,1,0,75,1,12,1,252,1,182,0,27,0,0, 1,51,21,20,7,6,35,34,47,1,38,35,34,7,6,7, 35,54,55,54,51,50,31,1,22,51,50,55,1,199,53,57, 21,27,39,42,98,23,20,29,16,5,3,53,7,84,8,9, 27,27,117,28,22,44,6,1,155,16,85,30,12,26,63,14, 35,14,29,131,13,1,16,69,17,49,0,2,0,17,255,231, 2,17,1,230,0,32,0,36,0,0,1,23,7,6,7,6, 35,34,47,1,38,35,34,7,6,7,39,54,55,54,55,23, 22,23,22,23,22,23,50,55,54,55,54,39,23,1,39,1, 236,37,20,17,26,34,37,44,75,10,66,41,24,20,23,34, 41,27,4,38,66,37,30,79,11,8,40,32,26,21,26,27, 2,123,50,254,242,51,1,51,24,29,20,12,16,26,3,23, 8,10,37,25,33,3,37,5,1,4,28,4,3,12,1,8, 10,33,2,180,28,254,29,29,0,1,0,95,0,34,1,232, 1,171,0,11,0,0,1,23,7,23,7,39,7,39,55,39, 55,23,1,182,49,146,147,50,147,146,50,147,146,49,146,1, 171,50,146,147,50,147,146,49,147,146,49,145,0,3,0,50, 0,0,2,22,1,216,0,3,0,7,0,11,0,0,1,21, 33,53,5,21,35,53,19,21,35,53,2,22,254,28,1,38, 104,104,104,1,15,70,70,167,104,104,1,112,104,104,0,1, 0,53,255,204,2,71,2,54,0,47,0,0,37,6,35,34, 39,7,35,55,38,35,34,7,39,54,51,50,23,55,39,38, 35,34,7,39,54,51,50,23,22,23,55,51,7,22,51,50, 55,23,6,35,34,39,7,23,22,51,50,55,2,71,26,135, 52,77,71,54,82,27,23,70,37,40,41,124,26,33,37,63, 29,22,70,37,40,41,124,46,70,1,8,71,54,81,32,22, 71,31,40,26,135,28,35,37,67,31,21,71,31,223,148,51, 178,205,16,80,15,132,13,93,40,16,80,15,132,44,1,5, 177,204,18,98,16,148,14,93,42,16,98,0,0,1,0,32, 255,231,2,4,1,230,0,19,0,0,55,35,53,51,55,35, 53,33,55,23,7,51,21,35,7,51,21,33,7,39,157,125, 164,57,221,1,4,76,50,59,157,196,57,253,254,220,76,51, 111,70,102,70,133,28,105,70,102,70,136,29,0,2,0,45, 255,245,2,22,2,127,0,3,0,10,0,0,37,21,33,53, 17,53,37,21,13,1,21,2,22,254,23,1,233,254,118,1, 138,56,67,67,1,51,69,207,79,161,164,79,0,2,0,45, 255,245,2,22,2,127,0,3,0,10,0,0,37,21,33,53, 1,21,5,53,45,1,53,2,22,254,23,1,233,254,23,1, 138,254,118,56,67,67,1,120,69,207,79,161,164,79,0,3, 0,43,255,241,2,221,2,163,0,11,0,29,0,53,0,0, 1,51,21,51,21,35,21,35,53,35,53,51,5,20,23,22, 51,50,55,54,53,52,47,1,38,35,34,15,1,6,7,52, 55,54,55,50,51,50,23,22,23,20,21,20,7,6,7,34, 35,34,39,38,39,52,1,105,54,223,223,54,221,221,254,247, 88,85,119,123,86,83,88,31,77,96,123,86,26,57,53,97, 97,139,6,6,140,100,100,5,97,97,139,6,6,140,100,100, 5,2,65,220,54,223,223,54,27,123,86,83,88,85,119,123, 86,26,57,88,31,77,96,140,100,100,5,97,97,139,6,6, 140,100,100,5,97,97,139,6,0,3,0,43,255,241,2,221, 2,163,0,3,0,21,0,45,0,0,1,33,53,33,5,20, 23,22,51,50,55,54,53,52,47,1,38,35,34,15,1,6, 7,52,55,54,55,50,51,50,23,22,23,20,21,20,7,6, 7,34,35,34,39,38,39,52,2,126,254,14,1,242,253,226, 88,85,119,123,86,83,88,31,77,96,123,86,26,57,53,97, 97,139,6,6,140,100,100,5,97,97,139,6,6,140,100,100, 5,1,47,54,27,123,86,83,88,85,119,123,86,26,57,88, 31,77,96,140,100,100,5,97,97,139,6,6,140,100,100,5, 97,97,139,6,0,3,0,43,255,239,2,221,2,161,0,11, 0,35,0,53,0,0,19,55,23,55,23,7,23,7,39,7, 39,55,33,52,55,54,55,50,51,50,23,22,23,20,21,20, 7,6,7,34,35,34,39,38,39,52,55,20,23,22,51,50, 55,54,53,52,47,1,38,35,34,15,1,6,193,39,156,156, 39,156,156,39,156,156,39,156,254,206,97,97,139,6,6,140, 100,100,5,97,97,139,6,6,140,100,100,5,53,88,85,119, 123,86,83,88,31,77,96,123,86,26,57,1,228,39,157,156, 38,156,156,38,156,157,39,156,140,100,100,5,97,97,139,6, 6,140,100,100,5,97,97,139,6,6,123,86,83,88,85,119, 123,86,26,57,88,31,77,0,0,1,0,15,0,0,2,140, 2,162,0,7,0,0,37,21,33,53,33,17,51,17,2,140, 253,131,1,35,55,55,55,55,2,107,253,149,0,3,0,39, 255,232,3,13,2,207,0,8,0,18,0,44,0,0,9,1, 22,51,50,55,54,53,52,9,1,38,35,34,15,1,6,21, 20,1,23,7,22,21,20,7,6,7,6,35,34,39,7,39, 55,38,53,52,55,54,55,54,51,50,23,2,138,254,74,86, 116,129,92,91,253,217,1,183,87,113,129,92,28,63,2,130, 36,91,92,101,100,145,10,11,139,102,97,37,97,89,101,100, 145,10,11,136,104,2,42,254,70,74,92,91,129,117,254,195, 1,183,73,92,32,83,105,113,1,226,35,91,103,140,147,107, 104,8,1,91,98,37,98,102,137,147,107,104,8,1,89,0, 0,2,0,16,0,0,1,206,2,232,0,5,0,9,0,0, 1,19,3,35,3,27,2,11,1,1,14,192,192,62,192,192, 32,160,160,161,2,232,254,140,254,140,1,116,1,116,253,84, 1,56,1,56,254,200,0,1,0,55,0,0,1,242,2,182, 0,28,0,0,1,17,20,7,6,35,34,39,38,53,52,55, 54,51,50,23,17,51,21,20,23,22,29,1,35,53,52,39, 38,1,21,56,25,30,64,32,15,56,25,30,54,32,25,137, 84,25,137,38,1,247,254,92,50,23,10,39,20,24,50,23, 10,29,2,45,55,28,109,67,148,56,56,28,109,30,0,1, 0,102,0,87,1,88,1,47,0,11,0,0,19,22,23,22, 23,7,6,35,38,47,1,38,102,150,67,24,1,3,5,16, 33,36,68,38,1,47,77,77,28,17,9,7,3,46,85,44, 0,2,0,80,0,101,1,28,1,54,0,15,0,31,0,0, 19,50,23,22,21,20,7,6,35,34,39,38,53,52,55,54, 23,34,7,6,21,20,23,22,51,50,55,54,53,52,39,38, 182,54,31,17,46,26,30,55,30,17,47,25,30,45,22,11, 40,17,21,45,23,10,40,18,1,54,47,26,32,56,31,17, 47,26,31,57,31,17,24,40,19,22,46,24,10,41,18,21, 48,23,10,0,0,2,0,152,0,170,3,64,3,94,0,30, 0,60,0,0,1,54,55,54,51,50,23,22,23,7,6,7, 6,7,6,7,6,7,6,7,6,39,38,53,52,55,54,55, 54,55,54,37,54,63,1,50,23,22,23,7,6,7,6,7, 6,7,6,7,6,7,6,35,39,38,52,55,54,55,54,55, 54,2,201,13,37,10,11,5,5,33,4,2,1,2,24,80, 20,11,26,77,28,15,8,12,5,4,42,72,25,25,14,254, 192,15,36,18,6,5,31,1,3,2,2,27,89,16,11,30, 86,33,18,7,9,4,5,5,46,87,27,35,17,3,17,53, 18,5,1,9,50,31,8,8,82,177,42,26,58,119,42,26, 12,1,3,7,6,7,74,181,62,148,82,44,50,14,4,2, 9,48,31,6,7,78,174,33,22,61,121,46,28,11,1,2, 13,7,77,192,59,148,70,0,0,1,1,8,0,97,3,35, 2,191,0,42,0,0,37,54,55,35,6,7,6,7,39,55, 54,55,54,55,22,23,15,1,6,7,6,7,51,55,23,22, 21,15,2,6,7,22,21,20,7,35,38,47,1,38,39,22, 2,10,89,86,222,79,126,1,2,2,1,109,62,22,31,71, 1,4,16,4,10,12,28,222,29,9,55,3,15,33,110,111, 74,14,11,33,34,66,36,41,90,226,126,171,153,115,1,1, 2,4,138,155,58,93,20,18,8,13,2,6,29,60,42,6, 43,12,8,7,9,171,115,72,34,13,1,7,50,98,48,42, 58,0,0,2,0,99,0,124,3,144,3,108,0,22,0,47, 0,0,37,54,55,54,55,54,53,38,39,38,39,38,35,34, 7,6,7,6,21,23,22,23,22,23,38,39,38,39,38,53, 52,55,54,55,54,51,23,22,23,22,23,22,21,20,7,6, 7,6,1,244,121,106,99,20,4,2,94,93,120,21,20,122, 106,100,19,3,3,18,98,109,122,136,118,111,28,7,101,97, 133,35,34,52,133,107,106,13,1,101,99,132,39,175,1,89, 83,107,22,23,108,93,93,16,3,87,83,106,19,18,41,107, 85,90,52,2,98,91,120,32,32,124,109,106,28,8,3,19, 102,102,122,14,13,122,109,106,29,9,0,1,1,207,0,24, 3,88,3,224,0,31,0,0,9,1,54,55,50,23,22,21, 7,6,7,9,1,22,23,20,7,6,7,6,35,34,39,1, 38,53,52,53,38,53,54,55,1,238,1,19,21,27,9,7, 12,3,4,8,254,234,1,32,15,1,4,3,5,7,8,28, 22,254,222,20,6,1,23,2,47,1,144,32,1,5,7,19, 22,11,11,254,106,254,101,23,21,11,7,6,3,5,32,1, 158,6,22,3,2,13,12,28,3,0,0,1,0,77,0,2, 1,254,3,228,0,28,0,0,9,1,38,53,52,55,54,51, 50,23,1,22,21,20,15,1,6,35,1,6,35,6,39,38, 53,52,55,54,55,1,168,254,198,17,11,6,10,28,22,1, 63,20,1,1,5,14,254,178,23,26,10,7,11,10,4,4, 1,245,1,163,23,23,17,8,4,30,254,87,5,24,6,6, 18,20,254,83,29,1,6,8,16,17,18,6,6,0,0,2, 2,88,0,0,3,207,3,232,0,5,0,11,0,0,1,51, 3,19,35,3,19,51,3,19,35,3,3,157,50,188,188,50, 188,50,50,187,187,50,187,3,232,254,12,254,12,1,244,1, 244,254,12,254,12,1,244,0,0,2,0,25,0,0,1,144, 3,232,0,5,0,11,0,0,1,3,51,19,3,35,3,51, 19,3,35,19,1,94,188,50,188,188,50,137,50,187,187,50, 187,1,244,1,244,254,12,254,12,3,232,254,12,254,12,1, 244,0,0,1,1,183,255,247,3,166,3,241,0,27,0,0, 1,33,50,23,22,21,20,15,1,35,33,17,20,7,6,35, 34,39,38,53,17,38,53,52,55,54,51,50,2,17,1,90, 41,14,4,33,25,1,254,174,25,6,7,23,10,4,23,29, 10,21,19,3,220,25,6,7,23,10,4,252,161,41,14,4, 33,12,14,3,103,11,18,22,10,27,0,1,0,190,255,247, 2,47,3,241,0,27,0,0,37,17,52,55,54,51,50,23, 22,21,17,22,21,20,7,6,35,34,39,35,34,39,38,53, 52,55,54,51,1,206,25,6,6,25,10,3,22,28,10,22, 18,11,220,43,14,3,32,13,15,88,3,94,43,13,3,34, 11,14,252,154,11,18,22,10,28,22,25,6,7,22,11,4, 0,2,2,188,0,50,3,182,3,232,0,5,0,11,0,0, 37,51,17,51,53,35,39,51,21,35,17,35,2,213,50,150, 200,25,250,150,100,75,3,82,50,25,100,252,174,0,0,2, 0,50,0,0,1,44,3,182,0,5,0,11,0,0,55,51, 17,35,17,35,7,53,51,17,51,17,75,200,50,150,25,150, 100,25,3,132,252,174,75,100,3,82,252,74,0,1,2,188, 0,0,3,182,3,232,0,13,0,0,1,51,6,7,6,7, 6,21,20,23,22,31,1,35,2,188,250,93,29,1,2,22, 22,24,88,13,250,3,232,196,114,8,7,93,96,96,90,102, 173,25,0,1,0,50,0,0,1,44,3,232,0,14,0,0, 19,51,17,35,54,55,54,55,54,53,52,39,38,39,38,50, 250,250,84,26,9,6,21,21,27,92,3,3,232,252,24,169, 79,27,25,90,96,96,93,115,197,6,0,1,1,170,255,251, 2,246,3,249,0,38,0,0,1,38,53,52,63,1,54,51, 50,23,22,21,20,7,6,15,1,23,21,17,23,22,21,20, 7,6,35,34,47,1,6,35,34,39,38,53,39,54,55,1, 189,19,25,230,23,25,14,8,7,6,7,12,214,1,204,23, 8,7,13,24,25,176,6,6,23,10,4,3,1,2,2,191, 4,20,27,24,217,21,8,7,11,11,13,13,12,202,3,1, 254,53,204,23,25,13,8,8,24,177,3,32,13,15,26,4, 2,0,0,1,0,197,255,246,1,246,3,237,0,43,0,0, 37,19,39,38,53,52,55,54,51,50,31,1,54,51,50,23, 22,23,22,23,20,15,1,3,22,21,20,7,6,7,34,39, 7,6,7,34,39,38,39,38,53,55,54,55,1,154,2,173, 25,7,8,14,24,23,152,2,6,23,10,2,1,11,1,4, 7,2,17,21,9,25,5,3,166,23,22,9,7,5,4,6, 4,7,18,214,2,41,161,24,24,11,9,8,21,141,1,33, 6,7,16,16,9,7,8,254,15,8,19,21,20,33,2,1, 133,18,1,4,2,5,7,10,17,18,14,0,0,3,0,177, 0,66,3,69,3,32,0,7,0,24,0,92,0,0,1,22, 23,54,55,15,1,6,7,38,39,6,7,6,7,6,21,20, 23,22,23,22,51,55,54,19,7,34,35,63,1,50,51,48, 55,23,6,7,54,55,23,6,7,6,21,54,51,50,23,55, 23,7,22,23,22,21,20,7,6,15,1,39,54,55,54,55, 54,53,52,39,38,39,6,7,23,7,6,35,34,39,38,39, 38,39,38,53,52,55,54,55,54,55,52,1,200,4,11,53, 63,55,58,8,50,18,5,29,21,72,22,5,2,10,26,3, 2,19,44,45,137,5,6,1,144,5,4,18,65,12,5,49, 108,15,121,57,5,65,59,24,24,50,55,38,46,31,64,29, 38,106,57,17,114,35,8,6,17,42,26,43,93,79,7,54, 78,66,7,8,58,28,6,3,7,85,19,22,36,50,1,176, 69,66,62,92,3,11,2,198,101,69,14,16,51,76,20,16, 11,8,29,7,1,2,14,1,158,1,65,1,147,9,88,43, 6,27,63,30,7,52,41,16,3,78,35,58,17,30,62,96, 63,49,64,34,17,63,31,36,8,10,29,44,76,41,25,12, 141,84,38,11,75,1,8,53,10,12,22,24,90,83,19,16, 26,22,48,0,0,3,0,132,0,90,3,117,3,165,0,6, 0,23,0,95,0,0,1,22,23,54,55,35,6,7,38,39, 6,7,6,7,6,21,20,23,22,23,22,51,55,54,19,6, 35,63,1,50,55,54,55,23,6,7,54,55,23,7,6,7, 6,21,54,51,50,23,55,23,7,22,23,22,21,20,7,6, 7,6,15,1,39,54,55,54,55,54,53,52,39,38,39,6, 7,23,7,34,53,6,35,34,39,38,39,38,39,38,53,52, 55,54,55,54,55,52,1,188,4,16,72,74,57,43,102,22, 5,34,32,81,27,8,3,11,31,5,5,21,51,58,39,137, 1,154,14,13,6,16,64,14,6,68,120,16,144,34,32,6, 73,72,31,31,59,55,47,55,38,73,12,8,13,43,116,70, 18,124,42,16,9,21,50,31,54,122,81,9,63,1,88,74, 7,8,61,32,8,5,7,88,26,30,40,61,2,0,82,90, 84,110,4,249,123,83,16,22,60,85,25,21,14,11,35,10, 2,2,14,1,236,2,65,1,1,58,116,9,106,53,10,30, 63,34,6,3,80,39,20,4,93,35,73,18,37,70,109,42, 38,25,22,71,38,21,63,34,37,13,16,35,54,88,49,31, 14,181,83,47,12,2,83,1,7,57,13,15,24,27,98,91, 26,22,30,26,45,0,0,2,0,206,0,136,3,32,2,170, 0,13,0,33,0,0,1,55,22,23,22,23,22,21,7,39, 53,38,39,38,37,23,6,21,20,23,22,23,54,55,23,6, 15,1,38,39,38,39,55,54,2,120,51,68,21,4,4,19, 1,65,3,11,17,254,62,63,44,1,4,36,31,28,57,45, 33,69,58,12,3,1,1,5,2,30,39,86,51,11,11,58, 86,57,1,94,50,35,50,231,17,157,77,12,12,77,96,76, 47,31,75,112,3,147,77,23,21,62,70,0,0,2,0,165, 0,166,3,73,3,28,0,15,0,34,0,0,1,55,22,23, 22,23,22,21,7,47,1,38,39,38,39,38,37,23,6,7, 21,22,23,54,55,23,6,15,1,38,39,38,39,53,54,2, 145,51,78,25,4,4,22,1,65,1,3,13,19,77,2,254, 70,63,47,3,5,47,30,42,57,45,46,69,63,14,7,2, 6,2,126,40,100,60,12,11,65,107,59,1,112,58,39,57, 101,3,161,17,175,83,42,88,127,82,73,31,76,143,3,160, 79,37,34,66,83,0,0,2,0,243,0,62,3,18,3,8, 0,34,0,47,0,0,1,39,54,55,54,23,50,23,22,21, 20,7,6,7,6,7,6,15,1,39,54,55,54,55,54,63, 1,38,39,38,39,7,34,35,6,39,55,22,23,22,51,50, 55,23,7,34,39,38,1,8,21,118,75,49,42,137,67,55, 5,24,113,3,4,54,112,6,19,104,52,72,32,8,4,3, 1,32,48,127,66,2,2,66,37,31,77,36,29,41,34,55, 5,99,44,34,49,1,181,61,39,9,6,1,59,49,77,22, 22,103,78,3,2,36,36,2,63,32,34,47,66,17,16,31, 47,28,41,1,4,8,246,57,39,8,6,5,65,5,8,10, 0,2,0,205,0,86,3,58,3,134,0,36,0,50,0,0, 19,39,54,55,54,51,50,23,22,23,20,7,6,7,6,7, 6,7,39,54,55,54,55,54,55,54,55,54,53,52,39,38, 35,7,34,7,6,3,55,22,23,22,51,50,55,23,6,35, 34,39,38,225,20,128,93,55,48,158,77,61,1,6,25,119, 10,10,67,131,19,119,54,4,4,85,37,11,4,4,40,56, 149,73,5,4,84,32,30,85,48,34,49,35,67,5,78,33, 52,41,58,2,6,62,43,12,6,68,53,89,25,24,111,87, 7,7,44,40,62,37,34,3,3,55,76,21,20,17,17,58, 36,49,3,1,10,1,28,58,45,10,7,5,65,6,9,12, 0,2,0,134,0,29,3,49,3,35,0,48,0,58,0,0, 19,55,22,51,50,55,23,7,6,7,6,7,54,55,54,51, 50,23,22,21,7,20,23,22,23,50,55,23,6,35,39,38, 39,38,61,1,52,53,34,7,6,7,6,7,39,1,6,35, 34,39,55,22,23,22,23,7,38,39,38,219,9,83,83,103, 124,33,198,7,50,17,7,56,39,12,12,42,17,10,2,8, 12,59,50,116,11,128,49,45,64,23,13,6,5,31,45,65, 166,43,1,155,68,77,88,1,29,74,45,52,129,1,133,62, 43,2,17,65,15,25,61,205,3,47,17,4,34,9,4,34, 21,28,43,61,13,18,1,21,65,21,3,10,46,26,50,80, 2,1,1,8,28,38,124,49,1,171,11,230,59,37,11,13, 2,65,2,15,10,0,0,2,0,80,0,48,3,98,3,164, 0,46,0,56,0,0,19,55,22,51,50,51,54,55,23,1, 54,55,54,51,50,23,22,21,7,23,22,23,22,51,50,55, 23,6,35,34,39,38,53,55,38,39,6,7,6,7,6,7, 39,1,6,35,34,19,55,22,23,22,23,7,38,39,38,176, 9,127,71,5,5,82,168,32,254,195,67,41,14,13,47,16, 12,3,2,5,30,20,40,51,142,11,148,56,116,32,15,1, 1,1,30,51,17,9,74,194,43,1,231,87,95,103,2,28, 93,47,64,146,1,154,71,55,2,114,64,18,1,29,61,254, 184,40,9,4,36,23,32,49,60,37,9,7,24,64,25,66, 25,59,91,7,5,2,28,9,5,44,144,49,1,249,15,1, 10,58,43,12,16,2,65,2,17,13,0,3,0,136,0,40, 3,101,2,240,0,8,0,22,0,109,0,0,1,55,22,23, 22,23,7,38,39,1,6,15,1,20,23,22,23,55,54,55, 54,63,1,3,38,39,55,22,23,54,55,23,6,7,54,55, 23,6,7,6,7,54,51,50,23,22,23,22,23,22,21,20, 7,6,35,34,39,38,39,38,53,52,63,1,23,6,21,20, 23,22,23,22,51,55,54,55,54,55,54,55,52,39,38,39, 38,39,38,35,34,7,23,6,7,6,7,6,35,34,39,38, 39,38,53,52,55,54,55,54,55,52,2,152,31,60,29,22, 49,51,48,73,254,174,113,28,1,1,10,44,29,6,4,45, 6,1,2,51,121,9,104,62,4,1,65,1,4,50,116,13, 124,58,2,2,123,91,50,43,96,39,11,4,4,72,67,96, 9,10,79,32,19,6,7,63,10,4,12,41,6,6,39,34, 28,55,21,6,1,2,11,63,15,17,29,40,84,134,7,1, 11,21,66,25,28,18,19,54,22,14,17,8,13,54,114,2, 81,57,31,24,18,59,41,67,39,254,233,55,83,20,3,1, 14,3,1,1,2,14,44,44,1,40,1,15,65,15,1,99, 61,1,64,93,5,22,63,25,4,41,86,44,13,29,74,21, 23,18,18,88,63,59,1,5,44,25,34,20,29,25,15,39, 22,13,5,16,6,1,1,4,13,29,63,21,19,9,8,53, 31,8,5,11,48,119,41,30,56,20,7,3,9,33,22,26, 29,34,15,19,75,51,53,0,0,3,0,85,0,60,3,154, 3,110,0,9,0,25,0,111,0,0,1,55,22,23,22,23, 7,38,39,38,1,6,7,6,15,1,23,22,23,55,54,55, 54,63,1,39,19,38,39,55,22,51,55,23,6,7,54,55, 23,6,7,6,21,54,51,50,23,22,23,22,23,22,21,6, 7,6,35,34,39,38,39,38,53,38,55,23,6,21,20,23, 22,23,22,23,55,54,55,54,55,54,53,52,39,38,39,38, 39,38,35,34,7,6,7,23,6,7,6,7,6,35,34,39, 38,39,38,53,52,55,54,63,1,54,2,180,31,70,32,36, 45,50,45,27,26,254,80,130,37,3,3,2,3,11,52,34, 9,7,54,8,3,6,2,69,134,9,134,63,7,64,3,3, 70,129,13,139,76,4,143,107,58,50,105,46,14,6,4,1, 76,77,111,12,12,89,36,20,1,16,63,12,6,14,49,8, 7,44,43,33,62,26,10,2,12,72,20,22,35,48,121,130, 2,2,8,1,13,21,72,30,34,21,21,60,25,14,43,60, 135,3,1,2,186,58,37,27,30,58,41,56,23,21,254,218, 64,88,8,8,21,10,18,4,1,1,3,16,51,42,100,1, 5,1,18,64,18,190,1,134,53,5,27,64,28,6,102,56, 53,15,32,80,26,28,19,20,96,71,72,1,7,48,27,38, 26,59,16,45,25,16,9,19,8,1,1,1,4,17,32,71, 27,26,11,10,61,38,11,7,11,55,1,1,145,43,32,60, 24,10,4,11,36,26,28,49,59,85,60,150,23,0,0,2, 0,119,0,121,3,139,3,142,0,15,0,75,0,0,1,55, 22,23,22,23,22,23,7,39,55,22,23,38,39,38,37,6, 35,34,39,55,22,51,50,55,54,55,23,6,7,55,22,23, 22,23,22,21,20,7,6,7,6,15,1,38,47,1,55,22, 51,50,51,54,55,54,55,54,53,52,39,38,39,38,47,1, 7,35,6,7,6,7,39,54,55,54,2,115,45,90,34,12, 11,42,46,52,159,14,32,92,36,35,38,254,104,37,48,56, 57,7,67,42,51,39,8,2,65,2,6,46,106,52,12,8, 11,63,38,24,27,36,28,35,61,10,33,59,24,2,2,22, 39,10,9,55,6,16,49,8,7,31,57,1,21,112,24,43, 55,94,31,47,2,164,47,89,46,17,17,67,151,55,35,64, 8,20,112,57,61,21,6,8,64,7,9,90,149,1,152,75, 4,1,79,18,22,32,37,81,142,84,27,31,8,2,2,37, 6,56,35,4,71,18,20,124,79,24,18,47,19,3,2,3, 6,186,196,42,67,34,154,69,108,0,0,4,0,89,0,93, 3,231,3,176,0,10,0,21,0,40,0,107,0,0,1,55, 22,23,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,47,1,55,22,23,22,23,22,23,22,23,7,39, 55,23,38,39,38,39,38,5,6,35,34,39,55,22,51,50, 55,54,55,23,6,7,54,51,50,23,22,23,22,23,22,21, 20,7,6,7,6,7,6,15,1,38,39,38,39,55,22,23, 50,55,54,55,54,55,54,55,52,39,38,39,38,39,38,35, 34,7,6,7,6,7,39,54,55,54,3,89,30,60,20,2, 2,18,10,59,13,28,119,29,58,17,4,4,13,15,61,12, 25,183,46,100,41,8,8,46,48,1,1,52,174,15,138,40, 38,39,105,2,254,177,48,55,62,52,6,66,51,56,45,8, 4,64,2,7,30,24,28,25,81,40,9,6,11,62,2,3, 42,28,28,35,29,38,65,8,4,34,64,26,4,2,25,40, 12,10,60,1,7,17,54,9,9,16,20,25,38,21,117,27, 51,55,100,34,53,2,246,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,12,47,96,61, 12,13,73,157,2,4,56,39,63,30,124,63,63,101,2,76, 6,8,64,8,10,84,178,2,166,82,4,6,18,71,15,17, 34,39,86,144,5,6,92,31,30,8,2,1,41,5,2,55, 38,1,1,5,74,21,24,134,85,27,20,52,21,4,2,3, 6,198,205,49,81,35,163,76,119,0,0,1,0,150,0,22, 3,104,3,164,0,77,0,0,1,7,39,55,22,55,50,55, 38,39,55,22,23,54,55,54,55,23,6,7,22,23,54,55, 23,6,7,22,23,7,38,35,34,7,6,7,6,7,20,23, 22,23,22,51,50,55,54,55,23,6,7,35,38,39,38,39, 38,53,52,55,54,55,54,51,50,23,38,39,6,35,34,39, 55,22,51,54,55,38,1,211,95,168,4,122,57,30,26,21, 32,62,36,22,54,108,29,20,20,135,70,27,38,80,172,19, 159,65,48,94,31,156,81,60,53,75,54,46,5,50,56,73, 51,57,95,177,5,8,17,175,91,68,48,44,87,63,78,77, 67,84,66,73,59,64,42,38,91,119,99,115,5,135,82,88, 70,45,2,164,2,7,65,8,1,1,57,118,17,128,59,4, 34,9,5,62,42,10,61,51,16,51,62,47,15,51,83,59, 38,15,19,40,33,33,27,37,38,17,13,48,2,2,63,48, 5,3,11,21,44,54,62,62,57,48,22,18,12,41,45,16, 11,64,10,1,9,74,0,3,0,122,255,241,3,184,3,199, 0,8,0,19,0,101,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,7,38,39, 55,22,55,50,55,38,39,55,22,23,54,55,54,55,23,6, 7,22,23,54,55,23,6,7,22,23,7,38,7,34,7,6, 7,6,7,22,23,22,23,22,23,22,51,50,55,54,55,23, 6,15,1,38,39,38,39,38,53,55,54,55,54,55,54,51, 50,23,38,39,6,35,34,39,55,22,51,50,55,38,3,41, 31,61,23,14,14,60,13,27,120,30,56,17,5,4,17,11, 60,12,26,254,205,107,67,113,4,134,63,32,29,22,37,63, 33,30,70,143,10,8,19,147,77,30,43,95,180,18,159,87, 47,110,30,169,90,65,58,80,60,52,4,2,49,3,2,58, 82,56,62,103,186,8,11,17,183,95,72,57,52,94,67,83, 3,13,66,69,93,70,78,67,77,56,39,100,130,106,123,5, 142,91,100,77,51,3,130,57,32,25,15,34,25,33,17,31, 58,30,16,4,5,19,34,23,34,16,127,3,1,7,65,8, 1,1,60,132,18,125,80,8,44,3,2,62,46,11,69,57, 19,54,63,47,20,51,98,60,42,1,15,21,44,38,35,31, 37,1,2,41,19,14,51,2,3,63,50,7,1,2,13,24, 47,56,67,29,51,47,49,26,19,15,55,46,18,12,64,11, 12,84,0,1,0,243,0,59,2,150,3,160,0,38,0,0, 1,23,6,15,2,6,7,6,21,20,23,22,31,1,22,31, 1,7,38,39,38,47,1,38,39,38,53,52,55,52,55,54, 55,54,55,54,55,54,2,45,56,102,61,26,89,17,5,4, 5,11,84,14,77,157,5,47,158,69,3,3,79,33,15,11, 7,1,16,62,34,12,70,107,2,3,160,32,178,77,30,99, 21,14,11,9,10,11,24,67,11,62,162,5,46,162,57,3, 2,64,30,31,23,26,20,19,2,2,43,63,35,13,79,188, 3,0,0,3,0,225,0,25,3,116,3,194,0,10,0,21, 0,57,0,0,1,55,22,23,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,3,23,6,15,2,6, 7,6,21,20,23,22,23,22,23,22,31,1,7,38,47,1, 38,39,38,53,52,55,54,55,54,55,54,55,54,2,230,30, 60,20,2,2,18,10,59,13,28,119,29,58,17,4,4,13, 15,61,12,25,143,56,104,58,42,96,19,6,5,6,12,79, 25,3,83,168,7,47,169,83,84,37,15,12,8,18,68,36, 12,71,109,4,2,231,57,31,21,3,2,20,29,25,33,17, 31,58,31,16,4,4,16,37,23,34,16,1,41,33,182,74, 51,107,23,16,11,11,11,13,25,64,20,3,67,173,7,46, 175,68,68,33,32,25,29,23,22,45,69,37,13,81,189,6, 0,2,0,117,0,53,3,165,3,98,0,34,0,48,0,0, 1,6,35,38,39,55,22,51,50,55,53,51,21,54,55,23, 6,7,21,20,7,6,7,6,7,6,15,1,39,54,55,54, 55,54,55,1,23,6,21,20,21,22,31,1,7,38,39,55, 54,2,200,47,55,82,139,9,149,65,54,46,65,41,95,20, 100,56,10,9,20,6,7,49,130,78,20,144,49,19,12,39, 1,253,209,64,34,2,45,3,64,48,3,2,5,2,93,8, 1,21,64,20,8,195,181,10,31,62,33,13,138,132,50,47, 35,11,10,68,47,27,62,48,38,15,17,56,167,1,122,10, 206,104,12,12,108,212,14,14,226,120,92,88,0,3,0,89, 0,20,3,199,3,157,0,8,0,52,0,69,0,0,1,55, 22,23,22,23,7,38,39,7,6,39,34,39,55,22,51,50, 55,53,23,21,22,23,22,23,7,38,39,38,39,21,54,55, 23,6,7,21,20,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,1,23,6,21,20,21,22,31,1,21,7,38,39, 38,53,55,54,3,56,31,61,23,14,14,60,13,27,135,52, 59,90,151,9,158,75,59,51,65,41,21,17,11,60,13,12, 2,3,43,107,20,102,68,11,13,32,53,137,21,65,21,156, 53,22,13,43,1,253,163,65,38,3,48,4,64,47,7,1, 2,5,3,100,57,32,25,15,34,25,33,17,228,8,1,22, 64,22,9,214,1,35,20,24,19,34,23,31,9,2,2,88, 11,34,61,35,16,151,142,54,66,44,73,50,8,21,61,52, 41,17,18,62,176,1,158,11,222,122,9,8,116,226,18,2, 13,222,110,21,20,97,94,0,0,2,0,156,0,121,3,50, 3,70,0,25,0,37,0,0,19,23,6,21,20,23,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,53,52, 55,54,19,55,22,51,50,55,23,6,35,34,39,38,189,61, 27,3,25,126,39,35,52,55,82,170,8,143,121,164,107,91, 25,11,30,2,91,11,126,137,77,87,4,122,62,33,29,70, 1,150,24,67,33,11,6,43,22,7,2,5,18,64,18,33, 29,53,23,27,35,76,5,1,115,64,26,8,65,9,2,4, 0,4,0,131,0,93,3,199,3,137,0,8,0,19,0,45, 0,58,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,1,23,6,21,20,23,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,53,52, 55,54,19,55,22,31,1,54,55,23,6,35,34,39,38,3, 56,31,61,23,14,14,60,13,27,120,30,56,17,5,4,17, 11,60,12,26,253,146,60,30,4,28,138,41,39,56,59,98, 176,7,152,132,177,116,96,27,12,34,1,95,12,134,69,102, 49,108,4,133,66,36,31,67,3,80,57,32,25,15,34,25, 33,17,31,58,30,16,4,5,19,34,23,34,16,254,139,23, 77,32,13,7,47,25,8,2,5,20,65,20,37,31,55,25, 29,40,81,4,1,147,65,24,4,1,2,7,65,9,2,4, 0,1,0,140,0,62,3,20,3,133,0,61,0,0,1,6, 39,34,39,55,22,51,50,55,38,39,55,22,23,54,55,23, 6,7,22,31,1,7,38,39,38,35,34,7,6,7,6,21, 23,22,23,22,23,22,51,50,55,23,6,35,34,39,38,39, 38,39,55,54,55,54,55,54,51,50,23,38,1,254,44,47, 101,149,9,157,93,32,31,17,16,64,20,14,70,144,18,144, 68,36,94,58,39,146,76,28,26,33,31,73,55,51,3,10, 45,57,75,42,45,67,131,16,139,77,51,49,87,67,82,4, 2,16,108,51,51,46,49,70,71,52,2,142,5,1,24,64, 23,2,70,104,10,117,57,12,42,62,42,13,93,108,65,54, 71,13,5,8,19,50,49,34,20,27,33,40,16,10,33,63, 35,11,21,46,57,68,32,83,64,31,13,12,25,71,0,3, 0,114,0,29,3,236,3,225,0,8,0,19,0,81,0,0, 1,55,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,5,6,39,34,39,55,22,51,50,55,38,39, 55,22,23,54,55,23,6,7,22,31,1,7,38,39,38,7, 34,7,6,7,6,21,22,23,22,23,22,51,54,55,23,6, 7,39,38,39,38,39,38,39,55,54,55,54,55,54,51,50, 23,38,3,94,30,62,22,18,10,59,13,29,118,29,59,20, 2,2,14,14,61,12,27,254,200,48,51,113,159,10,184,75, 44,39,18,19,65,18,19,91,143,18,158,74,36,93,76,39, 156,83,32,30,36,33,77,63,56,3,61,64,80,46,49,73, 142,15,147,75,64,27,27,98,68,87,4,2,14,110,59,59, 48,51,81,86,72,3,168,57,32,25,20,29,25,33,18,33, 58,29,22,2,2,17,35,23,34,16,189,5,1,26,64,27, 5,69,121,10,118,73,17,43,63,46,14,98,108,86,53,76, 15,6,1,8,20,55,51,46,42,42,43,18,11,1,35,64, 35,2,3,3,6,24,48,60,73,31,85,70,38,14,13,32, 94,0,0,1,1,8,0,39,3,105,3,98,0,39,0,0, 1,51,7,6,7,6,7,23,22,23,22,23,22,55,50,55, 54,55,54,55,23,6,7,6,7,6,35,34,39,38,39,38, 53,52,55,54,55,54,53,52,1,35,65,1,2,6,15,1, 3,4,11,26,82,38,42,58,51,60,80,11,23,53,78,45, 35,38,67,76,115,77,35,18,25,16,1,1,10,3,98,203, 75,67,164,27,60,35,24,66,28,13,1,26,33,108,15,33, 37,112,42,34,21,35,71,33,41,57,82,39,144,12,9,104, 142,31,0,3,0,247,0,3,3,133,3,128,0,8,0,19, 0,59,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,37,55,7,6,7,6,7,23, 22,23,22,23,22,51,50,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,39,38,53,52,55,54,55,54,53,52, 2,60,30,62,22,18,10,59,13,29,118,29,59,20,2,2, 14,14,61,12,27,254,254,65,1,2,7,16,1,3,4,12, 33,87,41,43,64,57,67,86,14,22,53,82,46,40,43,71, 80,119,84,41,20,27,17,1,1,11,3,18,57,32,25,20, 29,25,33,18,33,58,29,22,2,2,17,35,23,34,16,187, 1,213,86,75,173,35,63,38,27,73,30,14,30,36,118,19, 32,37,117,45,40,23,38,74,36,46,60,90,42,153,13,11, 113,157,32,0,0,2,0,128,0,54,3,114,3,132,0,15, 0,68,0,0,1,38,39,6,7,6,21,23,22,23,22,23, 55,54,55,54,19,39,38,39,55,22,51,50,55,39,55,22, 49,54,55,23,6,7,23,20,7,22,21,20,7,6,7,6, 7,6,39,34,39,55,22,51,54,55,54,55,6,35,34,39, 38,53,52,55,54,51,50,23,39,2,22,23,97,59,29,23, 3,5,11,25,66,37,25,15,34,13,124,111,174,8,230,106, 32,30,9,65,9,90,182,11,175,106,3,2,7,8,28,87, 9,10,54,81,29,72,6,64,33,66,35,60,32,49,63,88, 53,38,44,52,84,68,55,2,1,165,62,2,2,29,23,39, 28,17,12,32,1,3,5,11,24,1,25,1,4,20,64,25, 1,206,3,204,8,30,64,30,9,156,27,24,27,33,35,39, 134,60,7,5,30,1,6,65,6,1,19,33,95,32,55,42, 59,64,44,50,34,109,0,4,0,98,0,20,3,144,3,200, 0,8,0,19,0,36,0,96,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,3,38, 39,6,7,6,7,20,23,22,23,22,23,55,54,55,54,19, 7,38,39,55,22,51,50,55,39,55,22,23,54,55,23,6, 7,23,6,7,22,21,20,7,6,7,6,7,6,35,39,34, 39,55,22,51,50,55,54,55,54,55,6,7,6,35,34,39, 38,39,38,53,52,55,54,51,50,23,52,2,242,31,60,24, 14,14,60,13,29,118,30,58,21,1,2,17,11,60,13,27, 177,25,108,65,32,25,1,5,5,12,28,69,39,30,19,38, 13,121,121,202,8,240,127,34,33,10,64,8,3,83,214,10, 198,107,3,1,2,8,9,29,93,10,11,57,86,86,4,21, 6,67,37,73,39,64,35,3,2,4,3,53,67,44,38,41, 27,41,47,56,90,77,58,3,143,57,31,26,15,34,25,33, 17,32,58,29,22,2,2,19,33,23,34,16,254,94,69,2, 2,32,25,43,17,15,19,13,34,3,2,6,14,27,1,51, 1,4,24,64,27,1,225,3,148,75,7,34,64,34,8,175, 27,24,30,36,37,41,143,66,7,6,31,5,2,65,6,22, 35,96,8,8,2,3,34,15,15,29,44,63,69,47,53,40, 4,0,0,1,0,95,0,112,3,93,3,85,0,70,0,0, 19,7,39,54,49,54,55,23,6,7,54,51,38,53,51,31, 1,50,23,7,39,34,35,22,21,20,7,6,7,6,35,34, 39,38,39,55,22,31,1,50,55,54,53,52,39,34,7,23, 22,23,22,23,22,51,50,55,23,7,38,39,38,39,38,39, 38,39,52,39,38,53,52,241,137,9,147,2,6,65,3,4, 172,156,5,65,3,2,54,106,1,148,3,2,5,5,10,42, 18,23,21,31,26,70,25,79,16,31,5,4,21,6,164,171, 1,2,3,6,21,61,234,43,81,1,184,47,39,129,52,8, 6,37,9,1,7,2,55,18,65,18,69,152,2,65,146,18, 70,124,138,56,2,65,2,55,37,38,30,68,21,9,9,8, 28,60,31,4,4,1,22,80,42,47,19,187,45,33,63,20, 49,2,65,1,1,3,11,39,6,6,34,81,4,5,81,111, 35,0,0,3,0,63,0,84,3,219,3,114,0,8,0,19, 0,93,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,7,34,35,39,55,54,55, 23,6,7,54,51,38,53,52,55,23,20,23,50,23,7,38, 35,22,21,6,7,6,7,6,35,47,1,38,39,55,22,51, 50,55,54,53,52,39,7,6,7,21,22,23,22,23,22,23, 22,51,50,55,23,7,39,38,39,38,39,38,39,38,53,38, 53,52,3,76,31,61,23,14,14,60,13,27,120,30,56,17, 5,4,17,11,60,12,26,253,182,148,2,2,8,161,2,6, 65,6,1,177,183,6,1,64,6,88,87,1,112,56,6,1, 4,12,43,20,24,34,21,34,70,26,95,38,7,7,24,6, 150,104,113,2,4,7,23,40,130,60,99,21,105,1,198,94, 148,56,2,2,40,9,1,8,3,35,57,32,25,15,34,25, 33,17,31,58,30,16,4,5,19,34,23,34,16,150,19,64, 21,77,164,3,156,75,20,107,64,22,20,1,141,71,3,64, 2,67,39,39,30,72,22,10,4,6,9,30,60,42,1,23, 85,42,61,3,4,13,184,61,44,69,23,38,10,5,1,64, 1,4,12,49,2,2,39,86,4,4,77,123,41,0,0,1, 0,82,0,41,3,119,3,97,0,48,0,0,1,55,22,51, 50,51,54,55,23,5,54,51,50,31,1,6,7,6,7,6, 21,20,23,22,23,22,5,7,38,39,38,39,38,53,54,55, 54,55,54,63,1,6,5,39,37,39,35,39,38,1,17,9, 139,73,5,5,71,152,21,254,46,191,231,87,89,7,229,82, 143,32,12,6,2,3,39,1,23,16,163,46,110,39,20,1, 19,42,144,11,13,71,222,254,212,21,1,196,28,1,87,51, 3,24,64,20,1,28,63,245,26,4,65,53,29,51,58,20, 21,15,14,6,5,65,73,63,43,17,42,66,33,39,40,34, 74,55,4,5,28,10,49,63,238,8,3,4,0,3,0,49, 0,6,3,166,3,124,0,10,0,21,0,72,0,0,1,55, 22,23,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,37,55,22,51,50,51,54,55,23,1,54,33, 50,31,1,6,7,6,7,6,21,20,23,22,23,22,23,22, 23,7,38,39,38,39,38,53,52,55,54,55,39,35,7,35, 6,5,39,1,47,1,38,3,24,30,60,20,2,2,18,10, 59,13,28,119,29,58,17,4,4,13,15,61,12,25,254,10, 9,158,73,5,4,90,152,22,253,249,210,1,10,92,96,3, 230,95,151,43,22,8,3,4,43,245,26,31,16,170,53,119, 43,24,32,58,174,46,1,36,2,139,254,232,21,1,249,49, 85,59,3,45,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,83,65,23,2,30,63,254, 239,31,4,65,34,26,42,66,32,40,23,21,8,7,73,62, 7,7,64,41,21,45,74,41,50,58,50,86,49,7,12,10, 44,62,1,10,6,2,4,0,0,3,0,40,0,76,3,102, 3,114,0,20,0,35,0,62,0,0,1,55,22,23,22,51, 50,51,54,55,23,6,7,47,3,38,39,38,39,19,39,54, 51,50,23,22,31,1,7,38,47,1,7,34,37,38,39,55, 22,23,54,55,23,6,7,54,55,54,55,23,6,7,6,7, 6,15,1,39,54,55,54,1,138,63,18,23,29,87,8,8, 70,151,10,158,71,66,46,34,26,3,2,40,17,101,9,86, 53,21,19,64,132,5,20,131,56,56,84,5,254,245,49,95, 4,102,47,7,10,65,13,3,51,106,4,3,19,119,73,16, 32,40,108,26,55,113,44,40,1,35,12,84,20,26,2,25, 65,24,3,1,8,13,16,2,2,34,83,1,10,64,14,2, 5,41,1,62,40,4,1,9,89,1,6,65,6,1,65,127, 5,156,28,3,30,1,1,62,35,4,122,93,118,177,41,35, 177,116,106,0,0,5,0,4,0,43,3,131,3,145,0,8, 0,19,0,41,0,54,0,83,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,55, 22,23,22,23,22,51,50,51,54,55,23,6,7,39,38,39, 38,39,38,39,19,39,54,51,50,23,22,23,7,38,39,35, 7,37,38,39,55,22,51,54,55,23,6,7,54,55,23,6, 7,6,35,6,7,6,15,1,39,54,55,54,55,54,2,212, 31,60,24,14,14,60,13,29,118,30,58,21,1,2,17,11, 60,13,27,254,213,63,19,21,2,3,34,96,7,8,76,163, 9,170,76,71,73,41,3,2,42,18,106,9,106,45,21,20, 74,143,19,142,61,63,91,254,223,71,88,4,131,33,11,8, 65,8,10,79,102,19,126,68,8,7,18,34,42,115,31,56, 114,41,15,12,30,3,63,57,31,26,15,34,25,33,17,32, 58,29,22,2,2,19,33,23,34,16,254,33,13,87,22,3, 2,29,2,27,65,26,3,2,6,32,2,2,37,88,1,34, 65,14,2,6,45,62,44,5,9,96,1,7,64,7,93,117, 5,104,99,8,31,62,36,5,1,133,102,126,186,50,35,181, 97,36,34,89,0,1,0,126,0,54,3,102,3,152,0,66, 0,0,1,38,39,55,22,23,54,55,23,6,7,54,63,1, 23,6,7,6,35,6,7,6,7,54,51,50,23,22,23,22, 21,20,7,6,7,6,7,6,35,34,39,38,39,55,22,31, 1,54,55,54,55,54,55,53,38,39,38,39,38,35,34,7, 6,7,39,55,54,1,71,62,139,12,123,75,4,2,65,2, 4,98,211,7,14,188,73,39,38,23,79,2,3,163,102,78, 64,76,55,45,2,23,139,40,45,34,35,112,175,14,32,22, 170,87,62,26,26,95,59,31,7,6,26,44,60,49,63,99, 192,14,18,43,80,43,2,194,5,23,64,22,6,49,101,1, 113,37,2,46,2,63,41,7,4,122,138,4,5,56,28,33, 70,59,56,12,11,99,45,13,6,5,62,4,12,61,61,10, 3,1,3,13,46,24,28,22,32,35,54,27,22,68,4,7, 53,140,83,0,0,2,0,96,0,21,3,139,3,186,0,8, 0,87,0,0,1,55,22,23,22,23,7,38,39,5,38,39, 55,22,23,54,55,23,6,7,54,63,1,22,23,22,23,22, 23,7,38,39,38,39,6,7,6,35,6,7,6,7,54,51, 50,23,22,23,22,21,20,7,6,7,6,7,6,35,34,39, 38,39,55,22,23,22,51,50,55,54,55,54,55,53,38,39, 38,39,38,35,34,7,6,7,39,54,55,54,2,252,31,60, 24,14,14,60,13,29,254,23,76,144,12,147,70,5,2,65, 2,5,106,204,17,58,21,1,2,17,11,60,15,4,2,3, 195,68,51,47,20,78,8,13,181,111,84,69,83,55,50,2, 22,149,44,50,36,38,121,186,17,35,22,181,95,33,32,31, 30,98,65,39,8,5,30,45,69,54,69,71,96,67,115,44, 80,17,39,3,98,57,31,26,15,34,25,33,17,117,5,26, 64,26,4,53,111,2,109,55,2,44,34,29,22,2,2,19, 33,23,31,4,2,2,41,7,6,118,142,15,23,63,30,37, 71,66,60,13,12,101,50,14,8,5,66,5,13,61,65,11, 4,4,12,48,29,33,23,36,39,58,30,24,26,18,42,54, 137,35,80,0,0,1,0,184,0,101,3,83,2,99,0,44, 0,0,19,55,23,54,63,1,54,51,50,23,22,23,22,21, 20,21,6,7,6,7,6,15,1,39,54,55,54,55,54,55, 54,55,39,38,39,38,39,38,35,34,7,6,7,6,35,184, 3,125,62,49,124,32,27,40,35,83,50,36,3,118,23,25, 91,161,42,3,155,74,21,20,83,34,13,1,3,15,57,26, 26,21,27,32,102,23,17,66,86,1,245,65,2,1,10,30, 6,13,30,81,59,61,3,4,105,76,15,12,43,7,1,65, 5,24,7,9,39,63,26,24,28,62,51,24,9,8,24,6, 3,14,0,1,0,135,0,130,3,133,2,198,0,45,0,0, 19,55,23,54,63,1,54,51,50,23,22,23,22,21,20,21, 6,7,6,7,6,7,34,7,39,54,55,54,55,54,55,54, 55,39,38,39,38,39,38,35,34,15,1,6,35,34,135,3, 131,80,63,143,37,30,46,39,91,57,45,4,126,29,33,102, 175,17,45,2,167,76,38,32,97,40,17,1,3,16,64,33, 34,26,32,35,54,113,77,98,39,2,81,65,3,1,13,34, 7,15,32,88,70,73,3,4,116,85,20,15,48,9,2,65, 6,21,11,15,46,73,31,30,32,71,59,32,12,9,12,26, 15,0,0,3,0,106,0,103,3,194,3,182,0,8,0,19, 0,66,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,55,23,54,63,1,54,51, 50,23,22,23,22,21,20,21,6,7,6,7,6,7,6,7, 39,54,55,54,55,54,55,54,55,39,38,39,38,39,38,35, 7,6,7,6,7,6,35,3,51,31,61,23,14,14,60,13, 27,120,30,56,17,5,4,17,11,60,12,26,253,90,2,143, 87,68,155,40,33,48,41,96,61,49,4,133,32,37,110,190, 21,44,2,181,86,39,34,101,45,22,1,3,16,67,38,40, 29,35,52,10,123,19,15,83,107,3,125,57,32,25,15,34, 25,33,17,31,58,30,16,4,5,19,34,23,34,16,212,65, 3,1,14,37,7,15,35,93,74,79,4,5,122,91,22,18, 52,9,1,1,65,6,24,11,16,48,76,37,36,33,76,64, 38,14,10,4,2,28,4,3,16,0,0,1,0,127,0,85, 3,90,2,254,0,32,0,0,19,53,36,37,23,6,7,6, 7,6,21,20,23,22,23,22,23,22,23,7,38,39,38,39, 38,53,52,55,54,55,54,55,4,127,1,59,1,150,10,235, 94,79,33,30,11,8,11,42,147,29,47,14,140,56,71,37, 44,12,10,18,69,101,254,247,2,166,65,1,22,64,60,52, 43,56,50,66,39,33,22,16,60,39,7,11,63,30,26,33, 54,62,84,43,41,35,31,115,46,6,0,3,0,97,0,54, 3,174,3,17,0,8,0,19,0,48,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 37,53,36,37,23,6,7,6,7,6,21,20,23,22,23,22, 23,7,38,39,38,39,38,53,52,55,54,55,4,3,31,31, 60,24,14,14,60,13,29,118,30,58,21,1,2,17,11,60, 13,27,253,103,1,78,1,190,10,246,101,95,37,33,34,44, 154,34,56,15,148,59,79,41,46,42,73,135,254,206,2,129, 57,31,26,15,34,25,33,17,32,58,29,22,2,2,19,33, 23,34,16,133,64,1,24,64,63,53,50,63,56,71,73,48, 65,41,8,13,63,32,27,36,58,67,90,87,73,124,56,8, 0,1,0,185,0,79,3,24,3,128,0,37,0,0,1,54, 55,23,4,7,6,7,6,21,22,23,22,23,22,51,50,55, 23,7,34,39,38,39,38,39,38,53,52,55,54,55,38,53, 52,53,55,20,1,218,70,208,13,254,255,102,90,35,30,1, 16,37,150,60,88,60,127,2,200,83,61,171,58,3,3,28, 42,55,130,33,65,2,69,24,45,63,57,49,42,54,45,53, 38,24,58,16,6,4,65,4,7,17,77,4,4,43,55,69, 65,83,55,127,192,8,9,1,205,0,0,3,0,162,0,48, 3,161,3,160,0,8,0,19,0,57,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 5,54,55,23,4,7,6,7,6,21,20,23,22,23,22,51, 50,55,23,7,34,39,38,39,38,39,38,53,52,55,54,55, 38,53,52,53,51,22,3,19,30,62,22,18,10,59,13,29, 118,29,59,20,2,2,14,14,61,12,27,254,232,80,223,13, 254,239,112,100,39,33,18,41,163,66,95,65,136,3,218,89, 64,181,63,5,4,30,45,61,140,36,65,2,2,254,57,32, 25,20,29,25,33,18,33,58,29,22,2,2,17,35,23,34, 16,104,27,49,64,60,52,46,60,49,58,42,28,64,17,6, 4,65,4,7,18,79,6,6,45,60,75,68,92,57,140,209, 8,9,227,0,0,3,0,58,0,31,3,85,3,147,0,18, 0,64,0,89,0,0,37,38,39,38,35,34,7,6,7,6, 21,23,22,23,22,31,1,54,55,19,38,39,55,22,23,22, 23,15,1,6,7,6,21,23,22,21,22,23,7,38,39,6, 7,6,35,34,39,38,39,38,55,52,55,54,55,54,51,50, 23,52,47,1,52,55,54,37,34,39,55,22,51,54,55,23, 6,7,54,55,54,55,23,6,7,6,15,1,39,54,55,54, 2,54,14,15,66,42,30,21,20,13,6,2,8,41,14,15, 51,84,10,108,29,89,2,113,55,51,78,13,94,91,26,15, 5,14,63,111,32,111,37,16,52,41,57,26,27,97,28,10, 1,54,8,8,34,48,57,83,14,4,30,29,254,177,37,106, 6,94,57,12,17,64,16,10,51,96,22,15,22,132,87,38, 122,66,56,103,25,60,179,7,5,25,12,12,24,11,10,9, 16,14,5,3,3,3,66,1,171,5,4,65,4,13,12,33, 65,2,6,31,29,48,67,116,21,31,65,56,63,19,68,29, 22,5,17,56,20,21,55,43,7,5,22,32,11,110,64,65, 41,38,95,9,65,9,60,116,10,108,54,4,35,8,5,61, 50,8,181,215,113,33,179,50,123,0,0,3,0,135,0,103, 3,85,3,89,0,19,0,29,0,43,0,0,1,55,22,23, 22,23,22,51,50,55,23,6,35,34,39,38,39,38,39,38, 19,55,22,51,54,55,23,6,35,34,37,23,6,7,23,22, 31,1,7,38,53,52,53,54,1,76,58,46,33,9,10,44, 94,75,143,9,166,63,70,50,27,22,58,48,4,77,7,71, 67,104,108,10,112,114,72,254,202,64,41,3,2,4,16,6, 65,28,3,1,59,29,92,29,8,6,26,19,64,23,17,8, 13,35,93,7,1,172,64,9,1,22,64,24,151,10,234,123, 109,87,137,46,8,245,113,16,15,127,0,4,0,97,0,102, 3,187,3,88,0,15,0,23,0,39,0,105,0,0,37,38, 7,34,7,6,15,1,23,22,23,22,51,50,55,54,1,22, 23,54,55,54,55,6,3,38,39,6,7,6,21,20,23,22, 23,22,51,50,55,54,3,38,39,55,22,23,54,63,1,23, 6,7,55,22,23,22,21,20,7,23,7,38,39,6,7,6, 35,34,39,38,47,1,53,54,55,54,63,1,22,23,54,53, 52,39,38,35,34,7,6,7,23,7,39,6,7,6,35,34, 39,38,39,38,53,52,55,54,3,31,89,48,8,7,33,19, 5,4,16,34,27,28,46,35,11,254,53,24,60,15,49,2, 2,85,11,79,34,85,20,8,36,11,12,13,13,14,17,51, 76,15,25,64,23,12,85,107,36,63,17,12,68,169,68,43, 37,70,41,57,5,13,14,53,75,41,38,78,13,2,4,69, 17,19,37,69,90,27,34,51,142,35,40,42,50,56,49,36, 56,69,30,32,34,27,53,24,12,10,31,223,58,1,1,6, 27,12,12,28,15,12,33,11,1,125,71,85,37,163,7,6, 20,254,250,98,92,62,73,24,30,76,56,18,7,8,9,28, 1,127,54,120,13,111,42,42,21,136,17,63,46,2,4,111, 72,109,104,88,56,50,43,4,18,14,51,17,34,59,26,1, 62,31,7,4,3,1,61,65,86,95,53,84,5,157,128,66, 42,41,116,39,17,19,34,86,44,44,39,36,107,0,0,2, 0,77,0,89,3,187,3,129,0,20,0,99,0,0,37,38, 39,38,35,34,7,6,15,1,21,22,23,22,31,1,54,55, 54,55,54,1,55,23,7,55,23,7,21,54,55,54,55,54, 51,50,23,22,23,22,7,20,7,22,23,7,38,39,6,7, 6,35,34,39,38,39,38,47,1,54,55,54,55,54,51,50, 23,54,53,52,39,38,47,1,38,35,6,7,6,7,20,23, 35,2,53,6,7,39,19,54,63,1,53,6,35,34,39,63, 1,54,3,14,40,11,56,36,17,10,24,9,1,4,34,8, 8,24,58,50,6,5,4,254,14,3,65,3,38,41,82,36, 100,5,5,116,87,32,29,90,39,22,1,34,28,58,36,68, 14,45,73,35,32,18,17,63,28,9,3,1,6,53,5,4, 25,33,63,110,26,11,25,59,11,15,19,75,99,85,97,3, 65,3,46,100,54,180,11,10,2,67,90,21,22,2,103,53, 250,22,5,27,6,12,35,21,2,32,18,5,2,1,5,54, 6,6,6,1,249,145,2,132,7,58,137,11,31,63,3,3, 76,10,32,116,63,72,93,81,17,38,54,44,8,67,31,15, 5,15,56,19,20,32,67,34,3,2,14,62,66,77,48,42, 92,31,5,5,1,63,55,104,181,181,1,32,1,54,126,36, 1,67,18,18,92,1,11,1,65,1,2,0,0,2,0,85, 0,109,3,165,3,27,0,44,0,59,0,0,1,2,7,6, 7,39,38,39,38,39,52,55,54,55,54,55,54,55,54,51, 22,23,22,23,22,21,20,7,6,15,1,39,54,55,54,55, 54,53,52,39,38,39,38,35,34,7,6,7,6,7,6,23, 20,23,22,31,1,54,55,54,2,12,48,102,47,51,28,63, 53,46,1,18,1,2,45,119,90,104,36,37,151,113,59,33, 39,57,61,148,97,19,151,58,40,23,44,29,48,115,70,71, 4,72,124,93,51,22,17,1,36,29,38,15,22,29,95,2, 217,254,139,160,67,5,1,10,87,76,90,54,51,5,4,123, 84,64,16,6,1,82,43,57,69,83,104,80,85,52,30,62, 46,39,26,32,61,86,67,51,83,42,25,7,27,100,55,60, 45,47,72,60,48,16,4,2,42,154,0,3,0,123,0,108, 3,94,3,98,0,19,0,68,0,81,0,0,37,38,35,34, 7,6,15,1,23,22,23,22,23,22,51,50,55,54,55,54, 3,6,35,34,39,55,22,55,50,55,54,55,23,6,7,54, 55,23,6,15,1,22,23,22,23,7,38,39,6,7,6,15, 1,38,39,38,39,52,55,54,55,54,55,51,22,23,38,53, 52,1,23,6,15,1,22,23,7,38,53,52,55,54,2,159, 120,72,8,8,47,26,5,3,10,21,5,6,44,72,22,22, 58,14,8,6,59,68,82,85,5,94,73,67,57,4,3,65, 3,4,31,85,13,72,58,1,2,8,21,102,35,77,17,4, 13,32,85,56,89,61,73,1,3,17,100,9,9,47,75,91, 7,254,18,64,38,5,1,1,14,65,16,2,5,243,64,1, 4,26,7,15,24,18,4,4,30,3,8,22,11,1,128,6, 9,64,9,1,7,125,60,2,56,117,6,17,63,17,9,149, 87,95,12,65,55,48,10,18,19,46,12,4,1,41,51,61, 11,11,69,16,1,1,6,46,121,100,31,1,39,10,239,116, 117,86,179,5,207,103,42,38,118,0,0,5,0,95,0,78, 3,201,3,128,0,10,0,29,0,36,0,92,0,105,0,0, 1,55,22,23,22,23,22,23,7,38,39,3,38,35,34,7, 6,7,6,7,23,22,23,22,51,50,55,54,55,54,19,54, 55,38,47,1,6,7,6,35,34,39,55,22,51,50,55,54, 55,23,6,7,55,22,23,22,23,22,23,7,55,23,6,15, 1,22,31,1,7,38,39,6,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,55,51,22,23,38,53,52,1,23,6, 15,1,22,23,7,38,53,52,55,54,3,59,30,60,20,2, 2,18,10,59,13,28,181,131,80,9,8,52,27,6,1,2, 13,34,48,78,24,24,63,18,8,62,58,21,11,27,39,2, 67,58,72,72,119,4,118,70,71,59,2,6,64,2,2,29, 58,17,4,4,13,15,32,17,14,90,53,1,2,9,134,36, 24,79,7,13,33,91,30,29,96,66,79,3,18,112,7,7, 48,80,105,7,253,233,64,41,6,1,1,15,65,17,2,6, 3,60,57,31,21,3,2,20,29,25,33,17,253,188,70,1, 4,29,6,4,14,36,23,33,4,8,26,11,1,240,11,5, 30,16,21,54,104,8,10,64,9,8,67,136,3,70,35,57, 31,16,4,4,16,37,12,4,64,19,9,165,101,95,84,55, 16,49,26,18,47,14,4,45,52,67,11,12,74,16,1,1, 6,52,106,111,47,1,76,11,248,135,127,102,185,5,235,105, 42,39,134,0,0,5,0,95,0,78,3,144,3,128,0,15, 0,31,0,50,0,98,0,111,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,3,38,35,34,7,6, 7,6,7,23,22,23,22,51,50,55,54,55,54,3,6,35, 34,39,55,22,51,50,55,54,55,23,7,54,55,23,6,15, 1,22,31,1,7,38,39,6,7,6,7,6,35,34,39,38, 53,52,55,54,55,54,55,51,22,23,38,53,52,1,23,6, 15,1,22,23,7,38,53,52,55,54,3,74,31,11,3,28, 8,9,30,12,4,29,8,9,41,20,9,37,15,18,41,19, 9,37,15,137,131,80,9,8,52,27,6,1,2,13,34,48, 78,24,24,63,18,8,5,58,72,72,119,4,118,70,71,59, 2,6,64,6,31,96,14,90,53,1,2,9,134,36,24,79, 7,13,33,91,30,29,96,66,79,3,18,112,7,7,48,80, 105,7,253,233,64,41,6,1,1,15,65,17,2,6,3,78, 29,8,9,30,12,3,27,8,10,31,12,3,24,36,16,18, 41,20,8,36,15,18,43,19,8,253,122,70,1,4,29,6, 4,14,36,23,33,4,8,26,11,1,165,8,10,64,9,8, 67,136,3,190,6,20,64,19,9,165,101,95,84,55,16,49, 26,18,47,14,4,45,52,67,11,12,74,16,1,1,6,52, 106,111,47,1,76,11,248,135,127,102,185,5,235,105,42,39, 134,0,0,1,0,114,0,47,3,162,3,59,0,48,0,0, 19,39,54,55,23,6,7,6,7,6,21,20,23,22,31,1, 50,55,54,55,54,55,54,53,52,39,55,22,23,7,38,39, 6,7,6,7,6,35,34,39,38,39,38,53,52,55,54,55, 6,162,1,147,160,30,140,59,37,27,54,23,35,100,55,63, 44,99,42,2,2,33,1,64,88,100,56,70,58,3,34,49, 134,61,75,33,33,117,54,39,63,68,146,97,2,224,65,1, 25,61,140,81,51,52,104,82,50,28,47,14,4,20,40,146, 7,7,123,229,37,75,13,245,159,33,117,123,172,125,188,55, 25,5,17,68,49,71,92,121,132,148,13,0,0,2,0,85, 0,13,3,209,3,107,0,8,0,72,0,0,1,55,22,23, 22,23,7,38,39,7,22,23,7,38,39,6,7,6,7,6, 7,34,39,38,39,38,53,52,55,54,55,54,55,6,35,39, 50,55,23,6,7,6,7,6,21,20,23,22,23,22,51,50, 55,54,55,54,55,54,53,52,39,55,23,55,22,23,22,23, 22,23,7,38,39,3,66,31,61,23,14,14,60,13,27,84, 67,103,57,92,51,3,37,53,143,71,81,136,82,18,13,41, 68,70,158,4,4,124,130,1,135,198,30,146,62,47,31,58, 25,36,106,31,31,70,50,106,47,3,3,35,1,64,15,13, 56,17,5,4,17,11,60,13,16,3,50,57,32,25,15,34, 25,33,17,51,178,168,33,157,117,200,136,203,59,26,1,66, 15,16,52,76,98,132,136,163,4,4,17,65,28,61,145,83, 62,62,113,88,55,31,51,16,5,22,43,156,9,10,136,242, 48,77,12,39,26,30,16,4,5,19,34,23,32,12,0,2, 0,85,0,13,3,195,3,83,0,15,0,82,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,7,22, 23,7,38,39,6,7,6,7,6,7,34,39,38,39,38,53, 52,55,54,55,54,55,6,35,39,50,55,23,6,7,6,7, 6,21,20,23,22,23,22,51,50,55,54,55,54,55,54,53, 52,39,55,23,55,54,55,50,31,1,22,21,20,7,6,35, 34,3,104,30,12,3,25,10,10,30,12,4,28,8,67,44, 104,57,92,51,3,37,53,143,71,81,136,82,18,13,41,68, 70,158,4,4,124,130,1,135,198,30,146,62,47,31,58,25, 36,106,31,31,70,50,106,47,3,3,35,1,64,44,2,12, 55,41,20,8,1,37,15,18,37,3,5,28,8,9,29,12, 5,28,8,10,29,12,4,84,117,175,33,157,117,200,136,203, 59,26,1,66,15,16,52,76,98,132,136,163,4,4,17,65, 28,61,145,83,62,62,113,88,55,31,51,16,5,22,43,156, 9,10,136,242,48,77,12,116,27,47,5,36,20,7,6,41, 20,9,0,4,0,64,0,89,3,173,3,115,0,9,0,21, 0,54,0,62,0,0,1,55,22,23,22,23,7,38,39,38, 37,23,6,7,6,7,6,7,39,54,55,54,19,55,22,23, 22,21,20,7,6,7,6,7,6,35,34,39,38,39,55,22, 23,22,51,50,55,54,55,54,55,39,38,39,38,3,55,22, 23,7,38,39,38,2,170,42,74,27,40,76,55,77,33,25, 254,38,56,58,38,6,5,40,92,30,84,33,38,148,48,129, 44,74,1,8,57,19,22,17,19,43,53,43,84,37,77,42, 41,29,8,7,30,19,9,2,1,8,53,43,116,48,94,122, 36,88,38,46,1,211,49,65,31,46,120,34,119,38,30,40, 32,102,40,6,5,38,48,57,44,32,36,1,0,44,141,64, 105,81,10,11,76,42,14,6,5,28,21,60,53,55,21,21, 2,9,40,17,18,31,56,75,63,1,118,43,110,74,55,59, 32,40,0,6,0,29,0,59,3,206,3,144,0,8,0,19, 0,29,0,42,0,76,0,84,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,23,55, 22,23,22,23,7,38,39,38,37,23,6,15,1,6,7,6, 7,39,54,55,54,19,55,22,23,22,21,20,7,6,7,6, 7,6,35,34,47,1,38,39,55,22,23,22,51,50,55,54, 55,54,55,53,38,39,38,3,55,22,23,7,38,39,38,2, 192,31,60,24,14,14,60,13,29,118,30,58,21,1,2,17, 11,60,13,27,31,43,79,29,45,80,54,78,42,35,254,8, 57,62,37,17,41,97,2,2,31,92,36,41,160,48,136,52, 79,1,10,59,21,24,18,18,42,54,8,39,98,37,85,44, 44,31,10,9,33,21,10,2,8,59,47,125,48,101,133,36, 91,45,38,2,189,57,31,26,15,34,25,33,17,32,58,29, 22,2,2,19,33,23,34,16,157,49,70,33,52,127,35,123, 48,39,34,33,106,41,18,39,51,1,1,57,48,35,38,1, 25,44,148,73,114,86,11,11,82,44,15,7,5,26,4,20, 67,54,60,23,23,3,9,43,20,20,32,61,85,67,1,149, 43,118,81,55,60,38,32,0,0,6,0,29,0,59,3,206, 3,144,0,14,0,32,0,42,0,55,0,89,0,97,0,0, 1,34,15,1,20,23,22,51,50,55,54,53,52,39,38,39, 50,31,1,22,21,20,15,1,6,35,34,39,38,53,52,55, 54,7,55,22,23,22,23,7,38,39,38,37,23,6,15,1, 6,7,6,7,39,54,55,54,19,55,22,23,22,21,20,7, 6,7,6,7,6,35,34,47,1,38,39,55,22,23,22,51, 50,55,54,55,54,55,53,38,39,38,3,55,22,23,7,38, 39,38,2,218,31,12,3,26,9,11,29,12,4,28,8,9, 42,19,7,1,36,20,7,6,42,20,8,36,16,14,43,79, 29,45,80,54,78,42,35,254,8,57,62,37,17,41,97,2, 2,31,92,36,41,160,48,136,52,79,1,10,59,21,24,18, 18,42,54,8,39,98,37,85,44,44,31,10,9,33,21,10, 2,8,59,47,125,48,101,133,36,91,45,38,2,181,28,17, 29,12,5,28,8,10,30,12,3,24,37,21,6,5,41,20, 8,1,37,15,18,41,20,8,251,49,70,33,52,127,35,123, 48,39,34,33,106,41,18,39,51,1,1,57,48,35,38,1, 25,44,148,73,114,86,11,11,82,44,15,7,5,26,4,20, 67,54,60,23,23,3,9,43,20,20,32,61,85,67,1,149, 43,118,81,55,60,38,32,0,0,1,0,76,0,180,3,162, 2,210,0,29,0,0,19,39,55,54,55,54,51,50,23,22, 31,1,22,23,22,23,7,38,39,38,47,1,38,47,1,34, 7,6,15,1,123,47,98,58,30,57,60,19,20,72,86,96, 82,156,6,14,42,153,72,21,19,120,67,36,23,27,29,31, 60,6,1,174,44,108,69,24,46,4,20,104,120,96,131,5, 12,49,129,78,22,22,140,73,10,3,20,20,71,7,0,3, 0,43,0,156,3,195,3,62,0,10,0,21,0,56,0,0, 1,55,22,23,22,23,22,23,7,38,39,7,55,22,23,22, 23,22,23,7,38,39,1,39,54,55,54,55,54,55,54,51, 50,23,22,31,1,22,23,22,23,7,38,39,38,47,1,38, 39,38,35,34,7,6,15,1,6,2,185,30,60,20,2,2, 18,10,59,13,28,119,29,58,17,4,4,13,15,61,12,25, 253,197,48,95,12,61,8,25,25,49,52,21,20,75,91,107, 88,164,9,18,42,161,76,26,23,129,73,40,12,13,30,33, 34,67,5,36,3,5,57,31,21,3,2,20,29,25,33,17, 31,58,31,16,4,4,16,37,23,34,16,254,243,44,103,14, 69,8,25,16,32,5,22,109,132,103,139,7,15,49,136,81, 27,27,151,80,11,4,22,22,79,6,42,0,0,3,0,43, 0,156,3,195,3,22,0,15,0,31,0,66,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,39,38,39,50, 23,22,21,20,7,6,35,34,39,38,53,52,55,54,1,39, 54,55,54,55,54,55,54,51,50,23,22,31,1,22,23,22, 23,7,38,39,38,47,1,38,39,38,35,34,7,6,15,1, 6,2,210,31,11,3,28,8,9,30,12,4,29,8,9,41, 20,9,37,15,18,41,19,9,37,15,253,154,48,95,12,61, 8,25,25,49,52,21,20,75,91,107,88,164,9,18,42,161, 76,26,23,129,73,40,12,13,30,33,34,67,5,36,2,254, 29,8,9,30,12,3,27,8,10,31,12,3,24,36,16,18, 41,20,8,36,15,18,43,19,8,254,148,44,103,14,69,8, 25,16,32,5,22,109,132,103,139,7,15,49,136,81,27,27, 151,80,11,4,22,22,79,6,42,0,0,3,0,123,0,108, 3,162,3,104,0,19,0,75,0,88,0,0,37,38,35,34, 7,6,15,1,23,22,23,22,23,22,51,50,55,54,55,54, 3,6,35,34,39,55,22,51,50,51,54,55,23,6,15,1, 54,55,23,6,7,23,22,23,22,23,7,38,39,6,7,6, 15,1,38,39,38,39,52,55,54,63,1,22,23,38,39,7, 47,1,55,22,51,50,55,54,37,23,6,15,1,22,23,7, 38,53,52,55,54,2,160,115,73,10,10,49,25,5,3,11, 22,4,5,44,72,22,22,58,14,8,3,39,43,79,117,8, 118,64,11,10,79,152,12,86,25,4,53,114,18,127,58,3, 2,5,64,128,34,108,52,5,15,32,85,56,89,61,73,1, 3,18,117,49,74,90,5,2,85,114,88,6,144,65,39,33, 2,254,16,64,38,5,1,1,14,65,16,2,5,253,54,1, 4,26,7,15,24,19,4,3,30,3,8,22,11,2,50,4, 16,64,15,2,29,63,17,3,198,10,32,62,36,10,124,45, 61,34,80,55,66,28,29,21,46,12,4,1,41,51,61,11, 11,75,12,1,4,40,48,140,3,5,8,65,13,3,134,151, 10,239,116,117,86,179,5,207,103,42,38,118,0,4,0,95, 0,78,3,211,3,132,0,10,0,28,0,99,0,112,0,0, 1,55,22,23,22,23,22,23,7,38,39,3,38,35,34,7, 6,15,1,23,22,23,22,51,50,55,54,55,54,3,6,35, 34,39,55,22,51,50,51,54,55,23,6,7,6,7,54,55, 38,47,1,55,22,23,22,23,22,23,54,55,23,6,7,20, 23,22,23,7,38,39,6,7,6,7,6,35,34,39,38,53, 55,54,63,1,22,23,39,52,53,7,38,39,55,22,51,54, 55,50,55,52,37,23,6,15,1,22,23,7,38,53,52,55, 54,3,69,30,60,20,2,2,18,10,59,13,28,191,125,81, 11,11,53,27,6,2,12,35,48,78,24,24,62,19,10,5, 45,52,83,123,9,134,75,6,5,79,170,13,48,74,4,1, 46,47,11,25,41,29,58,17,4,4,12,16,12,16,18,127, 75,11,58,151,34,130,46,7,16,33,91,30,29,96,66,78, 2,20,124,49,81,102,7,88,75,150,7,159,64,43,37,1, 2,253,234,64,41,6,1,1,15,65,17,2,6,2,226,57, 31,21,3,2,20,29,25,33,17,254,32,60,1,6,26,10, 15,35,24,33,4,8,25,14,2,99,6,18,65,18,3,32, 64,9,13,148,71,9,12,29,15,23,58,31,16,4,4,14, 38,3,5,63,37,13,143,110,30,93,55,78,25,33,23,48, 14,4,45,52,66,23,79,14,1,4,46,193,9,9,4,1, 14,64,14,1,3,1,70,240,11,248,135,127,102,185,5,235, 105,42,39,134,0,4,0,95,0,78,3,196,3,132,0,14, 0,32,0,104,0,117,0,0,1,34,7,6,21,20,23,22, 51,50,55,54,53,52,39,3,38,35,34,7,6,15,1,23, 22,23,22,51,50,55,54,55,54,3,6,35,34,39,55,22, 51,50,51,54,55,23,6,7,6,7,54,55,38,39,52,55, 54,51,23,22,31,1,6,7,55,23,6,7,20,23,22,23, 7,38,39,6,7,6,7,6,35,34,39,38,53,55,54,63, 1,22,23,39,52,53,7,38,39,55,22,51,54,55,50,55, 52,37,23,6,15,1,22,23,7,38,53,52,55,54,3,92, 32,11,3,29,8,9,30,12,3,28,189,125,81,11,11,53, 27,6,2,12,35,48,78,24,24,62,19,10,5,45,52,83, 123,9,134,75,6,5,79,170,13,48,74,4,1,28,56,35, 3,38,15,17,21,35,10,3,1,9,9,18,127,75,11,58, 151,34,130,46,7,16,33,91,30,29,96,66,78,2,20,124, 49,81,102,7,88,75,150,7,159,64,43,37,1,2,253,234, 64,41,6,1,1,15,65,17,2,6,2,209,29,8,9,31, 11,3,28,8,9,31,12,254,28,60,1,6,26,10,15,35, 24,33,4,8,25,14,2,99,6,18,65,18,3,32,64,9, 13,148,71,5,14,22,39,43,19,8,3,11,38,23,17,14, 3,63,37,13,143,110,30,93,55,78,25,33,23,48,14,4, 45,52,66,23,79,14,1,4,46,193,9,9,4,1,14,64, 14,1,3,1,70,240,11,248,135,127,102,185,5,235,105,42, 39,134,0,2,0,88,0,59,3,35,3,169,0,17,0,88, 0,0,37,38,35,34,7,6,7,20,23,22,23,22,51,22, 55,54,55,54,3,55,23,7,55,50,23,7,39,6,7,6, 23,54,55,23,6,7,22,23,22,23,22,23,7,38,39,6, 7,6,7,6,35,38,39,38,39,38,53,52,55,54,55,54, 51,50,23,39,53,7,38,39,38,53,55,31,3,22,31,1, 55,51,53,54,55,6,7,39,54,1,204,82,85,66,51,19, 3,11,18,27,44,65,36,31,47,17,10,21,7,65,7,186, 37,74,2,224,39,35,6,3,93,131,9,160,69,1,18,5, 2,92,183,34,155,88,5,14,34,92,31,32,81,63,59,20, 7,3,11,48,60,80,83,84,20,94,129,39,23,1,64,2, 6,2,19,94,56,36,1,1,1,75,234,7,213,231,30,19, 9,7,12,16,25,18,30,1,10,15,30,17,2,119,110,4, 103,1,2,65,2,1,1,108,105,9,19,64,22,7,28,121, 37,26,38,112,56,96,40,31,26,61,20,7,1,41,38,51, 17,17,10,9,37,21,25,26,181,1,3,2,58,30,52,35, 1,51,22,4,26,6,1,1,152,31,32,5,24,64,24,0, 0,2,0,109,0,61,3,152,3,71,0,17,0,71,0,0, 1,6,7,6,7,6,7,20,51,48,23,54,51,54,55,54, 55,54,55,54,55,6,35,34,39,55,23,54,55,23,6,7, 22,23,54,55,23,6,7,22,23,7,38,39,6,7,6,7, 6,7,39,54,55,54,55,38,39,6,7,6,7,6,35,34, 39,38,39,52,55,54,55,54,1,116,106,60,12,8,9,2, 2,20,3,4,82,48,14,16,3,34,39,66,86,100,33,32, 4,72,90,111,51,74,38,101,161,8,6,65,6,9,27,96, 23,57,57,16,25,49,124,18,38,32,107,26,83,23,171,104, 49,23,35,47,60,36,35,27,23,1,5,4,10,73,1,157, 13,70,14,15,20,18,14,3,1,15,79,22,34,8,77,94, 188,26,3,65,3,2,34,53,212,93,9,50,53,115,3,135, 52,9,36,61,22,20,53,40,78,72,11,21,56,63,19,63, 96,56,3,102,32,49,26,28,22,23,34,15,17,19,20,136, 0,3,0,78,0,53,3,168,3,150,0,9,0,26,0,108, 0,0,1,55,22,23,22,23,7,38,39,38,5,38,39,38, 39,7,6,7,6,7,6,23,20,23,22,23,54,19,7,34, 39,55,22,51,50,55,52,39,55,22,23,54,55,23,6,7, 6,7,22,21,6,7,6,21,20,23,22,23,22,55,50,55, 54,55,54,55,39,38,39,55,22,21,20,7,6,15,1,35, 6,35,34,39,38,39,52,55,52,55,6,7,34,39,38,39, 38,39,38,53,52,55,54,55,54,51,50,23,22,23,54,2, 239,34,61,27,27,36,59,28,24,19,253,209,4,8,14,17, 12,8,7,20,10,4,1,8,5,19,40,63,84,21,70,4, 73,44,29,26,5,65,4,2,58,120,20,129,70,5,26,3, 1,26,10,37,2,2,36,95,36,51,161,53,56,2,4,2, 7,64,15,9,36,185,100,4,79,28,96,55,69,1,5,1, 23,22,8,7,43,23,2,3,12,6,14,47,28,29,8,7, 29,24,5,2,162,55,35,30,31,72,29,62,26,20,201,19, 19,31,7,2,4,7,17,36,16,20,31,27,13,29,27,1, 61,1,4,65,5,2,85,108,3,94,94,11,38,62,42,11, 136,92,24,23,45,82,32,16,41,26,2,1,24,1,3,9, 27,25,58,45,20,31,13,76,28,31,25,104,22,7,5,35, 47,81,20,22,3,3,17,1,2,10,62,7,8,38,39,27, 24,60,36,20,1,7,27,37,0,3,0,96,0,137,3,147, 3,88,0,7,0,24,0,83,0,0,1,22,23,54,55,54, 55,6,3,38,39,6,7,6,21,20,31,1,22,23,22,51, 50,55,54,3,38,39,55,22,23,54,63,1,23,7,23,22, 31,1,22,21,20,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,53,38,39,38,39,38,35,34,7,6,7,23,7, 39,6,7,6,35,34,39,38,39,38,53,52,55,54,1,74, 26,60,16,48,3,2,84,13,76,38,84,20,8,35,15,5, 4,13,13,14,17,51,77,10,29,64,19,14,89,105,36,63, 30,65,166,69,9,33,67,6,7,65,143,25,62,2,144,58, 29,19,49,9,3,18,45,125,35,38,13,14,53,39,56,49, 36,56,69,30,33,33,27,53,24,12,72,35,2,84,76,84, 40,159,8,8,15,254,243,92,101,63,75,24,31,76,55,18, 4,3,8,9,28,1,131,36,134,13,98,51,44,16,135,17, 113,3,18,109,16,62,78,118,83,8,7,70,12,3,2,65, 6,26,14,20,52,99,50,48,33,83,22,6,1,184,99,66, 42,41,116,39,16,17,36,84,44,42,105,86,42,0,0,1, 0,137,0,63,3,79,3,139,0,74,0,0,1,54,55,23, 6,7,54,55,23,6,7,6,7,50,55,23,6,35,34,35, 7,22,23,22,23,22,23,22,55,50,55,54,55,54,53,38, 39,38,39,55,22,23,22,23,7,6,7,6,7,6,35,34, 39,38,39,38,39,38,53,52,55,38,39,55,22,23,55,54, 55,38,39,38,39,55,22,1,104,7,5,65,4,8,53,99, 11,118,52,1,33,69,130,9,132,66,9,9,1,1,5,20, 72,12,14,41,48,60,45,57,23,9,2,76,7,8,51,67, 19,19,1,2,15,78,12,12,62,77,61,55,94,43,11,6, 9,2,67,107,22,111,49,31,1,1,56,85,23,11,29,83, 2,211,90,94,4,89,92,2,19,64,21,2,11,185,17,64, 18,53,22,20,87,50,8,7,19,1,28,35,69,25,25,57, 99,8,11,40,84,45,43,41,40,92,62,9,8,39,25,44, 101,25,26,36,43,17,20,9,42,60,39,8,174,10,10,6, 40,11,5,58,42,0,0,1,0,101,0,68,3,77,2,235, 0,63,0,0,1,7,39,55,39,55,23,55,54,55,38,39, 55,22,23,54,51,50,23,22,23,22,23,7,6,7,6,7, 6,39,34,47,1,55,22,51,55,54,55,54,55,54,55,38, 39,38,47,1,38,35,34,7,22,23,7,38,39,6,7,22, 19,7,3,38,1,21,143,33,150,87,59,86,109,17,15,26, 55,45,70,29,54,45,33,31,95,46,24,3,3,17,90,35, 35,33,36,59,91,29,23,106,51,38,7,6,51,46,34,1, 3,61,25,25,6,23,25,29,32,6,25,59,20,15,86,67, 51,109,61,135,11,1,201,83,55,88,197,27,192,57,7,6, 31,50,47,63,40,18,9,27,66,36,40,30,75,54,21,10, 10,1,33,11,61,40,4,1,2,12,46,36,32,43,39,17, 6,2,6,9,10,51,29,44,24,38,38,117,254,231,23,1, 85,25,0,1,0,41,0,89,3,126,3,101,0,61,0,0, 19,7,39,55,39,55,23,54,55,38,39,55,22,23,54,51, 50,23,22,23,22,23,7,6,7,6,7,6,35,34,47,1, 55,22,23,55,54,55,54,55,54,55,38,39,38,39,38,35, 34,7,22,23,7,38,39,6,7,22,19,7,3,38,245,171, 33,178,103,59,101,80,94,23,74,44,82,34,64,52,38,35, 70,56,62,3,3,17,97,44,43,38,41,72,122,11,23,119, 61,41,11,11,61,52,42,2,4,69,36,34,27,29,36,43, 19,20,59,22,20,80,106,67,119,60,168,8,2,32,99,56, 104,231,27,227,44,43,29,69,48,76,46,21,10,18,50,55, 67,32,80,62,28,12,11,47,4,61,46,1,3,2,3,14, 53,43,41,51,46,24,8,7,12,35,42,28,47,35,33,59, 155,254,203,23,1,164,18,0,0,2,0,146,0,14,3,121, 2,244,0,11,0,73,0,0,37,55,54,55,54,53,38,39, 38,39,23,20,3,6,7,6,7,6,7,39,38,55,52,55, 54,55,23,6,7,54,55,54,55,54,55,38,39,55,23,21, 22,23,22,23,22,21,6,7,6,7,6,35,34,39,6,15, 1,39,54,55,38,39,38,39,38,39,55,22,23,22,23,54, 53,52,2,93,45,104,45,24,6,71,36,48,4,70,157,80, 61,54,7,11,65,15,1,2,7,40,63,50,1,37,63,88, 146,23,27,4,3,65,7,67,49,81,26,8,1,75,21,25, 65,81,31,30,54,125,6,33,104,45,6,3,63,49,6,11, 59,41,26,25,33,63,210,1,10,84,44,55,121,52,25,2, 111,188,1,39,28,99,75,195,24,42,5,145,81,38,34,92, 157,15,196,153,110,79,105,36,6,5,56,29,5,85,1,3, 30,51,108,36,39,115,74,20,15,37,6,58,72,4,55,63, 40,4,1,37,97,10,24,29,84,28,25,14,83,190,45,0, 0,2,0,96,0,29,3,176,3,115,0,18,0,81,0,0, 37,51,54,55,54,55,54,53,52,39,38,39,38,39,38,39, 22,21,20,3,6,7,6,7,6,7,39,38,53,52,55,54, 55,54,55,23,6,7,23,20,21,54,55,54,55,54,55,39, 55,23,22,23,22,23,22,21,6,7,6,7,6,35,34,39, 6,15,1,39,54,55,38,39,38,39,55,22,23,22,23,54, 53,52,2,101,52,64,43,79,22,6,54,19,21,4,3,37, 59,5,71,180,103,70,60,9,15,66,17,3,7,45,1,1, 64,51,6,1,49,72,88,160,38,44,8,64,9,78,58,88, 31,12,1,81,25,32,73,92,38,35,58,130,27,33,130,49, 85,64,6,9,58,46,24,34,48,76,246,5,26,46,98,27, 27,93,73,25,16,2,2,23,3,67,59,221,1,87,26,123, 87,214,33,58,5,178,87,42,38,92,188,4,3,15,200,133, 97,2,2,154,90,110,47,12,6,103,6,105,2,35,55,120, 45,46,126,84,27,18,42,8,62,79,16,55,80,45,40,128, 14,19,28,91,29,41,17,101,225,53,0,2,0,138,0,49, 3,8,3,36,0,19,0,59,0,0,37,38,35,34,7,6, 15,1,23,22,23,22,51,50,55,54,55,54,53,52,39,38, 53,52,55,23,6,7,22,51,50,55,23,6,35,34,39,20, 23,22,31,1,7,38,39,6,7,6,35,34,39,38,53,52, 55,54,55,54,51,50,1,203,76,65,21,20,50,19,3,1, 12,35,38,54,33,27,34,13,7,7,15,12,65,8,3,47, 44,74,95,13,98,90,44,42,21,82,147,16,41,134,67,6, 79,43,51,74,59,76,4,19,105,27,28,62,237,32,3,10, 23,6,15,40,27,30,12,15,29,17,33,7,81,97,127,106, 165,5,120,94,7,23,63,25,6,111,129,42,115,13,51,106, 39,90,42,22,45,57,65,14,14,67,18,5,0,2,0,86, 0,70,3,51,3,169,0,22,0,69,0,0,1,38,35,34, 7,6,7,6,7,23,22,23,22,23,22,51,50,55,54,55, 54,53,52,39,38,39,38,53,54,55,23,6,7,22,51,50, 55,23,6,35,34,39,23,22,23,22,23,22,23,7,38,39, 38,39,6,7,6,35,34,39,38,39,55,52,55,54,55,54, 51,50,1,202,91,77,25,23,58,24,5,1,1,9,39,5, 4,46,64,50,37,28,12,10,9,2,6,10,1,13,65,10, 2,57,52,92,105,14,117,99,55,50,2,5,16,99,162,6, 18,40,156,67,9,9,3,86,50,62,84,68,81,4,3,1, 21,118,30,32,73,1,30,39,4,11,28,5,5,16,43,33, 4,3,37,23,18,27,22,37,11,85,18,53,85,106,103,213, 4,169,84,8,27,64,29,9,101,74,113,49,128,5,14,51, 121,40,6,5,102,50,29,50,62,72,29,3,3,74,20,6, 0,2,0,122,0,52,3,87,3,137,0,46,0,56,0,0, 19,23,6,7,54,55,54,51,50,51,22,23,22,23,22,21, 20,15,1,6,7,6,35,34,39,55,22,51,54,55,54,55, 54,53,52,39,38,39,38,39,7,6,7,6,7,39,54,19, 55,22,23,22,23,7,38,39,38,201,65,24,32,118,58,110, 104,7,8,109,70,40,14,7,79,31,13,13,85,143,40,93, 5,82,45,125,67,63,30,14,4,15,68,44,47,43,102,135, 58,94,57,62,95,2,125,62,58,112,28,99,59,53,2,180, 8,190,119,90,32,61,6,67,38,49,25,27,98,87,30,11, 9,59,7,65,7,1,46,44,80,35,30,15,13,53,34,23, 2,1,12,96,41,80,36,220,1,65,65,4,15,14,53,59, 48,15,13,0,0,1,1,9,0,46,3,43,3,156,0,53, 0,0,1,23,6,15,1,20,23,54,55,54,55,54,51,50, 23,22,23,22,31,1,6,7,6,7,6,7,6,7,39,54, 55,54,55,54,55,54,39,52,39,38,39,7,6,7,6,7, 6,7,39,38,53,52,55,54,1,81,62,57,10,3,2,114, 116,23,24,41,34,14,13,46,26,19,6,4,1,89,15,18, 73,151,25,55,14,145,58,40,27,75,23,8,1,24,15,15, 17,15,17,114,104,24,59,67,9,6,10,3,156,19,180,112, 85,27,28,226,99,19,16,26,4,14,66,52,72,83,213,132, 24,19,78,38,6,12,63,32,32,22,29,83,169,52,52,97, 75,37,4,1,4,10,77,191,46,120,12,123,62,59,50,99, 0,1,0,163,0,65,3,113,3,102,0,77,0,0,1,55, 22,51,50,55,23,1,54,55,54,51,50,23,22,23,22,21, 20,7,6,7,6,7,6,35,34,39,38,53,52,55,54,55, 54,51,50,23,22,23,22,23,7,38,47,1,6,7,6,7, 6,21,20,23,22,51,50,55,54,55,54,55,39,38,47,2, 38,35,34,7,6,7,39,1,6,35,34,1,53,6,58,55, 108,128,32,254,170,25,91,95,71,58,47,83,37,19,1,13, 113,56,64,45,42,92,54,50,15,24,54,24,22,26,22,55, 28,2,10,62,28,29,23,42,22,3,2,4,29,36,64,33, 37,86,65,42,5,1,8,55,28,7,34,45,61,84,89,200, 39,1,159,62,73,65,3,15,64,7,30,59,254,173,11,31, 32,20,37,77,40,42,11,10,102,74,37,18,12,56,52,59, 31,25,38,16,7,9,22,84,8,34,19,95,12,3,1,22, 3,3,7,12,39,30,36,10,24,67,45,40,27,59,42,18, 3,15,28,30,102,54,1,154,10,0,0,2,0,77,0,89, 3,217,3,129,0,3,0,78,0,0,1,55,53,6,19,55, 23,7,55,23,7,21,54,55,54,51,50,23,22,23,22,23, 22,21,15,2,23,22,23,55,54,55,54,55,23,6,7,6, 7,6,35,34,39,38,47,1,52,55,54,53,52,39,38,39, 38,35,34,15,1,6,7,20,23,35,3,7,39,19,63,1, 53,6,35,34,39,63,1,54,1,12,9,9,13,3,65,3, 38,41,82,128,106,68,58,25,24,72,30,6,4,7,5,35, 2,1,5,11,17,10,6,24,18,64,14,16,12,19,33,39, 12,12,51,11,3,26,16,4,14,54,15,17,34,40,20,103, 162,3,65,3,146,54,151,50,2,67,90,21,22,2,103,53, 1,192,11,4,15,1,48,145,2,132,7,58,137,51,124,55, 35,7,23,69,14,15,26,35,63,204,50,13,29,3,3,4, 6,23,107,10,91,33,25,18,32,4,15,69,41,41,135,84, 43,24,18,57,16,4,17,10,53,165,169,169,1,14,162,38, 1,16,86,92,1,11,1,65,1,2,0,1,0,163,0,34, 3,119,3,102,0,47,0,0,1,55,22,51,50,55,23,1, 54,55,50,23,22,23,22,23,7,6,7,6,15,1,39,54, 55,54,55,54,55,54,53,52,53,38,39,38,39,38,35,34, 7,6,7,39,1,6,35,34,1,53,6,58,55,108,128,32, 254,199,129,104,46,43,95,52,30,4,1,13,120,79,149,37, 17,141,59,23,21,76,24,7,4,58,34,38,26,30,116,222, 37,53,40,1,159,62,73,65,3,15,64,7,30,59,254,202, 60,1,12,26,74,41,47,36,100,85,56,41,10,63,38,32, 12,15,54,66,20,17,3,3,49,45,26,11,7,122,20,31, 52,1,155,10,0,1,0,130,0,69,3,86,3,0,0,64, 0,0,1,55,23,6,21,54,55,23,15,1,21,54,55,54, 51,50,23,22,31,1,6,7,6,7,6,7,39,54,55,54, 55,54,53,52,39,38,39,38,35,34,7,6,7,6,7,20, 23,7,38,53,6,7,39,19,54,63,1,53,6,35,34,39, 63,1,54,1,50,3,65,2,10,15,41,69,1,56,105,64, 57,75,50,66,10,2,3,12,35,135,35,105,21,166,56,36, 12,9,24,13,17,30,51,32,37,14,14,85,101,2,65,2, 55,63,55,161,7,6,1,57,72,20,19,1,90,42,2,135, 121,1,74,35,1,4,59,115,13,1,43,42,25,43,56,96, 44,35,31,90,56,15,34,61,55,43,27,32,22,29,53,47, 25,14,27,11,4,6,34,99,98,198,1,154,76,61,77,37, 1,31,11,11,72,1,8,1,65,1,2,0,0,1,0,77, 0,89,3,135,3,129,0,58,0,0,1,55,23,7,55,23, 7,21,54,55,54,51,50,23,22,31,1,6,7,6,7,6, 7,39,54,55,54,55,54,39,52,39,38,39,38,35,34,7, 6,7,20,23,35,3,6,7,39,19,54,63,1,53,6,35, 34,39,63,1,54,1,25,3,65,3,38,41,82,88,105,72, 66,84,56,73,14,2,2,15,39,148,45,124,20,185,67,47, 16,11,1,43,9,11,38,62,53,59,97,121,3,65,3,37, 109,54,180,11,10,2,67,90,21,22,2,103,53,2,240,145, 2,132,7,58,137,37,71,42,29,48,63,107,47,43,38,100, 63,20,40,62,60,49,34,41,27,35,82,59,13,9,33,24, 39,118,171,174,1,22,40,129,36,1,67,18,18,92,1,11, 1,65,1,2,0,3,0,56,0,79,3,165,3,105,0,14, 0,32,0,102,0,0,37,38,35,34,7,6,7,23,22,23, 22,51,50,55,54,1,6,7,6,7,6,21,22,23,22,23, 22,23,54,55,54,55,54,63,1,6,7,39,54,55,23,7, 54,51,50,23,22,23,22,21,20,7,6,7,6,35,34,39, 38,39,38,47,1,52,55,54,55,54,55,51,22,23,22,23, 54,53,52,47,1,38,39,38,7,34,7,6,15,1,6,7, 6,35,34,35,38,39,38,39,38,53,52,55,54,2,254,92, 62,38,35,23,3,5,16,30,22,34,70,61,8,254,147,148, 73,3,3,47,1,9,13,22,15,14,19,29,10,86,33,63, 88,129,173,6,164,188,43,93,47,44,87,67,104,44,23,88, 26,32,78,81,40,35,7,8,73,14,2,1,14,93,19,21, 41,67,98,5,6,54,69,30,14,17,52,77,62,68,50,54, 61,28,30,28,32,3,2,41,36,30,15,12,63,97,197,61, 20,14,11,13,28,14,13,41,5,1,105,48,74,4,3,52, 59,28,30,41,28,21,3,5,53,21,194,73,124,164,34,13, 65,10,50,56,170,6,25,40,98,49,56,114,91,28,21,51, 13,2,4,33,55,26,5,6,67,24,5,2,8,63,3,4, 69,72,88,58,21,9,6,21,1,13,97,121,141,56,34,29, 2,48,39,49,37,37,89,70,106,0,0,4,0,107,0,30, 3,177,3,142,0,9,0,23,0,47,0,128,0,0,37,55, 22,23,22,23,7,38,39,38,37,54,55,39,38,47,1,6, 7,6,21,20,23,22,31,1,54,55,54,55,54,53,52,39, 38,35,34,7,6,7,55,22,23,22,21,20,7,6,39,6, 7,39,54,55,39,38,39,55,22,51,50,55,23,6,7,54, 55,54,51,50,23,22,21,20,7,6,7,6,35,34,39,6, 7,6,15,2,54,51,50,23,22,23,22,23,51,54,55,54, 55,23,6,7,6,35,34,39,38,39,38,39,38,39,38,35, 34,7,6,7,6,7,39,54,55,38,39,38,53,38,2,231, 36,71,30,30,35,58,36,20,23,254,87,59,9,22,8,8, 29,18,10,21,7,11,102,52,99,66,51,15,5,11,20,74, 28,31,91,129,47,71,30,8,43,14,147,37,74,39,182,192, 109,57,76,6,122,58,43,123,23,186,139,110,115,45,35,97, 40,24,8,22,68,87,121,52,54,53,9,7,29,18,2,47, 36,42,32,23,44,28,15,16,17,22,28,62,43,72,26,46, 35,15,13,30,37,2,1,39,26,15,18,17,21,11,13,52, 103,35,136,88,28,16,16,1,247,54,46,34,34,72,29,70, 22,26,162,54,32,11,3,1,1,1,6,12,28,13,11,18, 33,3,1,48,39,62,19,20,30,17,29,5,15,57,3,3, 46,19,18,35,48,16,159,17,38,53,193,134,2,2,8,65, 12,11,63,128,119,48,20,7,58,34,48,28,30,84,52,62, 12,50,8,1,23,11,1,13,18,11,46,30,7,4,14,17, 55,49,60,18,29,4,8,42,2,1,42,9,5,5,2,4, 14,49,56,112,80,19,27,27,31,54,0,1,0,148,0,43, 3,119,3,170,0,84,0,0,1,38,39,55,22,23,54,55, 23,6,7,51,54,55,54,51,23,6,7,39,6,7,54,55, 54,23,50,23,22,23,54,55,23,6,7,22,21,7,47,1, 38,39,6,7,6,7,6,21,20,23,22,23,22,23,50,23, 22,23,7,38,39,38,39,38,39,38,53,54,55,54,55,54, 55,38,35,34,7,6,7,6,7,39,54,55,54,1,62,51, 100,9,110,58,28,33,64,33,24,88,60,184,2,3,10,199, 92,81,41,45,57,85,45,34,56,35,9,8,92,148,17,149, 81,12,1,65,1,2,5,112,69,26,9,16,5,1,1,25, 109,3,3,67,198,5,192,81,128,43,7,5,17,1,26,39, 152,19,25,14,24,28,34,88,161,7,9,46,123,43,2,2, 136,5,14,65,16,5,76,151,14,147,70,3,27,1,64,31, 2,2,94,66,31,23,12,1,30,8,9,30,40,63,40,27, 54,87,50,1,107,34,27,38,57,21,18,26,26,14,13,2, 2,40,23,1,15,16,64,14,17,25,53,9,9,28,35,44, 42,71,67,9,10,6,8,23,105,5,6,48,168,88,4,0, 0,1,0,76,0,75,3,142,3,154,0,52,0,0,1,20, 23,22,23,51,54,55,54,55,54,55,23,6,7,6,7,6, 35,34,39,38,47,1,38,39,34,7,6,7,6,7,39,18, 55,54,55,23,6,3,51,7,51,54,55,54,51,50,23,22, 23,22,23,2,66,10,11,21,20,40,40,53,81,3,4,49, 79,49,13,14,68,51,18,17,80,7,1,1,12,3,21,33, 58,79,179,51,184,91,59,104,59,81,151,1,1,1,63,44, 24,24,15,14,14,10,27,1,1,104,133,39,39,6,5,26, 34,95,3,5,42,93,38,10,9,43,5,24,158,96,71,34, 7,15,50,67,189,40,1,17,158,102,213,29,169,254,243,14, 55,20,12,5,6,12,33,73,0,2,2,255,2,251,3,219, 3,180,0,8,0,19,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,3,76,31,60, 24,14,14,60,13,29,118,30,58,21,1,2,17,11,60,13, 27,3,123,57,31,26,15,34,25,33,17,32,58,29,22,2, 2,19,33,23,34,16,255,255,2,255,2,251,3,219,3,180, 16,6,7,221,0,0,0,1,0,207,0,44,3,28,2,150, 0,30,0,0,1,54,55,5,34,35,39,37,51,23,6,7, 6,7,39,6,7,6,15,1,39,54,55,54,55,54,53,52, 53,55,20,2,15,119,62,254,59,24,23,1,1,250,54,29, 67,49,46,95,12,2,38,36,100,37,41,98,34,14,9,33, 65,1,232,42,67,2,65,2,65,74,34,31,35,33,149,80, 73,80,30,51,77,46,19,19,68,159,17,27,1,27,0,1, 0,162,0,63,3,72,3,1,0,36,0,0,1,54,55,54, 55,4,35,53,50,37,23,6,7,6,7,6,7,39,20,7, 6,7,6,7,6,7,39,54,55,54,55,54,53,52,39,55, 23,2,14,143,79,2,2,254,120,198,217,1,176,29,78,44, 7,6,53,109,17,44,1,1,42,114,15,28,40,105,37,25, 14,39,1,65,1,2,53,49,86,2,2,2,65,2,65,86, 31,5,4,36,40,47,178,94,2,2,84,92,12,22,51,84, 44,30,30,80,178,24,34,1,53,0,0,1,0,168,0,77, 2,188,2,209,0,19,0,0,1,6,15,1,39,54,55,54, 55,54,55,54,55,23,6,7,6,7,17,35,1,201,82,172, 8,27,167,70,17,15,79,111,8,12,53,105,56,8,9,65, 1,152,62,78,4,59,77,51,12,12,65,153,11,17,39,144, 57,9,8,254,125,0,0,1,0,118,0,98,2,215,3,71, 0,19,0,0,1,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,6,7,17,35,1,199,93,188,29,27,186,81, 24,21,90,120,12,22,53,113,62,16,16,65,1,234,72,87, 13,59,86,56,17,17,73,165,17,31,38,156,66,17,15,254, 63,0,0,1,0,169,0,19,3,42,3,15,0,25,0,0, 1,53,51,21,33,6,7,6,7,6,7,6,7,39,54,55, 54,55,54,55,54,55,33,21,35,17,1,181,65,1,52,22, 6,27,62,67,155,27,60,21,158,62,36,23,60,27,4,4, 254,9,65,2,96,175,175,176,32,138,75,81,57,10,20,61, 54,41,25,28,72,187,24,32,196,1,5,0,0,1,0,122, 0,35,3,85,3,146,0,24,0,0,1,53,51,21,33,6, 7,6,7,6,15,1,39,54,55,54,55,54,55,54,55,33, 21,35,17,1,176,65,1,100,24,12,31,67,74,166,115,21, 182,74,43,27,71,31,4,5,253,175,65,2,194,208,208,195, 57,145,81,89,64,40,62,61,50,28,33,87,215,31,39,231, 1,40,0,1,0,140,0,163,3,78,2,160,0,11,0,0, 1,35,53,33,21,35,17,33,21,33,53,33,1,189,221,2, 8,234,1,80,253,62,1,49,2,95,65,65,254,133,65,65, 0,1,0,83,0,202,3,132,3,12,0,11,0,0,1,33, 53,33,21,33,17,33,21,33,53,33,1,186,254,250,2,90, 254,237,1,137,252,207,1,103,2,203,65,65,254,64,65,65, 0,1,0,132,0,78,3,52,3,21,0,57,0,0,1,5, 34,35,39,37,50,51,38,39,55,23,55,50,51,23,7,35, 22,23,22,21,20,7,6,7,34,7,6,35,47,1,55,22, 51,50,55,54,55,54,55,54,53,52,39,38,39,6,7,6, 15,1,39,54,55,54,55,54,1,205,254,236,8,7,1,1, 68,12,11,6,11,65,18,227,5,5,1,222,10,13,15,8, 13,25,61,2,3,20,22,42,53,17,54,27,13,9,31,15, 2,1,6,7,13,13,86,63,59,132,14,39,130,54,5,6, 62,2,25,2,65,2,66,114,7,186,1,65,1,133,111,61, 15,34,26,54,19,1,5,4,13,63,15,3,7,26,3,2, 12,22,21,45,100,132,152,73,69,103,10,51,102,59,7,6, 72,0,0,1,0,77,0,104,3,102,3,152,0,54,0,0, 1,34,7,53,37,39,55,23,37,50,51,23,5,34,35,22, 23,22,21,20,7,6,7,6,35,34,39,55,22,51,50,55, 54,55,54,55,54,53,52,39,38,39,6,7,6,7,6,15, 1,39,54,55,54,55,54,1,208,116,230,1,151,21,65,21, 1,9,7,7,1,254,251,7,6,19,14,9,14,30,72,22, 25,33,76,17,66,28,16,12,39,19,1,1,7,8,15,17, 102,73,2,2,73,153,10,40,153,68,3,3,69,2,122,2, 65,3,214,6,220,2,65,2,186,101,70,18,38,29,62,20, 6,19,63,16,3,9,34,2,2,15,25,24,54,117,167,183, 85,3,2,85,117,8,51,118,76,4,3,81,0,1,0,136, 0,119,3,2,3,140,0,49,0,0,1,38,35,53,50,23, 54,53,52,39,55,21,6,7,5,50,51,6,7,6,7,6, 7,6,7,47,2,55,22,51,50,55,54,55,54,55,39,34, 35,6,7,6,7,6,7,39,54,55,54,1,134,68,135,139, 69,4,1,65,1,1,1,36,9,8,32,12,18,25,9,12, 35,54,37,46,18,23,50,21,27,21,28,20,17,17,229,6, 5,13,34,44,123,16,43,47,111,42,85,2,105,1,65,1, 65,88,32,40,1,182,23,21,1,254,77,109,44,17,13,41, 3,3,13,7,61,19,22,31,119,105,151,1,113,83,110,131, 17,44,46,114,60,122,0,3,0,109,0,90,4,3,3,173, 0,8,0,19,0,65,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,34,39,53, 51,54,53,52,39,55,21,7,5,50,51,2,7,6,7,6, 7,6,7,39,38,39,55,22,51,50,55,54,55,54,55,38, 35,6,7,6,15,1,39,54,55,54,3,116,31,61,23,14, 14,60,13,27,120,30,56,17,5,4,17,11,60,12,26,254, 47,148,74,227,4,1,65,2,1,58,10,10,34,13,19,25, 11,13,39,56,35,22,51,22,56,23,31,22,32,20,18,20, 88,177,13,37,49,133,63,46,116,45,98,3,70,57,32,25, 15,34,25,33,17,31,58,30,16,4,5,19,34,23,34,16, 130,1,64,61,86,32,66,1,199,48,1,254,240,83,117,46, 19,15,43,2,2,3,19,61,21,25,35,128,110,170,1,123, 90,119,141,66,46,120,62,138,0,1,0,164,0,111,3,52, 3,131,0,19,0,0,1,7,39,55,39,55,23,55,23,7, 23,37,23,5,19,7,3,5,39,37,1,118,186,24,181,92, 58,95,199,25,195,83,1,20,26,254,240,145,58,147,254,224, 25,1,27,2,117,75,60,73,183,29,188,81,60,79,166,117, 59,116,254,223,29,1,36,122,60,121,0,3,0,137,0,81, 3,166,3,172,0,10,0,21,0,41,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,7,39,55,39,55,23,55,23,7,23,37,23,5, 19,7,3,5,39,37,3,24,30,60,20,2,2,18,10,59, 13,28,119,29,58,17,4,4,13,15,61,12,25,254,120,203, 25,199,101,59,103,218,24,213,93,1,44,26,254,215,158,58, 160,254,199,26,1,54,3,115,57,31,21,3,2,20,29,25, 33,17,31,58,31,16,4,4,16,37,23,34,16,162,83,61, 80,200,29,205,88,60,86,184,127,59,127,254,198,29,1,62, 133,59,132,0,0,1,0,107,0,57,3,29,3,86,0,37, 0,0,1,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,37,51,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,54,55,54,55,1,139,24,32,49,115,28,40, 115,44,10,9,46,44,2,3,63,16,9,1,62,17,44,82, 63,37,41,100,201,33,63,26,192,79,62,43,89,87,10,13, 2,169,62,49,72,89,22,51,88,56,12,13,69,161,7,10, 17,60,30,5,64,201,94,55,43,101,94,15,28,59,86,53, 40,45,92,201,23,31,0,3,0,77,0,23,3,234,3,135, 0,8,0,19,0,57,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,5,6,7,6, 7,6,7,39,54,55,54,55,54,55,54,55,23,6,7,37, 23,6,7,6,7,6,7,6,7,39,54,55,54,55,54,55, 54,55,3,91,31,60,24,14,14,60,13,29,118,30,58,21, 1,2,17,11,60,13,27,254,75,25,36,52,118,10,27,40, 117,45,17,14,50,47,2,4,63,20,9,1,112,44,87,65, 42,47,103,205,35,85,26,209,92,62,44,99,95,10,13,3, 78,57,31,26,15,34,25,33,17,32,58,29,22,2,2,19, 33,23,34,16,69,67,55,76,93,7,21,51,90,52,21,20, 75,170,10,13,18,72,28,6,64,213,100,64,49,105,97,17, 38,60,92,63,42,46,103,221,24,31,0,1,0,105,0,74, 3,129,3,122,0,34,0,0,1,33,6,15,1,39,54,55, 54,55,54,55,54,53,23,6,7,33,21,35,6,7,6,7, 6,15,1,39,54,55,54,55,54,55,54,2,77,254,238,40, 110,11,49,118,40,7,6,29,25,1,64,22,26,2,38,243, 14,34,13,17,46,113,49,38,111,42,22,15,48,18,1,2, 111,72,126,13,43,136,72,13,12,62,135,3,2,11,123,68, 65,190,92,35,30,81,85,36,53,81,48,26,27,82,196,16, 0,3,0,75,0,42,3,226,3,153,0,10,0,21,0,55, 0,0,1,55,22,23,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,7,33,6,15,1,39,54,55, 54,55,54,55,23,6,7,33,21,33,6,7,6,7,6,7, 6,7,39,54,55,54,55,54,55,54,3,84,30,60,20,2, 2,18,10,59,13,28,119,29,58,17,4,4,13,15,61,12, 25,218,254,212,46,120,9,49,130,44,6,5,33,27,64,24, 30,2,88,254,246,15,34,15,20,50,122,17,35,38,118,45, 26,17,54,18,2,3,90,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,145,80,137,11, 42,149,82,11,11,70,149,11,137,73,65,202,97,42,35,87, 92,13,25,52,87,52,29,30,94,217,15,0,0,1,0,187, 0,163,2,251,2,241,0,7,0,0,19,53,33,17,33,53, 33,17,194,2,57,253,192,1,255,2,176,65,253,178,65,1, 204,0,0,3,0,162,0,138,3,216,3,150,0,8,0,19, 0,27,0,0,1,55,22,23,22,23,7,38,39,7,55,22, 23,22,23,22,23,7,38,39,5,53,33,17,33,53,33,17, 3,74,30,62,22,18,10,59,13,29,118,29,59,20,2,2, 14,14,61,12,27,253,133,2,100,253,148,2,43,3,93,57, 32,25,20,29,25,33,18,33,58,29,22,2,2,17,35,23, 34,16,78,65,253,136,65,1,246,0,0,1,0,153,0,51, 3,92,3,94,0,30,0,0,1,35,53,51,53,51,21,51, 54,55,23,6,7,51,21,35,6,7,6,15,1,39,54,55, 54,55,54,55,35,21,35,1,75,178,178,65,249,3,2,65, 3,1,149,153,14,53,47,118,44,44,112,45,22,15,45,15, 245,65,2,83,65,201,201,65,137,1,168,33,65,184,112,99, 109,40,48,101,64,31,32,93,175,236,0,3,0,125,0,16, 3,194,3,145,0,8,0,19,0,51,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 5,35,53,51,53,51,21,33,54,55,23,20,7,51,21,35, 6,7,6,7,6,7,39,54,55,54,55,54,55,33,17,35, 3,51,31,60,24,14,14,60,13,29,118,30,58,21,1,2, 17,11,60,13,27,254,50,195,195,65,1,18,4,2,64,4, 165,169,16,56,49,123,15,38,44,116,48,27,19,50,15,254, 242,65,3,88,57,31,26,15,34,25,33,17,32,58,29,22, 2,2,19,33,23,34,16,173,65,220,220,72,149,1,123,97, 65,202,119,103,116,14,35,49,103,67,38,39,105,188,254,255, 0,3,0,138,0,81,3,158,3,46,0,17,0,27,0,37, 0,0,37,39,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,7,6,3,55,22,23,22,23,7,38,39,38,19,55, 22,23,22,23,7,38,39,38,1,18,21,198,86,47,36,95, 106,17,31,57,100,60,51,54,100,197,24,202,7,93,41,46, 70,41,71,64,36,43,38,69,31,30,62,56,52,32,27,81, 62,67,50,27,30,80,186,30,56,32,181,78,65,46,83,72, 8,1,101,65,11,17,20,59,50,62,18,9,1,47,53,50, 33,33,97,34,85,34,29,0,0,5,0,109,0,50,3,190, 3,105,0,8,0,19,0,37,0,49,0,59,0,0,1,55, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,1,39,54,55,54,55,54,55,54,55,23,6,7,6, 7,6,7,6,3,55,22,23,22,23,22,23,7,38,39,38, 19,55,22,23,22,23,7,38,39,38,2,202,31,60,24,14, 14,60,13,29,118,30,58,21,1,2,17,11,60,13,27,254, 90,21,202,84,64,47,102,112,20,36,57,104,60,58,63,109, 210,31,214,6,98,43,2,2,49,76,41,69,41,36,7,39, 77,30,37,62,56,55,36,27,3,48,57,31,26,15,34,25, 33,17,32,58,29,22,2,2,19,33,23,34,16,253,80,61, 70,45,34,40,86,194,35,66,31,189,81,77,52,91,76,11, 1,132,64,10,18,1,1,21,63,51,58,18,15,1,77,53, 57,32,40,101,33,90,39,29,0,1,0,82,0,94,3,94, 3,19,0,36,0,0,1,6,7,6,15,1,39,54,55,54, 55,54,55,54,55,6,5,39,37,50,51,23,6,7,6,7, 22,23,22,31,1,7,38,39,38,39,38,1,201,2,6,96, 188,48,35,183,81,30,26,98,127,2,1,146,254,216,1,1, 182,22,21,38,122,80,2,1,63,53,67,170,8,26,158,63, 21,18,52,1,104,3,6,101,124,32,54,121,73,27,27,104, 218,2,2,2,2,65,4,64,211,98,2,2,82,43,53,73, 3,60,70,41,14,14,41,0,0,3,0,49,0,63,3,174, 3,212,0,8,0,19,0,57,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,6, 7,6,7,39,54,55,54,55,54,55,54,55,5,34,35,53, 37,54,51,23,6,7,6,7,22,23,22,23,22,23,7,38, 39,38,39,38,3,31,31,61,23,14,14,60,13,27,120,30, 56,17,5,4,17,11,60,12,26,254,202,116,221,15,17,36, 197,90,32,28,105,136,4,4,254,72,22,21,1,214,26,25, 38,129,80,8,7,70,58,70,173,8,14,26,179,80,11,10, 57,3,155,57,32,25,15,34,25,33,17,31,58,30,16,4, 5,19,34,23,34,16,254,19,124,144,10,11,55,129,80,29, 29,111,232,7,7,4,65,4,1,65,221,102,9,9,90,46, 56,75,4,6,59,76,57,8,8,45,0,1,0,95,0,80, 3,30,3,39,0,43,0,0,19,7,39,55,54,55,23,6, 7,37,23,6,7,6,7,39,54,55,54,55,5,23,22,23, 22,23,22,23,22,51,50,55,23,6,35,34,39,38,39,38, 39,38,53,52,250,137,18,156,2,6,65,3,4,1,136,52, 40,41,30,80,48,72,30,33,30,254,141,1,2,5,7,27, 18,50,52,86,74,155,5,165,70,91,61,78,37,28,9,9, 1,248,42,63,47,75,160,2,66,148,118,52,139,71,51,91, 44,80,51,58,97,112,150,60,42,65,21,13,14,12,12,65, 13,14,19,43,35,72,73,128,19,0,0,3,0,63,0,48, 3,196,3,112,0,10,0,21,0,65,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,7,39,55,54,55,23,6,7,37,23,6,7,6, 7,39,54,55,54,55,5,23,22,23,22,23,22,23,22,51, 50,55,23,6,35,34,39,38,39,38,39,38,53,52,3,54, 30,60,20,2,2,18,10,59,13,28,119,29,58,17,4,4, 13,15,61,12,25,253,214,152,18,171,2,6,65,6,1,1, 172,53,47,41,33,86,49,81,30,34,36,254,104,1,3,5, 8,30,20,54,55,91,81,171,5,178,77,97,65,84,39,29, 11,9,3,55,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,238,45,62,52,85,171,3, 157,77,129,52,156,72,57,96,44,88,54,57,116,123,176,59, 40,70,24,15,16,13,14,65,14,15,18,48,36,78,81,138, 21,0,0,2,0,137,0,69,3,50,3,38,0,16,0,26, 0,0,1,23,6,7,6,7,6,15,1,39,54,55,54,55, 54,55,54,37,55,22,23,22,23,7,38,39,38,2,243,63, 58,39,35,44,75,157,72,37,155,65,39,29,76,63,10,253, 167,45,67,29,34,46,59,44,29,27,3,37,17,217,91,83, 61,104,113,50,54,107,65,39,40,106,226,34,19,47,63,41, 48,101,27,97,41,37,0,4,0,110,0,36,3,221,3,220, 0,8,0,19,0,36,0,46,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,7,23, 6,7,6,7,6,15,1,39,54,55,54,55,54,55,54,37, 55,22,23,22,23,7,38,39,38,3,79,30,62,22,18,10, 59,13,29,118,29,59,20,2,2,14,14,61,12,27,32,63, 62,44,37,47,78,164,86,37,162,69,47,34,83,68,11,253, 118,44,71,33,34,52,59,51,28,24,3,163,57,32,25,20, 29,25,33,18,33,58,29,22,2,2,17,35,23,34,16,24, 17,232,102,88,66,109,118,61,54,112,67,46,47,116,242,40, 22,47,65,47,46,115,26,109,40,33,0,1,0,115,0,29, 3,61,3,153,0,41,0,0,1,6,7,6,7,39,54,55, 54,55,54,55,54,55,23,7,37,23,6,7,6,7,6,15, 1,39,54,55,54,55,38,39,38,39,55,22,23,22,23,54, 55,6,1,107,46,141,9,9,43,97,38,6,6,47,50,2, 3,63,39,1,141,44,96,70,35,37,90,180,71,33,165,63, 87,54,72,46,34,83,15,87,41,48,80,59,77,135,2,195, 119,123,7,8,50,83,51,9,9,73,178,8,10,18,130,9, 64,229,109,53,42,103,110,43,55,102,50,70,78,50,21,15, 20,63,21,18,21,55,96,183,4,0,0,3,0,86,255,249, 3,221,3,217,0,10,0,21,0,68,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,23,6,7,54,37,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,38,39,38,39,55,22,23,22,23,54,55,5, 6,3,79,30,60,20,2,2,18,10,59,13,28,119,29,58, 17,4,4,13,15,61,12,25,254,50,22,29,46,106,19,42, 100,38,12,9,49,53,3,6,62,22,21,145,1,34,44,99, 71,42,46,93,185,25,64,34,185,84,80,53,115,111,15,16, 14,97,42,52,88,63,87,254,112,17,3,160,57,31,21,3, 2,20,29,25,33,17,31,58,31,16,4,4,16,37,23,34, 16,124,52,46,73,90,17,50,87,49,15,14,76,183,10,22, 17,85,60,4,6,63,238,112,67,53,108,114,16,38,55,111, 71,68,77,83,26,4,3,64,24,18,23,61,101,207,10,1, 0,1,0,113,0,86,3,102,3,172,0,35,0,0,1,33, 53,33,39,38,39,6,7,39,54,55,54,55,23,6,7,22, 21,20,21,33,21,33,6,7,6,7,6,7,39,54,55,54, 55,54,1,196,254,173,1,87,2,2,3,91,212,10,202,97, 103,178,25,151,77,9,1,92,254,161,10,38,44,117,18,42, 38,111,41,31,18,31,1,244,65,127,36,41,26,34,64,32, 27,30,78,60,65,26,140,66,9,9,65,114,78,89,89,14, 30,52,82,46,35,36,63,0,0,3,0,82,0,54,3,209, 3,205,0,8,0,19,0,55,0,0,1,55,22,23,22,23, 7,38,39,7,55,22,23,22,23,22,23,7,38,39,1,33, 53,33,39,38,39,6,7,39,54,55,54,55,23,6,7,22, 21,20,21,33,21,33,6,7,6,7,6,7,39,54,55,54, 55,54,3,66,31,61,23,14,14,60,13,27,120,30,56,17, 5,4,17,11,60,12,26,254,164,254,143,1,117,1,2,4, 98,233,10,218,105,107,197,26,158,91,10,1,123,254,130,10, 42,47,123,20,47,39,123,49,28,18,35,3,140,57,32,25, 15,34,25,33,17,31,58,30,16,4,5,19,34,23,34,16, 254,185,65,118,44,64,28,38,65,33,31,30,86,60,68,31, 145,71,15,15,65,126,83,95,95,16,34,53,89,57,34,35, 70,0,0,3,0,158,0,48,3,45,2,191,0,17,0,23, 0,29,0,0,1,23,6,7,6,7,6,7,6,7,39,54, 55,54,55,54,55,54,37,55,22,23,7,38,37,55,22,23, 7,38,2,238,63,59,42,33,40,70,145,17,29,33,143,60, 22,18,73,65,9,254,200,61,38,10,65,9,254,212,47,85, 37,59,40,2,165,19,203,87,68,51,87,87,10,17,55,84, 59,22,22,92,213,31,54,23,89,125,7,115,8,45,86,93, 27,91,0,3,0,108,0,68,3,89,3,52,0,16,0,22, 0,28,0,0,1,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,54,37,55,22,23,7,38,37,55,22,23,7, 38,3,26,63,66,45,40,49,76,155,69,34,156,67,34,26, 84,73,12,254,153,61,46,9,65,10,254,163,48,94,45,58, 46,3,21,18,226,96,87,62,96,95,41,56,92,61,30,33, 105,238,39,74,24,107,140,7,135,11,44,93,112,27,103,0, 0,5,0,78,0,35,3,236,3,249,0,8,0,19,0,36, 0,44,0,52,0,0,1,55,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,7,23,6,7,6,7, 6,15,1,39,54,55,54,55,54,55,54,37,55,22,23,22, 23,7,38,37,55,22,23,7,38,39,38,3,94,30,61,23, 18,10,59,13,29,118,29,59,20,2,2,14,14,61,12,27, 4,62,68,44,46,58,79,161,83,34,161,69,44,33,88,77, 14,254,128,60,28,9,10,13,65,12,254,135,48,101,49,58, 40,15,20,3,193,56,32,24,20,29,25,33,18,33,58,29, 22,2,2,17,35,23,34,16,71,18,233,98,105,73,99,101, 50,56,96,59,39,41,111,247,44,93,24,74,35,41,116,7, 146,13,44,102,119,27,81,22,30,0,0,2,0,90,0,51, 3,120,3,68,0,20,0,24,0,0,1,33,53,33,21,33, 23,6,7,6,7,6,7,39,54,55,54,55,54,53,52,3, 53,33,21,1,203,254,143,3,30,254,148,1,3,20,29,99, 9,24,49,103,32,8,6,19,243,1,246,2,5,65,65,95, 75,56,85,117,10,28,43,118,66,17,17,56,89,25,1,33, 65,65,0,4,0,57,0,17,3,239,3,135,0,8,0,19, 0,40,0,44,0,0,1,55,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,5,33,53,33,21,33, 23,6,7,6,7,6,7,39,54,55,54,55,54,53,52,1, 53,33,21,3,96,31,60,24,14,14,60,13,29,118,30,58, 21,1,2,17,11,60,13,27,254,143,254,111,3,95,254,116, 1,3,22,30,103,9,31,50,109,35,11,7,21,254,247,2, 30,3,78,57,31,26,15,34,25,33,17,32,58,29,22,2, 2,19,33,23,34,16,248,65,65,101,82,62,90,122,10,36, 42,125,69,22,21,61,94,29,1,59,65,65,0,1,1,121, 0,100,3,30,3,130,0,17,0,0,1,17,35,17,51,17, 55,22,23,22,31,1,7,38,39,38,39,38,1,186,65,65, 6,121,59,63,102,5,46,99,48,6,6,51,2,47,254,53, 3,30,254,223,17,41,36,39,102,5,46,97,32,4,4,32, 0,3,1,114,0,68,3,52,3,162,0,8,0,19,0,37, 0,0,1,55,22,23,22,23,7,38,39,7,55,22,23,22, 23,22,23,7,38,39,7,17,35,17,51,17,55,22,23,22, 31,1,7,38,39,38,39,38,2,122,31,61,23,14,14,60, 13,27,120,30,56,17,5,4,17,11,60,12,26,164,65,65, 7,131,64,65,108,10,46,104,54,7,7,48,3,20,57,32, 25,15,34,25,33,17,31,58,30,16,4,5,19,34,23,34, 16,142,254,12,3,94,254,192,24,44,39,41,106,10,47,104, 36,4,4,31,0,1,0,118,0,55,3,106,3,106,0,32, 0,0,1,6,35,53,50,55,54,53,52,39,55,23,6,7, 37,50,51,21,5,34,35,6,7,6,7,6,7,39,54,55, 54,55,54,1,204,114,228,232,115,4,2,65,2,1,2,1, 66,11,10,254,186,11,11,14,31,39,108,10,27,48,101,38, 20,13,26,1,255,1,65,1,63,86,48,99,2,213,46,39, 1,65,1,117,77,100,121,11,30,44,112,63,33,34,69,0, 0,2,0,99,0,181,3,139,2,238,0,3,0,7,0,0, 55,53,33,21,1,53,33,21,99,3,40,253,69,2,50,181, 65,65,1,248,65,65,0,1,0,108,0,54,3,45,2,255, 0,31,0,0,1,54,55,33,53,33,23,6,7,22,31,1, 7,38,39,6,7,6,15,1,39,54,55,54,55,34,39,38, 47,1,55,22,2,45,63,83,254,17,2,22,37,105,64,70, 121,12,49,125,70,46,33,98,189,62,33,215,109,47,38,1, 1,71,149,15,18,171,1,223,85,138,65,65,175,86,57,137, 14,43,143,56,55,32,97,114,37,56,124,102,45,47,1,45, 45,4,62,48,0,2,0,50,0,96,3,136,3,191,0,9, 0,37,0,0,1,55,22,23,22,23,7,38,39,38,19,6, 15,1,39,54,55,54,55,54,55,33,53,33,23,6,7,22, 23,22,23,7,38,39,38,39,17,35,1,117,31,68,32,33, 59,50,72,82,9,59,115,238,14,25,217,101,5,5,106,155, 254,104,1,227,24,130,43,89,64,67,119,42,108,70,60,117, 65,3,134,57,37,26,27,70,42,90,45,5,254,49,78,101, 6,59,94,62,3,3,66,133,65,65,112,34,38,38,40,101, 50,93,43,36,49,254,131,0,0,1,0,184,0,149,2,167, 3,80,0,17,0,0,1,23,6,7,6,7,6,7,6,7, 39,54,55,54,55,54,55,54,2,104,63,34,33,26,36,70, 161,28,72,35,166,67,48,31,64,41,5,3,80,11,196,88, 70,54,104,110,19,47,55,108,63,44,46,97,204,29,0,2, 0,78,0,196,3,126,2,181,0,5,0,20,0,0,1,55, 22,23,7,38,37,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,2,51,53,185,93,58,106,254,67,64,28,30,5, 5,38,101,17,47,102,35,4,4,33,2,143,38,254,214,27, 231,210,13,144,65,11,10,76,107,17,45,107,61,8,8,65, 0,4,0,46,0,173,3,181,3,112,0,10,0,21,0,29, 0,47,0,0,1,55,22,23,22,23,22,23,7,38,39,7, 55,22,23,22,23,22,23,7,38,39,7,55,18,23,7,38, 39,38,37,23,6,7,6,7,6,7,6,7,39,54,55,54, 55,54,55,52,3,39,30,60,20,2,2,18,10,59,13,28, 119,29,58,17,4,4,13,15,61,12,25,202,54,194,106,59, 67,49,51,254,84,64,31,35,3,4,40,105,5,18,47,110, 39,4,4,36,30,3,55,57,31,21,3,2,20,29,25,33, 17,31,58,31,16,4,4,16,37,23,34,16,76,38,254,245, 238,28,144,84,87,160,12,159,76,7,7,78,113,4,20,45, 116,69,8,7,70,155,2,0,0,4,0,46,0,173,3,169, 3,49,0,15,0,32,0,40,0,58,0,0,1,34,7,6, 21,20,23,22,51,50,55,54,53,52,39,38,39,50,31,1, 22,21,20,7,6,35,34,39,38,53,52,55,54,5,55,18, 23,7,38,39,38,37,23,6,7,6,7,6,7,6,7,39, 54,55,54,55,54,55,52,3,99,30,12,3,25,10,10,30, 12,4,28,8,10,41,20,8,1,37,15,18,41,20,8,37, 15,254,232,54,194,106,59,67,49,51,254,84,64,31,35,3, 4,40,105,5,18,47,110,39,4,4,36,30,3,25,28,8, 9,29,12,5,28,8,10,29,12,4,24,36,20,7,6,41, 20,9,37,15,18,42,19,8,148,38,254,245,238,28,144,84, 87,160,12,159,76,7,7,78,113,4,20,45,116,69,8,7, 70,155,2,0,0,1,0,135,0,63,3,31,3,17,0,31, 0,0,19,21,23,22,23,22,23,22,51,50,55,23,6,35, 34,39,38,39,38,61,1,17,51,21,54,55,54,55,23,6, 7,6,201,2,6,39,18,35,63,113,102,213,7,229,93,119, 77,88,34,23,65,133,83,93,192,25,200,93,95,1,214,150, 62,57,26,12,13,20,21,64,24,25,28,61,42,86,15,1, 209,249,20,22,25,78,60,80,26,25,0,3,0,109,0,30, 3,144,3,120,0,8,0,19,0,53,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 1,20,7,20,23,22,23,22,51,50,55,23,6,35,34,39, 38,39,38,53,52,53,17,51,22,21,54,55,54,55,23,6, 7,6,3,1,31,60,24,14,14,60,13,29,118,30,58,21, 1,2,17,11,60,13,27,253,211,1,16,25,69,70,123,111, 228,7,250,99,127,82,97,34,24,64,1,158,78,95,214,24, 211,105,101,3,63,57,31,26,15,34,25,33,17,32,58,29, 22,2,2,19,33,23,34,16,254,229,116,49,91,30,43,22, 22,23,64,25,26,32,63,44,79,10,21,1,246,93,180,26, 21,25,86,60,85,29,27,0,0,3,0,109,0,30,3,129, 3,87,0,15,0,31,0,65,0,0,1,34,7,6,21,20, 23,22,51,50,55,54,53,52,39,38,39,50,23,22,21,20, 7,6,35,34,39,38,53,52,55,54,1,20,7,20,23,22, 23,22,51,50,55,23,6,35,34,39,38,39,38,53,52,53, 17,51,22,21,54,55,54,55,23,6,7,6,3,59,31,11, 3,28,8,9,30,12,4,29,8,9,41,20,9,37,15,18, 41,19,9,37,15,253,133,1,16,25,69,70,123,111,228,7, 250,99,127,82,97,34,24,64,1,158,78,95,214,24,211,105, 101,3,63,29,8,9,30,12,3,27,8,10,31,12,3,24, 36,16,18,41,20,8,36,15,18,43,19,8,254,127,116,49, 91,30,43,22,22,23,64,25,26,32,63,44,79,10,21,1, 246,93,180,26,21,25,86,60,85,29,27,0,0,1,0,127, 0,106,3,56,3,5,0,20,0,0,19,53,33,23,6,7, 6,7,6,7,6,7,39,54,55,54,55,54,55,54,55,127, 2,132,53,40,44,25,33,73,162,27,66,28,162,64,48,31, 69,45,6,7,2,196,65,65,195,93,53,42,92,82,14,31, 58,78,49,36,39,86,196,26,34,0,0,3,0,97,0,76, 3,201,3,207,0,10,0,21,0,41,0,0,1,55,22,23, 22,23,22,23,7,38,39,7,55,22,23,22,23,22,23,7, 38,39,5,53,33,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,54,55,3,59,30,60,20,2,2,18,10,59, 13,28,119,29,58,17,4,4,13,15,61,12,25,253,73,2, 186,54,43,45,29,37,77,171,106,28,174,72,51,34,75,49, 6,8,3,150,57,31,21,3,2,20,29,25,33,17,31,58, 31,16,4,4,16,37,23,34,16,112,65,65,207,98,63,47, 98,87,52,59,83,54,39,42,95,214,28,38,0,3,0,97, 0,76,3,171,3,167,0,14,0,30,0,50,0,0,1,34, 7,6,21,20,23,22,51,50,55,54,53,52,47,1,50,23, 22,21,20,7,6,35,34,39,38,53,52,55,54,5,53,33, 23,6,7,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,3,102,32,11,3,29,8,9,30,12,3,28,17,41,20, 8,36,15,18,43,19,8,38,15,253,12,2,186,54,43,45, 29,37,77,171,106,28,174,72,51,34,75,49,6,8,3,143, 29,8,9,31,11,3,28,8,9,31,12,27,36,16,18,41, 19,9,37,15,17,43,19,8,207,65,65,207,98,63,47,98, 87,52,59,83,54,39,42,95,214,28,38,0,0,1,0,106, 1,1,3,163,2,147,0,24,0,0,19,39,54,55,54,55, 54,51,50,23,22,23,22,23,7,0,47,1,38,39,34,7, 6,7,6,158,52,110,50,40,34,16,17,26,33,110,246,29, 114,40,254,178,119,28,24,15,7,6,18,27,48,1,107,39, 148,52,42,10,5,12,39,188,22,89,52,1,6,54,12,8, 1,2,7,28,51,0,0,3,0,76,0,240,3,196,3,60, 0,8,0,19,0,44,0,0,1,55,22,23,22,23,7,38, 39,7,55,22,23,22,23,22,23,7,38,39,1,39,54,55, 54,55,54,51,50,23,22,5,22,23,7,36,39,38,39,38, 35,34,15,1,6,2,205,30,62,22,18,10,59,13,29,118, 29,59,20,2,2,14,14,61,12,27,253,216,52,117,55,46, 34,16,18,27,36,119,1,5,42,117,39,254,183,125,39,28, 29,15,22,25,17,48,3,3,57,32,25,20,29,25,33,18, 33,58,29,22,2,2,17,35,23,34,16,254,173,38,157,59, 46,10,5,13,41,200,33,91,51,254,69,22,10,9,24,17, 49,0,0,3,0,76,0,240,3,196,3,64,0,14,0,32, 0,57,0,0,1,34,15,1,20,23,22,51,50,55,54,53, 52,39,38,39,50,31,1,22,21,20,15,1,6,35,34,39, 38,53,52,55,54,1,39,54,55,54,55,54,51,50,23,22, 5,22,23,7,36,39,38,39,38,35,34,15,1,6,2,188, 31,12,3,26,9,11,29,12,4,28,8,9,42,19,7,1, 36,20,7,6,42,20,8,36,16,253,214,52,117,55,46,34, 16,18,27,36,119,1,5,42,117,39,254,183,125,39,28,29, 15,22,25,17,48,3,40,28,17,29,12,5,28,8,10,30, 12,3,24,37,21,6,5,41,20,8,1,37,15,18,41,20, 8,254,34,38,157,59,46,10,5,13,41,200,33,91,51,254, 69,22,10,9,24,17,49,0,0,3,0,73,0,137,3,94, 3,98,0,9,0,24,0,36,0,0,1,55,22,23,22,23, 7,38,39,38,37,23,6,7,6,7,6,15,1,39,54,55, 54,55,54,55,33,53,33,53,51,21,33,21,33,17,35,2, 83,59,51,34,35,88,45,91,40,36,254,115,63,32,29,3, 2,33,86,14,44,88,29,2,2,28,210,254,212,1,44,65, 1,49,254,207,65,1,231,27,116,48,50,84,47,87,57,50, 134,16,121,52,5,4,55,79,12,48,79,46,3,3,45,251, 65,173,173,65,254,21,0,5,0,40,0,108,3,141,3,165, 0,8,0,19,0,32,0,43,0,55,0,0,1,55,22,23, 22,23,7,38,39,7,55,22,23,22,23,22,23,7,38,39, 3,55,22,23,22,31,1,7,38,39,38,39,38,37,23,6, 7,6,15,1,39,54,55,54,19,33,53,33,53,51,21,33, 21,33,17,35,2,255,30,62,22,18,10,59,13,29,118,29, 59,20,2,2,14,14,61,12,27,125,59,52,40,34,96,3, 44,99,43,39,57,1,254,142,62,32,39,34,89,20,44,97, 35,32,226,254,184,1,72,65,1,76,254,180,65,3,108,57, 32,25,20,29,25,33,18,33,58,29,22,2,2,17,35,23, 34,16,254,201,27,120,57,49,94,3,46,93,61,54,130,2, 11,16,132,64,58,81,19,49,86,56,54,1,13,65,190,190, 65,253,236,0,0,5,0,40,0,108,3,121,3,144,0,14, 0,32,0,45,0,56,0,68,0,0,1,34,15,1,20,23, 22,51,50,55,54,53,52,39,38,39,50,31,1,22,21,20, 15,1,6,35,34,39,38,53,52,55,54,3,55,22,23,22, 31,1,7,38,39,38,39,38,37,23,6,7,6,15,1,39, 54,55,54,19,33,53,33,53,51,21,33,21,33,17,35,3, 12,31,12,3,26,9,11,29,12,4,28,8,9,42,19,7, 1,36,20,7,6,42,20,8,36,16,157,59,52,40,34,96, 3,44,99,43,39,57,1,254,142,62,32,39,34,89,20,44, 97,35,32,226,254,184,1,72,65,1,76,254,180,65,3,120, 28,17,29,12,5,28,8,10,30,12,3,24,37,21,6,5, 41,20,8,1,37,15,18,41,20,8,254,87,27,120,57,49, 94,3,46,93,61,54,130,2,11,16,132,64,58,81,19,49, 86,56,54,1,13,65,190,190,65,253,236,0,0,1,0,139, 0,194,3,73,3,36,0,21,0,0,1,54,55,54,55,33, 53,33,23,6,7,6,7,22,23,7,38,39,38,39,55,22, 1,221,124,57,50,60,253,139,2,150,40,75,59,57,124,53, 76,48,116,59,46,116,38,100,1,163,82,65,57,116,65,65, 147,69,65,85,52,83,44,126,52,40,85,53,71,0,0,3, 0,219,0,80,3,50,3,54,0,19,0,29,0,39,0,0, 55,39,54,51,50,23,22,23,22,23,7,38,39,38,39,38, 35,34,7,6,19,55,22,23,22,23,7,38,39,38,3,55, 22,23,22,23,7,38,39,38,225,6,121,64,57,50,109,181, 7,10,26,174,85,16,16,46,54,49,71,20,78,6,110,64, 69,124,27,114,68,54,149,6,143,68,69,126,27,120,65,64, 174,65,13,8,17,80,3,5,59,75,18,4,2,7,6,2, 1,50,65,10,16,19,55,59,52,18,14,1,27,65,14,19, 20,59,59,57,18,17,0,1,0,135,0,155,3,135,3,36, 0,24,0,0,55,39,54,55,54,55,54,55,23,6,7,6, 7,54,55,38,39,55,22,23,7,39,4,5,39,186,4,113, 40,1,2,42,51,63,52,44,41,91,249,205,48,69,48,143, 109,53,85,254,250,254,152,8,229,1,175,90,3,4,97,205, 15,209,104,93,144,32,55,58,76,44,156,154,39,115,71,41, 65,0,0,1,0,174,0,94,2,225,3,136,0,25,0,0, 1,38,39,55,22,23,54,55,23,6,7,6,7,22,23,7, 38,39,6,7,6,7,39,54,55,54,1,225,64,154,25,149, 64,30,26,65,27,30,3,3,68,110,45,98,58,58,157,39, 67,41,128,41,96,1,244,40,65,60,63,39,105,236,7,240, 110,11,10,49,103,48,92,44,144,138,33,53,50,105,42,97, 0,1,0,90,0,75,3,120,3,91,0,38,0,0,1,35, 53,33,21,33,22,21,33,21,33,20,7,21,22,23,22,23, 22,51,50,55,23,6,35,34,39,38,39,38,53,52,55,54, 53,33,53,33,52,1,149,245,2,107,254,203,2,1,160,254, 96,2,2,6,17,56,43,66,57,117,6,123,60,70,51,82, 31,20,2,2,254,195,1,61,3,26,65,65,154,72,65,154, 60,68,22,10,26,12,10,10,64,12,12,20,48,32,52,3, 49,59,153,65,72,0,0,1,0,153,0,62,3,40,3,11, 0,20,0,0,1,7,39,55,39,55,23,37,23,6,7,6, 7,39,54,55,54,55,5,19,7,1,88,174,17,163,96,59, 100,1,124,49,36,35,34,84,47,99,42,10,9,254,187,196, 59,1,232,48,63,45,204,27,214,105,53,103,56,53,86,45, 98,87,22,24,89,254,95,27,0,1,0,100,0,82,3,85, 3,139,0,20,0,0,1,7,39,55,39,55,23,37,23,6, 7,6,7,39,54,55,54,55,5,19,7,1,66,205,17,194, 113,59,118,1,189,50,45,38,43,93,47,112,49,16,12,254, 122,228,58,2,67,57,63,54,241,27,251,123,53,125,60,67, 93,45,109,101,33,36,108,254,25,28,0,1,0,168,0,173, 3,64,2,122,0,9,0,0,37,17,33,53,33,17,51,21, 33,53,2,97,254,157,1,164,158,253,104,238,1,75,65,254, 116,65,65,0,0,1,0,116,0,214,3,115,2,224,0,9, 0,0,1,17,33,53,33,17,51,21,33,53,2,119,254,96, 1,225,187,253,1,1,23,1,136,65,254,55,65,65,0,1, 0,232,0,95,2,248,2,200,0,11,0,0,1,53,33,53, 33,17,33,53,33,53,33,53,2,183,254,67,1,254,253,240, 1,207,254,113,1,192,199,65,253,151,65,223,65,0,0,1, 0,190,0,123,3,28,3,59,0,11,0,0,1,53,33,53, 33,17,33,53,33,17,33,53,2,219,253,247,2,74,253,162, 2,29,254,45,2,9,241,65,253,64,65,1,12,65,0,2, 0,183,0,49,3,117,3,86,0,20,0,24,0,0,19,53, 33,23,6,7,6,7,6,7,6,7,39,54,55,54,55,54, 55,54,55,37,53,33,21,183,2,150,40,91,64,34,36,84, 165,16,48,24,163,69,34,27,86,94,7,9,253,243,1,195, 2,46,65,65,183,82,43,33,75,68,6,19,61,64,45,22, 25,76,183,15,18,231,65,65,0,2,1,19,0,36,2,249, 3,141,0,19,0,23,0,0,1,55,22,21,2,7,6,7, 6,7,6,7,39,54,55,54,55,54,17,52,37,51,17,35, 2,175,65,9,1,98,13,14,64,141,17,33,24,140,55,20, 15,110,254,91,65,65,3,138,3,151,89,254,205,143,18,16, 71,58,7,13,60,57,43,16,17,123,1,68,93,129,254,57, 0,2,0,81,0,157,3,117,3,35,0,13,0,29,0,0, 1,51,17,54,55,54,55,23,6,7,6,15,1,39,3,55, 23,6,7,6,15,1,39,54,55,54,55,54,53,52,1,174, 65,145,62,53,80,50,80,64,73,166,7,65,187,65,1,4, 45,32,85,20,42,78,28,8,7,42,3,35,253,192,59,46, 39,97,41,99,48,53,67,3,44,2,55,1,171,168,92,66, 75,17,49,69,43,13,13,87,219,38,0,1,0,178,0,135, 3,79,3,54,0,16,0,0,19,51,17,54,55,54,55,54, 55,23,6,7,6,7,6,7,39,178,65,183,91,97,152,10, 28,43,145,76,40,39,107,197,65,3,54,253,147,43,47,50, 132,8,25,48,128,50,27,20,54,44,51,0,0,2,0,190, 0,198,3,51,2,250,0,3,0,11,0,0,1,17,33,17, 29,1,35,17,33,17,35,53,2,242,254,13,65,2,117,65, 1,73,1,112,254,144,65,66,2,52,253,208,62,0,0,1, 0,183,0,51,3,40,2,136,0,20,0,0,19,21,35,17, 33,6,7,6,7,6,15,1,39,54,55,54,55,54,55,54, 55,248,65,2,113,10,3,16,55,66,165,125,21,185,72,43, 24,53,12,2,1,2,71,196,1,5,164,28,129,75,90,65, 46,61,66,50,30,33,72,178,19,23,0,1,0,139,0,72, 3,82,2,241,0,21,0,0,19,21,35,17,33,6,7,6, 7,6,7,6,7,39,54,55,54,55,54,55,54,55,204,65, 2,199,9,6,19,61,73,180,42,114,22,199,80,65,34,61, 15,2,2,2,176,231,1,40,180,46,141,83,99,74,17,41, 61,71,50,41,47,83,192,30,41,0,0,2,0,93,0,87, 3,145,3,160,0,3,0,23,0,0,1,35,17,51,3,35, 53,33,53,51,21,51,21,35,17,33,21,33,17,35,17,33, 53,51,2,29,189,189,254,74,1,72,65,192,192,1,51,254, 205,65,254,64,194,2,180,254,235,1,21,65,171,171,65,254, 235,65,254,249,1,7,65,0,0,2,0,111,0,167,3,122, 2,220,0,7,0,16,0,0,37,17,51,17,33,21,33,53, 19,53,33,23,6,7,39,54,55,1,190,65,1,123,252,245, 109,2,29,28,104,142,32,127,61,232,1,31,254,225,65,65, 1,179,65,65,118,72,56,70,64,0,0,1,0,208,0,71, 3,74,2,245,0,20,0,0,1,54,55,33,53,33,23,6, 7,6,7,6,15,1,39,54,55,54,55,33,53,2,217,18, 28,253,201,2,71,51,46,43,29,37,80,175,104,27,169,68, 118,48,254,16,2,14,52,114,65,65,193,90,59,46,97,87, 49,59,78,48,84,121,65,0,0,2,0,185,0,103,3,148, 3,18,0,16,0,27,0,0,55,39,54,55,54,55,54,55, 54,55,23,6,7,6,7,6,7,3,55,22,23,22,31,1, 7,38,39,38,213,5,215,94,66,45,92,85,19,32,60,76, 49,56,68,108,211,163,19,94,40,42,70,5,46,68,36,35, 103,65,17,31,21,33,67,182,42,75,26,180,76,87,50,78, 24,2,97,62,30,24,25,70,5,46,68,22,21,0,0,3, 0,95,0,0,3,219,3,180,0,8,0,19,0,44,0,0, 1,55,22,23,22,23,7,38,39,7,55,22,23,22,23,22, 23,7,38,39,5,53,51,21,33,6,7,6,7,6,15,1, 39,54,55,54,55,54,55,54,55,33,21,35,17,3,76,31, 60,24,14,14,60,13,29,118,30,58,21,1,2,17,11,60, 13,27,254,135,65,1,128,25,12,34,73,79,179,125,20,189, 79,52,32,76,33,6,6,253,123,65,3,123,57,31,26,15, 34,25,33,17,32,58,29,22,2,2,19,33,23,34,16,93, 228,228,204,57,162,90,96,67,44,61,64,52,33,39,92,223, 38,53,252,1,61,0,0,1,0,182,0,93,2,226,3,10, 0,49,0,0,1,38,35,55,50,23,55,38,53,55,21,20, 7,23,50,51,6,7,6,15,2,6,7,47,1,38,39,55, 22,51,50,55,54,55,54,55,54,55,39,35,6,7,6,15, 1,39,54,55,54,1,143,56,114,1,117,58,3,1,65,1, 254,7,6,28,10,17,20,17,2,31,50,33,40,3,13,23, 43,16,18,15,3,3,24,16,12,18,193,7,10,29,42,115, 40,47,98,34,72,2,10,1,65,1,144,21,25,1,165,13, 13,1,229,63,96,37,25,2,36,3,2,12,1,5,61,16, 12,2,3,27,101,71,145,1,95,72,99,121,42,45,101,49, 103,0,0,1,0,155,0,53,3,76,2,251,0,33,0,0, 1,35,6,7,6,7,39,54,55,54,55,54,55,23,6,7, 33,21,35,6,7,6,7,6,15,1,39,54,55,54,55,54, 55,54,2,60,229,35,100,2,2,49,105,32,6,4,24,24, 63,18,21,1,214,207,13,31,10,13,40,99,42,39,104,39, 11,9,44,14,1,2,15,60,116,3,2,43,121,60,10,9, 52,122,11,103,57,65,169,79,27,23,69,76,31,53,75,50, 15,16,75,182,4,0,255,255,0,139,0,72,3,219,3,180, 16,38,7,221,0,0,16,6,8,45,0,0,255,255,0,93, 0,87,3,219,3,180,16,38,7,221,0,0,16,6,8,46, 0,0,255,255,0,111,0,167,3,219,3,180,16,38,7,221, 0,0,16,6,8,47,0,0,255,255,0,208,0,71,3,219, 3,180,16,38,7,221,0,0,16,6,8,48,0,0,255,255, 0,87,1,46,0,211,1,171,16,6,0,121,0,0,255,255, 255,247,1,134,3,233,1,206,16,7,6,203,0,0,0,150, 0,1,0,184,0,149,2,167,3,80,0,17,0,0,37,38, 39,38,39,38,39,38,39,55,22,23,22,23,22,23,22,23, 2,104,37,36,21,26,64,161,29,58,35,157,64,68,42,72, 40,6,11,149,204,89,51,39,94,109,20,38,55,102,56,59, 63,109,205,29,65,0,255,255,0,184,0,149,3,101,3,80, 16,38,7,221,138,132,16,6,8,59,0,0,255,255,0,43, 255,233,1,251,2,197,16,6,0,19,0,0,255,255,0,34, 0,0,1,255,2,197,16,6,0,21,0,0,255,255,0,32, 255,233,1,250,2,197,16,6,0,22,0,0,255,255,0,28, 0,0,2,8,2,197,16,6,0,23,0,0,255,255,0,35, 255,233,2,1,2,197,16,6,0,24,0,0,255,255,0,43, 255,233,2,1,2,197,16,6,0,25,0,0,255,255,0,46, 0,0,2,8,2,197,16,6,0,26,0,0,255,255,0,37, 255,233,2,1,2,197,16,6,0,27,0,0,255,255,0,38, 255,233,1,253,2,197,16,6,0,28,0,0,0,1,255,238, 255,38,0,153,2,12,0,15,0,0,19,51,17,20,7,34, 35,34,39,53,22,51,50,55,54,53,70,83,128,7,8,13, 15,17,3,52,11,5,2,12,253,135,103,6,3,71,1,32, 14,23,0,1,0,116,254,227,0,216,255,196,0,12,0,0, 23,51,21,20,7,6,35,53,50,53,52,53,35,116,100,59, 17,24,55,55,60,103,88,25,8,38,78,4,4,0,255,255, 0,102,0,0,1,91,2,197,16,6,0,20,0,0,0,2, 0,18,0,0,2,18,2,220,0,21,0,43,0,0,1,21, 35,17,35,17,35,53,51,53,52,55,54,51,50,23,21,38, 35,34,29,1,33,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,1,2,87,83,70,70, 74,22,27,23,24,19,10,58,1,103,87,83,70,70,74,22, 27,23,24,19,10,58,2,12,68,254,56,1,200,68,89,88, 24,7,5,69,1,53,82,68,254,56,1,200,68,89,88,24, 7,5,69,1,53,82,0,3,0,12,0,0,1,180,2,220, 0,21,0,25,0,29,0,0,19,21,35,17,35,17,35,53, 51,53,52,55,54,51,50,23,21,38,35,34,29,1,33,17, 35,17,55,21,35,53,252,87,83,70,70,74,22,27,23,24, 19,10,58,1,15,83,83,83,2,12,68,254,56,1,200,68, 89,88,24,7,5,69,1,53,82,253,244,2,12,205,105,105, 0,2,0,17,0,0,1,174,2,220,0,21,0,25,0,0, 1,21,35,17,35,17,35,53,51,53,52,55,54,51,50,23, 21,38,35,34,29,1,37,17,35,17,1,1,87,83,70,70, 74,22,27,23,24,19,10,58,1,4,83,2,12,68,254,56, 1,200,68,89,88,24,7,5,69,1,53,82,205,253,39,2, 217,0,0,4,0,18,0,0,2,202,2,220,0,21,0,43, 0,47,0,51,0,0,1,21,35,17,35,17,35,53,51,53, 52,55,54,51,50,23,21,38,35,34,29,1,33,21,35,17, 35,17,35,53,51,53,52,55,54,51,50,23,21,38,35,34, 29,1,33,17,35,17,55,21,35,53,1,2,87,83,70,70, 74,22,27,23,24,19,10,58,1,103,87,83,70,70,74,22, 27,23,24,19,10,58,1,15,83,83,83,2,12,68,254,56, 1,200,68,89,88,24,7,5,69,1,53,82,68,254,56,1, 200,68,89,88,24,7,5,69,1,53,82,253,244,2,12,205, 105,105,0,3,0,18,0,0,2,196,2,220,0,21,0,43, 0,47,0,0,1,21,35,17,35,17,35,53,51,53,52,55, 54,51,50,23,21,38,35,34,29,1,33,21,35,17,35,17, 35,53,51,53,52,55,54,51,50,23,21,38,35,34,29,1, 37,17,35,17,1,2,87,83,70,70,74,22,27,23,24,19, 10,58,1,108,87,83,70,70,74,22,27,23,24,19,10,58, 1,4,83,2,12,68,254,56,1,200,68,89,88,24,7,5, 69,1,53,82,68,254,56,1,200,68,89,88,24,7,5,69, 1,53,82,205,253,39,2,217,0,2,0,18,255,233,2,20, 2,220,0,23,0,41,0,0,1,21,35,17,20,23,22,51, 50,55,21,6,35,34,39,38,53,17,35,53,51,53,51,21, 1,35,17,35,53,51,53,52,55,54,51,50,23,21,38,35, 34,21,2,20,86,22,9,15,25,15,39,29,89,11,1,71, 71,83,254,237,83,70,70,74,22,27,23,24,19,10,58,2, 12,68,254,153,38,6,3,4,70,7,67,7,9,1,140,68, 144,144,253,244,1,200,68,89,88,24,7,5,69,1,53,0, 0,2,0,34,255,233,2,242,2,156,0,23,0,72,0,0, 1,21,35,17,20,23,22,51,50,55,21,6,35,34,39,38, 53,17,35,53,51,53,51,21,7,35,38,35,34,7,6,21, 20,23,22,31,1,22,23,22,21,20,7,6,35,34,39,38, 53,51,22,23,22,51,50,55,54,53,52,47,2,38,39,38, 53,52,55,54,51,50,23,22,2,242,86,22,9,15,25,15, 39,29,89,11,1,71,71,83,230,88,3,102,82,23,6,66, 14,17,80,118,23,7,90,52,74,194,14,1,88,6,18,33, 71,84,28,10,54,27,78,119,31,16,84,49,68,145,35,10, 2,12,68,254,153,38,6,3,4,70,7,67,7,9,1,140, 68,144,144,146,84,49,14,16,45,22,4,4,19,28,70,21, 27,96,44,26,162,8,9,47,20,35,47,16,19,46,19,8, 19,29,51,28,43,93,42,25,101,27,0,2,0,58,0,149, 0,145,2,88,0,3,0,7,0,0,19,51,17,7,23,51, 21,35,58,87,87,8,71,71,2,88,254,233,35,66,71,0, 0,1,0,0,2,148,1,50,3,45,0,24,0,0,19,35, 48,23,22,23,22,23,22,51,50,55,54,55,54,55,35,48, 7,6,7,6,34,39,38,71,71,10,6,8,17,30,39,43, 43,39,30,17,18,6,71,8,7,8,23,72,23,18,3,45, 48,21,13,30,17,24,24,17,30,29,53,34,17,8,23,23, 18,0,0,3,0,58,0,149,1,89,2,88,0,3,0,7, 0,11,0,0,1,51,17,7,3,51,17,7,23,51,21,35, 1,2,87,87,200,87,87,50,188,188,2,88,254,233,35,1, 58,254,233,35,66,71,0,1,0,37,0,0,2,19,2,88, 0,24,0,0,37,54,55,54,55,54,55,54,53,17,51,17, 20,7,6,7,6,35,34,35,7,53,51,3,51,1,34,24, 40,40,16,6,9,19,87,31,34,68,63,64,3,3,228,165, 139,90,78,2,20,21,20,7,13,28,37,1,118,254,138,57, 46,56,33,33,1,76,2,12,0,1,0,58,0,0,3,64, 2,88,0,37,0,0,1,6,7,6,7,6,7,21,35,53, 55,54,55,54,55,54,55,39,51,1,54,55,54,55,54,55, 53,51,21,7,6,7,6,7,6,7,23,35,1,53,60,29, 48,10,8,1,87,3,11,68,32,65,3,2,192,122,1,144, 65,25,47,10,9,1,87,3,11,60,3,5,25,78,193,125, 1,112,32,39,62,32,25,37,141,141,46,73,80,39,41,2, 1,177,254,143,39,33,61,25,25,36,150,150,43,64,73,5, 5,31,52,177,0,1,0,38,0,0,3,25,2,88,0,7, 0,0,1,17,35,17,33,53,33,21,2,198,87,253,183,2, 243,2,12,253,244,2,12,76,76,0,0,2,0,63,0,0, 3,52,2,88,0,26,0,30,0,0,1,17,35,17,38,39, 38,39,38,47,1,38,39,34,39,33,53,33,22,23,22,23, 22,23,22,23,22,1,17,51,17,3,52,87,11,14,5,6, 10,12,6,38,57,2,10,254,13,1,251,83,50,6,6,35, 22,33,13,1,253,12,87,1,122,254,134,1,116,55,24,8, 8,14,7,4,21,9,2,76,11,25,4,3,19,31,50,66, 6,254,127,1,119,254,137,0,0,1,0,57,0,0,2,254, 2,88,0,44,0,0,41,1,53,33,54,55,54,55,54,55, 54,55,54,63,1,53,38,39,38,39,38,39,38,39,33,53, 33,22,23,22,23,22,23,22,23,22,23,21,6,7,6,7, 6,7,6,1,221,254,92,1,158,78,30,11,12,21,11,1, 2,26,12,4,13,16,6,7,34,106,8,18,254,98,1,164, 95,55,8,9,40,24,41,13,2,2,13,34,5,6,53,172, 3,76,11,12,4,6,10,12,2,2,32,46,16,142,54,23, 8,9,39,16,1,3,76,11,24,3,4,17,32,52,61,8, 10,156,69,47,7,8,69,21,1,0,0,1,0,37,0,0, 3,27,2,237,0,28,0,0,37,7,35,52,55,54,55,54, 55,54,55,54,55,52,55,53,33,53,51,21,33,21,20,7, 6,7,6,7,6,1,247,1,87,23,13,22,37,113,21,7, 46,10,1,253,97,87,2,159,56,25,78,58,25,40,86,86, 114,55,29,30,50,64,12,4,29,57,4,4,72,225,149,153, 69,51,23,46,34,28,45,0,0,2,0,63,0,0,3,54, 2,88,0,10,0,20,0,0,41,1,17,33,50,23,22,23, 22,31,1,3,17,38,39,38,39,38,39,33,17,3,53,253, 10,1,211,85,84,39,26,51,5,1,87,1,41,21,13,57, 71,254,132,2,88,42,19,30,63,53,18,254,213,1,43,51, 39,18,8,32,1,254,64,0,0,1,0,37,0,0,2,233, 2,88,0,26,0,0,1,17,35,17,38,39,38,39,38,47, 1,38,39,34,39,33,53,33,22,23,22,23,22,23,22,23, 22,2,233,87,11,14,5,6,10,12,6,38,57,2,10,254, 62,1,201,84,50,6,6,35,22,33,13,1,1,122,254,134, 1,116,55,24,8,8,14,7,4,21,9,2,76,11,26,3, 3,19,31,50,66,6,0,1,0,35,0,0,3,117,2,88, 0,45,0,0,1,17,20,7,6,7,6,15,1,6,43,1, 53,51,50,55,54,55,54,55,54,61,1,17,35,53,33,22, 23,22,31,1,17,35,17,38,39,38,39,38,39,38,39,38, 47,1,1,16,9,6,11,13,37,8,65,84,4,4,50,41, 6,6,21,5,17,60,1,253,155,48,33,12,3,87,11,15, 4,6,11,12,2,3,38,59,10,2,12,254,212,63,28,18, 19,24,24,5,43,76,25,3,4,14,8,24,44,29,1,41, 76,21,72,50,64,15,254,134,1,116,56,25,7,8,15,7, 1,2,20,9,2,0,0,1,0,50,0,197,2,22,1,218, 0,7,0,0,1,21,33,53,51,53,51,21,2,22,254,28, 207,70,1,11,70,70,207,207,0,2,0,59,0,0,2,209, 2,199,0,60,0,64,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,1,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,1,136,71,71,224,53, 50,13,9,20,3,4,9,10,27,52,38,40,3,3,1,82, 254,174,39,92,71,16,11,31,2,2,31,35,63,5,6,57, 57,3,3,1,82,254,212,2,12,4,8,24,28,6,9,207, 207,36,49,34,50,1,231,71,0,2,0,59,0,0,2,209, 2,199,0,60,0,64,0,0,55,22,23,22,23,22,23,59, 1,55,54,55,54,55,54,55,52,53,17,51,17,7,6,7, 6,7,6,7,35,38,39,38,39,38,39,38,53,52,53,17, 51,17,51,54,55,54,55,54,55,54,61,1,51,21,7,6, 7,6,35,34,35,3,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,177,71,71,224,53,50, 13,9,20,3,4,9,10,27,52,38,40,3,3,1,82,254, 174,39,92,71,16,11,31,2,2,31,35,63,5,6,57,57, 3,3,1,82,254,212,2,12,4,8,24,28,6,9,207,207, 36,49,34,50,1,231,71,0,0,3,0,59,0,0,2,209, 2,199,0,60,0,64,0,68,0,0,55,22,23,22,23,22, 23,59,1,55,54,55,54,55,54,55,52,53,17,51,17,7, 6,7,6,7,6,7,35,38,39,38,39,38,39,38,53,52, 53,17,51,17,51,54,55,54,55,54,55,54,61,1,51,21, 7,6,7,6,35,34,35,55,51,21,35,19,51,21,35,151, 13,61,17,16,36,47,8,82,34,38,18,54,33,23,2,87, 3,17,91,22,21,64,71,82,71,63,67,45,4,4,35,87, 99,39,17,6,10,24,3,1,87,3,10,40,50,79,2,2, 195,71,71,197,71,71,224,53,50,13,9,20,3,4,9,10, 27,52,38,40,3,3,1,82,254,174,39,92,71,16,11,31, 2,2,31,35,63,5,6,57,57,3,3,1,82,254,212,2, 12,4,8,24,28,6,9,207,207,36,49,34,50,19,71,2, 27,71,0,3,0,59,0,0,2,209,2,199,0,60,0,64, 0,68,0,0,55,22,23,22,23,22,23,59,1,55,54,55, 54,55,54,55,52,53,17,51,17,7,6,7,6,7,6,7, 35,38,39,38,39,38,39,38,53,52,53,17,51,17,51,54, 55,54,55,54,55,54,61,1,51,21,7,6,7,6,35,34, 35,55,51,21,35,1,51,21,35,151,13,61,17,16,36,47, 8,82,34,38,18,54,33,23,2,87,3,17,91,22,21,64, 71,82,71,63,67,45,4,4,35,87,99,39,17,6,10,24, 3,1,87,3,10,40,50,79,2,2,195,71,71,254,140,71, 71,224,53,50,13,9,20,3,4,9,10,27,52,38,40,3, 3,1,82,254,174,39,92,71,16,11,31,2,2,31,35,63, 5,6,57,57,3,3,1,82,254,212,2,12,4,8,24,28, 6,9,207,207,36,49,34,50,19,71,2,27,71,0,0,2, 0,58,255,125,2,70,2,88,0,37,0,41,0,0,19,6, 7,6,7,6,7,21,35,53,55,54,55,54,55,54,55,39, 51,19,54,55,54,55,54,55,53,51,21,7,6,7,6,7, 6,7,23,35,7,51,21,35,252,25,7,48,10,8,1,87, 3,10,60,4,5,20,38,148,102,228,25,7,47,10,9,1, 87,3,11,58,5,5,20,38,148,102,254,188,188,1,69,17, 11,62,32,25,37,141,141,45,65,78,5,6,25,25,210,254, 187,17,11,61,25,25,36,150,150,43,62,73,5,7,25,25, 210,60,71,0,0,2,0,58,255,8,2,70,2,88,0,37, 0,45,0,0,19,6,7,6,7,6,7,21,35,53,55,54, 55,54,55,54,55,39,51,19,54,55,54,55,54,55,53,51, 21,7,6,7,6,7,6,7,23,35,7,21,35,53,35,53, 51,21,252,25,7,48,10,8,1,87,3,10,60,4,5,20, 38,148,102,228,25,7,47,10,9,1,87,3,11,58,5,5, 20,38,148,102,137,70,59,188,1,69,17,11,62,32,25,37, 141,141,45,65,78,5,6,25,25,210,254,187,17,11,61,25, 25,36,150,150,43,62,73,5,7,25,25,210,131,117,117,71, 71,0,0,2,0,58,0,0,2,70,2,88,0,37,0,41, 0,0,19,6,7,6,7,6,7,21,35,53,55,54,55,54, 55,54,55,39,51,19,54,55,54,55,54,55,53,51,21,7, 6,7,6,7,6,7,23,35,37,51,21,35,252,25,7,48, 10,8,1,87,3,10,60,4,5,20,38,148,102,228,25,7, 47,10,9,1,87,3,11,58,5,5,20,38,148,102,254,248, 71,71,1,69,17,11,62,32,25,37,141,141,45,65,78,5, 6,25,25,210,254,187,17,11,61,25,25,36,150,150,43,62, 73,5,7,25,25,210,195,71,0,2,0,58,0,0,2,54, 2,88,0,27,0,31,0,0,37,17,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,17, 51,21,33,53,19,51,21,35,1,149,13,16,6,7,34,106, 8,18,139,145,94,49,12,12,40,24,41,13,2,2,74,254, 4,160,71,71,76,1,39,54,23,8,9,39,16,1,3,76, 11,20,5,6,17,32,52,61,8,10,254,210,76,76,1,9, 71,0,0,2,0,30,0,0,1,177,2,88,0,26,0,30, 0,0,37,7,35,55,51,39,38,39,38,39,38,39,38,39, 38,39,38,35,53,50,23,22,23,22,23,19,35,3,51,21, 35,1,66,175,117,207,81,22,6,19,6,11,13,16,1,4, 62,32,15,19,82,87,70,34,14,4,50,88,191,71,71,172, 172,203,167,46,27,9,13,15,8,1,2,28,4,1,76,42, 31,82,32,34,254,133,1,85,71,0,0,2,0,38,0,0, 2,31,2,88,0,7,0,11,0,0,1,17,35,17,33,53, 33,21,5,51,21,35,1,204,87,254,177,1,249,254,199,71, 71,2,12,253,244,2,12,76,76,183,71,0,0,3,0,63, 0,0,2,58,2,88,0,26,0,30,0,34,0,0,1,17, 35,17,38,39,38,39,38,47,1,38,39,34,39,35,53,33, 22,23,22,23,22,23,22,23,22,1,17,51,17,19,51,21, 35,2,58,87,11,14,5,6,10,12,6,38,57,2,10,249, 1,1,83,50,6,6,35,22,33,13,1,254,6,87,128,71, 71,1,122,254,134,1,116,55,24,8,8,14,7,4,21,9, 2,76,11,25,4,3,19,31,50,66,6,254,127,1,119,254, 137,1,85,71,0,2,0,18,0,0,0,199,2,88,0,3, 0,7,0,0,51,17,51,17,3,51,21,35,112,87,181,71, 71,2,88,253,168,1,85,71,0,2,0,14,0,0,1,40, 2,88,0,7,0,11,0,0,19,17,35,17,35,53,33,21, 5,51,21,35,213,87,87,1,1,254,230,71,71,2,12,253, 244,2,12,76,76,183,71,0,0,2,0,61,0,0,2,58, 2,88,0,68,0,72,0,0,1,34,7,53,54,51,50,23, 22,23,22,23,22,23,21,6,7,6,7,6,7,6,35,34, 39,38,39,38,39,38,39,17,51,17,22,23,22,23,22,23, 20,23,22,23,22,51,54,55,54,55,54,55,52,55,54,55, 52,55,53,38,39,38,39,38,47,1,38,39,38,7,51,21, 35,1,58,32,45,42,38,72,76,36,20,34,12,2,1,12, 27,5,5,21,35,77,72,73,77,33,23,36,11,1,1,87, 11,17,4,4,11,11,6,50,28,11,15,43,35,8,17,16, 9,3,24,10,2,11,17,4,4,11,11,6,51,23,13,50, 71,71,2,12,20,82,14,43,20,30,49,65,7,8,156,71, 44,7,7,33,17,43,43,17,33,52,64,6,7,1,122,254, 140,56,28,5,6,15,6,1,3,27,3,2,1,17,5,9, 10,10,1,4,34,49,4,8,144,56,28,5,6,15,6,4, 27,3,2,183,71,0,0,2,0,12,1,30,0,215,2,88, 0,3,0,7,0,0,19,51,17,7,39,51,21,35,128,87, 87,116,71,71,2,88,254,233,35,119,71,0,0,2,0,38, 255,56,1,218,2,88,0,26,0,30,0,0,1,17,35,17, 38,39,38,39,38,47,1,38,39,34,39,35,53,51,22,23, 22,23,22,23,22,23,22,7,51,21,35,1,218,87,11,14, 5,6,10,12,6,38,57,2,10,178,186,83,50,6,6,35, 22,33,13,1,251,71,71,1,122,253,190,2,60,55,24,8, 8,14,7,4,21,9,2,76,11,25,4,3,19,31,50,66, 6,44,71,0,0,2,0,57,0,0,2,4,2,88,0,44, 0,48,0,0,51,35,53,51,54,55,54,55,54,55,54,55, 54,63,1,53,38,39,38,39,38,39,38,39,35,53,51,22, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,3,51,21,35,227,170,164,78,30,11,12,21,11,1,2, 26,12,4,13,16,6,7,34,106,8,18,164,170,95,55,8, 9,40,24,41,13,2,2,13,34,5,6,53,172,3,8,71, 71,76,11,12,4,6,10,12,2,2,32,46,16,142,54,23, 8,9,39,16,1,3,76,11,24,3,4,17,32,52,61,8, 10,156,69,47,7,8,69,21,1,1,85,71,0,2,0,37, 0,0,2,33,2,237,0,3,0,31,0,0,19,51,21,35, 23,6,29,1,35,52,55,54,55,54,55,54,55,54,55,53, 33,53,51,21,33,21,20,15,1,6,7,6,226,71,71,178, 27,87,5,7,24,23,46,28,8,26,1,254,91,87,1,165, 31,5,22,46,29,1,155,71,132,42,97,69,120,30,49,43, 36,37,22,17,41,86,43,225,149,153,60,57,10,36,36,23, 0,2,0,48,0,0,2,58,2,88,0,24,0,28,0,0, 19,3,35,19,35,53,51,50,23,22,23,22,21,17,33,53, 51,17,52,39,38,47,1,38,35,23,51,21,35,214,58,88, 58,78,231,77,53,85,45,31,254,214,211,18,28,31,35,36, 56,17,71,71,2,12,253,244,2,12,76,23,33,65,45,59, 254,137,76,1,43,38,26,37,17,16,15,183,71,0,0,2, 0,51,0,0,1,70,2,88,0,20,0,24,0,0,41,1, 53,51,17,38,39,38,39,38,47,1,38,39,38,35,53,50, 23,22,23,7,51,21,35,1,70,254,237,188,11,14,5,6, 10,12,6,52,29,10,13,73,77,85,20,236,71,71,76,1, 40,55,24,8,8,14,7,4,28,3,1,76,43,46,133,37, 71,0,0,3,0,61,0,0,2,57,2,88,0,28,0,66, 0,70,0,0,33,34,39,38,39,38,39,52,39,17,33,50, 23,22,23,22,23,22,23,22,23,21,6,7,6,7,6,7, 6,39,54,55,54,55,54,55,52,55,54,55,52,55,53,38, 39,38,39,38,47,1,38,39,34,39,35,17,22,23,22,23, 22,23,20,23,22,23,22,3,51,21,35,1,59,73,77,33, 23,40,7,1,1,1,64,66,7,9,36,20,34,12,2,1, 12,27,5,5,21,35,77,72,43,35,8,17,16,9,3,24, 10,2,11,17,4,4,11,11,6,38,57,2,10,163,11,15, 4,5,11,11,6,50,28,11,24,71,71,43,17,33,58,57, 7,7,1,122,34,4,5,20,30,49,65,7,8,156,71,44, 7,7,33,17,43,76,1,17,5,9,10,10,1,4,34,49, 4,8,144,56,28,5,6,15,6,4,21,9,2,254,216,56, 25,7,7,15,6,1,3,27,3,2,1,9,71,0,0,2, 0,57,255,56,2,11,2,88,0,41,0,45,0,0,19,51, 50,23,22,23,22,23,22,23,22,23,17,35,17,38,39,38, 39,38,47,1,38,39,34,39,35,21,22,23,22,23,51,21, 47,1,38,39,38,39,38,39,37,51,21,35,57,215,64,63, 8,11,35,22,33,13,1,1,87,11,14,5,6,10,12,6, 38,57,2,10,121,8,20,14,66,34,40,71,36,31,43,6, 1,1,0,255,71,71,2,88,33,4,6,19,31,50,66,6, 7,253,190,2,60,55,24,8,8,14,7,4,21,9,2,127, 52,12,8,6,76,1,7,7,23,36,55,7,11,20,71,0, 0,2,0,63,0,0,2,21,2,88,0,57,0,61,0,0, 51,35,53,51,50,55,54,55,54,55,54,55,53,38,39,38, 39,38,39,34,43,1,21,22,23,22,23,51,21,47,1,38, 39,38,39,52,39,53,51,50,23,22,23,22,23,22,23,22, 31,1,21,20,7,6,7,6,7,6,19,51,21,35,244,181, 175,56,55,7,13,44,23,9,1,2,44,14,17,59,53,9, 10,88,8,20,14,66,34,40,71,37,30,43,7,1,181,76, 66,11,14,30,29,3,2,47,10,1,36,11,11,29,35,97, 12,71,71,76,24,3,6,19,60,22,19,142,57,42,13,8, 30,3,127,52,12,8,6,76,1,7,7,23,36,58,6,9, 210,30,5,7,15,29,3,2,53,63,15,156,38,61,19,13, 33,16,42,1,155,71,0,2,0,51,0,0,2,21,2,88, 0,28,0,32,0,0,1,54,55,54,55,54,55,54,55,54, 55,48,55,53,51,21,6,15,1,6,7,6,7,19,33,53, 33,1,51,3,51,21,35,1,60,46,10,2,2,11,11,2, 2,23,11,1,87,10,33,6,24,34,30,25,171,254,38,1, 70,254,178,100,19,71,71,1,85,5,4,1,1,6,13,4, 2,29,42,5,147,154,55,48,8,34,16,13,3,254,243,76, 2,12,254,189,71,0,0,3,0,62,255,56,2,38,2,88, 0,18,0,22,0,26,0,0,37,35,53,51,54,55,54,63, 1,17,33,53,33,17,6,7,6,7,6,1,17,35,17,23, 51,21,35,1,44,62,55,104,31,23,9,3,254,111,1,232, 12,24,5,7,48,254,207,87,208,71,71,33,76,14,42,33, 50,13,1,7,76,254,167,71,40,8,10,73,1,117,253,142, 2,114,85,71,0,2,0,37,0,0,1,239,2,88,0,26, 0,30,0,0,1,17,35,17,38,39,38,39,38,47,1,38, 39,34,39,35,53,51,22,23,22,23,22,23,22,23,22,5, 51,21,35,1,239,87,11,14,5,6,10,12,6,38,57,2, 10,200,207,84,50,6,6,35,22,33,13,1,254,246,71,71, 1,122,254,134,1,116,55,24,8,8,14,7,4,21,9,2, 76,11,26,3,3,19,31,50,66,6,44,71,0,2,0,59, 0,0,2,209,2,88,0,60,0,64,0,0,55,22,23,22, 23,22,23,59,1,55,54,55,54,55,54,55,52,53,17,51, 17,7,6,7,6,7,6,7,35,38,39,38,39,38,39,38, 53,52,53,17,51,17,51,54,55,54,55,54,55,54,61,1, 51,21,7,6,7,6,35,34,35,55,51,21,35,151,13,61, 17,16,36,47,8,82,34,38,18,54,33,23,2,87,3,17, 91,22,21,64,71,82,71,63,67,45,4,4,35,87,99,39, 17,6,10,24,3,1,87,3,10,40,50,79,2,2,195,71, 71,224,53,50,13,9,20,3,4,9,10,27,52,38,40,3, 3,1,82,254,174,39,92,71,16,11,31,2,2,31,35,63, 5,6,57,57,3,3,1,82,254,212,2,12,4,8,24,28, 6,9,207,207,36,49,34,50,19,71,0,2,0,35,0,0, 2,123,2,88,0,45,0,49,0,0,1,17,20,7,6,7, 6,15,1,6,43,1,53,51,50,55,54,55,54,55,54,61, 1,17,35,53,33,22,23,22,31,1,17,35,17,38,39,38, 39,38,39,38,39,38,47,1,7,51,21,35,1,16,9,6, 11,13,37,8,65,84,4,4,50,41,6,6,21,5,17,60, 1,3,155,48,33,12,3,87,11,15,4,6,11,12,2,3, 38,59,10,3,71,71,2,12,254,212,63,28,18,19,24,24, 5,43,76,25,3,4,14,8,24,44,29,1,41,76,21,72, 50,64,15,254,134,1,116,56,25,7,8,15,7,1,2,20, 9,2,183,71,0,2,0,62,0,0,0,149,2,219,0,3, 0,7,0,0,51,17,51,17,3,51,21,35,62,87,79,71, 71,2,88,253,168,2,219,71,0,2,0,58,0,0,2,54, 2,219,0,27,0,31,0,0,37,17,38,39,38,39,38,39, 38,39,35,53,51,22,23,22,23,22,23,22,23,22,23,17, 51,21,33,53,19,51,21,35,1,149,13,16,6,7,34,106, 8,18,139,145,94,49,12,12,40,24,41,13,2,2,74,254, 4,110,200,200,76,1,39,54,23,8,9,39,16,1,3,76, 11,20,5,6,17,32,52,61,8,10,254,210,76,76,2,143, 71,0,0,2,0,57,0,0,2,4,2,219,0,44,0,48, 0,0,51,35,53,51,54,55,54,55,54,55,54,55,54,63, 1,53,38,39,38,39,38,39,38,39,35,53,51,22,23,22, 23,22,23,22,23,22,23,21,6,7,6,7,6,7,6,3, 51,21,35,227,170,164,78,30,11,12,21,11,1,2,26,12, 4,13,16,6,7,34,106,8,18,164,170,95,55,8,9,40, 24,41,13,2,2,13,34,5,6,53,172,3,86,200,200,76, 11,12,4,6,10,12,2,2,32,46,16,142,54,23,8,9, 39,16,1,3,76,11,24,3,4,17,32,52,61,8,10,156, 69,47,7,8,69,21,1,2,219,71,0,2,0,63,0,0, 2,21,2,219,0,57,0,61,0,0,51,35,53,51,50,55, 54,55,54,55,54,55,53,38,39,38,39,38,39,34,43,1, 21,22,23,22,23,51,21,47,1,38,39,38,39,52,39,53, 51,50,23,22,23,22,23,22,23,22,31,1,21,20,7,6, 7,6,7,6,3,51,21,35,244,181,175,56,55,7,13,44, 23,9,1,2,44,14,17,59,53,9,10,88,8,20,14,66, 34,40,71,37,30,43,7,1,181,76,66,11,14,30,29,3, 2,47,10,1,36,11,11,29,35,97,136,200,200,76,24,3, 6,19,60,22,19,142,57,42,13,8,30,3,127,52,12,8, 6,76,1,7,7,23,36,58,6,9,210,30,5,7,15,29, 3,2,53,63,15,156,38,61,19,13,33,16,42,2,219,71, 0,1,0,72,0,0,2,70,2,237,0,22,0,0,19,53, 51,21,19,54,55,54,55,54,55,53,51,21,7,6,7,6, 7,6,7,23,35,72,87,229,25,7,47,10,9,1,87,3, 11,58,5,5,20,38,148,102,2,68,169,149,254,187,17,11, 61,25,25,36,150,150,43,62,73,5,7,25,25,210,0,3, 0,35,255,242,2,242,2,193,0,33,0,37,0,41,0,0, 37,53,52,55,54,55,54,55,54,53,52,39,38,39,38,35, 6,7,51,52,55,54,51,50,23,22,21,20,7,6,7,6, 29,1,23,35,21,51,7,9,2,1,160,21,10,19,55,6, 1,67,16,20,14,16,132,5,53,11,19,51,57,18,5,47, 37,11,17,56,56,56,21,254,152,1,104,1,103,233,30,27, 22,10,18,51,42,9,10,78,29,7,4,2,10,136,40,21, 36,43,13,15,41,41,34,14,22,32,35,59,65,123,1,104, 1,103,254,153,0,1,0,0,0,1,69,30,40,17,139,253, 95,15,60,245,2,19,3,232,0,0,0,0,187,169,178,179, 0,0,0,0,187,169,178,179,252,227,254,53,6,96,4,117, 0,0,0,8,0,0,0,1,0,0,0,0,0,1,0,0, 4,117,254,53,0,90,6,170,252,227,253,58,6,96,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,127, 1,176,0,33,0,0,0,0,1,77,0,0,1,22,0,0, 1,22,0,124,1,99,0,52,2,44,0,14,2,44,0,32, 3,121,0,29,2,155,0,52,0,191,0,48,1,77,0,73, 1,77,0,38,1,133,0,40,2,72,0,50,1,22,0,87, 1,77,0,46,1,22,0,87,1,22,255,248,2,44,0,43, 2,44,0,102,2,44,0,34,2,44,0,32,2,44,0,28, 2,44,0,35,2,44,0,43,2,44,0,46,2,44,0,37, 2,44,0,38,1,22,0,110,1,22,0,110,2,72,0,45, 2,72,0,50,2,72,0,50,2,44,0,77,3,247,0,34, 2,155,0,17,2,155,0,79,2,210,0,48,2,210,0,89, 2,155,0,90,2,99,0,90,3,10,0,44,2,210,0,83, 1,22,0,100,1,244,0,17,2,155,0,79,2,44,0,80, 3,65,0,75,2,210,0,76,3,10,0,38,2,155,0,91, 3,10,0,38,2,210,0,93,2,155,0,48,2,99,0,21, 2,210,0,85,2,155,0,30,3,176,0,22,2,155,0,22, 2,155,0,13,2,99,0,28,1,22,0,64,1,22,255,248, 1,22,0,23,1,213,0,44,2,44,255,234,1,77,0,22, 2,44,0,42,2,44,0,54,1,244,0,31,2,44,0,26, 2,44,0,40,1,22,0,18,2,44,0,29,2,44,0,70, 0,222,0,66,0,222,255,238,1,244,0,58,0,222,0,68, 3,65,0,70,2,44,0,70,2,44,0,36,2,44,0,54, 2,44,0,26,1,77,0,69,1,244,0,34,1,22,0,14, 2,44,0,65,1,244,0,10,2,210,0,6,1,244,0,17, 1,244,0,20,1,244,0,31,1,78,0,43,1,4,0,100, 1,78,0,29,2,72,0,75,1,22,0,0,1,77,0,121, 2,44,0,52,2,44,0,26,2,44,0,67,2,44,0,11, 1,4,0,100,2,44,0,43,1,77,0,30,2,225,255,243, 1,114,0,37,2,44,0,98,2,72,0,40,1,77,0,46, 2,225,255,243,1,77,0,28,2,94,0,151,2,72,0,50, 1,95,0,19,1,95,0,16,1,77,0,92,2,44,0,65, 2,25,0,48,1,22,0,87,1,77,0,39,1,95,0,61, 1,109,0,40,2,44,0,98,3,101,0,61,3,101,0,61, 3,101,0,16,2,99,0,95,2,155,0,17,2,155,0,17, 2,155,0,17,2,155,0,17,2,155,0,17,2,155,0,17, 3,232,0,11,2,210,0,48,2,155,0,90,2,155,0,90, 2,155,0,90,2,155,0,90,1,22,0,1,1,22,0,71, 1,22,255,255,1,22,0,9,2,210,0,20,2,210,0,76, 3,10,0,38,3,10,0,38,3,10,0,38,3,10,0,38, 3,10,0,38,2,72,0,95,3,10,0,30,2,210,0,85, 2,210,0,85,2,210,0,85,2,210,0,85,2,154,0,13, 2,154,0,91,2,99,0,67,2,44,0,42,2,44,0,42, 2,44,0,42,2,44,0,42,2,44,0,42,2,44,0,42, 3,121,0,34,1,244,0,31,2,44,0,40,2,44,0,40, 2,44,0,40,2,44,0,40,1,22,255,251,1,22,0,65, 1,22,255,249,1,22,0,3,2,44,0,36,2,44,0,70, 2,44,0,36,2,44,0,36,2,44,0,36,2,44,0,36, 2,44,0,36,2,72,0,50,2,99,0,18,2,44,0,65, 2,44,0,65,2,44,0,65,2,44,0,65,1,244,0,20, 2,43,0,54,1,244,0,20,2,155,0,17,2,44,0,42, 2,155,0,17,2,44,0,42,2,155,0,17,2,44,0,43, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,210,0,89,2,123,0,26,2,210,0,20,2,44,0,26, 2,155,0,90,2,44,0,40,2,155,0,90,2,44,0,40, 2,155,0,90,2,44,0,40,2,155,0,90,2,44,0,40, 2,155,0,90,2,44,0,40,3,10,0,44,2,44,0,29, 3,10,0,44,2,44,0,29,3,10,0,44,2,44,0,29, 3,10,0,44,2,44,0,29,2,210,0,83,2,44,255,224, 2,210,0,39,2,44,0,7,1,22,255,246,1,22,255,235, 1,22,0,20,0,222,255,240,1,22,255,253,1,22,255,241, 1,22,0,66,0,222,0,25,1,22,0,96,1,22,0,94, 2,188,0,100,1,118,0,66,1,244,0,17,0,222,255,224, 2,155,0,79,1,244,0,58,1,244,0,58,2,44,0,70, 0,222,0,63,2,44,0,80,0,222,0,63,2,44,0,80, 1,36,0,68,2,44,0,80,1,244,0,68,2,44,0,0, 0,222,0,0,2,210,0,76,2,44,0,70,2,210,0,76, 2,44,0,70,2,210,0,76,2,44,0,70,2,44,0,70, 2,210,0,76,2,44,0,70,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,3,10,0,38,2,44,0,36, 3,232,0,43,3,176,0,40,2,210,0,93,1,77,0,69, 2,210,0,93,1,77,0,65,2,210,0,93,1,77,0,48, 2,155,0,48,1,244,0,34,2,155,0,48,1,244,0,34, 2,155,0,47,1,244,0,34,2,155,0,48,1,244,0,34, 2,99,0,21,1,22,0,14,2,99,0,21,1,52,0,14, 2,99,0,21,1,22,0,14,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,2,210,0,85,2,44,0,65, 2,210,0,85,2,44,0,65,3,176,0,22,2,210,0,6, 2,155,0,13,1,244,0,20,2,155,0,13,2,99,0,28, 1,244,0,31,2,99,0,28,1,244,0,31,2,99,0,28, 1,244,0,31,1,22,0,18,2,44,0,26,2,155,0,79, 2,44,0,54,2,155,0,0,2,44,255,247,2,210,0,48, 2,210,0,48,1,244,0,31,2,210,0,20,2,155,0,78, 2,44,0,54,2,155,0,90,3,10,0,38,2,155,0,48, 2,99,0,2,2,44,0,11,3,10,0,44,1,244,0,58, 2,210,255,244,2,44,0,70,3,10,0,38,2,44,0,54, 2,155,0,48,1,244,0,34,2,99,0,28,1,22,0,14, 1,22,0,14,2,99,0,21,5,31,0,89,4,184,0,89, 4,32,0,26,4,32,0,80,3,10,0,80,1,188,0,68, 4,134,0,76,3,176,0,76,3,10,0,70,2,155,0,17, 2,44,0,42,1,22,0,3,1,22,255,249,3,10,0,38, 2,44,0,36,2,210,0,85,2,44,0,65,2,210,0,85, 2,44,0,65,2,210,0,85,2,44,0,65,2,210,0,85, 2,44,0,65,2,210,0,85,2,44,0,65,2,44,0,40, 2,155,0,17,2,44,0,42,2,155,0,17,2,44,0,42, 3,232,0,11,3,121,0,34,3,10,0,44,2,44,0,29, 2,155,0,79,1,244,255,212,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,0,222,255,223,5,53,0,89, 4,198,0,89,4,32,0,26,3,10,0,44,2,44,0,29, 2,210,0,76,2,44,0,70,2,155,0,17,2,44,0,42, 3,232,0,11,3,121,0,34,3,10,0,30,2,99,0,18, 2,155,254,250,2,44,254,188,2,155,255,110,2,44,255,48, 2,155,255,0,2,44,254,193,2,155,255,115,2,44,255,52, 1,22,254,60,1,22,254,49,1,22,254,176,1,22,254,164, 3,10,255,46,2,44,254,185,3,10,255,162,2,44,255,44, 2,210,254,174,1,77,254,108,2,210,255,34,1,77,254,224, 2,210,255,22,2,44,254,186,2,210,255,138,2,44,255,46, 2,155,0,48,1,244,0,34,2,99,0,21,1,22,0,14, 2,210,0,83,2,44,0,70,2,155,0,17,2,44,0,42, 2,155,0,90,2,44,0,40,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,3,10,0,38,2,44,0,36, 3,10,0,38,2,44,0,36,2,155,0,13,1,244,0,20, 2,44,0,42,2,44,0,26,2,44,0,68,2,44,0,54, 1,244,0,31,2,44,0,26,2,44,0,26,2,44,0,40, 2,44,0,40,1,244,0,34,1,244,0,34,2,44,0,29, 2,44,0,29,2,44,0,70,2,44,0,70,2,44,0,70, 0,222,255,248,0,222,0,66,1,22,0,94,0,222,0,68, 3,65,0,70,3,65,0,70,3,65,0,70,2,44,255,238, 2,44,0,70,2,44,0,36,1,77,0,69,1,77,0,69, 1,77,0,69,1,77,0,69,1,77,0,69,1,22,0,84, 1,22,0,84,1,244,255,202,1,22,0,0,1,22,0,0, 1,22,0,0,1,22,0,14,1,22,0,14,2,44,0,65, 1,244,0,10,2,210,0,6,1,244,0,20,1,244,0,31, 1,244,0,36,1,244,0,58,2,44,0,26,1,77,0,20, 1,77,0,19,1,77,0,92,1,77,0,22,1,77,0,15, 1,77,0,115,1,77,0,79,1,77,0,57,1,77,0,5, 1,77,255,221,0,0,254,201,0,0,255,15,0,0,254,199, 0,0,254,184,0,0,254,207,0,0,254,194,0,0,255,38, 0,0,254,209,0,0,255,2,0,0,254,144,0,0,254,198, 0,0,254,144,0,0,254,194,0,0,1,198,0,0,255,54, 0,0,1,198,0,0,255,28,0,0,254,218,0,0,254,236, 0,199,0,39,0,199,0,22,1,76,0,129,1,22,0,110, 1,158,0,174,2,235,0,75,2,218,0,8,1,22,0,89, 2,152,255,212,2,169,255,185,0,230,255,194,3,24,255,240, 2,198,255,158,2,246,255,250,1,30,255,223,2,172,0,8, 2,116,0,74,2,70,0,82,2,172,0,13,2,138,0,80, 2,116,0,35,2,171,0,65,2,238,0,45,0,236,0,69, 2,172,0,74,2,172,0,8,3,32,0,64,2,142,0,56, 2,118,0,65,2,238,0,50,2,209,0,80,2,126,0,78, 2,116,0,40,2,116,0,39,2,172,0,21,2,205,0,29, 2,211,0,36,2,233,0,52,2,208,0,42,0,236,255,239, 2,172,0,21,2,96,0,48,2,16,0,39,2,35,0,24, 1,51,0,56,2,3,0,40,2,84,0,48,2,4,0,50, 2,19,0,25,2,48,0,37,1,254,0,39,1,206,0,38, 2,14,0,24,2,14,0,45,1,30,0,56,2,4,0,66, 2,48,0,30,2,62,0,78,1,248,0,14,1,214,0,15, 2,38,0,34,2,149,0,53,2,54,0,57,2,23,0,22, 2,104,0,34,2,20,0,42,2,3,0,40,2,229,0,46, 2,60,0,14,2,150,0,42,2,228,0,36,1,30,255,223, 2,3,0,40,2,41,0,34,2,6,0,40,2,228,0,36, 2,155,0,90,2,155,0,79,2,254,0,28,2,99,0,90, 2,210,0,48,2,155,0,48,1,22,0,100,1,22,0,8, 1,244,0,17,4,56,0,83,3,246,0,83,2,254,0,28, 2,155,0,79,2,210,0,76,2,138,0,26,2,210,0,83, 2,155,0,17,2,155,0,79,2,155,0,79,2,99,0,79, 3,44,0,34,2,155,0,79,3,255,0,63,2,155,0,48, 2,216,0,79,2,216,0,79,2,155,0,79,2,161,0,33, 3,76,0,79,2,207,0,79,3,10,0,38,2,207,0,79, 2,155,0,79,2,210,0,48,2,99,0,21,2,138,0,26, 3,168,0,64,2,155,0,22,2,229,0,79,2,136,0,79, 3,60,0,79,3,82,0,79,3,129,0,81,3,104,0,79, 2,155,0,79,2,210,0,48,4,8,0,83,2,190,0,32, 2,44,0,42,2,44,0,36,2,10,0,70,1,174,0,70, 2,90,0,30,2,44,0,40,3,69,0,44,1,244,0,34, 2,55,0,70,2,55,0,70,1,254,0,70,2,45,0,70, 2,106,0,70,2,46,0,70,2,44,0,36,2,45,0,70, 2,64,0,70,1,244,0,31,1,240,0,60,1,244,0,20, 3,144,0,61,1,244,0,17,2,66,0,70,2,8,0,70, 2,180,0,70,2,200,0,70,2,222,0,57,2,178,0,70, 2,40,0,70,1,244,0,31,2,246,0,70,2,31,0,14, 2,44,0,40,2,44,0,40,2,56,0,18,1,174,0,70, 1,244,0,31,1,244,0,34,0,222,0,66,1,22,0,3, 0,222,255,238,3,72,0,70,3,82,0,70,2,56,0,18, 1,244,0,58,2,44,0,70,1,244,0,20,2,44,0,70, 2,155,0,79,2,40,0,70,2,155,0,91,2,44,0,54, 2,99,0,90,1,174,0,70,2,99,0,90,1,174,0,70, 2,99,0,90,1,174,0,70,3,255,0,63,3,69,0,14, 2,155,0,48,1,244,0,34,2,155,0,79,1,244,0,58, 2,155,0,79,1,244,0,58,2,155,0,79,1,244,0,58, 2,155,0,79,1,244,0,58,2,210,0,83,2,44,0,70, 4,36,0,83,2,252,0,70,2,210,0,83,2,44,0,70, 2,210,0,48,1,244,0,31,2,210,0,48,1,244,0,31, 2,99,0,21,1,240,0,60,2,155,0,13,1,244,0,10, 2,155,0,13,1,244,0,10,2,155,0,22,1,244,0,17, 3,6,0,83,2,96,0,70,2,130,0,83,1,252,0,69, 2,130,0,83,1,252,0,69,2,130,0,83,1,252,0,69, 3,10,0,38,2,44,0,40,2,176,0,39,2,44,0,40, 1,22,0,100,3,255,0,63,3,69,0,44,2,155,0,79, 1,244,0,58,2,210,0,83,2,44,0,70,2,130,0,83, 1,252,0,69,2,155,0,17,2,44,0,42,2,155,0,17, 2,44,0,42,3,232,0,11,3,121,0,34,2,155,0,79, 2,44,0,40,3,10,0,38,2,44,0,40,3,10,0,38, 2,44,0,40,3,255,0,63,3,69,0,44,2,155,0,48, 1,244,0,34,2,155,0,48,1,244,0,34,2,216,0,79, 2,55,0,70,2,216,0,79,2,55,0,70,3,10,0,38, 2,44,0,36,3,10,0,38,2,44,0,36,3,10,0,38, 2,44,0,36,2,210,0,48,1,244,0,31,2,138,0,26, 1,244,0,20,2,138,0,26,1,244,0,20,2,138,0,26, 1,244,0,20,2,136,0,79,2,8,0,70,3,104,0,79, 2,178,0,70,2,210,0,79,2,193,0,79,3,6,0,83, 2,242,0,82,2,210,0,79,2,239,0,30,1,229,0,84, 2,210,0,74,3,14,0,63,2,143,0,67,2,187,0,63, 1,161,0,93,3,85,0,66,3,23,0,34,2,199,0,74, 2,76,0,23,2,151,0,51,2,153,0,79,2,153,0,47, 2,244,0,45,2,111,0,49,3,5,0,9,2,91,0,40, 2,210,0,74,2,136,0,66,2,210,0,74,2,239,0,42, 2,238,0,74,2,210,0,79,2,236,0,74,2,155,0,45, 2,187,0,74,2,111,0,60,1,161,0,76,3,17,0,42, 2,126,0,36,3,10,0,48,2,204,0,39,0,222,0,53, 0,133,0,24,1,69,0,23,1,77,0,43,1,88,0,21, 3,65,0,65,2,44,0,74,2,60,0,35,2,69,0,73, 2,38,0,60,2,76,0,42,1,192,0,94,2,44,0,63, 2,56,0,68,2,70,0,48,2,33,0,66,1,45,0,60, 3,31,0,66,2,44,0,43,2,42,0,71,2,21,0,66, 2,36,0,40,2,40,0,39,2,40,0,43,2,32,0,73, 0,222,255,210,2,32,0,73,1,200,0,53,2,44,0,69, 1,134,0,35,3,65,0,65,1,253,0,38,2,35,0,80, 2,21,0,64,2,98,0,71,3,119,0,73,2,44,0,69, 2,33,0,32,1,96,0,76,3,85,0,43,2,76,0,25, 2,67,0,50,2,178,0,42,2,33,0,70,1,22,0,90, 1,111,0,12,0,70,0,0,1,79,0,0,1,73,0,0, 1,73,0,0,0,70,0,0,0,200,0,0,0,200,0,0, 0,188,0,0,0,188,0,0,0,70,0,0,1,73,0,0, 0,70,0,0,0,70,0,0,1,232,0,38,0,200,0,0, 0,212,0,62,0,0,2,127,0,0,0,70,1,22,0,110, 0,70,0,0,2,128,0,58,2,79,0,58,1,210,0,30, 2,86,0,38,2,110,0,63,0,212,0,62,1,95,0,39, 2,111,0,63,2,96,0,61,0,200,0,58,2,14,0,38, 2,38,0,57,2,88,0,37,2,111,0,63,2,109,0,48, 0,212,0,62,1,122,0,51,2,95,0,61,2,75,0,36, 2,63,0,57,2,56,0,63,2,28,0,13,2,78,0,51, 2,94,0,62,2,35,0,37,3,8,0,59,2,175,0,35, 2,88,0,56,0,201,0,52,0,201,0,50,0,201,0,51, 0,201,0,44,1,244,0,106,1,244,0,106,1,244,0,106, 1,114,0,84,1,114,0,87,2,62,0,26,2,62,0,26, 2,133,0,136,2,62,0,26,1,196,0,35,1,196,0,57, 2,62,255,184,2,133,255,184,2,133,255,184,1,253,0,107, 1,253,0,107,2,170,0,109,2,73,0,100,1,148,0,177, 2,115,255,184,2,206,255,184,2,206,255,184,1,228,255,184, 2,170,255,112,2,88,0,97,2,148,255,184,2,170,0,107, 2,26,0,107,2,206,255,184,2,206,0,167,2,206,255,184, 2,62,255,184,2,62,255,184,2,126,0,127,2,73,255,184, 1,253,0,107,2,170,255,184,2,170,0,99,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0, 0,1,0,167,0,1,0,0,0,6,255,21,0,6,255,112, 2,132,0,41,3,48,0,41,1,136,0,0,1,136,0,0, 1,203,0,0,2,149,0,0,2,129,0,0,1,167,0,0, 1,167,0,0,3,48,0,41,3,48,0,41,3,48,0,41, 1,137,0,0,2,110,0,0,1,168,0,0,1,216,0,0, 1,252,0,0,2,5,0,0,2,71,0,0,2,37,0,0, 1,247,0,0,2,26,0,0,1,188,0,0,1,224,0,0, 2,7,0,0,1,223,0,0,1,248,0,0,1,183,0,0, 2,30,0,43,1,171,0,0,2,8,0,43,1,159,0,0, 1,159,0,0,1,145,0,0,1,145,0,0,1,186,0,0, 2,8,0,43,1,207,0,0,1,195,0,0,1,63,0,0, 1,63,0,0,2,37,0,0,2,129,0,0,1,186,0,0, 2,77,0,0,1,142,0,0,1,250,0,0,1,174,0,0, 0,6,254,238,1,182,0,45,0,172,255,251,0,172,255,250, 0,172,255,63,0,6,254,125,0,6,255,41,0,6,255,30, 0,6,255,21,0,6,254,181,0,6,254,204,0,172,255,201, 0,172,255,96,0,172,255,112,0,6,255,104,3,130,0,40, 0,6,255,148,2,72,0,148,2,72,0,173,2,72,0,143, 2,72,0,133,2,72,0,47,2,72,0,113,2,72,0,99, 2,72,0,78,2,72,0,102,2,72,0,153,3,130,0,40, 1,44,0,20,1,144,0,20,1,44,0,19,2,128,255,236, 3,12,255,236,2,8,255,236,2,8,255,236,2,18,255,236, 2,38,255,236,2,108,0,20,1,164,0,20,1,224,0,20, 2,108,0,20,2,108,0,20,2,208,0,20,2,140,255,236, 1,244,0,20,1,234,0,20,1,210,255,236,2,28,0,18, 1,234,255,236,2,28,255,236,2,118,255,236,2,78,255,236, 2,168,0,24,1,254,255,236,1,234,255,236,2,8,255,236, 2,8,255,236,1,214,0,20,2,28,255,236,1,234,0,20, 1,214,255,236,1,234,0,20,1,196,255,236,2,48,0,19, 2,138,255,236,1,224,255,236,2,76,255,236,1,224,255,237, 1,214,255,236,1,224,255,236,1,216,255,236,2,0,0,20, 1,214,255,236,1,214,255,236,2,8,255,236,0,160,0,20, 0,180,255,236,0,180,255,236,0,180,254,12,1,64,0,20, 1,73,0,28,0,195,0,35,1,4,255,206,1,84,255,236, 1,84,255,236,2,228,255,236,2,228,255,236,1,144,0,120, 0,180,255,136,2,28,255,236,2,8,255,236,1,214,255,236, 2,100,0,20,1,164,0,20,0,234,0,100,1,104,0,100, 1,204,0,22,1,164,0,20,2,8,0,19,2,28,0,19, 1,144,0,21,1,144,0,24,2,48,0,24,1,134,0,20, 1,224,0,21,1,164,0,20,1,224,255,246,1,214,255,243, 1,144,0,20,1,214,255,236,1,144,0,20,1,144,0,20, 1,144,0,20,0,120,0,20,1,184,0,19,1,164,0,20, 1,164,0,20,2,232,0,0,3,146,0,0,2,178,0,0, 2,158,0,0,2,84,0,0,2,84,0,0,1,242,0,0, 2,232,0,0,2,84,0,0,2,232,0,0,2,38,0,0, 2,22,0,0,2,106,0,0,2,178,0,0,2,34,0,0, 2,6,0,0,2,80,0,0,1,236,0,0,2,62,0,0, 2,2,0,3,2,14,0,0,2,44,0,0,2,12,0,0, 2,16,0,0,2,62,0,0,1,228,0,0,2,22,0,0, 1,248,0,0,2,22,0,0,2,26,0,0,2,22,0,0, 1,250,0,0,2,50,0,0,2,4,0,0,2,34,0,0, 2,158,0,0,2,26,0,0,2,214,0,0,2,214,255,254, 2,2,0,0,2,34,0,0,2,34,0,0,2,5,0,0, 1,30,0,84,0,172,0,0,0,190,0,0,0,190,255,132, 0,1,254,97,0,1,254,98,0,1,254,126,0,1,254,120, 0,1,254,100,0,1,254,56,0,1,255,52,2,22,0,0, 2,106,255,254,1,236,0,0,1,228,0,0,1,250,0,0, 2,104,0,0,1,224,0,0,2,48,255,250,1,224,255,254, 1,212,0,0,1,236,255,248,2,2,255,252,2,26,0,0, 2,60,0,0,2,48,0,4,0,1,254,143,1,242,0,0, 2,84,0,0,3,132,0,0,0,33,254,193,0,33,255,72, 2,255,0,39,3,193,0,39,1,244,0,40,1,239,0,40, 2,16,0,40,2,190,0,40,3,117,0,30,1,245,0,39, 2,100,0,39,2,107,0,39,2,57,0,38,2,20,0,40, 1,102,0,39,2,108,0,40,2,94,0,40,2,90,0,39, 2,119,0,40,1,239,0,40,2,16,0,40,2,19,0,40, 1,255,0,39,2,102,0,39,1,38,0,39,1,88,0,39, 1,169,0,40,1,89,0,36,2,99,0,39,2,0,0,39, 2,66,0,40,1,172,0,38,1,167,0,40,0,231,0,40, 2,70,255,175,1,88,0,39,2,46,0,39,2,158,0,40, 2,25,0,39,2,80,0,39,2,56,0,39,2,88,0,39, 2,32,0,38,2,19,0,40,0,232,0,70,0,232,0,69, 0,232,255,78,0,33,254,80,0,33,254,79,0,33,254,189, 0,33,254,144,0,33,254,117,0,232,255,102,0,232,255,75, 3,135,0,30,1,223,0,39,1,160,0,40,1,209,0,38, 1,213,0,39,1,242,0,29,1,207,0,39,1,195,0,39, 1,254,0,39,1,199,0,40,1,232,0,39,0,131,255,156, 1,46,255,216,2,48,0,0,2,132,0,0,2,120,255,253, 2,118,255,253,2,41,255,253,2,92,255,237,2,8,255,255, 2,60,255,254,2,58,255,254,2,68,255,254,2,53,0,1, 2,68,255,254,2,52,255,255,2,63,255,253,2,53,255,253, 2,53,0,1,2,12,255,254,2,60,0,1,2,188,255,253, 2,143,255,248,2,108,0,1,2,140,0,1,2,48,255,251, 2,53,255,253,2,53,255,253,2,33,255,254,2,12,0,1, 0,128,0,20,0,1,254,38,0,190,255,221,0,1,254,223, 0,1,255,44,0,1,254,76,1,140,255,250,2,51,0,1, 1,252,0,18,1,168,0,25,1,184,0,24,2,88,255,244, 2,88,0,0,2,88,255,249,2,88,0,0,2,88,0,48, 1,255,0,56,1,227,0,47,1,223,0,83,3,125,0,16, 3,250,0,12,4,146,0,8,3,148,255,177,2,164,0,16, 3,68,0,12,4,201,0,6,2,232,0,14,2,232,0,14, 3,80,0,12,3,45,0,12,3,45,0,12,3,45,0,12, 2,176,0,16,2,232,0,14,2,164,0,16,3,80,0,12, 3,216,0,8,3,9,0,20,5,58,0,8,2,152,255,228, 2,49,255,233,4,5,0,8,2,95,0,18,2,185,0,14, 2,185,0,14,1,178,0,10,2,105,255,254,3,101,0,12, 3,91,0,10,2,185,0,8,3,101,0,16,4,121,0,10, 4,40,0,12,5,36,0,16,1,168,0,10,0,125,254,143, 2,84,254,180,2,27,0,8,2,84,0,12,2,138,0,10, 3,205,0,18,5,6,0,12,5,6,0,10,6,170,0,12, 1,77,0,118,3,91,0,10,3,10,0,16,3,113,0,14, 3,108,0,16,2,136,0,14,2,232,0,16,1,86,0,22, 2,108,0,22,2,79,0,17,2,88,0,17,3,8,0,22, 4,114,0,14,5,184,0,14,2,62,0,17,2,58,0,17, 2,68,0,17,2,77,255,251,2,85,255,251,2,113,255,251, 1,0,0,7,2,53,0,14,1,70,0,14,2,92,0,5, 2,139,255,252,1,152,255,251,2,99,0,10,3,75,0,17, 2,98,0,26,1,2,0,5,1,61,0,10,1,72,0,10, 3,35,0,14,1,61,0,21,1,72,0,10,1,96,0,10, 1,96,0,10,1,61,0,10,0,248,0,24,2,109,0,10, 2,108,0,12,2,108,0,12,2,137,0,64,2,38,0,79, 2,61,0,64,2,55,0,79,2,50,0,12,2,45,0,64, 2,50,0,64,2,55,0,96,2,45,0,64,2,45,0,80, 1,212,0,60,1,62,0,7,2,148,0,31,3,10,0,36, 3,39,0,30,3,62,0,19,3,70,0,37,3,92,0,32, 3,232,0,0,3,205,0,35,3,92,0,28,3,229,0,63, 2,228,0,30,3,70,0,35,3,118,0,32,3,118,0,32, 5,15,0,25,5,15,0,38,3,70,0,43,3,92,0,28, 3,92,0,30,3,92,0,19,5,123,0,15,3,205,0,33, 3,70,0,37,2,148,0,28,3,92,0,32,3,205,0,31, 2,148,0,26,3,118,0,32,3,70,0,37,3,92,0,32, 3,205,0,28,3,70,0,29,3,92,0,31,3,118,0,44, 3,39,0,26,3,62,0,31,3,70,0,42,3,205,0,31, 3,118,0,53,3,118,0,47,3,205,0,29,3,62,0,26, 3,205,0,40,0,0,253,31,1,176,0,3,1,124,0,1, 1,164,0,15,0,0,252,237,0,0,253,16,0,0,252,237, 0,0,252,227,1,245,0,13,2,140,0,33,2,136,0,42, 2,84,255,159,2,84,0,48,2,84,255,29,2,84,0,48, 2,84,255,29,2,84,0,48,2,84,255,164,2,84,0,48, 2,172,255,27,2,172,0,8,2,172,254,33,2,172,255,217, 2,172,254,63,2,172,0,8,2,172,254,211,2,172,255,166, 1,254,255,140,1,254,0,39,1,254,255,11,1,254,0,39, 1,254,255,11,1,254,0,39,2,138,254,118,2,138,0,80, 2,138,253,115,2,138,255,67,2,138,253,115,2,138,255,67, 2,14,255,169,2,14,0,24,2,14,255,27,2,14,0,24, 2,14,255,21,2,14,0,24,2,14,255,156,2,14,0,24, 2,171,254,103,2,171,0,65,2,171,253,100,2,171,255,52, 2,171,253,100,2,171,255,52,2,171,253,248,2,171,254,203, 1,30,254,239,1,30,0,56,1,30,254,109,1,30,0,56, 1,30,254,109,1,30,0,56,1,30,254,244,1,30,255,199, 0,236,254,107,0,236,0,69,0,236,253,104,0,236,255,56, 0,236,253,104,0,236,255,56,0,236,253,252,0,236,254,207, 2,38,255,159,2,38,0,34,2,38,255,29,2,38,0,34, 2,38,255,29,2,38,0,34,2,238,254,157,2,238,0,50, 2,238,253,175,2,238,255,115,2,238,253,235,2,238,255,166, 2,3,255,142,2,3,0,40,2,3,255,12,2,3,0,40, 2,3,255,12,2,3,0,40,2,3,255,147,2,3,0,40, 2,172,0,21,2,172,255,1,2,172,255,1,2,172,254,152, 2,228,255,253,2,228,0,36,2,228,255,123,2,228,0,36, 2,228,255,123,2,228,0,36,2,228,0,1,2,228,0,36, 2,208,254,158,2,208,0,42,2,208,253,161,2,208,255,113, 2,208,253,248,2,208,255,170,2,208,254,68,2,208,255,29, 2,84,0,48,2,84,0,48,1,254,0,39,1,254,0,39, 2,14,0,24,2,14,0,24,1,30,255,252,1,30,255,252, 2,38,0,34,2,38,0,34,2,3,0,40,2,3,0,40, 2,228,0,36,2,228,0,36,2,84,255,159,2,84,0,48, 2,84,255,29,2,84,0,48,2,84,255,29,2,84,0,48, 2,84,255,164,2,84,0,48,3,114,255,27,3,114,0,8, 3,114,254,33,3,114,255,217,3,114,254,63,3,114,0,8, 3,114,254,211,3,114,255,166,2,14,255,169,2,14,0,24, 2,14,255,27,2,14,0,24,2,14,255,21,2,14,0,24, 2,14,255,156,2,14,0,24,3,89,254,103,3,89,0,65, 3,89,253,100,3,89,255,52,3,89,253,100,3,89,255,52, 3,89,253,248,3,89,254,203,2,228,255,253,2,228,0,36, 2,228,255,123,2,228,0,36,2,228,255,123,2,228,0,36, 2,228,0,1,2,228,0,36,3,177,254,158,3,177,0,42, 3,177,253,161,3,177,255,113,3,177,253,248,3,177,255,170, 3,177,254,68,3,177,255,29,2,84,0,48,2,84,0,48, 2,84,0,48,2,84,0,48,2,84,0,48,2,84,0,48, 2,84,0,48,2,172,0,8,2,172,0,8,2,172,0,8, 2,172,0,8,3,114,0,8,1,22,255,204,0,201,0,23, 1,77,255,54,1,22,255,99,1,77,0,6,2,14,0,24, 2,14,0,24,2,24,0,24,2,14,0,24,2,14,0,24, 2,138,255,67,2,138,255,67,2,171,255,52,2,171,255,52, 3,89,0,65,2,70,255,54,2,70,255,54,1,77,255,54, 1,30,255,206,1,30,255,219,1,30,255,223,1,30,255,214, 1,30,255,199,1,56,255,213,0,236,255,222,0,236,255,235, 0,236,255,56,0,236,255,56,2,70,1,6,2,70,1,6, 1,77,0,9,2,3,0,40,2,3,0,40,2,3,0,40, 2,3,0,40,2,54,255,180,2,54,0,57,2,3,0,40, 2,3,0,40,2,172,0,21,2,172,0,21,2,172,255,1, 2,172,255,1,2,126,0,78,1,77,0,30,1,137,0,30, 1,77,0,22,2,228,0,36,2,228,0,36,2,228,0,36, 2,228,0,36,2,228,0,36,2,238,255,121,2,238,255,184, 2,208,255,119,2,208,255,158,3,171,0,42,1,77,0,92, 1,77,1,198,1,77,0,46,2,44,255,251,3,232,255,247, 0,222,0,65,0,221,0,64,0,222,0,64,0,221,0,64, 1,77,0,48,1,77,0,49,1,77,0,47,1,77,0,49, 2,44,0,38,2,44,0,38,1,94,0,50,1,94,0,70, 3,232,0,115,3,232,0,9,5,80,0,9,1,22,0,49, 1,213,0,49,2,168,0,49,1,22,0,49,1,213,0,49, 2,168,0,49,1,77,0,91,1,77,0,85,2,110,0,98, 2,44,0,124,2,44,0,77,0,167,255,82,4,88,0,77, 3,66,0,77,3,66,0,124,2,25,0,48,1,95,0,27, 1,95,0,160,1,95,0,20,1,95,0,17,1,95,0,16, 1,95,0,22,1,95,0,23,1,95,0,23,1,95,0,27, 1,95,0,61,1,95,0,19,1,95,0,16,1,95,0,20, 1,97,0,17,1,95,0,16,1,95,0,22,1,95,0,23, 1,95,0,23,5,165,0,91,4,198,0,93,3,101,0,60, 2,44,0,2,3,201,0,33,2,103,0,17,3,41,0,58, 2,7,0,16,3,106,0,12,3,240,0,76,3,82,255,254, 2,132,0,16,3,232,0,63,2,208,0,42,2,208,0,42, 2,0,0,16,2,155,0,79,2,155,0,17,3,140,0,34, 2,111,0,16,2,50,0,45,2,99,255,187,2,99,0,90, 4,56,0,29,3,101,0,61,3,101,0,20,3,101,0,61, 3,101,0,19,3,101,0,16,3,101,0,20,3,101,0,61, 3,101,0,17,3,101,0,61,3,101,0,16,3,101,0,17, 3,101,0,22,3,101,0,61,1,22,0,100,2,44,0,100, 3,66,0,100,3,177,0,100,2,155,0,30,3,177,0,30, 4,199,0,30,5,221,0,30,3,177,0,100,2,155,0,22, 3,177,0,22,4,199,0,22,2,44,0,80,2,210,0,48, 2,210,0,89,3,65,0,75,0,222,0,66,1,188,0,66, 2,154,0,66,2,210,0,66,1,244,0,10,2,210,0,10, 3,176,0,10,4,142,0,10,2,210,0,66,1,244,0,17, 2,210,0,17,3,176,0,17,0,222,0,68,1,244,0,31, 2,44,0,26,3,65,0,70,3,219,0,32,2,91,0,45, 3,219,0,49,2,91,0,45,4,18,0,24,4,18,1,5, 2,146,0,15,3,219,0,30,2,91,0,39,3,219,0,45, 2,91,0,44,4,18,0,27,2,155,0,17,2,44,0,36, 2,155,0,90,2,44,0,43,2,199,0,10,2,199,0,10, 2,201,0,45,2,201,0,44,3,55,0,105,3,55,0,105, 3,36,0,41,2,72,0,40,2,72,0,50,1,244,0,64, 2,30,0,7,2,201,0,26,2,201,0,25,3,0,0,26, 2,91,0,23,2,91,0,30,3,0,0,40,3,0,0,40, 2,44,0,100,3,28,0,100,3,188,0,100,2,44,0,100, 3,95,0,163,2,37,0,17,2,72,0,75,2,72,0,17, 2,72,0,95,2,72,0,50,2,124,0,53,2,36,0,32, 2,72,0,45,2,72,0,45,3,0,0,43,3,0,0,43, 3,0,0,43,2,146,0,15,3,55,0,39,1,233,0,16, 2,43,0,55,3,232,0,102,3,232,0,80,3,232,0,152, 3,232,1,8,3,232,0,99,3,232,1,207,3,232,0,77, 3,232,2,88,3,232,0,25,3,232,1,183,3,232,0,190, 3,232,2,188,3,232,0,50,3,232,2,188,3,232,0,50, 3,232,1,170,3,232,0,197,3,232,0,177,3,232,0,132, 3,232,0,206,3,232,0,165,3,232,0,243,3,232,0,205, 3,232,0,134,3,232,0,80,3,232,0,136,3,232,0,85, 3,232,0,119,3,232,0,89,3,232,0,150,3,232,0,122, 3,232,0,243,3,232,0,225,3,232,0,117,3,232,0,89, 3,232,0,156,3,232,0,131,3,232,0,140,3,232,0,114, 3,232,1,8,3,232,0,247,3,232,0,128,3,232,0,98, 3,232,0,95,3,232,0,63,3,232,0,82,3,232,0,49, 3,232,0,40,3,232,0,4,3,232,0,126,3,232,0,96, 3,232,0,184,3,232,0,135,3,232,0,106,3,232,0,127, 3,232,0,97,3,232,0,185,3,232,0,162,3,232,0,58, 3,232,0,135,3,232,0,97,3,232,0,77,3,232,0,85, 3,232,0,123,3,232,0,95,3,232,0,95,3,232,0,114, 3,232,0,85,3,232,0,85,3,232,0,64,3,232,0,29, 3,232,0,29,3,232,0,76,3,232,0,43,3,232,0,43, 3,232,0,123,3,232,0,95,3,232,0,95,3,232,0,88, 3,232,0,109,3,232,0,78,3,232,0,96,3,232,0,137, 3,232,0,101,3,232,0,41,3,232,0,146,3,232,0,96, 3,232,0,138,3,232,0,86,3,232,0,122,3,232,1,9, 3,232,0,163,3,232,0,77,3,232,0,163,3,232,0,130, 3,232,0,77,3,232,0,56,3,232,0,107,3,232,0,148, 3,232,0,76,3,232,2,255,3,232,2,255,3,232,0,207, 3,232,0,162,3,232,0,168,3,232,0,118,3,232,0,169, 3,232,0,122,3,232,0,140,3,232,0,83,3,232,0,132, 3,232,0,77,3,232,0,136,3,232,0,109,3,232,0,164, 3,232,0,137,3,232,0,107,3,232,0,77,3,232,0,105, 3,232,0,75,3,232,0,187,3,232,0,162,3,232,0,153, 3,232,0,125,3,232,0,138,3,232,0,109,3,232,0,82, 3,232,0,49,3,232,0,95,3,232,0,63,3,232,0,137, 3,232,0,110,3,232,0,115,3,232,0,86,3,232,0,113, 3,232,0,82,3,232,0,158,3,232,0,108,3,232,0,78, 3,232,0,90,3,232,0,57,3,232,1,121,3,232,1,114, 3,232,0,118,3,232,0,99,3,232,0,108,3,232,0,50, 3,232,0,184,3,232,0,78,3,232,0,46,3,232,0,46, 3,232,0,135,3,232,0,109,3,232,0,109,3,232,0,127, 3,232,0,97,3,232,0,97,3,232,0,106,3,232,0,76, 3,232,0,76,3,232,0,73,3,232,0,40,3,232,0,40, 3,232,0,139,3,232,0,219,3,232,0,135,3,232,0,174, 3,232,0,90,3,232,0,153,3,232,0,100,3,232,0,168, 3,232,0,116,3,232,0,232,3,232,0,190,3,232,0,183, 3,232,1,19,3,232,0,81,3,232,0,178,3,232,0,190, 3,232,0,183,3,232,0,139,3,232,0,93,3,232,0,111, 3,232,0,208,3,232,0,185,3,232,0,95,3,232,0,182, 3,232,0,155,3,232,0,139,3,232,0,93,3,232,0,111, 3,232,0,208,1,22,0,87,3,232,255,247,3,232,0,184, 3,232,0,184,2,44,0,43,2,44,0,34,2,44,0,32, 2,44,0,28,2,44,0,35,2,44,0,43,2,44,0,46, 2,44,0,37,2,44,0,38,0,222,255,238,1,77,0,116, 2,44,0,102,2,44,0,18,1,244,0,12,1,244,0,17, 3,10,0,18,3,10,0,18,2,44,0,18,3,10,0,34, 0,200,0,58,1,49,0,0,1,144,0,58,2,75,0,37, 3,122,0,58,3,80,0,38,3,104,0,63,3,32,0,57, 3,82,0,37,3,105,0,63,3,29,0,37,3,169,0,35, 2,72,0,50,3,8,0,59,3,8,0,59,3,8,0,59, 3,8,0,59,2,128,0,58,2,128,0,58,2,128,0,58, 2,79,0,58,1,210,0,30,2,86,0,38,2,110,0,63, 1,6,0,18,1,95,0,14,2,96,0,61,1,14,0,12, 2,14,0,38,2,38,0,57,2,88,0,37,2,109,0,48, 1,122,0,51,2,95,0,61,2,63,0,57,2,56,0,63, 2,78,0,51,2,94,0,62,2,35,0,37,3,8,0,59, 2,175,0,35,0,212,0,62,2,79,0,58,2,38,0,57, 2,56,0,63,2,128,0,72,3,20,0,35,0,0,0,0, 0,0,0,86,0,0,0,86,0,0,0,86,0,0,0,86, 0,0,0,130,0,0,0,178,0,0,1,18,0,0,1,220, 0,0,2,176,0,0,3,126,0,0,3,156,0,0,3,220, 0,0,4,26,0,0,4,86,0,0,4,128,0,0,4,170, 0,0,4,196,0,0,4,220,0,0,4,246,0,0,5,82, 0,0,5,130,0,0,5,246,0,0,6,136,0,0,6,190, 0,0,7,48,0,0,7,188,0,0,7,242,0,0,8,164, 0,0,9,54,0,0,9,90,0,0,9,146,0,0,9,182, 0,0,9,222,0,0,10,4,0,0,10,128,0,0,11,128, 0,0,11,182,0,0,12,48,0,0,12,150,0,0,12,224, 0,0,13,14,0,0,13,56,0,0,13,182,0,0,13,230, 0,0,14,0,0,0,14,70,0,0,14,124,0,0,14,156, 0,0,14,208,0,0,15,0,0,0,15,110,0,0,15,192, 0,0,16,52,0,0,16,178,0,0,17,84,0,0,17,120, 0,0,17,192,0,0,17,228,0,0,18,28,0,0,18,86, 0,0,18,130,0,0,18,176,0,0,18,210,0,0,18,238, 0,0,19,16,0,0,19,52,0,0,19,78,0,0,19,104, 0,0,20,32,0,0,20,134,0,0,20,236,0,0,21,96, 0,0,21,212,0,0,22,24,0,0,22,190,0,0,23,12, 0,0,23,50,0,0,23,116,0,0,23,166,0,0,23,192, 0,0,24,62,0,0,24,138,0,0,24,238,0,0,25,90, 0,0,25,190,0,0,25,252,0,0,26,140,0,0,26,212, 0,0,27,32,0,0,27,68,0,0,27,124,0,0,27,176, 0,0,27,248,0,0,28,38,0,0,28,158,0,0,28,184, 0,0,29,38,0,0,29,126,0,0,29,142,0,0,29,186, 0,0,30,52,0,0,30,234,0,0,31,116,0,0,31,188, 0,0,31,224,0,0,32,200,0,0,32,236,0,0,33,194, 0,0,34,102,0,0,34,154,0,0,34,186,0,0,34,212, 0,0,35,174,0,0,35,200,0,0,36,44,0,0,36,98, 0,0,36,206,0,0,37,82,0,0,37,108,0,0,37,200, 0,0,38,12,0,0,38,36,0,0,38,130,0,0,38,174, 0,0,39,34,0,0,39,88,0,0,39,186,0,0,40,88, 0,0,41,18,0,0,41,138,0,0,41,206,0,0,42,16, 0,0,42,90,0,0,42,202,0,0,43,22,0,0,43,166, 0,0,43,240,0,0,44,180,0,0,44,242,0,0,45,46, 0,0,45,114,0,0,45,184,0,0,45,224,0,0,46,6, 0,0,46,52,0,0,46,100,0,0,46,196,0,0,47,46, 0,0,47,170,0,0,48,36,0,0,48,166,0,0,49,78, 0,0,49,210,0,0,50,6,0,0,50,134,0,0,50,220, 0,0,51,50,0,0,51,144,0,0,51,240,0,0,52,42, 0,0,52,122,0,0,53,8,0,0,53,206,0,0,54,146, 0,0,55,94,0,0,56,80,0,0,57,30,0,0,58,48, 0,0,59,42,0,0,59,228,0,0,60,102,0,0,60,232, 0,0,61,114,0,0,61,254,0,0,62,38,0,0,62,76, 0,0,62,122,0,0,62,170,0,0,63,66,0,0,63,202, 0,0,64,60,0,0,64,174,0,0,65,40,0,0,65,200, 0,0,66,66,0,0,66,116,0,0,66,244,0,0,67,76, 0,0,67,164,0,0,68,4,0,0,68,102,0,0,68,188, 0,0,69,40,0,0,69,136,0,0,69,204,0,0,70,144, 0,0,70,234,0,0,71,200,0,0,72,40,0,0,72,252, 0,0,73,110,0,0,73,226,0,0,73,250,0,0,74,18, 0,0,74,42,0,0,74,64,0,0,74,186,0,0,75,52, 0,0,75,146,0,0,76,40,0,0,76,136,0,0,76,254, 0,0,77,58,0,0,77,188,0,0,77,212,0,0,77,234, 0,0,78,36,0,0,78,164,0,0,78,252,0,0,79,166, 0,0,79,234,0,0,80,114,0,0,80,142,0,0,80,164, 0,0,81,72,0,0,82,20,0,0,82,44,0,0,82,66, 0,0,82,224,0,0,83,168,0,0,83,192,0,0,83,216, 0,0,84,36,0,0,84,130,0,0,84,154,0,0,84,176, 0,0,84,214,0,0,84,252,0,0,85,20,0,0,85,42, 0,0,85,116,0,0,85,208,0,0,85,246,0,0,86,16, 0,0,86,40,0,0,86,64,0,0,86,88,0,0,86,164, 0,0,86,250,0,0,87,76,0,0,87,124,0,0,87,168, 0,0,87,206,0,0,88,14,0,0,88,72,0,0,88,136, 0,0,88,194,0,0,88,218,0,0,88,242,0,0,89,38, 0,0,89,86,0,0,89,146,0,0,89,236,0,0,90,60, 0,0,90,168,0,0,90,236,0,0,91,78,0,0,91,154, 0,0,91,244,0,0,92,96,0,0,92,218,0,0,93,74, 0,0,93,98,0,0,93,120,0,0,94,0,0,0,94,126, 0,0,94,248,0,0,95,190,0,0,96,72,0,0,96,148, 0,0,97,50,0,0,97,144,0,0,98,34,0,0,98,118, 0,0,99,38,0,0,99,194,0,0,99,218,0,0,99,240, 0,0,100,232,0,0,101,196,0,0,102,122,0,0,103,30, 0,0,103,54,0,0,103,76,0,0,103,132,0,0,103,238, 0,0,104,18,0,0,104,90,0,0,104,114,0,0,104,136, 0,0,104,222,0,0,105,54,0,0,105,78,0,0,105,100, 0,0,106,6,0,0,106,170,0,0,107,12,0,0,107,112, 0,0,107,232,0,0,108,102,0,0,108,126,0,0,108,150, 0,0,108,174,0,0,108,196,0,0,109,8,0,0,109,68, 0,0,109,126,0,0,109,184,0,0,109,242,0,0,110,54, 0,0,110,120,0,0,110,176,0,0,110,198,0,0,110,214, 0,0,111,68,0,0,111,162,0,0,112,26,0,0,112,46, 0,0,112,186,0,0,113,50,0,0,113,66,0,0,113,88, 0,0,113,110,0,0,113,132,0,0,114,2,0,0,114,166, 0,0,114,244,0,0,115,96,0,0,116,6,0,0,116,78, 0,0,116,148,0,0,116,224,0,0,117,92,0,0,117,244, 0,0,118,10,0,0,118,32,0,0,118,82,0,0,118,178, 0,0,119,18,0,0,119,92,0,0,119,116,0,0,119,140, 0,0,119,164,0,0,119,188,0,0,119,212,0,0,119,236, 0,0,120,4,0,0,120,28,0,0,120,52,0,0,120,76, 0,0,120,98,0,0,120,122,0,0,120,144,0,0,120,168, 0,0,120,190,0,0,120,214,0,0,120,236,0,0,121,4, 0,0,121,26,0,0,121,50,0,0,121,74,0,0,121,98, 0,0,121,122,0,0,121,146,0,0,121,170,0,0,121,190, 0,0,121,214,0,0,121,236,0,0,122,12,0,0,122,40, 0,0,122,64,0,0,122,88,0,0,122,112,0,0,122,134, 0,0,122,158,0,0,122,182,0,0,122,206,0,0,122,228, 0,0,123,4,0,0,123,32,0,0,123,54,0,0,123,78, 0,0,123,102,0,0,123,126,0,0,123,150,0,0,123,174, 0,0,123,198,0,0,123,220,0,0,123,244,0,0,124,12, 0,0,124,36,0,0,124,60,0,0,124,84,0,0,124,108, 0,0,124,132,0,0,124,154,0,0,124,180,0,0,124,206, 0,0,124,230,0,0,124,252,0,0,125,22,0,0,125,48, 0,0,125,72,0,0,125,94,0,0,125,120,0,0,125,146, 0,0,125,170,0,0,125,192,0,0,125,218,0,0,125,244, 0,0,126,12,0,0,126,34,0,0,126,60,0,0,126,86, 0,0,126,110,0,0,126,132,0,0,126,158,0,0,126,184, 0,0,127,124,0,0,128,44,0,0,128,114,0,0,128,218, 0,0,128,242,0,0,129,10,0,0,129,34,0,0,129,56, 0,0,129,80,0,0,129,102,0,0,129,126,0,0,129,148, 0,0,129,172,0,0,129,194,0,0,129,218,0,0,129,240, 0,0,130,16,0,0,130,44,0,0,130,68,0,0,130,90, 0,0,130,110,0,0,130,220,0,0,130,240,0,0,131,118, 0,0,131,138,0,0,132,22,0,0,132,160,0,0,132,182, 0,0,132,202,0,0,132,224,0,0,132,240,0,0,133,190, 0,0,133,206,0,0,133,226,0,0,134,80,0,0,134,210, 0,0,135,6,0,0,135,62,0,0,135,78,0,0,135,134, 0,0,135,154,0,0,136,22,0,0,136,192,0,0,137,54, 0,0,137,176,0,0,138,32,0,0,138,52,0,0,138,114, 0,0,138,210,0,0,139,16,0,0,139,108,0,0,139,162, 0,0,139,184,0,0,140,100,0,0,140,208,0,0,141,60, 0,0,141,136,0,0,141,156,0,0,141,228,0,0,141,244, 0,0,142,8,0,0,142,28,0,0,142,48,0,0,142,128, 0,0,142,172,0,0,142,192,0,0,143,68,0,0,143,102, 0,0,143,136,0,0,143,152,0,0,143,168,0,0,143,218, 0,0,143,242,0,0,144,88,0,0,144,152,0,0,144,224, 0,0,145,6,0,0,145,24,0,0,145,42,0,0,145,60, 0,0,145,78,0,0,145,96,0,0,145,114,0,0,145,132, 0,0,145,150,0,0,145,168,0,0,145,186,0,0,145,204, 0,0,145,242,0,0,146,6,0,0,146,26,0,0,146,66, 0,0,146,88,0,0,146,132,0,0,146,150,0,0,146,168, 0,0,146,196,0,0,146,222,0,0,147,26,0,0,147,42, 0,0,147,70,0,0,147,92,0,0,147,114,0,0,147,170, 0,0,147,194,0,0,147,218,0,0,147,242,0,0,148,10, 0,0,148,34,0,0,148,58,0,0,148,88,0,0,148,154, 0,0,149,36,0,0,149,70,0,0,149,136,0,0,149,182, 0,0,149,234,0,0,150,24,0,0,150,154,0,0,150,178, 0,0,150,230,0,0,151,20,0,0,151,82,0,0,151,126, 0,0,151,182,0,0,152,38,0,0,152,74,0,0,152,158, 0,0,152,218,0,0,152,254,0,0,153,52,0,0,153,184, 0,0,154,8,0,0,154,116,0,0,154,240,0,0,155,8, 0,0,155,32,0,0,155,54,0,0,155,76,0,0,155,98, 0,0,155,120,0,0,155,150,0,0,156,44,0,0,156,194, 0,0,157,8,0,0,157,138,0,0,158,16,0,0,158,130, 0,0,158,224,0,0,159,78,0,0,159,136,0,0,159,182, 0,0,160,56,0,0,160,146,0,0,160,198,0,0,161,110, 0,0,161,208,0,0,162,36,0,0,162,152,0,0,163,40, 0,0,163,146,0,0,163,226,0,0,164,64,0,0,164,204, 0,0,165,56,0,0,165,142,0,0,166,50,0,0,166,72, 0,0,166,94,0,0,166,116,0,0,166,138,0,0,166,162, 0,0,166,186,0,0,167,0,0,0,167,98,0,0,167,140, 0,0,168,0,0,0,168,16,0,0,168,32,0,0,168,56, 0,0,168,72,0,0,168,184,0,0,169,26,0,0,169,92, 0,0,169,156,0,0,169,216,0,0,170,36,0,0,170,80, 0,0,170,96,0,0,170,188,0,0,170,204,0,0,170,234, 0,0,171,52,0,0,171,98,0,0,171,176,0,0,172,88, 0,0,172,134,0,0,172,218,0,0,173,12,0,0,173,74, 0,0,173,126,0,0,173,174,0,0,173,190,0,0,173,228, 0,0,174,54,0,0,174,70,0,0,174,86,0,0,174,124, 0,0,175,0,0,0,175,16,0,0,175,62,0,0,175,120, 0,0,175,166,0,0,175,220,0,0,176,46,0,0,176,140, 0,0,176,220,0,0,177,78,0,0,177,214,0,0,178,50, 0,0,178,66,0,0,178,214,0,0,179,92,0,0,179,122, 0,0,179,192,0,0,179,208,0,0,180,18,0,0,180,158, 0,0,180,202,0,0,181,28,0,0,181,74,0,0,181,124, 0,0,181,178,0,0,181,220,0,0,181,236,0,0,182,16, 0,0,182,124,0,0,182,140,0,0,182,176,0,0,182,192, 0,0,183,130,0,0,183,146,0,0,183,188,0,0,183,246, 0,0,184,36,0,0,184,90,0,0,184,172,0,0,185,12, 0,0,185,92,0,0,185,206,0,0,186,68,0,0,186,160, 0,0,186,182,0,0,186,204,0,0,187,76,0,0,187,120, 0,0,187,230,0,0,187,246,0,0,188,6,0,0,188,28, 0,0,188,44,0,0,188,182,0,0,189,48,0,0,189,150, 0,0,189,210,0,0,190,12,0,0,190,34,0,0,190,78, 0,0,190,154,0,0,190,240,0,0,191,0,0,0,191,16, 0,0,191,50,0,0,191,84,0,0,191,114,0,0,191,144, 0,0,191,174,0,0,191,204,0,0,192,26,0,0,192,96, 0,0,193,8,0,0,193,148,0,0,193,198,0,0,193,246, 0,0,194,40,0,0,194,88,0,0,194,138,0,0,194,186, 0,0,194,236,0,0,195,28,0,0,195,76,0,0,195,118, 0,0,195,170,0,0,195,216,0,0,195,254,0,0,196,34, 0,0,196,50,0,0,196,66,0,0,196,82,0,0,196,98, 0,0,196,114,0,0,196,150,0,0,196,166,0,0,196,202, 0,0,196,218,0,0,196,254,0,0,197,14,0,0,197,30, 0,0,197,76,0,0,197,118,0,0,197,172,0,0,197,220, 0,0,198,18,0,0,198,66,0,0,198,118,0,0,198,164, 0,0,198,184,0,0,198,200,0,0,198,220,0,0,198,236, 0,0,198,252,0,0,199,20,0,0,199,44,0,0,199,94, 0,0,199,142,0,0,199,190,0,0,199,232,0,0,200,30, 0,0,200,78,0,0,200,102,0,0,200,124,0,0,200,148, 0,0,200,170,0,0,200,186,0,0,200,202,0,0,200,226, 0,0,200,250,0,0,201,10,0,0,201,30,0,0,201,54, 0,0,201,80,0,0,201,104,0,0,201,128,0,0,201,152, 0,0,201,174,0,0,202,86,0,0,202,226,0,0,202,250, 0,0,203,16,0,0,203,40,0,0,203,62,0,0,203,86, 0,0,203,108,0,0,203,124,0,0,203,140,0,0,203,164, 0,0,203,186,0,0,203,210,0,0,203,232,0,0,204,0, 0,0,204,22,0,0,204,46,0,0,204,68,0,0,204,92, 0,0,204,114,0,0,204,138,0,0,204,160,0,0,204,184, 0,0,204,208,0,0,205,46,0,0,205,150,0,0,206,42, 0,0,206,132,0,0,206,228,0,0,207,190,0,0,207,228, 0,0,208,72,0,0,209,0,0,0,209,126,0,0,209,234, 0,0,210,8,0,0,210,134,0,0,211,46,0,0,211,140, 0,0,211,218,0,0,212,202,0,0,213,38,0,0,213,156, 0,0,214,0,0,0,214,188,0,0,215,32,0,0,215,182, 0,0,216,18,0,0,216,152,0,0,217,10,0,0,217,246, 0,0,218,94,0,0,218,186,0,0,219,28,0,0,219,198, 0,0,220,34,0,0,221,22,0,0,221,56,0,0,221,226, 0,0,222,106,0,0,222,220,0,0,223,156,0,0,223,200, 0,0,223,226,0,0,224,48,0,0,224,74,0,0,224,180, 0,0,225,44,0,0,225,138,0,0,226,8,0,0,226,100, 0,0,226,200,0,0,227,80,0,0,227,124,0,0,227,230, 0,0,228,142,0,0,229,10,0,0,229,92,0,0,229,124, 0,0,229,230,0,0,230,168,0,0,230,248,0,0,231,74, 0,0,232,38,0,0,232,116,0,0,232,248,0,0,233,136, 0,0,233,192,0,0,234,76,0,0,234,222,0,0,235,52, 0,0,235,206,0,0,236,72,0,0,237,70,0,0,237,200, 0,0,238,38,0,0,238,124,0,0,239,26,0,0,239,112, 0,0,240,10,0,0,240,40,0,0,240,202,0,0,241,84, 0,0,241,192,0,0,242,98,0,0,242,184,0,0,242,220, 0,0,243,14,0,0,243,46,0,0,243,112,0,0,243,156, 0,0,243,208,0,0,243,230,0,0,244,8,0,0,244,52, 0,0,244,74,0,0,244,106,0,0,244,130,0,0,244,176, 0,0,244,200,0,0,244,224,0,0,244,252,0,0,245,20, 0,0,245,46,0,0,245,72,0,0,245,96,0,0,245,112, 0,0,245,136,0,0,246,2,0,0,246,96,0,0,246,188, 0,0,246,226,0,0,247,78,0,0,247,102,0,0,247,138, 0,0,247,224,0,0,248,178,0,0,248,204,0,0,249,40, 0,0,249,180,0,0,250,14,0,0,250,92,0,0,250,174, 0,0,250,200,0,0,251,16,0,0,251,224,0,0,252,58, 0,0,252,192,0,0,253,106,0,0,253,194,0,0,254,38, 0,0,254,122,0,0,254,214,0,0,255,138,0,1,0,26, 0,1,2,38,0,1,2,94,0,1,2,150,0,1,3,160, 0,1,4,170,0,1,5,182,0,1,6,194,0,1,7,206, 0,1,8,216,0,1,9,228,0,1,11,254,0,1,12,152, 0,1,12,190,0,1,15,44,0,1,15,138,0,1,15,242, 0,1,16,22,0,1,16,134,0,1,16,252,0,1,17,60, 0,1,17,112,0,1,17,234,0,1,18,76,0,1,18,148, 0,1,18,200,0,1,19,2,0,1,19,50,0,1,19,88, 0,1,20,152,0,1,20,220,0,1,21,2,0,1,21,52, 0,1,21,88,0,1,22,26,0,1,22,242,0,1,23,74, 0,1,23,166,0,1,24,0,0,1,24,134,0,1,24,200, 0,1,25,10,0,1,25,66,0,1,25,170,0,1,25,254, 0,1,26,82,0,1,26,128,0,1,26,180,0,1,26,230, 0,1,27,84,0,1,27,146,0,1,27,206,0,1,27,250, 0,1,28,44,0,1,28,94,0,1,28,144,0,1,28,210, 0,1,29,48,0,1,29,138,0,1,29,206,0,1,29,240, 0,1,30,52,0,1,30,118,0,1,30,228,0,1,31,80, 0,1,31,232,0,1,32,126,0,1,32,164,0,1,32,200, 0,1,33,68,0,1,34,234,0,1,35,62,0,1,35,90, 0,1,36,30,0,1,36,238,0,1,37,144,0,1,38,100, 0,1,38,244,0,1,39,188,0,1,40,112,0,1,40,212, 0,1,41,82,0,1,42,92,0,1,43,68,0,1,44,104, 0,1,45,18,0,1,45,200,0,1,46,10,0,1,46,162, 0,1,47,56,0,1,47,146,0,1,48,96,0,1,48,208, 0,1,49,144,0,1,50,10,0,1,50,104,0,1,51,4, 0,1,51,138,0,1,52,28,0,1,52,116,0,1,52,196, 0,1,53,90,0,1,53,214,0,1,54,138,0,1,54,204, 0,1,55,28,0,1,55,104,0,1,55,242,0,1,56,112, 0,1,56,244,0,1,57,64,0,1,57,176,0,1,57,252, 0,1,58,84,0,1,58,224,0,1,59,138,0,1,59,254, 0,1,60,158,0,1,61,12,0,1,61,124,0,1,62,26, 0,1,62,52,0,1,62,168,0,1,62,204,0,1,63,34, 0,1,63,120,0,1,63,202,0,1,64,42,0,1,64,112, 0,1,64,182,0,1,64,222,0,1,65,66,0,1,65,158, 0,1,65,218,0,1,66,84,0,1,66,130,0,1,67,218, 0,1,67,244,0,1,68,88,0,1,68,216,0,1,69,72, 0,1,69,200,0,1,70,48,0,1,70,148,0,1,71,44, 0,1,71,168,0,1,71,244,0,1,72,112,0,1,73,200, 0,1,74,46,0,1,74,172,0,1,75,100,0,1,75,240, 0,1,76,144,0,1,77,80,0,1,78,38,0,1,78,196, 0,1,79,134,0,1,80,18,0,1,80,178,0,1,81,66, 0,1,82,24,0,1,82,222,0,1,83,242,0,1,84,118, 0,1,85,6,0,1,85,140,0,1,86,4,0,1,86,204, 0,1,87,60,0,1,87,210,0,1,88,144,0,1,88,232, 0,1,90,8,0,1,90,176,0,1,91,122,0,1,91,242, 0,1,92,112,0,1,92,232,0,1,93,120,0,1,94,0, 0,1,94,88,0,1,94,210,0,1,95,54,0,1,95,204, 0,1,96,100,0,1,96,172,0,1,97,86,0,1,98,4, 0,1,98,118,0,1,98,230,0,1,99,128,0,1,100,34, 0,1,100,146,0,1,101,42,0,1,101,194,0,1,101,248, 0,1,102,34,0,1,102,122,0,1,102,240,0,1,103,100, 0,1,103,206,0,1,103,238,0,1,104,34,0,1,104,130, 0,1,105,20,0,1,105,146,0,1,106,60,0,1,106,102, 0,1,106,188,0,1,107,100,0,1,108,10,0,1,108,158, 0,1,109,62,0,1,110,70,0,1,110,188,0,1,111,156, 0,1,112,10,0,1,112,104,0,1,112,202,0,1,113,74, 0,1,114,10,0,1,114,148,0,1,115,30,0,1,115,136, 0,1,116,6,0,1,116,144,0,1,116,246,0,1,117,94, 0,1,117,150,0,1,118,56,0,1,118,112,0,1,118,240, 0,1,119,116,0,1,119,144,0,1,119,238,0,1,120,94, 0,1,120,202,0,1,121,100,0,1,121,124,0,1,121,148, 0,1,121,172,0,1,121,196,0,1,121,220,0,1,121,244, 0,1,122,12,0,1,122,174,0,1,122,198,0,1,123,96, 0,1,123,194,0,1,124,38,0,1,124,172,0,1,125,62, 0,1,125,162,0,1,126,78,0,1,126,158,0,1,127,74, 0,1,127,186,0,1,128,34,0,1,128,152,0,1,129,42, 0,1,129,166,0,1,130,44,0,1,130,178,0,1,131,20, 0,1,131,116,0,1,131,200,0,1,132,72,0,1,132,152, 0,1,133,40,0,1,133,152,0,1,134,82,0,1,134,174, 0,1,135,12,0,1,135,116,0,1,136,60,0,1,137,48, 0,1,137,164,0,1,138,40,0,1,138,130,0,1,138,218, 0,1,138,242,0,1,139,20,0,1,139,108,0,1,139,194, 0,1,139,234,0,1,140,44,0,1,140,94,0,1,140,180, 0,1,140,230,0,1,141,60,0,1,141,104,0,1,141,246, 0,1,142,134,0,1,143,2,0,1,143,156,0,1,144,88, 0,1,144,182,0,1,145,50,0,1,145,166,0,1,146,68, 0,1,146,238,0,1,147,62,0,1,147,244,0,1,148,90, 0,1,148,154,0,1,149,18,0,1,149,92,0,1,149,220, 0,1,150,150,0,1,151,204,0,1,152,36,0,1,152,92, 0,1,152,224,0,1,153,114,0,1,153,250,0,1,154,138, 0,1,155,62,0,1,155,230,0,1,156,160,0,1,157,40, 0,1,157,134,0,1,157,250,0,1,158,130,0,1,159,56, 0,1,159,178,0,1,160,126,0,1,161,30,0,1,161,224, 0,1,162,84,0,1,162,206,0,1,163,116,0,1,163,254, 0,1,164,132,0,1,165,34,0,1,165,120,0,1,166,24, 0,1,166,146,0,1,167,48,0,1,167,160,0,1,168,14, 0,1,168,186,0,1,169,26,0,1,169,160,0,1,169,238, 0,1,170,152,0,1,171,48,0,1,171,162,0,1,172,32, 0,1,172,124,0,1,173,38,0,1,173,134,0,1,173,250, 0,1,174,182,0,1,175,52,0,1,175,76,0,1,175,150, 0,1,175,222,0,1,176,64,0,1,176,160,0,1,176,230, 0,1,177,0,0,1,177,36,0,1,177,74,0,1,177,124, 0,1,178,230,0,1,179,78,0,1,179,230,0,1,180,82, 0,1,180,234,0,1,181,108,0,1,181,222,0,1,182,132, 0,1,183,36,0,1,183,110,0,1,183,208,0,1,184,52, 0,1,184,226,0,1,185,170,0,1,186,128,0,1,187,134, 0,1,188,70,0,1,189,30,0,1,189,124,0,1,190,64, 0,1,191,22,0,1,191,226,0,1,192,144,0,1,193,78, 0,1,194,4,0,1,194,214,0,1,195,194,0,1,196,96, 0,1,196,198,0,1,197,104,0,1,198,12,0,1,198,250, 0,1,199,188,0,1,200,104,0,1,201,34,0,1,201,216, 0,1,202,166,0,1,203,86,0,1,203,196,0,1,204,126, 0,1,204,152,0,1,204,218,0,1,204,248,0,1,205,120, 0,1,205,232,0,1,206,82,0,1,206,212,0,1,207,204, 0,1,208,48,0,1,208,194,0,1,209,86,0,1,209,236, 0,1,210,142,0,1,211,98,0,1,212,10,0,1,212,198, 0,1,212,232,0,1,213,54,0,1,213,156,0,1,214,180, 0,1,215,132,0,1,216,150,0,1,218,2,0,1,218,130, 0,1,219,40,0,1,220,96,0,1,220,230,0,1,221,112, 0,1,222,182,0,1,223,232,0,1,225,44,0,1,226,240, 0,1,227,138,0,1,227,244,0,1,228,96,0,1,229,190, 0,1,230,154,0,1,230,186,0,1,231,244,0,1,232,186, 0,1,233,56,0,1,234,24,0,1,234,62,0,1,234,162, 0,1,234,242,0,1,235,32,0,1,235,200,0,1,236,158, 0,1,237,86,0,1,238,18,0,1,238,186,0,1,239,234, 0,1,240,236,0,1,242,30,0,1,242,70,0,1,242,150, 0,1,243,12,0,1,243,54,0,1,243,212,0,1,244,174, 0,1,245,150,0,1,246,82,0,1,247,72,0,1,248,148, 0,1,248,192,0,1,249,120,0,1,249,236,0,1,250,168, 0,1,251,48,0,1,251,182,0,1,252,14,0,1,252,148, 0,1,253,44,0,1,253,234,0,1,254,186,0,1,255,178, 0,2,0,134,0,2,1,192,0,2,2,70,0,2,2,248, 0,2,3,162,0,2,4,70,0,2,5,26,0,2,6,16, 0,2,6,162,0,2,7,102,0,2,7,182,0,2,8,148, 0,2,9,148,0,2,10,74,0,2,11,26,0,2,12,102, 0,2,13,104,0,2,13,226,0,2,14,144,0,2,15,76, 0,2,16,22,0,2,16,156,0,2,17,92,0,2,17,222, 0,2,18,112,0,2,18,246,0,2,19,94,0,2,20,92, 0,2,20,220,0,2,21,228,0,2,22,76,0,2,22,172, 0,2,23,0,0,2,23,148,0,2,24,56,0,2,25,34, 0,2,25,166,0,2,26,6,0,2,26,140,0,2,27,20, 0,2,27,124,0,2,28,56,0,2,29,100,0,2,31,46, 0,2,32,244,0,2,33,230,0,2,34,250,0,2,36,242, 0,2,36,242,0,2,38,128,0,2,40,24,0,2,41,90, 0,2,43,2,0,2,44,116,0,2,46,10,0,2,47,128, 0,2,49,242,0,2,51,236,0,2,53,12,0,2,54,68, 0,2,55,176,0,2,57,38,0,2,59,140,0,2,60,244, 0,2,61,202,0,2,63,2,0,2,64,48,0,2,65,202, 0,2,67,40,0,2,68,66,0,2,69,82,0,2,71,0, 0,2,72,18,0,2,73,244,0,2,76,60,0,2,77,122, 0,2,78,132,0,2,79,154,0,2,81,0,0,2,82,96, 0,2,83,212,0,2,85,40,0,2,86,120,0,2,87,202, 0,2,88,166,0,2,89,50,0,2,89,232,0,2,90,88, 0,2,91,0,0,2,91,136,0,2,92,56,0,2,92,166, 0,2,93,44,0,2,94,0,0,2,94,238,0,2,95,208, 0,2,95,230,0,2,96,2,0,2,96,32,0,2,96,68, 0,2,96,98,0,2,96,134,0,2,96,164,0,2,96,200, 0,2,96,222,0,2,96,250,0,2,97,24,0,2,97,56, 0,2,97,86,0,2,97,118,0,2,97,148,0,2,97,182, 0,2,97,204,0,2,97,232,0,2,98,6,0,2,98,42, 0,2,98,70,0,2,98,106,0,2,98,130,0,2,98,158, 0,2,98,190,0,2,98,224,0,2,99,0,0,2,99,34, 0,2,99,56,0,2,99,84,0,2,99,114,0,2,99,150, 0,2,99,180,0,2,99,216,0,2,99,246,0,2,100,26, 0,2,100,50,0,2,100,78,0,2,100,110,0,2,100,146, 0,2,100,178,0,2,100,214,0,2,100,246,0,2,101,26, 0,2,101,48,0,2,101,76,0,2,101,106,0,2,101,140, 0,2,101,170,0,2,101,204,0,2,101,234,0,2,102,14, 0,2,102,38,0,2,102,66,0,2,102,98,0,2,102,134, 0,2,102,166,0,2,102,202,0,2,102,234,0,2,103,14, 0,2,103,36,0,2,103,64,0,2,103,94,0,2,103,130, 0,2,103,160,0,2,103,196,0,2,103,220,0,2,103,248, 0,2,104,24,0,2,104,58,0,2,104,90,0,2,104,124, 0,2,104,146,0,2,104,174,0,2,104,204,0,2,104,240, 0,2,105,14,0,2,105,50,0,2,105,80,0,2,105,116, 0,2,105,142,0,2,105,178,0,2,105,214,0,2,105,250, 0,2,106,18,0,2,106,46,0,2,106,76,0,2,106,112, 0,2,106,142,0,2,106,178,0,2,106,210,0,2,106,246, 0,2,107,14,0,2,107,42,0,2,107,74,0,2,107,108, 0,2,107,140,0,2,107,174,0,2,107,206,0,2,107,242, 0,2,108,10,0,2,108,32,0,2,108,56,0,2,108,78, 0,2,108,102,0,2,108,124,0,2,108,146,0,2,108,168, 0,2,108,192,0,2,108,214,0,2,108,238,0,2,109,4, 0,2,109,28,0,2,109,52,0,2,109,80,0,2,109,114, 0,2,109,150,0,2,109,192,0,2,109,228,0,2,110,14, 0,2,110,50,0,2,110,92,0,2,110,122,0,2,110,158, 0,2,110,196,0,2,110,236,0,2,111,18,0,2,111,58, 0,2,111,96,0,2,111,138,0,2,111,166,0,2,111,200, 0,2,111,236,0,2,112,22,0,2,112,58,0,2,112,100, 0,2,112,136,0,2,112,178,0,2,112,210,0,2,112,246, 0,2,113,30,0,2,113,74,0,2,113,114,0,2,113,158, 0,2,113,198,0,2,113,242,0,2,114,18,0,2,114,54, 0,2,114,92,0,2,114,136,0,2,114,174,0,2,114,218, 0,2,115,2,0,2,115,46,0,2,115,78,0,2,115,114, 0,2,115,154,0,2,115,196,0,2,115,236,0,2,116,22, 0,2,116,62,0,2,116,106,0,2,116,128,0,2,116,150, 0,2,116,180,0,2,116,202,0,2,116,230,0,2,116,252, 0,2,117,24,0,2,117,48,0,2,117,72,0,2,117,94, 0,2,117,116,0,2,117,140,0,2,117,158,0,2,117,176, 0,2,117,192,0,2,117,210,0,2,117,234,0,2,118,8, 0,2,118,30,0,2,118,58,0,2,118,80,0,2,118,110, 0,2,118,134,0,2,118,158,0,2,118,182,0,2,118,206, 0,2,118,230,0,2,118,254,0,2,119,22,0,2,119,46, 0,2,119,68,0,2,119,90,0,2,119,120,0,2,119,150, 0,2,119,172,0,2,119,202,0,2,119,226,0,2,119,250, 0,2,120,18,0,2,120,42,0,2,120,72,0,2,120,102, 0,2,120,132,0,2,120,154,0,2,120,176,0,2,120,206, 0,2,120,236,0,2,121,2,0,2,121,30,0,2,121,52, 0,2,121,82,0,2,121,106,0,2,121,130,0,2,121,154, 0,2,121,178,0,2,121,206,0,2,121,230,0,2,121,254, 0,2,122,14,0,2,122,46,0,2,122,70,0,2,122,102, 0,2,122,126,0,2,122,158,0,2,122,182,0,2,122,206, 0,2,122,230,0,2,122,254,0,2,123,22,0,2,123,38, 0,2,123,60,0,2,123,86,0,2,123,112,0,2,123,138, 0,2,123,184,0,2,123,230,0,2,124,20,0,2,124,66, 0,2,124,146,0,2,124,224,0,2,125,44,0,2,125,122, 0,2,125,166,0,2,125,226,0,2,126,26,0,2,126,54, 0,2,126,100,0,2,127,134,0,2,129,4,0,2,129,38, 0,2,129,92,0,2,129,168,0,2,129,202,0,2,130,0, 0,2,130,76,0,2,130,108,0,2,130,142,0,2,131,106, 0,2,131,184,0,2,132,54,0,2,132,82,0,2,132,106, 0,2,133,8,0,2,133,162,0,2,133,226,0,2,134,46, 0,2,134,80,0,2,134,130,0,2,134,236,0,2,135,108, 0,2,135,160,0,2,136,74,0,2,136,210,0,2,136,228, 0,2,136,246,0,2,137,8,0,2,137,26,0,2,137,44, 0,2,137,62,0,2,137,80,0,2,137,98,0,2,137,116, 0,2,137,134,0,2,138,150,0,2,139,150,0,2,140,22, 0,2,140,164,0,2,142,42,0,2,143,214,0,2,144,214, 0,2,146,96,0,2,147,144,0,2,148,36,0,2,149,216, 0,2,151,224,0,2,152,46,0,2,152,62,0,2,152,184, 0,2,154,54,0,2,154,70,0,2,154,86,0,2,156,22, 0,2,157,218,0,2,159,60,0,2,159,200,0,2,159,242, 0,2,161,88,0,2,161,120,0,2,161,152,0,2,161,184, 0,2,161,216,0,2,161,248,0,2,162,24,0,2,162,56, 0,2,162,88,0,2,162,120,0,2,162,152,0,2,162,184, 0,2,162,216,0,2,162,240,0,2,163,0,0,2,163,24, 0,2,163,56,0,2,163,80,0,2,163,96,0,2,163,120, 0,2,163,152,0,2,163,192,0,2,163,216,0,2,163,232, 0,2,164,0,0,2,164,32,0,2,164,48,0,2,164,64, 0,2,164,80,0,2,164,96,0,2,164,112,0,2,164,136, 0,2,164,168,0,2,164,192,0,2,164,208,0,2,164,232, 0,2,165,8,0,2,165,48,0,2,165,72,0,2,165,88, 0,2,165,112,0,2,165,144,0,2,165,160,0,2,165,176, 0,2,165,192,0,2,165,208,0,2,166,6,0,2,166,58, 0,2,166,110,0,2,166,164,0,2,167,32,0,2,167,158, 0,2,167,198,0,2,168,16,0,2,168,90,0,2,168,164, 0,2,168,238,0,2,169,96,0,2,169,118,0,2,170,20, 0,2,170,68,0,2,170,176,0,2,170,218,0,2,170,240, 0,2,171,60,0,2,171,192,0,2,171,230,0,2,171,252, 0,2,172,52,0,2,172,78,0,2,172,132,0,2,173,210, 0,2,173,254,0,2,174,226,0,2,175,218,0,2,175,254, 0,2,176,32,0,2,176,70,0,2,176,150,0,2,176,232, 0,2,177,64,0,2,177,230,0,2,178,216,0,2,179,48, 0,2,179,192,0,2,180,46,0,2,180,134,0,2,181,4, 0,2,181,56,0,2,181,106,0,2,181,248,0,2,182,56, 0,2,182,104,0,2,182,154,0,2,183,52,0,2,183,192, 0,2,184,100,0,2,184,136,0,2,185,28,0,2,185,82, 0,2,185,170,0,2,185,220,0,2,186,64,0,2,187,4, 0,2,187,142,0,2,188,38,0,2,188,150,0,2,188,250, 0,2,189,52,0,2,189,110,0,2,189,198,0,2,190,28, 0,2,190,74,0,2,190,120,0,2,190,174,0,2,190,230, 0,2,191,94,0,2,191,232,0,2,193,0,0,2,194,34, 0,2,194,152,0,2,195,18,0,2,195,172,0,2,196,76, 0,2,197,2,0,2,197,182,0,2,199,4,0,2,200,90, 0,2,201,70,0,2,202,150,0,2,203,130,0,2,204,190, 0,2,205,62,0,2,205,252,0,2,206,152,0,2,207,116, 0,2,207,236,0,2,208,172,0,2,209,106,0,2,210,110, 0,2,210,238,0,2,211,176,0,2,212,130,0,2,213,174, 0,2,214,126,0,2,215,154,0,2,216,56,0,2,217,36, 0,2,217,240,0,2,219,0,0,2,219,208,0,2,220,224, 0,2,221,110,0,2,221,254,0,2,222,214,0,2,223,70, 0,2,223,236,0,2,224,102,0,2,225,32,0,2,226,54, 0,2,226,198,0,2,228,10,0,2,229,56,0,2,229,246, 0,2,230,246,0,2,232,64,0,2,233,142,0,2,234,40, 0,2,235,10,0,2,235,254,0,2,236,206,0,2,237,228, 0,2,239,20,0,2,239,122,0,2,240,56,0,2,241,6, 0,2,242,24,0,2,243,112,0,2,244,206,0,2,245,220, 0,2,246,188,0,2,248,4,0,2,249,10,0,2,249,242, 0,2,250,190,0,2,251,132,0,2,252,108,0,2,253,102, 0,2,254,24,0,2,254,236,0,2,255,160,0,3,0,76, 0,3,1,54,0,3,2,38,0,3,2,192,0,3,3,136, 0,3,4,64,0,3,5,118,0,3,6,246,0,3,7,252, 0,3,8,164,0,3,8,242,0,3,9,2,0,3,9,106, 0,3,9,230,0,3,10,50,0,3,10,126,0,3,10,216, 0,3,11,46,0,3,11,92,0,3,11,140,0,3,12,62, 0,3,12,232,0,3,13,130,0,3,14,84,0,3,14,166, 0,3,15,64,0,3,15,194,0,3,16,134,0,3,16,252, 0,3,17,184,0,3,17,222,0,3,18,70,0,3,18,166, 0,3,19,76,0,3,19,212,0,3,20,164,0,3,21,36, 0,3,21,230,0,3,22,118,0,3,23,78,0,3,23,178, 0,3,24,86,0,3,24,230,0,3,25,204,0,3,26,68, 0,3,26,254,0,3,27,110,0,3,27,220,0,3,28,150, 0,3,28,238,0,3,29,136,0,3,29,204,0,3,30,80, 0,3,30,188,0,3,30,226,0,3,31,80,0,3,31,212, 0,3,32,26,0,3,32,108,0,3,33,20,0,3,33,208, 0,3,34,54,0,3,34,228,0,3,35,168,0,3,35,246, 0,3,36,136,0,3,37,40,0,3,37,130,0,3,38,30, 0,3,38,212,0,3,39,82,0,3,40,16,0,3,40,232, 0,3,41,58,0,3,41,194,0,3,42,30,0,3,42,124, 0,3,42,242,0,3,43,68,0,3,43,150,0,3,43,192, 0,3,43,234,0,3,44,26,0,3,44,74,0,3,44,164, 0,3,44,252,0,3,45,102,0,3,45,168,0,3,45,218, 0,3,46,38,0,3,46,118,0,3,46,196,0,3,47,6, 0,3,47,84,0,3,47,186,0,3,48,82,0,3,48,238, 0,3,49,98,0,3,49,120,0,3,49,142,0,3,49,164, 0,3,49,186,0,3,49,202,0,3,49,220,0,3,50,34, 0,3,50,56,0,3,50,72,0,3,50,88,0,3,50,104, 0,3,50,120,0,3,50,136,0,3,50,152,0,3,50,168, 0,3,50,184,0,3,50,200,0,3,50,254,0,3,51,42, 0,3,51,58,0,3,51,178,0,3,52,12,0,3,52,94, 0,3,52,238,0,3,53,116,0,3,53,236,0,3,54,182, 0,3,54,220,0,3,55,46,0,3,55,98,0,3,55,180, 0,3,56,48,0,3,56,86,0,3,56,196,0,3,57,86, 0,3,57,180,0,3,58,4,0,3,58,98,0,3,58,242, 0,3,59,20,0,3,59,212,0,3,60,148,0,3,61,94, 0,3,62,42,0,3,62,176,0,3,63,62,0,3,63,196, 0,3,64,46,0,3,64,150,0,3,64,200,0,3,65,64, 0,3,65,100,0,3,65,148,0,3,66,114,0,3,66,152, 0,3,67,0,0,3,67,152,0,3,67,252,0,3,68,90, 0,3,68,174,0,3,69,138,0,3,70,28,0,3,70,210, 0,3,71,66,0,3,71,160,0,3,72,8,0,3,72,198, 0,3,73,96,0,3,73,132,0,3,73,238,0,3,74,134, 0,3,75,60,0,3,75,138,0,3,76,16,0,1,0,0, 8,127,0,218,0,18,0,77,0,7,0,2,0,0,0,1, 0,1,0,0,0,64,0,46,0,4,0,2,0,0,0,34, 1,158,0,0,0,3,0,0,0,0,0,90,0,0,0,0, 0,3,0,0,0,1,0,16,0,92,0,0,0,3,0,0, 0,2,0,12,0,110,0,0,0,3,0,0,0,3,0,68, 0,124,0,0,0,3,0,0,0,4,0,18,0,194,0,0, 0,3,0,0,0,5,0,52,0,214,0,0,0,3,0,0, 0,6,0,16,1,12,0,0,0,3,0,0,0,13,0,140, 1,30,0,0,0,3,0,0,0,14,0,72,1,172,0,0, 0,3,0,0,0,19,0,88,1,246,0,1,0,0,0,0, 0,0,0,45,2,80,0,1,0,0,0,0,0,1,0,8, 2,126,0,1,0,0,0,0,0,2,0,6,2,135,0,1, 0,0,0,0,0,3,0,34,2,142,0,1,0,0,0,0, 0,4,0,9,2,177,0,1,0,0,0,0,0,5,0,26, 2,187,0,1,0,0,0,0,0,6,0,8,2,214,0,1, 0,0,0,0,0,13,0,70,2,223,0,1,0,0,0,0, 0,14,0,36,3,38,0,1,0,0,0,0,0,19,0,44, 3,75,0,3,0,1,4,9,0,0,0,90,0,0,0,3, 0,1,4,9,0,1,0,16,0,92,0,3,0,1,4,9, 0,2,0,12,0,110,0,3,0,1,4,9,0,3,0,68, 0,124,0,3,0,1,4,9,0,4,0,18,0,194,0,3, 0,1,4,9,0,5,0,52,0,214,0,3,0,1,4,9, 0,6,0,16,1,12,0,3,0,1,4,9,0,13,0,140, 1,30,0,3,0,1,4,9,0,14,0,72,1,172,0,3, 0,1,4,9,0,19,0,88,1,246,0,3,0,1,4,36, 0,2,0,14,3,120,0,3,0,1,4,36,0,13,0,134, 3,136,0,3,0,1,4,36,0,14,0,72,4,16,0,3, 0,1,4,36,0,19,0,84,4,90,0,67,0,111,0,112, 0,121,0,108,0,101,0,102,0,116,0,32,0,50,0,48, 0,48,0,50,0,44,0,32,0,50,0,48,0,48,0,51, 0,32,0,70,0,114,0,101,0,101,0,32,0,83,0,111, 0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,70, 0,111,0,117,0,110,0,100,0,97,0,116,0,105,0,111, 0,110,0,46,0,0,0,70,0,114,0,101,0,101,0,83, 0,97,0,110,0,115,0,0,0,77,0,101,0,100,0,105, 0,117,0,109,0,0,0,80,0,102,0,97,0,69,0,100, 0,105,0,116,0,32,0,49,0,46,0,48,0,32,0,58, 0,32,0,70,0,114,0,101,0,101,0,32,0,83,0,97, 0,110,0,115,0,32,0,58,0,32,0,56,0,45,0,57, 0,45,0,50,0,48,0,48,0,51,0,0,0,70,0,114, 0,101,0,101,0,32,0,83,0,97,0,110,0,115,0,0, 0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32, 0,36,0,82,0,101,0,118,0,105,0,115,0,105,0,111, 0,110,0,58,0,32,0,49,0,46,0,50,0,55,0,32, 0,36,0,32,0,0,0,70,0,114,0,101,0,101,0,83, 0,97,0,110,0,115,0,0,0,84,0,104,0,101,0,32, 0,117,0,115,0,101,0,32,0,111,0,102,0,32,0,116, 0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116, 0,32,0,105,0,115,0,32,0,103,0,114,0,97,0,110, 0,116,0,101,0,100,0,32,0,115,0,117,0,98,0,106, 0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,71, 0,78,0,85,0,32,0,71,0,101,0,110,0,101,0,114, 0,97,0,108,0,32,0,80,0,117,0,98,0,108,0,105, 0,99,0,32,0,76,0,105,0,99,0,101,0,110,0,115, 0,101,0,46,0,0,0,104,0,116,0,116,0,112,0,58, 0,47,0,47,0,119,0,119,0,119,0,46,0,103,0,110, 0,117,0,46,0,111,0,114,0,103,0,47,0,99,0,111, 0,112,0,121,0,108,0,101,0,102,0,116,0,47,0,103, 0,112,0,108,0,46,0,104,0,116,0,109,0,108,0,0, 0,84,0,104,0,101,0,32,0,113,0,117,0,105,0,99, 0,107,0,32,0,98,0,114,0,111,0,119,0,110,0,32, 0,102,0,111,0,120,0,32,0,106,0,117,0,109,0,112, 0,115,0,32,0,111,0,118,0,101,0,114,0,32,0,116, 0,104,0,101,0,32,0,108,0,97,0,122,0,121,0,32, 0,100,0,111,0,103,0,46,0,0,67,111,112,121,108,101, 102,116,32,50,48,48,50,44,32,50,48,48,51,32,70,114, 101,101,32,83,111,102,116,119,97,114,101,32,70,111,117,110, 100,97,116,105,111,110,46,0,70,114,101,101,83,97,110,115, 0,77,101,100,105,117,109,0,80,102,97,69,100,105,116,32, 49,46,48,32,58,32,70,114,101,101,32,83,97,110,115,32, 58,32,56,45,57,45,50,48,48,51,0,70,114,101,101,32, 83,97,110,115,0,86,101,114,115,105,111,110,32,36,82,101, 118,105,115,105,111,110,58,32,49,46,50,55,32,36,32,0, 70,114,101,101,83,97,110,115,0,84,104,101,32,117,115,101, 32,111,102,32,116,104,105,115,32,102,111,110,116,32,105,115, 32,103,114,97,110,116,101,100,32,115,117,98,106,101,99,116, 32,116,111,32,71,78,85,32,71,101,110,101,114,97,108,32, 80,117,98,108,105,99,32,76,105,99,101,110,115,101,46,0, 104,116,116,112,58,47,47,119,119,119,46,103,110,117,46,111, 114,103,47,99,111,112,121,108,101,102,116,47,103,112,108,46, 104,116,109,108,0,84,104,101,32,113,117,105,99,107,32,98, 114,111,119,110,32,102,111,120,32,106,117,109,112,115,32,111, 118,101,114,32,116,104,101,32,108,97,122,121,32,100,111,103, 46,0,0,110,0,97,0,118,0,97,0,100,0,110,0,111, 0,0,0,68,0,111,0,118,0,111,0,108,0,106,0,101, 0,110,0,97,0,32,0,106,0,101,0,32,0,117,0,112, 0,111,0,114,0,97,0,98,0,97,0,32,0,118,0,32, 0,115,0,107,0,108,0,97,0,100,0,117,0,32,0,122, 0,32,0,108,0,105,0,99,0,101,0,110,0,99,0,111, 0,32,0,71,0,78,0,85,0,32,0,71,0,101,0,110, 0,101,0,114,0,97,0,108,0,32,0,80,0,117,0,98, 0,108,0,105,0,99,0,32,0,76,0,105,0,99,0,101, 0,110,0,115,0,101,0,46,0,0,0,104,0,116,0,116, 0,112,0,58,0,47,0,47,0,119,0,119,0,119,0,46, 0,103,0,110,0,117,0,46,0,111,0,114,0,103,0,47, 0,99,0,111,0,112,0,121,0,108,0,101,0,102,0,116, 0,47,0,103,0,112,0,108,0,46,0,104,0,116,0,109, 0,108,0,0,1,96,0,101,0,114,0,105,0,102,0,32, 0,98,0,111,0,32,0,122,0,97,0,32,0,118,0,97, 0,106,0,111,0,32,0,115,0,112,0,101,0,116,0,32, 0,107,0,117,0,104,0,97,0,108,0,32,0,100,0,111, 0,109,0,97,1,13,0,101,0,32,1,126,0,103,0,97, 0,110,0,99,0,101,0,46,0,0,0,0,0,2,0,0, 0,0,0,0,255,105,0,50,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,8,127,0,0, 0,1,0,2,1,2,1,3,1,4,1,5,1,6,1,7, 1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15, 1,16,1,17,1,18,1,19,1,20,1,21,1,22,1,23, 1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31, 1,32,1,33,1,34,1,35,1,36,1,37,1,38,1,39, 1,40,1,41,1,42,1,43,1,44,1,45,1,46,1,47, 1,48,1,49,1,50,1,51,1,52,1,53,1,54,1,55, 1,56,1,57,1,58,1,59,1,60,1,61,1,62,1,63, 1,64,1,65,1,66,1,67,1,68,1,69,1,70,1,71, 1,72,1,73,1,74,1,75,1,76,1,77,1,78,1,79, 1,80,1,81,1,82,1,83,1,84,1,85,1,86,1,87, 1,88,1,89,1,90,1,91,1,92,1,93,1,94,1,95, 1,96,0,172,0,163,0,132,0,133,0,189,0,150,0,232, 0,134,0,142,0,139,0,157,0,169,0,164,1,97,0,138, 0,218,0,131,0,147,0,242,0,243,0,141,0,151,0,136, 0,195,0,222,0,241,0,158,0,170,0,245,0,244,0,246, 0,162,0,173,0,201,0,199,0,174,0,98,0,99,0,144, 0,100,0,203,0,101,0,200,0,202,0,207,0,204,0,205, 0,206,0,233,0,102,0,211,0,208,0,209,0,175,0,103, 0,240,0,145,0,214,0,212,0,213,0,104,0,235,0,237, 0,137,0,106,0,105,0,107,0,109,0,108,0,110,0,160, 0,111,0,113,0,112,0,114,0,115,0,117,0,116,0,118, 0,119,0,234,0,120,0,122,0,121,0,123,0,125,0,124, 0,184,0,161,0,127,0,126,0,128,0,129,0,236,0,238, 0,186,1,98,1,99,1,100,1,101,1,102,1,103,0,253, 0,254,1,104,1,105,1,106,1,107,0,255,1,0,1,108, 1,109,1,110,1,1,1,111,1,112,1,113,1,114,1,115, 1,116,1,117,1,118,1,119,1,120,1,121,1,122,0,248, 0,249,1,123,1,124,1,125,1,126,1,127,1,128,1,129, 1,130,1,131,1,132,1,133,1,134,1,135,1,136,1,137, 1,138,0,250,0,215,1,139,1,140,1,141,1,142,1,143, 1,144,1,145,1,146,1,147,1,148,1,149,1,150,1,151, 1,152,1,153,0,226,0,227,1,154,1,155,1,156,1,157, 1,158,1,159,1,160,1,161,1,162,1,163,1,164,1,165, 1,166,1,167,1,168,0,176,0,177,1,169,1,170,1,171, 1,172,1,173,1,174,1,175,1,176,1,177,1,178,0,251, 0,252,0,228,0,229,1,179,1,180,1,181,1,182,1,183, 1,184,1,185,1,186,1,187,1,188,1,189,1,190,1,191, 1,192,1,193,1,194,1,195,1,196,1,197,1,198,1,199, 1,200,0,187,1,201,1,202,1,203,1,204,0,230,0,231, 1,205,1,206,1,207,1,208,1,209,1,210,1,211,1,212, 1,213,1,214,1,215,1,216,1,217,1,218,1,219,1,220, 0,166,1,221,1,222,1,223,1,224,1,225,1,226,1,227, 1,228,1,229,1,230,1,231,1,232,1,233,1,234,1,235, 1,236,1,237,1,238,1,239,1,240,1,241,1,242,1,243, 1,244,1,245,1,246,1,247,1,248,1,249,1,250,1,251, 1,252,1,253,1,254,1,255,2,0,2,1,2,2,2,3, 2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11, 2,12,2,13,2,14,2,15,2,16,2,17,2,18,2,19, 2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27, 2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35, 2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43, 2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51, 2,52,2,53,2,54,2,55,2,56,2,57,2,58,2,59, 2,60,2,61,2,62,2,63,2,64,2,65,2,66,2,67, 2,68,2,69,2,70,2,71,2,72,2,73,2,74,2,75, 2,76,2,77,2,78,2,79,2,80,2,81,2,82,2,83, 2,84,2,85,2,86,2,87,2,88,2,89,2,90,2,91, 2,92,2,93,2,94,2,95,2,96,2,97,2,98,2,99, 2,100,2,101,2,102,2,103,2,104,2,105,2,106,2,107, 2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115, 2,116,2,117,2,118,2,119,2,120,2,121,0,216,0,225, 2,122,2,123,0,219,0,220,0,221,0,224,0,217,0,223, 2,124,2,125,2,126,2,127,2,128,2,129,2,130,2,131, 2,132,2,133,2,134,2,135,2,136,2,137,2,138,2,139, 2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,147, 2,148,2,149,2,150,2,151,2,152,2,153,2,154,2,155, 2,156,2,157,2,158,2,159,2,160,2,161,2,162,2,163, 2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171, 2,172,2,173,2,174,2,175,2,176,2,177,2,178,2,179, 2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187, 2,188,2,189,2,190,2,191,2,192,2,193,2,194,2,195, 2,196,2,197,2,198,2,199,2,200,2,201,2,202,2,203, 0,155,2,204,2,205,2,206,2,207,2,208,2,209,2,210, 2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218, 2,219,2,220,2,221,2,222,2,223,2,224,2,225,2,226, 2,227,2,228,2,229,2,230,2,231,2,232,2,233,2,234, 2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242, 2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250, 2,251,2,252,2,253,2,254,2,255,3,0,3,1,3,2, 3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10, 3,11,3,12,3,13,3,14,3,15,3,16,3,17,3,18, 3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26, 3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34, 3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42, 3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50, 3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58, 3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66, 3,67,3,68,3,69,3,70,3,71,3,72,3,73,3,74, 3,75,3,76,3,77,3,78,3,79,3,80,3,81,3,82, 3,83,3,84,3,85,3,86,3,87,3,88,3,89,3,90, 3,91,3,92,3,93,3,94,3,95,3,96,3,97,3,98, 3,99,3,100,3,101,3,102,3,103,3,104,3,105,3,106, 3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114, 3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122, 3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130, 3,131,3,132,3,133,3,134,3,135,3,136,3,137,3,138, 3,139,3,140,3,141,3,142,3,143,3,144,3,145,3,146, 3,147,3,148,3,149,3,150,3,151,3,152,3,153,3,154, 3,155,3,156,3,157,3,158,3,159,3,160,3,161,3,162, 3,163,3,164,3,165,3,166,3,167,3,168,3,169,3,170, 3,171,3,172,3,173,3,174,3,175,3,176,3,177,3,178, 3,179,3,180,3,181,3,182,3,183,3,184,3,185,3,186, 3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194, 3,195,3,196,3,197,3,198,3,199,3,200,3,201,3,202, 3,203,3,204,3,205,3,206,3,207,3,208,3,209,3,210, 3,211,3,212,3,213,3,214,3,215,3,216,3,217,3,218, 3,219,3,220,3,221,3,222,3,223,3,224,3,225,3,226, 3,227,3,228,3,229,3,230,3,231,3,232,3,233,3,234, 3,235,3,236,3,237,3,238,3,239,3,240,3,241,3,242, 3,243,3,244,3,245,3,246,3,247,3,248,3,249,3,250, 3,251,3,252,3,253,3,254,3,255,4,0,4,1,4,2, 4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10, 4,11,4,12,4,13,4,14,4,15,4,16,4,17,4,18, 4,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26, 4,27,4,28,4,29,4,30,4,31,4,32,4,33,4,34, 4,35,4,36,4,37,4,38,4,39,4,40,4,41,4,42, 4,43,4,44,4,45,4,46,4,47,4,48,4,49,4,50, 4,51,4,52,4,53,4,54,4,55,4,56,4,57,4,58, 4,59,4,60,4,61,4,62,4,63,4,64,4,65,4,66, 4,67,4,68,4,69,4,70,4,71,4,72,4,73,4,74, 4,75,4,76,4,77,4,78,4,79,4,80,4,81,4,82, 4,83,4,84,4,85,4,86,4,87,4,88,4,89,4,90, 4,91,4,92,4,93,4,94,4,95,4,96,4,97,4,98, 4,99,4,100,4,101,4,102,4,103,4,104,4,105,4,106, 4,107,4,108,4,109,4,110,4,111,4,112,4,113,4,114, 4,115,4,116,4,117,4,118,4,119,4,120,4,121,4,122, 4,123,4,124,4,125,4,126,4,127,4,128,4,129,4,130, 4,131,4,132,4,133,4,134,4,135,4,136,4,137,4,138, 4,139,4,140,4,141,4,142,4,143,4,144,4,145,4,146, 4,147,4,148,4,149,4,150,4,151,4,152,4,153,4,154, 4,155,4,156,4,157,4,158,4,159,4,160,4,161,4,162, 4,163,4,164,4,165,4,166,4,167,4,168,4,169,4,170, 4,171,4,172,4,173,4,174,4,175,4,176,4,177,4,178, 4,179,4,180,4,181,4,182,4,183,4,184,4,185,4,186, 4,187,4,188,4,189,4,190,4,191,4,192,4,193,4,194, 4,195,4,196,4,197,4,198,4,199,4,200,4,201,4,202, 4,203,4,204,4,205,4,206,4,207,4,208,4,209,4,210, 4,211,4,212,4,213,4,214,4,215,4,216,4,217,4,218, 4,219,4,220,4,221,4,222,4,223,4,224,4,225,4,226, 4,227,4,228,4,229,4,230,4,231,4,232,4,233,4,234, 4,235,4,236,4,237,4,238,4,239,4,240,4,241,4,242, 4,243,4,244,4,245,4,246,4,247,4,248,4,249,4,250, 4,251,4,252,4,253,4,254,4,255,5,0,5,1,5,2, 5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10, 5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18, 5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26, 5,27,5,28,5,29,5,30,5,31,5,32,5,33,5,34, 5,35,5,36,5,37,5,38,5,39,5,40,5,41,5,42, 5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50, 5,51,5,52,5,53,5,54,5,55,5,56,5,57,5,58, 5,59,5,60,5,61,5,62,5,63,5,64,5,65,5,66, 5,67,5,68,5,69,5,70,5,71,5,72,5,73,5,74, 5,75,5,76,5,77,5,78,5,79,5,80,5,81,5,82, 5,83,5,84,5,85,5,86,5,87,5,88,5,89,5,90, 5,91,5,92,5,93,5,94,5,95,5,96,5,97,5,98, 5,99,5,100,5,101,5,102,5,103,5,104,5,105,5,106, 5,107,5,108,5,109,5,110,5,111,5,112,5,113,5,114, 5,115,5,116,5,117,5,118,5,119,5,120,5,121,5,122, 5,123,5,124,5,125,5,126,5,127,5,128,5,129,5,130, 5,131,5,132,5,133,5,134,5,135,5,136,5,137,5,138, 5,139,5,140,5,141,5,142,5,143,5,144,5,145,5,146, 5,147,5,148,5,149,5,150,5,151,5,152,5,153,5,154, 5,155,5,156,5,157,5,158,5,159,5,160,5,161,5,162, 5,163,5,164,5,165,5,166,5,167,5,168,5,169,5,170, 5,171,5,172,5,173,5,174,5,175,5,176,5,177,5,178, 5,179,5,180,5,181,5,182,5,183,5,184,5,185,5,186, 5,187,5,188,5,189,5,190,5,191,5,192,5,193,5,194, 5,195,5,196,5,197,5,198,5,199,5,200,5,201,5,202, 5,203,5,204,5,205,5,206,5,207,5,208,5,209,5,210, 5,211,5,212,5,213,5,214,5,215,5,216,5,217,5,218, 5,219,5,220,5,221,5,222,5,223,5,224,5,225,5,226, 5,227,5,228,5,229,5,230,5,231,5,232,5,233,5,234, 5,235,5,236,5,237,5,238,5,239,5,240,5,241,5,242, 5,243,5,244,5,245,5,246,5,247,5,248,5,249,5,250, 5,251,5,252,5,253,5,254,5,255,6,0,6,1,6,2, 6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10, 6,11,6,12,6,13,6,14,6,15,6,16,6,17,6,18, 6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26, 6,27,6,28,6,29,6,30,6,31,6,32,6,33,6,34, 6,35,6,36,6,37,6,38,6,39,6,40,6,41,6,42, 6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50, 6,51,6,52,6,53,6,54,6,55,6,56,6,57,6,58, 6,59,6,60,6,61,6,62,6,63,6,64,6,65,6,66, 6,67,6,68,6,69,6,70,6,71,6,72,6,73,6,74, 6,75,6,76,6,77,6,78,6,79,6,80,6,81,6,82, 6,83,6,84,6,85,6,86,6,87,6,88,6,89,6,90, 6,91,6,92,6,93,6,94,6,95,6,96,6,97,6,98, 6,99,6,100,6,101,6,102,6,103,6,104,6,105,6,106, 6,107,6,108,6,109,6,110,6,111,6,112,6,113,6,114, 6,115,6,116,6,117,6,118,6,119,6,120,6,121,6,122, 6,123,6,124,6,125,6,126,6,127,6,128,6,129,6,130, 6,131,6,132,6,133,6,134,6,135,6,136,6,137,6,138, 6,139,6,140,6,141,6,142,6,143,6,144,6,145,6,146, 6,147,6,148,6,149,6,150,6,151,6,152,6,153,6,154, 6,155,6,156,6,157,6,158,6,159,6,160,6,161,6,162, 6,163,6,164,6,165,6,166,6,167,6,168,6,169,6,170, 6,171,6,172,6,173,6,174,6,175,6,176,6,177,6,178, 6,179,6,180,6,181,6,182,6,183,6,184,6,185,6,186, 6,187,6,188,6,189,6,190,6,191,6,192,6,193,6,194, 6,195,6,196,6,197,6,198,6,199,6,200,6,201,6,202, 6,203,6,204,6,205,6,206,6,207,6,208,6,209,6,210, 6,211,6,212,6,213,6,214,6,215,6,216,6,217,6,218, 6,219,6,220,6,221,6,222,6,223,6,224,6,225,6,226, 6,227,6,228,6,229,6,230,6,231,6,232,6,233,6,234, 6,235,6,236,6,237,6,238,6,239,6,240,6,241,6,242, 6,243,6,244,6,245,6,246,6,247,6,248,6,249,6,250, 6,251,6,252,6,253,6,254,6,255,7,0,7,1,7,2, 7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10, 7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18, 7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26, 7,27,7,28,7,29,7,30,7,31,7,32,7,33,7,34, 7,35,7,36,7,37,7,38,7,39,7,40,7,41,7,42, 7,43,7,44,7,45,7,46,7,47,7,48,7,49,7,50, 7,51,7,52,7,53,7,54,7,55,7,56,7,57,7,58, 7,59,7,60,7,61,7,62,7,63,7,64,7,65,7,66, 7,67,7,68,7,69,7,70,7,71,7,72,7,73,7,74, 7,75,0,178,0,179,0,182,0,183,0,196,7,76,0,180, 0,181,0,197,7,77,0,130,0,194,0,135,7,78,0,171, 0,198,7,79,7,80,7,81,7,82,7,83,7,84,7,85, 0,190,0,191,7,86,7,87,7,88,0,188,7,89,7,90, 7,91,7,92,7,93,7,94,7,95,7,96,7,97,7,98, 7,99,7,100,7,101,7,102,7,103,7,104,7,105,7,106, 7,107,7,108,7,109,7,110,7,111,7,112,7,113,7,114, 7,115,7,116,7,117,7,118,7,119,7,120,7,121,7,122, 0,140,7,123,7,124,7,125,7,126,7,127,7,128,7,129, 7,130,7,131,7,132,7,133,7,134,7,135,7,136,7,137, 7,138,7,139,7,140,7,141,7,142,7,143,7,144,7,145, 7,146,7,147,7,148,7,149,7,150,7,151,7,152,7,153, 7,154,7,155,7,156,7,157,7,158,7,159,7,160,7,161, 7,162,7,163,7,164,7,165,7,166,7,167,7,168,7,169, 7,170,7,171,7,172,7,173,7,174,7,175,7,176,7,177, 7,178,7,179,7,180,7,181,7,182,7,183,7,184,7,185, 7,186,7,187,7,188,7,189,7,190,7,191,0,152,7,192, 7,193,0,168,7,194,7,195,7,196,0,154,7,197,0,153, 0,239,7,198,7,199,0,165,7,200,0,146,7,201,7,202, 7,203,7,204,7,205,0,156,7,206,7,207,7,208,7,209, 7,210,7,211,7,212,7,213,7,214,7,215,0,143,0,148, 0,149,7,216,7,217,7,218,7,219,7,220,0,185,7,221, 7,222,7,223,7,224,7,225,7,226,7,227,7,228,7,229, 7,230,7,231,7,232,7,233,7,234,7,235,7,236,7,237, 7,238,7,239,7,240,7,241,7,242,7,243,7,244,7,245, 7,246,7,247,7,248,7,249,7,250,7,251,7,252,7,253, 7,254,7,255,8,0,8,1,8,2,8,3,8,4,8,5, 8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13, 8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21, 8,22,8,23,8,24,8,25,8,26,8,27,8,28,8,29, 8,30,8,31,8,32,8,33,8,34,8,35,8,36,8,37, 8,38,8,39,8,40,8,41,8,42,8,43,8,44,8,45, 8,46,8,47,8,48,8,49,8,50,8,51,8,52,8,53, 8,54,8,55,8,56,8,57,8,58,8,59,8,60,8,61, 8,62,8,63,8,64,8,65,8,66,8,67,8,68,8,69, 8,70,8,71,8,72,8,73,8,74,8,75,8,76,8,77, 8,78,8,79,8,80,8,81,8,82,8,83,8,84,8,85, 8,86,8,87,8,88,8,89,8,90,8,91,8,92,8,93, 8,94,8,95,8,96,8,97,8,98,8,99,8,100,8,101, 8,102,8,103,8,104,8,105,8,106,8,107,8,108,8,109, 8,110,8,111,8,112,8,113,8,114,8,115,8,116,8,117, 8,118,8,119,8,120,8,121,8,122,8,123,8,124,8,125, 8,126,8,127,8,128,8,129,8,130,8,131,8,132,8,133, 8,134,8,135,8,136,8,137,8,138,8,139,8,140,8,141, 8,142,8,143,8,144,8,145,8,146,8,147,8,148,8,149, 8,150,8,151,8,152,8,153,8,154,8,155,8,156,8,157, 8,158,8,159,8,160,8,161,8,162,8,163,8,164,8,165, 8,166,8,167,8,168,8,169,8,170,8,171,8,172,8,173, 8,174,0,192,0,193,8,175,8,176,8,177,8,178,8,179, 8,180,8,181,8,182,8,183,8,184,8,185,8,186,8,187, 8,188,8,189,8,190,8,191,8,192,8,193,8,194,8,195, 8,196,8,197,8,198,8,199,8,200,8,201,8,202,8,203, 8,204,8,205,8,206,8,207,8,208,8,209,8,210,8,211, 8,212,8,213,8,214,8,215,8,216,8,217,8,218,8,219, 8,220,8,221,8,222,8,223,8,224,8,225,5,115,112,97, 99,101,6,101,120,99,108,97,109,8,113,117,111,116,101,100, 98,108,10,110,117,109,98,101,114,115,105,103,110,6,100,111, 108,108,97,114,7,112,101,114,99,101,110,116,9,97,109,112, 101,114,115,97,110,100,11,113,117,111,116,101,115,105,110,103, 108,101,9,112,97,114,101,110,108,101,102,116,10,112,97,114, 101,110,114,105,103,104,116,8,97,115,116,101,114,105,115,107, 4,112,108,117,115,5,99,111,109,109,97,6,104,121,112,104, 101,110,6,112,101,114,105,111,100,5,115,108,97,115,104,4, 122,101,114,111,3,111,110,101,3,116,119,111,5,116,104,114, 101,101,4,102,111,117,114,4,102,105,118,101,3,115,105,120, 5,115,101,118,101,110,5,101,105,103,104,116,4,110,105,110, 101,5,99,111,108,111,110,9,115,101,109,105,99,111,108,111, 110,4,108,101,115,115,5,101,113,117,97,108,7,103,114,101, 97,116,101,114,8,113,117,101,115,116,105,111,110,2,97,116, 1,65,1,66,1,67,1,68,1,69,1,70,1,71,1,72, 1,73,1,74,1,75,1,76,1,77,1,78,1,79,1,80, 1,81,1,82,1,83,1,84,1,85,1,86,1,87,1,88, 1,89,1,90,11,98,114,97,99,107,101,116,108,101,102,116, 9,98,97,99,107,115,108,97,115,104,12,98,114,97,99,107, 101,116,114,105,103,104,116,11,97,115,99,105,105,99,105,114, 99,117,109,10,117,110,100,101,114,115,99,111,114,101,5,103, 114,97,118,101,1,97,1,98,1,99,1,100,1,101,1,102, 1,103,1,104,1,105,1,106,1,107,1,108,1,109,1,110, 1,111,1,112,1,113,1,114,1,115,1,116,1,117,1,118, 1,119,1,120,1,121,1,122,9,98,114,97,99,101,108,101, 102,116,3,98,97,114,10,98,114,97,99,101,114,105,103,104, 116,10,97,115,99,105,105,116,105,108,100,101,10,115,111,102, 116,104,121,112,104,101,110,7,65,109,97,99,114,111,110,7, 97,109,97,99,114,111,110,6,65,98,114,101,118,101,6,97, 98,114,101,118,101,7,65,111,103,111,110,101,107,7,97,111, 103,111,110,101,107,11,67,99,105,114,99,117,109,102,108,101, 120,11,99,99,105,114,99,117,109,102,108,101,120,10,67,100, 111,116,97,99,99,101,110,116,10,99,100,111,116,97,99,99, 101,110,116,6,68,99,97,114,111,110,6,100,99,97,114,111, 110,6,68,99,114,111,97,116,7,69,109,97,99,114,111,110, 7,101,109,97,99,114,111,110,6,69,98,114,101,118,101,6, 101,98,114,101,118,101,10,69,100,111,116,97,99,99,101,110, 116,10,101,100,111,116,97,99,99,101,110,116,7,69,111,103, 111,110,101,107,7,101,111,103,111,110,101,107,6,69,99,97, 114,111,110,6,101,99,97,114,111,110,11,71,99,105,114,99, 117,109,102,108,101,120,11,103,99,105,114,99,117,109,102,108, 101,120,10,71,100,111,116,97,99,99,101,110,116,10,103,100, 111,116,97,99,99,101,110,116,12,71,99,111,109,109,97,97, 99,99,101,110,116,12,103,99,111,109,109,97,97,99,99,101, 110,116,11,72,99,105,114,99,117,109,102,108,101,120,11,104, 99,105,114,99,117,109,102,108,101,120,4,72,98,97,114,4, 104,98,97,114,6,73,116,105,108,100,101,6,105,116,105,108, 100,101,7,73,109,97,99,114,111,110,7,105,109,97,99,114, 111,110,6,73,98,114,101,118,101,6,105,98,114,101,118,101, 7,73,111,103,111,110,101,107,7,105,111,103,111,110,101,107, 2,73,74,2,105,106,11,74,99,105,114,99,117,109,102,108, 101,120,11,106,99,105,114,99,117,109,102,108,101,120,12,75, 99,111,109,109,97,97,99,99,101,110,116,12,107,99,111,109, 109,97,97,99,99,101,110,116,12,107,103,114,101,101,110,108, 97,110,100,105,99,6,76,97,99,117,116,101,6,108,97,99, 117,116,101,12,76,99,111,109,109,97,97,99,99,101,110,116, 12,108,99,111,109,109,97,97,99,99,101,110,116,6,76,99, 97,114,111,110,6,108,99,97,114,111,110,4,76,100,111,116, 4,108,100,111,116,6,78,97,99,117,116,101,6,110,97,99, 117,116,101,12,78,99,111,109,109,97,97,99,99,101,110,116, 12,110,99,111,109,109,97,97,99,99,101,110,116,6,78,99, 97,114,111,110,6,110,99,97,114,111,110,11,110,97,112,111, 115,116,114,111,112,104,101,3,69,110,103,3,101,110,103,7, 79,109,97,99,114,111,110,7,111,109,97,99,114,111,110,6, 79,98,114,101,118,101,6,111,98,114,101,118,101,13,79,104, 117,110,103,97,114,117,109,108,97,117,116,13,111,104,117,110, 103,97,114,117,109,108,97,117,116,6,82,97,99,117,116,101, 6,114,97,99,117,116,101,12,82,99,111,109,109,97,97,99, 99,101,110,116,12,114,99,111,109,109,97,97,99,99,101,110, 116,6,82,99,97,114,111,110,6,114,99,97,114,111,110,6, 83,97,99,117,116,101,6,115,97,99,117,116,101,11,83,99, 105,114,99,117,109,102,108,101,120,11,115,99,105,114,99,117, 109,102,108,101,120,7,117,110,105,48,49,54,50,7,117,110, 105,48,49,54,51,6,84,99,97,114,111,110,6,116,99,97, 114,111,110,4,84,98,97,114,4,116,98,97,114,6,85,116, 105,108,100,101,6,117,116,105,108,100,101,7,85,109,97,99, 114,111,110,7,117,109,97,99,114,111,110,6,85,98,114,101, 118,101,6,117,98,114,101,118,101,5,85,114,105,110,103,5, 117,114,105,110,103,13,85,104,117,110,103,97,114,117,109,108, 97,117,116,13,117,104,117,110,103,97,114,117,109,108,97,117, 116,7,85,111,103,111,110,101,107,7,117,111,103,111,110,101, 107,11,87,99,105,114,99,117,109,102,108,101,120,11,119,99, 105,114,99,117,109,102,108,101,120,11,89,99,105,114,99,117, 109,102,108,101,120,11,121,99,105,114,99,117,109,102,108,101, 120,6,90,97,99,117,116,101,6,122,97,99,117,116,101,10, 90,100,111,116,97,99,99,101,110,116,10,122,100,111,116,97, 99,99,101,110,116,5,108,111,110,103,115,7,117,110,105,48, 49,56,48,7,117,110,105,48,49,56,50,7,117,110,105,48, 49,56,51,7,117,110,105,48,49,56,52,7,117,110,105,48, 49,56,53,7,117,110,105,48,49,56,54,7,117,110,105,48, 49,56,55,7,117,110,105,48,49,56,56,7,117,110,105,48, 49,56,57,7,117,110,105,48,49,56,66,7,117,110,105,48, 49,56,67,7,117,110,105,48,49,56,69,7,117,110,105,48, 49,56,70,7,117,110,105,48,49,57,48,7,117,110,105,48, 49,57,49,7,117,110,105,48,49,57,51,7,117,110,105,48, 49,57,57,7,117,110,105,48,49,57,68,7,117,110,105,48, 49,57,69,7,117,110,105,48,49,57,70,7,117,110,105,48, 49,65,53,7,117,110,105,48,49,65,55,7,117,110,105,48, 49,65,56,7,117,110,105,48,49,65,57,7,117,110,105,48, 49,65,66,7,117,110,105,48,49,65,68,7,117,110,105,48, 49,65,69,7,117,110,105,48,49,67,52,7,117,110,105,48, 49,67,53,7,117,110,105,48,49,67,54,7,117,110,105,48, 49,67,55,7,117,110,105,48,49,67,56,7,117,110,105,48, 49,67,57,7,117,110,105,48,49,67,65,7,117,110,105,48, 49,67,66,7,117,110,105,48,49,67,67,7,117,110,105,48, 49,67,68,7,117,110,105,48,49,67,69,7,117,110,105,48, 49,67,70,7,117,110,105,48,49,68,48,7,117,110,105,48, 49,68,49,7,117,110,105,48,49,68,50,7,117,110,105,48, 49,68,51,7,117,110,105,48,49,68,52,7,117,110,105,48, 49,68,53,7,117,110,105,48,49,68,54,7,117,110,105,48, 49,68,55,7,117,110,105,48,49,68,56,7,117,110,105,48, 49,68,57,7,117,110,105,48,49,68,65,7,117,110,105,48, 49,68,66,7,117,110,105,48,49,68,67,7,117,110,105,48, 49,68,68,7,117,110,105,48,49,68,69,7,117,110,105,48, 49,68,70,7,117,110,105,48,49,69,48,7,117,110,105,48, 49,69,49,7,117,110,105,48,49,69,50,7,117,110,105,48, 49,69,51,6,71,99,97,114,111,110,6,103,99,97,114,111, 110,7,117,110,105,48,49,69,56,7,117,110,105,48,49,69, 57,7,117,110,105,48,49,69,65,7,117,110,105,48,49,69, 66,7,117,110,105,48,49,69,67,7,117,110,105,48,49,69, 68,7,117,110,105,48,49,70,48,7,117,110,105,48,49,70, 49,7,117,110,105,48,49,70,50,7,117,110,105,48,49,70, 51,7,117,110,105,48,49,70,52,7,117,110,105,48,49,70, 53,7,117,110,105,48,49,70,56,7,117,110,105,48,49,70, 57,10,65,114,105,110,103,97,99,117,116,101,10,97,114,105, 110,103,97,99,117,116,101,7,65,69,97,99,117,116,101,7, 97,101,97,99,117,116,101,11,79,115,108,97,115,104,97,99, 117,116,101,11,111,115,108,97,115,104,97,99,117,116,101,7, 117,110,105,48,50,48,48,7,117,110,105,48,50,48,49,7, 117,110,105,48,50,48,50,7,117,110,105,48,50,48,51,7, 117,110,105,48,50,48,52,7,117,110,105,48,50,48,53,7, 117,110,105,48,50,48,54,7,117,110,105,48,50,48,55,7, 117,110,105,48,50,48,56,7,117,110,105,48,50,48,57,7, 117,110,105,48,50,48,65,7,117,110,105,48,50,48,66,7, 117,110,105,48,50,48,67,7,117,110,105,48,50,48,68,7, 117,110,105,48,50,48,69,7,117,110,105,48,50,48,70,7, 117,110,105,48,50,49,48,7,117,110,105,48,50,49,49,7, 117,110,105,48,50,49,50,7,117,110,105,48,50,49,51,7, 117,110,105,48,50,49,52,7,117,110,105,48,50,49,53,7, 117,110,105,48,50,49,54,7,117,110,105,48,50,49,55,12, 83,99,111,109,109,97,97,99,99,101,110,116,12,115,99,111, 109,109,97,97,99,99,101,110,116,12,84,99,111,109,109,97, 97,99,99,101,110,116,12,116,99,111,109,109,97,97,99,99, 101,110,116,7,117,110,105,48,50,49,69,7,117,110,105,48, 50,49,70,7,117,110,105,48,50,50,54,7,117,110,105,48, 50,50,55,7,117,110,105,48,50,50,56,7,117,110,105,48, 50,50,57,7,117,110,105,48,50,50,65,7,117,110,105,48, 50,50,66,7,117,110,105,48,50,50,67,7,117,110,105,48, 50,50,68,7,117,110,105,48,50,50,69,7,117,110,105,48, 50,50,70,7,117,110,105,48,50,51,48,7,117,110,105,48, 50,51,49,7,117,110,105,48,50,51,50,7,117,110,105,48, 50,51,51,7,117,110,105,48,50,53,48,7,117,110,105,48, 50,53,49,7,117,110,105,48,50,53,50,7,117,110,105,48, 50,53,51,7,117,110,105,48,50,53,52,7,117,110,105,48, 50,53,54,7,117,110,105,48,50,53,55,7,117,110,105,48, 50,53,56,7,117,110,105,48,50,53,57,7,117,110,105,48, 50,53,66,7,117,110,105,48,50,53,67,7,117,110,105,48, 50,54,48,7,117,110,105,48,50,54,49,7,117,110,105,48, 50,54,53,7,117,110,105,48,50,54,54,7,117,110,105,48, 50,54,55,7,117,110,105,48,50,54,56,7,117,110,105,48, 50,54,57,7,117,110,105,48,50,54,65,7,117,110,105,48, 50,54,68,7,117,110,105,48,50,54,70,7,117,110,105,48, 50,55,48,7,117,110,105,48,50,55,49,7,117,110,105,48, 50,55,50,7,117,110,105,48,50,55,51,7,117,110,105,48, 50,55,53,7,117,110,105,48,50,55,57,7,117,110,105,48, 50,55,65,7,117,110,105,48,50,55,66,7,117,110,105,48, 50,55,67,7,117,110,105,48,50,55,68,7,117,110,105,48, 50,55,69,7,117,110,105,48,50,55,70,7,117,110,105,48, 50,56,50,7,117,110,105,48,50,56,51,7,117,110,105,48, 50,56,52,7,117,110,105,48,50,56,53,7,117,110,105,48, 50,56,55,7,117,110,105,48,50,56,56,7,117,110,105,48, 50,56,57,7,117,110,105,48,50,56,67,7,117,110,105,48, 50,56,68,7,117,110,105,48,50,56,69,7,117,110,105,48, 50,57,48,7,117,110,105,48,50,57,67,7,117,110,105,48, 50,57,69,7,117,110,105,48,50,65,48,7,117,110,105,48, 50,67,65,7,117,110,105,48,50,67,66,9,103,114,97,118, 101,99,111,109,98,9,97,99,117,116,101,99,111,109,98,7, 117,110,105,48,51,48,50,9,116,105,108,100,101,99,111,109, 98,7,117,110,105,48,51,48,52,7,117,110,105,48,51,48, 54,7,117,110,105,48,51,48,55,7,117,110,105,48,51,48, 56,7,117,110,105,48,51,48,65,7,117,110,105,48,51,48, 66,7,117,110,105,48,51,48,67,7,117,110,105,48,51,48, 70,7,117,110,105,48,51,49,49,7,117,110,105,48,51,49, 50,7,117,110,105,48,51,49,51,7,117,110,105,48,51,49, 52,7,117,110,105,48,51,50,54,7,117,110,105,48,51,50, 55,7,117,110,105,48,51,50,56,7,117,110,105,48,51,55, 52,7,117,110,105,48,51,55,53,7,117,110,105,48,51,55, 65,7,117,110,105,48,51,55,69,5,116,111,110,111,115,13, 100,105,101,114,101,115,105,115,116,111,110,111,115,10,65,108, 112,104,97,116,111,110,111,115,9,97,110,111,116,101,108,101, 105,97,12,69,112,115,105,108,111,110,116,111,110,111,115,8, 69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110, 111,115,12,79,109,105,99,114,111,110,116,111,110,111,115,12, 85,112,115,105,108,111,110,116,111,110,111,115,10,79,109,101, 103,97,116,111,110,111,115,17,105,111,116,97,100,105,101,114, 101,115,105,115,116,111,110,111,115,5,65,108,112,104,97,4, 66,101,116,97,5,71,97,109,109,97,7,117,110,105,48,51, 57,52,7,69,112,115,105,108,111,110,4,90,101,116,97,3, 69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75, 97,112,112,97,6,76,97,109,98,100,97,2,77,117,2,78, 117,2,88,105,7,79,109,105,99,114,111,110,2,80,105,3, 82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112, 115,105,108,111,110,3,80,104,105,3,67,104,105,3,80,115, 105,7,117,110,105,48,51,65,57,12,73,111,116,97,100,105, 101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105, 101,114,101,115,105,115,10,97,108,112,104,97,116,111,110,111, 115,12,101,112,115,105,108,111,110,116,111,110,111,115,8,101, 116,97,116,111,110,111,115,9,105,111,116,97,116,111,110,111, 115,20,117,112,115,105,108,111,110,100,105,101,114,101,115,105, 115,116,111,110,111,115,5,97,108,112,104,97,4,98,101,116, 97,5,103,97,109,109,97,5,100,101,108,116,97,7,101,112, 115,105,108,111,110,4,122,101,116,97,3,101,116,97,5,116, 104,101,116,97,4,105,111,116,97,5,107,97,112,112,97,6, 108,97,109,98,100,97,7,117,110,105,48,51,66,67,2,110, 117,2,120,105,7,111,109,105,99,114,111,110,3,114,104,111, 6,115,105,103,109,97,49,5,115,105,103,109,97,3,116,97, 117,7,117,112,115,105,108,111,110,3,112,104,105,3,99,104, 105,3,112,115,105,5,111,109,101,103,97,12,105,111,116,97, 100,105,101,114,101,115,105,115,15,117,112,115,105,108,111,110, 100,105,101,114,101,115,105,115,12,111,109,105,99,114,111,110, 116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110, 111,115,10,111,109,101,103,97,116,111,110,111,115,7,117,110, 105,48,52,48,48,9,97,102,105,105,49,48,48,50,51,9, 97,102,105,105,49,48,48,53,49,9,97,102,105,105,49,48, 48,53,50,9,97,102,105,105,49,48,48,53,51,9,97,102, 105,105,49,48,48,53,52,9,97,102,105,105,49,48,48,53, 53,9,97,102,105,105,49,48,48,53,54,9,97,102,105,105, 49,48,48,53,55,9,97,102,105,105,49,48,48,53,56,9, 97,102,105,105,49,48,48,53,57,9,97,102,105,105,49,48, 48,54,48,9,97,102,105,105,49,48,48,54,49,7,117,110, 105,48,52,48,68,9,97,102,105,105,49,48,48,54,50,9, 97,102,105,105,49,48,49,52,53,9,97,102,105,105,49,48, 48,49,55,9,97,102,105,105,49,48,48,49,56,9,97,102, 105,105,49,48,48,49,57,9,97,102,105,105,49,48,48,50, 48,9,97,102,105,105,49,48,48,50,49,9,97,102,105,105, 49,48,48,50,50,9,97,102,105,105,49,48,48,50,52,9, 97,102,105,105,49,48,48,50,53,9,97,102,105,105,49,48, 48,50,54,9,97,102,105,105,49,48,48,50,55,9,97,102, 105,105,49,48,48,50,56,9,97,102,105,105,49,48,48,50, 57,9,97,102,105,105,49,48,48,51,48,9,97,102,105,105, 49,48,48,51,49,9,97,102,105,105,49,48,48,51,50,9, 97,102,105,105,49,48,48,51,51,9,97,102,105,105,49,48, 48,51,52,9,97,102,105,105,49,48,48,51,53,9,97,102, 105,105,49,48,48,51,54,9,97,102,105,105,49,48,48,51, 55,9,97,102,105,105,49,48,48,51,56,9,97,102,105,105, 49,48,48,51,57,9,97,102,105,105,49,48,48,52,48,9, 97,102,105,105,49,48,48,52,49,9,97,102,105,105,49,48, 48,52,50,9,97,102,105,105,49,48,48,52,51,9,97,102, 105,105,49,48,48,52,52,9,97,102,105,105,49,48,48,52, 53,9,97,102,105,105,49,48,48,52,54,9,97,102,105,105, 49,48,48,52,55,9,97,102,105,105,49,48,48,52,56,9, 97,102,105,105,49,48,48,52,57,9,97,102,105,105,49,48, 48,54,53,9,97,102,105,105,49,48,48,54,54,9,97,102, 105,105,49,48,48,54,55,9,97,102,105,105,49,48,48,54, 56,9,97,102,105,105,49,48,48,54,57,9,97,102,105,105, 49,48,48,55,48,9,97,102,105,105,49,48,48,55,50,9, 97,102,105,105,49,48,48,55,51,9,97,102,105,105,49,48, 48,55,52,9,97,102,105,105,49,48,48,55,53,9,97,102, 105,105,49,48,48,55,54,9,97,102,105,105,49,48,48,55, 55,9,97,102,105,105,49,48,48,55,56,9,97,102,105,105, 49,48,48,55,57,9,97,102,105,105,49,48,48,56,48,9, 97,102,105,105,49,48,48,56,49,9,97,102,105,105,49,48, 48,56,50,9,97,102,105,105,49,48,48,56,51,9,97,102, 105,105,49,48,48,56,52,9,97,102,105,105,49,48,48,56, 53,9,97,102,105,105,49,48,48,56,54,9,97,102,105,105, 49,48,48,56,55,9,97,102,105,105,49,48,48,56,56,9, 97,102,105,105,49,48,48,56,57,9,97,102,105,105,49,48, 48,57,48,9,97,102,105,105,49,48,48,57,49,9,97,102, 105,105,49,48,48,57,50,9,97,102,105,105,49,48,48,57, 51,9,97,102,105,105,49,48,48,57,52,9,97,102,105,105, 49,48,48,57,53,9,97,102,105,105,49,48,48,57,54,9, 97,102,105,105,49,48,48,57,55,7,117,110,105,48,52,53, 48,9,97,102,105,105,49,48,48,55,49,9,97,102,105,105, 49,48,48,57,57,9,97,102,105,105,49,48,49,48,48,9, 97,102,105,105,49,48,49,48,49,9,97,102,105,105,49,48, 49,48,50,9,97,102,105,105,49,48,49,48,51,9,97,102, 105,105,49,48,49,48,52,9,97,102,105,105,49,48,49,48, 53,9,97,102,105,105,49,48,49,48,54,9,97,102,105,105, 49,48,49,48,55,9,97,102,105,105,49,48,49,48,56,9, 97,102,105,105,49,48,49,48,57,7,117,110,105,48,52,53, 68,9,97,102,105,105,49,48,49,49,48,9,97,102,105,105, 49,48,49,57,51,7,117,110,105,48,52,56,67,7,117,110, 105,48,52,56,68,7,117,110,105,48,52,56,69,7,117,110, 105,48,52,56,70,9,97,102,105,105,49,48,48,53,48,9, 97,102,105,105,49,48,48,57,56,7,117,110,105,48,52,57, 50,7,117,110,105,48,52,57,51,7,117,110,105,48,52,57, 52,7,117,110,105,48,52,57,53,7,117,110,105,48,52,57, 54,7,117,110,105,48,52,57,55,7,117,110,105,48,52,57, 56,7,117,110,105,48,52,57,57,7,117,110,105,48,52,57, 65,7,117,110,105,48,52,57,66,7,117,110,105,48,52,57, 67,7,117,110,105,48,52,57,68,7,117,110,105,48,52,57, 69,7,117,110,105,48,52,57,70,7,117,110,105,48,52,65, 48,7,117,110,105,48,52,65,49,7,117,110,105,48,52,65, 50,7,117,110,105,48,52,65,51,7,117,110,105,48,52,65, 52,7,117,110,105,48,52,65,53,7,117,110,105,48,52,65, 54,7,117,110,105,48,52,65,55,7,117,110,105,48,52,65, 56,7,117,110,105,48,52,65,57,7,117,110,105,48,52,65, 65,7,117,110,105,48,52,65,66,7,117,110,105,48,52,65, 67,7,117,110,105,48,52,65,68,7,117,110,105,48,52,65, 69,7,117,110,105,48,52,65,70,7,117,110,105,48,52,66, 48,7,117,110,105,48,52,66,49,7,117,110,105,48,52,66, 50,7,117,110,105,48,52,66,51,7,117,110,105,48,52,66, 52,7,117,110,105,48,52,66,53,7,117,110,105,48,52,66, 54,7,117,110,105,48,52,66,55,7,117,110,105,48,52,66, 56,7,117,110,105,48,52,66,57,7,117,110,105,48,52,66, 65,7,117,110,105,48,52,66,66,7,117,110,105,48,52,66, 67,7,117,110,105,48,52,66,68,7,117,110,105,48,52,66, 69,7,117,110,105,48,52,66,70,7,117,110,105,48,52,67, 48,7,117,110,105,48,52,67,49,7,117,110,105,48,52,67, 50,7,117,110,105,48,52,67,51,7,117,110,105,48,52,67, 52,7,117,110,105,48,52,67,55,7,117,110,105,48,52,67, 56,7,117,110,105,48,52,67,66,7,117,110,105,48,52,67, 67,7,117,110,105,48,52,68,48,7,117,110,105,48,52,68, 49,7,117,110,105,48,52,68,50,7,117,110,105,48,52,68, 51,7,117,110,105,48,52,68,52,7,117,110,105,48,52,68, 53,7,117,110,105,48,52,68,54,7,117,110,105,48,52,68, 55,7,117,110,105,48,52,68,56,9,97,102,105,105,49,48, 56,52,54,7,117,110,105,48,52,68,65,7,117,110,105,48, 52,68,66,7,117,110,105,48,52,68,67,7,117,110,105,48, 52,68,68,7,117,110,105,48,52,68,69,7,117,110,105,48, 52,68,70,7,117,110,105,48,52,69,48,7,117,110,105,48, 52,69,49,7,117,110,105,48,52,69,50,7,117,110,105,48, 52,69,51,7,117,110,105,48,52,69,52,7,117,110,105,48, 52,69,53,7,117,110,105,48,52,69,54,7,117,110,105,48, 52,69,55,7,117,110,105,48,52,69,56,7,117,110,105,48, 52,69,57,7,117,110,105,48,52,69,65,7,117,110,105,48, 52,69,66,7,117,110,105,48,52,69,67,7,117,110,105,48, 52,69,68,7,117,110,105,48,52,69,69,7,117,110,105,48, 52,69,70,7,117,110,105,48,52,70,48,7,117,110,105,48, 52,70,49,7,117,110,105,48,52,70,50,7,117,110,105,48, 52,70,51,7,117,110,105,48,52,70,52,7,117,110,105,48, 52,70,53,7,117,110,105,48,52,70,56,7,117,110,105,48, 52,70,57,7,117,110,105,48,53,51,49,7,117,110,105,48, 53,51,50,7,117,110,105,48,53,51,51,7,117,110,105,48, 53,51,52,7,117,110,105,48,53,51,53,7,117,110,105,48, 53,51,54,7,117,110,105,48,53,51,55,7,117,110,105,48, 53,51,56,7,117,110,105,48,53,51,57,7,117,110,105,48, 53,51,65,7,117,110,105,48,53,51,66,7,117,110,105,48, 53,51,67,7,117,110,105,48,53,51,68,7,117,110,105,48, 53,51,69,7,117,110,105,48,53,51,70,7,117,110,105,48, 53,52,48,7,117,110,105,48,53,52,49,7,117,110,105,48, 53,52,50,7,117,110,105,48,53,52,51,7,117,110,105,48, 53,52,52,7,117,110,105,48,53,52,53,7,117,110,105,48, 53,52,54,7,117,110,105,48,53,52,55,7,117,110,105,48, 53,52,56,7,117,110,105,48,53,52,57,7,117,110,105,48, 53,52,65,7,117,110,105,48,53,52,66,7,117,110,105,48, 53,52,67,7,117,110,105,48,53,52,68,7,117,110,105,48, 53,52,69,7,117,110,105,48,53,52,70,7,117,110,105,48, 53,53,48,7,117,110,105,48,53,53,49,7,117,110,105,48, 53,53,50,7,117,110,105,48,53,53,51,7,117,110,105,48, 53,53,52,7,117,110,105,48,53,53,53,7,117,110,105,48, 53,53,54,7,117,110,105,48,53,53,65,7,117,110,105,48, 53,53,66,7,117,110,105,48,53,53,67,7,117,110,105,48, 53,53,68,7,117,110,105,48,53,53,69,7,117,110,105,48, 53,54,49,7,117,110,105,48,53,54,50,7,117,110,105,48, 53,54,51,7,117,110,105,48,53,54,52,7,117,110,105,48, 53,54,53,7,117,110,105,48,53,54,54,7,117,110,105,48, 53,54,55,7,117,110,105,48,53,54,56,7,117,110,105,48, 53,54,57,7,117,110,105,48,53,54,65,7,117,110,105,48, 53,54,66,7,117,110,105,48,53,54,67,7,117,110,105,48, 53,54,68,7,117,110,105,48,53,54,69,7,117,110,105,48, 53,54,70,7,117,110,105,48,53,55,48,7,117,110,105,48, 53,55,49,7,117,110,105,48,53,55,50,7,117,110,105,48, 53,55,51,7,117,110,105,48,53,55,52,7,117,110,105,48, 53,55,53,7,117,110,105,48,53,55,54,7,117,110,105,48, 53,55,55,7,117,110,105,48,53,55,56,7,117,110,105,48, 53,55,57,7,117,110,105,48,53,55,65,7,117,110,105,48, 53,55,66,7,117,110,105,48,53,55,67,7,117,110,105,48, 53,55,68,7,117,110,105,48,53,55,69,7,117,110,105,48, 53,55,70,7,117,110,105,48,53,56,48,7,117,110,105,48, 53,56,49,7,117,110,105,48,53,56,50,7,117,110,105,48, 53,56,51,7,117,110,105,48,53,56,52,7,117,110,105,48, 53,56,53,7,117,110,105,48,53,56,54,7,117,110,105,48, 53,56,55,7,117,110,105,48,53,56,57,7,117,110,105,48, 53,56,65,9,97,102,105,105,53,55,55,57,57,9,97,102, 105,105,53,55,56,48,49,9,97,102,105,105,53,55,56,48, 48,9,97,102,105,105,53,55,56,48,50,9,97,102,105,105, 53,55,55,57,51,9,97,102,105,105,53,55,55,57,52,9, 97,102,105,105,53,55,55,57,53,9,97,102,105,105,53,55, 55,57,56,9,97,102,105,105,53,55,55,57,55,9,97,102, 105,105,53,55,56,48,54,9,97,102,105,105,53,55,55,57, 54,9,97,102,105,105,53,55,56,48,55,9,97,102,105,105, 53,55,56,51,57,9,97,102,105,105,53,55,54,52,53,9, 97,102,105,105,53,55,56,52,49,9,97,102,105,105,53,55, 56,52,50,9,97,102,105,105,53,55,56,48,52,9,97,102, 105,105,53,55,56,48,51,9,97,102,105,105,53,55,54,53, 56,7,117,110,105,48,53,67,52,9,97,102,105,105,53,55, 54,54,52,9,97,102,105,105,53,55,54,54,53,9,97,102, 105,105,53,55,54,54,54,9,97,102,105,105,53,55,54,54, 55,9,97,102,105,105,53,55,54,54,56,9,97,102,105,105, 53,55,54,54,57,9,97,102,105,105,53,55,54,55,48,9, 97,102,105,105,53,55,54,55,49,9,97,102,105,105,53,55, 54,55,50,9,97,102,105,105,53,55,54,55,51,9,97,102, 105,105,53,55,54,55,52,9,97,102,105,105,53,55,54,55, 53,9,97,102,105,105,53,55,54,55,54,9,97,102,105,105, 53,55,54,55,55,9,97,102,105,105,53,55,54,55,56,9, 97,102,105,105,53,55,54,55,57,9,97,102,105,105,53,55, 54,56,48,9,97,102,105,105,53,55,54,56,49,9,97,102, 105,105,53,55,54,56,50,9,97,102,105,105,53,55,54,56, 51,9,97,102,105,105,53,55,54,56,52,9,97,102,105,105, 53,55,54,56,53,9,97,102,105,105,53,55,54,56,54,9, 97,102,105,105,53,55,54,56,55,9,97,102,105,105,53,55, 54,56,56,9,97,102,105,105,53,55,54,56,57,9,97,102, 105,105,53,55,54,57,48,7,117,110,105,48,55,48,48,7, 117,110,105,48,55,48,49,7,117,110,105,48,55,48,50,7, 117,110,105,48,55,48,51,7,117,110,105,48,55,48,52,7, 117,110,105,48,55,48,53,7,117,110,105,48,55,48,54,7, 117,110,105,48,55,48,55,7,117,110,105,48,55,48,56,7, 117,110,105,48,55,48,57,7,117,110,105,48,55,48,65,7, 117,110,105,48,55,48,66,7,117,110,105,48,55,48,67,7, 117,110,105,48,55,48,68,7,117,110,105,48,55,49,48,7, 117,110,105,48,55,49,49,7,117,110,105,48,55,49,50,7, 117,110,105,48,55,49,51,7,117,110,105,48,55,49,52,7, 117,110,105,48,55,49,53,7,117,110,105,48,55,49,54,7, 117,110,105,48,55,49,55,7,117,110,105,48,55,49,56,7, 117,110,105,48,55,49,57,7,117,110,105,48,55,49,65,7, 117,110,105,48,55,49,66,7,117,110,105,48,55,49,67,7, 117,110,105,48,55,49,68,7,117,110,105,48,55,49,69,7, 117,110,105,48,55,49,70,7,117,110,105,48,55,50,48,7, 117,110,105,48,55,50,49,7,117,110,105,48,55,50,50,7, 117,110,105,48,55,50,51,7,117,110,105,48,55,50,52,7, 117,110,105,48,55,50,53,7,117,110,105,48,55,50,54,7, 117,110,105,48,55,50,55,7,117,110,105,48,55,50,56,7, 117,110,105,48,55,50,57,7,117,110,105,48,55,50,65,7, 117,110,105,48,55,50,66,7,117,110,105,48,55,50,67,7, 117,110,105,48,55,51,48,7,117,110,105,48,55,51,49,7, 117,110,105,48,55,51,50,7,117,110,105,48,55,51,51,7, 117,110,105,48,55,51,52,7,117,110,105,48,55,51,53,7, 117,110,105,48,55,51,54,7,117,110,105,48,55,51,55,7, 117,110,105,48,55,51,56,7,117,110,105,48,55,51,57,7, 117,110,105,48,55,51,65,7,117,110,105,48,55,51,66,7, 117,110,105,48,55,51,67,7,117,110,105,48,55,51,68,7, 117,110,105,48,55,51,69,7,117,110,105,48,55,51,70,7, 117,110,105,48,55,52,48,7,117,110,105,48,55,52,49,7, 117,110,105,48,55,52,50,7,117,110,105,48,55,52,51,7, 117,110,105,48,55,52,52,7,117,110,105,48,55,52,53,7, 117,110,105,48,55,52,54,7,117,110,105,48,55,52,55,7, 117,110,105,48,55,52,56,7,117,110,105,48,55,52,57,7, 117,110,105,48,55,52,65,7,117,110,105,48,57,48,49,7, 117,110,105,48,57,48,50,7,117,110,105,48,57,48,53,7, 117,110,105,48,57,48,54,7,117,110,105,48,57,48,55,7, 117,110,105,48,57,48,56,7,117,110,105,48,57,48,57,7, 117,110,105,48,57,48,65,7,117,110,105,48,57,48,66,7, 117,110,105,48,57,48,68,7,117,110,105,48,57,49,48,7, 117,110,105,48,57,49,49,7,117,110,105,48,57,49,51,7, 117,110,105,48,57,49,52,7,117,110,105,48,57,49,53,7, 117,110,105,48,57,49,54,7,117,110,105,48,57,49,55,7, 117,110,105,48,57,49,56,7,117,110,105,48,57,49,57,7, 117,110,105,48,57,49,65,7,117,110,105,48,57,49,66,7, 117,110,105,48,57,49,67,7,117,110,105,48,57,49,68,7, 117,110,105,48,57,49,69,7,117,110,105,48,57,49,70,7, 117,110,105,48,57,50,48,7,117,110,105,48,57,50,49,7, 117,110,105,48,57,50,50,7,117,110,105,48,57,50,51,7, 117,110,105,48,57,50,52,7,117,110,105,48,57,50,53,7, 117,110,105,48,57,50,54,7,117,110,105,48,57,50,55,7, 117,110,105,48,57,50,56,7,117,110,105,48,57,50,57,7, 117,110,105,48,57,50,65,7,117,110,105,48,57,50,66,7, 117,110,105,48,57,50,67,7,117,110,105,48,57,50,68,7, 117,110,105,48,57,50,69,7,117,110,105,48,57,50,70,7, 117,110,105,48,57,51,48,7,117,110,105,48,57,51,49,7, 117,110,105,48,57,51,50,7,117,110,105,48,57,51,51,7, 117,110,105,48,57,51,53,7,117,110,105,48,57,51,54,7, 117,110,105,48,57,51,55,7,117,110,105,48,57,51,56,7, 117,110,105,48,57,51,57,7,117,110,105,48,57,51,67,7, 117,110,105,48,57,51,68,7,117,110,105,48,57,51,69,7, 117,110,105,48,57,51,70,7,117,110,105,48,57,52,48,7, 117,110,105,48,57,52,49,7,117,110,105,48,57,52,50,7, 117,110,105,48,57,52,51,7,117,110,105,48,57,52,53,7, 117,110,105,48,57,52,55,7,117,110,105,48,57,52,56,7, 117,110,105,48,57,52,57,7,117,110,105,48,57,52,66,7, 117,110,105,48,57,52,67,7,117,110,105,48,57,52,68,7, 117,110,105,48,57,53,48,7,117,110,105,48,57,53,49,7, 117,110,105,48,57,54,54,7,117,110,105,48,57,54,55,7, 117,110,105,48,57,54,56,7,117,110,105,48,57,54,57,7, 117,110,105,48,57,54,65,7,117,110,105,48,57,54,66,7, 117,110,105,48,57,54,67,7,117,110,105,48,57,54,68,7, 117,110,105,48,57,54,69,7,117,110,105,48,57,54,70,7, 117,110,105,48,57,55,48,7,117,110,105,48,57,56,49,7, 117,110,105,48,57,56,50,7,117,110,105,48,57,56,51,7, 117,110,105,48,57,56,53,7,117,110,105,48,57,56,54,7, 117,110,105,48,57,56,55,7,117,110,105,48,57,56,56,7, 117,110,105,48,57,56,57,7,117,110,105,48,57,56,65,7, 117,110,105,48,57,56,66,7,117,110,105,48,57,56,67,7, 117,110,105,48,57,56,70,7,117,110,105,48,57,57,48,7, 117,110,105,48,57,57,51,7,117,110,105,48,57,57,52,7, 117,110,105,48,57,57,53,7,117,110,105,48,57,57,54,7, 117,110,105,48,57,57,55,7,117,110,105,48,57,57,56,7, 117,110,105,48,57,57,57,7,117,110,105,48,57,57,65,7, 117,110,105,48,57,57,66,7,117,110,105,48,57,57,67,7, 117,110,105,48,57,57,68,7,117,110,105,48,57,57,69,7, 117,110,105,48,57,57,70,7,117,110,105,48,57,65,48,7, 117,110,105,48,57,65,49,7,117,110,105,48,57,65,50,7, 117,110,105,48,48,67,49,7,117,110,105,48,57,65,52,7, 117,110,105,48,57,65,53,7,117,110,105,48,48,67,52,7, 117,110,105,48,57,65,55,7,117,110,105,48,48,67,54,7, 117,110,105,48,48,67,56,7,117,110,105,48,57,65,66,7, 117,110,105,48,57,65,67,7,117,110,105,48,57,65,68,7, 117,110,105,48,57,65,69,7,117,110,105,48,57,65,70,7, 117,110,105,48,57,66,48,7,117,110,105,48,57,66,50,7, 117,110,105,48,48,66,54,7,117,110,105,48,57,66,55,7, 117,110,105,48,57,66,56,7,117,110,105,48,57,66,57,7, 117,110,105,48,57,66,67,7,117,110,105,48,48,68,65,7, 117,110,105,48,57,66,70,7,117,110,105,48,57,67,48,7, 117,110,105,48,57,67,49,7,117,110,105,48,57,67,50,7, 117,110,105,48,57,67,51,7,117,110,105,48,57,67,52,7, 117,110,105,48,57,67,55,7,117,110,105,48,57,67,56,7, 117,110,105,48,57,67,66,7,117,110,105,48,57,67,67,7, 117,110,105,48,57,67,68,7,117,110,105,48,57,68,55,7, 117,110,105,48,57,68,67,7,117,110,105,48,57,68,68,7, 117,110,105,48,57,68,70,7,117,110,105,48,57,69,48,7, 117,110,105,48,57,69,49,7,117,110,105,48,57,69,50,7, 117,110,105,48,57,69,51,7,117,110,105,48,48,70,49,7, 117,110,105,48,48,70,50,7,117,110,105,48,48,70,51,7, 117,110,105,48,48,70,52,7,117,110,105,48,48,70,53,7, 117,110,105,48,48,70,54,7,117,110,105,48,48,70,55,7, 117,110,105,48,48,70,56,7,117,110,105,48,48,70,57,7, 117,110,105,48,48,70,65,7,117,110,105,48,57,70,48,7, 117,110,105,48,57,70,49,7,117,110,105,48,57,70,50,7, 117,110,105,48,57,70,51,7,117,110,105,48,57,70,52,7, 117,110,105,48,57,70,53,7,117,110,105,48,57,70,54,7, 117,110,105,48,57,70,55,7,117,110,105,48,57,70,56,7, 117,110,105,48,57,70,57,7,117,110,105,48,57,70,65,7, 117,110,105,48,65,48,53,7,117,110,105,48,65,48,54,7, 117,110,105,48,65,48,55,7,117,110,105,48,65,48,56,7, 117,110,105,48,65,48,57,7,117,110,105,48,65,48,65,7, 117,110,105,48,65,48,70,7,117,110,105,48,65,49,48,7, 117,110,105,48,65,49,51,7,117,110,105,48,65,49,52,7, 117,110,105,48,65,49,53,7,117,110,105,48,65,49,54,7, 117,110,105,48,65,49,55,7,117,110,105,48,65,49,56,7, 117,110,105,48,65,49,57,7,117,110,105,48,65,49,65,7, 117,110,105,48,65,49,66,7,117,110,105,48,65,49,67,7, 117,110,105,48,65,49,68,7,117,110,105,48,65,49,69,7, 117,110,105,48,65,49,70,7,117,110,105,48,65,50,48,7, 117,110,105,48,65,50,49,7,117,110,105,48,65,50,50,7, 117,110,105,48,65,50,51,7,117,110,105,48,65,50,52,7, 117,110,105,48,65,50,53,7,117,110,105,48,65,50,54,7, 117,110,105,48,65,50,55,7,117,110,105,48,65,50,56,7, 117,110,105,48,65,50,65,7,117,110,105,48,65,50,66,7, 117,110,105,48,65,50,67,7,117,110,105,48,65,50,68,7, 117,110,105,48,65,50,69,7,117,110,105,48,65,50,70,7, 117,110,105,48,65,51,48,7,117,110,105,48,65,51,50,7, 117,110,105,48,65,51,51,7,117,110,105,48,65,51,53,7, 117,110,105,48,65,51,54,7,117,110,105,48,65,51,56,7, 117,110,105,48,65,51,57,7,117,110,105,48,65,51,67,7, 117,110,105,48,65,51,69,7,117,110,105,48,65,51,70,7, 117,110,105,48,65,52,48,7,117,110,105,48,65,52,49,7, 117,110,105,48,65,52,50,7,117,110,105,48,65,52,55,7, 117,110,105,48,65,52,56,7,117,110,105,48,65,52,66,7, 117,110,105,48,65,52,67,7,117,110,105,48,65,52,68,7, 117,110,105,48,65,53,57,7,117,110,105,48,65,53,65,7, 117,110,105,48,65,53,66,7,117,110,105,48,65,53,67,7, 117,110,105,48,65,53,69,7,117,110,105,48,65,54,54,7, 117,110,105,48,65,54,55,7,117,110,105,48,65,54,56,7, 117,110,105,48,65,54,57,7,117,110,105,48,65,54,65,7, 117,110,105,48,65,54,66,7,117,110,105,48,65,54,67,7, 117,110,105,48,65,54,68,7,117,110,105,48,65,54,69,7, 117,110,105,48,65,54,70,7,117,110,105,48,65,55,48,7, 117,110,105,48,65,55,50,7,117,110,105,48,65,55,51,7, 117,110,105,48,65,55,52,7,117,110,105,48,65,56,49,7, 117,110,105,48,65,56,50,7,117,110,105,48,65,56,53,7, 117,110,105,48,65,56,54,7,117,110,105,48,65,56,55,7, 117,110,105,48,65,56,56,7,117,110,105,48,65,56,57,7, 117,110,105,48,65,56,65,7,117,110,105,48,65,56,66,7, 117,110,105,48,65,57,53,7,117,110,105,48,65,57,54,7, 117,110,105,48,65,57,55,7,117,110,105,48,65,57,56,7, 117,110,105,48,65,57,57,7,117,110,105,48,65,57,65,7, 117,110,105,48,65,57,66,7,117,110,105,48,65,57,67,7, 117,110,105,48,65,57,68,7,117,110,105,48,65,57,69,7, 117,110,105,48,65,57,70,7,117,110,105,48,65,65,48,7, 117,110,105,48,65,65,49,7,117,110,105,48,65,65,50,7, 117,110,105,48,65,65,51,7,117,110,105,48,65,65,52,7, 117,110,105,48,65,65,53,7,117,110,105,48,65,65,54,7, 117,110,105,48,65,65,55,7,117,110,105,48,65,65,56,7, 117,110,105,48,65,65,65,7,117,110,105,48,65,65,66,7, 117,110,105,48,65,65,67,7,117,110,105,48,65,65,68,7, 117,110,105,48,65,65,69,7,117,110,105,48,65,65,70,7, 117,110,105,48,65,66,48,7,117,110,105,48,65,66,50,7, 117,110,105,48,65,66,51,7,117,110,105,48,65,66,53,7, 117,110,105,48,65,66,54,7,117,110,105,48,65,66,55,7, 117,110,105,48,65,66,56,7,117,110,105,48,65,66,57,7, 117,110,105,48,65,66,68,7,117,110,105,48,65,66,69,7, 117,110,105,48,65,66,70,7,117,110,105,48,65,67,48,7, 117,110,105,48,65,67,49,7,117,110,105,48,65,67,50,7, 117,110,105,48,65,67,51,7,117,110,105,48,65,67,55,7, 117,110,105,48,65,67,56,7,117,110,105,48,65,67,66,7, 117,110,105,48,65,67,67,7,117,110,105,48,65,68,48,7, 117,110,105,48,65,69,54,7,117,110,105,48,65,69,55,7, 117,110,105,48,65,69,56,7,117,110,105,48,65,69,57,7, 117,110,105,48,65,69,65,7,117,110,105,48,65,69,66,7, 117,110,105,48,65,69,67,7,117,110,105,48,65,69,68,7, 117,110,105,48,65,69,69,7,117,110,105,48,65,69,70,7, 117,110,105,48,66,48,50,7,117,110,105,48,66,48,51,7, 117,110,105,48,66,48,53,7,117,110,105,48,66,48,54,7, 117,110,105,48,66,48,55,7,117,110,105,48,66,48,57,7, 117,110,105,48,66,48,66,7,117,110,105,48,66,48,70,7, 117,110,105,48,66,49,51,7,117,110,105,48,66,49,53,7, 117,110,105,48,66,49,54,7,117,110,105,48,66,49,55,7, 117,110,105,48,66,49,56,7,117,110,105,48,66,49,65,7, 117,110,105,48,66,49,67,7,117,110,105,48,66,49,68,7, 117,110,105,48,66,49,70,7,117,110,105,48,66,50,48,7, 117,110,105,48,66,50,49,7,117,110,105,48,66,50,65,7, 117,110,105,48,66,50,66,7,117,110,105,48,66,50,70,7, 117,110,105,48,66,51,48,7,117,110,105,48,66,51,50,7, 117,110,105,48,66,51,51,7,117,110,105,48,66,51,54,7, 117,110,105,48,66,51,55,7,117,110,105,48,66,51,56,7, 117,110,105,48,66,51,57,7,117,110,105,48,66,51,69,7, 117,110,105,48,66,51,70,7,117,110,105,48,66,52,48,7, 117,110,105,48,66,52,49,7,117,110,105,48,66,52,50,7, 117,110,105,48,66,52,51,7,117,110,105,48,66,52,55,7, 117,110,105,48,66,54,48,7,117,110,105,48,66,54,54,7, 117,110,105,48,66,54,55,7,117,110,105,48,66,54,56,7, 117,110,105,48,66,54,57,7,117,110,105,48,66,54,65,7, 117,110,105,48,66,54,66,7,117,110,105,48,66,54,67,7, 117,110,105,48,66,54,68,7,117,110,105,48,66,54,69,7, 117,110,105,48,66,54,70,7,117,110,105,48,66,56,50,7, 117,110,105,48,66,56,51,7,117,110,105,48,66,56,53,7, 117,110,105,48,66,56,54,7,117,110,105,48,66,56,55,7, 117,110,105,48,66,56,56,7,117,110,105,48,66,56,57,7, 117,110,105,48,66,56,65,7,117,110,105,48,66,56,69,7, 117,110,105,48,66,56,70,7,117,110,105,48,66,57,48,7, 117,110,105,48,66,57,50,7,117,110,105,48,66,57,51,7, 117,110,105,48,66,57,52,7,117,110,105,48,66,57,53,7, 117,110,105,48,66,57,57,7,117,110,105,48,66,57,65,7, 117,110,105,48,66,57,67,7,117,110,105,48,66,57,69,7, 117,110,105,48,66,57,70,7,117,110,105,48,66,65,51,7, 117,110,105,48,66,65,52,7,117,110,105,48,66,65,56,7, 117,110,105,48,66,65,57,7,117,110,105,48,66,65,65,7, 117,110,105,48,66,65,69,7,117,110,105,48,66,65,70,7, 117,110,105,48,66,66,48,7,117,110,105,48,66,66,49,7, 117,110,105,48,66,66,50,7,117,110,105,48,66,66,51,7, 117,110,105,48,66,66,52,7,117,110,105,48,66,66,53,7, 117,110,105,48,66,66,55,7,117,110,105,48,66,66,56,7, 117,110,105,48,66,66,57,7,117,110,105,48,66,66,69,7, 117,110,105,48,66,66,70,7,117,110,105,48,66,67,48,7, 117,110,105,48,66,67,49,7,117,110,105,48,66,67,54,7, 117,110,105,48,66,67,55,7,117,110,105,48,66,67,56,7, 117,110,105,48,66,67,65,7,117,110,105,48,66,67,66,7, 117,110,105,48,66,67,67,7,117,110,105,48,66,67,68,7, 117,110,105,48,66,68,55,7,117,110,105,48,66,68,65,7, 117,110,105,48,66,68,66,7,117,110,105,48,66,68,67,7, 117,110,105,48,66,68,68,7,117,110,105,48,66,69,49,7, 117,110,105,48,67,56,51,7,117,110,105,48,67,56,53,7, 117,110,105,48,67,56,54,7,117,110,105,48,67,56,55,7, 117,110,105,48,67,56,56,7,117,110,105,48,67,56,57,7, 117,110,105,48,67,56,65,7,117,110,105,48,67,56,69,7, 117,110,105,48,67,56,70,7,117,110,105,48,67,57,48,7, 117,110,105,48,67,57,50,7,117,110,105,48,67,57,51,7, 117,110,105,48,67,57,52,7,117,110,105,48,67,57,53,7, 117,110,105,48,67,57,54,7,117,110,105,48,67,57,55,7, 117,110,105,48,67,57,56,7,117,110,105,48,67,57,57,7, 117,110,105,48,67,57,65,7,117,110,105,48,67,57,67,7, 117,110,105,48,67,57,69,7,117,110,105,48,67,57,70,7, 117,110,105,48,67,65,48,7,117,110,105,48,67,65,49,7, 117,110,105,48,67,65,50,7,117,110,105,48,67,65,51,7, 117,110,105,48,67,65,52,7,117,110,105,48,67,65,53,7, 117,110,105,48,67,65,54,7,117,110,105,48,67,65,55,7, 117,110,105,48,67,65,56,7,117,110,105,48,67,66,48,7, 117,110,105,48,67,66,49,7,117,110,105,48,67,66,50,7, 117,110,105,48,67,66,51,7,117,110,105,48,67,69,54,7, 117,110,105,48,67,69,55,7,117,110,105,48,67,69,56,7, 117,110,105,48,67,69,57,7,117,110,105,48,67,69,65,7, 117,110,105,48,67,69,66,7,117,110,105,48,67,69,67,7, 117,110,105,48,67,69,68,7,117,110,105,48,67,69,69,7, 117,110,105,48,67,69,70,7,117,110,105,48,68,56,50,7, 117,110,105,48,68,56,51,7,117,110,105,48,68,56,53,7, 117,110,105,48,68,56,57,7,117,110,105,48,68,56,65,7, 117,110,105,48,68,56,66,7,117,110,105,48,68,57,49,7, 117,110,105,48,68,57,52,7,117,110,105,48,68,57,57,7, 117,110,105,48,68,57,65,7,117,110,105,48,68,57,66,7, 117,110,105,48,68,57,67,7,117,110,105,48,68,57,69,7, 117,110,105,48,68,65,48,7,117,110,105,48,68,65,49,7, 117,110,105,48,68,65,50,7,117,110,105,48,68,65,52,7, 117,110,105,48,68,65,53,7,117,110,105,48,68,65,55,7, 117,110,105,48,68,65,56,7,117,110,105,48,68,65,57,7, 117,110,105,48,68,65,65,7,117,110,105,48,68,65,66,7, 117,110,105,48,68,65,68,7,117,110,105,48,68,65,69,7, 117,110,105,48,68,65,70,7,117,110,105,48,68,66,48,7, 117,110,105,48,68,66,49,7,117,110,105,48,68,66,51,7, 117,110,105,48,68,66,52,7,117,110,105,48,68,66,53,7, 117,110,105,48,68,66,54,7,117,110,105,48,68,66,55,7, 117,110,105,48,68,66,56,7,117,110,105,48,68,66,57,7, 117,110,105,48,68,66,65,7,117,110,105,48,68,66,66,7, 117,110,105,48,68,66,68,7,117,110,105,48,68,67,48,7, 117,110,105,48,68,67,49,7,117,110,105,48,68,67,50,7, 117,110,105,48,68,67,51,7,117,110,105,48,68,67,52,7, 117,110,105,48,68,67,53,7,117,110,105,48,68,67,54,7, 117,110,105,48,68,67,65,7,117,110,105,48,68,67,70,7, 117,110,105,48,68,68,48,7,117,110,105,48,68,68,49,7, 117,110,105,48,68,68,50,7,117,110,105,48,68,68,51,7, 117,110,105,48,68,68,52,7,117,110,105,48,68,68,54,7, 117,110,105,48,68,68,56,7,117,110,105,48,68,68,57,7, 117,110,105,48,68,68,70,7,117,110,105,49,70,48,48,7, 117,110,105,49,70,48,49,7,117,110,105,49,70,48,50,7, 117,110,105,49,70,48,51,7,117,110,105,49,70,48,52,7, 117,110,105,49,70,48,53,7,117,110,105,49,70,48,54,7, 117,110,105,49,70,48,55,7,117,110,105,49,70,48,56,7, 117,110,105,49,70,48,57,7,117,110,105,49,70,48,65,7, 117,110,105,49,70,48,66,7,117,110,105,49,70,48,67,7, 117,110,105,49,70,48,68,7,117,110,105,49,70,48,69,7, 117,110,105,49,70,48,70,7,117,110,105,49,70,49,48,7, 117,110,105,49,70,49,49,7,117,110,105,49,70,49,50,7, 117,110,105,49,70,49,51,7,117,110,105,49,70,49,52,7, 117,110,105,49,70,49,53,7,117,110,105,49,70,49,56,7, 117,110,105,49,70,49,57,7,117,110,105,49,70,49,65,7, 117,110,105,49,70,49,66,7,117,110,105,49,70,49,67,7, 117,110,105,49,70,49,68,7,117,110,105,49,70,50,48,7, 117,110,105,49,70,50,49,7,117,110,105,49,70,50,50,7, 117,110,105,49,70,50,51,7,117,110,105,49,70,50,52,7, 117,110,105,49,70,50,53,7,117,110,105,49,70,50,54,7, 117,110,105,49,70,50,55,7,117,110,105,49,70,50,56,7, 117,110,105,49,70,50,57,7,117,110,105,49,70,50,65,7, 117,110,105,49,70,50,66,7,117,110,105,49,70,50,67,7, 117,110,105,49,70,50,68,7,117,110,105,49,70,50,69,7, 117,110,105,49,70,50,70,7,117,110,105,49,70,51,48,7, 117,110,105,49,70,51,49,7,117,110,105,49,70,51,50,7, 117,110,105,49,70,51,51,7,117,110,105,49,70,51,52,7, 117,110,105,49,70,51,53,7,117,110,105,49,70,51,54,7, 117,110,105,49,70,51,55,7,117,110,105,49,70,51,56,7, 117,110,105,49,70,51,57,7,117,110,105,49,70,51,65,7, 117,110,105,49,70,51,66,7,117,110,105,49,70,51,67,7, 117,110,105,49,70,51,68,7,117,110,105,49,70,51,69,7, 117,110,105,49,70,51,70,7,117,110,105,49,70,52,48,7, 117,110,105,49,70,52,49,7,117,110,105,49,70,52,50,7, 117,110,105,49,70,52,51,7,117,110,105,49,70,52,52,7, 117,110,105,49,70,52,53,7,117,110,105,49,70,52,56,7, 117,110,105,49,70,52,57,7,117,110,105,49,70,52,65,7, 117,110,105,49,70,52,66,7,117,110,105,49,70,52,67,7, 117,110,105,49,70,52,68,7,117,110,105,49,70,53,48,7, 117,110,105,49,70,53,49,7,117,110,105,49,70,53,50,7, 117,110,105,49,70,53,51,7,117,110,105,49,70,53,52,7, 117,110,105,49,70,53,53,7,117,110,105,49,70,53,54,7, 117,110,105,49,70,53,55,7,117,110,105,49,70,53,57,7, 117,110,105,49,70,53,66,7,117,110,105,49,70,53,68,7, 117,110,105,49,70,53,70,7,117,110,105,49,70,54,48,7, 117,110,105,49,70,54,49,7,117,110,105,49,70,54,50,7, 117,110,105,49,70,54,51,7,117,110,105,49,70,54,52,7, 117,110,105,49,70,54,53,7,117,110,105,49,70,54,54,7, 117,110,105,49,70,54,55,7,117,110,105,49,70,54,56,7, 117,110,105,49,70,54,57,7,117,110,105,49,70,54,65,7, 117,110,105,49,70,54,66,7,117,110,105,49,70,54,67,7, 117,110,105,49,70,54,68,7,117,110,105,49,70,54,69,7, 117,110,105,49,70,54,70,7,117,110,105,49,70,55,48,7, 117,110,105,49,70,55,49,7,117,110,105,49,70,55,50,7, 117,110,105,49,70,55,51,7,117,110,105,49,70,55,52,7, 117,110,105,49,70,55,53,7,117,110,105,49,70,55,54,7, 117,110,105,49,70,55,55,7,117,110,105,49,70,55,56,7, 117,110,105,49,70,55,57,7,117,110,105,49,70,55,65,7, 117,110,105,49,70,55,66,7,117,110,105,49,70,55,67,7, 117,110,105,49,70,55,68,7,117,110,105,49,70,56,48,7, 117,110,105,49,70,56,49,7,117,110,105,49,70,56,50,7, 117,110,105,49,70,56,51,7,117,110,105,49,70,56,52,7, 117,110,105,49,70,56,53,7,117,110,105,49,70,56,54,7, 117,110,105,49,70,56,55,7,117,110,105,49,70,56,56,7, 117,110,105,49,70,56,57,7,117,110,105,49,70,56,65,7, 117,110,105,49,70,56,66,7,117,110,105,49,70,56,67,7, 117,110,105,49,70,56,68,7,117,110,105,49,70,56,69,7, 117,110,105,49,70,56,70,7,117,110,105,49,70,57,48,7, 117,110,105,49,70,57,49,7,117,110,105,49,70,57,50,7, 117,110,105,49,70,57,51,7,117,110,105,49,70,57,52,7, 117,110,105,49,70,57,53,7,117,110,105,49,70,57,54,7, 117,110,105,49,70,57,55,7,117,110,105,49,70,57,56,7, 117,110,105,49,70,57,57,7,117,110,105,49,70,57,65,7, 117,110,105,49,70,57,66,7,117,110,105,49,70,57,67,7, 117,110,105,49,70,57,68,7,117,110,105,49,70,57,69,7, 117,110,105,49,70,57,70,7,117,110,105,49,70,65,48,7, 117,110,105,49,70,65,49,7,117,110,105,49,70,65,50,7, 117,110,105,49,70,65,51,7,117,110,105,49,70,65,52,7, 117,110,105,49,70,65,53,7,117,110,105,49,70,65,54,7, 117,110,105,49,70,65,55,7,117,110,105,49,70,65,56,7, 117,110,105,49,70,65,57,7,117,110,105,49,70,65,65,7, 117,110,105,49,70,65,66,7,117,110,105,49,70,65,67,7, 117,110,105,49,70,65,68,7,117,110,105,49,70,65,69,7, 117,110,105,49,70,65,70,7,117,110,105,49,70,66,48,7, 117,110,105,49,70,66,49,7,117,110,105,49,70,66,50,7, 117,110,105,49,70,66,51,7,117,110,105,49,70,66,52,7, 117,110,105,49,70,66,54,7,117,110,105,49,70,66,55,7, 117,110,105,49,70,66,56,7,117,110,105,49,70,66,57,7, 117,110,105,49,70,66,65,7,117,110,105,49,70,66,66,7, 117,110,105,49,70,66,67,7,117,110,105,49,70,66,68,7, 117,110,105,49,70,66,69,7,117,110,105,49,70,66,70,7, 117,110,105,49,70,67,48,7,117,110,105,49,70,67,49,7, 117,110,105,49,70,67,50,7,117,110,105,49,70,67,51,7, 117,110,105,49,70,67,52,7,117,110,105,49,70,67,54,7, 117,110,105,49,70,67,55,7,117,110,105,49,70,67,56,7, 117,110,105,49,70,67,57,7,117,110,105,49,70,67,65,7, 117,110,105,49,70,67,66,7,117,110,105,49,70,67,67,7, 117,110,105,49,70,67,68,7,117,110,105,49,70,67,69,7, 117,110,105,49,70,67,70,7,117,110,105,49,70,68,48,7, 117,110,105,49,70,68,49,7,117,110,105,49,70,68,50,7, 117,110,105,49,70,68,51,7,117,110,105,49,70,68,54,7, 117,110,105,49,70,68,55,7,117,110,105,49,70,68,56,7, 117,110,105,49,70,68,57,7,117,110,105,49,70,68,65,7, 117,110,105,49,70,68,66,7,117,110,105,49,70,68,68,7, 117,110,105,49,70,68,69,7,117,110,105,49,70,68,70,7, 117,110,105,49,70,69,48,7,117,110,105,49,70,69,49,7, 117,110,105,49,70,69,50,7,117,110,105,49,70,69,51,7, 117,110,105,49,70,69,52,7,117,110,105,49,70,69,53,7, 117,110,105,49,70,69,54,7,117,110,105,49,70,69,55,7, 117,110,105,49,70,69,56,7,117,110,105,49,70,69,57,7, 117,110,105,49,70,69,65,7,117,110,105,49,70,69,66,7, 117,110,105,49,70,69,67,7,117,110,105,49,70,69,68,7, 117,110,105,49,70,69,69,7,117,110,105,49,70,69,70,7, 117,110,105,49,70,70,50,7,117,110,105,49,70,70,51,7, 117,110,105,49,70,70,52,7,117,110,105,49,70,70,54,7, 117,110,105,49,70,70,55,7,117,110,105,49,70,70,56,7, 117,110,105,49,70,70,57,7,117,110,105,49,70,70,65,7, 117,110,105,49,70,70,66,7,117,110,105,49,70,70,67,7, 117,110,105,49,70,70,68,7,117,110,105,49,70,70,69,7, 117,110,105,50,48,49,48,13,113,117,111,116,101,114,101,118, 101,114,115,101,100,7,117,110,105,50,48,49,70,7,117,110, 105,50,48,50,51,7,117,110,105,50,48,51,49,6,109,105, 110,117,116,101,6,115,101,99,111,110,100,7,117,110,105,50, 48,51,52,7,117,110,105,50,48,51,53,7,117,110,105,50, 48,51,54,7,117,110,105,50,48,51,55,7,117,110,105,50, 48,51,66,9,101,120,99,108,97,109,100,98,108,7,117,110, 105,50,48,51,68,7,117,110,105,50,48,52,55,7,117,110, 105,50,48,52,56,7,117,110,105,50,48,52,57,7,117,110, 105,50,48,52,66,12,122,101,114,111,115,117,112,101,114,105, 111,114,7,117,110,105,50,48,55,49,12,102,111,117,114,115, 117,112,101,114,105,111,114,12,102,105,118,101,115,117,112,101, 114,105,111,114,11,115,105,120,115,117,112,101,114,105,111,114, 13,115,101,118,101,110,115,117,112,101,114,105,111,114,13,101, 105,103,104,116,115,117,112,101,114,105,111,114,12,110,105,110, 101,115,117,112,101,114,105,111,114,12,122,101,114,111,105,110, 102,101,114,105,111,114,11,111,110,101,105,110,102,101,114,105, 111,114,11,116,119,111,105,110,102,101,114,105,111,114,13,116, 104,114,101,101,105,110,102,101,114,105,111,114,12,102,111,117, 114,105,110,102,101,114,105,111,114,12,102,105,118,101,105,110, 102,101,114,105,111,114,11,115,105,120,105,110,102,101,114,105, 111,114,13,115,101,118,101,110,105,110,102,101,114,105,111,114, 13,101,105,103,104,116,105,110,102,101,114,105,111,114,12,110, 105,110,101,105,110,102,101,114,105,111,114,6,112,101,115,101, 116,97,7,117,110,105,50,48,65,56,9,97,102,105,105,53, 55,54,51,54,4,69,117,114,111,7,117,110,105,50,49,48, 66,7,117,110,105,50,49,48,67,7,117,110,105,50,49,49, 48,8,73,102,114,97,107,116,117,114,7,117,110,105,50,49, 49,50,9,97,102,105,105,54,49,51,53,50,7,117,110,105, 50,49,49,66,8,82,102,114,97,107,116,117,114,7,117,110, 105,50,49,50,54,7,117,110,105,50,49,50,55,7,117,110, 105,50,49,50,56,7,117,110,105,50,49,50,65,7,117,110, 105,50,49,50,66,7,117,110,105,50,49,50,67,7,117,110, 105,50,49,50,68,7,117,110,105,50,49,51,48,7,117,110, 105,50,49,51,49,7,117,110,105,50,49,51,50,7,117,110, 105,50,49,51,51,8,111,110,101,116,104,105,114,100,9,116, 119,111,116,104,105,114,100,115,7,117,110,105,50,49,53,53, 7,117,110,105,50,49,53,54,7,117,110,105,50,49,53,55, 7,117,110,105,50,49,53,56,7,117,110,105,50,49,53,57, 7,117,110,105,50,49,53,65,9,111,110,101,101,105,103,104, 116,104,12,116,104,114,101,101,101,105,103,104,116,104,115,11, 102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101, 110,101,105,103,104,116,104,115,7,117,110,105,50,49,53,70, 7,117,110,105,50,49,54,48,7,117,110,105,50,49,54,49, 7,117,110,105,50,49,54,50,7,117,110,105,50,49,54,51, 7,117,110,105,50,49,54,52,7,117,110,105,50,49,54,53, 7,117,110,105,50,49,54,54,7,117,110,105,50,49,54,55, 7,117,110,105,50,49,54,56,7,117,110,105,50,49,54,57, 7,117,110,105,50,49,54,65,7,117,110,105,50,49,54,66, 7,117,110,105,50,49,54,67,7,117,110,105,50,49,54,68, 7,117,110,105,50,49,54,69,7,117,110,105,50,49,54,70, 7,117,110,105,50,49,55,48,7,117,110,105,50,49,55,49, 7,117,110,105,50,49,55,50,7,117,110,105,50,49,55,51, 7,117,110,105,50,49,55,52,7,117,110,105,50,49,55,53, 7,117,110,105,50,49,55,54,7,117,110,105,50,49,55,55, 7,117,110,105,50,49,55,56,7,117,110,105,50,49,55,57, 7,117,110,105,50,49,55,65,7,117,110,105,50,49,55,66, 7,117,110,105,50,49,55,67,7,117,110,105,50,49,55,68, 7,117,110,105,50,49,55,69,7,117,110,105,50,49,55,70, 9,97,114,114,111,119,108,101,102,116,7,97,114,114,111,119, 117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114, 114,111,119,100,111,119,110,9,97,114,114,111,119,98,111,116, 104,9,97,114,114,111,119,117,112,100,110,14,99,97,114,114, 105,97,103,101,114,101,116,117,114,110,12,97,114,114,111,119, 100,98,108,108,101,102,116,10,97,114,114,111,119,100,98,108, 117,112,13,97,114,114,111,119,100,98,108,114,105,103,104,116, 12,97,114,114,111,119,100,98,108,100,111,119,110,12,97,114, 114,111,119,100,98,108,98,111,116,104,9,117,110,105,118,101, 114,115,97,108,11,101,120,105,115,116,101,110,116,105,97,108, 8,101,109,112,116,121,115,101,116,8,103,114,97,100,105,101, 110,116,7,101,108,101,109,101,110,116,10,110,111,116,101,108, 101,109,101,110,116,7,117,110,105,50,50,49,48,7,117,110, 105,50,50,49,51,12,97,115,116,101,114,105,115,107,109,97, 116,104,12,112,114,111,112,111,114,116,105,111,110,97,108,5, 97,110,103,108,101,10,108,111,103,105,99,97,108,97,110,100, 9,108,111,103,105,99,97,108,111,114,12,105,110,116,101,114, 115,101,99,116,105,111,110,5,117,110,105,111,110,7,117,110, 105,50,50,50,67,7,117,110,105,50,50,50,68,7,117,110, 105,50,50,50,69,9,116,104,101,114,101,102,111,114,101,7, 115,105,109,105,108,97,114,7,117,110,105,50,50,51,69,7, 117,110,105,50,50,52,49,7,117,110,105,50,50,52,50,7, 117,110,105,50,50,52,51,7,117,110,105,50,50,52,57,10, 99,105,114,99,108,101,112,108,117,115,7,117,110,105,50,50, 57,54,14,99,105,114,99,108,101,109,117,108,116,105,112,108, 121,13,112,101,114,112,101,110,100,105,99,117,108,97,114,7, 117,110,105,50,51,48,48,11,109,117,115,105,99,97,108,110, 111,116,101,7,117,110,105,51,48,48,49,7,117,110,105,51, 48,48,50,7,117,110,105,51,48,48,51,7,117,110,105,51, 48,48,53,7,117,110,105,51,48,48,55,7,117,110,105,51, 48,48,56,7,117,110,105,51,48,48,57,7,117,110,105,51, 48,48,65,7,117,110,105,51,48,48,66,7,117,110,105,51, 48,48,67,7,117,110,105,51,48,48,68,7,117,110,105,51, 48,48,69,7,117,110,105,51,48,48,70,7,117,110,105,51, 48,49,48,7,117,110,105,51,48,49,49,7,117,110,105,51, 48,49,52,7,117,110,105,51,48,49,53,7,117,110,105,51, 48,52,49,7,117,110,105,51,48,52,50,7,117,110,105,51, 48,52,51,7,117,110,105,51,48,52,52,7,117,110,105,51, 48,52,53,7,117,110,105,51,48,52,54,7,117,110,105,51, 48,52,55,7,117,110,105,51,48,52,56,7,117,110,105,51, 48,52,57,7,117,110,105,51,48,52,65,7,117,110,105,51, 48,52,66,7,117,110,105,51,48,52,67,7,117,110,105,51, 48,52,68,7,117,110,105,51,48,52,69,7,117,110,105,51, 48,52,70,7,117,110,105,51,48,53,48,7,117,110,105,51, 48,53,49,7,117,110,105,51,48,53,50,7,117,110,105,51, 48,53,51,7,117,110,105,51,48,53,52,7,117,110,105,51, 48,53,53,7,117,110,105,51,48,53,54,7,117,110,105,51, 48,53,55,7,117,110,105,51,48,53,56,7,117,110,105,51, 48,53,57,7,117,110,105,51,48,53,65,7,117,110,105,51, 48,53,66,7,117,110,105,51,48,53,67,7,117,110,105,51, 48,53,68,7,117,110,105,51,48,53,69,7,117,110,105,51, 48,53,70,7,117,110,105,51,48,54,48,7,117,110,105,51, 48,54,49,7,117,110,105,51,48,54,50,7,117,110,105,51, 48,54,51,7,117,110,105,51,48,54,52,7,117,110,105,51, 48,54,53,7,117,110,105,51,48,54,54,7,117,110,105,51, 48,54,55,7,117,110,105,51,48,54,56,7,117,110,105,51, 48,54,57,7,117,110,105,51,48,54,65,7,117,110,105,51, 48,54,66,7,117,110,105,51,48,54,67,7,117,110,105,51, 48,54,68,7,117,110,105,51,48,54,69,7,117,110,105,51, 48,54,70,7,117,110,105,51,48,55,48,7,117,110,105,51, 48,55,49,7,117,110,105,51,48,55,50,7,117,110,105,51, 48,55,51,7,117,110,105,51,48,55,52,7,117,110,105,51, 48,55,53,7,117,110,105,51,48,55,54,7,117,110,105,51, 48,55,55,7,117,110,105,51,48,55,56,7,117,110,105,51, 48,55,57,7,117,110,105,51,48,55,65,7,117,110,105,51, 48,55,66,7,117,110,105,51,48,55,67,7,117,110,105,51, 48,55,68,7,117,110,105,51,48,55,69,7,117,110,105,51, 48,55,70,7,117,110,105,51,48,56,48,7,117,110,105,51, 48,56,49,7,117,110,105,51,48,56,50,7,117,110,105,51, 48,56,51,7,117,110,105,51,48,56,52,7,117,110,105,51, 48,56,53,7,117,110,105,51,48,56,54,7,117,110,105,51, 48,56,55,7,117,110,105,51,48,56,56,7,117,110,105,51, 48,56,57,7,117,110,105,51,48,56,65,7,117,110,105,51, 48,56,66,7,117,110,105,51,48,56,67,7,117,110,105,51, 48,56,68,7,117,110,105,51,48,56,69,7,117,110,105,51, 48,56,70,7,117,110,105,51,48,57,48,7,117,110,105,51, 48,57,49,7,117,110,105,51,48,57,50,7,117,110,105,51, 48,57,51,7,117,110,105,51,48,57,57,7,117,110,105,51, 48,57,66,7,117,110,105,51,48,65,49,7,117,110,105,51, 48,65,50,7,117,110,105,51,48,65,51,7,117,110,105,51, 48,65,52,7,117,110,105,51,48,65,53,7,117,110,105,51, 48,65,54,7,117,110,105,51,48,65,55,7,117,110,105,51, 48,65,56,7,117,110,105,51,48,65,57,7,117,110,105,51, 48,65,65,7,117,110,105,51,48,65,66,7,117,110,105,51, 48,65,67,7,117,110,105,51,48,65,68,7,117,110,105,51, 48,65,69,7,117,110,105,51,48,65,70,7,117,110,105,51, 48,66,48,7,117,110,105,51,48,66,49,7,117,110,105,51, 48,66,50,7,117,110,105,51,48,66,51,7,117,110,105,51, 48,66,52,7,117,110,105,51,48,66,53,7,117,110,105,51, 48,66,54,7,117,110,105,51,48,66,55,7,117,110,105,51, 48,66,56,7,117,110,105,51,48,66,57,7,117,110,105,51, 48,66,65,7,117,110,105,51,48,66,66,7,117,110,105,51, 48,66,67,7,117,110,105,51,48,66,68,7,117,110,105,51, 48,66,69,7,117,110,105,51,48,66,70,7,117,110,105,51, 48,67,48,7,117,110,105,51,48,67,49,7,117,110,105,51, 48,67,50,7,117,110,105,51,48,67,51,7,117,110,105,51, 48,67,52,7,117,110,105,51,48,67,53,7,117,110,105,51, 48,67,54,7,117,110,105,51,48,67,55,7,117,110,105,51, 48,67,56,7,117,110,105,51,48,67,57,7,117,110,105,51, 48,67,65,7,117,110,105,51,48,67,66,7,117,110,105,51, 48,67,67,7,117,110,105,51,48,67,68,7,117,110,105,51, 48,67,69,7,117,110,105,51,48,67,70,7,117,110,105,51, 48,68,48,7,117,110,105,51,48,68,49,7,117,110,105,51, 48,68,50,7,117,110,105,51,48,68,51,7,117,110,105,51, 48,68,52,7,117,110,105,51,48,68,53,7,117,110,105,51, 48,68,54,7,117,110,105,51,48,68,55,7,117,110,105,51, 48,68,56,7,117,110,105,51,48,68,57,7,117,110,105,51, 48,68,65,7,117,110,105,51,48,68,66,7,117,110,105,51, 48,68,67,7,117,110,105,51,48,68,68,7,117,110,105,51, 48,68,69,7,117,110,105,51,48,68,70,7,117,110,105,51, 48,69,48,7,117,110,105,51,48,69,49,7,117,110,105,51, 48,69,50,7,117,110,105,51,48,69,51,7,117,110,105,51, 48,69,52,7,117,110,105,51,48,69,53,7,117,110,105,51, 48,69,54,7,117,110,105,51,48,69,55,7,117,110,105,51, 48,69,56,7,117,110,105,51,48,69,57,7,117,110,105,51, 48,69,65,7,117,110,105,51,48,69,66,7,117,110,105,51, 48,69,67,7,117,110,105,51,48,69,68,7,117,110,105,51, 48,69,69,7,117,110,105,51,48,69,70,7,117,110,105,51, 48,70,48,7,117,110,105,51,48,70,49,7,117,110,105,51, 48,70,50,7,117,110,105,51,48,70,51,7,117,110,105,51, 48,70,52,7,117,110,105,51,48,70,53,7,117,110,105,51, 48,70,54,7,117,110,105,51,48,70,55,7,117,110,105,51, 48,70,56,7,117,110,105,51,48,70,57,7,117,110,105,51, 48,70,65,7,117,110,105,51,48,70,66,7,117,110,105,51, 48,70,67,7,117,110,105,51,48,70,68,7,117,110,105,51, 48,70,69,7,117,110,105,70,54,51,57,7,117,110,105,70, 54,51,65,7,117,110,105,70,54,51,66,7,117,110,105,70, 54,51,67,7,117,110,105,70,54,51,68,7,117,110,105,70, 54,51,69,7,117,110,105,70,54,51,70,7,117,110,105,70, 54,52,48,7,117,110,105,70,54,52,49,8,100,111,116,108, 101,115,115,106,11,99,111,109,109,97,97,99,99,101,110,116, 9,111,110,101,102,105,116,116,101,100,2,102,102,3,102,102, 105,3,102,102,108,7,117,110,105,70,66,48,53,7,117,110, 105,70,66,48,54,7,117,110,105,70,66,49,68,7,117,110, 105,70,66,49,69,9,97,102,105,105,53,55,55,48,53,7, 117,110,105,70,66,50,48,7,117,110,105,70,66,50,49,7, 117,110,105,70,66,50,50,7,117,110,105,70,66,50,51,7, 117,110,105,70,66,50,52,7,117,110,105,70,66,50,53,7, 117,110,105,70,66,50,54,7,117,110,105,70,66,50,55,7, 117,110,105,70,66,50,56,7,117,110,105,70,66,50,57,9, 97,102,105,105,53,55,54,57,52,9,97,102,105,105,53,55, 54,57,53,7,117,110,105,70,66,50,67,7,117,110,105,70, 66,50,68,7,117,110,105,70,66,50,69,7,117,110,105,70, 66,50,70,7,117,110,105,70,66,51,48,7,117,110,105,70, 66,51,49,7,117,110,105,70,66,51,50,7,117,110,105,70, 66,51,51,7,117,110,105,70,66,51,52,9,97,102,105,105, 53,55,55,50,51,7,117,110,105,70,66,51,54,7,117,110, 105,70,66,51,56,7,117,110,105,70,66,51,57,7,117,110, 105,70,66,51,65,7,117,110,105,70,66,51,66,7,117,110, 105,70,66,51,67,7,117,110,105,70,66,51,69,7,117,110, 105,70,66,52,48,7,117,110,105,70,66,52,49,7,117,110, 105,70,66,52,51,7,117,110,105,70,66,52,52,7,117,110, 105,70,66,52,54,7,117,110,105,70,66,52,55,7,117,110, 105,70,66,52,56,7,117,110,105,70,66,52,57,7,117,110, 105,70,66,52,65,9,97,102,105,105,53,55,55,48,48,7, 117,110,105,70,66,52,67,7,117,110,105,70,66,52,68,7, 117,110,105,70,66,52,69,7,117,110,105,70,66,52,70,7, 117,110,105,70,70,70,68,0,}; size_t lxFNTFreeSans_ttf_size = 264072; therion-5.4.1/loch/lxFile.cxx000066400000000000000000001032501307545355600161030ustar00rootroot00000000000000#include "lxFile.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #if defined LXWIN32 || defined THWIN32 #include "getline.h" #endif #endif //LXDEPCHECK - standard libraries #include "lxMath.h" #include "img.h" #if defined LXWIN32 || defined THWIN32 #define strcasecmp stricmp #endif lxFileSizeT lxFileSize::Save(lxFileBuff & ptr) { lxFileSizeT s(sizeof(uint32_t)); *((uint32_t *)(ptr)) = (uint32_t) this->m_size; lxFile::switchEndian(ptr, s); ptr += s; return s; } lxFileSizeT lxFileSize::Load(lxFileBuff & ptr) { lxFileSizeT s(sizeof(lxFileSizeT)); this->m_size = (lxFileSizeT) *((uint32_t *)(ptr)); lxFile::switchEndian((char *)(&this->m_size), s); ptr += s; return s; } lxFileSizeT lxFileDbl::Save(lxFileBuff & ptr) { lxFileSizeT s(sizeof(this->m_num)); *((double *)(ptr)) = this->m_num; lxFile::switchEndian(ptr, s); ptr += s; return s; } lxFileSizeT lxFileDbl::Load(lxFileBuff & ptr) { lxFileSizeT s(sizeof(this->m_num)); this->m_num = *((double *)(ptr)); lxFile::switchEndian((char *)(&this->m_num), s); ptr += s; return s; } lxFileDataPtr::lxFileDataPtr() { this->Clear(); } void lxFileDataPtr::Clear() { this->m_position = 0; this->m_size = 0; } lxFileSizeT lxFileDataPtr::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_position.Save(ptr); s += this->m_size.Save(ptr); return s; } lxFileSizeT lxFileDataPtr::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_position.Load(ptr); s += this->m_size.Load(ptr); return s; } lxFileData::lxFileData() { this->m_data = NULL; this->m_size = 0; this->m_buffSize = 0; } void lxFileData::Clear() { if (this->m_data != NULL) free(this->m_data); this->m_data = NULL; this->m_size = 0; this->m_buffSize = 0; } void lxFileData::Copy(lxFileSizeT size, const void * src) { this->Clear(); this->m_data = malloc(size); this->m_size = size; this->m_buffSize = size; memcpy(this->m_data, src, size); } const void * lxFileData::GetData(lxFileDataPtr ptr) { if (ptr.m_size <= 1) return NULL; else return (void *)(&(((char *)this->m_data)[ptr.m_position])); } FILE * lxFileData::GetTmpFile(lxFileDataPtr ptr) { FILE * rf; if (ptr.m_size <= 1) return NULL; rf = tmpfile(); //rf = fopen("TMPFILE.JPG","wb"); if (rf != NULL) { fwrite(&(((char *)this->m_data)[ptr.m_position]), 1, ptr.m_size, rf); fseek(rf, 0, SEEK_SET); //fclose(rf); //rf = fopen("TMPFILE.JPG","rb"); } return rf; } const char * lxFileData::GetString(lxFileDataPtr ptr) { if (ptr.m_size <= 1) return ""; else return &(((char *)this->m_data)[ptr.m_position]); } void lxFileData::BuffResize(lxFileSizeT size) { lxFileSizeT nsize; void * ndata; if (this->m_buffSize > 0) nsize = this->m_buffSize; else nsize = 1024; while (size >= nsize) nsize *= 2; this->m_buffSize = nsize; ndata = malloc(nsize); if (this->m_size > 0) memcpy(ndata, this->m_data, this->m_size); free(this->m_data); this->m_data = ndata; } lxFileDataPtr lxFileData::AppendStr(const char * str) { lxFileDataPtr res; lxFileSizeT strln; if (str == NULL) return res; strln = strlen(str); if (strln == 0) return res; return this->AppendData(str, strln + 1); } lxFileDataPtr lxFileData::AppendFile(const char * fnm) { lxFileDataPtr res; FILE * xf; xf = fopen(fnm, "rb"); if (xf != NULL) { fseek(xf, 0, SEEK_END); lxFileSizeT fsz = ftell(xf); fseek(xf, 0, SEEK_SET); if (fsz > 0) { char * cdata = new char [fsz]; fread((void *) cdata, 1, fsz, xf); res = this->AppendData(cdata, fsz); delete [] cdata; } fclose(xf); } return res; } lxFileDataPtr lxFileData::AppendData(const void * data, lxFileSizeT size) { lxFileDataPtr res; if ((data == NULL) || (size == 0)) return res; if (this->m_buffSize < this->m_size + size) this->BuffResize(this->m_size + size); res.m_position = this->m_size; res.m_size = size; memcpy(&(((char *)this->m_data)[this->m_size]), data, size); this->m_size += size; return res; } lxFileStation::lxFileStation() { this->m_flags = 0; } bool lxFileIsBigEndian() { unsigned long i = 1; const unsigned char * p = (const unsigned char *) &i; return (p[0] != 1); } bool lxFile::m_bigEndian(lxFileIsBigEndian()); void lxFile::switchEndian(char * data, lxFileSizeT size) { if (m_bigEndian) { char temp; lxFileSizeT index, rindex, total; total = size / 2; for (index = 0; index < total; index++) { rindex = size - index - 1; temp = data[index]; data[index] = data[rindex]; data[rindex] = temp; } } } lxFileShot::lxFileShot() { this->m_flags = 0; this->m_threshold = 60.0; this->m_sectionType = LXFILE_SHOT_SECTION_NONE; } lxFile::lxFile() { this->Clear(); } lxFile::~lxFile() { this->Clear(); } void lxFile::Clear() { this->m_surveys.clear(); this->m_surveysData.Clear(); this->m_nSurveys = 0; this->m_stations.clear(); this->m_stationsData.Clear(); this->m_nStations = 0; this->m_shots.clear(); this->m_shotsData.Clear(); this->m_scraps.clear(); this->m_scrapsData.Clear(); this->m_surfaces.clear(); this->m_surfacesData.Clear(); this->m_surfaceBitmaps.clear(); this->m_surfaceBitmapsData.Clear(); } enum { LXFILE_CHUNK_SURVEY = 1, LXFILE_CHUNK_STATION = 2, LXFILE_CHUNK_SHOT = 3, LXFILE_CHUNK_SCRAP = 4, LXFILE_CHUNK_SURFACE = 5, LXFILE_CHUNK_SURFACEBMP = 6, }; struct lxFileChunkHdr { lxFileSize m_type, m_recSize, m_recCount, m_dataSize; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; lxFileSizeT lxFileChunkHdr::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_type.Save(ptr); s += this->m_recSize.Save(ptr); s += this->m_recCount.Save(ptr); s += this->m_dataSize.Save(ptr); return s; } lxFileSizeT lxFileChunkHdr::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_type.Load(ptr); s += this->m_recSize.Load(ptr); s += this->m_recCount.Load(ptr); s += this->m_dataSize.Load(ptr); return s; } lxFileSizeT lxFile3Point::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_c[0].Save(ptr); s += this->m_c[1].Save(ptr); s += this->m_c[2].Save(ptr); return s; } lxFileSizeT lxFile3Angle::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_v[0].Load(ptr); s += this->m_v[1].Load(ptr); s += this->m_v[2].Load(ptr); return s; } void lxFile::ExportLOX(const char * fn) { this->m_error.clear(); this->m_file = fopen(fn,"wb"); if (this->m_file == NULL) { this->m_error = "unable to open file for output"; return; } // write data lxFileChunkHdr chunkHdr; char * tmpPtr, * chunkHdrPtr, chunkHdrBuffer [sizeof(chunkHdr)]; lxFileSizeT chunkHdrSize, tmpSize; bool writeErr; writeErr = false; lxFileSizeT x, size; #define lxFileExportItem(expID, expClass, expRecs, expData) \ size = this->expRecs.size(); \ if ((!writeErr) && (size > 0)) { \ char * tmpData = new char [size * sizeof(expClass)]; \ tmpPtr = tmpData; tmpSize = 0; \ expClass##_list::iterator tmpIter = this->expRecs.begin(); \ for (x = 0; x < size; x++) { \ tmpSize += tmpIter->Save(tmpPtr); \ tmpIter++; \ } \ chunkHdr.m_type = expID; \ chunkHdr.m_recSize = tmpSize; \ chunkHdr.m_recCount = size; \ chunkHdr.m_dataSize = this->expData.m_size; \ chunkHdrPtr = chunkHdrBuffer; \ chunkHdrSize = chunkHdr.Save(chunkHdrPtr); \ if (fwrite(&chunkHdrBuffer, chunkHdrSize, 1, this->m_file) != 1) \ writeErr = true; \ if (fwrite(tmpData, tmpSize, 1, this->m_file) != 1) \ writeErr = true; \ if (chunkHdr.m_dataSize > 0) \ if (fwrite(this->expData.m_data, chunkHdr.m_dataSize, 1, this->m_file) != 1) \ writeErr = true; \ delete [] tmpData; \ } lxFileExportItem(LXFILE_CHUNK_SURVEY, lxFileSurvey, m_surveys, m_surveysData); lxFileExportItem(LXFILE_CHUNK_STATION, lxFileStation, m_stations, m_stationsData); lxFileExportItem(LXFILE_CHUNK_SHOT, lxFileShot, m_shots, m_shotsData); lxFileExportItem(LXFILE_CHUNK_SCRAP, lxFileScrap, m_scraps, m_scrapsData); lxFileExportItem(LXFILE_CHUNK_SURFACE, lxFileSurface, m_surfaces, m_surfacesData); lxFileExportItem(LXFILE_CHUNK_SURFACEBMP, lxFileSurfaceBitmap, m_surfaceBitmaps, m_surfaceBitmapsData); /* size = this->m_surveys.size(); if ((!writeErr) && (size > 0)) { lxFileSurvey * tmpData = new lxFileSurvey [size]; lxFileSurvey_list::iterator tmpIter = this->m_surveys.begin(); for (x = 0; x < size; x++) { tmpData[x] = *tmpIter; tmpIter++; } chunkHdr.m_type = LXFILE_CHUNK_SURVEY; chunkHdr.m_recSize = sizeof(lxFileSurvey); chunkHdr.m_recCount = size; chunkHdr.m_dataSize = this->m_surveysData.m_size; if (fwrite(&chunkHdr, sizeof(chunkHdr), 1, this->m_file) != 1) writeErr = true; if (fwrite(tmpData, chunkHdr.m_recSize, size, this->m_file) != size) writeErr = true; if (chunkHdr.m_dataSize > 0) if (fwrite(this->m_surveysData.m_data, chunkHdr.m_dataSize, 1, this->m_file) != 1) writeErr = true; delete [] tmpData; } */ fclose(this->m_file); if (writeErr) this->m_error = "error writing to file."; } void lxFile::ImportLOX(const char * fn) { this->m_error.clear(); this->m_file = fopen(fn,"rb"); if (this->m_file == NULL) { this->m_error = "unable to open file for input"; return; } lxFileChunkHdr chunkHdr; lxFileSizeT i, orig_size, orig_survey_id, orig_station_id; char * tmpPtr, * chunkHdrPtr, * tmpRecsData, chunkHdrBuffer [sizeof(chunkHdr)]; lxFileSizeT chunkHdrSize; chunkHdrPtr = chunkHdrBuffer; chunkHdrSize = chunkHdr.Save(chunkHdrPtr); orig_survey_id = 0; for(lxFileSurvey_list::iterator itsurv = this->m_surveys.begin(); itsurv != this->m_surveys.end(); itsurv++) { if (orig_survey_id < itsurv->m_id) orig_survey_id = itsurv->m_id; } orig_station_id = 0; for(lxFileStation_list::iterator itstat = this->m_stations.begin(); itstat != this->m_stations.end(); itstat++) { if (orig_station_id < itstat->m_id) orig_station_id = itstat->m_id; } bool readErr = false; while ((!readErr) && (!feof(this->m_file)) && (fread(chunkHdrBuffer, chunkHdrSize, 1, this->m_file) == 1)) { chunkHdrPtr = chunkHdrBuffer; chunkHdr.Load(chunkHdrPtr); switch (chunkHdr.m_type) { /* case LXFILE_CHUNK_SURVEY: if (chunkHdr.m_recCount > 0) { orig_size = this->m_surveysData.m_size; lxFileSurvey * tmpRecs = new lxFileSurvey [chunkHdr.m_recCount]; if (fread(tmpRecs, sizeof(lxFileSurvey), chunkHdr.m_recCount, this->m_file) != chunkHdr.m_recCount) readErr = true; if ((!readErr) && (chunkHdr.m_dataSize > 0)) { void * tmpData = malloc(chunkHdr.m_dataSize); if (fread(tmpData, chunkHdr.m_dataSize, 1, this->m_file) != 1) readErr = true; else this->m_surveysData.AppendData(tmpData, chunkHdr.m_dataSize); free(tmpData); } if (!readErr) { for(i = 0; i < chunkHdr.m_recCount; i++) { tmpRecs[i].m_namePtr.m_position += orig_size; tmpRecs[i].m_titlePtr.m_position += orig_size; this->m_surveys.push_back(tmpRecs[i]); } } delete [] tmpRecs; } break; */ #define lxFileStartImportItem(impID, impClass, impData) \ case impID: \ if (chunkHdr.m_recCount > 0) { \ orig_size = this->impData.m_size; \ tmpRecsData = new char [chunkHdr.m_recSize]; \ impClass tmpRec; \ if (fread(tmpRecsData, chunkHdr.m_recSize, 1, this->m_file) != 1) \ readErr = true; \ if ((!readErr) && (chunkHdr.m_dataSize > 0)) { \ void * tmpData = malloc(chunkHdr.m_dataSize); \ if (fread(tmpData, chunkHdr.m_dataSize, 1, this->m_file) != 1) \ readErr = true; \ else \ this->impData.AppendData(tmpData, chunkHdr.m_dataSize); \ free(tmpData); \ } \ if (!readErr) { \ tmpPtr = tmpRecsData; \ for(i = 0; i < chunkHdr.m_recCount; i++) { \ tmpRec.Load(tmpPtr); #define lxFileEndImportItem() \ } \ } \ delete [] tmpRecsData; \ } \ break; lxFileStartImportItem(LXFILE_CHUNK_SURVEY, lxFileSurvey, m_surveysData) tmpRec.m_id += orig_survey_id; tmpRec.m_namePtr.m_position += orig_size; tmpRec.m_titlePtr.m_position += orig_size; this->m_surveys.push_back(tmpRec); this->m_nSurveys++; lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_STATION, lxFileStation, m_stationsData) tmpRec.m_id += orig_station_id; tmpRec.m_surveyId += orig_survey_id; tmpRec.m_namePtr.m_position += orig_size; tmpRec.m_commentPtr.m_position += orig_size; this->m_stations.push_back(tmpRec); this->m_nStations++; lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SHOT, lxFileShot, m_shotsData) tmpRec.m_from += orig_station_id; tmpRec.m_to += orig_station_id; tmpRec.m_surveyId += orig_survey_id; this->m_shots.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SCRAP, lxFileScrap, m_scrapsData) tmpRec.m_pointsPtr.m_position += orig_size; tmpRec.m_3AnglesPtr.m_position += orig_size; tmpRec.m_surveyId += orig_survey_id; this->m_scraps.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SURFACE, lxFileSurface, m_surfacesData) tmpRec.m_dataPtr.m_position += orig_size; this->m_surfaces.push_back(tmpRec); lxFileEndImportItem() lxFileStartImportItem(LXFILE_CHUNK_SURFACEBMP, lxFileSurfaceBitmap, m_surfaceBitmapsData) tmpRec.m_dataPtr.m_position += orig_size; this->m_surfaceBitmaps.push_back(tmpRec); lxFileEndImportItem() default: readErr = true; } } fclose(this->m_file); } lxFileSizeT lxFile__SplitTokens(unsigned char * str, unsigned char ** tokens, lxFileSizeT max_tokens) { lxFileSizeT nt = 0, sl, sp; unsigned char * cc; bool inside = false; if ((str == NULL) || (max_tokens == 0)) return 0; sl = strlen((char *)str); max_tokens--; for (sp = 0, cc = str; (sp < sl) && (nt < max_tokens); sp++, cc++) { if (inside && (*cc < 33)) { *cc = 0; inside = false; nt++; } else if ((!inside) && (*cc > 32)) { inside = true; tokens[nt] = cc; } } return nt; } bool lxFile__CheckLRUD(double & du, double & dd, double & dl, double & dr, double mv, double mh) { if ((du <= 0.0) && (dd <= 0.0) && (dl <= 0.0) && (dr <= 0.0)) { return false; } else { if (mv > 0.0) { if (du < 0.0) du = mv; if (dd < 0.0) dd = mv; if (dl < 0.0) dl = mv; if (dr < 0.0) dr = mv; return true; } else { // LR if ((du < 0.0) && (dd >= 0.0)) du = dd; if ((dd < 0.0) && (du >= 0.0)) dd = du; // UD if ((dl < 0.0) && (dr >= 0.0)) dl = dr; if ((dr < 0.0) && (dl >= 0.0)) { dr = dl; if (dr > mh) dr = mh; } if (du < 0.0) { du = dd = (dl + dr) / 2.0; } if (dl < 0.0) { dl = dr = (du + dd) / 2.0; if (dr > mh) dr = mh; } return true; } } } lxFileSizeT lxFileSurvey::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_namePtr.Save(ptr); s += this->m_parent.Save(ptr); s += this->m_titlePtr.Save(ptr); return s; } lxFileSizeT lxFileSurvey::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_namePtr.Load(ptr); s += this->m_parent.Load(ptr); s += this->m_titlePtr.Load(ptr); return s; } lxFileSurvey * lxFile::NewSurvey() { lxFileSurvey tmp; tmp.m_id = this->m_nSurveys++; this->m_surveys.push_back(tmp); return &(this->m_surveys.back()); } lxFileStation * lxFile::NewStation() { lxFileStation tmp; tmp.m_id = this->m_nStations++; this->m_stations.push_back(tmp); return &(this->m_stations.back()); } lxFileShot * lxFile::NewShot() { this->m_shots.push_back(lxFileShot()); return &(this->m_shots.back()); } #define PltLrudNaN(x) {if ((x < 0.0) || (long(x*100) == 99900)) x = -999.0;} void lxFile::ImportPLT(const char * fn) { this->m_error.clear(); char * prevlocale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); size_t lns; char * lnp; char ln[1024]; lns = 1024; lnp = &(ln[0]); bool lrudOK, lrudOKPrev = false; unsigned char * tok[16]; lxFileDbl lrud[4], lrudPrev[4]; lrudPrev[0] = lrudPrev[1] = lrudPrev[2] = lrudPrev[3] = -1.0; lxFileSizeT nt; this->m_file = fopen(fn,"r"); if (this->m_file == NULL) { this->m_error = "unable to open file for input"; return; } #define tok2num(v, n) v = atof((const char *)tok[n]); lxFileSurvey * tmpSurvey; lxFileShot * shPtr; lxFileStation * stPtr, * stPtrPrev; stPtrPrev = 0; bool hasPT = false; char * sname = new char [strlen(fn)+1]; int x, xx; xx = 0; for (x = (strlen(fn) - 1); x >= 0; x--) { if ((fn[x] == '\\') || (fn[x] == '/')) { xx = x + 1; break; } } for (x = xx; (x < int(strlen(fn))) && (strcasecmp(&(fn[x]),".PLT") != 0); x++) { sname[x - xx] = fn[x]; sname[x - xx + 1] = 0; } tmpSurvey = this->NewSurvey(); tmpSurvey->m_namePtr = this->m_surveysData.AppendStr(sname); delete [] sname; while (!feof(this->m_file)) { getline(&lnp, &lns, this->m_file); nt = lxFile__SplitTokens((unsigned char *) lnp, &(tok[0]), 16); (void)nt; switch (*(tok[0])) { case 'M': case 'D': if (!hasPT && (*(tok[0]) == 'D')) { *(tok[0]) = 'M'; } tok2num(lrud[0],6);PltLrudNaN(lrud[0]); tok2num(lrud[1],9);PltLrudNaN(lrud[1]); tok2num(lrud[2],7);PltLrudNaN(lrud[2]); tok2num(lrud[3],8);PltLrudNaN(lrud[3]); lrudOK = lxFile__CheckLRUD(lrud[0], lrud[1], lrud[2], lrud[3], 2.0, 5.0); if (lrudOK) { lrud[0] *= 0.3048; lrud[1] *= 0.3048; lrud[2] *= 0.3048; lrud[3] *= 0.3048; } stPtr = this->NewStation(); tok2num(stPtr->m_c[0],2); tok2num(stPtr->m_c[1],1); tok2num(stPtr->m_c[2],3); stPtr->m_c[0] *= 0.3048; stPtr->m_c[1] *= 0.3048; stPtr->m_c[2] *= 0.3048; stPtr->m_surveyId = tmpSurvey->m_id; hasPT = true; if (*(tok[0]) == 'D') { shPtr = this->NewShot(); shPtr->m_from = stPtrPrev->m_id; shPtr->m_to = stPtr->m_id; shPtr->m_fLRUD[0] = lrudPrev[0]; shPtr->m_fLRUD[1] = lrudPrev[1]; shPtr->m_fLRUD[2] = lrudPrev[2]; shPtr->m_fLRUD[3] = lrudPrev[3]; shPtr->m_tLRUD[0] = lrud[0]; shPtr->m_tLRUD[1] = lrud[1]; shPtr->m_tLRUD[2] = lrud[2]; shPtr->m_tLRUD[3] = lrud[3]; shPtr->m_surveyId = tmpSurvey->m_id; if (lrudOK && lrudOKPrev) { shPtr->m_sectionType = LXFILE_SHOT_SECTION_OVAL; } else { shPtr->m_sectionType = LXFILE_SHOT_SECTION_NONE; } } lrudPrev[0] = lrud[0]; lrudPrev[1] = lrud[1]; lrudPrev[2] = lrud[2]; lrudPrev[3] = lrud[3]; lrudOKPrev = lrudOK; stPtrPrev = stPtr; break; } } fclose(this->m_file); setlocale(LC_NUMERIC,prevlocale); } struct imp3Dpos { double x, y, z; imp3Dpos(double xx, double yy, double zz) : x(xx), y(yy), z(zz) {} }; bool operator < (const imp3Dpos & p1, const imp3Dpos & p2) { if (p1.x < p2.x) return true; if (p1.x > p2.x) return false; if (p1.y < p2.y) return true; if (p1.y > p2.y) return false; if (p1.z < p2.z) return true; return false; } void lxFile::Import3D(const char * fn) { this->m_error.clear(); img_point imgpt; img * pimg; int result; bool lrudOK, lrudOKPrev = false; lxFileDbl lrud[4], lrudPrev[4]; lrudPrev[0] = lrudPrev[1] = lrudPrev[2] = lrudPrev[3] = -1.0; pimg = img_open(fn); if (pimg == NULL) { this->m_error = "unable to open file for input"; return; } lxFileSurvey * tmpSurvey; lxFileShot * shPtr; lxFileStation * stPtr, * stPtrPrev, * stPtrLRUD, * stPtrLRUDPrev; stPtr = NULL; stPtrPrev = NULL; stPtrLRUDPrev = NULL; bool hasPT = false; char * sname = new char [strlen(fn)+1]; int x, xx; xx = 0; for (x = (strlen(fn) - 1); x >= 0; x--) { if ((fn[x] == '\\') || (fn[x] == '/')) { xx = x + 1; break; } } for (x = xx; (x < int(strlen(fn))) && (strcasecmp(&(fn[x]),".PLT") != 0); x++) { sname[x - xx] = fn[x]; sname[x - xx + 1] = 0; } tmpSurvey = this->NewSurvey(); tmpSurvey->m_namePtr = this->m_surveysData.AppendStr(sname); delete [] sname; std::map label_map; std::map::iterator lmi; std::map pos_map; std::map::iterator pmi; // Create all stations with names // Set HAS_WALLS flag if applicable do { result = img_read_item(pimg, &imgpt); switch (result) { case img_LABEL: if (pimg->label != NULL) { stPtr = this->NewStation(); stPtr->m_c[0] = imgpt.x; stPtr->m_c[1] = imgpt.y; stPtr->m_c[2] = imgpt.z; stPtr->m_surveyId = tmpSurvey->m_id; label_map[std::string(pimg->label)] = stPtr; pos_map[imp3Dpos(imgpt.x, imgpt.y, imgpt.z)] = stPtr; } break; case img_XSECT: lmi = label_map.find(pimg->label); if (lmi != label_map.end()) { stPtr = lmi->second; stPtr->SetFlag(LXFILE_STATION_FLAG_HAS_WALLS, true); } break; case img_BAD: this->m_error = "invalid file format"; return; } } while (result != img_STOP); img_rewind(pimg); stPtr = NULL; do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: case img_LINE: if ((!hasPT) && (result == img_LINE)) { result = img_MOVE; } pmi = pos_map.find(imp3Dpos(imgpt.x, imgpt.y, imgpt.z)); if (pmi != pos_map.end()) { stPtr = pmi->second; } else { stPtr = this->NewStation(); stPtr->m_c[0] = imgpt.x; stPtr->m_c[1] = imgpt.y; stPtr->m_c[2] = imgpt.z; stPtr->m_surveyId = tmpSurvey->m_id; } hasPT = true; if (result == img_LINE) { shPtr = this->NewShot(); shPtr->m_from = stPtrPrev->m_id; shPtr->m_to = stPtr->m_id; shPtr->m_surveyId = tmpSurvey->m_id; shPtr->m_sectionType = LXFILE_SHOT_SECTION_NONE; if ((pimg->flags & img_FLAG_SURFACE) != 0) { shPtr->SetFlag(LXFILE_SHOT_FLAG_SURFACE, true); } if ((pimg->flags & img_FLAG_DUPLICATE) != 0) { shPtr->SetFlag(LXFILE_SHOT_FLAG_DUPLICATE, true); } if (stPtr->GetFlag(LXFILE_STATION_FLAG_HAS_WALLS) || stPtrPrev->GetFlag(LXFILE_STATION_FLAG_HAS_WALLS)) { shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_LRUD, true); } } stPtrPrev = stPtr; break; case img_XSECT: lmi = label_map.find(pimg->label); if (lmi != label_map.end()) { stPtrLRUD = lmi->second; lrud[0] = pimg->l; lrud[1] = pimg->r; lrud[2] = pimg->u; lrud[3] = pimg->d; lrudOK = lxFile__CheckLRUD(lrud[0], lrud[1], lrud[2], lrud[3], 2.0, 5.0); if (lrudOK) { stPtr->SetFlag(LXFILE_STATION_FLAG_HAS_WALLS, true); } if ((stPtrLRUDPrev != NULL) && lrudOK && lrudOKPrev) { shPtr = this->NewShot(); shPtr->m_from = stPtrLRUDPrev->m_id; shPtr->m_to = stPtrLRUD->m_id; shPtr->m_fLRUD[0] = lrudPrev[0]; shPtr->m_fLRUD[1] = lrudPrev[1]; shPtr->m_fLRUD[2] = lrudPrev[2]; shPtr->m_fLRUD[3] = lrudPrev[3]; shPtr->m_tLRUD[0] = lrud[0]; shPtr->m_tLRUD[1] = lrud[1]; shPtr->m_tLRUD[2] = lrud[2]; shPtr->m_tLRUD[3] = lrud[3]; shPtr->m_surveyId = tmpSurvey->m_id; shPtr->m_sectionType = LXFILE_SHOT_SECTION_OVAL; shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE, true); shPtr->SetFlag(LXFILE_SHOT_FLAG_NOT_LRUD, true); } } else { stPtrLRUD = NULL; lrud[0] = lrud[1] = lrud[2] = lrud[3] = -999.0; lrudOK = false; lrud[0] = -999.0; } lrudPrev[0] = lrud[0]; lrudPrev[1] = lrud[1]; lrudPrev[2] = lrud[2]; lrudPrev[3] = lrud[3]; stPtrLRUDPrev = stPtrLRUD; lrudOKPrev = lrudOK; break; case img_XSECT_END: stPtrLRUDPrev = NULL; break; case img_BAD: this->m_error = "invalid file format"; return; } } while (result != img_STOP); img_close(pimg); } struct missingShot { lxFileSizeT f, t; double length; }; struct missingStation { lxVec position; double average, sum, count; }; void lxFile::InterpolateMissingLRUD() { if (this->m_shots.size() == 0) return; if (this->m_stations.size() == 0) return; std::map stmap; std::vector osts; std::vector stations; std::list shots; lxFileSizeT ns, i; // 0. vytvorit vector originalnych stations lxFileStation_list::iterator osti; osts.resize(this->m_stations.size()); for (osti = this->m_stations.begin(); osti != this->m_stations.end(); osti++) { osts[osti->m_id] = &(*osti); } // 1. vytvorit zoznam identickych bodov a zamer medzi nimi ns = 0; std::list::iterator shi; std::map::iterator stmi; lxFileStation * st; missingStation tst; missingShot ts; lxVec fp, tp; for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { // from st = osts[shi->m_from]; fp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); stmi = stmap.find(fp); if (stmi == stmap.end()) { ts.f = ns; stmap[fp] = ts.f; tst.position = fp; stations.push_back(tst); ns++; } else { ts.f = stmi->second; } // to st = osts[shi->m_to]; tp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); stmi = stmap.find(tp); if (stmi == stmap.end()) { ts.t = ns; stmap[tp] = ts.t; ns++; tst.position = tp; stations.push_back(tst); } else { ts.t = stmi->second; } ts.length = (tp - fp).Length(); shots.push_back(ts); } } // 2. zratat priemerne dlzky if (ns == 0) return; std::list::iterator shli; for(i = 0; i < ns; i++) { stations[i].sum = 0.0; stations[i].count = 0.0; } for(shli = shots.begin(); shli != shots.end(); shli++) { stations[shli->f].sum += shli->length; stations[shli->f].count += 1.0; stations[shli->t].sum += shli->length; stations[shli->t].count += 1.0; } for(i = 0; i < ns; i++) { stations[i].average = stations[i].sum / stations[i].count; stations[i].sum = stations[i].average; stations[i].count = 1.0; } // 3. urobit klzavy priemer for(shli = shots.begin(); shli != shots.end(); shli++) { stations[shli->f].sum += stations[shli->t].average; stations[shli->t].sum += stations[shli->f].average; stations[shli->f].count += 1.0; stations[shli->t].count += 1.0; } double avg; for(i = 0; i < ns; i++) { avg = 0.25 * stations[i].sum / stations[i].count; if (avg < 0.5) avg = 0.3048; stations[i].average = avg; } // 4. interpolovat LRUD vsade kde ho nemame a neni surface for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_VISIBLE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { if (shi->m_sectionType == LXFILE_SHOT_SECTION_NONE) { shi->m_sectionType = LXFILE_SHOT_SECTION_OVAL; st = osts[shi->m_from]; fp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); i = stmap[fp]; avg = stations[i].average; shi->m_fLRUD[0] = avg; shi->m_fLRUD[1] = avg; shi->m_fLRUD[2] = avg; shi->m_fLRUD[3] = lxMin(avg, 1.5); st = osts[shi->m_to]; tp = lxVec(st->m_c[0],st->m_c[1],st->m_c[2]); i = stmap[tp]; avg = stations[i].average; shi->m_tLRUD[0] = avg; shi->m_tLRUD[1] = avg; shi->m_tLRUD[2] = avg; shi->m_tLRUD[3] = lxMin(avg, 1.5); } } } } lxFileSizeT lxFileStation::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_namePtr.Save(ptr); s += this->m_commentPtr.Save(ptr); s += this->m_flags.Save(ptr); s += this->m_c[0].Save(ptr); s += this->m_c[1].Save(ptr); s += this->m_c[2].Save(ptr); return s; } lxFileSizeT lxFileStation::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_namePtr.Load(ptr); s += this->m_commentPtr.Load(ptr); s += this->m_flags.Load(ptr); s += this->m_c[0].Load(ptr); s += this->m_c[1].Load(ptr); s += this->m_c[2].Load(ptr); return s; } void lxFileStation::SetFlag(int flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= ~flag; } bool lxFileStation::GetFlag(int flag) { return ((this->m_flags & flag) != 0); } lxFileSizeT lxFileShot::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_from.Save(ptr); s += this->m_to.Save(ptr); s += this->m_fLRUD[0].Save(ptr); s += this->m_fLRUD[1].Save(ptr); s += this->m_fLRUD[2].Save(ptr); s += this->m_fLRUD[3].Save(ptr); s += this->m_tLRUD[0].Save(ptr); s += this->m_tLRUD[1].Save(ptr); s += this->m_tLRUD[2].Save(ptr); s += this->m_tLRUD[3].Save(ptr); s += this->m_flags.Save(ptr); s += this->m_sectionType.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_threshold.Save(ptr); return s; } lxFileSizeT lxFileShot::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_from.Load(ptr); s += this->m_to.Load(ptr); s += this->m_fLRUD[0].Load(ptr); s += this->m_fLRUD[1].Load(ptr); s += this->m_fLRUD[2].Load(ptr); s += this->m_fLRUD[3].Load(ptr); s += this->m_tLRUD[0].Load(ptr); s += this->m_tLRUD[1].Load(ptr); s += this->m_tLRUD[2].Load(ptr); s += this->m_tLRUD[3].Load(ptr); s += this->m_flags.Load(ptr); s += this->m_sectionType.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_threshold.Load(ptr); return s; } void lxFileShot::SetFlag(int flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= ~flag; } bool lxFileShot::GetFlag(int flag) { return ((this->m_flags & flag) != 0); } lxFileSizeT lxFileScrap::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_surveyId.Save(ptr); s += this->m_numPoints.Save(ptr); s += this->m_pointsPtr.Save(ptr); s += this->m_num3Angles.Save(ptr); s += this->m_3AnglesPtr.Save(ptr); return s; } lxFileSizeT lxFileScrap::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_surveyId.Load(ptr); s += this->m_numPoints.Load(ptr); s += this->m_pointsPtr.Load(ptr); s += this->m_num3Angles.Load(ptr); s += this->m_3AnglesPtr.Load(ptr); return s; } lxFileSizeT lxFileSurface::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Save(ptr); s += this->m_width.Save(ptr); s += this->m_height.Save(ptr); s += this->m_dataPtr.Save(ptr); s += this->m_calib[0].Save(ptr); s += this->m_calib[1].Save(ptr); s += this->m_calib[2].Save(ptr); s += this->m_calib[3].Save(ptr); s += this->m_calib[4].Save(ptr); s += this->m_calib[5].Save(ptr); return s; } lxFileSizeT lxFileSurface::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_id.Load(ptr); s += this->m_width.Load(ptr); s += this->m_height.Load(ptr); s += this->m_dataPtr.Load(ptr); s += this->m_calib[0].Load(ptr); s += this->m_calib[1].Load(ptr); s += this->m_calib[2].Load(ptr); s += this->m_calib[3].Load(ptr); s += this->m_calib[4].Load(ptr); s += this->m_calib[5].Load(ptr); return s; } lxFileSizeT lxFileSurfaceBitmap::Save(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_surfaceId.Save(ptr); s += this->m_type.Save(ptr); s += this->m_dataPtr.Save(ptr); s += this->m_calib[0].Save(ptr); s += this->m_calib[1].Save(ptr); s += this->m_calib[2].Save(ptr); s += this->m_calib[3].Save(ptr); s += this->m_calib[4].Save(ptr); s += this->m_calib[5].Save(ptr); return s; } lxFileSizeT lxFileSurfaceBitmap::Load(lxFileBuff & ptr) { lxFileSizeT s(0); s += this->m_surfaceId.Load(ptr); s += this->m_type.Load(ptr); s += this->m_dataPtr.Load(ptr); s += this->m_calib[0].Load(ptr); s += this->m_calib[1].Load(ptr); s += this->m_calib[2].Load(ptr); s += this->m_calib[3].Load(ptr); s += this->m_calib[4].Load(ptr); s += this->m_calib[5].Load(ptr); return s; } bool lxFile::HasAnyWalls() { if (this->m_scraps.size() > 0) return true; std::list::iterator shi; for (shi = this->m_shots.begin(); shi != this->m_shots.end(); shi++) { if (!(shi->GetFlag(LXFILE_SHOT_FLAG_SURFACE) || shi->GetFlag(LXFILE_SHOT_FLAG_DUPLICATE) || shi->GetFlag(LXFILE_SHOT_FLAG_NOT_LRUD))) { if (shi->m_sectionType != LXFILE_SHOT_SECTION_NONE) { return true; } } } return false; } therion-5.4.1/loch/lxFile.h000066400000000000000000000127461307545355600155410ustar00rootroot00000000000000#ifndef lxFile_h #define lxFile_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #endif //LXDEPCHECK - standard libraries typedef char * lxFileBuff; #ifdef THMSVC #ifndef UINT32_MAX # define UINT32_MAX (0xffffffffUL) #endif #ifndef uint32_t #if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S) typedef unsigned long uint32_t; # define UINT32_C(v) v ## UL # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "l" # endif #elif (UINT_MAX == UINT32_MAX) typedef unsigned int uint32_t; # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "" # endif # define UINT32_C(v) v ## U #elif (USHRT_MAX == UINT32_MAX) typedef unsigned short uint32_t; # define UINT32_C(v) ((unsigned short) (v)) # ifndef PRINTF_INT32_MODIFIER # define PRINTF_INT32_MODIFIER "" # endif #else #error "Platform not supported" #endif #endif #else #include #endif #define lxFileSizeT uint32_t struct lxFileSize { lxFileSizeT m_size; operator lxFileSizeT & () {return this->m_size;} lxFileSizeT & operator = (const lxFileSizeT & right) {return this->m_size = right;} lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileDbl { double m_num; operator double & () {return this->m_num;} double & operator = (const double & right) {return this->m_num = right;} lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileDataPtr { lxFileSize m_position, m_size; lxFileDataPtr(); void Clear(); lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileData { void * m_data; lxFileSizeT m_size, m_buffSize; lxFileData(); void Clear(); void Copy(lxFileSizeT size, const void * src); void BuffResize(lxFileSizeT size); const void * GetData(lxFileDataPtr ptr); const char * GetString(lxFileDataPtr ptr); FILE * GetTmpFile(lxFileDataPtr ptr); lxFileDataPtr AppendStr(const char * str); lxFileDataPtr AppendData(const void * data, lxFileSizeT size); lxFileDataPtr AppendFile(const char * fnm); }; struct lxFile3Point { lxFileDbl m_c[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFile3Angle { lxFileSize m_v[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; struct lxFileSurvey { lxFileSize m_id, m_parent; lxFileDataPtr m_namePtr, m_titlePtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurvey_list; enum { LXFILE_STATION_FLAG_SURFACE = 1, LXFILE_STATION_FLAG_ENTRANCE = 2, LXFILE_STATION_FLAG_FIXED = 4, LXFILE_STATION_FLAG_CONTINUATION = 8, LXFILE_STATION_FLAG_HAS_WALLS = 16, }; struct lxFileStation { lxFileSize m_id, m_surveyId; lxFileDataPtr m_namePtr, m_commentPtr; lxFileSize m_flags; lxFileDbl m_c[3]; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); void SetFlag(int flag, bool value); bool GetFlag(int flag); lxFileStation(); }; typedef std::list lxFileStation_list; enum { LXFILE_SHOT_FLAG_SURFACE = 1, LXFILE_SHOT_FLAG_DUPLICATE = 2, LXFILE_SHOT_FLAG_NOT_VISIBLE = 4, LXFILE_SHOT_FLAG_NOT_LRUD = 8, LXFILE_SHOT_FLAG_SPLAY = 8, }; enum { LXFILE_SHOT_SECTION_NONE, LXFILE_SHOT_SECTION_OVAL, LXFILE_SHOT_SECTION_SQUARE, LXFILE_SHOT_SECTION_DIAMOND, LXFILE_SHOT_SECTION_TUNNEL, }; struct lxFileShot { lxFileSize m_from, m_to, m_surveyId; lxFileDbl m_fLRUD[4], m_tLRUD[4]; lxFileDbl m_threshold; lxFileSize m_flags, m_sectionType; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); void SetFlag(int flag, bool value); bool GetFlag(int flag); lxFileShot(); }; typedef std::list lxFileShot_list; struct lxFileScrap { lxFileSize m_id, m_surveyId; lxFileDataPtr m_pointsPtr, m_3AnglesPtr; lxFileSize m_numPoints, m_num3Angles; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileScrap_list; struct lxFileSurface { lxFileSize m_id; lxFileSize m_width, m_height; lxFileDbl m_calib[6]; lxFileDataPtr m_dataPtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurface_list; enum { LXFILE_BITMAP_JPEG, LXFILE_BITMAP_PNG, }; struct lxFileSurfaceBitmap { lxFileSize m_surfaceId; lxFileSize m_type; lxFileDbl m_calib[6]; lxFileDataPtr m_dataPtr; lxFileSizeT Save(lxFileBuff & ptr); lxFileSizeT Load(lxFileBuff & ptr); }; typedef std::list lxFileSurfaceBitmap_list; struct lxFile { static bool m_bigEndian; lxFileSurvey_list m_surveys; lxFileData m_surveysData; lxFileSizeT m_nSurveys; lxFileStation_list m_stations; lxFileData m_stationsData; lxFileSizeT m_nStations; lxFileShot_list m_shots; lxFileData m_shotsData; lxFileScrap_list m_scraps; lxFileData m_scrapsData; lxFileSurface_list m_surfaces; lxFileData m_surfacesData; lxFileSurfaceBitmap_list m_surfaceBitmaps; lxFileData m_surfaceBitmapsData; std::string m_error; FILE * m_file; static void switchEndian(char * data, lxFileSizeT size); void ImportLOX(const char * fn); void ExportLOX(const char * fn); void Import3D(const char * fn); void ImportPLT(const char * fn); lxFile(); ~lxFile(); void Clear(); bool HasAnyWalls(); void InterpolateMissingLRUD(); lxFileSurvey * NewSurvey(); lxFileStation * NewStation(); lxFileShot * NewShot(); }; #endif therion-5.4.1/loch/lxGLC.cxx000066400000000000000000001562751307545355600156500ustar00rootroot00000000000000/** * @file lxGLC.cxx * Loch GL canvas implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #ifdef LXMACOSX #include #include #else #include #include #endif #endif //LXDEPCHECK - standard libraries #include "lxGLC.h" #include "lxGUI.h" #include "lxData.h" #include "lxSetup.h" #include "lxSView.h" #include "lxFNT6x13_bdf.h" #include "lxFNT10x20_bdf.h" #include "lxFNTFreeSans_ttf.h" #include "lxSetup.h" #include "lxRender.h" #include "lxGUI.h" #include "lxTR.h" #ifdef LXWIN32 #include "lxR2D.h" #endif #ifdef LXLINUX #include "lxR2P.h" #endif #define LXTRCBORDER (this->m_renderData->m_scaleMode == LXRENDER_FIT_SCREEN ? 0 : 16) BEGIN_EVENT_TABLE(lxGLCanvas, wxGLCanvas) EVT_LEFT_DCLICK(lxGLCanvas::OnMouseDouble) EVT_RIGHT_DCLICK(lxGLCanvas::OnMouseDouble) EVT_LEFT_DOWN(lxGLCanvas::OnMouseDown) EVT_LEFT_UP(lxGLCanvas::OnMouseUp) EVT_MIDDLE_DOWN(lxGLCanvas::OnMouseDown) EVT_MIDDLE_UP(lxGLCanvas::OnMouseUp) EVT_RIGHT_DOWN(lxGLCanvas::OnMouseDown) EVT_RIGHT_UP(lxGLCanvas::OnMouseUp) EVT_MOTION(lxGLCanvas::OnMouseMove) EVT_MOUSEWHEEL(lxGLCanvas::OnMouseWheel) EVT_SIZE(lxGLCanvas::OnSize) EVT_PAINT(lxGLCanvas::OnPaint) EVT_ERASE_BACKGROUND(lxGLCanvas::OnEraseBackground) EVT_ENTER_WINDOW(lxGLCanvas::OnEnterWindow ) EVT_CHAR(lxGLCanvas::OnKeyPress) EVT_IDLE(lxGLCanvas::OnIdle) #if wxCHECK_VERSION(2,9,0) EVT_MOUSE_CAPTURE_LOST(lxGLCanvas::OnMouseCaptureLost) #endif END_EVENT_TABLE() static const GLubyte srf16tex[48] = { 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0 }; lxGLCanvas::lxGLCanvas(struct lxSetup * stp, struct lxData * dat, wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxGLCanvas(parent, id, NULL, pos, size, style, name), ctx(this) { this->frame = NULL; this->data = dat; this->setup = stp; this->ww = 100; this->wh = 100; this->mx = 0; this->my = 0; this->m_sList = 0; this->m_sFixList = 0; this->m_sEntList = 0; this->m_sStList = 0; this->m_oList = 0; this->m_oFixList = 0; this->m_oEntList = 0; this->m_oStList = 0; this->m_lic = 0; this->m_sInit = true; this->m_sInitReset = true; this->m_isO = false; this->m_renderData = NULL; // fonts initialization FT_Library library = OGLFT::Library::instance(); FT_New_Memory_Face(library, lxFNT10x20_bdf, lxFNT10x20_bdf_size, 0, &this->m_ftFace1); FT_New_Memory_Face(library, lxFNT6x13_bdf, lxFNT6x13_bdf_size, 0, &this->m_ftFace2); FT_New_Memory_Face(library, lxFNTFreeSans_ttf, lxFNTFreeSans_ttf_size, 0, &this->m_ftFace3); this->m_fntTitleS = new OGLFT::Monochrome(this->m_ftFace1); this->m_fntNumericS = new OGLFT::Monochrome(this->m_ftFace2); this->m_fntTitleO = new OGLFT::Filled(this->m_ftFace3); this->m_fntNumericO = new OGLFT::Filled(this->m_ftFace3); this->m_OSC = NULL; this->m_TRC = NULL; this->m_sMoveLock = LXGLCML_NONE; this->m_sCameraAutoRotate = false; this->m_sCameraLockRotation = false; this->m_sCameraAutoRotateAngle = 1.0; this->m_maxTSizeO = 0; this->m_maxTSizeS = 0; this->m_initTextures = true; } bool lxGLCanvas::IsRenderingOff() { return (m_isO && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN)); } lxGLCanvas::~lxGLCanvas() { this->OSCDestroy(); this->TRCDestroy(); delete this->m_fntTitleS; delete this->m_fntNumericS; delete this->m_fntTitleO; delete this->m_fntNumericO; FT_Done_Face(this->m_ftFace1); FT_Done_Face(this->m_ftFace2); FT_Done_Face(this->m_ftFace3); } void lxGLCanvas::OnEnterWindow( wxMouseEvent& WXUNUSED(event) ) { //this->SetFocus(); } void lxGLCanvas::RenderScreen() { glViewport(0, 0, (GLint) this->ww, (GLint) this->wh); if (this->m_sInit) this->InitializeS(); if (this->setup->cam_anaglyph) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); this->setup->cam_anaglyph_left = false; this->SetCamera(); this->SetColorMask(); glCallList(this->m_sList); this->setup->cam_anaglyph_left = true; this->SetCamera(); this->SetColorMask(); glCallList(this->m_sList); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else { this->SetCamera(); glCallList(this->m_sList); } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); this->RenderOffList(); if (this->setup->m_vis_indicators) this->RenderInds(); } #if wxCHECK_VERSION(2,9,0) void lxGLCanvas::OnMouseCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event)) {} #endif void lxGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); if (!this->m_isO) { this->ctx.SetCurrent(*this); this->RenderScreen(); SwapBuffers(); } } void lxGLCanvas::ForceRefresh(bool updateTB) { this->Refresh(false); if (updateTB) this->frame->SetupUpdate(); } void lxGLCanvas::OnSize(wxSizeEvent& event) { // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...) int w, h; this->GetClientSize(&w, &h); this->setup->cam_width = double((GLfloat) w / (GLfloat) h); this->ww = w; this->wh = h; #ifdef __WXMSW__ this->ForceRefresh(); #endif // this is also necessary to update the context on some platforms event.Skip(); } void lxGLCanvas::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) { // Do nothing, to avoid flashing. } void lxGLCanvas::InitializeS() { wxSizeEvent tmpe; OnSize(tmpe); this->OpenGLInit(); //this->SetFontColors(); this->UpdateRenderContents(); this->UpdateRenderList(); if (this->m_sInitReset) { this->setup->ResetCamera(); this->m_sInitReset = false; } this->m_sInit = false; } void lxGLCanvas::UpdateRenderList() { this->ctx.SetCurrent(*this); if (this->m_sList == 0) this->m_sList = glGenLists(1); glNewList(this->m_sList, GL_COMPILE); this->RenderAll(); glEndList(); } void lxGLCanvas::UpdateRenderContents() { this->setup->UpdateData(); if (this->data->m_textureSurface.image.data != NULL) { GLint newTSizeO, newTSizeS; newTSizeO = this->m_maxTSizeO; newTSizeS = this->m_maxTSizeS; if (this->m_isO) { glGetIntegerv(GL_MAX_TEXTURE_SIZE, &newTSizeO); if (newTSizeO > 4096) newTSizeO = 4096; //printf("MaxTSizeO: %d\n", newTSizeO); if (newTSizeS == 0) { newTSizeS = newTSizeO; } } else { glGetIntegerv(GL_MAX_TEXTURE_SIZE, &newTSizeS); if (newTSizeS > 4096) newTSizeS = 4096; //printf("MaxTSizeS: %d\n", newTSizeS); if (newTSizeO == 0) { newTSizeO = newTSizeS; } } if ((this->data->m_textureSurface.texS == NULL) || (this->m_maxTSizeO != newTSizeO) || (this->m_maxTSizeS != newTSizeS)) { this->m_maxTSizeS = newTSizeS; this->m_maxTSizeO = newTSizeO; this->ctx.SetCurrent(*this); this->data->m_textureSurface.CreateTexImages(this->m_maxTSizeS, this->m_maxTSizeO); if (this->m_isO) this->OSCMakeCurrent(); } if (this->m_initTextures) { glGenTextures(1, & this->m_idTexSurface); glGenTextures(1, & this->m_idTexStation); this->m_initTextures = false; } glBindTexture(GL_TEXTURE_2D, this->m_idTexSurface); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (this->m_isO) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->data->m_textureSurface.texSizeO, this->data->m_textureSurface.texSizeO, 0, GL_RGB, GL_UNSIGNED_BYTE, (this->setup->cam_anaglyph && this->setup->cam_anaglyph_bw) ? this->data->m_textureSurface.texObw : this->data->m_textureSurface.texO); } else { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, this->data->m_textureSurface.texSizeS, this->data->m_textureSurface.texSizeS, 0, GL_RGB, GL_UNSIGNED_BYTE, (this->setup->cam_anaglyph && this->setup->cam_anaglyph_bw) ? this->data->m_textureSurface.texSbw : this->data->m_textureSurface.texS); } } this->shift = (this->setup->data_limits.max + this->setup->data_limits.min) / 2.0; } void lxGLCanvas::UpdateContents() { this->UpdateRenderContents(); this->UpdateRenderList(); this->ForceRefresh(); } void lxGLCanvas::OnMouseUp(wxMouseEvent& event) { switch (this->m_sMoveLock) { case LXGLCML_ZOOM: case LXGLCML_ROTATE: case LXGLCML_ZOOM2ROTATE: if (event.LeftUp()) this->m_sMoveLock = LXGLCML_NONE; break; case LXGLCML_PANX: case LXGLCML_PANY: case LXGLCML_PANX2Y: if ((this->mx == event.GetX()) && (this->my == event.GetY())) { this->PopupMenu(this->frame->m_toolMenu); } if (event.RightUp() || (event.LeftUp() && this->m_sMoveSingle)) this->m_sMoveLock = LXGLCML_NONE; break; case LXGLCML_TILT: if (event.MiddleUp() || (event.LeftUp() && this->m_sMoveSingle)) this->m_sMoveLock = LXGLCML_NONE; break; } if ((this->m_sMoveLock == LXGLCML_NONE) && (this->HasCapture())) { this->ReleaseMouse(); } } void lxGLCanvas::SetColorMask() { switch (this->setup->cam_anaglyph_glasses) { // red & cyan case 0: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE); break; // red & green case 1: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); break; // red & blue case 2: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); break; // yellow & blue case 3: if (this->setup->cam_anaglyph_left) glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE); else glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); break; // cyan & red case 4: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // green & red case 5: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // blue & red case 6: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); break; // yellow & blue default: if (this->setup->cam_anaglyph_left) glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE); else glColorMask(GL_TRUE, GL_TRUE, GL_FALSE, GL_TRUE); break; } } bool lxGLCanvas::CameraAutoRotate() { if (this->m_sCameraAutoRotate) { this->setup->RotateCameraF(this->m_sCameraAutoRotateAngle); this->ForceRefresh(); this->m_sCameraAutoRotateCounter++; if (this->m_sCameraAutoRotateSWatch.Time() > 1000) { ((wxStaticText *)(this->frame->m_viewpointSetupDlg->FindWindow(LXVSTP_RENSPEED)))->SetLabel( wxString::Format(_("Rendering at %.1f fps."), 1000.0 * double(this->m_sCameraAutoRotateCounter) / double(this->m_sCameraAutoRotateSWatch.Time()))); this->m_sCameraAutoRotateCounter = 0; this->m_sCameraAutoRotateSWatch.Start(); } return true; } else return false; } void lxGLCanvas::OnIdle(wxIdleEvent& WXUNUSED(event)) { // fix bug with opening file before everything is initialized if (!this->frame->m_fileToOpen.IsEmpty()) { wxString fto; fto = this->frame->m_fileToOpen; this->frame->m_fileToOpen = _T(""); this->frame->OpenFile(fto); return; } switch (this->m_sMoveLock) { case LXGLCML_PANX: case LXGLCML_PANX2Y: case LXGLCML_PANY: break; default: this->CameraAutoRotate(); break; } } void lxGLCanvas::OnMouseDouble(wxMouseEvent& event) { if (event.m_leftDown) this->frame->ToggleFullScreen(); } void lxGLCanvas::OnMouseDown(wxMouseEvent& event) { this->m_lic = 0; switch (this->m_sMoveLock) { case LXGLCML_ZOOM2ROTATE: if (event.RightDown()) { if (abs(this->mx - event.GetX()) >= abs(this->my - event.GetY())) { this->m_sMoveLock = LXGLCML_ROTATE; } else { this->m_sMoveLock = LXGLCML_ZOOM; } } break; case LXGLCML_PANX2Y: if (event.LeftDown()) { if (abs(this->mx - event.GetX()) >= abs(this->my - event.GetY())) { this->m_sMoveLock = LXGLCML_PANX; } else { this->m_sMoveLock = LXGLCML_PANY; } } break; case LXGLCML_NONE: this->mx = event.GetX(); this->my = event.GetY(); this->m_sCameraStartAutoRotateAngle = this->m_sCameraAutoRotateAngle; this->setup->StartCameraMovement(); this->m_sMoveSingle = false; if (event.LeftDown() && event.ShiftDown()) { this->m_sMoveLock = LXGLCML_PANX2Y; this->m_sMoveSingle = true; } else if (event.LeftDown() && event.ControlDown()) { this->m_sMoveLock = LXGLCML_TILT; this->m_sMoveSingle = true; } else if (event.LeftDown()) { this->m_sMoveLock = LXGLCML_ZOOM2ROTATE; } else if (event.RightDown()) { this->m_sMoveLock = LXGLCML_PANX2Y; } else if (event.MiddleDown()) { this->m_sMoveLock = LXGLCML_TILT; } break; } if (this->m_sMoveLock != LXGLCML_NONE) { if (!this->HasCapture()) { this->CaptureMouse(); } } } void lxGLCanvas::OnMouseWheel(wxMouseEvent& event) { if (this->m_sMoveLock == LXGLCML_NONE) { this->setup->StartCameraMovement(); this->setup->TiltCamera(-1.0 * double(event.GetWheelRotation()) / double(event.GetWheelDelta())); this->ForceRefresh(); } } void lxGLCanvas::OnMouseMove(wxMouseEvent& event) { double f, ff; switch (this->m_sMoveLock) { case LXGLCML_ZOOM: case LXGLCML_ROTATE: case LXGLCML_ZOOM2ROTATE: if ((this->m_sMoveLock == LXGLCML_ZOOM) || (this->m_sMoveLock == LXGLCML_ZOOM2ROTATE)) f = pow(1.4142135623730950488016887242097, double(this->my - event.GetY()) / 20.0); else f = 1.0; if ((!this->m_sCameraLockRotation) && ((this->m_sMoveLock == LXGLCML_ROTATE) || (this->m_sMoveLock == LXGLCML_ZOOM2ROTATE))) { ff = double(event.GetX() - this->mx) / 2.0; } else { ff = 0.0; } this->setup->ZoomCamera(f); if (this->m_sCameraAutoRotate) { this->m_sCameraAutoRotateAngle = this->m_sCameraStartAutoRotateAngle + ff / 50.0; #ifdef LXWIN32 if (!this->CameraAutoRotate()) this->ForceRefresh(); #endif } else { this->setup->RotateCamera(ff); this->ForceRefresh(); } break; case LXGLCML_PANX: case LXGLCML_PANY: case LXGLCML_PANX2Y: if ((this->m_sMoveLock == LXGLCML_PANX) || (this->m_sMoveLock == LXGLCML_PANX2Y)) f = double(event.GetX() - this->mx) / double(this->ww); else f = 0.0; if ((this->m_sMoveLock == LXGLCML_PANY) || (this->m_sMoveLock == LXGLCML_PANX2Y)) ff = double(event.GetY() - this->my) / double(this->wh); else ff = 0.0; this->setup->PanCamera(f, ff); this->ForceRefresh(); break; case LXGLCML_TILT: this->setup->TiltCamera(double(event.GetY() - this->my) / 2.0); if (this->m_sCameraAutoRotate) { #ifdef LXWIN32 if (!this->CameraAutoRotate()) this->ForceRefresh(); #else ; #endif } else { this->ForceRefresh(); } break; } if (this->m_sMoveLock != LXGLCML_NONE) { if (!this->HasCapture()) { this->CaptureMouse(); } } } void lxGLCanvas::OnKeyPress(wxKeyEvent& event) { switch (event.GetKeyCode()) { case WXK_ESCAPE: if (this->frame->IsFullScreen()) this->frame->ToggleFullScreen(); break; case WXK_LEFT: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(-0.02, 0.0); else this->setup->RotateCamera(-1.0); this->ForceRefresh(); break; case WXK_RIGHT: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.02, 0.0); else this->setup->RotateCamera(1.0); this->ForceRefresh(); break; case WXK_UP: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.0, -0.02); else if (event.ControlDown()) this->setup->ZoomCamera(1.02); else this->setup->TiltCamera(-1.0); this->ForceRefresh(); break; case WXK_DOWN: this->setup->StartCameraMovement(); if (event.ShiftDown()) this->setup->PanCamera(0.0, 0.02); else if (event.ControlDown()) this->setup->ZoomCamera(0.98); else this->setup->TiltCamera(1.0); this->ForceRefresh(); break; default: event.Skip(); } } #define lxFNTSH (this->IsRenderingOff() ? (this->m_fntNumericO->pointSize() * this->m_fntNumericO->resolution() / 72.0) : 13.0) #define lxFNTSW (this->IsRenderingOff() ? (0.55 * lxFNTSH) : 6.0) #define lxFNTLH (this->IsRenderingOff() ? (this->m_fntTitleO->pointSize() * this->m_fntTitleO->resolution() / 72.0) : 20.0) #define lxFNTLW (this->IsRenderingOff() ? (0.55 * lxFNTLH) : 10.0) OGLFT::Face * lxGLCanvas::GetFontNumeric() { if (this->IsRenderingOff()) return this->m_fntNumericO; else return this->m_fntNumericS; } OGLFT::Face * lxGLCanvas::GetFontTitle() { if (this->IsRenderingOff()) return this->m_fntTitleO; else return this->m_fntTitleS; } void lxGLCanvas::SetCamera() { double minclip, maxclip, vclip, hclip; lxVecLimits ml = this->setup->data_limits.Rotate(this->setup->cam_dir, this->setup->cam_tilt, this->setup->cam_center); //printf("\n\n\nCAMERA\n"); //printf(" dir: %12.2f\n", this->setup->cam_dir); //printf(" tilt: %12.2f\n", this->setup->cam_tilt); //printf(" ext x: %12.2f%12.2f\n", ml.min.x, ml.max.x); //printf(" y: %12.2f%12.2f\n", ml.min.y, ml.max.y); //printf(" z: %12.2f%12.2f\n", ml.min.z, ml.max.z); //printf("center: %12.2f%12.2f%12.2f\n", lxVecXYZ(this->setup->cam_center)); //printf(" pos: %12.2f%12.2f%12.2f\n", lxVecXYZ(this->setup->cam_pos)); //printf(" dist: %12.2f\n", this->setup->cam_dist); minclip = this->setup->cam_dist + ml.min.y; if (minclip < 0.0) minclip = 1.0; minclip = 0.9 * minclip; maxclip = this->setup->cam_dist + ml.max.y; maxclip = 1.1 * maxclip; if (maxclip < minclip) maxclip = minclip + 1.0; if (minclip < (maxclip / 100.0)) minclip = maxclip / 100.0; glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->setup->cam_persp) { if (!this->m_isO) { gluPerspective(this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } else { if (this->TRCGetContext()) { trPerspective(this->TRCGetContext(), this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } else { gluPerspective(this->setup->cam_lens_vfov, this->setup->cam_width, minclip, maxclip); } } } else { vclip = this->setup->cam_dist * this->setup->cam_lens_vfovr; hclip = vclip * this->setup->cam_width; //printf("x clip: %12.2f%12.2f\n", -hclip, hclip); //printf("y clip: %12.2f%12.2f\n", -vclip, vclip); if (!this->m_isO) { glOrtho(-hclip, hclip, -vclip, vclip, minclip, maxclip); } else { if (this->TRCGetContext() != NULL) { trOrtho(this->TRCGetContext(), -hclip, hclip, -vclip, vclip, minclip, maxclip); } else { glOrtho(-hclip, hclip, -vclip, vclip, minclip, maxclip); } } } //printf("z clip: %12.2f%12.2f\n", minclip, maxclip); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); lxVec up = lxVec( sin(this->setup->cam_tilt / 180.0 * lxPI) * sin(this->setup->cam_dir / 180.0 * lxPI), sin(this->setup->cam_tilt / 180.0 * lxPI) * cos(this->setup->cam_dir / 180.0 * lxPI), cos(this->setup->cam_tilt / 180.0 * lxPI) ); //printf("LOOK FROM: %12.2f%12.2f%12.f\n", lxShiftVecXYZ(this->setup->cam_pos,this->shift)); //printf(" TO: %12.2f%12.2f%12.f\n", lxShiftVecXYZ(this->setup->cam_center,this->shift)); //printf(" UP: %12.2f%12.2f%12.f\n", lxVecXYZ(up)); if (this->setup->cam_anaglyph) { lxVec aRPosShift = (this->setup->cam_anaglyph_left ? -1.0 : 1.0) * (this->setup->cam_anaglyph_eyesep * this->setup->cam_dist) * lxVec( -cos(this->setup->cam_dir / 180.0 * lxPI), sin(this->setup->cam_dir / 180.0 * lxPI), 0 ); gluLookAt(lxShiftVecXYZ(this->setup->cam_pos,this->shift + aRPosShift), lxShiftVecXYZ(this->setup->cam_center, this->shift), lxVecXYZ(up)); } else { gluLookAt(lxShiftVecXYZ(this->setup->cam_pos,this->shift), lxShiftVecXYZ(this->setup->cam_center,this->shift), lxVecXYZ(up)); } // Save view coordinates glGetDoublev(GL_MODELVIEW_MATRIX, m_camera_modelview); glGetDoublev(GL_PROJECTION_MATRIX, m_camera_projection); glGetIntegerv(GL_VIEWPORT, m_camera_viewport); } static const GLfloat mat0[] = { 0.0, 0.0, 0.0, 1.0}; static const GLfloat mat1[] = { 1.0, 1.0, 1.0, 1.0}; static const GLfloat mat2[] = { 0.5}; static const GLfloat mat3[] = { 1.0, 1.0, 1.0, 0.5}; void lxGLCanvas::RenderScrapWalls() { GLfloat clr[4]; clr[0] = 1.0; clr[1] = 1.0; clr[2] = 1.0; clr[3] = this->setup->m_walls_opacity; glColor4f(1.0,1.0,1.0,this->setup->m_walls_opacity); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glEnable(GL_LIGHTING); bool useTransparency; useTransparency = false; if (this->setup->m_walls_transparency && (clr[3] < 1.0)) { lxVec viewDir; viewDir = this->setup->cam_center - this->setup->cam_pos; viewDir.Normalize(); this->data->allWallsSorted->SetVector(viewDir.x, viewDir.y, viewDir.z); glDepthMask(GL_FALSE); glEnable(GL_BLEND); useTransparency = true; } else { glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glEnable(GL_COLOR_MATERIAL); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat2); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glColor4fv(clr); vtkIdType * cPts, nPts, xP; double * nmv, * ptc, nmvv[3]; this->data->scrapWallsNormals->Update(); vtkPolyData * pdt; if (useTransparency) { pdt = this->data->allWallsSorted->GetOutput(); } else { pdt = this->data->allWallsStripped->GetOutput(); } vtkCellArray * tgs = pdt->GetPolys(); vtkCellArray * tss = pdt->GetStrips(); vtkDataArray * nms = pdt->GetPointData()->GetNormals(); #define draw3vert(N) \ ptc = pdt->GetPoint(cPts[N]); \ nmv = nms->GetTuple(cPts[N]); \ glNormal3f(nmv[0],nmv[1],nmv[2]); \ if ((!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT) && (this->setup->m_colormd_app_walls)) { \ this->data->luTable->GetColor(ptc[2], nmvv); \ clr[0] = nmvv[0]; clr[1] = nmvv[1]; clr[2] = nmvv[2]; \ glColor4fv(clr); \ } \ glVertex3f(lxShiftVecX3(ptc, this->shift)); tgs->InitTraversal(); glBegin(GL_TRIANGLES); while (tgs->GetNextCell(nPts, cPts) != 0) { if (nPts == 3) { draw3vert(0); draw3vert(1); draw3vert(2); } } glEnd(); tss->InitTraversal(); while (tss->GetNextCell(nPts, cPts) != 0) { glBegin(GL_TRIANGLE_STRIP); for(xP = 0; xP < nPts; xP++) { draw3vert(xP); } glEnd(); } glDisable(GL_COLOR_MATERIAL); } void lxGLCanvas::RenderSurface() { GLfloat clr[4]; clr[0] = 1.0; clr[1] = 1.0; clr[2] = 1.0; clr[3] = this->setup->m_srf_opacity; bool srf_tex = (this->data->m_textureSurface.image.data != NULL) && (this->setup->m_srf_texture); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glColor4f(1.0,1.0,1.0,this->setup->m_srf_opacity); if (this->setup->m_srf_transparency && (clr[3] < 1.0)) { lxVec viewDir; viewDir = this->setup->cam_center - this->setup->cam_pos; viewDir.Normalize(); this->data->surfaceSorted->SetVector(viewDir.x, viewDir.y, viewDir.z); glDepthMask(GL_FALSE); glEnable(GL_BLEND); } else { glDepthMask(GL_TRUE); glDisable(GL_BLEND); } glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, clr); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat0); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat2); if (srf_tex) { glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBindTexture(GL_TEXTURE_2D, this->m_idTexSurface); } else { glDisable(GL_TEXTURE_2D); } if (this->setup->m_srf_lighting) glEnable(GL_LIGHTING); else glDisable(GL_LIGHTING); vtkIdType * cPts, nPts; double * nmv, * ptc; this->data->surfaceSorted->Update(); vtkPolyData * pdt = this->data->surfaceSorted->GetOutput(); vtkCellArray * tgs = pdt->GetPolys(); vtkDataArray * nms = pdt->GetPointData()->GetNormals(); tgs->InitTraversal(); glBegin(GL_TRIANGLES); while (tgs->GetNextCell(nPts, cPts) != 0) { if (nPts == 3) { // nmv = this->data->luTable->GetColor(ptc[2]); // clr[0] = nmv[0]; clr[1] = nmv[1]; clr[2] = nmv[2]; // glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, clr); #undef draw3vert #define draw3vert(N) \ ptc = pdt->GetPoint(cPts[N]); \ nmv = nms->GetTuple(cPts[N]); \ glNormal3f(nmv[0],nmv[1],nmv[2]); \ if (srf_tex) \ glTexCoord2f(\ (ptc[0] * this->data->m_textureSurface.xx + ptc[1] * this->data->m_textureSurface.xy + this->data->m_textureSurface.dx) / this->data->m_textureSurface.iw, \ 1.0 - (ptc[0] * this->data->m_textureSurface.yx + ptc[1] * this->data->m_textureSurface.yy + this->data->m_textureSurface.dy) / this->data->m_textureSurface.ih); \ glVertex3f(lxShiftVecX3(ptc, this->shift)); \ draw3vert(0); draw3vert(1); draw3vert(2); } } glEnd(); glDisable(GL_TEXTURE_2D); } void lxGLCanvas::RenderCenterline() { if (this->IsRenderingOff()) { glLineWidth(this->m_renderData->m_imgResolution / 96.0); } else { glLineWidth(1.0); } double clrs[3], clrc[3]; if (this->setup->cam_anaglyph) { if ((this->m_renderData != NULL) && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN) && this->m_renderData->m_imgWhiteBg) { clrc[0] = 0.0;clrc[1] = 0.0;clrc[2] = 0.0; } else { clrc[0] = 1.0;clrc[1] = 1.0;clrc[2] = 1.0; } } else { clrc[0] = 0.0;clrc[1] = 1.0;clrc[2] = 1.0; } clrs[0] = 0.5; clrs[1] = 0.5; clrs[2] = 0.5; bool prevsurface = false; lxDataShot * psh; lxVec * stv; double clr[3]; unsigned long id, nid; nid = this->data->shots.size(); glColor3f(clrc[0],clrc[1],clrc[2]); glBegin(GL_LINES); for(id = 0; id < nid; id++) { psh = &(this->data->shots[id]); if (psh->invisible) continue; if (psh->splay && (!this->setup->m_vis_centerline_splay)) continue; if (psh->duplicate && (!this->setup->m_vis_centerline_duplicate)) continue; #define drawLvert(N) \ stv = &(this->data->stations[N].pos); \ if ((!psh->surface) && (!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT) && (this->setup->m_colormd_app_centerline)) { \ this->data->luTable->GetColor(stv->z, clr); \ glColor3f(clr[0],clr[1],clr[2]); \ } \ glVertex3f(lxShiftVecPXYZ(stv, this->shift)); if ((psh->surface && this->setup->m_vis_centerline_surface) || ((!psh->surface) && this->setup->m_vis_centerline_cave)) { if (prevsurface != psh->surface) { if (psh->surface) { glColor3f(clrs[0],clrs[1],clrs[2]); } else { glColor3f(clrc[0],clrc[1],clrc[2]); } } drawLvert(psh->from); drawLvert(psh->to); } prevsurface = psh->surface; } glEnd(); } void lxGLCanvas::ProjectPoint(double src_x, double src_y, double src_z, GLdouble * x, GLdouble * y, GLdouble * z) { gluProject(src_x, src_y, src_z, m_camera_modelview, m_camera_projection, m_camera_viewport, x, y, z); } void lxGLCanvas::ProjectStations() { unsigned long id, nid; nid = this->data->stations.size(); lxDataStation * st; for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); this->ProjectPoint(lxShiftVecPXYZ(&(st->pos), this->shift), &(st->m_screen_x), &(st->m_screen_y), &(st->m_screen_z)); } } void lxGLCanvas::RenderOffList() { if (!(this->setup->m_vis_centerline_fix || this->setup->m_vis_centerline_station || this->setup->m_vis_centerline_entrance)) return; this->ProjectStations(); this->SetIndicatorsTransform(); // Render stations unsigned long id, nid; nid = this->data->stations.size(); lxDataStation * st; GLdouble x, y, z; GLuint fxList, enList, stList; glShadeModel(GL_FLAT); glDepthMask(GL_TRUE); glDisable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (this->IsRenderingOff()) { if (this->m_oStList == 0) { this->m_oStList = glGenLists(3); this->m_oEntList = this->m_oStList + 1; this->m_oFixList = this->m_oStList + 2; } stList = this->m_oStList; enList = this->m_oEntList; fxList = this->m_oFixList; } else { if (this->m_sStList == 0) { this->m_sStList = glGenLists(3); this->m_sEntList = this->m_sStList + 1; this->m_sFixList = this->m_sStList + 2; } stList = this->m_sStList; enList = this->m_sEntList; fxList = this->m_sFixList; } glNewList(fxList, GL_COMPILE); glColor3f(0.2,0.0,0.0); glBegin(GL_TRIANGLE_FAN); glVertex3d( 0.0,-2.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d(-2.4, 0.0,0.0); glEnd(); glColor3f(1.0,0.0,0.0); glBegin(GL_LINE_STRIP); glVertex3d( 0.0,-2.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d(-2.4, 0.0,0.0); glVertex3d( 0.0,-2.4,0.0); glEnd(); glBegin(GL_LINES); glVertex3d( 0.0,-2.4,0.0); glVertex3d( 0.0,-3.4,0.0); glVertex3d(+2.4, 0.0,0.0); glVertex3d(+3.4, 0.0,0.0); glVertex3d( 0.0,+2.4,0.0); glVertex3d( 0.0,+3.4,0.0); glVertex3d(-2.4, 0.0,0.0); glVertex3d(-3.4, 0.0,0.0); glEnd(); glEndList(); glNewList(enList, GL_COMPILE); glColor3f(0.0,0.0,0.0); //glColor3f(0.1,0.3,0.1); glBegin(GL_TRIANGLE_FAN); glVertex3d(-4.4,-4.4,0.0); glVertex3d(-4.4, 2.4,0.0); glVertex3d(-2.4, 4.4,0.0); glVertex3d( 2.4, 4.4,0.0); glVertex3d( 4.4, 2.4,0.0); glVertex3d( 4.4,-4.4,0.0); glEnd(); glColor3f(0.3,1.0,0.3); glBegin(GL_LINE_STRIP); glVertex3d(-3.4,-3.4,0.0); glVertex3d(-0.4,-3.4,0.0); glVertex3d(-3.4,-0.4,0.0); glVertex3d(-3.4, 0.4,0.0); glVertex3d(-0.4, 3.4,0.0); glVertex3d( 0.4, 3.4,0.0); glVertex3d( 3.4, 0.4,0.0); glVertex3d( 3.4,-0.4,0.0); glVertex3d( 0.4,-3.4,0.0); glVertex3d( 3.4,-3.4,0.0); glEnd(); glEndList(); glNewList(stList, GL_COMPILE); glColor3f(1.0,1.0,0.0); glBegin(GL_LINES); glVertex3d(-2.4, 0,0); glVertex3d( 2.4, 0,0); glVertex3d( 0,-2.4,0); glVertex3d( 0,+2.4,0); glEnd(); glEndList(); if (this->setup->m_vis_centerline_station) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; if (st->m_temporary && (!this->setup->m_vis_centerline_splay)) continue; if (st->m_surface && (!this->setup->m_vis_centerline_surface)) continue; if ((!st->m_surface) && (!this->setup->m_vis_centerline_cave)) continue; glLoadIdentity(); glTranslated(x, y, z); glCallList(stList); } } glDisable(GL_DEPTH_TEST); if (this->setup->m_vis_centerline_fix) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_fix) { if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; glLoadIdentity(); glTranslated(x, y, z); glCallList(fxList); } } } if (this->setup->m_vis_centerline_entrance) { for(id = 0; id < nid; id++) { st = &(this->data->stations[id]); if (st->m_entrance) { if (st->m_screen_z < 0.0) continue; x = (GLdouble)long(st->m_screen_x) + 0.5; y = (GLdouble)long(st->m_screen_y) + 0.5; z = - st->m_screen_z; glLoadIdentity(); glTranslated(x, y, z); glCallList(enList); } } } glLoadIdentity(); std::string cmnt; const char * csurvey; char strCBar[10]; bool show_label; this->GetFontNumeric()->setForegroundColor(1.0, 1.0, 0.5, 1.0); if (this->setup->m_stlabel_name || this->setup->m_stlabel_comment || this->setup->m_stlabel_altitude || this->setup->m_stlabel_survey) { for(id = 0; id < nid; id++) { show_label = false; st = &(this->data->stations[id]); if (st->m_screen_z < 0.0) continue; if (st->m_temporary) continue; if (this->setup->m_vis_centerline_entrance && st->m_entrance) show_label = true; if (this->setup->m_vis_centerline_fix && st->m_fix) show_label = true; if (st->m_surface && this->setup->m_vis_centerline_surface && this->setup->m_vis_centerline_station) show_label = true; if ((!st->m_surface) && this->setup->m_vis_centerline_cave && this->setup->m_vis_centerline_station) show_label = true; if (!show_label) continue; // name cmnt = ""; if (this->setup->m_stlabel_name && (strlen(st->m_name) > 0)) cmnt = st->m_name; // survey if (this->setup->m_stlabel_survey) { csurvey = this->data->surveys[st->m_survey_idx].m_full_name.c_str(); if (strlen(csurvey) > 0) { if (cmnt.length() > 0) cmnt += "@"; cmnt += csurvey; } } // altitude if (this->setup->m_stlabel_altitude) { if (this->frame->m_iniUnits == 1) { sprintf(&(strCBar[0]), "%.0f ft", st->pos.z / 0.3048); } else { sprintf(&(strCBar[0]), "%.0f m", st->pos.z); } if (cmnt.length() > 0) cmnt += ":"; cmnt += strCBar; } // comment if (this->setup->m_stlabel_comment && (strlen(st->m_comment) > 0)) { if (cmnt.length() > 0) cmnt += ":"; cmnt += st->m_comment; } x = (GLdouble)long(st->m_screen_x+0.5); y = (GLdouble)long(st->m_screen_y+0.5); z = - st->m_screen_z; if (cmnt.length() > 0) { this->GetFontNumeric()->draw(x + 5, y - 0.25 * lxFNTSH, z, wxString(wxConvUTF8.cMB2WX(cmnt.c_str()))); } } } } void lxGLCanvas::GeomOutline() { glBegin(GL_LINE_STRIP); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(1), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(5), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(1), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(2), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(6), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(2), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(3), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(7), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(3), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(0), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(5), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(6), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(7), this->shift)); glVertex3f(lxShiftVecXYZ(this->setup->data_limits.Vertex(4), this->shift)); glEnd(); } void lxGLCanvas::RenderAll() { if (this->m_isO) { if ((this->m_renderData != NULL) && (this->m_renderData->m_scaleMode != LXRENDER_FIT_SCREEN) && this->m_renderData->m_imgWhiteBg) glClearColor(1.0, 1.0, 1.0, 0.0); else glClearColor(0.0, 0.0, 0.0, 0.0); } else { glClearColor(0.0, 0.0, 0.0, 0.0); } glClearDepth(1.0); if (this->setup->cam_anaglyph) glClear(GL_DEPTH_BUFFER_BIT); else glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // vyrendruje outline glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); glDepthMask(GL_TRUE); if (this->m_isO) { glLineWidth(this->m_renderData->m_scaleMode == LXRENDER_FIT_SCREEN ? 1.0 : this->m_renderData->m_imgResolution / 96.0); } else { glLineWidth(1.0); } glDisable(GL_BLEND); if (this->setup->cam_anaglyph) glColor3f(0.7, 0.7, 0.7); else glColor3f(1.0, 0.0, 0.0); if (this->setup->m_vis_bbox) this->GeomOutline(); glShadeModel(GL_SMOOTH); if (this->setup->m_vis_centerline) this->RenderCenterline(); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); if (this->setup->m_vis_walls) this->RenderScrapWalls(); glDisable(GL_CULL_FACE); if (this->setup->m_vis_surface) this->RenderSurface(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glShadeModel(GL_FLAT); } void lxGLCanvas::OpenGLInit() { glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } void lxGLCanvas::SetIndicatorsTransform() { if (this->m_isO) { this->m_indRes = this->m_renderData->m_imgResolution / 25.4; // pixels per mm this->m_indLWidth = 0.5; // line width mm if ((this->m_indLWidth * this->m_indRes) < 1.0) { this->m_indLWidth = 1.0 / this->m_indRes; // line width mm } } else { this->m_indRes = 3.7795276; // pixels per mm this->m_indLWidth = 1.0 / this->m_indRes; // line width mm glLineWidth(1.0); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->m_isO) { trOrtho(this->TRCGetContext(), 0.0, this->m_renderData->m_imgPixW, 0.0, this->m_renderData->m_imgPixH, -1.0, 1.0); this->TRCBeginTile(); } else { glOrtho(0.0, this->ww, 0.0, this->wh, 0.0, 1.0); //gluOrtho2D(0.0, this->ww, 0.0, this->wh); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void lxGLCanvas::RenderInds() { this->SetFontColors(); if (this->m_isO) { this->m_indRes = this->m_renderData->m_imgResolution / 25.4; // pixels per mm this->m_indLWidth = 0.5; // line width mm if ((this->m_indLWidth * this->m_indRes) < 1.0) { this->m_indLWidth = 1.0 / this->m_indRes; // line width mm } } else { this->m_indRes = 3.7795276; // pixels per mm this->m_indLWidth = 1.0 / this->m_indRes; // line width mm glLineWidth(1.0); } glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (this->m_isO) { trOrtho(this->TRCGetContext(), 0.0, this->m_renderData->m_imgPixW, 0.0, this->m_renderData->m_imgPixH, -1.0, 1.0); this->TRCBeginTile(); } else { gluOrtho2D(0.0, this->ww, 0.0, this->wh); } glDepthMask(GL_FALSE); glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); glShadeModel(GL_FLAT); glMatrixMode(GL_MODELVIEW); glEnable(GL_BLEND); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glLoadIdentity(); glTranslatef(this->m_indRes * 9.0, this->m_indRes * 18.0, 0.0); this->RenderICompass(5.0); glLoadIdentity(); glTranslatef(this->m_indRes * 28.0, this->m_indRes * 13.0, 0.0); this->RenderIClino(8.0); glLoadIdentity(); glTranslatef(this->m_indRes * 34.0, this->m_indRes * 9.0, 0.0); this->RenderIScalebar(50.0); if ((!this->setup->cam_anaglyph) && (this->setup->m_colormd != lxSETUP_COLORMD_DEFAULT)) { glLoadIdentity(); glTranslatef(this->m_indRes * 4.0, this->m_indRes * 29.0, 0.0); this->RenderIDepthbar(40.0); } glLoadIdentity(); this->GetFontTitle()->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); // if (this->m_isO) // this->m_fntTitleO->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); // else // this->m_fntTitleS->draw(this->m_indRes * 3.0, this->m_indRes * 3.0, this->data->title); glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); } #define clrTemplate(AW,AB,NL) {\ if (this->m_isO) {\ if (this->setup->cam_anaglyph) {\ if (this->m_renderData->m_imgWhiteBg)\ glColor4f AW; \ else \ glColor4f AB; \ } else \ glColor4f NL; \ } else { \ if (this->setup->cam_anaglyph) \ glColor4f AB; \ else \ glColor4f NL; \ } \ } #define clrOutCntr() clrTemplate((0.0, 0.0, 0.0, 1.0),(1.0, 1.0, 1.0, 1.0),(0.1, 0.1, 1.0, 1.0)) #define clrOutFill() clrTemplate((0.5, 0.5, 0.5, 0.5),(0.5, 0.5, 0.5, 0.5),(0.0, 0.0, 1.0, 0.5)) #define clrIndCntr() clrTemplate((0.0, 0.0, 0.0, 1.0),(1.0, 1.0, 1.0, 1.0),(1.0, 0.0, 0.0, 1.0)) #define clrIndFill() clrTemplate((0.5, 0.5, 0.5, 1.0),(0.5, 0.5, 0.5, 1.0),(1.0, 0.8, 0.0, 1.0)) #define v2r(x,y) glVertex2f(this->m_indRes * (x), this->m_indRes * (y)) #define hlw (this->m_indLWidth / 2.0) void lxGLCanvas::RenderICompass(double size) { int t; glPushMatrix(); glRotatef(this->setup->cam_dir, 0.0, 0.0, 1.0); clrOutFill(); // draw circle aroung glBegin(GL_TRIANGLE_FAN); for(t = 0; t < 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); clrOutCntr(); if (this->m_isO) { glBegin(GL_TRIANGLE_STRIP); for(t = 0; t <= 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); v2r( (size + hlw) * sin(double(t)/180.0*lxPI), (size + hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); } else { glBegin(GL_LINE_STRIP); for(t = 0; t <= 360; t++) { v2r( (size - hlw) * sin(double(t)/180.0*lxPI), (size - hlw) * cos(double(t)/180.0*lxPI)); } glEnd(); } this->RenderILine(0.0, -size - 0.75, 0.0, -size + 1.0); this->RenderILine(-size - 0.75, 0.0, -size + 1.0, 0.0); this->RenderILine( size - 1.0, 0.0, size + 0.75, 0.0); lxVec a1, a2, a3, a4; a1 = lxVec(0.0, size + 1.0, 0.0); a2 = a1.Rotated(150.0, 0.0); a3 = a1.Rotated(-150.0, 0.0); a4 = lxVec(0.0, -0.333 * size, 0.0); clrIndFill(); glBegin(GL_TRIANGLE_STRIP); v2r(a2.x, a2.y); v2r(a1.x, a1.y); v2r(a4.x, a4.y); v2r(a3.x, a3.y); glEnd(); clrIndCntr(); this->RenderILine(a1.x, a1.y, a2.x, a2.y); this->RenderILine(a1.x, a1.y, a3.x, a3.y); this->RenderILine(a4.x, a4.y, a2.x, a2.y); this->RenderILine(a4.x, a4.y, a3.x, a3.y); glPopMatrix(); #if wxCHECK_VERSION(3,0,0) this->GetFontNumeric()->draw((-2.0) * lxFNTSW, this->m_indRes * (-size - 1.0) - lxFNTSH, wxString::Format(_("%03d\xc2\xb0"), int(this->setup->cam_dir))); #else this->GetFontNumeric()->draw((-2.0) * lxFNTSW, this->m_indRes * (-size - 1.0) - lxFNTSH, wxString::Format(_("%03d\260"), int(this->setup->cam_dir))); #endif } void lxGLCanvas::RenderIClino(double size) { #define awn 0.75 #define awt 1.5 #define aae 0.33 int t; double tilt = this->setup->cam_tilt; bool neg = tilt < 0.0; glPushMatrix(); if (neg) glTranslatef(0.0, this->m_indRes * size, 0.0); clrOutFill(); if (fabs(tilt) > 0.0) { glBegin(GL_TRIANGLE_FAN); v2r(0.0, 0.0); for(t = 0; t <= 20; t++) { v2r( (-size) * cos(double(t) * (tilt / 20.0) / 180.0 * lxPI), (size) * sin(double(t) * (tilt / 20.0) / 180.0 * lxPI)); } glEnd(); } clrOutCntr(); if (this->m_isO) { glBegin(GL_TRIANGLE_STRIP); for(t = 0; t <= 90; t += 5) { v2r( (-1.0) * (size - hlw) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size - hlw) * sin(double(t)/180.0*lxPI)); v2r( (-1.0) * (size + hlw) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size + hlw) * sin(double(t)/180.0*lxPI)); } glEnd(); } else { glBegin(GL_LINE_STRIP); for(t = 0; t <= 90; t += 5) { v2r( (-1.0) * (size) * cos(double(t)/180.0*lxPI), (neg ? -1.0 : 1.0) * (size) * sin(double(t)/180.0*lxPI)); } glEnd(); } this->RenderILine(-size - 1.0, 0.0, 1.0, 0.0); this->RenderILine(0.0, (neg ? 1.0 : -1.0), 0.0, (neg ? -size - 1.0 : size + 1.0)); this->RenderILine(-size, (neg ? 1.0 : -1.0), -size, 0.0); this->RenderILine(0.0, (neg ? -size : size), 1.0, (neg ? -size : size)); glPushMatrix(); glRotatef(-tilt, 0.0, 0.0, 1.0); clrIndFill(); glBegin(GL_QUADS); v2r(-size - 1.0, -awn); v2r(-size - 1.0, awn); v2r(-aae * size, awn); v2r(-aae * size, -awn); glEnd(); glBegin(GL_TRIANGLES); v2r(-aae * size, awt); v2r(-aae * size, -awt); v2r(0.0, 0.0); glEnd(); clrIndCntr(); this->RenderILine(-size - 1.0, -awn, -size - 1.0, awn); this->RenderILine(-size - 1.0, -awn, -aae * size, -awn); this->RenderILine(-size - 1.0, awn, -aae * size, awn); this->RenderILine(-aae * size, -awn, -aae * size, -awt); this->RenderILine(-aae * size, awn, -aae * size, awt); this->RenderILine(-aae * size, -awt, 0.0, 0.0); this->RenderILine(-aae * size, awt, 0.0, 0.0); glPopMatrix(); glPopMatrix(); #if wxCHECK_VERSION(3,0,0) this->GetFontNumeric()->draw(this->m_indRes * (-size) / 2.0 - 1.5 * lxFNTSW, this->m_indRes * (-1.0) - lxFNTSH, wxString::Format(_("%+03d\xc2\xb0"), int(this->setup->cam_tilt))); #else this->GetFontNumeric()->draw(this->m_indRes * (-size) / 2.0 - 1.5 * lxFNTSW, this->m_indRes * (-1.0) - lxFNTSH, wxString::Format(_("%+03d\260"), int(this->setup->cam_tilt))); #endif } void lxGLCanvas::RenderIDepthbar(double size) { #define dbw 3.0 #define dbtw 0.8 #define dbnc 32 int t; double clv[3], * clr; clr = this->data->luTable->GetRange(); glShadeModel(GL_SMOOTH); glBegin(GL_QUAD_STRIP); for(t = 0; t <= dbnc; t++) { this->data->luTable->GetColor(clr[0] + t / double(dbnc) * (clr[1] - clr[0]), clv); glColor4f(clv[0], clv[1], clv[2], 1.0); v2r(0.0, double(t) * size / double(dbnc)); v2r(dbw, double(t) * size / double(dbnc)); } glEnd(); glShadeModel(GL_FLAT); clrOutCntr(); this->RenderILine(dbw, 0.0, dbw, size); char strCBar[10]; for(t = 0; t <= 10; t++) { clrOutCntr(); this->RenderILine(dbw, double(t) * size / 10.0, dbw + dbtw, double(t) * size / 10.0); if (this->frame->m_iniUnits == 1) { sprintf(&(strCBar[0]), "%.0f ft", (clr[0] + double(t) / 10.0 * (clr[1] - clr[0])) / 0.3048); } else { sprintf(&(strCBar[0]), "%.0f m", (clr[0] + double(t) / 10.0 * (clr[1] - clr[0]))); } this->GetFontNumeric()->draw(this->m_indRes * dbw + lxFNTSW, this->m_indRes * (double(t) * size / 10.0) - 0.333 * lxFNTSH, strCBar); } // Depth-bar title this->GetFontNumeric()->draw(0.0, this->m_indRes * (size + 1.0) + 0.5 * lxFNTSH, wxString(_("Altitude"))); } void lxGLCanvas::RenderIScalebar(double size) { #define sbh 2.0 #define sbt 1.5 // upravime size tak, aby zodpovedala 1.0, 2.5 alebo 5.0 // nasobku standardnej velkosti // pixel -> 1 meter??? char strLen[32]; double sblen, scale; int sbtest; // scale = m / pixel scale = 2.0 * this->setup->cam_dist * this->setup->cam_lens_vfovr / (this->m_isO ? this->m_renderData->m_imgPixH : this->wh); if (this->frame->m_iniUnits == 1) { bool miles; miles = false; sbtest = int(floor(log((size * this->m_indRes) * scale / 0.3048) / log(pow(10.0,1.0/3.0)))); sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen * 0.3048 / scale / this->m_indRes; if (sbtest > 12) { size *= 1.6; miles = true; sbtest = int(floor(log((size * this->m_indRes) * scale / 1609.344) / log(pow(10.0,1.0/3.0)))); if (sbtest < 0) sbtest = 0; sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen * 1609.344 / scale / this->m_indRes; } if (miles) sprintf(&(strLen[0]),"%.0f mi", sblen); else if (sblen > 4.0) sprintf(&(strLen[0]),"%.0f ft", sblen); else sprintf(&(strLen[0]),"%g in", 12.0 * sblen); } else { sbtest = int(floor(log((size * this->m_indRes) * scale) / log(pow(10.0,1.0/3.0)))); sblen = pow(10.0,floor(double(sbtest)/3.0)); switch (sbtest % 3) { case 0: sblen *= 1.0; break; case -2: case 1: sblen *= 2.5; break; default: sblen *= 5.0; break; } size = sblen / scale / this->m_indRes; if (sblen >= 10000.0) sprintf(&(strLen[0]),"%.0f km", sblen / 1000.0); else if (sblen >= 4.0) sprintf(&(strLen[0]),"%.0f m", sblen); else if (sblen >= 0.01) sprintf(&(strLen[0]),"%.0f mm", sblen * 1000.0); else sprintf(&(strLen[0]),"%g mm", sblen * 1000.0); } clrOutFill(); glBegin(GL_QUADS); v2r(0.0 * size, 0.0); v2r(0.2 * size, 0.0); v2r(0.2 * size, sbh); v2r(0.0 * size, sbh); v2r(0.4 * size, 0.0); v2r(0.6 * size, 0.0); v2r(0.6 * size, sbh); v2r(0.4 * size, sbh); v2r(0.8 * size, 0.0); v2r(1.0 * size, 0.0); v2r(1.0 * size, sbh); v2r(0.8 * size, sbh); glEnd(); clrOutCntr(); this->RenderILine(0.0, 0.0, size, 0.0); this->RenderILine(0.0, sbh, size, sbh); this->RenderILine( 0.0, 0.0, 0.0, sbh + sbt); this->RenderILine(0.1 * size, sbh, 0.1 * size, sbh + sbt/3.0); this->RenderILine(0.2 * size, 0.0, 0.2 * size, sbh + sbt/3.0); this->RenderILine(0.3 * size, sbh, 0.3 * size, sbh + sbt/3.0); this->RenderILine(0.4 * size, 0.0, 0.4 * size, sbh + sbt/3.0); this->RenderILine(0.5 * size, sbh, 0.5 * size, sbh + 2.0*sbt/3.0); this->RenderILine(0.6 * size, 0.0, 0.6 * size, sbh + sbt/3.0); this->RenderILine(0.7 * size, sbh, 0.7 * size, sbh + sbt/3.0); this->RenderILine(0.8 * size, 0.0, 0.8 * size, sbh + sbt/3.0); this->RenderILine(0.9 * size, sbh, 0.9 * size, sbh + sbt/3.0); this->RenderILine( size, 0.0, size, sbh + sbt); this->GetFontNumeric()->draw(0.5 * size * this->m_indRes - 0.5 * double(strlen(strLen)) * lxFNTSW, (sbh + sbt + 1.0) * this->m_indRes, strLen); } void lxGLCanvas::RenderILine(double fx, double fy, double tx, double ty) { bool rounded; if (this->m_isO) rounded = true; else rounded = false; if (this->m_isO) { lxVec n, nr; int t; n = lxVec(tx, ty, 0.0) - lxVec(fx, fy, 0.0); n.Normalize(); n = hlw * lxVec(n.y, -n.x, n.z); glBegin(GL_QUADS); v2r(fx + n.x, fy + n.y); v2r(tx + n.x, ty + n.y); v2r(tx - n.x, ty - n.y); v2r(fx - n.x, fy - n.y); glEnd(); if (rounded) { glBegin(GL_TRIANGLE_FAN); v2r(fx - n.x, fy - n.y); for(t = 0; t > -180; t -= 30) { nr = n.Rotated(double(t), 0.0); v2r(fx + nr.x, fy + nr.y); } glEnd(); glBegin(GL_TRIANGLE_FAN); v2r(tx - n.x, ty - n.y); for(t = 0; t < 180; t += 30) { nr = n.Rotated(double(t), 0.0); v2r(tx + nr.x, ty + nr.y); } glEnd(); } } else { glBegin(GL_LINES); v2r(fx, fy); v2r(tx, ty); glEnd(); } } void lxGLCanvas::SetFontColors() { if (this->m_isO && this->m_renderData->m_imgWhiteBg) { this->GetFontTitle()->setForegroundColor(0.0, 0.0, 0.0, 1.0); this->GetFontNumeric()->setForegroundColor(0.0, 0.0, 0.0, 1.0); } else { if (this->setup->cam_anaglyph) { this->GetFontTitle()->setForegroundColor(1.0, 1.0, 1.0, 1.0); this->GetFontNumeric()->setForegroundColor(1.0, 1.0, 1.0, 1.0); } else { this->GetFontTitle()->setForegroundColor(0.0, 0.8, 1.0, 1.0); this->GetFontNumeric()->setForegroundColor(0.0, 0.8, 1.0, 1.0); } } } struct OSC { int m_Width, m_Height; bool m_OK; #ifdef LXWIN32 R2DContext * m_r2d; #endif #ifdef LXLINUX R2PContext * m_r2p; #endif OSC() { #ifdef LXWIN32 this->m_r2d = NULL; #endif #ifdef LXLINUX this->m_r2p = NULL; #endif this->m_Width = 0; this->m_Height = 0; this->m_OK = false; } }; bool lxGLCanvas::OSCMakeCurrent() { // urobime context current #ifdef LXWIN32 if (this->m_OSC->m_r2d) { R2DMakeCurrent(this->m_OSC->m_r2d); return true; } #endif #ifdef LXLINUX if (this->m_OSC->m_r2p) { R2PMakeCurrent(this->m_OSC->m_r2p); return true; } #endif return false; } bool lxGLCanvas::OSCInit(GLint w, GLint h) { // vytvorime dib // vytvorime context this->m_OSC = new OSC(); this->m_OSC->m_Width = w; this->m_OSC->m_Height = h; this->m_OSC->m_OK = true; #ifdef LXWIN32 this->m_OSC->m_r2d = R2DCreate(w, h); #endif #ifdef LXLINUX this->m_OSC->m_r2p = R2PCreate(w, h); #endif return this->m_OSC->m_OK; } void lxGLCanvas::OSCDestroy() { if (this->m_OSC != NULL) { #ifdef LXWIN32 if (this->m_OSC->m_r2d) R2DDestroy(this->m_OSC->m_r2d); #endif #ifdef LXLINUX if (this->m_OSC->m_r2p) R2PDestroy(this->m_OSC->m_r2p); #endif delete this->m_OSC; } this->m_OSC = NULL; } struct _TRctx * lxGLCanvas::TRCGetContext() { if (this->m_TRC != NULL) return this->m_TRC->m_ctx; else return NULL; } void lxGLCanvas::TRCInit(int type, GLint w, GLint h, GLint tw, GLint th) { if (this->m_TRC == NULL) { this->m_TRC = new TRC(); if (th < 64) th = 64; if (tw < 64) tw = 64; if (th > this->m_OSC->m_Height) th = this->m_OSC->m_Height; if (tw > this->m_OSC->m_Width) tw = this->m_OSC->m_Width; tw = tw - tw % 8; th = th - th % 8; TRcontext * ctx = this->m_TRC->m_ctx = trNew(); GLubyte * buff = this->m_TRC->m_buff = new GLubyte [3 * sizeof(GLubyte) * (type == LXGLCTR_IMAGE ? w : tw) * (type == LXGLCTR_IMAGE ? h : th)]; this->OSCMakeCurrent(); this->OpenGLInit(); trTileSize(ctx, tw, th, LXTRCBORDER); trImageSize(ctx, w, h); if (type == LXGLCTR_IMAGE) trImageBuffer(ctx, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) buff); else trTileBuffer(ctx, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *) buff); } } GLint lxGLCanvas::TRCGet(int param) { if (this->m_TRC != NULL) return trGet(this->m_TRC->m_ctx, (TRenum) param); else return -1; } GLubyte * lxGLCanvas::TRCGetBuffer() { if (this->m_TRC != NULL) return this->m_TRC->m_buff; else return (GLubyte *) NULL; } void lxGLCanvas::TRCDestroy() { if (this->m_TRC != NULL) { delete [] this->m_TRC->m_buff; trDelete(this->m_TRC->m_ctx); delete this->m_TRC; } this->m_TRC = NULL; } void lxGLCanvas::TRCBeginTile() { if (this->m_TRC != NULL) { this->OSCMakeCurrent(); trBeginTile(this->m_TRC->m_ctx); } } bool lxGLCanvas::TRCEndTile() { if (this->m_TRC != NULL) return (trEndTile(this->m_TRC->m_ctx) > 0); else return false; } therion-5.4.1/loch/lxGLC.h000066400000000000000000000115051307545355600152570ustar00rootroot00000000000000/** * @file lxGLC.h * Loch GL canvas. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lx_h #define lx_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include "lxOGLFT.h" #endif //LXDEPCHECK - standard libraries enum { LXGLCML_NONE, LXGLCML_ZOOM2ROTATE, LXGLCML_ZOOM, LXGLCML_ROTATE, LXGLCML_TILT, LXGLCML_PANX, LXGLCML_PANY, LXGLCML_PANX2Y, LXGLCTR_TILE, LXGLCTR_IMAGE }; #include "lxMath.h" class lxGLCanvas: public wxGLCanvas { public: lxVec shift; long ww, wh, mx, my; struct lxRenderData * m_renderData; struct lxData * data; struct lxSetup * setup; class lxFrame * frame; wxGLContext ctx; void UpdateContents(); lxGLCanvas(struct lxSetup * stp, struct lxData * dat, wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = _T("lxGLCanvas") ); ~lxGLCanvas(); GLuint m_idTexSurface, m_idTexStation, m_initTextures; // screen funkcie a premenne GLuint m_sList, m_oList, m_sFixList, m_sEntList, m_sStList, m_oFixList, m_oEntList, m_oStList; int m_sMoveLock; double m_indRes, m_indLWidth; bool m_sInit, m_sInitReset; bool m_sMoveSingle, m_isO; // fonty FT_Face m_ftFace1, m_ftFace2, m_ftFace3; OGLFT::Monochrome * m_fntNumericS, * m_fntTitleS; OGLFT::Filled * m_fntNumericO, * m_fntTitleO; GLdouble m_camera_modelview[16]; GLdouble m_camera_projection[16]; GLint m_camera_viewport[4]; bool m_sCameraAutoRotate, m_sCameraLockRotation; wxStopWatch m_sCameraAutoRotateSWatch; long m_sCameraAutoRotateCounter; double m_sCameraAutoRotateAngle, m_sCameraStartAutoRotateAngle; void OnPaint(wxPaintEvent& event); void OnSize(wxSizeEvent& event); void OnEraseBackground(wxEraseEvent& event); void OnEnterWindow(wxMouseEvent& event); #if wxCHECK_VERSION(2,9,0) void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); #endif void OnMouseDouble(wxMouseEvent& event); void OnMouseDown(wxMouseEvent& event); void OnMouseUp(wxMouseEvent& event); void OnMouseMove(wxMouseEvent& event); void OnMouseWheel(wxMouseEvent& event); void OnKeyPress(wxKeyEvent& event); void OnIdle(wxIdleEvent& event); bool CameraAutoRotate(); void InitializeS(); void ForceRefresh(bool updateTB = true); void UpdateRenderContents(); void UpdateRenderList(); void RenderScreen(); void SetIndicatorsTransform(); void ProjectPoint(double src_x, double src_y, double src_z, GLdouble * x, GLdouble * y, GLdouble * z); void ProjectStations(); void RenderOffList(); // offscreen funkcie a premenne struct OSC * m_OSC; struct TRC * m_TRC; GLint m_maxTSizeS, m_maxTSizeO; bool OSCMakeCurrent(); void OSCDestroy(); bool OSCInit(GLint w, GLint h); void TRCInit(int type, GLint w, GLint h, GLint tw = 0, GLint th = 0); struct _TRctx * TRCGetContext(); void TRCDestroy(); GLint TRCGet(int param); GLubyte * TRCGetBuffer(); void TRCBeginTile(); bool TRCEndTile(); void SetColorMask(); long m_lic; DECLARE_EVENT_TABLE() public: bool IsRenderingOff(); OGLFT::Face * GetFontNumeric(); OGLFT::Face * GetFontTitle(); void OpenGLInit(); void SetCamera(); void RenderAll(); void SetFontColors(); void RenderSurface(); void GeomOutline(); void RenderCenterline(); void RenderScrapWalls(); void RenderInds(); void RenderICompass(double size); void RenderIClino(double size); void RenderIScalebar(double size); void RenderIDepthbar(double size); void RenderILine(double fx, double fy, double tx, double ty); }; // lxGLCanvas struct TRC { struct _TRctx * m_ctx; GLubyte * m_buff; TRC() { this->m_ctx = NULL; this->m_buff = NULL; } }; #endif therion-5.4.1/loch/lxGUI.cxx000066400000000000000000001161511307545355600156540ustar00rootroot00000000000000/** * @file lxGUI.cxx * Loch user interface implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #endif //LXDEPCHECK - standard libraries #include "lxGUI.h" #include "lxData.h" #include "lxSetup.h" #include "lxRender.h" #include "lxOptDlg.h" #include "lxAboutDlg.h" #include "lxSView.h" #include "lxSScene.h" #include "lxSTree.h" #include "lxPres.h" #include "icons/open.xpm" #include "icons/render.xpm" #include "icons/reload.xpm" #include "icons/stereo.xpm" #include "icons/rotation.xpm" #include "icons/lockrot.xpm" #include "icons/fit.xpm" #include "icons/home.xpm" #include "icons/rendersetup.xpm" #include "icons/plan.xpm" #include "icons/profile.xpm" #include "icons/fullscreen.xpm" #include "icons/orto.xpm" #include "icons/camera.xpm" #include "icons/scene.xpm" #include "icons/viscline.xpm" #include "icons/vissurface.xpm" #include "icons/visbbox.xpm" #include "icons/viswalls.xpm" #include "icons/visinds.xpm" #include "icons/visentrance.xpm" #include "icons/visfix.xpm" #include "icons/visstation.xpm" #include "icons/vislabel.xpm" #ifndef LXGNUMSW #include "loch.xpm" #endif //////////////////////////////////////////////////////////////////////// // Main frame //////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE(lxFrame, wxFrame) EVT_MENU(wxID_EXIT, lxFrame::OnExit) EVT_MENU(LXMENU_CAMERA_ROTCW, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ROTCCW, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_UPPER, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_LOWER, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_UP, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_DOWN, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_LEFT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_RIGHT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ZOOMIN, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_ZOOMOUT, lxFrame::OnMenuCameraMove) EVT_MENU(LXMENU_CAMERA_PERSP, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_AUTOROTATE, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_LOCKROT, lxFrame::OnAll) EVT_MENU(LXMENU_CAMERA_ORIENT_HOME, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_PLAN, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_PROFILE, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_NORTH, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_WEST, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_EAST, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_ORIENT_SOUTH, lxFrame::OnMenuCameraOrient) EVT_MENU(LXMENU_CAMERA_EXTENDS, lxFrame::OnAll) EVT_MENU_RANGE(LXMENU_VIEW, LXMENU_VIEWEND, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_OPEN, lxFrame::OnAll) EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RELOAD, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RENDER, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_RENDER_SETUP, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_EXPORT, lxFrame::OnAll) EVT_MENU(LXMENU_FILE_IMPORT, lxFrame::OnAll) EVT_MENU(LXMENU_EXPROT, lxFrame::OnAll) EVT_MENU(LXMENU_EXPFIT, lxFrame::OnAll) EVT_MENU_RANGE(LXMENU_HELP_CONTENTS, LXMENU_HELP_ABOUT, lxFrame::OnAll) EVT_TOOL_RANGE(LXTB, LXTBEND, lxFrame::OnAll) EVT_SIZE(lxFrame::OnSize) EVT_MOVE(lxFrame::OnMove) END_EVENT_TABLE() #if wxUSE_DRAG_AND_DROP class DnDFile : public wxFileDropTarget { lxFrame * m_Parent; public: DnDFile(lxFrame *parent) : m_Parent(parent) { } virtual bool OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames); }; bool DnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString &filenames) { assert(filenames.GetCount() > 0); m_Parent->OpenFile(filenames[0]); return TRUE; } #endif lxFrame::lxFrame(class lxApp * app, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxFrame(NULL, wxID_ANY, title, pos, size, style), m_modelSetupDlg(NULL), m_modelSetupDlgOn(false), m_selectionSetupDlg(NULL), m_selectionSetupDlgOn(false), m_presentationDlg(NULL), m_presentationDlgOn(false), m_viewpointSetupDlg(NULL), m_viewpointSetupDlgOn(false) { // // Give it an icon #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_app = app; this->data = new lxData; this->setup = new lxSetup(data); this->m_fileToOpen = _T(""); this->m_renderData = new lxRenderData(); this->m_fileName = _("noname"); this->m_fileConfig = new wxFileConfig(_T("loch")); this->m_fileHistory = new wxFileHistory; this->m_pres = new wxXmlDocument(); this->m_helpController = new wxHelpController; wxString hlpFName = _T("loch"), tmpHlpFName; #ifdef LXWIN32 hlpFName += _T(".chm"); #else hlpFName += _T(".htb"); #endif wxFileName hlpFN; hlpFN = wxFileName(this->m_app->m_path); hlpFN.AppendDir(this->m_app->m_locale.GetCanonicalName()); hlpFN.SetFullName(hlpFName); if (hlpFN.FileExists()) { hlpFName = hlpFN.GetFullPath(); } else { hlpFN = wxFileName(this->m_app->m_path); hlpFN.AppendDir(this->m_app->m_locale.GetCanonicalName().Left(2)); hlpFN.SetFullName(hlpFName); if (hlpFN.FileExists()) { hlpFName = hlpFN.GetFullPath(); } else { hlpFName = _T("en/loch"); } } this->m_helpController->Initialize(hlpFName); this->m_fileConfig->Read(_T("startup_dir"), &this->m_iniDirectory, wxEmptyString); this->m_fileConfig->Read(_T("startup_dir_last"), &this->m_fileDir, ::wxGetCwd()); this->m_fileConfig->Read(_T("units"), &this->m_iniUnits, LXUNITS_METRIC); if (this->m_iniDirectory.Length() > 0) { this->m_fileDir = this->m_iniDirectory; } this->m_fileConfig->Read(_T("stereo_channels_last"), &this->m_iniStereoGlassesLast, 0); this->m_fileConfig->Read(_T("stereo_channels"), &this->m_iniStereoGlasses, 8); if (this->m_iniStereoGlasses == 8) this->setup->cam_anaglyph_glasses = this->m_iniStereoGlassesLast; else this->setup->cam_anaglyph_glasses = this->m_iniStereoGlasses; this->m_fileConfig->Read(_T("wall_extra"), &this->m_iniWallsInterpolate, LXWALLS_INTERP_NONE); this->m_toolBar = CreateToolBar(); this->m_toolBar->AddTool(LXTB_OPEN, _("Open"), wxBitmap(open_xpm), _("Open file")); this->m_toolBar->AddTool(LXTB_RELOAD, _("Reload"), wxBitmap(reload_xpm), _("Reload file")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_RENDER, _("Render"), wxBitmap(render_xpm), _("Render to file")); this->m_toolBar->AddTool(LXTB_RENDER_SETUP, _("Rendering setup"), wxBitmap(rendersetup_xpm), _("Rendering setup")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_ROTATION, _("Rotation"), wxBitmap(rotation_xpm), _("Rotation"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_LOCKROT, _("Lock rotation"), wxBitmap(lockrot_xpm), _("Lock rotation"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_PERSP, _("Ortho"), wxBitmap(orto_xpm), _("Orthogonal view"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_STEREO, _("Stereo"), wxBitmap(stereo_xpm), _("Stereo mode"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_PLAN, _("Plan"), wxBitmap(plan_xpm), _("Plan view")); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_PROFILE, _("Profile"), wxBitmap(profile_xpm), _("Profile view")); this->m_toolBar->AddTool(LXTB_FIT, _("Fit zoom"), wxBitmap(fit_xpm), _("Zoom to fit")); this->m_toolBar->AddTool(LXMENU_CAMERA_ORIENT_HOME, _("Reset"), wxBitmap(home_xpm), _("Reset viewpoint")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VISENTRANCE, _("Entrances"), wxBitmap(visentrance_xpm), _("Show entrances"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISFIX, _("Fixed stations"), wxBitmap(visfix_xpm), _("Show fixed stations"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISSTATION, _("All stations"), wxBitmap(visstation_xpm), _("Show all stations"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISLABEL, _("Labels"), wxBitmap(vislabel_xpm), _("Toggle station labeling")); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VISCENTERLINE, _("Centerline"), wxBitmap(viscline_xpm), _("Show centerline"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISWALLS, _("Walls"), wxBitmap(viswalls_xpm), _("Show walls"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISSURFACE, _("Surface"), wxBitmap(vissurface_xpm), _("Show surface"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISBBOX, _("Bounding box"), wxBitmap(visbbox_xpm), _("Show bounding box"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_VISINDS, _("Indicators"), wxBitmap(visinds_xpm), _("Show indicators"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_VIEWSTP, _("Camera setup"), wxBitmap(camera_xpm), _("Camera setup"), wxITEM_CHECK); this->m_toolBar->AddTool(LXTB_SCENESTP, _("Scene setup"), wxBitmap(scene_xpm), _("Scene setup"), wxITEM_CHECK); this->m_toolBar->AddSeparator(); this->m_toolBar->AddTool(LXTB_FULLSCREEN, _("Full screen"), wxBitmap(fullscreen_xpm), _("Full screen"), wxITEM_CHECK); this->m_toolBar->Realize(); // Make a menubar wxMenu *fileMenu = new wxMenu; fileMenu->Append(LXMENU_FILE_OPEN, _("&Open...\tCtrl+O")); fileMenu->Append(LXMENU_FILE_RELOAD, _("&Reload\tCtrl+R")); fileMenu->AppendSeparator(); fileMenu->Append(LXMENU_FILE_RENDER, _("&Render to file\tCtrl+P")); fileMenu->Append(LXMENU_FILE_RENDER_SETUP, _("Rendering &setup...")); fileMenu->AppendSeparator(); fileMenu->Append(LXMENU_FILE_IMPORT, _("&Import...\tCtrl+I")); fileMenu->Append(LXMENU_FILE_EXPORT, _("&Export...\tCtrl+X")); fileMenu->AppendSeparator(); fileMenu->Append(wxID_EXIT, _("E&xit\tCtrl+Q")); this->m_fileHistory->UseMenu(fileMenu); this->m_fileHistory->Load(*this->m_fileConfig); wxMenu *cameraAdjustMenu = new wxMenu; cameraAdjustMenu->Append(LXMENU_CAMERA_ROTCW, _("Rotate left\tRight")); cameraAdjustMenu->Append(LXMENU_CAMERA_ROTCCW, _("Rotate right\tLeft")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_UPPER, _("Upper viewpoint\tDown")); cameraAdjustMenu->Append(LXMENU_CAMERA_LOWER, _("Lower viewpoint\tUp")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_UP, _("Move up\tShift+Down")); cameraAdjustMenu->Append(LXMENU_CAMERA_DOWN, _("Move down\tShift+Up")); cameraAdjustMenu->Append(LXMENU_CAMERA_LEFT, _("Move left\tShift+Right")); cameraAdjustMenu->Append(LXMENU_CAMERA_RIGHT, _("Move right\tShift+Left")); cameraAdjustMenu->AppendSeparator(); cameraAdjustMenu->Append(LXMENU_CAMERA_ZOOMIN, _("Zoom in\tCtrl+Up")); cameraAdjustMenu->Append(LXMENU_CAMERA_ZOOMOUT, _("Zoom out\tCtrl+Down")); cameraAdjustMenu->Append(LXMENU_CAMERA_EXTENDS,_("Zoom to fit\tSpace")); wxMenu *cameraOrientMenu = new wxMenu; cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_PLAN,_("&Plan")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_PROFILE,_("Pro&file")); cameraOrientMenu->AppendSeparator(); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_NORTH, _("&North")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_WEST, _("&West")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_EAST, _("&East")); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_SOUTH, _("&South")); cameraOrientMenu->AppendSeparator(); cameraOrientMenu->Append(LXMENU_CAMERA_ORIENT_HOME,_("&Reset")); this->m_viewpointMenu = cameraOrientMenu; this->m_toolMenu = new wxMenu; this->m_toolMenu->AppendCheckItem(LXMENU_CAMERA_AUTOROTATE, _("Rotation")); this->m_toolMenu->AppendCheckItem(LXMENU_CAMERA_LOCKROT, _("Lock rotation")); this->m_toolMenu->AppendSeparator(); this->m_toolMenu->AppendCheckItem(LXMENU_VIEW_VIEWPOINTSTP, _("Camera")); this->m_toolMenu->AppendCheckItem(LXMENU_VIEW_MODELSTP, _("Scene")); wxMenu *viewMenu = new wxMenu; viewMenu->Append(LXMENU_CAMERA_ADJUST, _("Action"), cameraAdjustMenu); viewMenu->AppendCheckItem(LXMENU_CAMERA_AUTOROTATE, _("Rotation")); viewMenu->AppendCheckItem(LXMENU_CAMERA_LOCKROT, _("Lock rotation")); viewMenu->Append(LXMENU_CAMERA_ORIENT, _("Orientation"), cameraOrientMenu); viewMenu->AppendCheckItem(LXMENU_CAMERA_PERSP, _("Orthogonal")); viewMenu->AppendSeparator(); viewMenu->Append(LXMENU_VIEW_FULLSCREEN, _("Full screen\tF11")); viewMenu->Append(LXMENU_EXPFIT, _("&Size...")); wxMenu *winMenu = new wxMenu; winMenu->AppendCheckItem(LXMENU_VIEW_VIEWPOINTSTP, _("&Camera")); winMenu->AppendCheckItem(LXMENU_VIEW_MODELSTP, _("&Scene")); winMenu->AppendCheckItem(LXMENU_VIEW_SELECTIONSTP, _("&Selection")); winMenu->AppendCheckItem(LXMENU_VIEW_PRESENTDLG, _("&Presentation")); winMenu->Append(LXMENU_EXPROT, _("&Animation")); winMenu->AppendSeparator(); winMenu->Append(LXMENU_TOOLS_OPTIONS, _("&Options...")); wxMenu * hlpMenu = new wxMenu; hlpMenu->Append(LXMENU_HELP_CONTENTS, _("&Contents...\tF1")); hlpMenu->Append(LXMENU_HELP_CONTROL, _("&Control")); hlpMenu->Append(LXMENU_HELP_RENDERING, _("&Rendering")); hlpMenu->Append(LXMENU_HELP_BUGS, _("&Bugs")); hlpMenu->AppendSeparator(); hlpMenu->Append(LXMENU_HELP_ABOUT, _("&About...")); m_menuBar = new wxMenuBar; m_menuBar->Append(fileMenu, _("&File")); m_menuBar->Append(viewMenu, _("&View")); m_menuBar->Append(winMenu, _("&Tools")); m_menuBar->Append(hlpMenu, _("&Help")); this->SetMenuBar(m_menuBar); this->canvas = new lxGLCanvas(this->setup, this->data, this, wxID_ANY, wxDefaultPosition, wxDefaultSize); this->canvas->frame = this; wxBoxSizer * ms = new wxBoxSizer(wxVERTICAL); ms->SetMinSize(192, 128); ms->Add(this->canvas, 1, wxEXPAND, 0); SetSizer(ms); ms->SetSizeHints(this); this->SetPosition(pos); this->SetSize(size); this->m_modelSetupDlg = new lxModelSetupDlg(this); this->m_modelSetupDlgOn = false; this->m_selectionSetupDlg = new lxModelTreeDlg(this); this->m_presentationDlg = new lxPresentDlg(this); this->m_selectionSetupDlgOn = false; this->m_presentationDlgOn = false; wxSize csize = this->GetClientSize(); #ifdef __WXMSW__ lxTBoxPos::m_fsOffset = size.y - csize.y; this->m_selectionSetupDlg->m_toolBoxPosition.Set(0, size.x - csize.x, size.y - csize.y); this->m_presentationDlg->m_toolBoxPosition.Set(0, size.x - csize.x, size.y - csize.y); #else wxSize tbsize = this->m_toolBar->GetSize(); lxTBoxPos::m_fsOffset = size.y - csize.y + tbsize.y; this->m_selectionSetupDlg->m_toolBoxPosition.Set(0, size.x - csize.x, size.y - csize.y + tbsize.y); #endif this->m_viewpointSetupDlg = new lxViewpointSetupDlg(this); #ifdef __WXMSW__ this->m_viewpointSetupDlg->m_toolBoxPosition.Set(1, size.x - csize.x, size.y - csize.y); #else tbsize = this->m_toolBar->GetSize(); this->m_viewpointSetupDlg->m_toolBoxPosition.Set(1, size.x - csize.x, size.y - csize.y + tbsize.y); #endif this->m_viewpointSetupDlgOn = false; this->UpdateM2TB(); #if wxUSE_DRAG_AND_DROP SetDropTarget(new DnDFile(this)); #endif // Show the frame this->Show(true); } void lxFrame::OnExit( wxCommandEvent& WXUNUSED(event) ) { // true is to force the frame to close Close(true); } lxFrame::~lxFrame() { this->m_fileHistory->Save(*this->m_fileConfig); this->m_fileConfig->Write(_T("startup_dir"), this->m_iniDirectory); this->m_fileConfig->Write(_T("startup_dir_last"), this->m_fileDir); this->m_fileConfig->Write(_T("units"), this->m_iniUnits); this->m_fileConfig->Write(_T("stereo_channels_last"), this->m_iniStereoGlassesLast); this->m_fileConfig->Write(_T("stereo_channels"), this->m_iniStereoGlasses); this->m_fileConfig->Write(_T("wall_extra"), this->m_iniWallsInterpolate); #ifdef LXVCPPMSW SetToolBar(NULL); #endif delete this->m_fileHistory; delete this->m_fileConfig; delete this->m_toolMenu; delete this->setup; delete this->data; delete this->m_renderData; delete this->m_helpController; delete this->m_pres; } void lxFrame::OnMenuCameraMove(wxCommandEvent& event){ wxKeyEvent ke; ke.m_keyCode = 0; ke.m_shiftDown = false; ke.m_controlDown = false; switch (event.GetId()) { case LXMENU_CAMERA_ROTCW: ke.m_keyCode = WXK_RIGHT; break; case LXMENU_CAMERA_ROTCCW: ke.m_keyCode = WXK_LEFT; break; case LXMENU_CAMERA_UPPER: ke.m_keyCode = WXK_DOWN; break; case LXMENU_CAMERA_LOWER: ke.m_keyCode = WXK_UP; break; case LXMENU_CAMERA_UP: ke.m_keyCode = WXK_DOWN; ke.m_shiftDown = true; break; case LXMENU_CAMERA_DOWN: ke.m_keyCode = WXK_UP; ke.m_shiftDown = true; break; case LXMENU_CAMERA_LEFT: ke.m_keyCode = WXK_RIGHT; ke.m_shiftDown = true; break; case LXMENU_CAMERA_RIGHT: ke.m_keyCode = WXK_LEFT; ke.m_shiftDown = true; break; case LXMENU_CAMERA_ZOOMIN: ke.m_keyCode = WXK_UP; ke.m_controlDown = true; break; case LXMENU_CAMERA_ZOOMOUT: ke.m_keyCode = WXK_DOWN; ke.m_controlDown = true; break; } if (ke.GetKeyCode() != 0) this->canvas->OnKeyPress(ke); } void lxFrame::OnMenuCameraOrient(wxCommandEvent& event) { switch (event.GetId()) { case LXMENU_CAMERA_ORIENT_HOME: this->setup->cam_tilt = 90.0; this->setup->cam_dir = 0.0; this->setup->ResetCamera(); break; case LXMENU_CAMERA_ORIENT_PLAN: this->setup->cam_tilt = 90.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_PROFILE: this->setup->cam_tilt = 0.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_NORTH: this->setup->cam_dir = 0.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_EAST: this->setup->cam_dir = 90.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_SOUTH: this->setup->cam_dir = 180.0; this->setup->UpdatePos(); break; case LXMENU_CAMERA_ORIENT_WEST: this->setup->cam_dir = 270.0; this->setup->UpdatePos(); break; } this->canvas->ForceRefresh(); } void lxFrame::ToggleFullScreen() { this->ShowFullScreen(!this->IsFullScreen()); this->UpdateM2TB(); } int lxFrame::GetFileType(wxString fName) { #define matchtype(w,t) if (fName.EndsWith((const wxChar *)wxString(_T(w)))) return t; matchtype(".lox",1); matchtype(".LOX",1); matchtype(".plt",2); matchtype(".PLT",2); matchtype(".3d",3); matchtype(".3D",3); return 1; } void lxFrame::DetectFileType() { if (this->m_fileType == 0) { this->m_fileType = this->GetFileType(this->m_fileName); } } void lxFrame::OnAll(wxCommandEvent& event) { switch (event.GetId()) { case LXMENU_HELP_CONTENTS: this->m_helpController->DisplayContents(); break; case LXMENU_EXPROT: this->ExportRotationPictures(); break; case LXMENU_EXPFIT: this->canvas->SetSize(720,576); this->Fit(); break; case LXMENU_HELP_CONTROL: this->m_helpController->DisplaySection(_T("Control")); break; case LXMENU_HELP_RENDERING: this->m_helpController->DisplaySection(_T("Rendering")); break; case LXMENU_HELP_BUGS: this->m_helpController->DisplaySection(_T("Bugs")); break; case LXMENU_HELP_ABOUT: lxShowAboutDialog(this); break; case LXTB_VIEWPOINT: lxSize = this->m_toolBar->GetSize(); lxPoint = wxGetMousePosition() - this->GetPosition(); #ifdef __WXMSW__ this->PopupMenu(this->m_viewpointMenu, lxPoint.x - 8, lxSize.y); #else this->PopupMenu(this->m_viewpointMenu, lxPoint.x - 8, 0); #endif this->m_toolBar->ToggleTool(LXTB_VIEWPOINT, false); break; case LXTB_LOCKROT: case LXMENU_CAMERA_LOCKROT: this->ToggleRotLock(); break; case LXTB_FULLSCREEN: case LXMENU_VIEW_FULLSCREEN: this->ToggleFullScreen(); break; case LXTB_STEREO: this->ToggleStereo(); break; case LXTB_VIEWSTP: this->ToggleViewpointSetup(); break; case LXTB_SCENESTP: this->ToggleModelSetup(); break; case LXMENU_TOOLS_OPTIONS: lxShowOptionsDialog(this); break; case wxID_FILE1: case wxID_FILE2: case wxID_FILE3: case wxID_FILE4: case wxID_FILE5: case wxID_FILE6: case wxID_FILE7: case wxID_FILE8: case wxID_FILE9: this->m_fileName = this->m_fileHistory->GetHistoryFile(event.GetId() - wxID_FILE1); this->m_fileDir = wxFileName(this->m_fileName).GetPath(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); this->canvas->ForceRefresh(); break; case LXMENU_FILE_EXPORT: { wxFileDialog dialog ( this, _("Export"), wxEmptyString, wxEmptyString, _("VTK file (*.vtk)|*.vtk|Loch file (*.lox)|*.lox"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { switch (dialog.GetFilterIndex()) { case 0: this->data->ExportVTK(dialog.GetPath()); break; case 1: this->data->m_input.ExportLOX(dialog.GetPath().mbc_str()); break; } this->canvas->ForceRefresh(); } } break; case LXTB_OPEN: case LXMENU_FILE_OPEN: case LXMENU_FILE_IMPORT: { wxFileDialog dialog ( this, _("Open"), wxEmptyString, wxEmptyString, _("All supported files (*.lox;*.plt;*.3d)|*.lox;*.plt;*.3d|Loch files (*.lox)|*.lox|Compass PLT files (*.plt)|*.plt|Survex 3D files (*.3d)|*.3d") ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { if (event.GetId() == LXMENU_FILE_IMPORT) { this->ImportFile(dialog.GetPath(), this->GetFileType(dialog.GetPath())); } else { this->m_fileName = dialog.GetPath(); this->m_fileDir = dialog.GetDirectory(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); } this->canvas->ForceRefresh(); } } break; case LXTB_RELOAD: case LXMENU_FILE_RELOAD: this->ReloadData(); this->canvas->ForceRefresh(); break; case LXTB_RENDER_SETUP: case LXMENU_FILE_RENDER_SETUP: this->m_renderData->Configure(this, this->canvas); break; case LXTB_RENDER: case LXMENU_FILE_RENDER: this->m_renderData->Render(this, this->canvas); break; case LXTB_ROTATION: case LXMENU_CAMERA_AUTOROTATE: this->ToggleRotation(); break; case LXTB_PERSP: case LXMENU_CAMERA_PERSP: this->TogglePerspective(); break; case LXTB_FIT: case LXMENU_CAMERA_EXTENDS: this->setup->ResetCamera(); this->canvas->ForceRefresh(); break; case LXMENU_VIEW_MODELSTP: this->ToggleModelSetup(); break; case LXMENU_VIEW_SELECTIONSTP: this->ToggleSelectionSetup(); break; case LXMENU_VIEW_PRESENTDLG: this->TogglePresentationDlg(); break; case LXMENU_VIEW_VIEWPOINTSTP: this->ToggleViewpointSetup(); break; case LXTB_VISENTRANCE: this->ToggleVisibilityCenterlineEntrance(); break; case LXTB_VISFIX: this->ToggleVisibilityCenterlineFix(); break; case LXTB_VISSTATION: this->ToggleVisibilityCenterlineStation(); break; case LXTB_VISLABEL: { int cmode = 0; if (this->setup->m_stlabel_comment) cmode = 1; if (this->setup->m_stlabel_name) cmode = 2; if (this->setup->m_stlabel_name && this->setup->m_stlabel_survey) cmode = 3; if (this->setup->m_stlabel_altitude) cmode = 4; cmode = (cmode + 1) % 5; this->setup->m_stlabel_comment = false; this->setup->m_stlabel_name = false; this->setup->m_stlabel_survey = false; this->setup->m_stlabel_altitude = false; switch (cmode) { case 1: this->setup->m_stlabel_comment = true; break; case 2: this->setup->m_stlabel_name = true; break; case 3: this->setup->m_stlabel_name = true; this->setup->m_stlabel_survey = true; break; case 4: this->setup->m_stlabel_altitude = true; break; } this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } break; case LXTB_VISBBOX: this->ToggleVisibilityBBox(); break; case LXTB_VISCENTERLINE: this->ToggleVisibilityCenterline(); break; case LXTB_VISWALLS: this->ToggleVisibilityWalls(); break; case LXTB_VISSURFACE: this->ToggleVisibilitySurface(); break; case LXTB_VISINDS: this->ToggleVisibilityIndicators(); break; default: event.Skip(); } } void lxFrame::OnSize(wxSizeEvent& event) { wxFrame::OnSize(event); if (this->m_viewpointSetupDlg != NULL) { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_modelSetupDlg != NULL) { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_selectionSetupDlg != NULL) { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_presentationDlg != NULL) { this->m_presentationDlg->m_toolBoxPosition.Restore(); } } void lxFrame::OnMove(wxMoveEvent& event) { if ((event.GetPosition().x > 0) || (event.GetPosition().y > 0)) { if (this->m_viewpointSetupDlg != NULL) { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_modelSetupDlg != NULL) { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_selectionSetupDlg != NULL) { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); } if (this->m_presentationDlg != NULL) { this->m_presentationDlg->m_toolBoxPosition.Restore(); } } } void lxFrame::UpdateM2TB() { // perspective this->m_menuBar->Check(LXMENU_CAMERA_PERSP, !this->setup->cam_persp); this->m_menuBar->Check(LXMENU_VIEW_MODELSTP, this->m_modelSetupDlgOn); this->m_menuBar->Check(LXMENU_VIEW_VIEWPOINTSTP, this->m_viewpointSetupDlgOn); this->m_menuBar->Check(LXMENU_VIEW_SELECTIONSTP, this->m_selectionSetupDlgOn); this->m_menuBar->Check(LXMENU_VIEW_PRESENTDLG, this->m_presentationDlgOn); this->m_toolBar->ToggleTool(LXTB_PERSP, !this->setup->cam_persp); // visibility this->m_toolBar->ToggleTool(LXTB_VISCENTERLINE, this->setup->m_vis_centerline); this->m_toolBar->ToggleTool(LXTB_VISWALLS, this->setup->m_vis_walls); this->m_toolBar->ToggleTool(LXTB_VISSURFACE, this->setup->m_vis_surface); this->m_toolBar->ToggleTool(LXTB_VISBBOX, this->setup->m_vis_bbox); this->m_toolBar->ToggleTool(LXTB_VISINDS, this->setup->m_vis_indicators); this->m_toolBar->ToggleTool(LXTB_VISENTRANCE, this->setup->m_vis_centerline_entrance); this->m_toolBar->ToggleTool(LXTB_VISFIX, this->setup->m_vis_centerline_fix); this->m_toolBar->ToggleTool(LXTB_VISSTATION, this->setup->m_vis_centerline_station); // rotation this->m_menuBar->Check(LXMENU_CAMERA_AUTOROTATE, this->canvas->m_sCameraAutoRotate); this->m_toolMenu->Check(LXMENU_CAMERA_AUTOROTATE, this->canvas->m_sCameraAutoRotate); this->m_toolBar->ToggleTool(LXTB_ROTATION, this->canvas->m_sCameraAutoRotate); // lock rotation this->m_menuBar->Check(LXMENU_CAMERA_LOCKROT, this->canvas->m_sCameraLockRotation); this->m_toolMenu->Check(LXMENU_CAMERA_LOCKROT, this->canvas->m_sCameraLockRotation); this->m_toolBar->ToggleTool(LXTB_LOCKROT, this->canvas->m_sCameraLockRotation); // stereo this->m_toolBar->ToggleTool(LXTB_STEREO, this->setup->cam_anaglyph); // dialogs this->m_toolBar->ToggleTool(LXTB_VIEWSTP, this->m_viewpointSetupDlgOn); this->m_toolMenu->Check(LXMENU_VIEW_VIEWPOINTSTP, this->m_viewpointSetupDlgOn); this->m_toolBar->ToggleTool(LXTB_SCENESTP, this->m_modelSetupDlgOn); this->m_toolMenu->Check(LXMENU_VIEW_MODELSTP, this->m_modelSetupDlgOn); // TODO: Tree button // this->m_toolMenu->Check(LXMENU_VIEW_SELECTIONSTP, this->m_selectionSetupDlgOn); // full screen this->m_toolBar->ToggleTool(LXTB_FULLSCREEN, this->IsFullScreen()); #ifdef LXLINUX this->m_toolBar->Show(!this->IsFullScreen()); #endif this->SetupUpdate(); } void lxFrame::TogglePerspective() { this->setup->cam_persp = !this->setup->cam_persp; this->canvas->ForceRefresh(); this->UpdateM2TB(); } #define lxFrameToggle(proc,item) void lxFrame::Toggle##proc() { \ this->setup->item = !this->setup->item; \ this->canvas->UpdateContents(); \ this->UpdateM2TB(); \ } #define lxFrameFastToggle(proc,item) void lxFrame::Toggle##proc() { \ this->setup->item = !this->setup->item; \ this->canvas->UpdateRenderList(); \ this->canvas->ForceRefresh(); \ this->UpdateM2TB(); \ } #define lxFrameFastSet(proc,item) void lxFrame::Set##proc(int value) { \ this->setup->item = value; \ this->canvas->UpdateRenderList(); \ this->canvas->ForceRefresh(); \ this->UpdateM2TB(); \ } lxFrameToggle(VisibilityCenterline, m_vis_centerline) lxFrameToggle(VisibilityCenterlineCave, m_vis_centerline_cave) lxFrameToggle(VisibilityCenterlineSurface, m_vis_centerline_surface) lxFrameToggle(VisibilityCenterlineSplay, m_vis_centerline_splay) lxFrameToggle(VisibilityCenterlineDuplicate, m_vis_centerline_duplicate) lxFrameToggle(VisibilityCenterlineFix, m_vis_centerline_fix) lxFrameToggle(VisibilityCenterlineEntrance, m_vis_centerline_entrance) lxFrameToggle(VisibilityCenterlineStation, m_vis_centerline_station) lxFrameToggle(VisibilityWalls, m_vis_walls) lxFrameToggle(VisibilitySurface, m_vis_surface) lxFrameToggle(VisibilityLabels, m_vis_labels) lxFrameToggle(VisibilityBBox, m_vis_bbox) lxFrameToggle(VisibilityGrid, m_vis_grid) lxFrameToggle(VisibilityIndicators, m_vis_indicators) lxFrameToggle(VisibilityStLabelName, m_stlabel_name) lxFrameToggle(VisibilityStLabelComment, m_stlabel_comment) lxFrameToggle(VisibilityStLabelAltitude, m_stlabel_altitude) lxFrameToggle(VisibilityStLabelSurvey, m_stlabel_survey) lxFrameFastSet(ColorMode, m_colormd) lxFrameFastToggle(ColorsApplyCenterline, m_colormd_app_centerline) lxFrameFastToggle(ColorsApplyWalls, m_colormd_app_walls) lxFrameToggle(WallsTransparency, m_walls_transparency) lxFrameToggle(SurfaceLighting, m_srf_lighting) lxFrameToggle(SurfaceTransparency, m_srf_transparency) void lxFrame::ToggleSurfaceTexture() { this->setup->m_srf_texture = !this->setup->m_srf_texture; this->setup->m_srf_lighting = !this->setup->m_srf_texture; this->canvas->UpdateContents(); this->UpdateM2TB(); } void lxFrame::ToggleStereo() { this->setup->cam_anaglyph = !this->setup->cam_anaglyph; this->canvas->SetFontColors(); this->canvas->UpdateRenderContents(); this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } void lxFrame::ToggleStereoBW() { this->setup->cam_anaglyph_bw = !this->setup->cam_anaglyph_bw; this->canvas->UpdateRenderContents(); this->canvas->UpdateRenderList(); this->canvas->ForceRefresh(); this->UpdateM2TB(); } void lxFrame::ToggleRotation() { this->canvas->m_sCameraAutoRotate = !this->canvas->m_sCameraAutoRotate; if (this->canvas->m_sCameraAutoRotate) { this->canvas->m_sCameraAutoRotateCounter = 0; this->canvas->m_sCameraAutoRotateSWatch.Start(); this->setup->StartCameraMovement(); } else { ((wxStaticText *)(this->m_viewpointSetupDlg->FindWindow(LXVSTP_RENSPEED)))->SetLabel(_T("")); } this->UpdateM2TB(); } void lxFrame::ToggleRotLock() { this->canvas->m_sCameraLockRotation = !this->canvas->m_sCameraLockRotation; this->UpdateM2TB(); } void lxFrame::ToggleModelSetup() { if (this->m_modelSetupDlgOn) { this->m_modelSetupDlg->m_toolBoxPosition.Save(); this->m_modelSetupDlg->Show(false); } else { this->m_modelSetupDlg->m_toolBoxPosition.Restore(); this->m_modelSetupDlg->Show(true); } this->m_modelSetupDlgOn = !this->m_modelSetupDlgOn; this->UpdateM2TB(); } void lxFrame::ToggleSelectionSetup() { if (this->m_selectionSetupDlgOn) { this->m_selectionSetupDlg->m_toolBoxPosition.Save(); this->m_selectionSetupDlg->Show(false); } else { this->m_selectionSetupDlg->m_toolBoxPosition.Restore(); this->m_selectionSetupDlg->Show(true); } this->m_selectionSetupDlgOn = !this->m_selectionSetupDlgOn; this->UpdateM2TB(); } void lxFrame::TogglePresentationDlg() { if (this->m_presentationDlgOn) { this->m_presentationDlg->m_toolBoxPosition.Save(); this->m_presentationDlg->Show(false); } else { this->m_presentationDlg->m_toolBoxPosition.Restore(); this->m_presentationDlg->Show(true); } this->m_presentationDlgOn = !this->m_presentationDlgOn; this->UpdateM2TB(); } void lxFrame::ToggleViewpointSetup() { if (this->m_viewpointSetupDlgOn) { this->m_viewpointSetupDlg->m_toolBoxPosition.Save(); this->m_viewpointSetupDlg->Show(false); } else { this->m_viewpointSetupDlg->m_toolBoxPosition.Restore(); this->m_viewpointSetupDlg->Show(true); } this->m_viewpointSetupDlgOn = !this->m_viewpointSetupDlgOn; this->UpdateM2TB(); } void lxFrame::SetupUpdate() { if (this->m_viewpointSetupDlgOn) this->m_viewpointSetupDlg->LoadSetup(); if (this->m_modelSetupDlgOn) this->m_modelSetupDlg->LoadSetup(); } void lxFrame::SetupApply() { } void lxFrame::ImportFile(wxString fName, int fType) { if (fType == 0) fType = this->GetFileType(fName); this->LoadData(fName, fType); } void lxFrame::LoadData(wxString fName, int fType) { { #if wxCHECK_VERSION(3,0,0) wxWindowDisabler disableAll; #endif wxBusyInfo info(_("Building 3D model, please wait...")); #if wxCHECK_VERSION(3,0,0) wxTheApp->Yield(); #endif switch (fType) { case 1: this->data->m_input.ImportLOX(fName.mbc_str()); break; case 2: this->data->m_input.ImportPLT(fName.mbc_str()); break; case 3: this->data->m_input.Import3D(fName.mbc_str()); break; default: this->data->m_input.m_error = "unable to detect file format"; break; } #if wxCHECK_VERSION(3,0,0) wxTheApp->Yield(); #endif switch (this->m_iniWallsInterpolate) { case LXWALLS_INTERP_ALL_ONLY: if (!this->data->m_input.HasAnyWalls()) this->data->m_input.InterpolateMissingLRUD(); break; case LXWALLS_INTERP_MISSING: this->data->m_input.InterpolateMissingLRUD(); break; } this->data->Rebuild(); #if wxCHECK_VERSION(3,0,0) wxTheApp->Yield(); #endif this->canvas->UpdateRenderContents(); #if wxCHECK_VERSION(3,0,0) wxTheApp->Yield(); #endif this->canvas->UpdateRenderList(); } // We need to have disengaged the wxWindowDisabler here or else we get an // assertion failure for the wxMessageBox. if (this->data->m_input.m_error.length() > 0) { wxMessageBox(_("Error reading input file"), _("Error"), wxICON_ERROR | wxOK); } else { this->m_fileHistory->AddFileToHistory(this->m_fileName); } } void lxFrame::ReloadData() { this->canvas->Refresh(false); this->data->m_input.Clear(); this->LoadData(this->m_fileName, this->m_fileType); this->m_modelSetupDlg->InitSetup(); this->m_selectionSetupDlg->LoadData(); } //////////////////////////////////////////////////////////////////////// // Application //////////////////////////////////////////////////////////////////////// IMPLEMENT_APP(lxApp) bool lxApp::OnInit() { #if wxCHECK_VERSION(3,0,0) m_locale.Init(wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT); #else m_locale.Init(wxLANGUAGE_DEFAULT, wxLOCALE_LOAD_DEFAULT | wxLOCALE_CONV_ENCODING); #endif m_locale.AddCatalog(wxT("loch")); m_path = wxFileName(this->argv[0]); vtkObject::GlobalWarningDisplayOff(); #if wxUSE_DISPLAY //multi screen support wxDisplay display(0); //Get the settings for screen 0 wxRect displayRect = display.GetGeometry(); #else wxSize scr = wxGetDisplaySize(); #endif wxFileSystem::AddHandler(new wxZipFSHandler); // Use a double-buffered visual if available, as it will give much smoother // animation. int wx_gl_attribs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; if (!InitGLVisual(wx_gl_attribs)) { int wx_gl_attribs_no_db[] = { WX_GL_RGBA, 0 }; if (!InitGLVisual(wx_gl_attribs_no_db)) { wxString m; m.Printf(_T("This version of loch requires OpenGL to work, but it isn't available")); wxMessageBox(m,_T("Loch") , wxOK | wxCENTRE | wxICON_EXCLAMATION); exit(1); } } #if wxUSE_DISPLAY this->frame = new lxFrame(this, _T("Loch"), wxPoint(displayRect.width / 8, displayRect.height / 8), wxSize(3 * displayRect.width / 4, 3 * displayRect.height / 4)); #else this->frame = new lxFrame(this, _T("Loch"), wxPoint(scr.x / 8, scr.y / 8), wxSize(3 * scr.x / 4, 3 * scr.y / 4)); #endif this->frame->Show(true); this->frame->canvas->SetFocus(); #if wxUSE_DISPLAY this->frame->canvas->OSCInit(displayRect.width, displayRect.height); #else this->frame->canvas->OSCInit(wxGetDisplaySize().x, wxGetDisplaySize().y); #endif if (this->argc > 1) { this->frame->m_fileToOpen = wxString(this->argv[1]); } return true; } void lxFrame::OpenFile(const wxString & fName) { wxFileName tmpFN(fName); this->m_fileName = tmpFN.GetFullPath(); this->m_fileDir = tmpFN.GetPath(); this->m_fileType = 0; this->DetectFileType(); this->ReloadData(); this->setup->ResetCamera(); this->canvas->ForceRefresh(); } void lxFrame::ExportRotationPictures() { wxMessageDialog dlg(this, _("This is only EXPERIMENTAL function! Are you sure?"), _("Warning"), wxYES_NO | wxNO_DEFAULT | wxICON_EXCLAMATION | wxCENTRE); if (dlg.ShowModal() != wxID_YES) return; int i; lxRenderData * tmpRD = new lxRenderData(); tmpRD->m_imgFileType = 1; tmpRD->m_askFName = false; this->canvas->setup->cam_orig_dir = this->canvas->setup->cam_dir; this->canvas->setup->cam_orig_dist = this->canvas->setup->cam_dist; this->canvas->setup->cam_orig_tilt = this->canvas->setup->cam_tilt; this->canvas->setup->cam_orig_center = this->canvas->setup->cam_center; this->canvas->setup->cam_orig_pos = this->canvas->setup->cam_pos; for(i = 0; i < 600; i++) { tmpRD->m_imgFileName = this->m_fileDir; tmpRD->m_imgFileName += _T("/"); tmpRD->m_imgFileName += wxString::Format(_T("ROT%04d.png"), i); tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); if (i == 0) { tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); tmpRD->Render(this, this->canvas); this->canvas->SwapBuffers(); } if (i < 599) { this->canvas->setup->RotateCameraF(0.6); } } delete tmpRD; } #ifdef LXMACOSX void lxApp::MacOpenFile(const wxString &fileName) { this->frame->OpenFile(fileName); } #endif therion-5.4.1/loch/lxGUI.h000066400000000000000000000146061307545355600153030ustar00rootroot00000000000000/** * @file lxGUI.h * Loch user interface. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxGUI_h #define lxGUI_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #endif //LXDEPCHECK - standard libraries #include "lxGLC.h" enum { LXMENU_CAMERA_ADJUST = 1000, LXMENU_CAMERA_ROTCW, LXMENU_CAMERA_ROTCCW, LXMENU_CAMERA_UPPER, LXMENU_CAMERA_LOWER, LXMENU_CAMERA_UP, LXMENU_CAMERA_DOWN, LXMENU_CAMERA_LEFT, LXMENU_CAMERA_RIGHT, LXMENU_CAMERA_ZOOMIN, LXMENU_CAMERA_ZOOMOUT, LXMENU_CAMERA_ORIENT, LXMENU_CAMERA_ORIENT_HOME, LXMENU_CAMERA_ORIENT_PLAN, LXMENU_CAMERA_ORIENT_PROFILE, LXMENU_CAMERA_ORIENT_NORTH, LXMENU_CAMERA_ORIENT_SOUTH, LXMENU_CAMERA_ORIENT_EAST, LXMENU_CAMERA_ORIENT_WEST, LXMENU_CAMERA_EXTENDS, LXMENU_CAMERA_DEFAULTS, LXMENU_CAMERA_PERSP, LXMENU_CAMERA_AUTOROTATE, LXMENU_CAMERA_LOCKROT, LXMENU_VIEW, LXMENU_VIEW_FULLSCREEN, LXMENU_VIEW_MODELSTP, LXMENU_VIEW_SELECTIONSTP, LXMENU_VIEW_VIEWPOINTSTP, LXMENU_VIEW_PRESENTDLG, LXMENU_TOOLS_OPTIONS, LXMENU_VIEWEND, LXMENU_EDIT_UNDO, LXMENU_EDIT_REDO, LXMENU_FILE_OPEN, LXMENU_FILE_RELOAD, LXMENU_FILE_RENDER, LXMENU_FILE_RENDER_SETUP, LXMENU_FILE_EXPORT, LXMENU_FILE_IMPORT, LXMENU_HELP_CONTENTS, LXMENU_HELP_CONTROL, LXMENU_HELP_RENDERING, LXMENU_HELP_BUGS, LXMENU_HELP_ABOUT, LXMENU_EXPFIT, LXMENU_EXPROT, LXMENU_PRES, LXMENU_PRESMARK, LXMENU_PRESUPDATE, LXMENU_PRESMOVEUP, LXMENU_PRESMOVEDOWN, LXMENU_PRESDELETE, LXMENU_PRESNEW, LXMENU_PRESOPEN, LXMENU_PRESSAVE, LXMENU_PRESSAVEAS, LXMENU_PRESACTIVATE, LXMENU_PRESEDIT, LXMENU_PRES_END, LXTB, LXTB_OPEN, LXTB_RELOAD, LXTB_RENDER, LXTB_RENDER_SETUP, LXTB_VIEWPOINT, LXTB_PERSP, LXTB_ROTATION, LXTB_LOCKROT, LXTB_PLAN, LXTB_PROFILE, LXTB_FIT, LXTB_HOME, LXTB_FULLSCREEN, LXTB_STEREO, LXTB_VIEWSTP, LXTB_SCENESTP, LXTB_VISCENTERLINE, LXTB_VISWALLS, LXTB_VISSURFACE, LXTB_VISBBOX, LXTB_VISINDS, LXTB_VISENTRANCE, LXTB_VISFIX, LXTB_VISSTATION, LXTB_VISLABEL, LXTBEND, }; enum { LXWALLS_INTERP_NONE, LXWALLS_INTERP_ALL_ONLY, LXWALLS_INTERP_MISSING, }; enum { LXUNITS_METRIC, LXUNITS_IMPERIAL, }; class lxFrame: public wxFrame { public: lxGLCanvas * canvas; wxString m_fileDir, m_fileToOpen, m_fileName; int m_fileType; struct lxData * data; struct lxSetup * setup; struct lxRenderData * m_renderData; wxXmlDocument * m_pres; class lxModelSetupDlg * m_modelSetupDlg; bool m_modelSetupDlgOn; class lxModelTreeDlg * m_selectionSetupDlg; bool m_selectionSetupDlgOn; class lxPresentDlg * m_presentationDlg; bool m_presentationDlgOn; class lxViewpointSetupDlg * m_viewpointSetupDlg; bool m_viewpointSetupDlgOn; wxMenuBar * m_menuBar; wxToolBar * m_toolBar; wxMenu * m_viewpointMenu, * m_toolMenu; wxAcceleratorTable m_menuAccelTable; wxFileConfig * m_fileConfig; wxFileHistory * m_fileHistory; wxString m_iniDirectory; long m_iniUnits; int m_iniStereoGlasses; int m_iniStereoGlassesLast; long m_iniWallsInterpolate; class lxApp * m_app; class wxHelpController * m_helpController; lxFrame(class lxApp * app, const wxString& title, const wxPoint& pos, const wxSize& size, long style = wxDEFAULT_FRAME_STYLE); virtual ~lxFrame(); void OnExit(wxCommandEvent& event); void OnAll(wxCommandEvent& event); void OnMenuCameraMove(wxCommandEvent& event); void OnMenuCameraOrient(wxCommandEvent& event); void OnSize(wxSizeEvent& event); void OnMove(wxMoveEvent& event); void TogglePerspective(); void ToggleStereo(); void ToggleStereoBW(); void ToggleRotation(); void ToggleRotLock(); void ToggleFullScreen(); void ToggleModelSetup(); void ToggleSelectionSetup(); void TogglePresentationDlg(); void ToggleViewpointSetup(); void ToggleVisibilityCenterline(); void ToggleVisibilityCenterlineCave(); void ToggleVisibilityCenterlineSurface(); void ToggleVisibilityCenterlineSplay(); void ToggleVisibilityCenterlineDuplicate(); void ToggleVisibilityCenterlineFix(); void ToggleVisibilityCenterlineStation(); void ToggleVisibilityCenterlineEntrance(); void ToggleVisibilitySurface(); void ToggleVisibilityWalls(); void ToggleVisibilityLabels(); void ToggleVisibilityBBox(); void ToggleVisibilityGrid(); void ToggleVisibilityIndicators(); void ToggleVisibilityStLabelName(); void ToggleVisibilityStLabelComment(); void ToggleVisibilityStLabelAltitude(); void ToggleVisibilityStLabelSurvey(); void ExportRotationPictures(); void SetColorMode(int); void DetectFileType(); int GetFileType(wxString fName); void ToggleColorsApplyCenterline(); void ToggleColorsApplyWalls(); void ToggleSurfaceTexture(); void ToggleSurfaceTransparency(); void ToggleSurfaceLighting(); void ToggleWallsTransparency(); void SetupUpdate(); void SetupApply(); void OpenFile(const wxString & fName); void ImportFile(const wxString fName, int fType); void LoadData(wxString fName, int fType); void ReloadData(); void UpdateM2TB(); DECLARE_EVENT_TABLE() }; // lxFrame class lxApp: public wxGLApp { public: class lxFrame * frame; wxLocale m_locale; wxFileName m_path; bool OnInit(); #ifdef LXMACOSX virtual void MacOpenFile(const wxString &fileName); #endif }; // lxApp #endif therion-5.4.1/loch/lxImgIO.cxx000066400000000000000000000416241307545355600161760ustar00rootroot00000000000000#include "lxImgIO.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #ifdef __cplusplus extern "C" { // stupid JPEG library #endif #include #ifdef __cplusplus } #endif #endif //LXDEPCHECK - standard libraries /******************** JPEG COMPRESSION SAMPLE INTERFACE *******************/ /* This half of the example shows how to feed data into the JPEG compressor. * We present a minimal version that does not worry about refinements such * as error recovery (the JPEG code will just exit() if it gets an error). */ /* * IMAGE DATA FORMATS: * * The standard input image format is a rectangular array of pixels, with * each pixel having the same number of "component" values (color channels). * Each pixel row is an array of JSAMPLEs (which typically are unsigned chars). * If you are working with color data, then the color values for each pixel * must be adjacent in the row; for example, R,G,B,R,G,B,R,G,B,... for 24-bit * RGB color. * * For this example, we'll assume that this data structure matches the way * our application has stored the image in memory, so we can just pass a * pointer to our image buffer. In particular, let's say that the image is * RGB color and is described by: */ //extern JSAMPLE * image_buffer; /* Points to large array of R,G,B-order data */ //extern int image_height; /* Number of rows in image */ //extern int image_width; /* Number of columns in image */ /* * Sample routine for JPEG compression. We assume that the target file name * and a compression quality factor are passed in. */ GLOBAL(bool) lxWrite_JPEG_file (const char * filename, int quality, lxImageRGB img) { int image_width = img.width; int image_height = img.height; unsigned char* image = img.data; JSAMPLE * image_buffer = (JSAMPLE *) image; /* This struct contains the JPEG compression parameters and pointers to * working space (which is allocated as needed by the JPEG library). * It is possible to have several such structures, representing multiple * compression/decompression processes, in existence at once. We refer * to any one struct (and its associated working data) as a "JPEG object". */ struct jpeg_compress_struct cinfo; /* This struct represents a JPEG error handler. It is declared separately * because applications often want to supply a specialized error handler * (see the second half of this file for an example). But here we just * take the easy way out and use the standard error handler, which will * print a message on stderr and call exit() if compression fails. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct jpeg_error_mgr jerr; /* More stuff */ FILE * outfile; /* target file */ JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ int row_stride; /* physical row width in image buffer */ /* Step 1: allocate and initialize JPEG compression object */ /* We have to set up the error handler first, in case the initialization * step fails. (Unlikely, but it could happen if you are out of memory.) * This routine fills in the contents of struct jerr, and returns jerr's * address which we place into the link field in cinfo. */ cinfo.err = jpeg_std_error(&jerr); /* Now we can initialize the JPEG compression object. */ jpeg_create_compress(&cinfo); /* Step 2: specify data destination (eg, a file) */ /* Note: steps 2 and 3 can be done in either order. */ /* Here we use the library-supplied code to send compressed data to a * stdio stream. You can also write your own code to do something else. * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that * requires it in order to write binary files. */ if ((outfile = fopen(filename, "wb")) == NULL) { lxImgIOError = "can't open file for output"; //fprintf(stderr, "can't open %s\n", filename); return(false); //exit(1); } jpeg_stdio_dest(&cinfo, outfile); /* Step 3: set parameters for compression */ /* First we supply a description of the input image. * Four fields of the cinfo struct must be filled in: */ cinfo.image_width = image_width; /* image width and height, in pixels */ cinfo.image_height = image_height; cinfo.input_components = 3; /* # of color components per pixel */ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ /* Now use the library's routine to set default compression parameters. * (You must set at least cinfo.in_color_space before calling this, * since the defaults depend on the source color space.) */ jpeg_set_defaults(&cinfo); /* Now you can set any non-default parameters you wish to. * Here we just illustrate the use of quality (quantization table) scaling: */ jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */); /* Step 4: Start compressor */ /* TRUE ensures that we will write a complete interchange-JPEG file. * Pass TRUE unless you are very sure of what you're doing. */ jpeg_start_compress(&cinfo, TRUE); /* Step 5: while (scan lines remain to be written) */ /* jpeg_write_scanlines(...); */ /* Here we use the library's state variable cinfo.next_scanline as the * loop counter, so that we don't have to keep track ourselves. * To keep things simple, we pass one scanline per call; you can pass * more if you wish, though. */ row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */ while (cinfo.next_scanline < cinfo.image_height) { /* jpeg_write_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could pass * more than one scanline at a time if that's more convenient. */ row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride]; (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); } /* Step 6: Finish compression */ jpeg_finish_compress(&cinfo); /* After finish_compress, we can close the output file. */ fclose(outfile); /* Step 7: release JPEG compression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_compress(&cinfo); /* And we're done! */ return(true); } /* * SOME FINE POINTS: * * In the above loop, we ignored the return value of jpeg_write_scanlines, * which is the number of scanlines actually written. We could get away * with this because we were only relying on the value of cinfo.next_scanline, * which will be incremented correctly. If you maintain additional loop * variables then you should be careful to increment them properly. * Actually, for output to a stdio stream you needn't worry, because * then jpeg_write_scanlines will write all the lines passed (or else exit * with a fatal error). Partial writes can only occur if you use a data * destination module that can demand suspension of the compressor. * (If you don't know what that's for, you don't need it.) * * If the compressor requires full-image buffers (for entropy-coding * optimization or a multi-scan JPEG file), it will create temporary * files for anything that doesn't fit within the maximum-memory setting. * (Note that temp files are NOT needed if you use the default parameters.) * On some systems you may need to set up a signal handler to ensure that * temporary files are deleted if the program is interrupted. See libjpeg.doc. * * Scanlines MUST be supplied in top-to-bottom order if you want your JPEG * files to be compatible with everyone else's. If you cannot readily read * your data in that order, you'll need an intermediate array to hold the * image. See rdtarga.c or rdbmp.c for examples of handling bottom-to-top * source data using the JPEG code's internal virtual-array mechanisms. */ /******************** JPEG DECOMPRESSION SAMPLE INTERFACE *******************/ /* This half of the example shows how to read data from the JPEG decompressor. * It's a bit more refined than the above, in that we show: * (a) how to modify the JPEG library's standard error-reporting behavior; * (b) how to allocate workspace using the library's memory manager. * * Just to make this example a little different from the first one, we'll * assume that we do not intend to put the whole image into an in-memory * buffer, but to send it line-by-line someplace else. We need a one- * scanline-high JSAMPLE array as a work buffer, and we will let the JPEG * memory manager allocate it for us. This approach is actually quite useful * because we don't need to remember to deallocate the buffer separately: it * will go away automatically when the JPEG object is cleaned up. */ /* * ERROR HANDLING: * * The JPEG library's standard error handler (jerror.c) is divided into * several "methods" which you can override individually. This lets you * adjust the behavior without duplicating a lot of code, which you might * have to update with each future release. * * Our example here shows how to override the "error_exit" method so that * control is returned to the library's caller when a fatal error occurs, * rather than calling exit() as the standard error_exit method does. * * We use C's setjmp/longjmp facility to return control. This means that the * routine which calls the JPEG library must first execute a setjmp() call to * establish the return point. We want the replacement error_exit to do a * longjmp(). But we need to make the setjmp buffer accessible to the * error_exit routine. To do this, we make a private extension of the * standard JPEG error handler object. (If we were using C++, we'd say we * were making a subclass of the regular error handler.) * * Here's the extended error handler struct: */ struct my_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct my_error_mgr * my_error_ptr; /* * Here's the routine that will replace the standard error_exit method: */ METHODDEF(void) my_error_exit (j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer */ my_error_ptr myerr = (my_error_ptr) cinfo->err; /* Always display the message. */ /* We could postpone this until after returning, if we chose. */ (*cinfo->err->output_message) (cinfo); /* Return control to the setjmp point */ longjmp(myerr->setjmp_buffer, 1); } /* * Sample routine for JPEG decompression. We assume that the source file name * is passed in. We want to return 1 on success, 0 on error. */ GLOBAL(lxImageRGB) lxRead_JPEG_file (const char * filename, FILE * infile) { /* This struct contains the JPEG decompression parameters and pointers to * working space (which is allocated as needed by the JPEG library). */ struct jpeg_decompress_struct cinfo; /* We use our private extension JPEG error handler. * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ struct my_error_mgr jerr; /* More stuff */ //FILE * infile; /* source file */ JSAMPARRAY buffer; /* Output row buffer */ int row_stride; /* physical row width in output buffer */ /* In this example we want to open the input file before doing anything else, * so that the setjmp() error recovery below can assume the file is open. * VERY IMPORTANT: use "b" option to fopen() if you are on a machine that * requires it in order to read binary files. */ if (infile == NULL) { if ((infile = fopen(filename, "rb")) == NULL) { lxImgIOError = "can't open file for input"; //fprintf(stderr, "can't open %s\n", filename); return lxImageRGB(); } } /* Step 1: allocate and initialize JPEG decompression object */ /* We set up the normal JPEG error routines, then override error_exit. */ cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = my_error_exit; /* Establish the setjmp return context for my_error_exit to use. */ if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ jpeg_destroy_decompress(&cinfo); fclose(infile); lxImgIOError = "error reading JPEG file"; return lxImageRGB(); } /* Now we can initialize the JPEG decompression object. */ jpeg_create_decompress(&cinfo); /* Step 2: specify data source (eg, a file) */ jpeg_stdio_src(&cinfo, infile); /* Step 3: read file parameters with jpeg_read_header() */ (void) jpeg_read_header(&cinfo, TRUE); /* We can ignore the return value from jpeg_read_header since * (a) suspension is not possible with the stdio data source, and * (b) we passed TRUE to reject a tables-only JPEG file as an error. * See libjpeg.doc for more info. */ /* Step 4: set parameters for decompression */ /* In this example, we don't need to change any of the defaults set by * jpeg_read_header(), so we do nothing here. */ /* Step 5: Start decompressor */ (void) jpeg_start_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* We may need to do some setup of our own at this point before reading * the data. After jpeg_start_decompress() we have the correct scaled * output image dimensions available, as well as the output colormap * if we asked for color quantization. * In this example, we need to make an output work buffer of the right size. */ /* JSAMPLEs per row in output buffer */ row_stride = cinfo.output_width * cinfo.output_components; /* Make a one-row-high sample array that will go away when done with image */ buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1); /* Step 6: while (scan lines remain to be read) */ /* jpeg_read_scanlines(...); */ lxImageRGB img; img.width = cinfo.output_width; img.height = cinfo.output_height; img.data = (unsigned char*)malloc(cinfo.output_components * img.width * img.height); unsigned char* ptr = img.data; /* Here we use the library's state variable cinfo.output_scanline as the * loop counter, so that we don't have to keep track ourselves. */ while (cinfo.output_scanline < cinfo.output_height) { /* jpeg_read_scanlines expects an array of pointers to scanlines. * Here the array is only one element long, but you could ask for * more than one scanline at a time if that's more convenient. */ (void) jpeg_read_scanlines(&cinfo, buffer, 1); /* Assume put_scanline_someplace wants a pointer and sample count. */ memcpy(ptr, buffer[0], row_stride); ptr += row_stride; } /* Step 7: Finish decompression */ (void) jpeg_finish_decompress(&cinfo); /* We can ignore the return value since suspension is not possible * with the stdio data source. */ /* Step 8: Release JPEG decompression object */ /* This is an important step since it will release a good deal of memory. */ jpeg_destroy_decompress(&cinfo); /* After finish_decompress, we can close the input file. * Here we postpone it until after no more JPEG errors are possible, * so as to simplify the setjmp error logic above. (Actually, I don't * think that jpeg_destroy can do an error exit, but why assume anything...) */ fclose(infile); /* At this point you may want to check to see whether any corrupt-data * warnings occurred (test whether jerr.pub.num_warnings is nonzero). */ /* And we're done! */ return img; } /* * SOME FINE POINTS: * * In the above code, we ignored the return value of jpeg_read_scanlines, * which is the number of scanlines actually read. We could get away with * this because we asked for only one line at a time and we weren't using * a suspending data source. See libjpeg.doc for more info. * * We cheated a bit by calling alloc_sarray() after jpeg_start_decompress(); * we should have done it beforehand to ensure that the space would be * counted against the JPEG max_memory setting. In some systems the above * code would risk an out-of-memory error. However, in general we don't * know the output image dimensions before jpeg_start_decompress(), unless we * call jpeg_calc_output_dimensions(). See libjpeg.doc for more about this. * * Scanlines are returned in the same order as they appear in the JPEG file, * which is standardly top-to-bottom. If you must emit data bottom-to-top, * you can use one of the virtual arrays provided by the JPEG memory manager * to invert the data. See wrbmp.c for an example. * * As with compression, some operating modes may require temporary files. * On some systems you may need to set up a signal handler to ensure that * temporary files are deleted if the program is interrupted. See libjpeg.doc. */ void lxImageRGBFree(lxImageRGB & img) { if (img.data != NULL) free(img.data); img.data = NULL; } const char * lxImgIOError = "unknown"; therion-5.4.1/loch/lxImgIO.h000066400000000000000000000014411307545355600156140ustar00rootroot00000000000000#ifndef lxImgIO_h #define lxImgIO_h // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standard libraries #ifndef UCHAR #define UCHAR typedef unsigned char uchar; #endif extern const char * lxImgIOError; // struct for handling images struct lxImageRGB { uchar* data; //pixel data in RGB format. sizeof(data) == 3 * width * height; int width, height; lxImageRGB() : data(NULL), width(0), height(0) {} }; /* Compress image into JPEG, and save it to disk quality must be in range 0-100 */ bool lxWrite_JPEG_file (const char * filename, int quality, lxImageRGB img); /* Load and decompress JPEG image from disk */ lxImageRGB lxRead_JPEG_file (const char * filename, FILE * infile = NULL); void lxImageRGBFree(lxImageRGB & img); #endif therion-5.4.1/loch/lxLRUD.cxx000066400000000000000000000532361307545355600160020ustar00rootroot00000000000000#include "lxLRUD.h" // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #endif //LXDEPCHECK - standard libraries static const double lxVecPrec = 0.01; long lxLRUDData::GetStationID(lxVec pos, bool insert) { std::map::iterator smi; smi = this->station_map.find(pos); if (smi == this->station_map.end()) { if (insert) { this->station_map[pos] = this->nstations; nstations++; return (this->nstations - 1); } else { return -1; } } else { return smi->second; } } void lxLRUD::SetVThreshold(double vt) { this->i.currentVT = vt; } void lxLRUD::SetProfile(int sec_type) { this->i.currentProfile = sec_type; } void lxLRUD::InsertShot(double * from, double * to, double * fromLRUD, double * toLRUD, void * usrData) { lxLRUDShot shot; shot.fl = fromLRUD[0]; shot.fr = fromLRUD[1]; shot.fu = fromLRUD[2]; shot.fd = fromLRUD[3]; shot.tl = toLRUD[0]; shot.tr = toLRUD[1]; shot.tu = toLRUD[2]; shot.td = toLRUD[3]; shot.vthresh = this->i.currentVT; shot.profile = this->i.currentProfile; shot.from = lxVec(from[0], from[1], from[2]); shot.to = lxVec(to[0], to[1], to[2]); shot.xfrom = this->i.GetStationID(shot.from, true); shot.xto = this->i.GetStationID(shot.to, true); shot.usr_data = usrData; this->i.shots.insert(this->i.shots.end(), shot); } struct xcEdge { size_t fx, tx; lxLRUDShot * shot; lxVec dir; bool used; xcEdge() : fx(0), tx(0), shot(NULL), used(false) {} }; struct xcNodeArrow { xcEdge * edge; bool orient; xcNodeArrow() : edge(NULL), orient(true) {} xcNodeArrow(xcEdge * e, bool o) : edge(e), orient(o) {} lxVec GetDir(); size_t GetFX(); double GetFU(); double GetFD(); double GetFL(); double GetFR(); size_t GetTX(); double GetTU(); double GetTD(); double GetTL(); double GetTR(); }; lxVec xcNodeArrow::GetDir() { return (this->orient ? 1.0 : -1.0) * this->edge->dir; } size_t xcNodeArrow::GetFX() { return (this->orient ? this->edge->fx : this->edge->tx); } size_t xcNodeArrow::GetTX() { return (this->orient ? this->edge->tx : this->edge->fx); } #define xcNAGet(d,e,f) double xcNodeArrow::Get##d() { \ return (this->orient ? lxMax(this->edge->shot->e, lxVecPrec) : lxMax(this->edge->shot->f, lxVecPrec)); \ } xcNAGet(TU,tu,fu) xcNAGet(TD,td,fd) xcNAGet(TL,tl,fr) xcNAGet(TR,tr,fl) xcNAGet(FU,fu,tu) xcNAGet(FD,fd,td) xcNAGet(FL,fl,tr) xcNAGet(FR,fr,tl) struct xcNode { size_t id; lxVec p; std::list arrows; }; struct xcSeriesStart { double prob; xcNodeArrow arrow; }; bool operator < (const xcSeriesStart & s, const xcSeriesStart & t) { return s.prob < t.prob; } enum { LXPE_FLAT, LXPE_ROUND, LXPE_CONT, }; struct xcSeriesArrow { xcNodeArrow arrow; xcSeriesArrow * next, * prev; int fType, tType, fXMin, tXMin; lxVec f, t, ft, sDir, uDir, rDir, fDir, nfDir, tDir, ntDir; double fDist, tDist; lxTriGeomPoint fp[9], tp[9], nfp[9], ntp[9]; lxPlane fPlane, tPlane, nfPlane, ntPlane; xcSeriesArrow() : next(NULL), prev(NULL) {} }; void lxLRUD::Calculate() { // TODO - more sophisticated LRUD modelling :) std::list::iterator shi; lxVec shotDir, uDir, rDir; double pX[8], pY[8]; int prevProfile, i; prevProfile = -1; double ca, ci; // 1. traverse all shots and create a list of nodes size_t csx, cex, nedg, cnx, nnod; std::map stMap; std::map::iterator stMapIter; nedg = this->i.shots.size(); nnod = 0; if (nedg == 0) return; xcEdge * edges = new xcEdge [nedg], * cedge; for(csx = 0, shi = this->i.shots.begin(); shi != this->i.shots.end(); shi++) { cedge = &(edges[csx]); cedge->shot = &(*shi); stMapIter = stMap.find(shi->from); if (stMapIter == stMap.end()) { cedge->fx = nnod; stMap[shi->from] = nnod++; } else { cedge->fx = stMapIter->second; } stMapIter = stMap.find(shi->to); if (stMapIter == stMap.end()) { cedge->tx = nnod; stMap[shi->to] = nnod++; } else { cedge->tx = stMapIter->second; } if (cedge->fx != cedge->tx) csx++; else nedg--; } if (nedg == 0) { delete [] edges; return; } xcNode * nodes = new xcNode [nnod], * cnode; for(stMapIter = stMap.begin(); stMapIter != stMap.end(); stMapIter++) { nodes[stMapIter->second].id = stMapIter->second; nodes[stMapIter->second].p = stMapIter->first; } // 2. for each node, create a list of edges (with edge orientation) for(cex = 0; cex < nedg; cex++) { cedge = &(edges[cex]); cedge->dir = nodes[cedge->tx].p - nodes[cedge->fx].p; cedge->dir.Normalize(); nodes[cedge->fx].arrows.push_back(xcNodeArrow(cedge, true)); nodes[cedge->tx].arrows.push_back(xcNodeArrow(cedge, false)); } // 3. calculate series starting arrow probabilities std::vector sstarts; size_t narrows; xcSeriesStart sstart; std::list::iterator nait; for (cnx = 0; cnx < nnod; cnx++) { cnode = &(nodes[cnx]); narrows = cnode->arrows.size(); for (nait = cnode->arrows.begin(); nait != cnode->arrows.end(); nait++) { sstart.arrow = *nait; sstart.prob = ((narrows % 2 == 0) ? 1.0 : -1.0) / double (narrows); sstarts.push_back(sstart); } } std::sort(sstarts.begin(), sstarts.end()); // 4. create series bool nextarrow = true; xcSeriesArrow sarrow; xcNodeArrow parrow, narrow; xcNode * lastN; std::list series; std::list::iterator si; xcSeriesArrow * psi; std::vector::iterator ssi; sarrow.arrow = sstarts[0].arrow; sarrow.arrow.edge->used = true; series.push_back(sarrow); parrow = sarrow.arrow; while (nextarrow) { // find next arrow from parrow nextarrow = false; lastN = &(nodes[parrow.GetTX()]); for(nait = lastN->arrows.begin(); nait != lastN->arrows.end(); nait++) { if (!nait->edge->used) { if (nextarrow) { if ((nait->GetDir() * parrow.GetDir()) > (narrow.GetDir() * parrow.GetDir())) { narrow = *nait; } } else { nextarrow = true; narrow = *nait; } } } // if not found, find new start arrow if (!nextarrow) { for(ssi = sstarts.begin(); ssi != sstarts.end(); ssi++) { if (!ssi->arrow.edge->used) { narrow = ssi->arrow; nextarrow = true; break; } } } // add new series item if (nextarrow) { narrow.edge->used = true; sarrow.arrow = narrow; series.push_back(sarrow); } parrow = narrow; } xcSeriesArrow * first, * prev; first = NULL; prev = NULL; for(si = series.begin(); si != series.end(); si++) { if (prev != NULL) { if (si->arrow.GetFX() == prev->arrow.GetTX()) { si->prev = prev; prev->next = &(*si); } else { if ((first != NULL) && (first->arrow.GetFX() == prev->arrow.GetTX())) { prev->next = first; first->prev = prev; } first = NULL; } } prev = &(*si); if (first == NULL) first = prev; } if ((first != NULL) && (first->arrow.GetFX() == prev->arrow.GetTX())) { prev->next = first; first->prev = prev; } for(si = series.begin(); si != series.end(); si++) { si->fType = LXPE_CONT; si->tType = LXPE_CONT; if (si->prev == NULL) { if (nodes[si->arrow.GetFX()].arrows.size() == 1) { si->fType = LXPE_FLAT; } else { si->fType = LXPE_ROUND; } } if (si->next == NULL) { if (nodes[si->arrow.GetTX()].arrows.size() == 1) { si->tType = LXPE_FLAT; } else { si->tType = LXPE_ROUND; } } } for(si = series.begin(); si != series.end(); si++) { psi = &(*si); #define pXY(i,x,y) pX[i] = x; pY[i] = y; //if (shi->profile != prevProfile) { if (psi->arrow.edge->shot->profile != prevProfile) { switch (psi->arrow.edge->shot->profile) { case LXLRUD_TUNNEL: pXY(0,0.0,1.0) pXY(1,0.5,0.75) pXY(2,0.8,0.0) pXY(3,1.0,-1.0) pXY(4,0.0,-1.0) pXY(5,-1.0,-1.0) pXY(6,-0.8,0.0) pXY(7,-0.5,0.75) break; case LXLRUD_DIAMOND: pXY(0,0.0,1.0) pXY(1,0.5,0.5) pXY(2,1.0,0.0) pXY(3,0.5,-0.5) pXY(4,0.0,-1.0) pXY(5,-0.5,-0.5) pXY(6,-1.0,0.0) pXY(7,-0.5,0.5) break; case LXLRUD_SQUARE: pXY(0,0.0,1.0) pXY(1,1.0,1.0) pXY(2,1.0,0.0) pXY(3,1.0,-1.0) pXY(4,0.0,-1.0) pXY(5,-1.0,-1.0) pXY(6,-1.0,0.0) pXY(7,-1.0,1.0) break; default: pXY(0,0.0,1.0) pXY(1,0.707,0.707) pXY(2,1.0,0.0) pXY(3,0.707,-0.707) pXY(4,0.0,-1.0) pXY(5,-0.707,-0.707) pXY(6,-1.0,0.0) pXY(7,-0.707,0.707) break; } } prevProfile = psi->arrow.edge->shot->profile; shotDir = nodes[si->arrow.GetTX()].p - nodes[si->arrow.GetFX()].p; rDir = lxVec(shotDir.y, -shotDir.x, 0.0); if (rDir.Norm() == 0.0) { rDir = lxVec(1.0, 0.0, 0.0); uDir = lxVec(0.0, (shotDir.z < 0 ? 1.0 : -1.0), 0.0); } else { rDir.Normalize(); ci = shotDir.Inclination(); if (fabs(ci) < si->arrow.edge->shot->vthresh) uDir = lxVec(0.0, 0.0, 1.0); else { uDir = lxVec(0.0, 1.0, 0.0); ca = shotDir.Azimuth(); uDir = lxPol2Vec(1.0, (ci >= 0.0 ? ca + 180.0 : ca), (ci >= 0.0 ? 90 - ci : 90 + ci)); } } si->uDir = uDir; si->rDir = rDir; si->sDir = uDir ^ rDir; si->sDir.Normalize(); si->f = nodes[si->arrow.GetFX()].p; si->t = nodes[si->arrow.GetTX()].p; si->ft = si->t - si->f; si->tDir = si->sDir; si->fDir = si->sDir; si->fPlane.Init(si->f, si->fDir); si->tPlane.Init(si->t, si->tDir); si->fXMin = -1; si->tXMin = -1; si->fDist = -1.0; si->tDist = -1.0; for(i = 0; i < 8; i++) { si->fp[i].p = si->f + pX[i] * (pX[i] > 0 ? si->arrow.GetFR() : si->arrow.GetFL()) * rDir + pY[i] * (pY[i] > 0 ? si->arrow.GetFU() : si->arrow.GetFD()) * uDir; si->tp[i].p = si->t + pX[i] * (pX[i] > 0 ? si->arrow.GetTR() : si->arrow.GetTL()) * rDir + pY[i] * (pY[i] > 0 ? si->arrow.GetTU() : si->arrow.GetTD()) * uDir; } } // spocitajme fDir a tDir, fPlane a tPlane for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->next != NULL) { si->tDir = si->sDir + si->next->sDir; if (si->tDir.Norm() < 1E-6) { if (si->tType == LXPE_CONT) { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } else { si->tDir.Normalize(); si->next->fDir = si->tDir; si->tPlane.Init(si->t, si->tDir); si->next->fPlane = si->tPlane; } } } // spocitajme body na fPlane a tPlane lxVec ffp[8], ttp[8], nsDir; lxPlane sPlane; double sDistMax(0.0), sDistMin(0.0), sDistCur; int sXMax(0), sXMin(0); bool allOK; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); // spocitajme tPlane allOK = true; sPlane.Init(si->t, si->sDir); for(i = 0; i < 8; i++) { allOK = allOK && (si->tPlane.CalcIntersection(si->fp[i], si->tp[i], ttp[i])); sDistCur = sPlane.CalcPosition(ttp[i]); if (i == 0) { sDistMax = sDistCur; sXMax = 0; sDistMin = sDistCur; sXMin = 0; } else { if (sDistCur > sDistMax) { sDistMax = sDistCur; sXMax = i; } if (sDistCur < sDistMin) { sDistMin = sDistCur; sXMin = i; } } } if (sXMin != sXMax) { nsDir = ttp[sXMin] - si->tp[sXMax]; if (nsDir.Norm() > 0) nsDir.Normalize(); else allOK = false; si->ntDir = nsDir ^ si->tDir; si->ntDir = nsDir ^ si->ntDir; if ((si->ntDir * si->sDir) < 0) si->ntDir *= -1.0; else if ((si->ntDir * si->sDir) == 0.0) allOK = false; si->ntDir.Normalize(); } else { si->ntDir = si->sDir; } si->ntPlane.Init(ttp[sXMin], si->ntDir); for(i = 0; i < 8; i++) { allOK = allOK && si->ntPlane.CalcIntersection(si->fp[i], si->tp[i], si->ntp[i]); } if (si->tType == LXPE_CONT) { si->tXMin = sXMin; si->tDist = (si->tp[7 - sXMin].p - si->t).Length(); if (!allOK) { si->tType = LXPE_ROUND; } } // spocitajme fPlane allOK = true; sPlane.Init(si->f, si->sDir); for(i = 0; i < 8; i++) { allOK = allOK && (si->fPlane.CalcIntersection(si->tp[i], si->fp[i], ffp[i])); sDistCur = sPlane.CalcPosition(ffp[i]); if (i == 0) { sDistMax = sDistCur; sXMax = 0; sDistMin = sDistCur; sXMin = 0; } else { if (sDistCur > sDistMax) { sDistMax = sDistCur; sXMax = i; } if (sDistCur < sDistMin) { sDistMin = sDistCur; sXMin = i; } } } if (sXMax != sXMin) { nsDir = ffp[sXMax] - si->fp[sXMin]; if (nsDir.Norm() > 0) nsDir.Normalize(); else allOK = false; si->nfDir = nsDir ^ si->fDir; si->nfDir = nsDir ^ si->nfDir; if ((si->nfDir * si->sDir) < 0) si->nfDir *= -1.0; else if ((si->nfDir * si->sDir) == 0.0) allOK = false; si->nfDir.Normalize(); } else { si->nfDir = si->sDir; } si->nfPlane.Init(ffp[sXMax], si->nfDir); for(i = 0; i < 8; i++) { allOK = allOK && si->nfPlane.CalcIntersection(si->tp[i], si->fp[i], si->nfp[i]); } if (si->fType == LXPE_CONT) { si->fXMin = sXMax; si->fDist = (si->fp[7 - sXMax].p - si->f).Length(); if (!allOK) { si->fType = LXPE_ROUND; } } } for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if ((si->fType == LXPE_ROUND) && (si->prev != NULL)) { si->prev->tType = LXPE_ROUND; } if ((si->tType == LXPE_ROUND) && (si->next != NULL)) { si->next->fType = LXPE_ROUND; } } for(si = series.begin(); si != series.end(); si++) { // teraz nastavime body tak, ako ich mame vo vystupe allOK = false; while (((si->tType == LXPE_CONT) || (si->fType == LXPE_CONT)) && (!allOK)) { // 1. Nastavime body for(i = 0; i < 8; i++) { if (si->fType == LXPE_CONT) ffp[i] = si->nfp[i]; else ffp[i] = si->fp[i]; if (si->tType == LXPE_CONT) ttp[i] = si->ntp[i]; else ttp[i] = si->tp[i]; } // 2. Skontrolujeme ci sedia smery a to, ci body nelezia mimo // koncovych rovin allOK = true; for (i = 0; i < 8; i++) { if (((ttp[i] - ffp[i]) * si->ft) < 0.0) { allOK = false; break; } } if (!allOK) { if ((si->fType == LXPE_CONT) && (si->tType == LXPE_CONT)) { if ((si->sDir * si->nfDir) < (si->sDir * si->ntDir)) { si->fType = LXPE_ROUND; si->prev->tType = LXPE_ROUND; } else { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } else if (si->fType == LXPE_CONT) { si->fType = LXPE_ROUND; si->prev->tType = LXPE_ROUND; } else if (si->tType == LXPE_CONT) { si->tType = LXPE_ROUND; si->next->fType = LXPE_ROUND; } } } // koniec checkovania } // calculate points for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { si->tp[i] = si->ntp[i]; } } if (si->fType == LXPE_CONT) { for(i = 0; i < 8; i++) { si->fp[i] = si->nfp[i]; } } } // if points are too close to each other, reduce geometry double avDist; int ti, fi; for(si = series.begin(); si != series.end(); si++) { if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; avDist = (si->tp[ti].p - si->tp[(ti + 7) % 8].p).Length() + (si->tp[ti].p - si->tp[(ti + 1) % 8].p).Length(); avDist += (si->next->fp[fi].p - si->next->fp[(fi + 7) % 8].p).Length() + (si->next->fp[fi].p - si->next->fp[(fi + 1) % 8].p).Length(); avDist *= 0.25; if ((avDist > 0.0) && ((si->next->fp[fi].p - si->tp[ti].p).Length() / avDist < 0.25)) { si->tp[ti].p = 0.5 * (si->next->fp[fi].p + si->tp[ti].p); si->next->fp[fi].p = si->tp[ti].p; } } } } // calculate normals for(si = series.begin(); si != series.end(); si++) { psi = &(*si); for(i = 0; i < 8; i++) { si->tp[i].n = lxCalcNormal4(si->tp[(i + 1) % 8].p, si->fp[i].p, si->tp[(i + 7) % 8].p, si->tp[i].p); si->fp[i].n = lxCalcNormal4(si->fp[(i + 7) % 8].p, si->tp[i].p, si->fp[(i + 1) % 8].p, si->fp[i].p); } } lxVec nnorm; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; nnorm = si->tp[i].n + si->next->fp[i].n; nnorm.Normalize(); si->tp[i].n = nnorm; si->next->fp[i].n = nnorm; } } } // insert geometry // COUNTER NEEDED lxTriGeom so; for(si = series.begin(); si != series.end(); si++) { psi = &(*si); if (si->fType != LXPE_CONT) { this->o.Append(&so); so.Clear(); } si->fp[8].p = lxVec(0.0, 0.0, 0.0); si->tp[8].p = lxVec(0.0, 0.0, 0.0); for(i = 0; i < 8; i++) { si->fp[8].p += si->fp[i]; si->tp[8].p += si->tp[i]; } si->fp[8].p *= 0.125; si->fp[8].n = -1.0 * si->sDir; si->tp[8].p *= 0.125; si->tp[8].n = si->sDir; double dl; lxTriGeomPoint ddt, ddp[8]; double diam; switch (si->tType) { case LXPE_ROUND: //if (si->tDist <= 0.0) { diam = (si->tp[0].p - si->tp[8].p).Length(); for(i = 1; i < 8; i++) { dl = (si->tp[i].p - si->tp[8].p).Length(); if (diam > dl) diam = dl; } //} else { // diam = si->tDist; //} ddt = si->tp[8].p + diam * si->sDir; ddt.n = si->tp[8].n; for (i = 0; i < 8; i++) { ddp[i] = si->tp[8] + 0.70710678 * (si->tp[i] - si->tp[8]) + 0.70710678 * diam * si->sDir; } for (i = 0; i < 8; i++) { nnorm = lxCalcNormal4(si->tp[(i + 7) % 8].p, ddp[i].p, si->tp[(i + 1) % 8].p, si->tp[i].p); nnorm += si->tp[i].n; nnorm.Normalize(); si->tp[i].n = nnorm; ddp[i].n = lxCalcNormal5(ddp[(i+1) % 8], si->tp[i], ddp[(i+7) % 8], ddt, ddp[i]); } for (i = 0; i < 8; i++) { so.Insert3Angle(ddt, ddp[i], ddp[(i + 1) % 8]); so.Insert4Angle(ddp[i], si->tp[i], ddp[(i + 1) % 8], si->tp[(i + 1) % 8]); } break; case LXPE_FLAT: for(i = 0; i < 8; i++) { ddp[i].p = si->tp[i].p; ddp[i].n = si->tp[8].n; } for(i = 0; i < 8; i++) { so.Insert3Angle(si->tp[8], ddp[i], ddp[(i + 1) % 8]); } break; } switch (si->fType) { case LXPE_ROUND: //if (si->fDist <= 0.0) { diam = (si->fp[0].p - si->fp[8].p).Length(); for(i = 1; i < 8; i++) { dl = (si->fp[i].p - si->fp[8].p).Length(); if (diam > dl) diam = dl; } //} else { // diam = si->fDist; //} ddt = si->fp[8].p - diam * si->sDir; ddt.n = si->fp[8].n; for (i = 0; i < 8; i++) { ddp[i].n = ddp[i].p - si->fp[8].p; ddp[i].n.Normalize(); } for (i = 0; i < 8; i++) { ddp[i] = si->fp[8] + 0.70710678 * (si->fp[i] - si->fp[8]) - 0.70710678 * diam * si->sDir; } for (i = 0; i < 8; i++) { nnorm = lxCalcNormal4(si->fp[(i + 1) % 8].p, ddp[i].p, si->fp[(i + 7) % 8].p, si->fp[i].p); nnorm += si->fp[i].n; nnorm.Normalize(); si->fp[i].n = nnorm; ddp[i].n = lxCalcNormal5(ddp[(i+1) % 8], ddt, ddp[(i+7) % 8], si->fp[i], ddp[i]); } for (i = 0; i < 8; i++) { so.Insert3Angle(ddt, ddp[(i + 1) % 8], ddp[i]); so.Insert4Angle(si->fp[i], ddp[i], si->fp[(i + 1) % 8], ddp[(i + 1) % 8]); } break; case LXPE_FLAT: for(i = 0; i < 8; i++) { ddp[i].p = si->fp[i].p; ddp[i].n = si->fp[8].n; } for(i = 0; i < 8; i++) { so.Insert3Angle(si->fp[8], ddp[(i + 1) % 8], ddp[i]); } break; } if (si->tType == LXPE_CONT) { for(i = 0; i < 8; i++) { ti = (i + si->tXMin) % 8; fi = (i + si->next->fXMin) % 8; so.Insert4Angle(si->next->fp[fi], si->tp[ti], si->next->fp[(fi + 1) % 8], si->tp[(ti + 1) % 8]); } } for(i = 0; i < 8; i++) { so.Insert4Angle(si->tp[i], si->fp[i], si->tp[(i + 1) % 8], si->fp[(i + 1) % 8]); } } this->o.Append(&so); delete [] edges; delete [] nodes; //size_t nT = this->o.GetNTriangles(); //size_t nP = this->o.GetNPoints(); } long lxLRUD::GetPointsN() { return long(this->o.GetNPoints()); } void lxLRUD::GetPoint(long idx, double * coord, double * norm) { lxTriGeomPoint pt = this->o.GetPoint(idx); coord[0] = pt.p.x; coord[1] = pt.p.y; coord[2] = pt.p.z; norm[0] = pt.n.x; norm[1] = pt.n.y; norm[2] = pt.n.z; } long lxLRUD::GetTrianglesN() { return long(this->o.GetNTriangles()); } void lxLRUD::GetTriangle(long idx, long * vertices) { lxTriGeom3Angle tg = this->o.GetTriangle(idx); vertices[0] = long(tg.v1); vertices[1] = long(tg.v2); vertices[2] = long(tg.v3); } therion-5.4.1/loch/lxLRUD.h000066400000000000000000000021321307545355600154140ustar00rootroot00000000000000#ifndef lxLRUD_h #define lxLRUD_h // Standard libraries #ifndef LXDEPCHECK #endif //LXDEPCHECK - standard libraries #include "lxMath.h" enum { LXLRUD_OCTAGON, LXLRUD_TUNNEL, LXLRUD_DIAMOND, LXLRUD_SQUARE, }; struct lxLRUDShot { lxVec from, to; long xfrom, xto; int profile; double fl, fr, fu, fd, tl, tr, tu, td, vthresh; void * usr_data; lxLRUDShot() : profile(LXLRUD_OCTAGON), vthresh(60.0) {} }; struct lxLRUDData { long nstations; std::list shots; std::map station_map; double currentVT; int currentProfile; lxLRUDData() : nstations(0), currentVT(60.0), currentProfile(LXLRUD_OCTAGON) {} long GetStationID(lxVec pos, bool insert = false); }; struct lxLRUD { lxLRUDData i; lxTriGeom o; void SetVThreshold(double vt); void SetProfile(int sec_type); void InsertShot(double * from, double * to, double * fromLRUD, double * toLRUD, void * usrData); void Calculate(); long GetPointsN(); void GetPoint(long idx, double * coord, double * norm); long GetTrianglesN(); void GetTriangle(long idx, long * vertices); }; #endif therion-5.4.1/loch/lxMath.cxx000066400000000000000000000225041307545355600161170ustar00rootroot00000000000000/** * @file lxMath.cxx * Loch math implementation. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxMath.h" void lxVec::Normalize() { double n = this->Length(); if (n > 0.0) { this->x /= n; this->y /= n; this->z /= n; } } double lxVec::Norm() { return (this->x * this->x + this->y * this->y + this->z * this->z); } double lxVec::Length() { return sqrt(this->x * this->x + this->y * this->y + this->z * this->z); } double lxVec::Azimuth() { return atan2(this->x, this->y) / lxPI * 180.0; } double lxVec::Inclination() { return atan2(this->z, sqrt(this->x * this->x + this->y * this->y)) / lxPI * 180.0; } lxVec operator + ( const lxVec& p, const lxVec& q ) { return lxVec(p.x + q.x, p.y + q.y, p.z + q.z); } lxVec operator - ( const lxVec& p, const lxVec& q ) { return lxVec(p.x - q.x, p.y - q.y, p.z - q.z); } double operator * ( const lxVec& p, const lxVec& q ) { return (p.x * q.x + p.y * q.y + p.z * q.z); } lxVec operator * ( const double& c, const lxVec& q ) { return lxVec(c * q.x, c * q.y, c * q.z); } lxVec operator / ( const lxVec& p, const double& c) { return (c != 0.0 ? lxVec(p.x / c, p.y / c, p.z / c) : lxVec()); } lxVec operator ^ ( const lxVec& p, const lxVec& q ) { return lxVec(p.y * q.z - p.z * q.y, p.z * q.x - p.x * q.z, p.x * q.y - p.y * q.x); } void lxVecLimits::Add(double a, double b, double c) { #define lxVecLimAddSet(par) this->par = lxVec(a, b, c) if (this->valid) { if (this->min.x > a) { this->min.x = a; lxVecLimAddSet(xmin); } if (this->max.x < a) { this->max.x = a; lxVecLimAddSet(xmax); } if (this->min.y > b) { this->min.y = b; lxVecLimAddSet(ymin); } if (this->max.y < b) { this->max.y = b; lxVecLimAddSet(xmax); } if (this->min.z > c) { this->min.z = c; lxVecLimAddSet(zmin); } if (this->max.z < c) { this->max.z = c; lxVecLimAddSet(zmax); } } else { lxVecLimAddSet(min); lxVecLimAddSet(max); lxVecLimAddSet(xmin); lxVecLimAddSet(xmax); lxVecLimAddSet(ymin); lxVecLimAddSet(ymax); lxVecLimAddSet(zmin); lxVecLimAddSet(zmax); this->valid = true; } } lxVec lxPol2Vec(const double l, const double a, const double i) { return lxVec( l * cos(i / 180.0 * lxPI) * sin(a / 180.0 * lxPI), l * cos(i / 180.0 * lxPI) * cos(a / 180.0 * lxPI), l * sin(i / 180.0 * lxPI) ); } lxVec lxVec::Rotated(double a, double i) { double sa = sin(a / 180.0 * lxPI), ca = cos(a / 180.0 * lxPI), si = sin(i / 180.0 * lxPI), ci = cos(i / 180.0 * lxPI); return lxVec( this->x * ca - this->y * sa , this->x * ci * sa + this->y * ca * ci - this->z * si, this->x * si * sa + this->y * si * ca + this->z * ci ); } lxVec lxVecLimits::Vertex(int v) { switch (v) { case 0: return this->min; case 1: return lxVec(this->max.x, this->min.y, this->min.z); case 2: return lxVec(this->max.x, this->max.y, this->min.z); case 3: return lxVec(this->min.x, this->max.y, this->min.z); case 4: return lxVec(this->min.x, this->min.y, this->max.z); case 5: return lxVec(this->max.x, this->min.y, this->max.z); case 6: return this->max; default: return lxVec(this->min.x, this->max.y, this->max.z); } } lxVecLimits lxVecLimits::Rotate(double a, double i, lxVec c) { lxVecLimits result; lxVec mymin = this->min - c; lxVec mymax = this->max - c; result.Add(mymin.Rotated(a,i)); result.Add(lxVec(mymin.x, mymin.y, mymax.z).Rotated(a,i)); result.Add(lxVec(mymin.x, mymax.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymin.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymin.y, mymax.z).Rotated(a,i)); result.Add(lxVec(mymax.x, mymax.y, mymin.z).Rotated(a,i)); result.Add(lxVec(mymin.x, mymax.y, mymax.z).Rotated(a,i)); result.Add(mymax.Rotated(a,i)); return result; } lxVec lxVec::operator += ( const lxVec& v) { *this = lxVec(this->x + v.x, this->y + v.y, this->z + v.z); return *this; } lxVec lxVec::operator -= ( const lxVec& v) { *this = lxVec(this->x - v.x, this->y - v.y, this->z - v.z); return *this; } lxVec lxVec::operator *= ( const double& c) { *this = lxVec(this->x * c, this->y * c, this->z * c); return *this; } lxVec lxVec::operator /= ( const double& c) { *this = lxVec(this->x / c, this->y / c, this->z / c); return *this; } bool operator < (const struct lxVec & p, const struct lxVec & q) { if (p.x < q.x) return true; if (p.x > q.x) return false; if (p.y < q.y) return true; if (p.y > q.y) return false; if (p.z < q.z) return true; return false; } bool operator == ( const lxVec& p, const lxVec& q ) { if ((!(p < q)) && (!(q < p))) return true; else return false; } bool operator != ( const lxVec& p, const lxVec& q ) { return !(p == q); } bool operator < ( const lxTriGeomPoint& p, const lxTriGeomPoint& q ) { if (p.p < q.p) return true; if (q.p < p.p) return false; if (p.n < q.n) return true; else return false; } void lxVecLimits::Add(lxVec v) { this->Add(lxVecXYZ(v)); } lxVec lxVecAbs(lxVec v) { return lxVec(fabs(v.x), fabs(v.y), fabs(v.z)); } size_t lxTriGeom::InsertPoint(lxTriGeomPoint p) { size_t rv; std::map::iterator i; i = this->m_points.find(p); if (i == this->m_points.end()) { rv = this->m_nPoints; this->m_positions.push_back(p); this->m_nPoints++; this->m_points[p] = rv; } else { rv = i->second; } return rv; } void lxTriGeom::Clear() { this->m_nPoints = 0; this->m_points.clear(); this->m_positions.clear(); this->m_triangles.clear(); this->m_geometry.clear(); } lxTriGeom3Angle::lxTriGeom3Angle(size_t vv1, size_t vv2, size_t vv3) { this->v1 = vv1; this->v2 = vv2; this->v3 = vv3; } bool lxTriGeom::Insert3Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3) { size_t v1, v2, v3; v1 = this->InsertPoint(p1); v2 = this->InsertPoint(p2); v3 = this->InsertPoint(p3); if ((p1.p != p2.p) && (p2.p != p3.p) && (p1.p != p3.p)) { this->m_triangles.push_back(lxTriGeom3Angle(v1, v2, v3)); return true; } else { return false; } } bool lxTriGeom::Insert4Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3, lxTriGeomPoint p4) { bool i1, i2; i1 = this->Insert3Angle(p1, p2, p3); i2 = this->Insert3Angle(p4, p3, p2); return (i1 && i2); } size_t lxTriGeom::GetNPoints() { return this->m_nPoints; } lxTriGeomPoint lxTriGeom::GetPoint(size_t i) { return this->m_positions[i]; } size_t lxTriGeom::GetNTriangles() { this->m_geometry.clear(); std::list::iterator i; for(i = this->m_triangles.begin(); i != this->m_triangles.end(); i++) { this->m_geometry.push_back(*i); } return this->m_geometry.size(); } lxTriGeom3Angle lxTriGeom::GetTriangle(size_t i) { return this->m_geometry[i]; } void lxPlane::Init(lxVec pt, lxVec norm) { norm.Normalize(); this->m_normal = norm; this->m_point = pt; this->m_delta = -1.0 * (this->m_normal * this->m_point); } double lxPlane::CalcPosition(lxVec pt) { return (pt * this->m_normal + this->m_delta); } bool lxPlane::CalcIntersection(lxVec fp, lxVec tp, lxVec & tgt) { lxVec d = (tp - fp); double y = (this->m_normal * d); if (y == 0.0) return false; else { y = ((this->m_normal * fp + this->m_delta) / y); tgt = fp - y * d; if (y > 0.0) return false; else return true; } } void lxTriGeom::Append(lxTriGeom * src) { lxTriGeomPoint pp; lxTriGeom3Angle tt; size_t sn, sx, i; sn = src->GetNPoints(); sx = this->m_nPoints; for(i = 0; i < sn; i++) { pp = src->GetPoint(i); this->m_nPoints++; this->m_positions.push_back(pp); this->m_points[pp] = sx + i; } sn = src->GetNTriangles(); for(i = 0; i < sn; i++) { tt = src->GetTriangle(i); tt.v1 += sx; tt.v2 += sx; tt.v3 += sx; this->m_triangles.push_back(tt); } } lxVec lxCalcNormal4(lxVec v1, lxVec v2, lxVec v3, lxVec vN) { v1 = vN - v1; v2 = vN - v2; v3 = vN - v3; v1 = v1 ^ (-1.0 * v2); v3 = v3 ^ v2; v1.Normalize(); v3.Normalize(); vN = v1 + v3; vN.Normalize(); return vN; } lxVec lxCalcNormal5(lxVec v1, lxVec v2, lxVec v3, lxVec v4, lxVec vN) { v2 = lxCalcNormal4(v1, v2, v3, vN); v4 = lxCalcNormal4(v3, v4, v1, vN); vN = v2 + v4; vN.Normalize(); return vN; } therion-5.4.1/loch/lxMath.h000066400000000000000000000101571307545355600155450ustar00rootroot00000000000000/** * @file lxMath.h * Loch mathematics module. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef lxMath_h #define lxMath_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #endif //LXDEPCHECK - standard libraries #define lxPI 3.1415926535898 struct lxVec { double x, y, z; lxVec() : x(0.0), y(0.0), z(0.0) {}; lxVec(double a, double b, double c) : x(a), y(b), z(c) {}; double Length(); double Azimuth(); double Inclination(); double Norm(); void Normalize(); lxVec operator += ( const lxVec& v); lxVec operator -= ( const lxVec& v); lxVec operator *= ( const double& c); lxVec operator /= ( const double& c); lxVec Rotated(double a, double i); }; lxVec operator + ( const lxVec& p, const lxVec& q ); lxVec operator - ( const lxVec& p, const lxVec& q ); double operator * ( const lxVec& p, const lxVec& q ); lxVec operator * ( const double& c, const lxVec& q ); lxVec operator / ( const lxVec& p, const double& c); lxVec operator ^ ( const lxVec& p, const lxVec& q ); bool operator < ( const lxVec& p, const lxVec& q ); bool operator == ( const lxVec& p, const lxVec& q ); bool operator != ( const lxVec& p, const lxVec& q ); lxVec lxPol2Vec(const double l, const double a, const double i); lxVec lxVecAbs(lxVec v); lxVec lxCalcNormal4(lxVec v1, lxVec v2, lxVec v3, lxVec vN); lxVec lxCalcNormal5(lxVec v1, lxVec v2, lxVec v3, lxVec v4, lxVec vN); struct lxVecLimits { lxVec min, max, xmin, xmax, ymin, ymax, zmin, zmax; bool valid; lxVecLimits() : valid(false) {}; void Add(double a, double b, double c); void Add(lxVec v); lxVecLimits Rotate(double a, double i, lxVec c); lxVec Vertex(int v); }; struct lxTriGeomPoint { lxVec p, n; operator lxVec & () {return this->p;} const lxVec & operator = (const lxVec q) {this->p = q; return this->p;} }; bool operator < ( const lxTriGeomPoint& p, const lxTriGeomPoint& q ); struct lxTriGeom3Angle { size_t v1, v2, v3; lxTriGeom3Angle() : v1(0), v2(0), v3(0) {} lxTriGeom3Angle(size_t vv1, size_t vv2, size_t vv3); }; struct lxTriGeom { size_t m_nPoints; std::map m_points; std::vector m_positions; std::list m_triangles; std::vector m_geometry; void Clear(); void Append(lxTriGeom * src); size_t InsertPoint(lxTriGeomPoint p); bool Insert3Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3); bool Insert4Angle(lxTriGeomPoint p1, lxTriGeomPoint p2, lxTriGeomPoint p3, lxTriGeomPoint p4); size_t GetNPoints(); lxTriGeomPoint GetPoint(size_t i); size_t GetNTriangles(); lxTriGeom3Angle GetTriangle(size_t i); lxTriGeom() : m_nPoints(0) {} }; struct lxPlane { lxVec m_point, m_normal; double m_delta; void Init(lxVec pt, lxVec norm); double CalcPosition(lxVec pt); bool CalcIntersection(lxVec fp, lxVec tp, lxVec & tgt); }; #define lxVecXYZ(vec) (vec).x, (vec).y, (vec).z #define lxMax(a,b) ((a) > (b) ? (a) : (b)) #define lxMin(a,b) ((a) < (b) ? (a) : (b)) #define lxShiftVecPXYZ(v,s) ((v)->x - (s).x), ((v)->y - (s).y), ((v)->z - (s).z) #define lxShiftVecXYZ(v,s) ((v).x - (s).x), ((v).y - (s).y), ((v).z - (s).z) #define lxShiftVecX3(v,s) (v[0] - (s).x), (v[1] - (s).y), (v[2] - (s).z) #endif therion-5.4.1/loch/lxOGLFT.cxx000066400000000000000000003144251307545355600161070ustar00rootroot00000000000000/* * OGLFT: A library for drawing text with OpenGL using the FreeType library * Copyright (C) 2002 lignum Computing, Inc. * $Id: OGLFT.cpp,v 1.11 2003/10/01 14:21:18 allen Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include #include #define OGLFT_NO_SOLID #include "lxOGLFT.h" namespace OGLFT { // This is the static instance of the FreeType library wrapper ... Library Library::library; // ... and this is the FreeType library handle itself. FT_Library Library::library_; // The static instance above causes this constructor to be called // when the object module is loaded. Library::Library ( void ) { FT_Error error = FT_Init_FreeType( &library_ ); if ( error != 0 ) { std::cerr << "Could not initialize the FreeType library. Exiting." << std::endl; exit( 1 ); } } Library::~Library ( void ) { FT_Error error = FT_Done_FreeType( library_ ); if ( error != 0 ) { std::cerr << "Could not terminate the FreeType library." << std::endl; } } // Return the only instance in the process FT_Library& Library::instance ( void ) { return library_; } // Load a new face Face::Face ( const char* filename, float point_size, FT_UInt resolution ) : point_size_( point_size ), resolution_( resolution ) { valid_ = true; // Assume the best :-) FT_Face ft_face; FT_Error error = FT_New_Face( Library::instance(), filename, 0, &ft_face ); if ( error != 0 ) { valid_ = false; return; } // As of FreeType 2.1: only a UNICODE charmap is automatically activated. // If no charmap is activated automatically, just use the first one. if ( ft_face->charmap == 0 && ft_face->num_charmaps > 0 ) FT_Select_Charmap( ft_face, ft_face->charmaps[0]->encoding ); faces_.push_back( FaceData( ft_face ) ); init(); } // Go with a face that the user has already opened. Face::Face ( FT_Face face, float point_size, FT_UInt resolution ) : point_size_( point_size ), resolution_( resolution ) { valid_ = true; // As of FreeType 2.1: only a UNICODE charmap is automatically activated. // If no charmap is activated automatically, just use the first one. if ( face->charmap == 0 && face->num_charmaps > 0 ) FT_Select_Charmap( face, face->charmaps[0]->encoding ); faces_.push_back( FaceData( face, false ) ); init(); } // Standard initialization behavior once the font file is opened. void Face::init ( void ) { // By default, each glyph is compiled into a display list the first // time it is encountered compile_mode_ = COMPILE; // By default, all drawing is wrapped with push/pop matrix so that the // MODELVIEW matrix is not modified. If advance_ is set, then subsequent // drawings follow from the advance of the last glyph rendered. advance_ = false; // Initialize the default colors foreground_color_[R] = 0.; foreground_color_[G] = 0.; foreground_color_[B] = 0.; foreground_color_[A] = 1.; background_color_[R] = 1.; background_color_[G] = 1.; background_color_[B] = 1.; background_color_[A] = 0.; // The default positioning of the text is at the origin of the first glyph horizontal_justification_ = ORIGIN; vertical_justification_ = BASELINE; // By default, strings are rendered in their nominal direction string_rotation_ = 0; // setCharacterRotationReference calls the virtual function clearCaches() // so it is up to a subclass to set the real default rotation_reference_glyph_ = 0; rotation_reference_face_ = 0; rotation_offset_y_ = 0.; } Face::~Face ( void ) { for ( unsigned int i = 0; i < faces_.size(); i++ ) if ( faces_[i].free_on_exit_ ) FT_Done_Face( faces_[i].face_ ); } // Add another Face to select characters from bool Face::addAuxiliaryFace ( const char* filename ) { FT_Face ft_face; FT_Error error = FT_New_Face( Library::instance(), filename, 0, &ft_face ); if ( error != 0 ) return false; faces_.push_back( FaceData( ft_face ) ); setCharSize(); return true; } // Add another Face to select characters from bool Face::addAuxiliaryFace ( FT_Face face ) { faces_.push_back( FaceData( face, false ) ); setCharSize(); return true; } // Note: Changing the point size also clears the display list cache void Face::setPointSize ( float point_size ) { if ( point_size != point_size_ ) { point_size_ = point_size; clearCaches(); setCharSize(); } } // Note: Changing the resolution also clears the display list cache void Face::setResolution ( FT_UInt resolution ) { if ( resolution != resolution_ ) { resolution_ = resolution; clearCaches(); setCharSize(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) { if ( background_color_[R] != red || background_color_[G] != green || background_color_[B] != blue || background_color_[A] != alpha ) { background_color_[R] = red; background_color_[G] = green; background_color_[B] = blue; background_color_[A] = alpha; clearCaches(); } } // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) { if ( foreground_color_[R] != red || foreground_color_[G] != green || foreground_color_[B] != blue || foreground_color_[A] != alpha ) { foreground_color_[R] = red; foreground_color_[G] = green; foreground_color_[B] = blue; foreground_color_[A] = alpha; clearCaches(); } } // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( const GLfloat foreground_color[4] ) { if ( foreground_color_[R] != foreground_color[R] || foreground_color_[G] != foreground_color[G] || foreground_color_[B] != foreground_color[B] || foreground_color_[A] != foreground_color[A] ) { foreground_color_[R] = foreground_color[R]; foreground_color_[G] = foreground_color[G]; foreground_color_[B] = foreground_color[B]; foreground_color_[A] = foreground_color[A]; clearCaches(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( const GLfloat background_color[4] ) { if ( background_color_[R] != background_color[R] || background_color_[G] != background_color[G] || background_color_[B] != background_color[B] || background_color_[A] != background_color[A] ) { background_color_[R] = background_color[R]; background_color_[G] = background_color[G]; background_color_[B] = background_color[B]; background_color_[A] = background_color[A]; clearCaches(); } } #ifndef OGLFT_NO_WX // Note: Changing the foreground color also clears the display list cache. void Face::setForegroundColor ( const wxColour foreground_rgba ) { GLfloat foreground_color[4]; foreground_color[R] = foreground_rgba.Red() / 255.; foreground_color[G] = foreground_rgba.Green() / 255.; foreground_color[B] = foreground_rgba.Blue() / 255.; foreground_color[A] = 1.0; if ( foreground_color_[R] != foreground_color[R] || foreground_color_[G] != foreground_color[G] || foreground_color_[B] != foreground_color[B] || foreground_color_[A] != foreground_color[A] ) { foreground_color_[R] = foreground_color[R]; foreground_color_[G] = foreground_color[G]; foreground_color_[B] = foreground_color[B]; foreground_color_[A] = foreground_color[A]; clearCaches(); } } // Note: Changing the background color also clears the display list cache. void Face::setBackgroundColor ( const wxColour background_rgba ) { GLfloat background_color[4]; background_color[R] = background_rgba.Red() / 255.; background_color[G] = background_rgba.Green() / 255.; background_color[B] = background_rgba.Blue() / 255.; background_color[A] = 1.0; if ( background_color_[R] != background_color[R] || background_color_[G] != background_color[G] || background_color_[B] != background_color[B] || background_color_[A] != background_color[A] ) { background_color_[R] = background_color[R]; background_color_[G] = background_color[G]; background_color_[B] = background_color[B]; background_color_[A] = background_color[A]; clearCaches(); } } #endif /* OGLFT_NO_WX */ // Note: Changing the string rotation angle clears the display list cache void Face::setStringRotation ( GLfloat string_rotation ) { if ( string_rotation != string_rotation_ ) { string_rotation_ = string_rotation; clearCaches(); // Note that this affects ALL glyphs accessed through // the Face, both the vector and the raster glyphs. Very nice! if ( string_rotation_ != 0. ) { float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int i = 0; i < faces_.size(); i++ ) FT_Set_Transform( faces_[i].face_, &rotation_matrix, 0 ); } else for ( unsigned int i = 0; i < faces_.size(); i++ ) FT_Set_Transform( faces_[i].face_, 0, 0 ); } } // Note: Changing the rotation reference character clears the display list cache. void Face::setCharacterRotationReference ( unsigned char c ) { unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( f < faces_.size() && glyph_index != rotation_reference_glyph_ ) { FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; rotation_reference_glyph_ = glyph_index; rotation_reference_face_ = faces_[f].face_; setRotationOffset(); clearCaches(); } } BBox Face::measure ( const char* s ) { BBox bbox; unsigned char c; if ( ( c = *s++ ) != 0 ) { bbox = measure( c ); for ( c = *s; c != 0; c = *++s ) { BBox char_bbox = measure( c ); bbox += char_bbox; } } return bbox; } BBox Face::measureRaw ( const char* s ) { BBox bbox; for ( char c = *s; c != 0; c = *++s ) { BBox char_bbox; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) continue; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) continue; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) continue; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); char_bbox = ft_bbox; char_bbox.advance_ = faces_[f].face_->glyph->advance; bbox += char_bbox; } return bbox; } #ifndef OGLFT_NO_WX BBox Face::measure ( const wxString& s ) { BBox bbox; if ( s.length() > 0 ) { bbox = measure( (const wxChar) s.GetChar( 0 ) ); for ( unsigned int i = 1; i < s.length(); i++ ) { BBox char_bbox = measure( (const wxChar) s.GetChar( i ) ); bbox += char_bbox; } } return bbox; } BBox Face::measure ( const wxString& format, double number ) { return measure( format_number( format, number ) ); } BBox Face::measureRaw ( const wxString& s ) { BBox bbox; for ( unsigned int i = 0; i < s.length(); i++ ) { BBox char_bbox; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, s.GetChar( i ) ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) { continue; } FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) continue; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) continue; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); char_bbox = ft_bbox; char_bbox.advance_ = faces_[f].face_->glyph->advance; bbox += char_bbox; } return bbox; } #endif /* OGLFT_NO_WX */ // Measure the bounding box as if the (latin1) string were not rotated BBox Face::measure_nominal ( const char* s ) { if ( string_rotation_ == 0. ) return measure( s ); for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); BBox bbox = measure( s ); float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); return bbox; } #ifndef OGLFT_NO_WX // Measure the bounding box as if the (UNICODE) string were not rotated BBox Face::measure_nominal ( const wxString& s ) { if ( string_rotation_ == 0. ) return measure( s ); for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); BBox bbox = measure( s ); float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); return bbox; } // Format the number per the given format. Mostly pointless // for the standard formats, e.g. %12e. You can use the regular // Qt functions to format such a string and avoid the parsing // which is done here. wxString Face::format_number ( const wxString& format, double number ) { return wxString::Format(format, number); } #endif /* OGLFT_NO_WX */ // Compile a (latin1) string into a display list GLuint Face::compile ( const char* s ) { // First, make sure all the characters in the string are themselves // in display lists const char* s_tmp = s; unsigned char c; for ( c = *s_tmp; c != 0; c = *++s_tmp ) { compile( c ); } GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); if ( !advance_ ) glPushMatrix(); draw( s ); if ( !advance_ ) glPopMatrix(); glEndList(); return dlist; } #ifndef OGLFT_NO_WX // Compile a (UNICODE) string into a display list GLuint Face::compile ( const wxString& s ) { // First, make sure all the characters in the string are themselves // in display lists for ( unsigned int i = 0; i < s.length(); i++ ) { compile( (const wxChar) s.GetChar( i ) ); } GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); if ( !advance_ ) glPushMatrix(); draw( s ); if ( !advance_ ) glPopMatrix(); glEndList(); return dlist; } #endif /* OGLFT_NO_WX */ // Compile a (latin1) character glyph into a display list and cache // it for later GLuint Face::compile ( unsigned char c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end() ) return fgi->second; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return 0; GLuint dlist = compileGlyph( faces_[f].face_, glyph_index ); glyph_dlists_[ c ] = dlist; return dlist; } #ifndef OGLFT_NO_WX // Compile a (UNICODE) character glyph into a display list and cache // it for later GLuint Face::compile ( const wxChar c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end() ) return fgi->second; unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return 0; GLuint dlist = compileGlyph( faces_[f].face_, glyph_index ); glyph_dlists_[ c ] = dlist; return dlist; } #endif /* OGLFT_NO_WX */ // Assume the MODELVIEW matrix is already set and draw the (latin1) // string. Note: this routine now ignores almost all settings: // including the position (both modelview and raster), color, // justification and advance settings. Consider this to be the raw // drawing routine for which you are responsible for most of the // setup. void Face::draw ( const char* s ) { DLCI character_display_list = character_display_lists_.begin(); unsigned char c; for (c = *s; c != 0; c = *++s ) { if ( character_display_list != character_display_lists_.end() ) { glCallList( *character_display_list ); character_display_list++; } draw( c ); } } #ifndef OGLFT_NO_WX // Assume the MODELVIEW matrix is already set and draw the (UNICODE) // string. Note: this routine now ignores almost all settings: // including the position (both modelview and raster), color, // justification and advance settings. Consider this to be the raw // drawing routine for which you are responsible for most of the // setup. void Face::draw ( const wxString& s ) { DLCI character_display_list = character_display_lists_.begin(); for ( unsigned int i = 0; i < s.length(); i++ ) { if ( character_display_list != character_display_lists_.end() ) { glCallList( *character_display_list ); character_display_list++; } draw( (const wxChar) s.GetChar( i ) ); } } #endif /* OGLFT_NO_WX */ // Assume the MODELVIEW matrix is already setup and draw the // (latin1) character. void Face::draw ( unsigned char c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end( ) ) { glCallList( fgi->second ); return; } unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return; // Otherwise, either compile it (and call it) or ... else if ( compile_mode_ == COMPILE ) { GLuint dlist = compile( c ); glCallList( dlist ); } // ... render it immediately else { renderGlyph( faces_[f].face_, glyph_index ); } } #ifndef OGLFT_NO_WX // Assume the MODELVIEW matrix is already setup and draw the // (UNICODE) character. void Face::draw ( const wxChar c ) { // See if we've done it already GDLCI fgi = glyph_dlists_.find( c ); if ( fgi != glyph_dlists_.end( ) ) { glCallList( fgi->second ); return; } unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) { break; } } if ( glyph_index == 0 ) return; // Otherwise, either compile it (and call it) or ... if ( compile_mode_ == COMPILE ) { GLuint dlist = compile( c ); glCallList( dlist ); } // ... render it immediately else { renderGlyph( faces_[f].face_, glyph_index ); } } #endif /* OGLFT_NO_WX */ // Draw the (latin1) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, unsigned char c ) { glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } // Draw the (latin1) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, unsigned char c ) { glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } #ifndef OGLFT_NO_WX // Draw the (UNICODE) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, wxChar c ) { glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } // Draw the (UNICODE) character at the given position. The MODELVIEW // matrix is modified by the glyph advance. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, wxChar c ) { glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( c ); } #endif /* OGLFT_NO_WX */ // Draw the (latin1) string at the given position. void Face::draw ( GLfloat x, GLfloat y, const char* s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the (latin1) string at the given position. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const char* s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } #ifndef OGLFT_NO_WX // Draw the (UNICODE) string at the given position. void Face::draw ( GLfloat x, GLfloat y, const wxString& s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); BBox bbox = measure_nominal( s ); GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = -bbox.x_min_; break; case CENTER: dx = -( bbox.x_min_ + bbox.x_max_ ) / 2.; break; case RIGHT: dx = -bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = -bbox.y_min_; break; case MIDDLE: dy = -( bbox.y_min_ + bbox.y_max_ ) / 2.; break; case TOP: dy = -bbox.y_max_; break; default: break; } // There is probably a less expensive way to compute this glRotatef( string_rotation_, 0., 0., 1. ); glTranslatef( dx, dy, 0 ); glRotatef( -string_rotation_, 0., 0., 1. ); } glTranslatef( x, y, 0. ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the (UNICODE) string at the given position. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& s ) { if ( !advance_ ) glPushMatrix(); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) { glPushMatrix(); // In 3D, we need to exert more care in the computation of the // bounding box of the text. NOTE: Needs to be fixed up for // polygonal faces, too... BBox bbox; // Code from measure_nominal, but changed to use measureRaw instead if ( string_rotation_ == 0. ) bbox = measureRaw( s ); else { // Undo rotation for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, 0, 0 ); bbox = measureRaw( s ); // Redo rotation float angle; if ( string_rotation_ < 0. ) { angle = 360. - fmod( fabs( string_rotation_ ), 360.f ); } else { angle = fmod( string_rotation_, 360.f ); } FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(angle * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; for ( unsigned int f = 0; f < faces_.size(); f++ ) FT_Set_Transform( faces_[f].face_, &rotation_matrix, 0 ); } // Determine the offset into the bounding box which will appear // at the user's specified position. GLfloat dx = 0, dy = 0; switch ( horizontal_justification_ ) { case LEFT: dx = bbox.x_min_; break; case CENTER: dx = ( bbox.x_min_ + bbox.x_max_ ) / 2; break; case RIGHT: dx = bbox.x_max_; break; default: break; } switch ( vertical_justification_ ) { case BOTTOM: dy = bbox.y_min_; break; case MIDDLE: dy = ( bbox.y_min_ + bbox.y_max_ ) /2; break; case TOP: dy = bbox.y_max_; break; default: break; } // **Now** rotate these coordinates around into 3D modeling coordinates! GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); GLdouble x0, y0, z0; gluUnProject( 0, 0, 0, modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble dx_m, dy_m, dz_m; gluUnProject( dx, dy, 0., modelview, projection, viewport,&dx_m,&dy_m,&dz_m ); glTranslated( x0-dx_m, y0-dy_m, z0-dz_m ); } glTranslatef( x, y, z ); glColor4f( foreground_color_[R], foreground_color_[G], foreground_color_[B], foreground_color_[A] ); glRasterPos2i( 0, 0 ); draw( s ); if ( horizontal_justification_ != ORIGIN || vertical_justification_ != BASELINE ) glPopMatrix(); if ( !advance_ ) glPopMatrix(); } // Draw the number at the given position per the given format. void Face::draw ( GLfloat x, GLfloat y, const wxString& format, double number ) { draw( x, y, format_number( format, number ) ); } // Draw the number at the given position per the given format. void Face::draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& format, double number ) { draw( x, y, z, format_number( format, number ) ); } #endif /* OGLFT_NO_WX */ Raster::Raster ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Raster::Raster ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Raster::init ( void ) { character_rotation_z_ = 0; setCharSize(); setCharacterRotationReference( 'o' ); } Raster::~Raster ( void ) { clearCaches(); } void Raster::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_z_ ) { character_rotation_z_ = character_rotation_z; clearCaches(); } } double Raster::height ( void ) const { if ( faces_[0].face_->height > 0 ) return faces_[0].face_->height / 64.; else return faces_[0].face_->size->metrics.y_ppem; } BBox Raster::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; // In order to be accurate regarding the placement of text not // aligned at the glyph's origin (CENTER/MIDDLE), the bounding box // of the raster format has to be projected back into the // view's coordinates GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); // Well, first we have to get the Origin, since that is the basis // of the bounding box GLdouble x0, y0, z0; gluUnProject( 0., 0., 0., modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble x, y, z; gluUnProject( bbox.x_min_, bbox.y_min_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_min_ = x - x0; bbox.y_min_ = y - y0; gluUnProject( bbox.x_max_, bbox.y_max_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_max_ = x - x0; bbox.y_max_ = y - y0; gluUnProject( bbox.advance_.dx_, bbox.advance_.dy_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.advance_.dx_ = x - x0; bbox.advance_.dy_ = y - y0; return bbox; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Raster::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; // In order to be accurate regarding the placement of text not // aligned at the glyph's origin (CENTER/MIDDLE), the bounding box // of the raster format has to be projected back into the // view's coordinates GLint viewport[4]; GLdouble modelview[16], projection[16]; glGetIntegerv( GL_VIEWPORT, viewport ); glGetDoublev( GL_MODELVIEW_MATRIX, modelview ); glGetDoublev( GL_PROJECTION_MATRIX, projection ); // Well, first we have to get the Origin, since that is the basis // of the bounding box GLdouble x0, y0, z0; gluUnProject( 0., 0., 0., modelview, projection, viewport, &x0, &y0, &z0 ); GLdouble x, y, z; gluUnProject( bbox.x_min_, bbox.y_min_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_min_ = x - x0; bbox.y_min_ = y - y0; gluUnProject( bbox.x_max_, bbox.y_max_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.x_max_ = x - x0; bbox.y_max_ = y - y0; gluUnProject( bbox.advance_.dx_, bbox.advance_.dy_, 0., modelview, projection, viewport, &x, &y, &z ); bbox.advance_.dx_ = x - x0; bbox.advance_.dy_ = y - y0; return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Raster::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Raster::setCharSize ( void ) { FT_Error error; for ( unsigned int i = 0; i < faces_.size(); i++ ) { error = FT_Set_Char_Size( faces_[i].face_, (FT_F26Dot6)( point_size_ * 64 ), (FT_F26Dot6)( point_size_ * 64 ), resolution_, resolution_ ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Raster::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; rotation_offset_y_ = rotation_reference_face_->glyph->bitmap.rows / 2.; } void Raster::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); } Monochrome::Monochrome ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Monochrome::Monochrome ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Monochrome::~Monochrome ( void ) {} GLubyte* Monochrome::invertBitmap ( const FT_Bitmap& bitmap ) { // In FreeType 2.0.9, the pitch of bitmaps was rounded up to an // even number. In general, this disagrees with what we had been // using for OpenGL. int width = bitmap.width / 8 + ( ( bitmap.width & 7 ) > 0 ? 1 : 0 ); GLubyte* inverse = new GLubyte[ bitmap.rows * width ]; GLubyte* inverse_ptr = inverse; for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < width; p++ ) *inverse_ptr++ = *bitmap_ptr++; } return inverse; } void Monochrome::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { // Start by retrieving the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; // If the individual characters are rotated (as distinct from string // rotation), then apply that extra rotation here. This is equivalent // to the sequence // glTranslate(x_center,y_center); // glRotate(angle); // glTranslate(-x_center,-y_center); // which is used for the polygonal styles. The deal with the raster // styles is that you must retain the advance from the string rotation // so that the glyphs are laid out properly. So, we make a copy of // the string rotated glyph, and then rotate that and add back an // additional offset to (in effect) restore the proper origin and // advance of the glyph. if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_MONO, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps and // OpenGL won't invert a bitmap with PixelZoom, so we have to invert the // glyph's bitmap ourselves. GLubyte* inverted_bitmap = invertBitmap( bitmap_glyph->bitmap ); glBitmap( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, -bitmap_glyph->left, bitmap_glyph->bitmap.rows - bitmap_glyph->top, face->glyph->advance.x / 64., face->glyph->advance.y / 64., inverted_bitmap ); FT_Done_Glyph( glyph ); delete[] inverted_bitmap; } Grayscale::Grayscale ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Grayscale::Grayscale ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Grayscale::~Grayscale ( void ) {} GLubyte* Grayscale::invertPixmap ( const FT_Bitmap& bitmap ) { GLubyte* inverse = new GLubyte[ bitmap.rows * bitmap.pitch ]; GLubyte* inverse_ptr = inverse; for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } } return inverse; } void Grayscale::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps // (this could be cured with PixelZoom, but that an additional function) GLubyte* inverted_pixmap = invertPixmap( bitmap_glyph->bitmap ); // :-( If this is compiled in a display list, it may or not be in effect // later when the list is actually called. So, the client should be alerted // to this fact: unpack alignment must be 1 glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G] - background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B] - background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glBitmap( 0, 0, 0, 0, bitmap_glyph->left, bitmap_glyph->top - bitmap_glyph->bitmap.rows, 0 ); glDrawPixels( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, GL_LUMINANCE, GL_UNSIGNED_BYTE, inverted_pixmap ); // This is how you advance the raster position when drawing PIXMAPS // (without querying the state) glBitmap( 0, 0, 0, 0, -bitmap_glyph->left + face->glyph->advance.x / 64., bitmap_glyph->bitmap.rows - bitmap_glyph->top + face->glyph->advance.y / 64., 0 ); FT_Done_Glyph( glyph ); glPopAttrib(); delete[] inverted_pixmap; } Translucent::Translucent ( const char* filename, float point_size, FT_UInt resolution ) : Raster( filename, point_size, resolution ) {} Translucent::Translucent ( FT_Face face, float point_size, FT_UInt resolution ) : Raster( face, point_size, resolution ) {} Translucent::~Translucent ( void ) {} // The simplest format which glDrawPixels can render with (varying) transparency // is GL_LUMINANCE_ALPHA; so, we take the grayscale bitmap from FreeType // and treat all non-zero values as full luminance (basically the mask for // rendering) and duplicate the grayscale values as alpha values // (as well as turn it upside-down). GLubyte* Translucent::invertPixmapWithAlpha ( const FT_Bitmap& bitmap ) { GLubyte* inverse = new GLubyte[ 2 * bitmap.rows * bitmap.pitch ]; GLubyte* inverse_ptr = inverse; for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr ? 255 : 0; *inverse_ptr++ = *bitmap_ptr++; } } return inverse; } void Translucent::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_Glyph original_glyph; FT_Glyph glyph; error = FT_Get_Glyph( face->glyph, &original_glyph ); if ( error != 0 ) return; error = FT_Glyph_Copy( original_glyph, &glyph ); FT_Done_Glyph( original_glyph ); if ( error != 0 ) return; if ( character_rotation_z_ != 0. ) { FT_Matrix rotation_matrix; FT_Vector sinus; FT_Vector_Unit( &sinus, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_matrix.xx = sinus.x; rotation_matrix.xy = -sinus.y; rotation_matrix.yx = sinus.y; rotation_matrix.yy = sinus.x; FT_Vector original_offset, rotation_offset; original_offset.x = ( face->glyph->metrics.width / 2 + face->glyph->metrics.horiBearingX ) / 64 * 0x10000L; original_offset.y = (FT_Pos)(rotation_offset_y_ * 0x10000L); rotation_offset = original_offset; FT_Vector_Rotate( &rotation_offset, (FT_Angle)(character_rotation_z_ * 0x10000L) ); rotation_offset.x = original_offset.x - rotation_offset.x; rotation_offset.y = original_offset.y - rotation_offset.y; rotation_offset.x /= 1024; rotation_offset.y /= 1024; error = FT_Glyph_Transform( glyph, &rotation_matrix, &rotation_offset ); } error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, 0, 1 ); if ( error != 0 ) { FT_Done_Glyph( glyph ); return; } FT_BitmapGlyph bitmap_glyph = (FT_BitmapGlyph)glyph; // Evidently, in FreeType2, you can only get "upside-down" bitmaps. For // translucency, the grayscale bitmap generated by FreeType is expanded // to include an alpha value (and the non-zero values of the // grayscale bitmap are saturated to provide a "mask" of the glyph). GLubyte* inverted_pixmap = invertPixmapWithAlpha( bitmap_glyph->bitmap ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G] -background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B] - background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); // Set the proper raster position for rendering this glyph (why doesn't // OpenGL have a similar function for pixmaps?) glBitmap( 0, 0, 0, 0, bitmap_glyph->left, bitmap_glyph->top - bitmap_glyph->bitmap.rows, 0 ); glDrawPixels( bitmap_glyph->bitmap.width, bitmap_glyph->bitmap.rows, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, inverted_pixmap ); // This is how you advance the raster position when drawing PIXMAPS // (without querying the state) glBitmap( 0, 0, 0, 0, -bitmap_glyph->left + face->glyph->advance.x / 64., bitmap_glyph->bitmap.rows - bitmap_glyph->top + face->glyph->advance.y / 64., 0 ); FT_Done_Glyph( glyph ); glPopAttrib(); delete[] inverted_pixmap; } Polygonal::Polygonal ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Polygonal::Polygonal ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Polygonal::init ( void ) { character_rotation_.active_ = false; character_rotation_.x_ = 0; character_rotation_.y_ = 0; character_rotation_.z_ = 0; tessellation_steps_ = DEFAULT_TESSELLATION_STEPS; delta_ = 1. / (double)tessellation_steps_; delta2_ = delta_ * delta_; delta3_ = delta2_ * delta_; // For vector rendition modes, FreeType is allowed to generate the // lines and arcs at the original face definition resolution. To // get to the proper glyph size, the vertices are scaled before // they're passed to the GLU tessellation routines. if ( resolution_ != 0 ) vector_scale_ = (GLdouble)( point_size_ * resolution_ ) / (GLdouble)( faces_.front().face_->units_per_EM * 72 ); else // According to the FreeType documentation, resolution == 0 -> 72 DPI vector_scale_ = (GLdouble)( point_size_ ) / (GLdouble)( faces_.front().face_->units_per_EM ); color_tess_ = 0; texture_tess_ = 0; setCharSize(); // Can't call this until a valid character size is set! setCharacterRotationReference( 'o' ); } Polygonal::~Polygonal ( void ) { clearCaches(); } // Note: Changing the color tessellation object also clears the // display list cache void Polygonal::setColorTess ( ColorTess* color_tess ) { color_tess_ = color_tess; clearCaches(); } // Note: Changing the texture coordinate tessellation object also // clears the display list cache void Polygonal::setTextureTess ( TextureTess* texture_tess ) { texture_tess_ = texture_tess; clearCaches(); } // Note: Changing the appoximation steps also clears the display list cache void Polygonal::setTessellationSteps ( unsigned int tessellation_steps ) { if ( tessellation_steps != tessellation_steps_ ) { tessellation_steps_ = tessellation_steps; delta_ = 1. / (double)tessellation_steps_; delta2_ = delta_ * delta_; delta3_ = delta2_ * delta_; clearCaches(); } } // Note: Changing the character rotation also clears the display list cache. void Polygonal::setCharacterRotationX ( GLfloat character_rotation_x ) { if ( character_rotation_x != character_rotation_.x_ ) { character_rotation_.x_ = character_rotation_x; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharacterRotationY ( GLfloat character_rotation_y ) { if ( character_rotation_y != character_rotation_.y_ ) { character_rotation_.y_ = character_rotation_y; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_.z_ ) { character_rotation_.z_ = character_rotation_z; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Polygonal::setCharSize ( void ) { for ( unsigned int i = 0; i < faces_.size(); i++ ) { FT_Error error = FT_Set_Char_Size( faces_[i].face_, 0, faces_[i].face_->units_per_EM * 64, 0, 0 ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Polygonal::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * rotation_reference_face_->units_per_EM ); rotation_offset_y_ = ( rotation_reference_face_->glyph->metrics.horiBearingY / 2. ) / 64. * vector_scale_; } double Polygonal::height ( void ) const { if ( faces_[0].face_->height > 0 ) return ( faces_[0].face_->height * point_size_ * resolution_ ) / ( 72. * faces_[0].face_->units_per_EM ); else return ( faces_[0].face_->size->metrics.y_ppem * point_size_ * resolution_ ) / ( 72. * faces_[0].face_->units_per_EM ); } BBox Polygonal::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; bbox *= ( point_size_ * resolution_ ) / ( 72. * faces_[f].face_->units_per_EM ); return bbox; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Polygonal::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; bbox *= ( point_size_ * resolution_ ) / ( 72. * faces_[f].face_->units_per_EM ); return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Polygonal::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Polygonal::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); } Outline::Outline ( const char* filename, float point_size, FT_UInt resolution ) : Polygonal( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Outline::Outline ( FT_Face face, float point_size, FT_UInt resolution ) : Polygonal( face, point_size, resolution ) { init(); } void Outline::init ( void ) { interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; } Outline::~Outline ( void ) {} void Outline::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } contour_open_ = false; // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // outline_interface_. These routines in turn call the GL vertex routines. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) glEnd( ); if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64. * vector_scale_, face->glyph->advance.y / 64. * vector_scale_, 0. ); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Outline::moveToCallback ( FT_Vector* to, Outline* outline ) { if ( outline->contour_open_ ) { glEnd(); } outline->last_vertex_ = VertexInfo( to, outline->colorTess(), outline->textureTess() ); glBegin( GL_LINE_LOOP ); outline->contour_open_ = true; return 0; } int Outline::lineToCallback ( FT_Vector* to, Outline* outline ) { outline->last_vertex_ = VertexInfo( to, outline->colorTess(), outline->textureTess() ); GLdouble g[2]; g[X] = outline->last_vertex_.v_[X] * outline->vector_scale_; g[Y] = outline->last_vertex_.v_[Y] * outline->vector_scale_; glVertex2dv( g ); return 0; } int Outline::conicToCallback ( FT_Vector* control, FT_Vector* to, Outline* outline ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, outline->colorTess(), outline->textureTess() ); VertexInfo control_vertex( control, outline->colorTess(), outline->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; GLdouble g[3]; g[Z] = 0.; b[X] = outline->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = outline->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * outline->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * outline->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = outline->last_vertex_.v_[X]; d[Y] = outline->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * outline->delta_ + b[X] * outline->delta2_; df[Y] = c[Y] * outline->delta_ + b[Y] * outline->delta2_; d2f[X] = 2 * b[X] * outline->delta2_; d2f[Y] = 2 * b[Y] * outline->delta2_; for ( unsigned int i = 0; i < outline->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; g[X] = f[X] * outline->vector_scale_; g[Y] = f[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); df[X] += d2f[X]; df[Y] += d2f[Y]; } g[X] = to_vertex.v_[X] * outline->vector_scale_; g[Y] = to_vertex.v_[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); outline->last_vertex_ = to_vertex; return 0; } int Outline::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Outline* outline ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, outline->colorTess(), outline->textureTess() ); VertexInfo control1_vertex( control1, outline->colorTess(), outline->textureTess() ); VertexInfo control2_vertex( control2, outline->colorTess(), outline->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; GLdouble g[3]; g[Z] = 0.; a[X] = -outline->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -outline->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * outline->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * outline->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * outline->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * outline->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = outline->last_vertex_.v_[X]; d[Y] = outline->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * outline->delta_ + b[X] * outline->delta2_ + a[X] * outline->delta3_; df[Y] = c[Y] * outline->delta_ + b[Y] * outline->delta2_ + a[Y] * outline->delta3_; d2f[X] = 2 * b[X] * outline->delta2_ + 6 * a[X] * outline->delta3_; d2f[Y] = 2 * b[Y] * outline->delta2_ + 6 * a[Y] * outline->delta3_; d3f[X] = 6 * a[X] * outline->delta3_; d3f[Y] = 6 * a[Y] * outline->delta3_; for ( unsigned int i = 0; i < outline->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; g[X] = f[X] * outline->vector_scale_; g[Y] = f[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } g[X] = to_vertex.v_[X] * outline->vector_scale_; g[Y] = to_vertex.v_[Y] * outline->vector_scale_; if ( outline->colorTess() ) glColor4fv( outline->colorTess()->color( g ) ); glVertex2dv( g ); outline->last_vertex_ = to_vertex; return 0; } Filled::Filled ( const char* filename, float point_size, FT_UInt resolution ) : Polygonal( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Filled::Filled ( FT_Face face, float point_size, FT_UInt resolution ) : Polygonal( face, point_size, resolution ) { init(); } void Filled::init ( void ) { depth_offset_ = 0; interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; tess_obj_ = gluNewTess(); #ifdef LXWIN32 gluTessCallback( tess_obj_, GLU_TESS_VERTEX, (void (__stdcall *)(void)) & glVertex3dv ); gluTessCallback( tess_obj_, GLU_TESS_BEGIN, (void (__stdcall *)(void)) & glBegin ); gluTessCallback( tess_obj_, GLU_TESS_END, (void (__stdcall *)(void)) & glEnd ); gluTessCallback( tess_obj_, GLU_TESS_COMBINE_DATA, (void (__stdcall *)(void)) & combineCallback ); gluTessCallback( tess_obj_, GLU_TESS_ERROR, (void (__stdcall *)(void)) & errorCallback); #else gluTessCallback( tess_obj_, GLU_TESS_VERTEX, (GLUTessCallback)vertexCallback ); gluTessCallback( tess_obj_, GLU_TESS_BEGIN, (GLUTessCallback)beginCallback ); gluTessCallback( tess_obj_, GLU_TESS_END, (GLUTessCallback)endCallback ); gluTessCallback( tess_obj_, GLU_TESS_COMBINE_DATA, (GLUTessCallback)combineCallback ); gluTessCallback( tess_obj_, GLU_TESS_ERROR, (GLUTessCallback)errorCallback); #endif } Filled::~Filled ( void ) { gluDeleteTess( tess_obj_ ); } void Filled::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } if ( depth_offset_ != 0. ) { glPushMatrix(); glTranslatef( 0., 0., depth_offset_ ); glNormal3f( 0., 0., 1. ); } else { glNormal3f( 0., 0., -1. ); } glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); contour_open_ = false; gluTessBeginPolygon( tess_obj_, this ); // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // interface_. These routines in turn call the GLU tessellation routines // to create OGL polygons. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) gluTessEndContour( tess_obj_ ); gluTessEndPolygon( tess_obj_ ); if ( depth_offset_ != 0. ) { glPopMatrix(); } if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64 * vector_scale_, face->glyph->advance.y / 64 * vector_scale_, 0. ); for ( VILI vili = extra_vertices_.begin(); vili != extra_vertices_.end(); vili++ ) delete *vili; extra_vertices_.clear(); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Filled::moveToCallback ( FT_Vector* to, Filled* filled ) { if ( filled->contour_open_ ) { gluTessEndContour( filled->tess_obj_ ); } filled->last_vertex_ = VertexInfo( to, filled->colorTess(), filled->textureTess() ); gluTessBeginContour( filled->tess_obj_ ); filled->contour_open_ = true; return 0; } int Filled::lineToCallback ( FT_Vector* to, Filled* filled ) { filled->last_vertex_ = VertexInfo( to, filled->colorTess(), filled->textureTess() ); VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->vertices_.push_back( vertex ); return 0; } int Filled::conicToCallback ( FT_Vector* control, FT_Vector* to, Filled* filled ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, filled->colorTess(), filled->textureTess() ); VertexInfo control_vertex( control, filled->colorTess(), filled->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; b[X] = filled->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = filled->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * filled->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * filled->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = filled->last_vertex_.v_[X]; d[Y] = filled->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * filled->delta_ + b[X] * filled->delta2_; df[Y] = c[Y] * filled->delta_ + b[Y] * filled->delta2_; d2f[X] = 2 * b[X] * filled->delta2_; d2f[Y] = 2 * b[Y] * filled->delta2_; for ( unsigned int i = 0; i < filled->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo* vertex = new VertexInfo( f, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); df[X] += d2f[X]; df[Y] += d2f[Y]; } VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->last_vertex_ = to_vertex; return 0; } int Filled::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Filled* filled ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, filled->colorTess(), filled->textureTess() ); VertexInfo control1_vertex( control1, filled->colorTess(), filled->textureTess() ); VertexInfo control2_vertex( control2, filled->colorTess(), filled->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; a[X] = -filled->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -filled->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * filled->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * filled->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * filled->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * filled->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = filled->last_vertex_.v_[X]; d[Y] = filled->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * filled->delta_ + b[X] * filled->delta2_ + a[X] * filled->delta3_; df[Y] = c[Y] * filled->delta_ + b[Y] * filled->delta2_ + a[Y] * filled->delta3_; d2f[X] = 2 * b[X] * filled->delta2_ + 6 * a[X] * filled->delta3_; d2f[Y] = 2 * b[Y] * filled->delta2_ + 6 * a[Y] * filled->delta3_; d3f[X] = 6 * a[X] * filled->delta3_; d3f[Y] = 6 * a[Y] * filled->delta3_; for ( unsigned int i = 0; i < filled->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo* vertex = new VertexInfo( f, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } VertexInfo* vertex = new VertexInfo( to, filled->colorTess(), filled->textureTess() ); vertex->v_[X] *= filled->vector_scale_; vertex->v_[Y] *= filled->vector_scale_; filled->vertices_.push_back( vertex ); gluTessVertex( filled->tess_obj_, vertex->v_, vertex ); filled->last_vertex_ = to_vertex; return 0; } void Filled::vertexCallback ( VertexInfo* vertex ) { if ( vertex->color_tess_ != 0 ) glColor4fv( vertex->color_tess_->color( vertex->v_ ) ); if ( vertex->texture_tess_ != 0 ) glTexCoord2fv( vertex->texture_tess_->texCoord( vertex->v_ ) ); glVertex3dv( vertex->v_ ); } void Filled::beginCallback ( GLenum which ) { glBegin( which ); } void Filled::endCallback ( void ) { glEnd(); } void Filled::combineCallback ( GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** out_data, Filled* filled ) { (void)vertex_data; (void)weight; // std::cerr << "called combine" << std::endl; VertexInfo* vertex = new VertexInfo( coords ); *out_data = vertex; filled->extraVertices().push_back( vertex ); } void Filled::errorCallback ( GLenum error_code ) { std::cerr << "hmm. error during tessellation?:" << gluErrorString( error_code ) << std::endl; } #ifndef OGLFT_NO_SOLID Solid::Solid ( const char* filename, float point_size, FT_UInt resolution ) : Filled( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Solid::Solid ( FT_Face face, float point_size, FT_UInt resolution ) : Filled( face, point_size, resolution ) { init(); } void Solid::init ( void ) { interface_.move_to = (FT_Outline_MoveTo_Func)moveToCallback; interface_.line_to = (FT_Outline_LineTo_Func)lineToCallback; interface_.conic_to = (FT_Outline_ConicTo_Func)conicToCallback; interface_.cubic_to = (FT_Outline_CubicTo_Func)cubicToCallback; interface_.shift = 0; interface_.delta = 0; // Set up for extrusion. Default depth is 1 (units of what?) extrusion_.depth_ = 1.; extrusion_.up_[X] = 0.; extrusion_.up_[Y] = 1.; extrusion_.up_[Z] = 0.; extrusion_.n_polyline_pts_ = N_POLYLINE_PTS; assign( extrusion_.point_array_[0], 0., 0., extrusion_.depth_ + 1. ); assign( extrusion_.point_array_[1], 0., 0., extrusion_.depth_ ); assign( extrusion_.point_array_[2], 0., 0., 0. ); assign( extrusion_.point_array_[3], 0., 0., -1. ); // Turn on closed contours and smooth vertices; turn off end capping gleSetJoinStyle( TUBE_JN_RAW | TUBE_CONTOUR_CLOSED | TUBE_NORM_EDGE ); } Solid::~Solid ( void ) {} // Note: as usual, setting this clears the caches void Solid::setDepth ( double depth ) { if ( depth > 0. && depth != extrusion_.depth_ ) { extrusion_.depth_ = depth; assign( extrusion_.point_array_[0], 0., 0., extrusion_.depth_ + 1. ); assign( extrusion_.point_array_[1], 0., 0., extrusion_.depth_ ); clearCaches(); } } void Solid::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; FT_OutlineGlyph g; error = FT_Get_Glyph( face->glyph, (FT_Glyph*)&g ); if ( error != 0 ) return; vector_scale_ = ( point_size_ * resolution_ ) / ( 72. * face->units_per_EM ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( face->glyph->metrics.width / 2. + face->glyph->metrics.horiBearingX ) / 64. * vector_scale_, -rotation_offset_y_, 0. ); } contour_open_ = false; // In theory, TrueType contours are defined clockwise and Type1 contours // are defined counter-clockwise. Trust the flag set by FreeType to // indicate this since it is critical to getting the orientation of the // surface normals correct. if ( g->outline.flags & FT_OUTLINE_REVERSE_FILL ) { extrusion_.normal_sign_.x_ = -1; extrusion_.normal_sign_.y_ = 1; } else { extrusion_.normal_sign_.x_ = 1; extrusion_.normal_sign_.y_ = -1; } // The Big Kahuna: the FreeType glyph decomposition routine traverses // the outlines of the font by calling the various routines stored in // extrude_interface_. These in turn call the gleExtrusion routine. error = FT_Outline_Decompose( &g->outline, &interface_, this ); FT_Done_Glyph( (FT_Glyph)g ); // Some glyphs may be empty (the 'blank' for instance!) if ( contour_open_ ) { extrusion_.contour_normals_.push_back( extrusion_.contour_normals_.front() ); gleExtrusion( extrusion_.contour_.size(), &extrusion_.contour_.begin()->p_, &extrusion_.contour_normals_[1].p_, extrusion_.up_, extrusion_.n_polyline_pts_, extrusion_.point_array_, 0 ); extrusion_.contour_.clear(); extrusion_.contour_normals_.clear(); } if ( character_rotation_.active_ ) { glPopMatrix(); } // Apply the front and back faces of the solid character (recall that // drawing a character advances the MODELVIEW, so defend against that // with the stack operations) glPushMatrix(); depth_offset_ = 0.; Filled::renderGlyph( face, glyph_index ); glPopMatrix(); glPushMatrix(); depth_offset_ = extrusion_.depth_; Filled::renderGlyph( face, glyph_index ); glPopMatrix(); // Drawing a character always advances the MODELVIEW. glTranslatef( face->glyph->advance.x / 64. * vector_scale_, face->glyph->advance.y / 64. * vector_scale_, 0. ); for ( VILI vili = vertices_.begin(); vili != vertices_.end(); vili++ ) delete *vili; vertices_.clear(); } int Solid::moveToCallback ( FT_Vector* to, Solid* solid ) { if ( solid->contour_open_ ) { // A word of explanation: since you can't predict when the // contour is going to end (its end is signaled by calling this // routine, i.e., the contour ends when another is started // abruptly), only the lineTo and arcTo functions generate contour // points. The upshot is that the normals, which are computed for the // current segment, are one behind the segment described in the // the contour array. To make things match up at the end, the first // normal is copied to the end of the normal array and the extrusion // routine is passed the list of normals starting at the second entry. solid->extrusion_.contour_normals_. push_back( solid->extrusion_.contour_normals_.front() ); #if 1 gleExtrusion( solid->extrusion_.contour_.size(), &solid->extrusion_.contour_.begin()->p_, &solid->extrusion_.contour_normals_[1].p_, solid->extrusion_.up_, solid->extrusion_.n_polyline_pts_, solid->extrusion_.point_array_, 0 ); #endif solid->extrusion_.contour_.clear(); solid->extrusion_.contour_normals_.clear(); } solid->last_vertex_ = VertexInfo( to, solid->colorTess(), solid->textureTess() ); solid->contour_open_ = true; return 0; } int Solid::lineToCallback ( FT_Vector* to, Solid* solid ) { VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * ( vertex.v_[Y] - solid->last_vertex_.v_[Y] ), solid->extrusion_.normal_sign_.x_ * ( vertex.v_[X] - solid->last_vertex_.v_[X] ) ); solid->last_vertex_ = vertex; vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); return 0; } int Solid::conicToCallback ( FT_Vector* control, FT_Vector* to, Solid* solid ) { // This is crude: Step off conics with a fixed number of increments VertexInfo to_vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo control_vertex( control, solid->colorTess(), solid->textureTess() ); double b[2], c[2], d[2], f[2], df[2], d2f[2]; b[X] = solid->last_vertex_.v_[X] - 2 * control_vertex.v_[X] + to_vertex.v_[X]; b[Y] = solid->last_vertex_.v_[Y] - 2 * control_vertex.v_[Y] + to_vertex.v_[Y]; c[X] = -2 * solid->last_vertex_.v_[X] + 2 * control_vertex.v_[X]; c[Y] = -2 * solid->last_vertex_.v_[Y] + 2 * control_vertex.v_[Y]; d[X] = solid->last_vertex_.v_[X]; d[Y] = solid->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * solid->delta_ + b[X] * solid->delta2_; df[Y] = c[Y] * solid->delta_ + b[Y] * solid->delta2_; d2f[X] = 2 * b[X] * solid->delta2_; d2f[Y] = 2 * b[Y] * solid->delta2_; for ( unsigned int i = 0; i < solid->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo vertex( f, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); df[X] += d2f[X]; df[Y] += d2f[Y]; } VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); solid->last_vertex_ = to_vertex; return 0; } int Solid::cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Solid* solid ) { // This is crude: Step off cubics with a fixed number of increments VertexInfo to_vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo control1_vertex( control1, solid->colorTess(), solid->textureTess() ); VertexInfo control2_vertex( control2, solid->colorTess(), solid->textureTess() ); double a[2], b[2], c[2], d[2], f[2], df[2], d2f[2], d3f[2]; a[X] = -solid->last_vertex_.v_[X] + 3 * control1_vertex.v_[X] -3 * control2_vertex.v_[X] + to_vertex.v_[X]; a[Y] = -solid->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y] -3 * control2_vertex.v_[Y] + to_vertex.v_[Y]; b[X] = 3 * solid->last_vertex_.v_[X] - 6 * control1_vertex.v_[X] + 3 * control2_vertex.v_[X]; b[Y] = 3 * solid->last_vertex_.v_[Y] - 6 * control1_vertex.v_[Y] + 3 * control2_vertex.v_[Y]; c[X] = -3 * solid->last_vertex_.v_[X] + 3 * control1_vertex.v_[X]; c[Y] = -3 * solid->last_vertex_.v_[Y] + 3 * control1_vertex.v_[Y]; d[X] = solid->last_vertex_.v_[X]; d[Y] = solid->last_vertex_.v_[Y]; f[X] = d[X]; f[Y] = d[Y]; df[X] = c[X] * solid->delta_ + b[X] * solid->delta2_ + a[X] * solid->delta3_; df[Y] = c[Y] * solid->delta_ + b[Y] * solid->delta2_ + a[Y] * solid->delta3_; d2f[X] = 2 * b[X] * solid->delta2_ + 6 * a[X] * solid->delta3_; d2f[Y] = 2 * b[Y] * solid->delta2_ + 6 * a[Y] * solid->delta3_; d3f[X] = 6 * a[X] * solid->delta3_; d3f[Y] = 6 * a[Y] * solid->delta3_; for ( unsigned int i = 0; i < solid->tessellation_steps_-1; i++ ) { f[X] += df[X]; f[Y] += df[Y]; VertexInfo vertex( f, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); df[X] += d2f[X]; df[Y] += d2f[Y]; d2f[X] += d3f[X]; d2f[Y] += d3f[Y]; } VertexInfo vertex( to, solid->colorTess(), solid->textureTess() ); VertexInfo normal( solid->extrusion_.normal_sign_.y_ * df[Y], solid->extrusion_.normal_sign_.x_ * df[X] ); vertex.v_[X] *= solid->vector_scale_; vertex.v_[Y] *= solid->vector_scale_; normal.normalize(); solid->extrusion_.contour_.push_back( vertex ); solid->extrusion_.contour_normals_.push_back( normal ); solid->last_vertex_ = to_vertex; return 0; } #endif // OGLFT_NO_SOLID Texture::Texture ( const char* filename, float point_size, FT_UInt resolution ) : Face( filename, point_size, resolution ) { if ( !isValid() ) return; init(); } Texture::Texture ( FT_Face face, float point_size, FT_UInt resolution ) : Face( face, point_size, resolution ) { init(); } void Texture::init ( void ) { character_rotation_.active_ = false; character_rotation_.x_ = 0; character_rotation_.y_ = 0; character_rotation_.z_ = 0; setCharSize(); setCharacterRotationReference( 'o' ); } Texture::~Texture ( void ) { clearCaches(); } // Note: Changing the character rotation also clears the display list cache. void Texture::setCharacterRotationX ( GLfloat character_rotation_x ) { if ( character_rotation_x != character_rotation_.x_ ) { character_rotation_.x_ = character_rotation_x; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharacterRotationY ( GLfloat character_rotation_y ) { if ( character_rotation_y != character_rotation_.y_ ) { character_rotation_.y_ = character_rotation_y; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharacterRotationZ ( GLfloat character_rotation_z ) { if ( character_rotation_z != character_rotation_.z_ ) { character_rotation_.z_ = character_rotation_z; if ( character_rotation_.x_ != 0. || character_rotation_.y_ != 0. || character_rotation_.z_ != 0. ) character_rotation_.active_ = true; else character_rotation_.active_ = false; clearCaches(); } } void Texture::setCharSize ( void ) { for ( unsigned int f = 0; f < faces_.size(); f++ ) { FT_Error error = FT_Set_Char_Size( faces_[f].face_, (FT_F26Dot6)( point_size_ * 64 ), (FT_F26Dot6)( point_size_ * 64 ), resolution_, resolution_ ); if ( error != 0 ) return; } if ( rotation_reference_glyph_ != 0 ) setRotationOffset(); } void Texture::setRotationOffset ( void ) { FT_Error error = FT_Load_Glyph( rotation_reference_face_, rotation_reference_glyph_, FT_LOAD_RENDER ); if ( error != 0 ) return; rotation_offset_y_ = rotation_reference_face_->glyph->bitmap.rows / 2.; } BBox Texture::measure ( unsigned char c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; return bbox; } double Texture::height ( void ) const { if ( faces_[0].face_->height > 0 ) return faces_[0].face_->height / 64.; else return faces_[0].face_->size->metrics.y_ppem; } #ifdef _UNICODE #ifndef OGLFT_NO_WX BBox Texture::measure ( const wxChar c ) { BBox bbox; // For starters, just get the unscaled glyph bounding box unsigned int f; FT_UInt glyph_index = 0; for ( f = 0; f < faces_.size(); f++ ) { glyph_index = FT_Get_Char_Index( faces_[f].face_, c ); if ( glyph_index != 0 ) break; } if ( glyph_index == 0 ) return bbox; FT_Error error = FT_Load_Glyph( faces_[f].face_, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return bbox; FT_Glyph glyph; error = FT_Get_Glyph( faces_[f].face_->glyph, &glyph ); if ( error != 0 ) return bbox; FT_BBox ft_bbox; FT_Glyph_Get_CBox( glyph, ft_glyph_bbox_unscaled, &ft_bbox ); FT_Done_Glyph( glyph ); bbox = ft_bbox; bbox.advance_ = faces_[f].face_->glyph->advance; return bbox; } #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ GLuint Texture::compileGlyph ( FT_Face face, FT_UInt glyph_index ) { bindTexture( face, glyph_index ); GLuint dlist = glGenLists( 1 ); glNewList( dlist, GL_COMPILE ); renderGlyph( face, glyph_index ); glEndList( ); return dlist; } void Texture::renderGlyph ( FT_Face face, FT_UInt glyph_index ) { FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; TextureInfo texture_info; GTOCI texture_object = glyph_texobjs_.find( glyph_index ); if ( texture_object == glyph_texobjs_.end() ) { bindTexture( face, glyph_index ); texture_object = glyph_texobjs_.find( glyph_index ); if ( texture_object == glyph_texobjs_.end() ) return; } texture_info = texture_object->second; glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); if ( character_rotation_.active_ ) { glPushMatrix(); glTranslatef( ( texture_info.width_ / 2. + texture_info.left_bearing_ ), rotation_offset_y_, 0. ); if ( character_rotation_.x_ != 0. ) glRotatef( character_rotation_.x_, 1., 0., 0. ); if ( character_rotation_.y_ != 0. ) glRotatef( character_rotation_.y_, 0., 1., 0. ); if ( character_rotation_.z_ != 0. ) glRotatef( character_rotation_.z_, 0., 0., 1. ); glTranslatef( -( texture_info.width_ / 2. + texture_info.left_bearing_ ), -rotation_offset_y_, 0. ); } glBegin( GL_QUADS ); glTexCoord2i( 0, 0 ); glVertex2f( texture_info.left_bearing_, texture_info.bottom_bearing_ ); glTexCoord2f( texture_info.texture_s_, 0. ); glVertex2f( texture_info.left_bearing_ + texture_info.width_, texture_info.bottom_bearing_ ); glTexCoord2f( texture_info.texture_s_, texture_info.texture_t_ ); glVertex2f( texture_info.left_bearing_ + texture_info.width_, texture_info.bottom_bearing_ + texture_info.height_ ); glTexCoord2f( 0., texture_info.texture_t_ ); glVertex2f( texture_info.left_bearing_, texture_info.bottom_bearing_ + texture_info.height_ ); glEnd(); if ( character_rotation_.active_ ) { glPopMatrix(); } // Drawing a character always advances the MODELVIEW. glTranslatef( texture_info.advance_.x / 64., texture_info.advance_.y / 64., 0. ); } void Texture::clearCaches ( void ) { GDLI fgi = glyph_dlists_.begin(); for ( ; fgi != glyph_dlists_.end(); ++fgi ) { glDeleteLists( fgi->second, 1 ); } glyph_dlists_.clear(); GTOI fti = glyph_texobjs_.begin(); for ( ; fti != glyph_texobjs_.end(); ++fti ) { glDeleteTextures( 1, &fti->second.texture_name_ ); } glyph_texobjs_.clear(); } unsigned int Texture::nearestPowerCeil ( unsigned int a ) { unsigned int b = a; unsigned int c = 1; if ( a == 0 ) return 1; // Take the log-2 of a for ( ; ; ) { if ( b == 1 ) break; else if ( b == 3 ) { c *= 4; break; } b >>= 1; c *= 2; } // If it's too small, raise it another power if ( c < a ) c *= 2; return c; } MonochromeTexture::MonochromeTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} MonochromeTexture::MonochromeTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} MonochromeTexture::~MonochromeTexture ( void ) {} // Round up the size of the image to a power of two, but otherwise // use the bitmap as is (i.e., don't expand it into separate // luminance and alpha components) GLubyte* MonochromeTexture::invertBitmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ ( *width + 7) / 8 * *height ]; GLubyte* inverse_ptr = inverse; memset( inverse, 0, sizeof( GLubyte )*( *width + 7 ) / 8 * *height ); for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( int p = 0; p < bitmap.pitch; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += ( ( *width + 7 ) / 8 - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void MonochromeTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_MONO ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertBitmap( face->glyph->bitmap, &width, &height ); GLfloat red_map[2] = { background_color_[R], foreground_color_[R] }; GLfloat green_map[2] = { background_color_[G], foreground_color_[G] }; GLfloat blue_map[2] = { background_color_[B], foreground_color_[B] }; GLfloat alpha_map[2] = { background_color_[A], foreground_color_[A] }; glPixelMapfv( GL_PIXEL_MAP_I_TO_R, 2, red_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_G, 2, green_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_B, 2, blue_map ); glPixelMapfv( GL_PIXEL_MAP_I_TO_A, 2, alpha_map ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_COLOR_INDEX, GL_BITMAP, inverted_pixmap ); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } GrayscaleTexture::GrayscaleTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} GrayscaleTexture::GrayscaleTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} GrayscaleTexture::~GrayscaleTexture ( void ) {} // For the grayscale style, the luminance is the grayscale FreeType value, // so this just rounds up to a power of two and inverts the pixmap GLubyte* GrayscaleTexture::invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ *width * *height ]; GLubyte* inverse_ptr = inverse; for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( unsigned p = 0; p < bitmap.width; p++ ) { *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += ( *width - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void GrayscaleTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertPixmap( face->glyph->bitmap, &width, &height ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G]-background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B]-background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A]-background_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, inverted_pixmap ); glPopAttrib(); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } TranslucentTexture::TranslucentTexture ( const char* filename, float point_size, FT_UInt resolution ) : Texture( filename, point_size, resolution ) {} TranslucentTexture::TranslucentTexture ( FT_Face face, float point_size, FT_UInt resolution ) : Texture( face, point_size, resolution ) {} TranslucentTexture::~TranslucentTexture ( void ) {} // For the translucent style, the luminance is saturated and alpha value // is the translucent FreeType value GLubyte* TranslucentTexture::invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ) { *width = nearestPowerCeil( bitmap.width ); *height = nearestPowerCeil( bitmap.rows ); GLubyte* inverse = new GLubyte[ 2 * *width * *height ]; GLubyte* inverse_ptr = inverse; for ( unsigned r = 0; r < bitmap.rows; r++ ) { GLubyte* bitmap_ptr = &bitmap.buffer[bitmap.pitch * ( bitmap.rows - r - 1 )]; for ( unsigned p = 0; p < bitmap.width; p++ ) { *inverse_ptr++ = 0xff; *inverse_ptr++ = *bitmap_ptr++; } inverse_ptr += 2 * ( *width - bitmap.pitch ); } return inverse; } // Hmm. This is the only routine which is different between the different // styles. void TranslucentTexture::bindTexture ( FT_Face face, FT_UInt glyph_index ) { GTOCI texobj = glyph_texobjs_.find( glyph_index ); if ( texobj != glyph_texobjs_.end() ) return; // Retrieve the glyph's data. FT_Error error = FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT ); if ( error != 0 ) return; error = FT_Render_Glyph( face->glyph, FT_RENDER_MODE_NORMAL ); if ( error != 0 ) return; TextureInfo texture_info; glGenTextures( 1, &texture_info.texture_name_ ); glBindTexture( GL_TEXTURE_2D, texture_info.texture_name_ ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); // Texture maps have be a power of 2 in size (is 1 a power of 2?), so // pad it out while flipping it over int width, height; GLubyte* inverted_pixmap = invertPixmap( face->glyph->bitmap, &width, &height ); glPushAttrib( GL_PIXEL_MODE_BIT ); glPixelTransferf( GL_RED_SCALE, foreground_color_[R] - background_color_[R] ); glPixelTransferf( GL_GREEN_SCALE, foreground_color_[G]-background_color_[G] ); glPixelTransferf( GL_BLUE_SCALE, foreground_color_[B]-background_color_[B] ); glPixelTransferf( GL_ALPHA_SCALE, foreground_color_[A]-background_color_[A] ); glPixelTransferf( GL_RED_BIAS, background_color_[R] ); glPixelTransferf( GL_GREEN_BIAS, background_color_[G] ); glPixelTransferf( GL_BLUE_BIAS, background_color_[B] ); glPixelTransferf( GL_ALPHA_BIAS, background_color_[A] ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, inverted_pixmap ); glPopAttrib(); // Save a good bit of the data about this glyph texture_info.left_bearing_ = face->glyph->bitmap_left; texture_info.bottom_bearing_ = -( face->glyph->bitmap.rows - face->glyph->bitmap_top ); texture_info.width_ = face->glyph->bitmap.width; texture_info.height_ = face->glyph->bitmap.rows; texture_info.texture_s_ = (GLfloat)texture_info.width_ / width; texture_info.texture_t_ = (GLfloat)texture_info.height_ / height; texture_info.advance_ = face->glyph->advance; glyph_texobjs_[ glyph_index ] = texture_info; delete[] inverted_pixmap; } } // close OGLFT namespace therion-5.4.1/loch/lxOGLFT.h000066400000000000000000002403311307545355600155260ustar00rootroot00000000000000// -*- c++ -*- /* * OGLFT: A library for drawing text with OpenGL using the FreeType library * Copyright (C) 2002 lignum Computing, Inc. * $Id: OGLFT.h,v 1.15 2003/10/01 14:41:09 allen Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #ifndef OGLFT_H #define OGLFT_H #ifndef LXDEPCHECK #ifndef OGLFT_NO_WX #include #include #else #include #endif #include #include #include #include #ifdef HAVE_MPATROL #include #endif #ifdef LXMACOSX #include #include #else #include #include #endif #ifndef OGLFT_NO_SOLID #define OGLFT_NO_SOLID #endif #ifndef OGLFT_NO_SOLID #include #endif #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H #include FT_TRIGONOMETRY_H #endif //! All of OGLFT C++ objects are in this namespace. namespace OGLFT { //! Thanks to DesCartes, I'd consider these manifest constants. enum Coordinates { X, //!< The X component of space Y, //!< The Y component of space Z, //!< The Z component of space W //!< The projection component of space }; //! Who to credit? Newton? I'd consider these manifest constants. enum ColorSpace { R, //!< The Red component of a color G, //!< The Green component of a color B, //!< The Blue component of a color A, //!< The Alpha (or transparency) of a color }; //! Callback from GLU tessellation routines. typedef void (*GLUTessCallback)(); //! The FreeType library instance. /*! * The FreeType library has a single, global instance of a library * handle. This reference is used to load font faces. This detail * is generally hidden from the user of OGLFT, however, it * can be useful to get the FT_Library instance if you want to open * a font file yourself, either from disk or embedded in the program. */ class Library { public: /*! * The FreeType library's library handle is only available through this * accessor method. * \return the global OGLFT FreeType library handle. */ static FT_Library& instance ( void ); protected: /*! * The constructor for this class is automatically called when * this library is loaded. Access the instance through the instance() * method. */ Library ( void ); /*! * This destructor is automatically called when the program exits. */ ~Library( void ); private: static Library library; static FT_Library library_; }; //! Advance describes the "advance" of a glyph, namely the distance in //! model space at which the NEXT glyph should be drawn. This class exists //! to assist the computation of string metrics. struct Advance { float dx_; //!< Advance increment in the X direction. float dy_; //!< Advance increment in the Y direction. //! Default constructor. An otherwise uninitialized Advance contains zeros. Advance ( float dx = 0, float dy = 0 ) : dx_( dx ), dy_( dy ) {} //! Initialize an advance from a FreeType advance member. Advance ( FT_Vector v ) { dx_ = v.x / 64.; dy_ = v.y / 64.; } //! Increment Advance with a FreeType advance member. //! \return a reference to oneself. Advance& operator+= ( const FT_Vector v ) { dx_ += v.x / 64.; dy_ += v.y / 64.; return *this; } }; //! Describe the metrics of a glyph or string relative to the origin //! of the first character struct BBox { float x_min_; //!< The left-most position at which "ink" appears. float y_min_; //!< the bottom-most position at which "ink" appears. float x_max_; //!< The right-most position at which "ink" appears. float y_max_; //!< The top-most position at which "ink" appears. Advance advance_; //!< The (total) advancement //! Default constructor is all zeros. BBox () : x_min_( 0 ), y_min_( 0 ), x_max_( 0 ), y_max_( 0 ) {} /*! *(Partially) initialize a BBox from a FreeType bounding box member. *(The advancement is initialized to zero by its default constructor). * \param ft_bbox a FreeType bounding box as retrieved from * \c FT_Glyph_Get_CBox. */ BBox ( FT_BBox ft_bbox ) { x_min_ = ft_bbox.xMin / 64.; y_min_ = ft_bbox.yMin / 64.; x_max_ = ft_bbox.xMax / 64.; y_max_ = ft_bbox.yMax / 64.; } //! Scale the bounding box by a constant. //! \param k a constant to scale the bounding box by. //! \return a reference to oneself. BBox& operator*= ( double k ) { x_min_ *= k; y_min_ *= k; x_max_ *= k; y_max_ *= k; advance_.dx_ *= k; advance_.dy_ *= k; return *this; } /*! * Merge a bounding box into the current one (not really addition). * Each time a BBox is "added", the current BBox is expanded to include * the metrics of the new BBox. May only work for horizontal fonts, though. * \param b the bounding box to merge. * \return a reference to oneself. */ BBox& operator+= ( const BBox& b ) { float new_value; new_value = b.x_min_ + advance_.dx_; if ( new_value < x_min_ ) x_min_ = new_value; new_value = b.y_min_ + advance_.dy_; if ( new_value < y_min_ ) y_min_ = new_value; new_value = b.x_max_ + advance_.dx_; if ( new_value > x_max_ ) x_max_ = new_value; new_value = b.y_max_ + advance_.dy_; if ( new_value > y_max_ ) y_max_ = new_value; advance_.dx_ += b.advance_.dx_; advance_.dy_ += b.advance_.dy_; return *this; } }; //! During tesselation of a polygonal Face (outline, filled or solid), //! an object which implements this interface can be used to compute a //! different color for each vertex. class ColorTess { public: //! Compute a color for this position. Note that the position is //! in the glyph's local coordinate system. //! \param p vertex position in glyph's local coordinate system. Argument is //! a GLdouble[3]. //! \return GLfloat[4] (RGBA) color specification. virtual GLfloat* color ( GLdouble* p ) = 0; virtual ~ColorTess(); }; //! During tesselation of a polygonal Face (outline, filled or solid), //! an object which implements this interface can be used to compute a //! different texture coordinate for each vertex. class TextureTess { public: //! Compute a texture coordinate for this position. Note that the //! position is in the glyph's local coordinate system. //! \param p vertex position in glyph's local coordinate system. Argument is //! a GLdouble[3]. //! \return GLfloat[2] (s,t) texture coordinates. virtual GLfloat* texCoord ( GLdouble* p ) = 0; virtual ~TextureTess(); }; //! The argument to setCharacterDisplayLists is an STL vector of //! OpenGL display list names (GLuints). typedef std::vector DisplayLists; //! A convenience definition of an iterator for display list vectors. typedef DisplayLists::const_iterator DLCI; //! A convenience definition of an iterator for display list vectors. typedef DisplayLists::iterator DLI; //! A face (aka font) used to render text with OpenGL. /*! * This is an abstract class, but it does define most the functions that * you are likely to call to manipulate the rendering of the text. */ class Face { public: //! Thanks to the standard formerly known as PHIGS. Horizontal text //! justification constants. enum HorizontalJustification { LEFT, //!< Left justified justification of text ORIGIN, //!< Natural origin alignment of text (default) CENTER, //!< Center justified alignment of text RIGHT //!< Right justified alignment of text }; //! Thanks to the standard formerly known as PHIGS. Vertical text //! justification constants. enum VerticalJustification { BOTTOM, //!< Descender alignment of text BASELINE, //!< Baseline alignment of text (default) MIDDLE, //!< Centered alignment of text TOP //!< Ascender justification of text }; //! Control how OpenGL display lists are created for individual glyphs. //! The default mode is to create display lists for each glyph as it //! is requested. Therefore, the Face drawing routines cannot themselves //! be called from within an open display list. In IMMEDIATE mode, //! cached glyphs will be drawn if available, otherwise the FreeType //! data for a glyph is re-rendered each time. enum GlyphCompileMode { COMPILE, //!< Compile new glyphs when seen for the first time. IMMEDIATE //!< Do not \em create display lists for glyphs. }; private: //! We allow a Face to be constructed either from a file name //! or passed in as an already opened FreeType FT_Face. In the case //! of the later (already opened), we don't close the FT_Face on //! destruction. This way you can share FT_Faces between related //! OGLFT faces. Also, we're experimenting with being able to use //! multiple FT_Faces in a single OGLFT Face, so this is represented //! as a data structure. struct FaceData { FT_Face face_; bool free_on_exit_; FaceData ( FT_Face face, bool free_on_exit = true ) : face_( face ), free_on_exit_( free_on_exit ) {} }; protected: //! The FreeType face - experimentally, this is now an array of //! faces so that we can handle a wider range of UNICODE points //! in case a face doesn't cover the points of interest. std::vector< FaceData > faces_; //! Did a font load OK? bool valid_; //! Glyph display list creation mode. enum GlyphCompileMode compile_mode_; //! Nominal point size. float point_size_; //! Display resolution in pixels per inch. FT_UInt resolution_; //! Does rendering text affect the MODELVIEW matrix? bool advance_; //! Foreground color (I really wanted to avoid this, but not really //! possible without state queries, which you can't put into //! display lists. Anyway, you'll be able to get even more fancy //! by passing in a function to map the color with, so why balk at //! this?) GLfloat foreground_color_[4]; //! Background color (what modes would use this?) GLfloat background_color_[4]; //! PHIGS-like horizontal positioning of text. enum HorizontalJustification horizontal_justification_; //! PHIGS-like vertical positioning of text. enum VerticalJustification vertical_justification_; //! Rotate an entire string in the Z plane GLfloat string_rotation_; //! Let the user decide which character to use as the rotation reference. //! Use "o" by default, I suppose. FT_UInt rotation_reference_glyph_; //! The rotation reference character could be in any face. FT_Face rotation_reference_face_; //! These are the translation offsets provided by the rotation reference //! character; for whom, we've discovered, only the Y position is relevant. GLfloat rotation_offset_y_; //! Type of the cache of defined glyph to display list mapping. typedef std::map< FT_UInt, GLuint > GlyphDLists; //! A convenience definition of the iterator over the glyph to display //! list map. typedef GlyphDLists::const_iterator GDLCI; //! A convenience definition of the iterator over the glyph to display //! list map. typedef GlyphDLists::iterator GDLI; //! Cache of defined glyph display lists GlyphDLists glyph_dlists_; //! The user can supply an array of display list which are invoked //! before each glyph is rendered. DisplayLists character_display_lists_; public: /*! * Construct a Face by loading a font from the given file. * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Face ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * Alternatively, the user may have already opened a face and just * wants to draw with it. This is useful for Multiple Master fonts or * combining multiple files to increase UNICODE point coverage. * \param face open Freetype FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Face ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * Deleting a Face frees its FreeType face (and anything else it's * styles have allocated). */ virtual ~Face ( void ); /*! * Let the user test to see if the font was loaded OK. * \return true if the FT_Face was successfully created. */ bool isValid ( void ) const { return valid_; } /*! * Add another FT_Face to the OGLFT Face. Generally used to add more * coverage of UNICODE points (at least that's the plan). This * routine takes a filename and takes ownership of the FT_Face. * \param filename name of file containing font face data. * \return true if face was successfully added. */ bool addAuxiliaryFace ( const char* filename ); /*! * Add another FT_Face to the OGLFT Face. Generally used to add more * coverage of UNICODE points (at least that's the plan). This * routine takes an already open FT_Face. The user is responsible * for clean up. * \param face open FreeType FT_Face * \return true if face was successfully added. */ bool addAuxiliaryFace ( FT_Face face ); /*! * By default, each time a new character is seen, its glyph is rendered * into a display list. This means that a display list cannot already * be open (since OpenGL doesn't allow nested display list creation). * Rendering can be set into immediate mode in which case glyphs are * rendered from display lists if available, but are otherwise generated * anew each time. * \param compile_mode the new compile mode. */ void setCompileMode ( enum GlyphCompileMode compile_mode ) { compile_mode_ = compile_mode; } /*! * \return the current glyph compile mode. */ enum GlyphCompileMode compileMode ( void ) const { return compile_mode_; } /*! * For the rasterized styles (Monochrome, Grayscale, Translucent, Texture), * glyphs are rendered at the pixel size given by: * * point_size [pts] * / 72 [pts/in] * resolution [dots/in] = [dots]. * * For the polygon styles (Outline, Filled, Solid), the "nominal" size of * the glyphs is: * * point_size[pts] / 72 [pts/in] * resolution [dots/in] * / units_per_EM [font unit/EM] = [dots * EM]. * * If the MODELVIEW and PROJECTION matrices are such that one screen pixel * corresponds to one modeling unit, then polygonal Faces will * be the same size as raster Faces. * * Note that changing the point size after Face creation will invalidate * the cache of OpenGL display lists and any other information which * the individual styles have cached. * \param point_size the new point size in points (1/72-th inch). */ void setPointSize ( float point_size ); /*! * \return the current point size. */ float pointSize ( void ) { return point_size_; } /*! * For the rasterized styles (Monochrome, Grayscale, * Translucent, Texture), the exact rendered size of the glyphs depends on * the resolution of the display (as opposed to the polygon styles * whose size is controlled by the viewing matrices). The Texture * style is slightly different because the glyphs are texture-mapped * onto an arbitrary rectangle; here, the resolution only controls * how accurately the glyph is rendered. * \param resolution the resolution in DPI (dots per inch). */ void setResolution ( FT_UInt resolution ); /*! * \return the current raster resolution. */ FT_UInt resolution ( void ) { return resolution_; } /*! * If advance is true, then the changes made to the MODELVIEW matrix * to render a string are allowed to remain. Otherwise, the library * pushes the current MODELVIEW matrix onto the matrix stack, renders * the string and then pops it off again. Rendering a character always * modifies the MODELVIEW matrix. * \param advance whether or not the MODELVIEW matrix should be left * translated by the advancement of a rendered string. */ void setAdvance ( bool advance ) { advance_ = advance; } /*! * \return the advance value. */ bool advance ( void ) const { return advance_; } /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param red the red component of the foreground color. * \param green the green component of the foreground color. * \param blue the blue component of the foreground color. * \param alpha the alpha component of the foreground color. */ void setForegroundColor ( GLfloat red = 0.0, GLfloat green = 0.0, GLfloat blue = 0.0, GLfloat alpha = 1.0 ); /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param foreground_color an array of 4 values corresponding to the * red, green, blue and alpha components of the foreground color. */ void setForegroundColor ( const GLfloat foreground_color[4] ); #ifndef OGLFT_NO_WX /*! * This is the nominal color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the foreground * color invalidates the glyph cache. * \param foreground_color the foreground color as an unsigned int. */ void setForegroundColor ( const wxColour foreground_color ); #endif /* OGLFT_NO_WX */ /*! * \return the red component of the foreground color */ GLfloat foregroundRed ( void ) const { return foreground_color_[R]; } /*! * \return the green component of the foreground color */ GLfloat foregroundGreen ( void ) const { return foreground_color_[G]; } /*! * \return the blue component of the foreground color */ GLfloat foregroundBlue ( void ) const { return foreground_color_[B]; } /*! * \return the alpha component of the foreground color */ GLfloat foregroundAlpha ( void ) const { return foreground_color_[A]; } /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param red the red component of the background color. * \param green the green component of the background color. * \param blue the blue component of the background color. * \param alpha the alpha component of the background color. */ void setBackgroundColor ( GLfloat red = 1.0, GLfloat green = 1.0, GLfloat blue = 1.0, GLfloat alpha = 0.0 ); /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param background_color an array of 4 values corresponding to the * red, green, blue and alpha components of the background color. */ void setBackgroundColor ( const GLfloat background_color[4] ); #ifndef OGLFT_NO_WX /*! * This is the nominal background color of the glyphs. A lot of other things * can alter what you actually see! Note that changing the background * color invalidates the glyph cache. * \param background_color the background color as an unsigned int. */ void setBackgroundColor ( const wxColour background_color ); #endif /* OGLFT_NO_WX */ /*! * \return the red component of the background color */ GLfloat backgroundRed ( void ) const { return background_color_[R]; } /*! * \return the green component of the background color */ GLfloat backgroundGreen ( void ) const { return background_color_[G]; } /*! * \return the blue component of the background color */ GLfloat backgroundBlue ( void ) const { return background_color_[B]; } /*! * \return the alpha component of the background color */ GLfloat backgroundAlpha ( void ) const { return background_color_[A]; } /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of z rotation. */ virtual void setCharacterRotationZ ( GLfloat character_rotation_z ) = 0; /*! * \return the character rotation in the Z direction. */ virtual GLfloat characterRotationZ ( void ) const = 0; /*! * The z rotation angle needs a center. Nominate a character whose * center is to be the center of rotation. By default, use "o". * \param c rotation reference character. */ void setCharacterRotationReference ( unsigned char c ); /*! * Rotate an entire string through the given angle (in the Z plane only). * (Somewhat pointless for the vector styles since you can do mostly * the same thing with the MODELVIEW transform, however, for what its * worth, this routine uses the FreeType rotation function to compute * the "proper" metrics for glyph advance.) * \param string_rotation angle in degrees of z rotation. */ void setStringRotation ( GLfloat string_rotation ); /*! * \return the (Z plane) string rotation angle. */ GLfloat stringRotation ( void ) const { return string_rotation_; } /*! * Set the horizontal justification. * \param horizontal_justification the new horizontal justification. */ void setHorizontalJustification ( enum HorizontalJustification horizontal_justification ) { horizontal_justification_ = horizontal_justification; } /*! * \return the horizontal justification. */ enum HorizontalJustification horizontalJustification ( void ) const { return horizontal_justification_; } /*! * Set the vertical justification. * \param vertical_justification the new vertical justification */ void setVerticalJustification ( enum VerticalJustification vertical_justification ) { vertical_justification_ = vertical_justification; } /*! * \return the vertical justification. */ enum VerticalJustification verticaljustification ( void ) const { return vertical_justification_; } /*! * Specify an OpenGL display list to be invoked before * each character in a string. Face makes a copy of the argument. Pass * an empty DisplayLists to disable this feature. * \param character_display_lists STL vector containing a display * list to invoke before each glyph in a string is drawn. */ void setCharacterDisplayLists ( const DisplayLists& character_display_lists ) { character_display_lists_ = character_display_lists; } /*! * \return a reference to the array of character display lists. This is * the live list as stored in the Face. */ DisplayLists& characterDisplayLists ( void ) { return character_display_lists_; } /*! * \return the height (i.e., line spacing) at the current character size. */ virtual double height ( void ) const = 0; /*! * Compute the bounding box info for a character. * \param c the (latin1) character to measure. * \return the bounding box of c. */ virtual BBox measure ( unsigned char c ) = 0; #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Compute the bounding box info for a character. * \param c the (UNICODE) character to measure. * \return the bounding box of c. */ virtual BBox measure ( const wxChar c ) = 0; #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Compute the bounding box info for a string. * \param s the (latin1) string to measure. * \return the bounding box of s. */ virtual BBox measure ( const char* s ); /*! * Compute the bounding box info for a string without conversion * to modeling coordinates. * \param s the (latin1) string to measure. * \return the bounding box of s. */ virtual BBox measureRaw ( const char* s ); #ifndef OGLFT_NO_WX /*! * Compute the bounding box info for a string. * \param s the (UNICODE) string to measure. * \return the bounding box of s. */ virtual BBox measure ( const wxString& s ); /*! * Compute the bounding box info for a real number formatted as specified. * \param format (see draw for valid formats) * \param number real number. * \return the bounding box of the formatted number. */ virtual BBox measure ( const wxString& format, double number ); /*! * Compute the bounding box info for a string without conversion * to modeling coordinates. * \param s the (UNICODE) string to measure. * \return the bounding box of s. */ virtual BBox measureRaw ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Compile a string into an OpenGL display list for later * rendering. Essentially, the string is rendered at the origin * of the current MODELVIEW. Note: no other display lists should * be open when this routine is called. Also, the Face does not * keep track of these lists, so you must delete them in order * to recover the memory. * \param s the (latin1) string to compile. * \return the display list name for the string. */ GLuint compile ( const char* s ); #ifndef OGLFT_NO_WX /*! * Compile a string into an OpenGL display list for later * rendering. Essentially, the string is rendered at the origin * of the current MODELVIEW. Note: no other display lists should * be open when this routine is called. Also, the Face does not * keep track of these lists, so you must delete them in order * to recover the memory. * \param s the (UNICODE) string to compile. * \return the display list name for the string. */ GLuint compile ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Compile a single character (glyph) into an OpenGL display list * for later rendering. The Face \em does keep track of these * display lists, so do not delete them. * \param c the (latin1) character to compile. * \return the display list name for the character. */ GLuint compile ( unsigned char c ); #ifndef OGLFT_NO_WX /*! * Compile a single character (glyph) into an OpenGL display list * for later rendering. The Face \em does keep track of these * display lists, so do not delete them. * \param c the (UNICODE) character to compile. * \return the display list name for the character. */ GLuint compile ( const wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw a (latin1) string using the current MODELVIEW matrix. If * advance is true, then the final glyph advance changes to the * MODELVIEW matrix are left in place. * \param s the (latin1) string to draw. */ void draw ( const char* s ); #ifndef OGLFT_NO_WX /*! * Draw a (UNICODE) string using the current MODELVIEW * matrix. If advance is true, then the final glyph advance * changes to the MODELVIEW matrix are left in place. * \param s the (UNICODE) string to draw. */ void draw ( const wxString& s ); #endif /* OGLFT_NO_WX */ /*! * Draw the character using the current MODELVIEW matrix. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw a * string if you don't want the MODELVIEW matrix changed. * \param c the (latin1) character to draw. */ void draw ( unsigned char c ); #ifndef OGLFT_NO_WX /*! * Draw the character using the current MODELVIEW matrix. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw a * string if you don't want the MODELVIEW matrix changed. * \param c the (UNICODE) character to draw. */ void draw ( const wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw the (latin1) character at the given 2D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param c the (latin1) character to draw. */ void draw ( GLfloat x, GLfloat y, unsigned char c ); /*! * Draw the (latin1) character at the given 3D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param c the (latin1) character to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, unsigned char c ); #ifndef OGLFT_NO_WX /*! * Draw the (UNICODE) character at the given 2D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param c the (UNICODE) character to draw. */ void draw ( GLfloat x, GLfloat y, wxChar c ); /*! * Draw the (UNICODE) character at the given 3D point. Note that * the MODELVIEW matrix is modified by the glyph advance. Draw * a string if you don't want the MODELVIEW matrix changed. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param c the (UNICODE) character to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, wxChar c ); #endif /* OGLFT_NO_WX */ /*! * Draw a string at the given 2D point. * \param x the X position. * \param y the Y position. * \param s the (latin1) string to draw. */ void draw ( GLfloat x, GLfloat y, const char* s ); /*! * Draw a string at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param s the (latin1) string to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const char* s ); #ifndef OGLFT_NO_WX /*! * Draw a string at the given 2D point. * \param x the X position. * \param y the Y position. * \param s the (UNICODE) string to draw. */ void draw ( GLfloat x, GLfloat y, const wxString& s ); /*! * Draw a string at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param s the (UNICODE) string to draw. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& s ); /*! * Draw a real number per the given format at the given 2D point. * \param x the X position. * \param y the Y position. * \param format Like a typical printf format. Regular text is printed * while a '%' introduces the real number's format. Includes the * following format flags: * \li %%x.yf - floating point in field width x and precision y * \li %%x.ye - scientific notation in field width x and precision y * \li %%x.yg - pick best floating or scientific in field width x and * precision y * \li %%p - draw as a proper fraction, e.g. 1 1/2. Note: this currently * requires a special font which encodes glyphs to be drawn for the * numerator and demoninator in the UNICODE Private Area (0xE000). * * \param number the numeric value. */ void draw ( GLfloat x, GLfloat y, const wxString& format, double number ); /*! * Draw a real number per the given format at the given 3D point. * \param x the X position. * \param y the Y position. * \param z the Z position. * \param format Like a typical printf format. Regular text is printed * while a '%' introduces the real number's format. Includes the * following format flags: * \li %%x.yf - floating point in field width x and precision y * \li %%x.ye - scientific notation in field width x and precision y * \li %%x.yg - pick best floating or scientific in field width x and * precision y * \li %%p - draw as a proper fraction, e.g. 1 1/2. Note: this currently * requires a special font which encodes glyphs to be drawn for the * numerator and demoninator in the UNICODE Private Area (0xE000). * * \param number the numeric value. */ void draw ( GLfloat x, GLfloat y, GLfloat z, const wxString& format, double number ); #endif /* OGLFT_NO_WX */ /*! * \return the nominal ascender from the face. This is in "notional" * units. */ int ascender ( void ) { return faces_.front().face_->ascender; } /*! * \return the nominal descender from the face. This is in "notional" * units. */ int descender ( void ) { return faces_.front().face_->descender; } protected: // The various styles override these routines //! Some styles, in particular the Texture, need specialized steps //! to compile a glyph into an OpenGL display list. //! \param face the FT_Face containing the glyph. //! \param glyph_index the index of the glyph in face. //! \return the display list of the compiled glyph. virtual GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ) = 0; //! Each style implements its own glyph rendering routine. //! \param face the FT_Face containing the glyph. //! \param glyph_index the index of the glyph in face. virtual void renderGlyph ( FT_Face face, FT_UInt glyph_index ) = 0; //! There is a slight different between the way in which the polygonal //! and raster styles select the character size for FreeType to generate. virtual void setCharSize ( void ) = 0; //! The different styles have different caching needs (well, really only //! the texture style currently has more than the display list cache). virtual void clearCaches ( void ) = 0; //! The polygonal and raster styles compute different values for the //! Z rotation offset. (It's in integer pixels for the raster styles and //! in floating point pixels for the polygonal styles.) virtual void setRotationOffset ( void ) = 0; private: void init ( void ); BBox measure_nominal ( const char* s ); #ifndef OGLFT_NO_WX BBox measure_nominal ( const wxString& s ); wxString format_number ( const wxString& format, double number ); #endif /* OGLFT_NO_WX */ }; //! This is the base class of the polygonal styles: outline, filled and solid. /*! * In the polygonal styles, the detailed geometric outlines of the glyphs * are extracted from the font file and rendered as polygons. */ class Polygonal : public Face { protected: //! Angle of rotation of characters relative to text orientation. struct { bool active_; GLfloat x_, y_, z_; } character_rotation_; //! The tessellation of curves is pretty crude; regardless of length, //! use the same number of increments (and as near as I can tell, this //! is more than sufficient unless the glyph takes up the whole screen). unsigned int tessellation_steps_; //! When curves are tessellated, we use the forward difference algorithm //! from Foley and van Dam for parametric curves (pg. 511 of 2nd Ed. in C). //! So, the step size, delta, is in the parametric variable which is always //! on the interval [0,1]. Therefore, delta = 1/tessellation_steps double delta_, delta2_, delta3_; //! For vector rendition modes, FreeType is allowed to generate the //! lines and arcs at the original face definition resolution. To //! get to the proper glyph size, the vertices are scaled before //! they're passed to the GLU tessellation routines. double vector_scale_; //! Callbacks for FreeType glyph decomposition into outlines FT_Outline_Funcs interface_; //! Default number of steps to break TrueType and Type1 arcs into. //! (Note: this looks good to me, anyway) static const unsigned int DEFAULT_TESSELLATION_STEPS = 4; /*! * VertexInfo is a private class which is used by the decomposition and * tessellation routines to store the vertices and other data of the glyph's * outline. Because of the "impedance mismatch" between the crazy * 26.6 fixed point format of the FreeType library (well, don't * blame them; look at what they have to work with) and OpenGL's preference * for double precision, this simple vector has two constructors: one * for 26.6 format and one for direct floating point. * * VertexInfo also contains (optional) pointers to objects which * implement the ColorTess and TextureTess interfaces. */ struct VertexInfo { double v_[3]; //!< Why is this double precision? Because the second //!< argument to the routine gluTessVertex is a pointer //!< to an array of doubles. Otherwise, we could use //!< single precision everywhere. //! The user can provide a ColorTess object which computes a color //! for each tesselated vertex. ColorTess* color_tess_; //! The user can provide a TextureTess object which computes texture //! coordinates for each tesselated vertex. TextureTess* texture_tess_; //! Default constructor just initializes Vertex to zero. //! \param color_tess optional color tesselation object. //! \param texture_tess optional texture tesselation object. VertexInfo ( ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = v_[Y] = v_[Z] = 0.; } /*! * Construct a Vertex from a point in a FreeType contour. * \param ft_v a FreeType FT_Vector, normally passed into the * the decomposition callbacks. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( FT_Vector* ft_v, ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = (double)( ft_v->x / 64 ) + (double)( ft_v->x % 64 ) / 64.; v_[Y] = (double)( ft_v->y / 64 ) + (double)( ft_v->y % 64 ) / 64.; v_[Z] = 0.; } /*! * Construct a Vertex from a 2D point. * \param p 2D array of doubles. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( double p[2], ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = p[X]; v_[Y] = p[Y]; v_[Z] = 0.; } /*! * Construct a Vertex from a 2D point. * \param x the X coordinate. * \param y the Y coordinate. * \param color_tess optional color tesselation object. * \param texture_tess optional texture tesselation object. */ VertexInfo ( double x, double y, ColorTess* color_tess = 0, TextureTess* texture_tess = 0 ) : color_tess_( color_tess ), texture_tess_( texture_tess ) { v_[X] = x; v_[Y] = y; v_[Z] = 0.; } //! Treat the Vertex like a vector: Normalize its length in the //! usual way. void normalize ( void ) { double length = sqrt( v_[X] * v_[X] + v_[Y] * v_[Y] + v_[Z] * v_[Z] ); v_[X] /= length; v_[Y] /= length; v_[Z] /= length; } }; /*! * Buffers the last control point as the outline of a glyph is * decomposed. */ VertexInfo last_vertex_; //! Normally, we will consider a list of vertices. typedef std::list< VertexInfo* > VertexInfoList; //! A convenience definition of the iterator over the list of vertices. typedef VertexInfoList::const_iterator VILCI; //! A convenience definition of the iterator over the list of vertices. typedef VertexInfoList::iterator VILI; /*! * As curves are decomposed out of the glyph, their vertices are passed * along to the GLU tessellation functions. These vertices have to * hang around until gluTessContourEnd is called. */ VertexInfoList vertices_; //! As GLU tessellation proceeds, new contours open with every call //! to moveTo. bool contour_open_; //! The user can provide a ColorTess object which computes a color //! for each tesselated vertex. ColorTess* color_tess_; //! The user can provide a TextureTess object which computes texture //! coordinates for each tesselated vertex. TextureTess* texture_tess_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Polygonal ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open Freetype FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Polygonal ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The Polygonal destructor doesn't do anything in particular. */ virtual ~Polygonal ( void ); /*! * TrueType and Type1 files describe the boundaries of glyphs with * quadratic and cubic curves, respectively. Since OpenGL can only really * draw straight lines, these curves have to be tessellated. The * number of steps used is fixed for all glyphs in the face, * but can be changed through this method. Other notes: This value is * only applicable for Outline, Filled and Solid styles. Changing this value * invalidates any cached display lists for glyphs in this face. * * \param tessellation_steps the number of steps to tessellate each curved * segment of a glyph outline. */ void setTessellationSteps ( unsigned int tessellation_steps ); /*! * \return the number of steps used to tessellate curves in the * polygonal font types. */ unsigned int tessellationSteps ( void ) const { return tessellation_steps_; } /*! * Set the individual character rotation in the X direction. * \param character_rotation_x angle in degrees of the X rotation. */ void setCharacterRotationX ( GLfloat character_rotation_x ); /*! * Set the individual character rotation in the Y direction. * \param character_rotation_y angle in degrees of the Y rotation. */ void setCharacterRotationY ( GLfloat character_rotation_y ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of the Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the X direction. */ GLfloat characterRotationX ( void ) const { return character_rotation_.x_; } /*! * \return the character rotation in the Y direction. */ GLfloat characterRotationY ( void ) const { return character_rotation_.y_; } /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_.z_; } /*! * Set an optional color tesselation object. Each tesselated vertex * is passed to this object, which returns a color for that position * in space. * \param color_tess the color tesselation object. */ void setColorTess ( ColorTess* color_tess ); /*! * \return the color tesselation object. */ ColorTess* colorTess ( void ) const { return color_tess_; } /*! * Set an optional texture coordinate tesselation object. Each * tessellated vertex is passed to this object, which returns * texture coordinates for that position in space. * \param texture_tess the texture coordinate tesselation object. */ void setTextureTess ( TextureTess* texture_tess ); /*! * \return the texture coordinate tesselation object. */ TextureTess* textureTess ( void ) const { return texture_tess_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a polygonal face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a polygonal face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ private: void init ( void ); void setCharSize ( void ); void setRotationOffset ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); protected: void clearCaches ( void ); }; //! Render text as a polygon outline. /*! * \image html outline_class.png * Text is drawn as an outline of each glyph. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to a given size. Usually the outline is drawn in the foreground * color, however, you can specify a ColorTess object to provide a color * for each vertex individually. You can also use * the per-glyph display list functionality to alter the attributes * of each glyph. * * The only complexity to this style is selecting the point size. Since * the outlines are drawn as a polygon, they are subject to the MODELVIEW * transformation. The point size is nominally chosen to be the same as a * raster image generated at the given resolution. Some experimentation * with point size and resolution may be necessary to achieve the desired * results. */ class Outline : public Polygonal { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Outline ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Outline ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Outline ( void ); private: void init ( void ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); static int moveToCallback ( FT_Vector* to, Outline* outline ); static int lineToCallback ( FT_Vector* to, Outline* outline ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Outline* outline ); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Outline* outline ); }; //! Render text as a filled polygons. /*! * \image html filled_class.png * Each glyph is drawn as a filled polygon. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to the given size. Then the GLU tessellation routines are used * to tessellate the contours into polygons (well, triangles). By default, * these are drawn in GL_FILL polygon mode, but any other polygon mode * can be specified. * * Usually, the polygons are drawn only in the * foreground color, however, you may supply ColorTess and TextureTess * objects which can alter the color or texture coordinates of each * vertex individually. You can also use * the per-glyph display list functionality to alter the attributes * of each glyph. * * The only complexity to this style is selecting the point size. Since * the glyphs are drawn as polygons, they are subject to the viewing and * modeling transformations. The point size is nominally chosen to be the same * as a raster image generated at the given resolution. Some experimentation * with point size and resolution may be necessary to achieve the desired * results. */ class Filled : public Polygonal { //! 3D tessellation of glyphs is accomplished through the standard GLU //! routines GLUtesselator* tess_obj_; //! A place to store any extra vertices generated by the Combine callback VertexInfoList extra_vertices_; protected: //! Offset the glyph in the Z direction. Solely for the Solid subclass. //! Until I can figure out how to shift the glyph outside the context //! of this class, I guess this has got to stay (but it is redundant //! to extrusion_.depth_) GLfloat depth_offset_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Filled ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Filled ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor deletes the GLU tessellation object allocated in * in the constructor. */ virtual ~Filled ( void ); /*! * \return the list of extra vertices created by the GLU tessellation * combine callback. */ VertexInfoList& extraVertices ( void ) { return extra_vertices_; } protected: void renderGlyph ( FT_Face face, FT_UInt glyph_index ); private: void init ( void ); static int moveToCallback ( FT_Vector* to, Filled* filled ); static int lineToCallback ( FT_Vector* to, Filled* filled ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Filled* filled); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Filled* filled ); static void vertexCallback ( VertexInfo* vertex ); static void beginCallback ( GLenum which ); static void endCallback ( void ); static void combineCallback ( GLdouble coords[3], void* vertex_data[4], GLfloat weight[4], void** out_data, Filled* filled ); static void errorCallback ( GLenum error_code ); }; #ifndef OGLFT_NO_SOLID //! Render text as solid letters. /*! * \image html solid_class.png * Each glyph is drawn as a closed solid. The contours are extracted * from the font file through FreeType. FreeType is used to scale the * contours to the given size. The contours are passed to the GLE * tubing and extrusion library to create the sides of the solid. * Then the GLU tessellation routines are used * to tessellate the contours into polygons which are used to cap the sides. * * Currently, the solids are drawn only in the foreground color. However, * proper surface normals are computed so that the solids may be lighted. * Eventually, you'll be able to supply a color/texture * coordinate function to make glyphs more interesting. Note that you can use * the per-glyph display list functionality to alter each glyph individually. * * Another TODO item is to improve the interaction with GLE. Currently, * you can only create block solids. Eventually, we'll have the capability * add bevels and rounds to the edges of the solids and maybe even more * general extrusions (like, for example, the swooshing letters in the title * sequence of the Salkind's 1978 "Superman" movie). * * The only complexity to this style is selecting the point size. Since * the glyphs are drawn as a collection of polygons, they are subject to the * viewing and modeling transformations. The point size is nominally chosen * to be the same as a raster image generated at the given resolution. * Some experimentation with point size and resolution may be necessary to * achieve the desired results. */ class Solid : public Filled { private: //! Callbacks for FreeType glyph decomposition into outlines (note: this //! has the same name as the variable in Polygonal, but it is distinct since //! the routines for the GLE contouring are different from the Filled //! GLU tessellation routines. This may be too confusing?) FT_Outline_Funcs interface_; //! For now, you can only get block extruded solids static const unsigned int N_POLYLINE_PTS = 4; //! Data for the gleExtrusion routine struct glePoint2D { double p_[2]; glePoint2D ( double p[2] ) { p_[X] = p[X]; p_[Y] = p[Y]; } glePoint2D ( double x, double y ) { p_[X] = x; p_[Y] = y; } glePoint2D ( const VertexInfo& v ) { p_[X] = v.v_[X]; p_[Y] = v.v_[Y]; } }; //! Collect all the output from GLE in one of these structures. struct { double depth_; struct { int x_, y_; } normal_sign_; std::vector< glePoint2D > contour_; std::vector< glePoint2D > contour_normals_; gleDouble up_[3]; int n_polyline_pts_; gleDouble point_array_[N_POLYLINE_PTS][3]; } extrusion_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Solid ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Solid ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Solid ( void ); /*! * Set the thickness of the solid * \param depth thickness of the solid in model units. */ void setDepth ( double depth ); /*! * \return the solid extrusion depth. */ double depth ( void ) const { return extrusion_.depth_; } private: // It would be nice if C/C++ had real matrix notation (like Perl!) void assign ( gleDouble a[3], double x, double y, double z ) { a[X] = x; a[Y] = y; a[Z] = z; } void init ( void ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); static int moveToCallback ( FT_Vector* to, Solid* solid ); static int lineToCallback ( FT_Vector* to, Solid* solid ); static int conicToCallback ( FT_Vector* control, FT_Vector* to, Solid* solid ); static int cubicToCallback ( FT_Vector* control1, FT_Vector* control2, FT_Vector* to, Solid* solid ); }; #endif /* OGLFT_NO_SOLID */ //! This is the base class of the raster styles: bitmap, grayscale and //! translucent. /*! * In the raster styles, FreeType's rasterizer is used to generate raster * images of each glyph. */ class Raster : public Face { protected: //! Raster glyph can be rotated in the Z plane (in addition to the string //! rotation). GLfloat character_rotation_z_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Raster ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Raster ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ virtual ~Raster ( void ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_z_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a raster face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a raster face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ private: void init ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); void setCharSize ( void ); void setRotationOffset ( void ); void clearCaches ( void ); }; //! Render text as a monochrome raster image. /*! * \image html monochrome_class.png * This is more or less the standard way in which text is intended to * be rendered in OpenGL. It uses the \c glBitmap call to draw a sequence * of monochrome bitmaps. Since FreeType is capable of rotating glyphs * created from faces based on vector outlines, you can rotate (in the Z plane) * both the text string as well as the individual characters in the string. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for monochrome glyphs to be rendered properly. * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Monochrome : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Monochrome ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Monochrome ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Monochrome ( void ); private: GLubyte* invertBitmap ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as a grayscale raster image. /*! * \image html grayscale_class.png * The Grayscale style is similar to the Monochrome style. FreeType is used * to rasterize a glyph and this is then drawn on the screen using * \c glDrawPixels. The FreeType rasterization is done in anti-aliased mode. * When Grayscale draws the glyph image, the resulting text is blended * smoothly from the foreground color to the background color. The background * of the glyph is opaque, so this style works best over a solid background. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for grayscale glyphs to be rendered properly. * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Grayscale : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Grayscale ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Grayscale ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Grayscale ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as a translucent raster image. /*! * \image html translucent_class.png * The Translucent style is similar to the Grayscale style. FreeType is used * to rasterize a glyph and this is then drawn on the screen using * \c glDrawPixels. The FreeType rasterization is done in anti-aliased mode. * When Translucent draws the glyph image, the grayscale levels provided * by FreeType are used as Alpha values in the raster image. This allows * the glyphs to be smoothly blended into complicated backgrounds. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for translucent glyphs to be rendered properly. * Additionally, you need to activate blending in order to achieve the * translucent effect: * \code * glEnable( GL_BLEND ); * glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); * \endcode * * Another note: It is helpful to have the option * \c GL_RASTER_POSITION_UNCLIPPED_IBM available if you intend to draw text * at MODELVIEW based positions, otherwise if the initial text position is off * the screen, the entire image is clipped. */ class Translucent : public Raster { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Translucent ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Translucent ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The destructor doesn't do anything in particular. */ ~Translucent ( void ); private: GLubyte* invertPixmapWithAlpha ( const FT_Bitmap& bitmap ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); }; //! This is the base class of the texture style. class Texture : public Face { protected: //! Angle of rotation of characters relative to text orientation. struct { bool active_; //!< Is character rotation non-zero? (faster than checking all //!< the other values.) GLfloat x_, //!< Angle of rotation in the X direction. y_, //!< Angle of rotation in the Y direction. z_; //!< Angle of rotation in the Z direction. } character_rotation_; /*! * The textured glyphs need a little bit more infrastructure to draw * since we have to remember the size of the texture object itself * (at least implicitly). Also, we don't want to create any more * texture objects than we have to, so they are always cached. */ struct TextureInfo { GLuint texture_name_; //!< A bound texture name is an integer in OpenGL. FT_Int left_bearing_, //!< The left bearing of the transformed glyph. bottom_bearing_; //!< The bottom bearing of the transformed glyph. int width_, //!< The 2**l width of the texture. height_; //!< The 2**m height of the texture. GLfloat texture_s_, //!< The fraction of the texture width occupied //!< by the glyph. texture_t_; //!< The fraction of the texture height occupied //!< by the glyph. FT_Vector advance_; //!< The advance vector of the transformed glyph. }; //! Type of the cache of defined glyph to texture objects mapping. typedef std::map< FT_UInt, TextureInfo > GlyphTexObjs; //! A convenience definition of the iterator over the glyph to texture //! object map. typedef GlyphTexObjs::const_iterator GTOCI; //! A convenience definition of the iterator over the glyph to texture //! object map. typedef GlyphTexObjs::iterator GTOI; //! Cache of defined glyph texture objects. GlyphTexObjs glyph_texobjs_; public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Texture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ Texture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The texture destructor doesn't really do anything. */ virtual ~Texture ( void ); /*! * Set the individual character rotation in the X direction. * \param character_rotation_x angle in degrees of X rotation. */ void setCharacterRotationX ( GLfloat character_rotation_x ); /*! * Set the individual character rotation in the Y direction. * \param character_rotation_y angle in degrees of Y rotation. */ void setCharacterRotationY ( GLfloat character_rotation_y ); /*! * Set the individual character rotation in the Z direction. * \param character_rotation_z angle in degrees of Z rotation. */ void setCharacterRotationZ ( GLfloat character_rotation_z ); /*! * \return the character rotation in the X direction. */ GLfloat characterRotationX ( void ) const { return character_rotation_.x_; } /*! * \return the character rotation in the Y direction. */ GLfloat characterRotationY ( void ) const { return character_rotation_.y_; } /*! * \return the character rotation in the Z direction. */ GLfloat characterRotationZ ( void ) const { return character_rotation_.z_; } /*! * \return the height (i.e., line spacing) at the current character size. */ double height ( void ) const; /*! * Implement measuring a character in a texture face. * \param c the (latin1) character to measure * \return the bounding box of c. */ BBox measure ( unsigned char c ); #ifdef _UNICODE #ifndef OGLFT_NO_WX /*! * Implement measuring a character in a texture face. * \param c the (UNICODE) character to measure * \return the bounding box of c. */ BBox measure ( const wxChar c ); #endif /* OGLFT_NO_WX */ #endif /* _UNICODE */ /*! * Measure a string of characters. Note: currently, this merely * calls Face's measure routine. * \param s string of (latin1) characters to measure * \return the bounding box of s. */ BBox measure ( const char* s ) { return Face::measure( s ); } #ifndef OGLFT_NO_WX /*! * Implement measuring a formatted number * \param format the format string * \param number to value to format * \return the bounding box of the formatted number */ BBox measure ( const wxString& format, double number ) { return Face::measure( format, number ); } #endif /* OGLFT_NO_WX */ protected: /*! * OpenGL texture maps have to be a power of 2 in width and height (including * apparently 1 = 2**0 ). This function returns the next higher power of * 2 of the argument. If the argument is already a power of 2, you just * get that back. * \param a width or height of an image. * \return value of a rounded to nearest, higher power of 2. */ unsigned int nearestPowerCeil ( unsigned int a ); /*! * This is all that distinguishes the various texture styles. Each subclass * defines this method as appropriate. Once the texture is bound, it * is rendered the same in all cases. * \param face FT_Face containing the glyph to render. * \param glyph_index index of glyph in face. */ virtual void bindTexture ( FT_Face face, FT_UInt glyph_index ) = 0; private: void init ( void ); void setCharSize ( void ); void setRotationOffset ( void ); GLuint compileGlyph ( FT_Face face, FT_UInt glyph_index ); void renderGlyph ( FT_Face face, FT_UInt glyph_index ); void clearCaches ( void ); }; //! Render text as texture mapped monochrome quads. /*! * \image html texture_monochrome_class.png * This style is similar to the Monochrome raster style, except instead * of using \c glBitmap to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Monochrome. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do take up more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. */ class MonochromeTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ MonochromeTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ MonochromeTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The monochrome texture destructor doesn't really do anything. */ ~MonochromeTexture ( void ); private: GLubyte* invertBitmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as texture mapped grayscale quads. /*! * \image html texture_grayscale_class.png * This style is similar to the Grayscale raster style, except instead * of using \c glDrawPixels to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Grayscale. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do consume more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. */ class GrayscaleTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ GrayscaleTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ GrayscaleTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The grayscale texture destructor doesn't really do anything. */ ~GrayscaleTexture ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; //! Render text as texture mapped translucent quads. /*! * \image html texture_translucent_class.png * This style is similar to the Translucent raster style, except instead * of using \c glDrawPixels to draw the raster image, the image is used * as a texture map on a quad. If drawing is confined to the Z plane, * then you will see no difference between this style and Translucent. * However, because the quad is a 3D object, it can be transformed * by the usual modeling operations; so, texture mapped glyphs can be * rotated in the X and Y directions as well as Z direction. Also, * if the viewing (or modeling) transformation has a non-unity scale or * shear, the glyphs will also be scaled or sheared (unlike the raster * styles). Also, there is no problem with clipping glyphs which lie * off the screen; texture mapped quads are properly clipped to the * screen boundary. * * If this is not convincing enough, the performance of texture mapped * glyphs is generally as good as or better than the equivalent * raster style (especially with hardware texture acceleration). However, * they do consume more memory space. * * Note: you \em must call * \code * glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); * \endcode * before drawing in order for textured glyphs to be rendered properly. * Additionally, you need to activate blending in order to achieve the * translucent effect: * \code * glEnable( GL_BLEND ); * glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); * \endcode */ class TranslucentTexture : public Texture { public: /*! * \param filename the filename which contains the font face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ TranslucentTexture ( const char* filename, float point_size = 12, FT_UInt resolution = 100 ); /*! * \param face open FreeType FT_Face. * \param point_size the initial point size of the font to generate. A point * is essentially 1/72th of an inch. Defaults to 12. * \param resolution the pixel density of the display in dots per inch (DPI). * Defaults to 100 DPI. */ TranslucentTexture ( FT_Face face, float point_size = 12, FT_UInt resolution = 100 ); /*! * The translucent texture destructor doesn't really do anything. */ ~TranslucentTexture ( void ); private: GLubyte* invertPixmap ( const FT_Bitmap& bitmap, int* width, int* height ); void bindTexture ( FT_Face face, FT_UInt glyph_index ); }; } // Close OGLFT namespace #endif /* OGLFT_H */ therion-5.4.1/loch/lxOptDlg.cxx000066400000000000000000000117761307545355600164300ustar00rootroot00000000000000#include "lxWX.h" #include "lxGUI.h" // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standard libraries enum { LXOD_START = 6000, LXOD_INIT_DIR_PATH, LXOD_INIT_DIR_BROWSE, LXOD_GLASSES, LXOD_END, }; class lxOptionsDlg : public wxDialog { public: long tmp; lxFrame * m_lxframe; lxOptionsDlg(wxWindow * parent); void OnCommand(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(lxOptionsDlg, wxDialog) //EVT_UPDATE_UI_RANGE(LXOD_START, LXOD_END, lxOptionsDlg::OnUpdateUI) EVT_BUTTON(LXOD_INIT_DIR_BROWSE, lxOptionsDlg::OnCommand) END_EVENT_TABLE() lxOptionsDlg::lxOptionsDlg(wxWindow * parent) : wxDialog(parent, wxID_ANY, wxString(_("Options"))) { this->m_lxframe = (lxFrame *) parent; wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("General options")), wxVERTICAL); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Default data files directory")), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxTextCtrl(this, LXOD_INIT_DIR_PATH, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxTextValidator(0, &this->m_lxframe->m_iniDirectory)), 1, wxALIGN_CENTER | lxNOTTOP, lxBORDER); lxBoxSizer->Add(new wxButton(this, LXOD_INIT_DIR_BROWSE, _("Browse...")), 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Default stereo colors")), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); wxChoice * ch = new wxChoice(this, LXOD_GLASSES, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxGenericValidator(&this->m_lxframe->m_iniStereoGlasses)); ch->Append(_("red & cyan")); ch->Append(_("red & green")); ch->Append(_("red & blue")); ch->Append(_("yellow & blue")); ch->Append(_("cyan & red")); ch->Append(_("green & red")); ch->Append(_("blue & red")); ch->Append(_("blue & yellow")); ch->Append(_("remember last used channels")); lxStaticBoxSizer->Add(ch, 0, wxEXPAND | lxNOTTOP, lxBORDER); lxStaticBoxSizer->Add( new wxStaticText(this, wxID_ANY, _("Measurement system")), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxRadioButton(this, wxID_ANY, _("Metric"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_lxframe->m_iniUnits, LXUNITS_METRIC)), 0, wxALIGN_LEFT | lxNOTTOP, lxBORDER); lxBoxSizer->Add(new wxRadioButton(this, wxID_ANY, _("Imperial"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniUnits, LXUNITS_IMPERIAL)), 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | wxALL, lxBORDER); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Walls extrapolation")), wxVERTICAL); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Do not extrapolate walls"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_NONE)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Extrapolate only files without walls information"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_ALL_ONLY)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxStaticBoxSizer->Add( new wxRadioButton(this, wxID_ANY, _("Extrapolate all missing walls information"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_lxframe->m_iniWallsInterpolate, LXWALLS_INTERP_MISSING)), 0, wxALIGN_LEFT | wxALL, lxBORDER); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | lxNOTTOP, lxBORDER); // Bottom line lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxBoxSizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALIGN_CENTER | wxRIGHT | wxBOTTOM, lxBORDER); sizerAll->Add(lxBoxSizer, 0, wxALIGN_RIGHT); lxFButton(wxID_CANCEL)->SetFocus(); SetSizer(sizerAll); sizerAll->SetSizeHints(this); sizerAll->Fit(this); this->CentreOnParent(); } void lxOptionsDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case LXOD_INIT_DIR_BROWSE: { wxDirDialog dd(this); dd.SetPath(lxFTextCtrl(LXOD_INIT_DIR_PATH)->GetValue()); if (dd.ShowModal() == wxID_OK) { lxFTextCtrl(LXOD_INIT_DIR_PATH)->SetValue(dd.GetPath()); } } break; // case wxID_OK: // this->m_lxframe->m_iniDirectory = lxFTextCtrl(LXOD_INIT_DIR_PATH)->GetValue(); // this->m_lxframe->m_iniStereoGlasses = lxFChoice(LXOD_GLASSES)->GetSelection(); // break; } } void lxShowOptionsDialog(wxWindow * parent) { lxOptionsDlg od(parent); od.ShowModal(); } therion-5.4.1/loch/lxOptDlg.h000066400000000000000000000005251307545355600160430ustar00rootroot00000000000000/** * @file lxSScene.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxOptDlg_h #define lxOptDlg_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries void lxShowOptionsDialog(wxWindow * parent); #endif therion-5.4.1/loch/lxPres.cxx000066400000000000000000000240061307545355600161360ustar00rootroot00000000000000// Standard libraries #ifndef LXDEPCHECK #include #include #include #endif //LXDEPCHECK - standard libraries #include "lxPres.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif enum { lxPR_LIST = 4000, }; BEGIN_EVENT_TABLE(lxPresentDlg, wxMiniFrame) EVT_BUTTON(wxID_ANY, lxPresentDlg::OnCommand) EVT_BUTTON(wxID_CLOSE, lxPresentDlg::OnCommand) EVT_LISTBOX(lxPR_LIST, lxPresentDlg::OnCommand) EVT_MOVE(lxPresentDlg::OnMove) EVT_CLOSE(lxPresentDlg::OnClose) END_EVENT_TABLE() bool lxPresentDlg::SavePresentation(bool saveas) { bool rv = true; wxString defFName = _T("presentation.lxp"); if (this->m_fileName.empty()) { saveas = true; } else { defFName = this->m_fileName; } if (this->m_fileDir.empty()) { this->m_fileDir = this->m_mainFrame->m_fileDir; } if (saveas) { wxFileDialog dialog( this, _("Save presentation"), wxEmptyString, defFName, _("Loch presentation file (*.lxp)|*.lxp"), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { this->m_fileName = dialog.GetPath(); this->m_fileDir = dialog.GetDirectory(); saveas = false; } else { rv = false; } } if (!saveas) { this->m_mainFrame->m_pres->Save(this->m_fileName); this->m_changed = false; } return rv; } void lxPresentDlg::LoadPresentation() { if (this->m_fileDir.empty()) { this->m_fileDir = this->m_mainFrame->m_fileDir; } if (this->m_changed) { wxMessageDialog dlg(this, _("Presentation was changed. Save it?"), _("Warning"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxICON_EXCLAMATION | wxCENTRE); switch (dlg.ShowModal()) { case wxID_CANCEL: return; case wxID_YES: if (!this->SavePresentation()) return; break; } } wxFileDialog dialog ( this, _("Open"), wxEmptyString, wxEmptyString, _("Loch presentation file (*.lxp)|*.lxp") ); dialog.SetDirectory(this->m_fileDir); dialog.CentreOnParent(); if (dialog.ShowModal() == wxID_OK) { this->ResetPresentation(); this->m_fileName = dialog.GetPath(); this->m_fileDir = dialog.GetDirectory(); this->m_mainFrame->m_pres->Load(dialog.GetPath()); this->UpdateList(); } } void lxPresentDlg::ResetPresentation(bool save) { wxXmlNode * r; if (save && this->m_changed) { wxMessageDialog dlg(this, _("Presentation was changed. Save it?"), _("Warning"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxICON_EXCLAMATION | wxCENTRE); switch (dlg.ShowModal()) { case wxID_CANCEL: return; case wxID_YES: if (!this->SavePresentation()) return; break; } } r = new wxXmlNode(wxXML_ELEMENT_NODE, _T("LochPresentation")); this->m_mainFrame->m_pres->SetRoot(r); this->m_changed = false; this->m_posLBox->Clear(); } void lxPresentDlg::UpdateList() { this->m_posLBox->Clear(); wxXmlNode * n; if (this->m_mainFrame->m_pres->GetRoot() != NULL) { n = this->m_mainFrame->m_pres->GetRoot()->GetChildren(); long time = 0; while (n != NULL) { if (n->GetName() == _T("Scene")) { this->m_posLBox->AppendString(wxString::Format(_T("%04d"), time)); time++; } n = n->GetNext(); } } } void lxPresentDlg::UpdateControls() { int sel = this->m_posLBox->GetSelection(); size_t count = this->m_posLBox->GetCount(); wxWindow::FindWindowById(LXMENU_PRESUPDATE, this)->Enable(count > 0); wxWindow::FindWindowById(LXMENU_PRESDELETE, this)->Enable(count > 0); wxWindow::FindWindowById(LXMENU_PRESMOVEDOWN, this)->Enable((count > 0) && (sel != wxNOT_FOUND) && (size_t(sel + 1) < count)); wxWindow::FindWindowById(LXMENU_PRESMOVEUP, this)->Enable((count > 0) && (sel != wxNOT_FOUND) && (sel > 0)); } void lxPresentDlg::OnCommand(wxCommandEvent& event) { wxXmlNode * n, * r, * p; long c, sel; r = this->m_mainFrame->m_pres->GetRoot(); if (r == NULL) { this->ResetPresentation(); r = this->m_mainFrame->m_pres->GetRoot(); } switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->TogglePresentationDlg(); break; case LXMENU_PRESMARK: p = new wxXmlNode(wxXML_ELEMENT_NODE, _T("Scene")); this->m_mainFrame->setup->SaveToXMLNode(p); sel = this->m_posLBox->GetSelection(); if (sel == wxNOT_FOUND) { r->AddChild(p); sel = this->m_posLBox->GetCount(); } else { n = r->GetChildren(); c = 0; while (n != NULL) { if (n->GetName() == _T("Scene")) { if (sel == c) { r->InsertChildAfter(p, n); sel++; break; } c++; } n = n->GetNext(); } } this->UpdateList(); this->m_posLBox->Select(sel); this->UpdateControls(); //this->m_posLBox->EnsureVisible(this->m_posLBox->GetCount()-1); this->m_changed = true; break; case LXMENU_PRESMOVEDOWN: case LXMENU_PRESMOVEUP: case LXMENU_PRESDELETE: case LXMENU_PRESUPDATE: case lxPR_LIST: n = r->GetChildren(); p = NULL; c = 0; if (event.GetId() == lxPR_LIST) sel = event.GetSelection(); else { sel = this->m_posLBox->GetSelection(); if (sel == wxNOT_FOUND) break; } while (n != NULL) { if (n->GetName() == _T("Scene")) { if (sel == c) { switch (event.GetId()) { case lxPR_LIST: this->m_mainFrame->setup->LoadFromXMLNode(n); this->m_mainFrame->canvas->ForceRefresh(); this->m_mainFrame->UpdateM2TB(); break; case LXMENU_PRESUPDATE: this->m_mainFrame->setup->SaveToXMLNode(n); break; case LXMENU_PRESDELETE: r->RemoveChild(n); delete n; this->UpdateList(); if (this->m_posLBox->GetCount() > 0) this->m_posLBox->Select(this->m_posLBox->GetCount() > c ? c : c-1); break; case LXMENU_PRESMOVEUP: if (c > 0) { r->RemoveChild(n); r->InsertChild(n, p); this->UpdateList(); this->m_posLBox->Select(c-1); } break; case LXMENU_PRESMOVEDOWN: if ((c+1) < this->m_posLBox->GetCount()) { p = n->GetNext(); r->RemoveChild(n); r->InsertChildAfter(n, p); this->UpdateList(); this->m_posLBox->Select(c+1); } break; } break; } c++; p = n; } n = n->GetNext(); } break; case LXMENU_PRESSAVE: this->SavePresentation(); break; case LXMENU_PRESSAVEAS: this->SavePresentation(true); break; case LXMENU_PRESNEW: this->ResetPresentation(true); break; case LXMENU_PRESOPEN: this->LoadPresentation(); this->m_posLBox->Select(0); break; } this->UpdateControls(); } void lxPresentDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->TogglePresentationDlg(); } void lxPresentDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { this->m_toolBoxPosition.Save(); } lxPresentDlg::lxPresentDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _("Presentation"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { this->m_toolBoxPosition.Init(this, parent, 0, 8, 8); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; this->m_fileName = wxEmptyString; wxBoxSizer * sizerFrame = new wxBoxSizer(wxVERTICAL); wxBoxSizer * sizerTop = new wxBoxSizer(wxHORIZONTAL); lxPanel = new wxPanel(this, wxID_ANY); this->m_posLBox = new wxListBox(lxPanel, lxPR_LIST); wxBoxSizer * controlSizer = new wxBoxSizer(wxVERTICAL); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESMARK, _("Mark")), 0, wxALIGN_RIGHT | wxALL); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESUPDATE, _("Update")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESMOVEUP, _("Move up")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESMOVEDOWN, _("Move down")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESDELETE, _("Delete")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( \ new wxStaticLine(lxPanel, wxID_ANY), \ 0, wxBOTTOM | wxTOP | wxEXPAND, lxBORDER); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESNEW, _("New")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESOPEN, _("Open...")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESSAVE, _("Save")), 0, wxALIGN_RIGHT | lxNOTTOP); controlSizer->Add( new wxButton(lxPanel, LXMENU_PRESSAVEAS, _("Save as...")), 0, wxALIGN_RIGHT | lxNOTTOP); sizerTop->Add(m_posLBox, 1, wxTOP | wxBOTTOM | wxLEFT | wxEXPAND, lxBORDER); lxBoxSizer = new wxBoxSizer(wxVERTICAL); lxBoxSizer->Add(controlSizer, 1, wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT); sizerTop->Add(lxBoxSizer, 0, wxALL | wxEXPAND, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); wxSize mfs = this->m_mainFrame->GetSize(); this->SetSize(mfs.GetWidth() / 4, mfs.GetHeight() / 2); this->UpdateControls(); } therion-5.4.1/loch/lxPres.h000066400000000000000000000016201307545355600155600ustar00rootroot00000000000000/** * @file lxPres.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxPres_h #define lxPres_h // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standard libraries #include "lxWX.h" enum { LXPRES_POSLB, }; class lxPresentDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; wxString m_fileName, m_fileDir; bool m_changed; class lxFrame * m_mainFrame; class wxListBox * m_posLBox; lxPresentDlg(wxWindow *parent); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); void ResetPresentation(bool save = false); bool SavePresentation(bool saveas = false); void LoadPresentation(); void UpdateList(); void UpdateControls(); private: DECLARE_EVENT_TABLE() }; #endif therion-5.4.1/loch/lxR2D.c000066400000000000000000000372341307545355600152430ustar00rootroot00000000000000/* ** Simple example of rendering to a Windows DIB (Device Independent Bitmap) */ #include "lxR2D.h" #include #include #include #if !defined(M_PI) #define M_PI 3.14159265F #endif #define colorIndexMode FALSE #define doubleBuffered FALSE #define renderToDIB TRUE struct _R2DCTX { int winWidth, winHeight; HDC hDC; HGLRC hGLRC; HPALETTE hPalette; HBITMAP hBitmap; }; /* Struct used to manage color ramps */ struct R2DcolorIndexState { GLfloat amb[3]; /* ambient color / bottom of ramp */ GLfloat diff[3]; /* diffuse color / middle of ramp */ GLfloat spec[3]; /* specular color / top of ramp */ GLfloat ratio; /* ratio of diffuse to specular in ramp */ GLint indexes[3]; /* where ramp was placed in palette */ }; /* ** Each entry in this array corresponds to a color ramp in the ** palette. The indexes member of each struct is updated to ** reflect the placement of the color ramp in the palette. */ #define NUM_COLORS (sizeof(R2Dcolors) / sizeof(R2Dcolors[0])) struct R2DcolorIndexState R2Dcolors[] = { { { 0.0F, 0.0F, 0.0F }, { 0.1F, 0.6F, 0.3F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, { { 0.0F, 0.0F, 0.0F }, { 0.0F, 0.2F, 0.5F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, { { 0.0F, 0.05F, 0.05F }, { 0.6F, 0.0F, 0.8F }, { 1.0F, 1.0F, 1.0F }, 0.75F, { 0, 0, 0 }, }, }; /*****************************************************************/ void R2DsetupDIB(R2DContext * ctx) { HDC hDC = ctx->hDC; BITMAPINFO *bmInfo; BITMAPINFOHEADER *bmHeader; UINT usage; VOID *base; int bmiSize; int bitsPerPixel; bmiSize = sizeof(*bmInfo); bitsPerPixel = GetDeviceCaps(hDC, BITSPIXEL); switch (bitsPerPixel) { case 8: /* bmiColors is 256 WORD palette indices */ bmiSize += (256 * sizeof(WORD)) - sizeof(RGBQUAD); break; case 16: /* bmiColors is 3 WORD component masks */ bmiSize += (3 * sizeof(DWORD)) - sizeof(RGBQUAD); break; case 24: case 32: default: /* bmiColors not used */ break; } bmInfo = (BITMAPINFO *) calloc(1, bmiSize); bmHeader = &bmInfo->bmiHeader; bmHeader->biSize = sizeof(*bmHeader); bmHeader->biWidth = ctx->winWidth; bmHeader->biHeight = ctx->winHeight; bmHeader->biPlanes = 1; /* must be 1 */ bmHeader->biBitCount = (WORD) bitsPerPixel; bmHeader->biXPelsPerMeter = 0; bmHeader->biYPelsPerMeter = 0; bmHeader->biClrUsed = 0; /* all are used */ bmHeader->biClrImportant = 0; /* all are important */ switch (bitsPerPixel) { case 8: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_PAL_COLORS; /* bmiColors is 256 WORD palette indices */ { WORD *palIndex = (WORD *) &bmInfo->bmiColors[0]; int i; for (i=0; i<256; i++) { palIndex[i] = (WORD)i; } } break; case 16: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_RGB_COLORS; /* bmiColors is 3 WORD component masks */ { DWORD *compMask = (DWORD *) &bmInfo->bmiColors[0]; compMask[0] = 0xF800; compMask[1] = 0x07E0; compMask[2] = 0x001F; } break; case 24: case 32: default: bmHeader->biCompression = BI_RGB; bmHeader->biSizeImage = 0; usage = DIB_RGB_COLORS; /* bmiColors not used */ break; } ctx->hBitmap = CreateDIBSection(hDC, bmInfo, usage, &base, NULL, 0); if (ctx->hBitmap == NULL) { (void) MessageBox(WindowFromDC(hDC), "Failed to create DIBSection.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } SelectObject(hDC, ctx->hBitmap); free(bmInfo); } void R2DsetupPalette(R2DContext * ctx) { HDC hDC = ctx->hDC; PIXELFORMATDESCRIPTOR pfd; LOGPALETTE* pPal; int pixelFormat = GetPixelFormat(hDC); int paletteSize; DescribePixelFormat(hDC, pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); /* ** Determine if a palette is needed and if so what size. */ if (pfd.dwFlags & PFD_NEED_PALETTE) { paletteSize = 1 << pfd.cColorBits; } else if (pfd.iPixelType == PFD_TYPE_COLORINDEX) { paletteSize = 4096; } else { return; } pPal = (LOGPALETTE*) malloc(sizeof(LOGPALETTE) + paletteSize * sizeof(PALETTEENTRY)); pPal->palVersion = 0x300; pPal->palNumEntries = (WORD) paletteSize; if (pfd.iPixelType == PFD_TYPE_RGBA) { /* ** Fill the logical paletee with RGB color ramps */ int redMask = (1 << pfd.cRedBits) - 1; int greenMask = (1 << pfd.cGreenBits) - 1; int blueMask = (1 << pfd.cBlueBits) - 1; int i; for (i=0; ipalPalEntry[i].peRed = (BYTE)( (((i >> pfd.cRedShift) & redMask) * 255) / redMask); pPal->palPalEntry[i].peGreen = (BYTE)( (((i >> pfd.cGreenShift) & greenMask) * 255) / greenMask); pPal->palPalEntry[i].peBlue = (BYTE)( (((i >> pfd.cBlueShift) & blueMask) * 255) / blueMask); pPal->palPalEntry[i].peFlags = 0; } } else { /* ** Fill the logical palette with color ramps. ** ** Set up the logical palette so that it can be realized ** into the system palette as an identity palette. ** ** 1) The default static entries should be present and at the right ** location. The easiest way to do this is to grab them from ** the current system palette. ** ** 2) All non-static entries should be initialized to unique values. ** The easiest way to do this is to ensure that all of the non-static ** entries have the PC_NOCOLLAPSE flag bit set. */ int numRamps = NUM_COLORS; int rampSize = (paletteSize - 20) / numRamps; int extra = (paletteSize - 20) - (numRamps * rampSize); int i, r; /* ** Initialize static entries by copying them from the ** current system palette. */ GetSystemPaletteEntries(hDC, 0, paletteSize, &pPal->palPalEntry[0]); /* ** Fill in non-static entries with desired colors. */ for (r=0; rpalPalEntry[rampBase]; int diffSize = (int) (rampSize * R2Dcolors[r].ratio); int specSize = rampSize - diffSize; for (i=0; ipalPalEntry[index]; pe->peRed = (BYTE) 0; pe->peGreen = (BYTE) 0; pe->peBlue = (BYTE) 0; pe->peFlags = PC_NOCOLLAPSE; } } ctx->hPalette = CreatePalette(pPal); free(pPal); if (ctx->hPalette) { SelectPalette(hDC, ctx->hPalette, FALSE); RealizePalette(hDC); } } void R2DsetupPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), /* size of this pfd */ 1, /* version num */ PFD_SUPPORT_OPENGL, /* support OpenGL */ 0, /* pixel type */ 0, /* 8-bit color depth */ 0, 0, 0, 0, 0, 0, /* color bits (ignored) */ 0, /* no alpha buffer */ 0, /* alpha bits (ignored) */ 0, /* no accumulation buffer */ 0, 0, 0, 0, /* accum bits (ignored) */ 16, /* depth buffer */ 0, /* no stencil buffer */ 0, /* no auxiliary buffers */ PFD_MAIN_PLANE, /* main layer */ 0, /* reserved */ 0, 0, 0, /* no layer, visible, damage masks */ }; int SelectedPixelFormat; BOOL retVal; pfd.cColorBits = (BYTE) GetDeviceCaps(hDC, BITSPIXEL); /* if (colorIndexMode) { */ /* pfd.iPixelType = PFD_TYPE_COLORINDEX; */ /* } else { */ pfd.iPixelType = PFD_TYPE_RGBA; /* } */ /* if (doubleBuffered) { */ /* pfd.dwFlags |= PFD_DOUBLEBUFFER; */ /* } */ /* if (renderToDIB) { */ pfd.dwFlags |= PFD_DRAW_TO_BITMAP; /* } else { */ /* pfd.dwFlags |= PFD_DRAW_TO_WINDOW; */ /* } */ SelectedPixelFormat = ChoosePixelFormat(hDC, &pfd); if (SelectedPixelFormat == 0) { (void) MessageBox(WindowFromDC(hDC), "Failed to find acceptable pixel format.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } retVal = SetPixelFormat(hDC, SelectedPixelFormat, &pfd); if (retVal != TRUE) { (void) MessageBox(WindowFromDC(hDC), "Failed to set pixel format.", "OpenGL application error", MB_ICONERROR | MB_OK); exit(1); } } R2DContext * R2DCreate(int width, int height) { R2DContext * ctx = (R2DContext *) calloc(1, sizeof(R2DContext)); if (ctx) { ctx->winWidth = width; ctx->winHeight = height; ctx->hDC = CreateCompatibleDC(NULL); R2DsetupDIB(ctx); R2DsetupPixelFormat(ctx->hDC); R2DsetupPalette(ctx); ctx->hGLRC = wglCreateContext(ctx->hDC); } return ctx; } void R2DMakeCurrent(R2DContext * ctx) { if (ctx) { wglMakeCurrent(ctx->hDC, ctx->hGLRC); } } void R2DDestroy(R2DContext * ctx) { if (ctx) { if (ctx->hGLRC) { wglMakeCurrent(NULL, NULL); wglDeleteContext(ctx->hGLRC); } DeleteDC(ctx->hDC); free(ctx); } } /* Stand alone stuff */ #ifndef LXWIN32 HDC hDCFrontBuffer; void (*idleFunc)(void); R2DContext * global_ctx; void drawTorus(void) { int numMajor = 32; int numMinor = 24; float majorRadius = 0.6F; float minorRadius = 0.2F; double majorStep = 2.0F*M_PI / numMajor; double minorStep = 2.0F*M_PI / numMinor; int i, j; for (i=0; iwinWidth > global_ctx->winHeight) { GLfloat aspect = (GLfloat) global_ctx->winWidth / (GLfloat) global_ctx->winHeight; glFrustum(-0.5F*aspect, 0.5F*aspect, -0.5F, 0.5F, 1.0F, 3.0F); } else { GLfloat aspect = (GLfloat) global_ctx->winHeight / (GLfloat) global_ctx->winWidth; glFrustum(-0.5F, 0.5F, -0.5F*aspect, 0.5F*aspect, 1.0F, 3.0F); } glMatrixMode(GL_MODELVIEW); } void init(void) { GLfloat matShine = 20.00F; GLfloat light0Pos[4] = { 0.70F, 0.70F, 1.25F, 0.00F }; glClearColor(R2Dcolors[2].diff[0], R2Dcolors[2].diff[1], R2Dcolors[2].diff[2], 1.0F); glClearIndex((GLfloat) R2Dcolors[2].indexes[1]); setProjection(); glTranslatef(0.0F, 0.0F, -2.0F); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, matShine); glLightfv(GL_LIGHT0, GL_POSITION, light0Pos); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); if (!colorIndexMode) { glEnable(GL_COLOR_MATERIAL); } } void doRedraw(void) { static GLfloat x, y, z; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef(x, 1.0F, 0.0F, 0.0F); glRotatef(y, 0.0F, 1.0F, 0.0F); glRotatef(z, 0.0F, 0.0F, 1.0F); drawTorus(); glPopMatrix(); if (renderToDIB) { glFinish(); BitBlt(hDCFrontBuffer, 0, 0, global_ctx->winWidth, global_ctx->winHeight, global_ctx->hDC, 0, 0, SRCCOPY); GdiFlush(); } else { SwapBuffers(hDCFrontBuffer); } x += 5.0F; if (x > 360.0F) x -= 360.0F; y += 7.0F; if (y > 360.0F) y -= 360.0F; z += 9.0F; if (z > 360.0F) z -= 360.0F; } void redraw(void) { idleFunc = doRedraw; } void resize(void) { setProjection(); glViewport(0, 0, global_ctx->winWidth, global_ctx->winHeight); } LRESULT APIENTRY WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_SIZE: if (global_ctx->hGLRC) { //global_ctx->winWidth = (int) LOWORD(lParam); //global_ctx->winHeight = (int) HIWORD(lParam); resize(); return 0; } case WM_PALETTECHANGED: /* ** Update palette mapping if this *is not* the active window. */ if (global_ctx->hGLRC && global_ctx->hPalette && (HWND) wParam != hWnd) { UnrealizeObject(global_ctx->hPalette); SelectPalette(global_ctx->hDC, global_ctx->hPalette, FALSE); RealizePalette(global_ctx->hDC); redraw(); return 0; } break; case WM_QUERYNEWPALETTE: /* ** Update palette mapping if this *is* the active window. */ if (global_ctx->hGLRC && global_ctx->hPalette) { UnrealizeObject(global_ctx->hPalette); SelectPalette(global_ctx->hDC, global_ctx->hPalette, FALSE); RealizePalette(global_ctx->hDC); redraw(); return TRUE; } break; case WM_PAINT: /* ** Update the window. Don't use the device context returned by ** BeginPaint as it won't have the right palette selected into it. */ if (global_ctx->hGLRC) { PAINTSTRUCT ps; BeginPaint(hWnd, &ps); redraw(); EndPaint(hWnd, &ps); return 0; } break; case WM_CHAR: switch ((int)wParam) { case VK_ESCAPE: DestroyWindow(hWnd); return 0; case VK_SPACE: if (idleFunc) { idleFunc = NULL; } else { idleFunc = doRedraw; } default: break; } break; default: break; } /* Deal with any unprocessed messages */ return DefWindowProc(hWnd, message, wParam, lParam); } int APIENTRY WinMain( HINSTANCE hCurrentInst, HINSTANCE hPreviousInst, LPSTR lpszCmdLine, int nCmdShow) { WNDCLASS wndClass; HWND hWnd; MSG msg; char *className = "OpenGL"; char *windowName = "Simple DIB Example"; int winX = 0, winY = 0; R2DContext * ctx = R2DCreate(512, 512); global_ctx = ctx; /* Define and register a window class */ wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hCurrentInst; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = className; RegisterClass(&wndClass); /* Create a window of the previously defined class */ hWnd = CreateWindow( className, /* Window class's name */ windowName, /* Title bar text */ WS_OVERLAPPEDWINDOW | /* The window's style */ WS_CLIPCHILDREN | WS_CLIPSIBLINGS, winX, winY, /* Position */ global_ctx->winWidth, global_ctx->winHeight, /* Size */ NULL, /* Parent window's handle */ NULL, /* Menu handle */ hCurrentInst, /* Instance handle */ NULL); /* No additional data */ /* Map the window to the screen */ ShowWindow(hWnd, nCmdShow); /* Force the window to repaint itself */ UpdateWindow(hWnd); /* ** Set up for OpenGL rendering. Bind the rendering context to ** the same device context that the palette will be selected into. */ hDCFrontBuffer = GetDC(hWnd); R2DMakeCurrent(ctx); init(); idleFunc = doRedraw; /* Process Messages */ while (1) { /* execute the idle function while there are no messages to process */ while (idleFunc && PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == FALSE) { (*idleFunc)(); } if (GetMessage(&msg, NULL, 0, 0) != TRUE) { break; } TranslateMessage(&msg); DispatchMessage(&msg); } /* ** Finish OpenGL rendering. */ idleFunc = NULL; R2DDestroy(ctx); ReleaseDC(hWnd, hDCFrontBuffer); return (int) msg.wParam; } #endif /* Stand alone stuff */ therion-5.4.1/loch/lxR2D.h000066400000000000000000000005451307545355600152430ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif /*Standard libraries*/ #ifndef LXDEPCHECK #include #endif /*LXDEPCHECK - standard libraries*/ typedef struct _R2DCTX R2DContext; extern R2DContext *R2DCreate(int width, int height); extern void R2DMakeCurrent(R2DContext * ctx); extern void R2DDestroy(R2DContext * ctx); #ifdef __cplusplus } #endif therion-5.4.1/loch/lxR2P.c000066400000000000000000000110421307545355600152440ustar00rootroot00000000000000/*Standard libraries*/ #ifndef LXDEPCHECK #include #define GLX_GLXEXT_PROTOTYPES #include #include #include #include #endif /*LXDEPCHECK - standard libraries*/ #include "lxR2P.h" struct _R2PCTX { GLXContext ctx; Pixmap pm; XVisualInfo *visinfo; GLXPixmap glxpm; Display *dpy; }; void R2Pmake_context(R2PContext * r2pc) { const int sbAttrib[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None }; const int dbAttrib[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, GLX_DOUBLEBUFFER, None }; int scrnum; scrnum = DefaultScreen( r2pc->dpy ); r2pc->visinfo = glXChooseVisual( r2pc->dpy, scrnum, (int *) sbAttrib ); if (!r2pc->visinfo) { r2pc->visinfo = glXChooseVisual( r2pc->dpy, scrnum, (int *) dbAttrib ); if (!r2pc->visinfo) { printf("Error: couldn't get an RGB visual\n"); exit(1); } } /* need indirect context */ r2pc->ctx = glXCreateContext( r2pc->dpy, r2pc->visinfo, NULL, False ); if (!r2pc->ctx) { printf("Error: glXCreateContext failed\n"); exit(-1); } } void R2Pmake_pixmap(R2PContext * r2pc, unsigned int width, unsigned int height) { r2pc->pm = XCreatePixmap( r2pc->dpy, RootWindow( r2pc->dpy, DefaultScreen( r2pc->dpy )), width, height, r2pc->visinfo->depth ); if (!r2pc->pm) { printf("Error: XCreatePixmap failed\n"); exit(-1); } r2pc->glxpm = glXCreateGLXPixmap( r2pc->dpy, r2pc->visinfo, r2pc->pm ); if (!r2pc->glxpm) { printf("Error: GLXCreateGLXPixmap failed\n"); exit(-1); } } R2PContext *R2PCreate(int width, int height) { R2PContext * c = (R2PContext *) calloc(1, sizeof(R2PContext)); if (c) { c->dpy = XOpenDisplay(NULL); R2Pmake_context(c); R2Pmake_pixmap(c, (unsigned int) width, (unsigned int) height); } return c; } void R2PMakeCurrent(R2PContext * c) { if (c) { glXMakeCurrent( c->dpy, c->glxpm, c->ctx ); } } void R2PDestroy(R2PContext * c) { if (c) { glXDestroyGLXPixmap(c->dpy, c->glxpm); XFreePixmap(c->dpy, c->pm); glXDestroyContext(c->dpy, c->ctx); XCloseDisplay(c->dpy); free(c); } } #ifndef LXLINUX static GC gc; R2PContext * global_ctx; static Window make_rgb_window( Display *dpy, unsigned int width, unsigned int height ) { XSetWindowAttributes attr; unsigned long mask; Window win; int scrnum; Window root; scrnum = DefaultScreen( dpy ); root = RootWindow( dpy, scrnum ); /* window attributes */ attr.background_pixel = 0; attr.border_pixel = 0; /* TODO: share root colormap if possible */ attr.colormap = XCreateColormap( dpy, root, global_ctx->visinfo->visual, AllocNone); attr.event_mask = StructureNotifyMask | ExposureMask; mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask; win = XCreateWindow( dpy, root, 0, 0, width, height, 0, global_ctx->visinfo->depth, InputOutput, global_ctx->visinfo->visual, mask, &attr ); /* make an X GC so we can do XCopyArea later */ gc = XCreateGC( global_ctx->dpy, win, 0, NULL ); return win; } static void event_loop( Display *dpy, GLXPixmap pm ) { XEvent event; while (1) { XNextEvent( dpy, &event ); switch (event.type) { case Expose: printf("Redraw\n"); /* copy the image from GLXPixmap to window */ XCopyArea( dpy, pm, event.xany.window, /* src, dest */ gc, 0, 0, 300, 300, /* gc, src pos, size */ 0, 0 ); /* dest pos */ break; case ConfigureNotify: /* nothing */ break; } } } int main( int argc, char *argv[] ) { Window win; global_ctx = R2PCreate(300, 300); win = make_rgb_window( global_ctx->dpy, 300, 300 ); R2PMakeCurrent(global_ctx); printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); /* Render an image into the pixmap */ glShadeModel( GL_FLAT ); glClearColor( 0.5, 0.5, 0.5, 1.0 ); glClear( GL_COLOR_BUFFER_BIT ); glViewport( 0, 0, 300, 300 ); glOrtho( -1.0, 1.0, -1.0, 1.0, -1.0, 1.0 ); glColor3f( 0.0, 1.0, 1.0 ); glRectf( -0.75, -0.75, 0.75, 0.75 ); glFlush(); XMapWindow( global_ctx->dpy, win ); event_loop( global_ctx->dpy, global_ctx->pm ); R2PDestroy(global_ctx); return 0; } #endif therion-5.4.1/loch/lxR2P.h000066400000000000000000000003701307545355600152530ustar00rootroot00000000000000#ifdef __cplusplus extern "C" { #endif typedef struct _R2PCTX R2PContext; extern R2PContext *R2PCreate(int width, int height); extern void R2PMakeCurrent(R2PContext * ctx); extern void R2PDestroy(R2PContext * ctx); #ifdef __cplusplus } #endif therion-5.4.1/loch/lxRender.cxx000066400000000000000000000766101307545355600164540ustar00rootroot00000000000000/** * @file lxRender.cxx * Loch printing implementation. */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { // stupid JPEG library #endif #include #ifdef __cplusplus } #endif #endif //LXDEPCHECK - standard libraries #include "lxRender.h" #include "lxWX.h" #include "lxGLC.h" #include "lxGUI.h" #include "lxSetup.h" #include "lxTR.h" #define lxRENDERBORDER this->m_glc->TRCGet(TR_TILE_BORDER) //#ifdef LXLINUX //#define lxPPMFORMAT 1 //#endif lxRenderData::lxRenderData() { this->m_scale = 2000.0; this->m_scaleMode = LXRENDER_FIT_SCREEN; this->m_imgWhiteBg = true; this->m_imgWidth = 170.0; this->m_imgHeight = 257.0; this->m_imgResolution = 300.0; this->m_imgFileType = 0; this->m_askFName = true; #ifdef lxPPMFORMAT this->m_imgFileName = _T("cave.ppm"); #else this->m_imgFileName = _T("cave.bmp"); #endif } #define pngerr(err) printf(err) void lxRenderData::CalcImageDimensions(lxGLCanvas * glc) { switch (this->m_scaleMode) { case LXRENDER_FIT_SCALE: this->m_imgPixH = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_scale / 0.0254 * this->m_imgResolution; this->m_imgPixW = glc->setup->cam_width * this->m_imgPixH; break; case LXRENDER_FIT_WIDTH: this->m_imgPixW = (this->m_imgWidth / 25.4 * this->m_imgResolution); this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; break; case LXRENDER_FIT_HEIGHT: this->m_imgPixH = (this->m_imgHeight / 25.4 * this->m_imgResolution); this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; break; // screen shot default: this->m_imgPixH = glc->wh; this->m_imgPixW = glc->ww; break; } if (glc->setup->cam_width <= 1.0) { if (this->m_imgPixH < 32.0) { this->m_imgPixH = 32.0; this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; } if (this->m_imgPixH > 32768.0){ this->m_imgPixH = 32768.0; this->m_imgPixW = this->m_imgPixH * glc->setup->cam_width; } } else { if (this->m_imgPixW < 32.0) { this->m_imgPixW = 32.0; this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; } if (this->m_imgPixW > 32768.0){ this->m_imgPixW = 32768.0; this->m_imgPixH = this->m_imgPixW / glc->setup->cam_width; } } switch (this->m_scaleMode) { case LXRENDER_FIT_SCALE: this->m_imgHeight = this->m_imgPixH / this->m_imgResolution * 25.4; this->m_imgWidth = this->m_imgPixW / this->m_imgResolution * 25.4; break; case LXRENDER_FIT_WIDTH: this->m_imgHeight = this->m_imgPixH / this->m_imgResolution * 25.4; this->m_scale = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_imgPixH / 0.0254 * this->m_imgResolution; break; case LXRENDER_FIT_HEIGHT: this->m_imgWidth = this->m_imgPixW / this->m_imgResolution * 25.4; this->m_scale = 2.0 * glc->setup->cam_dist * glc->setup->cam_lens_vfovr / this->m_imgPixH / 0.0254 * this->m_imgResolution; break; } } enum { LXRDC_START = 6000, LXRDC_FIT_SCREEN, LXRDC_FIT_WIDTH, LXRDC_FIT_HEIGHT, LXRDC_FIT_SCALE, LXRDC_WIDTH, LXRDC_HEIGHT, LXRDC_SCALE, LXRDC_RESOL, LXRDC_RESOL_LBL, LXRDC_IMGSIZE, LXRDC_IMGSIZE_LBL, LXRDC_WHITEBG, LXRDC_END, }; class lxRenderDataConfig : public wxDialog { public: lxRenderDataConfig(wxWindow * parent, lxRenderData * data, lxGLCanvas * glc); lxRenderData * m_data; lxCRC32 m_dataCRC; lxGLCanvas * m_glc; void OnUpdateUI(wxUpdateUIEvent & event); void OnKey(wxKeyEvent & event); DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(lxRenderDataConfig, wxDialog) EVT_UPDATE_UI_RANGE(LXRDC_START, LXRDC_END, lxRenderDataConfig::OnUpdateUI) END_EVENT_TABLE() void lxRenderDataConfig::OnUpdateUI(wxUpdateUIEvent & WXUNUSED(event)) { lxFTextCtrl(LXRDC_WIDTH)->Enable(lxFRadioBtn(LXRDC_FIT_WIDTH)->GetValue()); lxFTextCtrl(LXRDC_HEIGHT)->Enable(lxFRadioBtn(LXRDC_FIT_HEIGHT)->GetValue()); lxFTextCtrl(LXRDC_SCALE)->Enable(lxFRadioBtn(LXRDC_FIT_SCALE)->GetValue()); lxFTextCtrl(LXRDC_RESOL)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxFStaticText(LXRDC_RESOL_LBL)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxFCheckBox(LXRDC_WHITEBG)->Enable(!lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()); lxRenderData rd; lxFTextCtrl(LXRDC_WIDTH)->GetValue().ToDouble(&rd.m_imgWidth); lxFTextCtrl(LXRDC_HEIGHT)->GetValue().ToDouble(&rd.m_imgHeight); lxFTextCtrl(LXRDC_SCALE)->GetValue().ToDouble(&rd.m_scale); lxFTextCtrl(LXRDC_RESOL)->GetValue().ToDouble(&rd.m_imgResolution); if (lxFRadioBtn(LXRDC_FIT_SCALE)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_SCALE; if (lxFRadioBtn(LXRDC_FIT_SCREEN)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_SCREEN; if (lxFRadioBtn(LXRDC_FIT_WIDTH)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_WIDTH; if (lxFRadioBtn(LXRDC_FIT_HEIGHT)->GetValue()) rd.m_scaleMode = LXRENDER_FIT_HEIGHT; #define lxRenderDataConfig_check \ this->m_dataCRC.Initialize(); \ this->m_dataCRC.AddInteger(rd.m_scaleMode); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_WIDTH)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_HEIGHT)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_SCALE)->GetValue()); \ this->m_dataCRC.AddString(lxFTextCtrl(LXRDC_RESOL)->GetValue()); lxRenderDataConfig_check rd.CalcImageDimensions(this->m_glc); if (this->m_dataCRC.Changed()) { double imgsize = 0.000003 * rd.m_imgPixH * rd.m_imgPixW; if (imgsize < 100.0) lxFStaticText(LXRDC_IMGSIZE)->SetLabel(wxString::Format(_T("%.0f x %.0f (%.1f MB)"), rd.m_imgPixW, rd.m_imgPixH, imgsize)); else lxFStaticText(LXRDC_IMGSIZE)->SetLabel(wxString::Format(_T("%.0f x %.0f (%.1f GB)"), rd.m_imgPixW, rd.m_imgPixH, 0.001 * imgsize)); if (rd.m_scaleMode != LXRENDER_FIT_SCREEN) { if (rd.m_scaleMode != LXRENDER_FIT_WIDTH) { lxFTextCtrl(LXRDC_WIDTH)->SetValue(wxString::Format(_T("%.0f"), rd.m_imgWidth)); } if (rd.m_scaleMode != LXRENDER_FIT_HEIGHT) { lxFTextCtrl(LXRDC_HEIGHT)->SetValue(wxString::Format(_T("%.0f"), rd.m_imgHeight)); } if (rd.m_scaleMode != LXRENDER_FIT_SCALE) { lxFTextCtrl(LXRDC_SCALE)->SetValue(wxString::Format(_T("%.0f"), rd.m_scale)); } } lxRenderDataConfig_check this->m_dataCRC.Changed(); } } lxRenderDataConfig::lxRenderDataConfig(wxWindow * parent, lxRenderData * data, class lxGLCanvas * glc) : wxDialog(parent, wxID_ANY, wxString(_("Rendering setup"))) { m_data = data; m_glc = glc; // TODO: dat to lxWX wxBoxSizer * sizerAll = new wxBoxSizer(wxVERTICAL); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Size and scaling")), wxVERTICAL); lxStaticBoxSizer->Add( new wxRadioButton(this, LXRDC_FIT_SCREEN, _("Screen shot"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_SCREEN)), 0, wxALIGN_LEFT | wxALL, lxBORDER); lxFlexGridSizer = new wxFlexGridSizer(3); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_WIDTH, _("Image width"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_WIDTH)), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("(mm)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_WIDTH, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgWidth,0.005,5000.0)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_WIDTH, 2); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_HEIGHT, _("Image height"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_HEIGHT)), 0, wxALIGN_LEFT | lxNOTTOP | wxALIGN_CENTER_VERTICAL, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("(mm)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_HEIGHT, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgHeight,0.005,5000.0)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_HEIGHT, 2); lxFlexGridSizer->Add( new wxRadioButton(this, LXRDC_FIT_SCALE, _("Scale"), wxDefaultPosition, wxDefaultSize, 0, lxRadioBtnValidator(&this->m_data->m_scaleMode, LXRENDER_FIT_SCALE)), 0, wxALIGN_LEFT | lxNOTTOP | wxALIGN_CENTER_VERTICAL, lxBORDER); lxFlexGridSizer->Add( new wxStaticText(this, wxID_ANY, _("1 :")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_RIGHT, lxBORDER); lxFlexGridSizer->Add( new wxTextCtrl(this, LXRDC_SCALE, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_scale,1,1e10)), 0, wxALIGN_CENTER | wxBOTTOM | wxRIGHT, lxBORDER); lxSETWWIDTH(LXRDC_SCALE, 2); lxStaticBoxSizer->Add(lxFlexGridSizer, 0, wxEXPAND); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | wxALL, lxBORDER); lxStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox(this, wxID_ANY, _("Image options")), wxVERTICAL); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add( new wxStaticText(this, LXRDC_RESOL_LBL, _("Rendering resolution (dpi)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL | wxALIGN_RIGHT, lxBORDER); lxBoxSizer->Add( new wxTextCtrl(this, LXRDC_RESOL, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT, lxDoubleValidator(&this->m_data->m_imgResolution,96,2400)), 0, wxALIGN_CENTER | lxNOTLEFT, lxBORDER); lxSETWWIDTH(LXRDC_RESOL, 2); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add( new wxStaticText(this, LXRDC_IMGSIZE_LBL, _("Image size:")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP | wxALIGN_RIGHT, lxBORDER); lxBoxSizer->Add( new wxStaticText(this, LXRDC_IMGSIZE, _("00 x 00 (00.0 MB)")), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT | wxALIGN_LEFT, lxBORDER); lxStaticBoxSizer->Add(lxBoxSizer, 0, wxEXPAND); lxStaticBoxSizer->Add( new wxCheckBox(this, LXRDC_WHITEBG, _("White background"), wxDefaultPosition, wxDefaultSize, 0, wxGenericValidator(&this->m_data->m_imgWhiteBg)), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | lxNOTTOP | wxALIGN_LEFT, lxBORDER); sizerAll->Add(lxStaticBoxSizer, 0, wxEXPAND | lxNOTTOP, lxBORDER); // Bottom line lxBoxSizer = new wxBoxSizer(wxHORIZONTAL); lxBoxSizer->Add(new wxButton(this, wxID_OK, _("OK")), 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, lxBORDER); lxBoxSizer->Add(new wxButton(this, wxID_CANCEL, _("Cancel")), 0, wxALIGN_CENTER | wxRIGHT | wxBOTTOM, lxBORDER); sizerAll->Add(lxBoxSizer, 0, wxALIGN_RIGHT); SetSizer(sizerAll); sizerAll->SetSizeHints(this); sizerAll->Fit(this); this->CentreOnParent(); } void lxRenderData::Configure(wxWindow * parent, class lxGLCanvas * glc) { lxRenderDataConfig cdlg(parent, this, glc); cdlg.ShowModal(); } class lxRenderFile { public: bool m_started, m_continue, m_progress; lxGLCanvas * m_glc; lxRenderData * m_pData; FILE * m_file, * m_fileTMP; GLint m_imgWidth, m_imgHeight, m_tWidth, m_tHeight; GLubyte * m_imgBuffRow; GLubyte * m_imgBuffLine; int m_imgBuffLineSize; int m_cTile; wxWindow * m_parent; png_structp png_ptr; png_infop png_info_ptr; void Render(); void RenderBMPHeader(); void RenderPNGHeader(); void RenderPNGFooter(); void RenderPDFHeader(); void RenderPDFFooter(); void ErrorExit(const wxString & err); lxRenderFile(wxWindow * p, lxRenderData * pdata, lxGLCanvas * glc); ~lxRenderFile(); }; lxRenderFile::lxRenderFile(wxWindow * p, lxRenderData * pdata, lxGLCanvas * glc) { m_parent = p; m_pData = pdata; m_glc = glc; m_started = false; m_file = NULL; m_continue = false; m_progress = false; m_imgBuffLine = NULL; m_imgBuffRow = NULL; } lxRenderFile::~lxRenderFile() { if (m_file != NULL) fclose(m_file); delete [] this->m_imgBuffLine; delete [] this->m_imgBuffRow; this->m_glc->TRCDestroy(); this->m_glc->m_renderData = NULL; this->m_glc->ForceRefresh(); } void lxRenderFile::Render() { m_file = NULL; // najprv zrata rozmery oprazka double tmp_w, tmp_h; // zratame rozmery oprazka //if (m_pData->m_scaleMode == LXRENDER_FIT_SCALE) { // tmp_w = (m_pData->m_imgWidth / 25.4 * m_pData->m_imgResolution); // tmp_h = (m_pData->m_imgHeight / 25.4 * m_pData->m_imgResolution); //} else { // tmp_h = 2.0 * m_glc->setup->cam_dist * lxVFOVR / m_pData->m_scale / 0.0254 * m_pData->m_imgResolution; // tmp_w = m_glc->setup->cam_width * tmp_h; //} this->m_pData->CalcImageDimensions(m_glc); tmp_h = this->m_pData->m_imgPixH; tmp_w = this->m_pData->m_imgPixW; m_imgWidth = (GLint) tmp_w; m_imgHeight = (GLint) tmp_h; m_tWidth = m_glc->ww; m_tHeight = m_glc->wh; if (this->m_pData->m_scaleMode != LXRENDER_FIT_SCREEN) { if (m_tHeight * m_imgWidth > 5000000) m_tHeight = 5000000 / m_imgWidth; m_tHeight = m_tHeight - (m_tHeight % 8); m_tWidth = m_tWidth - (m_tHeight % 8); } else { m_tHeight = m_tHeight + 8 - (m_tHeight % 8); m_tWidth = m_tWidth + 8 - (m_tHeight % 8); } wxString cdir, cnm; wxFileName::SplitPath(m_pData->m_imgFileName, &cdir, &cnm, NULL); if (cdir.Length() == 0) cdir = this->m_glc->frame->m_fileDir; if (m_pData->m_askFName) { wxFileDialog fileDlg(this->m_parent, _("Save rendering as"), cdir, cnm, #ifdef lxPPMFORMAT _("PPM files (*.ppm)|*.ppm"), #else _("PDF files (*.pdf)|*.pdf|PNG files (*.png)|*.png|BMP files (*.bmp)|*.bmp"), #endif wxFD_SAVE | wxFD_OVERWRITE_PROMPT); fileDlg.CentreOnParent(); fileDlg.SetFilterIndex(m_pData->m_imgFileType); if (fileDlg.ShowModal() == wxID_OK) { m_pData->m_imgFileName = fileDlg.GetPath(); m_pData->m_imgFileType = fileDlg.GetFilterIndex(); } else return; } // otvorime subor m_file = fopen(m_pData->m_imgFileName.mb_str(), "w+b"); if (m_file == NULL) { ErrorExit(_("Unable to open file for output.")); return; } // start rendering m_glc->m_renderData = m_pData; // allocate rendering buffers this->m_glc->TRCInit(LXGLCTR_TILE, this->m_imgWidth, this->m_imgHeight, this->m_tWidth, this->m_tHeight); this->m_imgBuffLineSize = 3 * this->m_imgWidth; switch (m_pData->m_imgFileType) { case 0: RenderPDFHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_TOP_TO_BOTTOM); break; case 1: RenderPNGHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_TOP_TO_BOTTOM); break; default: RenderBMPHeader(); trRowOrder(this->m_glc->m_TRC->m_ctx, TR_BOTTOM_TO_TOP); break; } this->m_tWidth = this->m_glc->TRCGet(TR_TILE_WIDTH); this->m_tHeight = this->m_glc->TRCGet(TR_TILE_HEIGHT); this->m_imgBuffLine = new GLubyte [m_imgBuffLineSize]; this->m_imgBuffRow = new GLubyte [3 * this->m_imgWidth * this->m_tHeight]; double tmpcw = m_glc->setup->cam_width; m_glc->setup->cam_width = double(m_imgWidth) / double(m_imgHeight); m_cTile = 0; long max = ((this->m_imgWidth + this->m_tWidth - 2 * lxRENDERBORDER - 1) / (this->m_tWidth - 2 * lxRENDERBORDER)) * ((this->m_imgHeight + this->m_tHeight - 2 * lxRENDERBORDER - 1) / (this->m_tHeight - 2 * lxRENDERBORDER)); m_continue = true; wxString renmsg = wxString::Format(_("Rendering (%d x %d, %.1f MB) ..."), m_imgWidth, m_imgHeight, double(m_imgWidth) * double(m_imgHeight) * 3 / 1048576.0); wxProgressDialog * dialog = NULL; if (this->m_pData->m_askFName) { dialog = new wxProgressDialog(_("Rendering to bitmap"), renmsg, max, // range m_parent, // parent wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME); } int curColumn; this->m_glc->SetFontColors(); this->m_glc->m_fntTitleO->setPointSize(14.0 * this->m_pData->m_imgResolution / 96.0); this->m_glc->m_fntNumericO->setPointSize(8.0 * this->m_pData->m_imgResolution / 96.0); while (m_continue) { if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) { this->m_glc->TRCBeginTile(); this->m_glc->m_sInit = true; this->m_glc->m_isO = false; this->m_glc->RenderScreen(); this->m_glc->m_isO = true; this->m_glc->m_sInit = true; } else { if (this->m_cTile == 0) { this->m_glc->UpdateRenderContents(); if (this->m_glc->m_oList == 0) this->m_glc->m_oList = glGenLists(1); glNewList(this->m_glc->m_oList, GL_COMPILE); this->m_glc->RenderAll(); glEndList(); } if (this->m_glc->setup->cam_anaglyph) { this->m_glc->setup->cam_anaglyph_left = false; this->m_glc->SetCamera(); this->m_glc->TRCBeginTile(); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); if (this->m_glc->m_renderData->m_imgWhiteBg) glClearColor(1.0, 1.0, 1.0, 1.0); else glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); this->m_glc->SetColorMask(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif this->m_glc->setup->cam_anaglyph_left = true; this->m_glc->SetCamera(); this->m_glc->TRCBeginTile(); this->m_glc->SetColorMask(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); } else { m_glc->SetCamera(); this->m_glc->TRCBeginTile(); #ifdef LXLINUX this->m_glc->RenderAll(); #else glCallList(this->m_glc->m_oList); #endif } // render indicators if (this->m_glc->setup->m_vis_indicators) this->m_glc->RenderInds(); } curColumn = this->m_glc->TRCGet(TR_CURRENT_COLUMN); m_continue = this->m_glc->TRCEndTile(); this->m_cTile++; m_continue = m_continue && ((dialog == NULL) || dialog->Update(this->m_cTile, renmsg)); // save tile do rowbuffera { int curTileWidth = this->m_glc->TRCGet(TR_CURRENT_TILE_WIDTH); int bytesPerImageRow = m_imgWidth * 3 * sizeof(GLubyte); int bytesPerTileRow = (m_tWidth - 2 * lxRENDERBORDER) * 3 * sizeof(GLubyte); int xOffset = curColumn * bytesPerTileRow; int bytesPerCurrentTileRow = (curTileWidth - 2 * lxRENDERBORDER) * 3 * sizeof(GLubyte); int i; int curTileHeight = this->m_glc->TRCGet(TR_CURRENT_TILE_HEIGHT); for (i = 0; i < curTileHeight; i++) { memcpy(m_imgBuffRow + i * bytesPerImageRow + xOffset, // Dest this->m_glc->TRCGetBuffer() + i * bytesPerTileRow, // Src bytesPerCurrentTileRow); // Byte count } } if (curColumn == (this->m_glc->TRCGet(TR_COLUMNS)-1)) { // write this buffered row of tiles to the file int curTileHeight = this->m_glc->TRCGet(TR_CURRENT_TILE_HEIGHT); int bytesPerImageRow = m_imgWidth * 3 * sizeof(GLubyte); int i; GLubyte * rowPtr; // The arithmetic is a bit tricky here because of borders and // the up/down flip. Thanks to Marcel Lancelle for fixing it. #ifdef lxPPMFORMAT for (i = 2 * lxRENDERBORDER; i < curTileHeight; i++) { rowPtr = m_imgBuffRow + (curTileHeight-1-i) * bytesPerImageRow; // (curTileHeight-1-i) fwrite(rowPtr, 1, 3 * m_imgWidth, m_file); } #else GLubyte * sPtr, * dPtr; int j; switch (this->m_pData->m_imgFileType) { // case 0: // for (i = (curTileHeight - 2 * lxRENDERBORDER); i > 0 ; i--) { // rowPtr = m_imgBuffRow + (i-1) * bytesPerImageRow; // fwrite(rowPtr, 1, m_imgBuffLineSize, m_file); // } // break; case 0: case 1: for (i = (curTileHeight - 2 * lxRENDERBORDER); i > 0 ; i--) { rowPtr = m_imgBuffRow + (i-1) * bytesPerImageRow; png_write_row(this->png_ptr, rowPtr); } break; default: for (i = 0; i < (curTileHeight - 2 * lxRENDERBORDER); i++) { rowPtr = m_imgBuffRow + i * bytesPerImageRow; for (j = 0, dPtr = m_imgBuffLine, sPtr = rowPtr; j < m_imgWidth; j++, dPtr += 3, sPtr += 3) { dPtr[2] = sPtr[0]; dPtr[1] = sPtr[1]; dPtr[0] = sPtr[2]; } fwrite(m_imgBuffLine, 1, m_imgBuffLineSize, m_file); } break; } #endif } } m_glc->setup->cam_width = tmpcw; //pngtst; delete dialog; switch (this->m_pData->m_imgFileType) { case 0: this->RenderPDFFooter(); break; case 1: this->RenderPNGFooter(); break; } delete [] this->m_imgBuffLine; delete [] this->m_imgBuffRow; this->m_imgBuffLine = NULL; this->m_imgBuffRow = NULL; } void lxRenderFile::ErrorExit(const wxString & err) { wxMessageBox(err, _("Error"), wxICON_ERROR | wxOK, m_parent); } void lxRenderFile::RenderBMPHeader() { #ifdef lxPPMFORMAT fprintf(this->m_file,"P6\n"); fprintf(this->m_file,"# ppm-file created by loch\n"); fprintf(this->m_file,"%d %d\n", this->m_imgWidth, this->m_imgHeight); fprintf(this->m_file,"255\n"); #else wxUint16 bpp = 24; // # of bits per pixel int palette_size = 0; // # of color map entries, ie. 2^bpp colors unsigned width = this->m_imgWidth; unsigned row_padding = (4 - int(width*bpp/8.0) % 4) % 4; // # bytes to pad to dword unsigned row_width = int(width * bpp/8.0) + row_padding; // # of bytes per row this->m_imgBuffLineSize = row_width; struct { // BitmapHeader: wxUint16 magic; // format magic, always 'BM' wxUint32 filesize; // total file size, inc. headers wxUint32 reserved; // for future use wxUint32 data_offset; // image data offset in the file // BitmapInfoHeader: wxUint32 bih_size; // 2nd part's size wxUint32 width, height; // bitmap's dimensions wxUint16 planes; // num of planes wxUint16 bpp; // bits per pixel wxUint32 compression; // compression method wxUint32 size_of_bmp; // size of the bitmap wxUint32 h_res, v_res; // image resolution in dpi wxUint32 num_clrs; // number of colors used wxUint32 num_signif_clrs;// number of significant colors } hdr; double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; wxUint32 hdr_size = 14/*BitmapHeader*/ + 40/*BitmapInfoHeader*/; hdr.magic = wxUINT16_SWAP_ON_BE(0x4D42/*'BM'*/); hdr.filesize = wxUINT32_SWAP_ON_BE(hdr_size + palette_size * 4 + row_width * this->m_imgHeight); hdr.reserved = 0; hdr.data_offset = wxUINT32_SWAP_ON_BE(hdr_size + palette_size * 4); hdr.bih_size = wxUINT32_SWAP_ON_BE(hdr_size - 14); hdr.width = wxUINT32_SWAP_ON_BE(this->m_imgWidth); hdr.height = wxUINT32_SWAP_ON_BE(this->m_imgHeight); hdr.planes = wxUINT16_SWAP_ON_BE(1); // always 1 plane hdr.bpp = wxUINT16_SWAP_ON_BE(bpp); hdr.compression = 0; // RGB uncompressed hdr.size_of_bmp = wxUINT32_SWAP_ON_BE(row_width * this->m_imgHeight); hdr.h_res = hdr.v_res = wxUINT32_SWAP_ON_BE((wxUint32) (imgRes * 100.0 / 2.54 + 0.5)); // 72dpi is standard hdr.num_clrs = wxUINT32_SWAP_ON_BE(palette_size); // # colors in colormap hdr.num_signif_clrs = 0; // all colors are significant #ifdef bmpWrite #undef bmpWrite #endif #define bmpWrite(srcp, srcs) fwrite(srcp, 1, srcs, this->m_file) bmpWrite(&hdr.magic, 2); bmpWrite(&hdr.filesize, 4); bmpWrite(&hdr.reserved, 4); bmpWrite(&hdr.data_offset, 4); bmpWrite(&hdr.bih_size, 4); bmpWrite(&hdr.width, 4); bmpWrite(&hdr.height, 4); bmpWrite(&hdr.planes, 2); bmpWrite(&hdr.bpp, 2); bmpWrite(&hdr.compression, 4); bmpWrite(&hdr.size_of_bmp, 4); bmpWrite(&hdr.h_res, 4); bmpWrite(&hdr.v_res, 4); bmpWrite(&hdr.num_clrs, 4); bmpWrite(&hdr.num_signif_clrs, 4); #endif } void lxRenderData::Render(wxWindow * parent, lxGLCanvas * glc) { lxRenderFile pf(parent, this, glc); char * prevlocale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); glc->m_isO = true; pf.Render(); glc->m_isO = false; setlocale(LC_NUMERIC,prevlocale); } void lxRenderFile::RenderPNGHeader() { double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; /* initialize stuff */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) pngerr("[write_png_file] png_create_write_struct failed"); png_info_ptr = png_create_info_struct(png_ptr); if (!png_info_ptr) pngerr("[write_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during init_io"); png_init_io(png_ptr, this->m_file); /* write header */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing header"); png_set_IHDR(png_ptr, png_info_ptr, /*256, 256,*/ this->m_imgWidth, this->m_imgHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_set_pHYs(png_ptr, png_info_ptr, (png_uint_32) (imgRes * 39.3700787401574 + 0.5), (png_uint_32) (imgRes * 39.3700787401574 + 0.5), PNG_RESOLUTION_METER); png_write_info(png_ptr, png_info_ptr); /* write bytes */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing bytes"); } void lxRenderFile::RenderPNGFooter() { /* end write */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during end of write"); png_write_end(png_ptr, NULL); png_destroy_write_struct(&this->png_ptr, &this->png_info_ptr); } size_t pdf_obj[10], pdf_png_start_length, pdf_png_start; void lxRenderFile::RenderPDFHeader() { double imgRes; if (this->m_pData->m_scaleMode == LXRENDER_FIT_SCREEN) imgRes = 96.0; else imgRes = this->m_pData->m_imgResolution; double imw, imh; imw = 72.0 * this->m_imgWidth / imgRes; imh = 72.0 * this->m_imgHeight / imgRes; char tmp_buff[256]; fprintf(this->m_file,"%%PDF-1.4\n"); pdf_obj[4] = ftell(this->m_file); sprintf(tmp_buff, "q\n%.4f 0 0 %.4f 0 0 cm\n/Im1 Do\nQ\n", imw, imh); fprintf(this->m_file,"4 0 obj <<\n/Length %u\n>>\nstream\n%sendstream\nendobj\n", (unsigned)strlen(tmp_buff), tmp_buff); pdf_obj[3] = ftell(this->m_file); fprintf(this->m_file,"3 0 obj <<\n/Type /Page\n/Contents 4 0 R\n/Resources 2 0 R\n/MediaBox [0 0 %.4f %.4f]\n/Parent 5 0 R\n>> endobj\n", imw, imh); pdf_obj[1] = ftell(this->m_file); fprintf(this->m_file,"1 0 obj <<\n/Type /XObject\n/Subtype /Image\n/Width %u\n" "/Height %u\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n", this->m_imgWidth, this->m_imgHeight); pdf_png_start_length = ftell(this->m_file); fprintf(this->m_file,"/Length 00000000000000\n/Filter /FlateDecode\n/DecodeParms << /Colors 3 /Columns %u /BitsPerComponent 8 /Predictor 10 >>\n>>\nstream\n", this->m_imgWidth); /* initialize stuff */ png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) pngerr("[write_png_file] png_create_write_struct failed"); png_info_ptr = png_create_info_struct(png_ptr); if (!png_info_ptr) pngerr("[write_png_file] png_create_info_struct failed"); if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during init_io"); this->m_fileTMP = tmpfile(); png_init_io(png_ptr, this->m_fileTMP); /* write header */ if (setjmp(png_jmpbuf(png_ptr))) pngerr("[write_png_file] Error during writing header"); png_set_IHDR(png_ptr, png_info_ptr, /*256, 256,*/ this->m_imgWidth, this->m_imgHeight, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); png_write_info(png_ptr, png_info_ptr); pdf_png_start = ftell(this->m_fileTMP); } void lxRenderFile::RenderPDFFooter() { size_t src_pos, dst_pos, png_len, png_pos, png_hdr, png_add, buff_read, buff_rest; unsigned char lenbuff[8]; png_write_end(png_ptr, NULL); fseek(this->m_fileTMP, pdf_png_start, SEEK_SET); png_len = 0; bool contpng = true; do { fread(lenbuff, 1, 8, this->m_fileTMP); png_add = (size_t) lenbuff[3] + 256 * (size_t) lenbuff[2] + 256 * 256 * (size_t) lenbuff[1] + 256 * 256 * 256 * (size_t) lenbuff[0]; png_hdr = (size_t) lenbuff[7] + 256 * (size_t) lenbuff[6] + 256 * 256 * (size_t) lenbuff[5] + 256 * 256 * 256 * (size_t) lenbuff[4]; if (png_hdr == 0x49444154) { png_len += png_add; if (fseek(this->m_fileTMP, png_add + 4, SEEK_CUR) != 0) contpng = false; } else { contpng = false; } } while (contpng); fseek(this->m_file, pdf_png_start_length, SEEK_SET); fprintf(this->m_file,"/Length %u\n/Filter /FlateDecode\n/DecodeParms << /Colors 3 /Columns %u /BitsPerComponent 8 /Predictor 10 >>\n>>\nstream\n", (unsigned) png_len, this->m_imgWidth); #define buffsize 256000 unsigned char * buff = new unsigned char [buffsize]; contpng = true; dst_pos = ftell(this->m_file); src_pos = pdf_png_start; do { fseek(this->m_fileTMP, src_pos, SEEK_SET); src_pos += 8; fread(lenbuff, 1, 8, this->m_fileTMP); png_add = (size_t) lenbuff[3] + 256 * (size_t) lenbuff[2] + 256 * 256 * (size_t) lenbuff[1] + 256 * 256 * 256 * (size_t) lenbuff[0]; png_hdr = (size_t) lenbuff[7] + 256 * (size_t) lenbuff[6] + 256 * 256 * (size_t) lenbuff[5] + 256 * 256 * 256 * (size_t) lenbuff[4]; if (png_hdr == 0x49444154) { for(png_pos = 0; png_pos < png_add; png_pos += buff_read) { if (fseek(this->m_fileTMP, src_pos, SEEK_SET) != 0) contpng = false; buff_rest = png_add - png_pos; if (buff_rest > buffsize) buff_rest = buffsize; buff_read = fread(buff, 1, buff_rest, this->m_fileTMP); //fseek(this->m_file, dst_pos, SEEK_SET); fwrite(buff, 1, buff_read, this->m_file); src_pos += buff_read; dst_pos += buff_read; } src_pos += 4; } else { contpng = false; } } while (contpng); delete [] buff; //fseek(this->m_file, dst_pos, SEEK_SET); fprintf(this->m_file,"\n"); fprintf(this->m_file,"endstream\nendobj\n"); pdf_obj[2] = ftell(this->m_file); fprintf(this->m_file,"2 0 obj <<\n/XObject << /Im1 1 0 R >>\n/ProcSet [ /PDF /ImageC ]\n>> endobj\n"); pdf_obj[5] = ftell(this->m_file); fprintf(this->m_file,"5 0 obj <<\n/Type /Pages\n/Count 1\n/Kids [3 0 R]\n>> endobj\n"); pdf_obj[6] = ftell(this->m_file); fprintf(this->m_file,"6 0 obj <<\n/Type /Catalog\n/Pages 5 0 R\n>> endobj\n"); pdf_obj[7] = ftell(this->m_file); fprintf(this->m_file,"7 0 obj <<\n/Producer (Loch)\n/Creator (Therion)\n>> endobj\n"); pdf_obj[9] = ftell(this->m_file); fprintf(this->m_file,"xref\n0 8\n%010u 65535 f\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n%010u 00000 n\n", 0,(unsigned)pdf_obj[1],(unsigned)pdf_obj[2],(unsigned)pdf_obj[3],(unsigned)pdf_obj[4],(unsigned)pdf_obj[5],(unsigned)pdf_obj[6],(unsigned)pdf_obj[7]); fprintf(this->m_file,"trailer\n<< /Size 8\n /Root 6 0 R\n/Info 7 0 R >>\nstartxref\n%u\n%%%%EOF\n",(unsigned)pdf_obj[9]); png_destroy_write_struct(&this->png_ptr, &this->png_info_ptr); fclose(this->m_fileTMP); } therion-5.4.1/loch/lxRender.h000066400000000000000000000013541307545355600160720ustar00rootroot00000000000000/** * @file lxRender.h * Loch printing module. */ #ifndef lxRender_h #define lxRender_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries enum { LXRENDER_FIT_SCREEN, LXRENDER_FIT_WIDTH, LXRENDER_FIT_HEIGHT, LXRENDER_FIT_SCALE, }; struct lxRenderData { long m_scaleMode; bool m_printRenderer, m_imgWhiteBg, m_askFName; wxString m_imgFileName; int m_imgFileType; double m_scale, m_imgResolution, m_imgWidth, m_imgHeight, m_imgPixW, m_imgPixH; lxRenderData(); void Configure(wxWindow * parent, class lxGLCanvas * glc); void Render(wxWindow * parent, class lxGLCanvas * glc); void CalcImageDimensions(class lxGLCanvas * glc); }; #endif therion-5.4.1/loch/lxSScene.cxx000066400000000000000000000424521307545355600164120ustar00rootroot00000000000000// Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxSScene.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif enum { lxSS_VIS_CENTERLINE = 4000, lxSS_VIS_WALLS, lxSS_VIS_SURFACE, lxSS_VIS_LABELS, lxSS_VIS_BBOX, lxSS_VIS_GRID, lxSS_VIS_INDICATORS, lxSS_SRF_TRANSPARENCY, lxSS_SRF_OPACITY, lxSS_SRF_TEXTURE, lxSS_SRF_LIGHTING, lxSS_WALLS_TRANSPARENCY, lxSS_WALLS_OPACITY, lxSS_COLORMD_ALTITUDE, lxSS_COLORMD_DEFAULT, lxSS_COLORAPP_CENTERLINE, lxSS_COLORAPP_WALLS, lxSS_CLNVIS_SURFACE, lxSS_CLNVIS_CAVE, lxSS_CLNVIS_SPLAY, lxSS_CLNVIS_DUPLICATE, lxSS_CLNVIS_STATION, lxSS_CLNVIS_ENTRANCE, lxSS_CLNVIS_FIX, lxSS_STLABEL_NAME, lxSS_STLABEL_SURVEY, lxSS_STLABEL_COMMENT, lxSS_STLABEL_ALTITUDE, lxSS_IND_PNAME, }; BEGIN_EVENT_TABLE(lxModelSetupDlg, wxMiniFrame) EVT_RADIOBUTTON(lxSS_COLORMD_ALTITUDE, lxModelSetupDlg::OnCommand) EVT_RADIOBUTTON(lxSS_COLORMD_DEFAULT, lxModelSetupDlg::OnCommand) EVT_BUTTON(wxID_ANY, lxModelSetupDlg::OnCommand) EVT_BUTTON(wxID_CLOSE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_CENTERLINE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_WALLS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_SURFACE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_LABELS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_BBOX, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_GRID, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_VIS_INDICATORS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_WALLS_TRANSPARENCY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_TRANSPARENCY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_TEXTURE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_SRF_LIGHTING, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_STATION, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_ENTRANCE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_FIX, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_SURFACE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_CAVE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_SPLAY, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_CLNVIS_DUPLICATE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_COLORAPP_CENTERLINE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_COLORAPP_WALLS, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_NAME, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_COMMENT, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_ALTITUDE, lxModelSetupDlg::OnCommand) EVT_CHECKBOX(lxSS_STLABEL_SURVEY, lxModelSetupDlg::OnCommand) EVT_MOVE(lxModelSetupDlg::OnMove) EVT_CLOSE(lxModelSetupDlg::OnClose) EVT_COMMAND_SCROLL(lxSS_WALLS_OPACITY, lxModelSetupDlg::OnSlider) EVT_COMMAND_SCROLL(lxSS_SRF_OPACITY, lxModelSetupDlg::OnSlider) EVT_LISTBOX(LXMSTP_CONTROLLB, lxModelSetupDlg::OnControlSelect) EVT_TEXT(lxSS_IND_PNAME, lxModelSetupDlg::OnCommand) END_EVENT_TABLE() void lxModelSetupDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleModelSetup(); break; case lxSS_SRF_TEXTURE: this->m_mainFrame->ToggleSurfaceTexture(); break; case lxSS_SRF_LIGHTING: this->m_mainFrame->ToggleSurfaceLighting(); break; case lxSS_SRF_TRANSPARENCY: this->m_mainFrame->ToggleSurfaceTransparency(); break; case lxSS_WALLS_TRANSPARENCY: this->m_mainFrame->ToggleWallsTransparency(); break; case lxSS_VIS_CENTERLINE: this->m_mainFrame->ToggleVisibilityCenterline(); break; case lxSS_VIS_WALLS: this->m_mainFrame->ToggleVisibilityWalls(); break; case lxSS_VIS_SURFACE: this->m_mainFrame->ToggleVisibilitySurface(); break; case lxSS_VIS_LABELS: this->m_mainFrame->ToggleVisibilityLabels(); break; case lxSS_VIS_BBOX: this->m_mainFrame->ToggleVisibilityBBox(); break; case lxSS_VIS_GRID: this->m_mainFrame->ToggleVisibilityGrid(); break; case lxSS_VIS_INDICATORS: this->m_mainFrame->ToggleVisibilityIndicators(); break; case lxSS_COLORMD_ALTITUDE: this->m_mainFrame->SetColorMode(lxSETUP_COLORMD_ALTITUDE); break; case lxSS_COLORMD_DEFAULT: this->m_mainFrame->SetColorMode(lxSETUP_COLORMD_DEFAULT); break; case lxSS_COLORAPP_CENTERLINE: this->m_mainFrame->ToggleColorsApplyCenterline(); break; case lxSS_COLORAPP_WALLS: this->m_mainFrame->ToggleColorsApplyWalls(); break; case lxSS_CLNVIS_SURFACE: this->m_mainFrame->ToggleVisibilityCenterlineSurface(); break; case lxSS_CLNVIS_CAVE: this->m_mainFrame->ToggleVisibilityCenterlineCave(); break; case lxSS_CLNVIS_SPLAY: this->m_mainFrame->ToggleVisibilityCenterlineSplay(); break; case lxSS_CLNVIS_DUPLICATE: this->m_mainFrame->ToggleVisibilityCenterlineDuplicate(); break; case lxSS_CLNVIS_FIX: this->m_mainFrame->ToggleVisibilityCenterlineFix(); break; case lxSS_CLNVIS_ENTRANCE: this->m_mainFrame->ToggleVisibilityCenterlineEntrance(); break; case lxSS_CLNVIS_STATION: this->m_mainFrame->ToggleVisibilityCenterlineStation(); break; case lxSS_STLABEL_ALTITUDE: this->m_mainFrame->ToggleVisibilityStLabelAltitude(); break; case lxSS_STLABEL_NAME: this->m_mainFrame->ToggleVisibilityStLabelName(); break; case lxSS_STLABEL_SURVEY: this->m_mainFrame->ToggleVisibilityStLabelSurvey(); break; case lxSS_STLABEL_COMMENT: this->m_mainFrame->ToggleVisibilityStLabelComment(); break; case lxSS_IND_PNAME: this->m_mainFrame->data->title = lxFTextCtrl(lxSS_IND_PNAME)->GetValue(); this->m_mainFrame->canvas->ForceRefresh(); break; } } void lxModelSetupDlg::OnSlider(wxScrollEvent& event) { bool update = false; switch (event.GetId()) { case lxSS_SRF_OPACITY: this->m_mainFrame->setup->m_srf_opacity = 1.0 - double(event.GetInt()) / 100.0; update = true; break; case lxSS_WALLS_OPACITY: this->m_mainFrame->setup->m_walls_opacity = 1.0 - double(event.GetInt()) / 100.0; update = true; break; } if (update) this->m_mainFrame->canvas->UpdateContents(); } void lxModelSetupDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleModelSetup(); } void lxModelSetupDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { this->m_toolBoxPosition.Save(); } void lxModelSetupDlg::OnControlSelect(wxCommandEvent& event) { this->m_controlSizer->Show(this->m_controlSizer_Visibility, event.GetSelection() == 0); this->m_controlSizer->Show(this->m_controlSizer_ColorMode, event.GetSelection() == 1); this->m_controlSizer->Show(this->m_controlSizer_Centerline, event.GetSelection() == 2); this->m_controlSizer->Show(this->m_controlSizer_Labels, event.GetSelection() == 3); this->m_controlSizer->Show(this->m_controlSizer_Walls, event.GetSelection() == 4); this->m_controlSizer->Show(this->m_controlSizer_Surface, event.GetSelection() == 5); //this->m_controlSizer->Show(this->m_controlSizer_BBox2Grid, event.GetSelection() == 6); this->m_controlSizer->Show(this->m_controlSizer_Indicators, event.GetSelection() == 6); //this->m_controlSizer->Show(this->m_controlSizer_ColorSetup, event.GetSelection() == 8); this->m_controlSizer->Layout(); } lxModelSetupDlg::lxModelSetupDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Scene"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { this->m_toolBoxPosition.Init(this, parent, 2, 8, 8); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; wxBoxSizer * sizerTop = new wxBoxSizer(wxHORIZONTAL), * sizerFrame = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); wxListBox * ctrlLBox; ctrlLBox = new wxListBox(lxPanel, LXMSTP_CONTROLLB); ctrlLBox->AppendString(_("Visibility")); ctrlLBox->AppendString(_("Color mode")); ctrlLBox->AppendString(_("Centerline")); ctrlLBox->AppendString(_("Stations")); ctrlLBox->AppendString(_("Walls")); ctrlLBox->AppendString(_("Surface")); //ctrlLBox->AppendString(_("BBox & grid")); ctrlLBox->AppendString(_("Indicators")); //ctrlLBox->AppendString(_("Color setup")); ctrlLBox->Select(0); this->m_controlSizer = new wxBoxSizer(wxVERTICAL); wxSize ctrlMinSize; ///////////////////////////////////////////////////////// // Visibility lxBoxSizer = this->m_controlSizer_Visibility = new wxBoxSizer(wxVERTICAL); #define ADDCB(id, ss) \ lxBoxSizer->Add( \ new wxCheckBox(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); #define ADDRB(id, ss) \ lxBoxSizer->Add( \ new wxRadioButton(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); #define ADDST(id, ss) \ lxBoxSizer->Add( \ new wxStaticText(lxPanel, id, ss), \ 0, wxALIGN_LEFT | wxBOTTOM, lxBORDER); ADDST(wxID_ANY, _("Scene items")) ADDCB(lxSS_VIS_CENTERLINE, _("Centerline")) ADDCB(lxSS_VIS_WALLS, _("Walls")) ADDCB(lxSS_VIS_SURFACE, _("Surface")) // ADDCB(lxSS_VIS_LABELS, _("Labels")) ADDCB(lxSS_VIS_BBOX, _("Bounding box")) // ADDCB(lxSS_VIS_GRID, _("Grid")) ADDCB(lxSS_VIS_INDICATORS, _("Indicators")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); ctrlMinSize = lxBoxSizer->GetMinSize(); #define updateCtrlMinSize \ lxSize = lxBoxSizer->GetMinSize(); \ if (lxSize.x > ctrlMinSize.x) ctrlMinSize.x = lxSize.x; \ if (lxSize.y > ctrlMinSize.y) ctrlMinSize.y = lxSize.y; ///////////////////////////////////////////////////////// // color mode lxBoxSizer = this->m_controlSizer_ColorMode = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Color mode")) lxBoxSizer->Add( new wxRadioButton(lxPanel, lxSS_COLORMD_ALTITUDE, _("Altitude"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM, lxBORDER); //ADDRB(lxSS_COLORMD_ALTITUDE, _("Altitude")) // ADDRB(wxID_ANY, _("Topo date")) ADDRB(lxSS_COLORMD_DEFAULT, _("Default")) lxBoxSizer->Add( \ new wxStaticLine(lxPanel, wxID_ANY), \ 0, wxBOTTOM | wxEXPAND, lxBORDER); ADDST(wxID_ANY, _("Applies to")); ADDCB(lxSS_COLORAPP_CENTERLINE, _("Centerline")) ADDCB(lxSS_COLORAPP_WALLS, _("Walls")) // ADDCB(wxID_ANY, _("Surface")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Centerline lxBoxSizer = this->m_controlSizer_Centerline = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Centerline visibility")) ADDCB(lxSS_CLNVIS_SURFACE, _("Surface")) ADDCB(lxSS_CLNVIS_CAVE, _("Underground")) ADDCB(lxSS_CLNVIS_SPLAY, _("Splay")) ADDCB(lxSS_CLNVIS_DUPLICATE, _("Duplicate")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Walls lxBoxSizer = this->m_controlSizer_Walls = new wxBoxSizer(wxVERTICAL); ADDCB(lxSS_WALLS_TRANSPARENCY, _("Transparency")) lxBoxSizer->Add( new wxSlider(lxPanel, lxSS_WALLS_OPACITY, 50, 0, 100, wxDefaultPosition, wxDefaultSize), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Surface lxBoxSizer = this->m_controlSizer_Surface = new wxBoxSizer(wxVERTICAL); ADDCB(lxSS_SRF_TRANSPARENCY, _("Transparency")) lxBoxSizer->Add( new wxSlider(lxPanel, lxSS_SRF_OPACITY, 50, 0, 100, wxDefaultPosition, wxDefaultSize), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); ADDCB(lxSS_SRF_TEXTURE, _("Texture")) ADDCB(lxSS_SRF_LIGHTING, _("Lighting")) // ADDCB(wxID_ANY, _("Fit to underground")) this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Labels lxBoxSizer = this->m_controlSizer_Labels = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Marked stations")); ADDCB(lxSS_CLNVIS_ENTRANCE, _("Entrances")) ADDCB(lxSS_CLNVIS_FIX, _("Fixed stations")) ADDCB(lxSS_CLNVIS_STATION, _("All")) lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); ADDST(wxID_ANY, _("Labels")) ADDCB(lxSS_STLABEL_COMMENT, _("Comment")) ADDCB(lxSS_STLABEL_NAME, _("Name")) ADDCB(lxSS_STLABEL_SURVEY, _("Survey")) ADDCB(lxSS_STLABEL_ALTITUDE, _("Altitude")) // lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); // // ADDST(wxID_ANY, _("Other labels")) // ADDCB(wxID_ANY, _("Survey names")) // ADDCB(wxID_ANY, _("Map labels")) // ADDCB(wxID_ANY, _("Map remarks")) // this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // BBox & Grid // // lxBoxSizer = this->m_controlSizer_BBox2Grid = new wxBoxSizer(wxVERTICAL); // // ADDST(wxID_ANY, _("Bounding box size")) // // wxBoxSizer * bs2; // bs2 = new wxBoxSizer(wxHORIZONTAL); // // bs2->Add( // new wxStaticText(lxPanel, wxID_ANY, _T("Overlap (%)")), // 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, lxBORDER); // bs2->Add( // new wxSpinCtrl(lxPanel, 3332, _T("5"), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 5)); // lxSETWWIDTH(3332, 2); // lxBoxSizer->Add(bs2, 0, wxBOTTOM | wxALIGN_LEFT, lxBORDER); // // ADDCB(wxID_ANY, _("Fit bbox to grid")) // lxBoxSizer->Add(new wxStaticLine(lxPanel, wxID_ANY), 0, wxBOTTOM | wxEXPAND, lxBORDER); // ADDST(wxID_ANY, _("Grid labels")) // ADDCB(wxID_ANY, _("Altitude")) // ADDCB(wxID_ANY, _("XY coordinates")) // // this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); // updateCtrlMinSize; ///////////////////////////////////////////////////////// // Indicators lxBoxSizer = this->m_controlSizer_Indicators = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY, _("Project title")) lxBoxSizer->Add( new wxTextCtrl(lxPanel, lxSS_IND_PNAME), 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxBOTTOM, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Color setup // lxBoxSizer = this->m_controlSizer_ColorSetup = new wxBoxSizer(wxVERTICAL); // lxFlexGridSizer = new wxFlexGridSizer(2); ///////////////////////////////////////////////////////// // end of tools this->m_controlSizer->Layout(); wxCommandEvent cmdEvent; cmdEvent.SetInt(0); this->m_controlSizer->SetMinSize(ctrlMinSize); this->OnControlSelect(cmdEvent); sizerTop->Add(ctrlLBox, 0, wxALL | wxEXPAND, lxBORDER); lxBoxSizer = new wxBoxSizer(wxVERTICAL); lxBoxSizer->Add( this->m_controlSizer, 1, wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT); sizerTop->Add(lxBoxSizer, 1, wxALL | wxEXPAND, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); } void lxModelSetupDlg::InitSetup() { lxFTextCtrl(lxSS_IND_PNAME)->SetValue(this->m_mainFrame->data->title); } void lxModelSetupDlg::LoadSetup() { lxSetup * stp = this->m_mainFrame->setup; lxFCheckBox(lxSS_VIS_CENTERLINE)->SetValue(stp->m_vis_centerline); lxFCheckBox(lxSS_VIS_WALLS)->SetValue(stp->m_vis_walls); lxFCheckBox(lxSS_VIS_SURFACE)->SetValue(stp->m_vis_surface); // lxFCheckBox(lxSS_VIS_LABELS)->SetValue(stp->m_vis_labels); lxFCheckBox(lxSS_VIS_BBOX)->SetValue(stp->m_vis_bbox); // lxFCheckBox(lxSS_VIS_GRID)->SetValue(stp->m_vis_grid); lxFCheckBox(lxSS_VIS_INDICATORS)->SetValue(stp->m_vis_indicators); lxFCheckBox(lxSS_CLNVIS_CAVE)->SetValue(stp->m_vis_centerline_cave); lxFCheckBox(lxSS_CLNVIS_SURFACE)->SetValue(stp->m_vis_centerline_surface); lxFCheckBox(lxSS_CLNVIS_SPLAY)->SetValue(stp->m_vis_centerline_splay); lxFCheckBox(lxSS_CLNVIS_DUPLICATE)->SetValue(stp->m_vis_centerline_duplicate); lxFCheckBox(lxSS_CLNVIS_FIX)->SetValue(stp->m_vis_centerline_fix); lxFCheckBox(lxSS_CLNVIS_ENTRANCE)->SetValue(stp->m_vis_centerline_entrance); lxFCheckBox(lxSS_CLNVIS_STATION)->SetValue(stp->m_vis_centerline_station); lxFRadioBtn(lxSS_COLORMD_ALTITUDE)->SetValue(stp->m_colormd == lxSETUP_COLORMD_ALTITUDE); lxFRadioBtn(lxSS_COLORMD_DEFAULT)->SetValue(stp->m_colormd == lxSETUP_COLORMD_DEFAULT); lxFCheckBox(lxSS_COLORAPP_CENTERLINE)->SetValue(stp->m_colormd_app_centerline); lxFCheckBox(lxSS_COLORAPP_WALLS)->SetValue(stp->m_colormd_app_walls); lxFCheckBox(lxSS_STLABEL_ALTITUDE)->SetValue(stp->m_stlabel_altitude); lxFCheckBox(lxSS_STLABEL_NAME)->SetValue(stp->m_stlabel_name); lxFCheckBox(lxSS_STLABEL_SURVEY)->SetValue(stp->m_stlabel_survey); lxFCheckBox(lxSS_STLABEL_COMMENT)->SetValue(stp->m_stlabel_comment); lxFCheckBox(lxSS_SRF_TRANSPARENCY)->SetValue(stp->m_srf_transparency); lxFCheckBox(lxSS_SRF_TEXTURE)->SetValue(stp->m_srf_texture); lxFCheckBox(lxSS_SRF_LIGHTING)->SetValue(stp->m_srf_lighting); lxFSlider(lxSS_SRF_OPACITY)->SetValue(100 - int(stp->m_srf_opacity * 100.0)); lxFCheckBox(lxSS_WALLS_TRANSPARENCY)->SetValue(stp->m_walls_transparency); lxFSlider(lxSS_WALLS_OPACITY)->SetValue(100 - int(stp->m_walls_opacity * 100.0)); } therion-5.4.1/loch/lxSScene.h000066400000000000000000000020661307545355600160340ustar00rootroot00000000000000/** * @file lxSScene.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSScene_h #define lxSScene_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxWX.h" enum { LXMSTP_CONTROLLB, }; class lxModelSetupDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; class lxFrame * m_mainFrame; wxBoxSizer * m_controlSizer, * m_controlSizer_ColorMode, * m_controlSizer_Visibility, * m_controlSizer_Centerline, * m_controlSizer_Walls, * m_controlSizer_Surface, * m_controlSizer_Labels, * m_controlSizer_BBox2Grid, * m_controlSizer_Indicators, * m_controlSizer_ColorSetup; lxModelSetupDlg(wxWindow *parent); void LoadSetup(); void InitSetup(); void OnSlider(wxScrollEvent& event); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); void OnControlSelect(wxCommandEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion-5.4.1/loch/lxSTree.cxx000066400000000000000000000051121307545355600162440ustar00rootroot00000000000000// Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxSTree.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif enum { lxSS_SURVEY_TREE = 4000, }; BEGIN_EVENT_TABLE(lxModelTreeDlg, wxMiniFrame) EVT_BUTTON(wxID_ANY, lxModelTreeDlg::OnCommand) EVT_BUTTON(wxID_CLOSE, lxModelTreeDlg::OnCommand) EVT_MOVE(lxModelTreeDlg::OnMove) EVT_CLOSE(lxModelTreeDlg::OnClose) END_EVENT_TABLE() void lxModelTreeDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleSelectionSetup(); break; } } void lxModelTreeDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleSelectionSetup(); } void lxModelTreeDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { this->m_toolBoxPosition.Save(); } lxModelTreeDlg::lxModelTreeDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Selection"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { this->m_toolBoxPosition.Init(this, parent, 0, 8, 8); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; wxBoxSizer * sizerFrame = new wxBoxSizer(wxVERTICAL); wxBoxSizer * sizerTop = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); this->m_treeControl = new wxTreeCtrl(lxPanel); sizerTop->Add( this->m_treeControl, 1, wxALL | wxEXPAND, lxBORDER); sizerTop->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT | lxNOTTOP, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); wxSize mfs = this->m_mainFrame->GetSize(); this->SetSize(mfs.GetWidth() / 4, mfs.GetHeight() / 2); } void lxModelTreeDlg::LoadData() { this->m_treeControl->DeleteAllItems(); lxData * data = this->m_mainFrame->data; std::vector parents; lxDataSurveyVec::iterator i; if (data == NULL) return; i = data->surveys.begin(); if (i == data->surveys.end()) return; wxTreeItemId tmpId = this->m_treeControl->AddRoot(_T("Surveys")); parents.push_back(tmpId); i++; for(; i != data->surveys.end(); i++) { parents.push_back(this->m_treeControl->AppendItem(parents[i->m_parent], wxConvUTF8.cMB2WX(strlen(i->m_title) > 0 ? i->m_title : i->m_name))); } } therion-5.4.1/loch/lxSTree.h000066400000000000000000000012701307545355600156720ustar00rootroot00000000000000/** * @file lxSTree.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSTree_h #define lxSTree_h // Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standard libraries #include "lxWX.h" class lxModelTreeDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; class lxFrame * m_mainFrame; wxTreeCtrl * m_treeControl; lxModelTreeDlg(wxWindow *parent); void LoadData(); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion-5.4.1/loch/lxSView.cxx000066400000000000000000000455771307545355600163020ustar00rootroot00000000000000// Standard libraries #ifndef LXDEPCHECK #include #include #endif //LXDEPCHECK - standard libraries #include "lxSView.h" #include "lxGUI.h" #include "lxGLC.h" #include "lxSetup.h" #ifndef LXGNUMSW #include "loch.xpm" #endif #define POS(r, c) wxGBPosition(r,c) #define SPAN(r, c) wxGBSpan(r,c) BEGIN_EVENT_TABLE(lxViewpointSetupDlg, wxMiniFrame) EVT_BUTTON(wxID_CLOSE, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_PERSP, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_ROTATION, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_ROTLOCK, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_STEREO, lxViewpointSetupDlg::OnCommand) EVT_CHECKBOX(LXVSTP_STEREOBW, lxViewpointSetupDlg::OnCommand) EVT_CHOICE(LXVSTP_3DGLASSES, lxViewpointSetupDlg::OnCommand) EVT_MOVE(lxViewpointSetupDlg::OnMove) EVT_CLOSE(lxViewpointSetupDlg::OnClose) EVT_LISTBOX(LXVSTP_CONTROLLB, lxViewpointSetupDlg::OnControlSelect) EVT_TEXT(LXVSTP_FACING, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_TILT, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERX, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERY, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_CENTERZ, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_DIST, lxViewpointSetupDlg::OnText) EVT_TEXT(LXVSTP_ZOOM, lxViewpointSetupDlg::OnText) EVT_COMMAND_SCROLL(LXVSTP_FACINGSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_TILTSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_ZOOMSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_DISTSLIDE, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_EYESEP, lxViewpointSetupDlg::OnSlider) EVT_COMMAND_SCROLL(LXVSTP_ROTSPEED, lxViewpointSetupDlg::OnSlider) END_EVENT_TABLE() void lxViewpointSetupDlg::OnControlSelect(wxCommandEvent& event) { this->m_controlSizer->Show(this->m_controlSizer_Orientation, event.GetSelection() == 0); this->m_controlSizer->Show(this->m_controlSizer_Center, event.GetSelection() == 1); this->m_controlSizer->Show(this->m_controlSizer_Camera, event.GetSelection() == 2); this->m_controlSizer->Show(this->m_controlSizer_Rotation, event.GetSelection() == 3); this->m_controlSizer->Show(this->m_controlSizer_Stereo, event.GetSelection() == 4); this->m_controlSizer->Layout(); } void lxViewpointSetupDlg::OnText(wxCommandEvent& event) { bool update = false; double tmpv; switch (event.GetId()) { case LXVSTP_FACING: if (this->m_uicFacing) { if ((lxFTextCtrl(LXVSTP_FACING)->GetValue().ToDouble(&tmpv)) && (tmpv >= 0.0) && (tmpv < 360.0)) { this->m_mainFrame->setup->cam_dir = tmpv; update = true; } } this->m_uicFacing = true; break; case LXVSTP_TILT: if (this->m_uicTilt) { if ((lxFTextCtrl(LXVSTP_TILT)->GetValue().ToDouble(&tmpv)) && (tmpv <= 90.0) && (tmpv >= -90.0)) { this->m_mainFrame->setup->cam_tilt = tmpv; update = true; } } this->m_uicTilt = true; break; case LXVSTP_DIST: if (this->m_uicDist) { if ((lxFTextCtrl(LXVSTP_DIST)->GetValue().ToDouble(&tmpv)) && (tmpv > 0.0)) { this->m_mainFrame->setup->cam_dist = tmpv; update = true; } } this->m_uicDist = true; break; case LXVSTP_ZOOM: if (this->m_uicZoom) { if ((lxFTextCtrl(LXVSTP_ZOOM)->GetValue().ToDouble(&tmpv)) && (tmpv >= 20.0) && (tmpv <= 2000.0)) { double oldvfovr = this->m_mainFrame->setup->cam_lens_vfovr; this->m_mainFrame->setup->SetLens(tmpv); this->m_mainFrame->setup->cam_dist *= oldvfovr / this->m_mainFrame->setup->cam_lens_vfovr; this->m_uicDist = false; lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%.0f"), this->m_mainFrame->setup->cam_dist)); update = true; } } this->m_uicZoom = true; break; case LXVSTP_CENTERX: if (this->m_uicCenterX) { if (lxFTextCtrl(LXVSTP_CENTERX)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.x = tmpv; update = true; } } this->m_uicCenterX = true; break; case LXVSTP_CENTERY: if (this->m_uicCenterY) { if (lxFTextCtrl(LXVSTP_CENTERY)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.y = tmpv; update = true; } } this->m_uicCenterY = true; break; case LXVSTP_CENTERZ: if (this->m_uicCenterZ) { if (lxFTextCtrl(LXVSTP_CENTERZ)->GetValue().ToDouble(&tmpv)) { this->m_mainFrame->setup->cam_center.z = tmpv; update = true; } } this->m_uicCenterZ = true; break; } if (update) { this->m_mainFrame->setup->UpdatePos(); this->m_mainFrame->canvas->ForceRefresh(false); this->SetSliders(); } } void lxViewpointSetupDlg::OnSlider(wxScrollEvent& event) { wxCommandEvent tmpEvent(wxEVT_COMMAND_TEXT_UPDATED); switch (event.GetId()) { case LXVSTP_FACINGSLIDE: #ifndef LXDEPCHECK #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_FACING)->ChangeValue(wxString::Format(_T("%d"), event.GetInt())); tmpEvent.SetId(LXVSTP_FACING); #else lxFTextCtrl(LXVSTP_FACING)->SetValue(wxString::Format(_T("%d"), event.GetInt())); #endif break; case LXVSTP_TILTSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_TILT)->ChangeValue(wxString::Format(_T("%d"), event.GetInt())); tmpEvent.SetId(LXVSTP_TILT); #else lxFTextCtrl(LXVSTP_TILT)->SetValue(wxString::Format(_T("%d"), event.GetInt())); #endif break; case LXVSTP_ZOOMSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_ZOOM)->ChangeValue(wxString::Format(_T("%d"), int(20.0 * pow(100.0, (double(event.GetInt()) / 1000.0))))); tmpEvent.SetId(LXVSTP_ZOOM); #else lxFTextCtrl(LXVSTP_ZOOM)->SetValue(wxString::Format(_T("%d"), int(20.0 * pow(100.0, (double(event.GetInt()) / 1000.0))))); #endif break; case LXVSTP_DISTSLIDE: #if wxCHECK_VERSION(2,7,1) lxFTextCtrl(LXVSTP_DIST)->ChangeValue(wxString::Format(_T("%d"), int(pow(200.0 * this->m_mainFrame->setup->data_limits_diam, (double(event.GetInt()) / 1000.0))))); tmpEvent.SetId(LXVSTP_DIST); #else lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%d"), int(pow(200.0 * this->m_mainFrame->setup->data_limits_diam, (double(event.GetInt()) / 1000.0))))); #endif #endif break; case LXVSTP_ROTSPEED: this->m_mainFrame->canvas->m_sCameraAutoRotateAngle = (event.GetInt() >= 0 ? 1.0 : -1.0) * 0.05 * pow(200.0, fabs(double(event.GetInt())) / 1000.0); break; case LXVSTP_EYESEP: this->m_mainFrame->setup->cam_anaglyph_eyesep = (double(event.GetInt()) / 10000.0); if (this->m_mainFrame->setup->cam_anaglyph) this->m_mainFrame->canvas->ForceRefresh(false); break; } this->OnText(tmpEvent); } void lxViewpointSetupDlg::OnCommand(wxCommandEvent& event) { switch (event.GetId()) { case wxID_CLOSE: this->m_mainFrame->ToggleViewpointSetup(); break; case LXVSTP_PERSP: this->m_mainFrame->TogglePerspective(); break; case LXVSTP_STEREO: this->m_mainFrame->ToggleStereo(); break; case LXVSTP_STEREOBW: this->m_mainFrame->ToggleStereoBW(); break; case LXVSTP_ROTATION: this->m_mainFrame->ToggleRotation(); break; case LXVSTP_ROTLOCK: this->m_mainFrame->ToggleRotLock(); break; case LXVSTP_3DGLASSES: this->m_mainFrame->setup->cam_anaglyph_glasses = event.GetSelection(); if (this->m_mainFrame->setup->cam_anaglyph) this->m_mainFrame->canvas->ForceRefresh(); break; } } void lxViewpointSetupDlg::OnClose(wxCloseEvent& WXUNUSED(event)) { this->m_mainFrame->ToggleViewpointSetup(); } void lxViewpointSetupDlg::OnMove(wxMoveEvent& WXUNUSED(event)) { if (!this->IsIconized()) { this->m_toolBoxPosition.Save(); } } lxViewpointSetupDlg::lxViewpointSetupDlg(wxWindow *parent) : wxMiniFrame(parent, wxID_ANY, _(" Camera"),wxDefaultPosition, wxDefaultSize, (wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX) & (~(wxMINIMIZE_BOX | wxMAXIMIZE_BOX))) { m_toolBoxPosition.Init(this, parent, 0, 0, 0); #ifdef LXGNUMSW this->SetIcon(wxIcon(_T("LOCHICON"))); #else this->SetIcon(wxIcon(loch_xpm)); #endif this->m_mainFrame = (lxFrame *) parent; this->m_uicFacing = false; this->m_uicTilt = false; this->m_uicCenterX = false; this->m_uicCenterY = false; this->m_uicCenterZ = false; this->m_uicDist = false; this->m_uicZoom = false; ///////////////////////////////////////////////////////////// wxBoxSizer * sizerTop = new wxBoxSizer(wxHORIZONTAL), * sizerFrame = new wxBoxSizer(wxVERTICAL); lxPanel = new wxPanel(this, wxID_ANY); wxListBox * ctrlLBox; ctrlLBox = new wxListBox(lxPanel, LXVSTP_CONTROLLB); ctrlLBox->AppendString(_("Orientation")); ctrlLBox->AppendString(_("Center")); ctrlLBox->AppendString(_("Focus")); ctrlLBox->AppendString(_("Rotation")); ctrlLBox->AppendString(_("Stereo mode")); this->m_controlSizer = new wxBoxSizer(wxVERTICAL); wxSize ctrlMinSize; #define ADDCB(id, ss) \ lxBoxSizer->Add( \ new wxCheckBox(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); #define ADDRB(id, ss) \ lxBoxSizer->Add( \ new wxRadioButton(lxPanel, id, ss), \ 0, wxALIGN_CENTER_VERTICAL | wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); #define ADDST(id, ss) \ lxBoxSizer->Add( \ new wxStaticText(lxPanel, id, ss), \ 0, wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); ///////////////////////////////////////////////////////// // Orientation lxBoxSizer = this->m_controlSizer_Orientation = new wxBoxSizer(wxVERTICAL); lxGBSizer = new wxGridBagSizer(); lxGBSizer->SetCols(2); lxGBSizer->AddGrowableCol(1, 1); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Facing (deg)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_FACING, _T("0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_FACINGSLIDE, 0, 0, 359), POS(1, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_FACING, 2); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Tilt (deg)")), POS(2, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_TILT, _T("90"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(2, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_TILTSLIDE, 0, -90, 90), POS(3, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_TILT, 2); lxBoxSizer->Add(lxGBSizer, 0, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 1, wxEXPAND); ctrlMinSize = lxBoxSizer->GetMinSize(); #define updateCtrlMinSize \ lxSize = lxBoxSizer->GetMinSize(); \ if (lxSize.x > ctrlMinSize.x) ctrlMinSize.x = lxSize.x; \ if (lxSize.y > ctrlMinSize.y) ctrlMinSize.y = lxSize.y; ///////////////////////////////////////////////////////// // Center lxBoxSizer = this->m_controlSizer_Center = new wxBoxSizer(wxVERTICAL); ADDST(wxID_ANY,_("Rotation center")); lxGBSizer = new wxGridBagSizer(); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Easting (m)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERX, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERX, 3); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Northing (m)")), POS(1, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERY, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(1, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERY, 3); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Altitude (m)")), POS(2, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_CENTERZ, _T("100.0"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(2, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxSETWWIDTH(LXVSTP_CENTERZ, 3); lxBoxSizer->Add(lxGBSizer, 1, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Camera lxBoxSizer = this->m_controlSizer_Camera = new wxBoxSizer(wxVERTICAL); lxGBSizer = new wxGridBagSizer(); lxGBSizer->SetCols(2); lxGBSizer->AddGrowableCol(1, 1); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Distance (m)")), POS(0, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_DIST, _T("100"), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(0, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_DISTSLIDE, 0, 0, 1000), POS(1, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_DIST, 2.0); lxGBSizer->Add( new wxCheckBox(lxPanel, LXVSTP_PERSP, _("Orthogonal view")), POS(2,0), SPAN(1, 2), wxBOTTOM | wxALIGN_LEFT, lxBORDER); lxGBSizer->Add( new wxStaticText(lxPanel, wxID_ANY, _("Focus (mm)")), POS(3, 0), SPAN(1, 1), wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxBOTTOM | wxRIGHT, lxBORDER); lxGBSizer->Add( new wxTextCtrl(lxPanel, LXVSTP_ZOOM, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_RIGHT), POS(3, 1), SPAN(1, 1), wxALIGN_LEFT | wxBOTTOM, lxBORDER); lxGBSizer->Add( new wxSlider(lxPanel, LXVSTP_ZOOMSLIDE, 0, 0, 1000), POS(4, 0), SPAN(1, 2), wxBOTTOM | wxEXPAND, lxBORDER); lxSETWWIDTH(LXVSTP_ZOOM, 2.0); lxBoxSizer->Add(lxGBSizer, 0, wxEXPAND); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Rotation lxBoxSizer = this->m_controlSizer_Rotation = new wxBoxSizer(wxVERTICAL); ADDCB(LXVSTP_ROTATION, _("Enable rotation")) ADDCB(LXVSTP_ROTLOCK, _("Lock rotation")) ADDST(wxID_ANY, _("Rotation speed")) wxSlider * rspeed = new wxSlider(lxPanel, LXVSTP_ROTSPEED, 0, -1000, 1000, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL | wxSL_AUTOTICKS); #if wxCHECK_VERSION(3,0,0) rspeed->SetTickFreq(1000); #else rspeed->SetTickFreq(1000,0); #endif lxBoxSizer->Add( rspeed, 0, wxBOTTOM | wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxStaticText(lxPanel, LXVSTP_RENSPEED, _T("")), 0, wxALIGN_LEFT | wxBOTTOM | wxEXPAND, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // Stereo lxBoxSizer = this->m_controlSizer_Stereo = new wxBoxSizer(wxVERTICAL); ADDCB(LXVSTP_STEREO, _("Enable stereo mode")) ADDST(wxID_ANY, _("Eye separation")) lxBoxSizer->Add( new wxSlider(lxPanel, LXVSTP_EYESEP, 250, 1, 1000), 0, wxEXPAND); wxChoice * ch = new wxChoice(lxPanel, LXVSTP_3DGLASSES); ch->Append(_("red & cyan")); ch->Append(_("red & green")); ch->Append(_("red & blue")); ch->Append(_("yellow & blue")); ch->Append(_("cyan & red")); ch->Append(_("green & red")); ch->Append(_("blue & red")); ch->Append(_("blue & yellow")); ch->SetSelection(0); ADDCB(LXVSTP_STEREOBW, _("Disable color textures")) ADDST(wxID_ANY, _("Color channels")) lxBoxSizer->Add(ch, 0, wxBOTTOM | wxEXPAND, lxBORDER); this->m_controlSizer->Add(lxBoxSizer, 0, wxEXPAND); updateCtrlMinSize; ///////////////////////////////////////////////////////// // end of tools this->m_controlSizer->Layout(); wxCommandEvent cmdEvent; cmdEvent.SetInt(0); this->m_controlSizer->SetMinSize(ctrlMinSize); this->OnControlSelect(cmdEvent); sizerTop->Add(ctrlLBox, 0, wxALL | wxEXPAND, lxBORDER); lxBoxSizer = new wxBoxSizer(wxVERTICAL); lxBoxSizer->Add( this->m_controlSizer, 1, wxEXPAND, lxBORDER); lxBoxSizer->Add( new wxButton(lxPanel, wxID_CLOSE, _("Close")), 0, wxALIGN_RIGHT); sizerTop->Add(lxBoxSizer, 1, wxALL | wxEXPAND, lxBORDER); lxPanel->SetSizer(sizerTop); sizerTop->Fit(lxPanel); sizerFrame->Add(lxPanel, 1, wxEXPAND | wxALL); this->SetSizer(sizerFrame); sizerFrame->SetSizeHints(this); sizerFrame->Fit(this); wxCommandEvent cmdEvt; cmdEvt.SetInt(3); this->OnControlSelect(cmdEvt); ctrlLBox->Select(3); } bool lxViewpointSetupDlg::IsChanged() { return false; } void lxViewpointSetupDlg::LoadSetup() { lxSetup * stp = this->m_mainFrame->setup; this->m_uicFacing = false; lxFTextCtrl(LXVSTP_FACING)->SetValue(wxString::Format(_T("%.0f"), stp->cam_dir)); this->m_uicTilt = false; lxFTextCtrl(LXVSTP_TILT)->SetValue(wxString::Format(_T("%.0f"), stp->cam_tilt)); this->m_uicCenterX = false; lxFTextCtrl(LXVSTP_CENTERX)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.x)); this->m_uicCenterY = false; lxFTextCtrl(LXVSTP_CENTERY)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.y)); this->m_uicCenterZ = false; lxFTextCtrl(LXVSTP_CENTERZ)->SetValue(wxString::Format(_T("%.0f"), stp->cam_center.z)); this->m_uicDist = false; lxFTextCtrl(LXVSTP_DIST)->SetValue(wxString::Format(_T("%.0f"), stp->cam_dist)); this->m_uicZoom = false; lxFTextCtrl(LXVSTP_ZOOM)->SetValue(wxString::Format(_T("%.0f"), stp->cam_lens)); lxFCheckBox(LXVSTP_PERSP)->SetValue(!stp->cam_persp); lxFCheckBox(LXVSTP_STEREO)->SetValue(stp->cam_anaglyph); lxFCheckBox(LXVSTP_STEREOBW)->SetValue(stp->cam_anaglyph_bw); lxFCheckBox(LXVSTP_ROTATION)->SetValue(this->m_mainFrame->canvas->m_sCameraAutoRotate); lxFCheckBox(LXVSTP_ROTLOCK)->SetValue(this->m_mainFrame->canvas->m_sCameraLockRotation); if (this->m_mainFrame->canvas->m_sCameraAutoRotate) lxFCheckBox(LXVSTP_ROTLOCK)->SetLabel(_("Lock rotation speed")); else lxFCheckBox(LXVSTP_ROTLOCK)->SetLabel(_("Lock rotation")); this->SetSliders(); this->IsChanged(); } void lxViewpointSetupDlg::SetSliders() { lxSetup * stp = this->m_mainFrame->setup; lxFSlider(LXVSTP_FACINGSLIDE)->SetValue(int(stp->cam_dir)); lxFSlider(LXVSTP_TILTSLIDE)->SetValue(int(stp->cam_tilt)); lxFSlider(LXVSTP_ZOOMSLIDE)->SetValue(int(1000.0 * log(stp->cam_lens / 20.0)/log(100.0) + 0.5)); lxFSlider(LXVSTP_DISTSLIDE)->SetValue(int(1000.0 * log(stp->cam_dist)/log(200.0 * stp->data_limits_diam) + 0.5)); lxFSlider(LXVSTP_EYESEP)->SetValue(int(stp->cam_anaglyph_eyesep * 10000.0)); lxFSlider(LXVSTP_ROTSPEED)->SetValue(int(fabs(this->m_mainFrame->canvas->m_sCameraAutoRotateAngle) < 0.05 ? 0.0 : (this->m_mainFrame->canvas->m_sCameraAutoRotateAngle > 0 ? 1 : -1) * int(1000.0 * log(fabs(this->m_mainFrame->canvas->m_sCameraAutoRotateAngle) / 0.05)/log(200.0) + 0.5))); } therion-5.4.1/loch/lxSView.h000066400000000000000000000027661307545355600157200ustar00rootroot00000000000000/** * @file lxSView.h * Loch scene setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSView_h #define lxSView_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxWX.h" enum { LXVSTP_CONTROLLB = 10000, LXVSTP_PERSP, LXVSTP_ZOOM, LXVSTP_ZOOMSLIDE, LXVSTP_FACING, LXVSTP_FACINGSLIDE, LXVSTP_TILT, LXVSTP_TILTSLIDE, LXVSTP_DIST, LXVSTP_DISTSLIDE, LXVSTP_CENTERX, LXVSTP_CENTERY, LXVSTP_CENTERZ, LXVSTP_ROTATION, LXVSTP_ROTLOCK, LXVSTP_ROTSPEED, LXVSTP_STEREO, LXVSTP_STEREOBW, LXVSTP_3DGLASSES, LXVSTP_EYESEP, LXVSTP_RENSPEED, }; class lxViewpointSetupDlg : public wxMiniFrame { public: lxTBoxPos m_toolBoxPosition; lxCRC32 m_toolBoxCRC; class lxFrame * m_mainFrame; wxBoxSizer * m_controlSizer, * m_controlSizer_Orientation, * m_controlSizer_Center, * m_controlSizer_Camera, * m_controlSizer_Rotation, * m_controlSizer_Stereo; bool m_uicFacing, m_uicTilt, m_uicCenterX, m_uicCenterY, m_uicCenterZ, m_uicDist, m_uicZoom; lxViewpointSetupDlg(wxWindow *parent); bool IsChanged(); void LoadSetup(); void SetSliders(); void OnCommand(wxCommandEvent& event); void OnClose(wxCloseEvent& event); void OnMove(wxMoveEvent& event); void OnControlSelect(wxCommandEvent& event); void OnSlider(wxScrollEvent& event); void OnText(wxCommandEvent& event); private: DECLARE_EVENT_TABLE() }; #endif therion-5.4.1/loch/lxSetup.cxx000066400000000000000000000277411307545355600163360ustar00rootroot00000000000000/** * @file lxSetup.cxx * Loch model setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #endif //LXDEPCHECK - standard libraries #include "lxSetup.h" #include "lxData.h" lxSetup::lxSetup(lxData * dat) { this->data = dat; this->UpdateData(); this->cam_dir = 0; this->cam_tilt = 90; this->cam_persp = true; this->SetLens(50.0); this->cam_anaglyph = false; this->cam_anaglyph_bw = true; this->cam_anaglyph_left = false; this->cam_anaglyph_eyesep = 0.02; this->cam_anaglyph_glasses = 0; this->m_vis_centerline = true; this->m_vis_walls = true; this->m_vis_surface = true; this->m_vis_labels = false; this->m_vis_bbox = true; this->m_vis_indicators = true; this->m_vis_grid = false; this->m_vis_centerline_cave = true; this->m_vis_centerline_surface = true; this->m_vis_centerline_splay = false; this->m_vis_centerline_duplicate = false; this->m_vis_centerline_entrance = false; this->m_vis_centerline_fix = false; this->m_vis_centerline_station = false; this->m_stlabel_altitude = false; this->m_stlabel_comment = false; this->m_stlabel_name = false; this->m_stlabel_survey = false; this->m_colormd = lxSETUP_COLORMD_ALTITUDE; this->m_colormd_app_centerline = true; this->m_colormd_app_walls = true; this->m_srf_transparency = true; this->m_srf_texture = true; this->m_srf_opacity = 0.5; this->m_srf_lighting = false; this->m_walls_transparency = false; this->m_walls_opacity = 0.5; } void lxSetup::SetLens(double lens) { this->cam_lens = lens; if (this->cam_lens < 20.0) this->cam_lens = 20.0; if (this->cam_lens > 2000.0) this->cam_lens = 2000.0; this->cam_lens_vfov = atan(12.0 / this->cam_lens) / lxPI * 360.0; this->cam_lens_vfovr = 12.0 / this->cam_lens; } void lxSetup::UpdateData() { // udate data limits lxVecLimits tmp, tmpZ; tmp.valid = false; this->data_limits.valid = false; unsigned long id, nid; double * bnds; nid = this->data->shots.size(); lxDataShot * shp; for(id = 0; id < nid; id++) { shp = &(this->data->shots[id]); if (this->m_vis_centerline && (((!shp->surface) && this->m_vis_centerline_cave) || (shp->surface && this->m_vis_centerline_surface))) { this->data_limits.Add(this->data->stations[shp->from].pos); this->data_limits.Add(this->data->stations[shp->to].pos); if (!shp->surface) { tmpZ.Add(this->data->stations[shp->from].pos); tmpZ.Add(this->data->stations[shp->to].pos); } } } nid = this->data->stations.size(); for(id = 0; id < nid; id++) { tmp.Add(this->data->stations[id].pos); } vtkPolyData * w; w = this->data->allWalls->GetOutput(); if ((w != NULL) && (w->GetNumberOfPoints() > 0)) { bnds = w->GetBounds(); if (this->m_vis_walls) { this->data_limits.Add(bnds[0], bnds[2], bnds[4]); this->data_limits.Add(bnds[1], bnds[3], bnds[5]); tmpZ.Add(bnds[0], bnds[2], bnds[4]); tmpZ.Add(bnds[1], bnds[3], bnds[5]); } tmp.Add(bnds[0], bnds[2], bnds[4]); tmp.Add(bnds[1], bnds[3], bnds[5]); } if (tmpZ.valid) { this->data->luTable->SetTableRange(tmpZ.min.z, tmpZ.max.z); } else if (this->data_limits.valid) { this->data->luTable->SetTableRange(this->data_limits.min.z, this->data_limits.max.z); } if ((this->data->surface != NULL) && (this->data->surface->GetNumberOfPoints() > 0)) { bnds = this->data->surface->GetBounds(); if (this->m_vis_surface) { this->data_limits.Add(bnds[0], bnds[2], bnds[4]); this->data_limits.Add(bnds[1], bnds[3], bnds[5]); } tmp.Add(bnds[0], bnds[2], bnds[4]); tmp.Add(bnds[1], bnds[3], bnds[5]); } if (!this->data_limits.valid) { if (tmp.valid) this->data_limits = tmp; else { this->data_limits.Add(0.0, 0.0, 0.0); this->data_limits.Add(300.0, 200.0, 100.0); } this->data->luTable->SetTableRange(this->data_limits.min.z, this->data_limits.max.z); } this->data_limits_diam = (this->data_limits.max - this->data_limits.min).Length(); } void lxSetup::UpdatePos() { this->cam_pos = this->cam_center + \ lxPol2Vec(this->cam_dist, this->cam_dir + 180.0, this->cam_tilt); } void lxSetup::ResetCamera() { this->cam_center = (this->data_limits.min + this->data_limits.max) / 2.0; lxVecLimits target = this->data_limits.Rotate(this->cam_dir, this->cam_tilt, this->cam_center); double model_width; model_width = target.max.x / lxVecAbs(target.max).z; if (this->cam_width > model_width) { this->cam_dist = target.max.z / (this->cam_lens_vfovr * 0.99); } else { this->cam_dist = target.max.x / (this->cam_lens_vfovr * this->cam_width * 0.99); } if (this->cam_persp) { this->cam_dist += target.max.y; } this->UpdatePos(); //if (this->cam_persp) { // //} //printf("MAX: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->data_limits.max)); //printf("MIN: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->data_limits.min)); //printf("CENTER: %8.2f %8.2f %8.2f\n", lxVecXYZ(this->cam_center)); //printf("MLMAX: %8.2f %8.2f %8.2f\n", lxVecXYZ(target.max)); //printf("MLMIN: %8.2f %8.2f %8.2f\n", lxVecXYZ(target.min)); //printf("DIST: %8.2f\n", this->cam_dist); //printf("WIDTH: %8.2f\n", this->cam_width); } #define calc_cam_pos void lxSetup::StartCameraMovement() { this->cam_orig_center = this->cam_center; this->cam_orig_pos = this->cam_pos; this->cam_orig_dist = this->cam_dist; this->cam_orig_dir = this->cam_dir; this->cam_orig_tilt = this->cam_tilt; } void lxSetup::ZoomCamera(double zoom) { if (zoom > 0.0) this->cam_dist = this->cam_orig_dist / zoom; this->UpdatePos(); } void lxSetup::PanCamera(double panx, double pany) { this->cam_center = this->cam_orig_center + lxPol2Vec(panx * this->cam_dist * 2.0 * this->cam_lens_vfovr * this->cam_width, this->cam_dir + 270.0, 0); this->cam_center = this->cam_center + lxPol2Vec(pany * this->cam_dist * 2.0 * this->cam_lens_vfovr, this->cam_dir + (this->cam_tilt > 0.0 ? 0 : 180.0), (this->cam_tilt > 0 ? 90.0 - this->cam_tilt : 90 + this->cam_tilt)); this->UpdatePos(); } void lxSetup::TiltCamera(double tilt) { this->cam_tilt = this->cam_orig_tilt + tilt; if (this->cam_tilt > 90.0) this->cam_tilt = 90.0; if (this->cam_tilt < -90.0) this->cam_tilt = -90.0; this->UpdatePos(); } void lxSetup::RotateCamera(double rot) { this->cam_dir = this->cam_orig_dir + rot; if (this->cam_dir < 0.0) { this->cam_dir += 360.0 * ceil(fabs(this->cam_dir) / 360.0); } if (this->cam_dir >= 360.0) { this->cam_dir -= 360.0 * floor(this->cam_dir / 360.0); } this->UpdatePos(); } void lxSetup::RotateCameraF(double rot) { this->cam_orig_dir += rot; this->RotateCamera(0.0); } void lxSetup::SelectSurvey(const char * survey) { this->m_survey_selection.insert(std::string(survey)); } bool lxSetup::IsSurveySelected(const char * survey) { if (this->m_survey_selection.size() == 0) return true; std::set::iterator it = this->m_survey_selection.find(std::string(survey)); if (it != this->m_survey_selection.end()) return true; return false; } void lxSetup::ClearSurveySelection() { this->m_survey_selection.clear(); } void lxSetup::SaveToXMLNode(wxXmlNode * n) { wxXmlNode * tmp, * tmpd; // remove all children tmp = n->GetChildren(); while (tmp != NULL) { tmpd = tmp; tmp = tmp->GetNext(); if (tmpd->GetName().StartsWith(_T("Camera"))) n->RemoveChild(tmpd); delete tmpd; } // save settings char * prevlocale = setlocale(LC_NUMERIC,NULL); setlocale(LC_NUMERIC,"C"); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraFacing")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_dir))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraTilt")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_tilt))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraCenterX")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_center.x))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraCenterY")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_center.y))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraCenterZ")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_center.z))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraDistance")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_dist))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraFocus")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, wxString::Format(_T("%.4f"), this->cam_lens))); n->AddChild(tmp); tmp = new wxXmlNode(wxXML_ELEMENT_NODE, _T("CameraPerspective")); tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString, this->cam_persp ? _T("true") : _T("false"))); n->AddChild(tmp); setlocale(LC_NUMERIC,prevlocale); } wxString getXmlValue(wxXmlNode * n, const wxString & name) { wxString rv; if (n != NULL) { wxXmlNode * t = n->GetChildren(), * tt; while(t != NULL) { if (t->GetName() == name) { tt = t->GetChildren(); if (tt->GetType() == wxXML_TEXT_NODE) rv = tt->GetContent(); } t = t->GetNext(); } } return rv; } void interpolateFloat(double * value, wxString v1, wxString v2, double t) { if (v1.empty()) return; if (v2.empty()) *value = atof(v1.mbc_str()); else *value = (1.0 - t) * atof(v1.mbc_str()) + t * atof(v2.mbc_str()); } void interpolateBoolean(bool * value, wxString v1, wxString v2, double t) { if (v1.empty()) return; if (v2.empty()) *value = (v1 == _T("true")); else { if (t <= 0.5) *value = (v1 == _T("true")); else *value = (v2 == _T("true")); } } void lxSetup::LoadFromXMLNode(wxXmlNode * n, wxXmlNode * nn, double t) { if (n->GetName() != _T("Scene")) return; char * prevlocale = setlocale(LC_NUMERIC,NULL); double d; setlocale(LC_NUMERIC,"C"); interpolateFloat(&(this->cam_dir), getXmlValue(n, _T("CameraFacing")), getXmlValue(nn, _T("CameraFacing")), t); interpolateFloat(&(this->cam_tilt), getXmlValue(n, _T("CameraTilt")), getXmlValue(nn, _T("CameraTilt")), t); interpolateFloat(&(this->cam_center.x), getXmlValue(n, _T("CameraCenterX")), getXmlValue(nn, _T("CameraCenterX")), t); interpolateFloat(&(this->cam_center.y), getXmlValue(n, _T("CameraCenterY")), getXmlValue(nn, _T("CameraCenterY")), t); interpolateFloat(&(this->cam_center.z), getXmlValue(n, _T("CameraCenterZ")), getXmlValue(nn, _T("CameraCenterZ")), t); interpolateFloat(&(this->cam_dist), getXmlValue(n, _T("CameraDistance")), getXmlValue(nn, _T("CameraDistance")), t); d = 20.0; interpolateFloat(&d, getXmlValue(n, _T("CameraFocus")), getXmlValue(nn, _T("CameraFocus")), t); this->SetLens(d); interpolateBoolean(&(this->cam_persp), getXmlValue(n, _T("CameraPerspective")), getXmlValue(nn, _T("CameraPerspective")), t); this->UpdatePos(); setlocale(LC_NUMERIC,prevlocale); } therion-5.4.1/loch/lxSetup.h000066400000000000000000000043141307545355600157520ustar00rootroot00000000000000/** * @file lxSetup.h * Loch model setup. */ /* Copyright (C) 2004 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ */ #ifndef lxSetup_h #define lxSetup_h // Standard libraries #ifndef LXDEPCHECK #include #endif //LXDEPCHECK - standard libraries #include "lxData.h" #include "lxMath.h" #include enum { lxSETUP_COLORMD_DEFAULT, lxSETUP_COLORMD_ALTITUDE, }; struct lxSetup { // data settings lxData * data; lxVecLimits data_limits; // camera settings lxVec cam_center, cam_pos, cam_orig_center, cam_orig_pos; int cam_anaglyph_glasses, m_colormd; double cam_dist, cam_dir, cam_tilt, cam_width, cam_orig_dist, cam_orig_dir, cam_orig_tilt, cam_lens, cam_lens_vfov, cam_lens_vfovr, cam_anaglyph_eyesep, data_limits_diam; bool cam_persp, cam_anaglyph, cam_anaglyph_bw, cam_anaglyph_left; bool m_vis_centerline, m_vis_walls, m_vis_surface, m_vis_labels, m_vis_bbox, m_vis_grid, m_vis_indicators, m_vis_centerline_cave, m_vis_centerline_surface, m_vis_centerline_splay, m_vis_centerline_station, m_vis_centerline_entrance, m_vis_centerline_fix, m_vis_centerline_duplicate, m_stlabel_comment, m_stlabel_name, m_stlabel_altitude, m_stlabel_survey; bool m_srf_transparency, m_srf_texture, m_srf_lighting; bool m_walls_transparency; bool m_colormd_app_centerline, m_colormd_app_walls; double m_srf_opacity, m_walls_opacity; std::set m_survey_selection; lxSetup(struct lxData * dat); // Upravi data na zaklade settings a potom updatne // sam seba. void UpdateData(); // Restne pohlad podla prave nastaveneho dir a tilt, // ostatne da tak, aby data_limits vyplnali obrazovku void ResetCamera(); void StartCameraMovement(); void ZoomCamera(double zoom); void PanCamera(double panx, double pany); void TiltCamera(double tilt); void RotateCamera(double rot); void RotateCameraF(double rot); void SetLens(double lens); void UpdatePos(); void SelectSurvey(const char * survey); bool IsSurveySelected(const char * survey); void ClearSurveySelection(); void SaveToXMLNode(wxXmlNode * n); void LoadFromXMLNode(wxXmlNode * n, wxXmlNode * nn = NULL, double t = 0.0); }; #endif therion-5.4.1/loch/lxTR.c000066400000000000000000000271651307545355600152030ustar00rootroot00000000000000/* $Id: tr.c,v 1.9 1998/01/29 16:56:54 brianp Exp $ */ /* * $Log: tr.c,v $ * Revision 1.9 1998/01/29 16:56:54 brianp * allow trOrtho() and trFrustum() to be called at any time, minor clean-up * * Revision 1.8 1998/01/28 19:47:39 brianp * minor clean-up for C++ * * Revision 1.7 1997/07/21 17:34:38 brianp * added tile borders * * Revision 1.6 1997/07/21 15:47:35 brianp * renamed all "near" and "far" variables * * Revision 1.5 1997/04/26 21:23:25 brianp * added trRasterPos3f function * * Revision 1.4 1997/04/26 19:59:36 brianp * set CurrentTile to -1 before first tile and after last tile * * Revision 1.3 1997/04/22 23:51:15 brianp * added WIN32 header stuff, removed tabs * * Revision 1.2 1997/04/19 23:26:10 brianp * many API changes * * Revision 1.1 1997/04/18 21:53:05 brianp * Initial revision * */ /* * Tiled Rendering library * Version 1.1 * Copyright (C) Brian Paul */ #include "lxTR.h" #define DEFAULT_TILE_WIDTH 256 #define DEFAULT_TILE_HEIGHT 256 #define DEFAULT_TILE_BORDER 0 #ifdef assert #undef assert #endif #define assert(x) struct _TRctx { /* Final image parameters */ GLint ImageWidth, ImageHeight; GLenum ImageFormat, ImageType; GLvoid *ImageBuffer; /* Tile parameters */ GLint TileWidth, TileHeight; GLint TileWidthNB, TileHeightNB; GLint TileBorder; GLenum TileFormat, TileType; GLvoid *TileBuffer; /* Projection parameters */ GLboolean Perspective; GLdouble Left; GLdouble Right; GLdouble Bottom; GLdouble Top; GLdouble Near; GLdouble Far; /* Misc */ TRenum RowOrder; GLint Rows, Columns; GLint CurrentTile; GLint CurrentTileWidth, CurrentTileHeight; GLint CurrentRow, CurrentColumn; GLint ViewportSave[4]; }; /* * Misc setup including computing number of tiles (rows and columns). */ static void Setup(TRcontext *tr) { if (!tr) return; tr->Columns = (tr->ImageWidth + tr->TileWidthNB - 1) / tr->TileWidthNB; tr->Rows = (tr->ImageHeight + tr->TileHeightNB - 1) / tr->TileHeightNB; tr->CurrentTile = 0; assert(tr->Columns >= 0); assert(tr->Rows >= 0); } TRcontext *trNew(void) { TRcontext *tr = (TRcontext *) calloc(1, sizeof(TRcontext)); if (tr) { tr->TileWidth = DEFAULT_TILE_WIDTH; tr->TileHeight = DEFAULT_TILE_HEIGHT; tr->TileBorder = DEFAULT_TILE_BORDER; tr->RowOrder = TR_BOTTOM_TO_TOP; tr->CurrentTile = -1; } return (TRcontext *) tr; } void trDelete(TRcontext *tr) { if (tr) free(tr); } void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border) { if (!tr) return; assert(border >= 0); assert(width >= 1); assert(height >= 1); assert(width >= 2*border); assert(height >= 2*border); tr->TileBorder = border; tr->TileWidth = width; tr->TileHeight = height; tr->TileWidthNB = width - 2 * border; tr->TileHeightNB = height - 2 * border; Setup(tr); } void trTileBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image) { if (!tr) return; tr->TileFormat = format; tr->TileType = type; tr->TileBuffer = image; } void trImageSize(TRcontext *tr, GLint width, GLint height) { if (!tr) return; tr->ImageWidth = width; tr->ImageHeight = height; Setup(tr); } void trImageBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image) { if (!tr) return; tr->ImageFormat = format; tr->ImageType = type; tr->ImageBuffer = image; } GLint trGet(TRcontext *tr, TRenum param) { if (!tr) return 0; switch (param) { case TR_TILE_WIDTH: return tr->TileWidth; case TR_TILE_HEIGHT: return tr->TileHeight; case TR_TILE_BORDER: return tr->TileBorder; case TR_IMAGE_WIDTH: return tr->ImageWidth; case TR_IMAGE_HEIGHT: return tr->ImageHeight; case TR_ROWS: return tr->Rows; case TR_COLUMNS: return tr->Columns; case TR_CURRENT_ROW: if (tr->CurrentTile<0) return -1; else return tr->CurrentRow; case TR_CURRENT_COLUMN: if (tr->CurrentTile<0) return -1; else return tr->CurrentColumn; case TR_CURRENT_TILE_WIDTH: return tr->CurrentTileWidth; case TR_CURRENT_TILE_HEIGHT: return tr->CurrentTileHeight; case TR_ROW_ORDER: return (GLint) tr->RowOrder; default: return 0; } } void trRowOrder(TRcontext *tr, TRenum order) { if (!tr) return; if (order==TR_TOP_TO_BOTTOM || order==TR_BOTTOM_TO_TOP) tr->RowOrder = order; } void trOrtho(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { if (!tr) return; tr->Perspective = GL_FALSE; tr->Left = left; tr->Right = right; tr->Bottom = bottom; tr->Top = top; tr->Near = zNear; tr->Far = zFar; } void trFrustum(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { if (!tr) return; tr->Perspective = GL_TRUE; tr->Left = left; tr->Right = right; tr->Bottom = bottom; tr->Top = top; tr->Near = zNear; tr->Far = zFar; } void trPerspective(TRcontext *tr, GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ) { GLdouble xmin, xmax, ymin, ymax; ymax = zNear * tan(fovy * 3.14159265 / 360.0); ymin = -ymax; xmin = ymin * aspect; xmax = ymax * aspect; trFrustum(tr, xmin, xmax, ymin, ymax, zNear, zFar); } void trBeginTile(TRcontext *tr) { GLint matrixMode; GLint tileWidth, tileHeight, border; GLdouble left, right, bottom, top; if (!tr) return; if (tr->CurrentTile <= 0) { Setup(tr); /* Save user's viewport, will be restored after last tile rendered */ glGetIntegerv(GL_VIEWPORT, tr->ViewportSave); } /* which tile (by row and column) we're about to render */ if (tr->RowOrder==TR_BOTTOM_TO_TOP) { tr->CurrentRow = tr->CurrentTile / tr->Columns; tr->CurrentColumn = tr->CurrentTile % tr->Columns; } else if (tr->RowOrder==TR_TOP_TO_BOTTOM) { tr->CurrentRow = tr->Rows - (tr->CurrentTile / tr->Columns) - 1; tr->CurrentColumn = tr->CurrentTile % tr->Columns; } else { /* This should never happen */ abort(); } assert(tr->CurrentRow < tr->Rows); assert(tr->CurrentColumn < tr->Columns); border = tr->TileBorder; /* Compute actual size of this tile with border */ if (tr->CurrentRow < tr->Rows-1) tileHeight = tr->TileHeight; else tileHeight = tr->ImageHeight - (tr->Rows-1) * (tr->TileHeightNB) + 2 * border; if (tr->CurrentColumn < tr->Columns-1) tileWidth = tr->TileWidth; else tileWidth = tr->ImageWidth - (tr->Columns-1) * (tr->TileWidthNB) + 2 * border; /* Save tile size, with border */ tr->CurrentTileWidth = tileWidth; tr->CurrentTileHeight = tileHeight; glViewport(0, 0, tileWidth, tileHeight); /* tile size including border */ /* save current matrix mode */ glGetIntegerv(GL_MATRIX_MODE, &matrixMode); glMatrixMode(GL_PROJECTION); glLoadIdentity(); /* compute projection parameters */ left = tr->Left + (tr->Right - tr->Left) * (tr->CurrentColumn * tr->TileWidthNB - border) / tr->ImageWidth; right = left + (tr->Right - tr->Left) * tileWidth / tr->ImageWidth; bottom = tr->Bottom + (tr->Top - tr->Bottom) * (tr->CurrentRow * tr->TileHeightNB - border) / tr->ImageHeight; top = bottom + (tr->Top - tr->Bottom) * tileHeight / tr->ImageHeight; if (tr->Perspective) glFrustum(left, right, bottom, top, tr->Near, tr->Far); else glOrtho(left, right, bottom, top, tr->Near, tr->Far); /* restore user's matrix mode */ glMatrixMode(matrixMode); } int trEndTile(TRcontext *tr) { GLint prevRowLength, prevSkipRows, prevSkipPixels; /* prevAlignment; */ if (!tr) return 0; assert(tr->CurrentTile>=0); /* be sure OpenGL rendering is finished */ glFinish(); /* save current glPixelStore values */ glGetIntegerv(GL_PACK_ROW_LENGTH, &prevRowLength); glGetIntegerv(GL_PACK_SKIP_ROWS, &prevSkipRows); glGetIntegerv(GL_PACK_SKIP_PIXELS, &prevSkipPixels); /*glGetIntegerv(GL_PACK_ALIGNMENT, &prevAlignment);*/ if (tr->TileBuffer) { GLint srcX = tr->TileBorder; GLint srcY = tr->TileBorder; GLint srcWidth = tr->TileWidthNB; GLint srcHeight = tr->TileHeightNB; glReadPixels(srcX, srcY, srcWidth, srcHeight, tr->TileFormat, tr->TileType, tr->TileBuffer); } if (tr->ImageBuffer) { GLint srcX = tr->TileBorder; GLint srcY = tr->TileBorder; GLint srcWidth = tr->CurrentTileWidth - 2 * tr->TileBorder; GLint srcHeight = tr->CurrentTileHeight - 2 * tr->TileBorder; GLint destX = tr->TileWidthNB * tr->CurrentColumn; GLint destY = tr->TileHeightNB * tr->CurrentRow; /* setup pixel store for glReadPixels */ glPixelStorei(GL_PACK_ROW_LENGTH, tr->ImageWidth); glPixelStorei(GL_PACK_SKIP_ROWS, destY); glPixelStorei(GL_PACK_SKIP_PIXELS, destX); /*glPixelStorei(GL_PACK_ALIGNMENT, 1);*/ /* read the tile into the final image */ glReadPixels(srcX, srcY, srcWidth, srcHeight, tr->ImageFormat, tr->ImageType, tr->ImageBuffer); } /* restore previous glPixelStore values */ glPixelStorei(GL_PACK_ROW_LENGTH, prevRowLength); glPixelStorei(GL_PACK_SKIP_ROWS, prevSkipRows); glPixelStorei(GL_PACK_SKIP_PIXELS, prevSkipPixels); /*glPixelStorei(GL_PACK_ALIGNMENT, prevAlignment);*/ /* increment tile counter, return 1 if more tiles left to render */ tr->CurrentTile++; if (tr->CurrentTile >= tr->Rows * tr->Columns) { /* restore user's viewport */ glViewport(tr->ViewportSave[0], tr->ViewportSave[1], tr->ViewportSave[2], tr->ViewportSave[3]); tr->CurrentTile = -1; /* all done */ return 0; } else return 1; } /* * Replacement for glRastePos3f() which avoids the problem with invalid * raster pos. */ void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z) { if (tr->CurrentTile<0) { /* not doing tile rendering right now. Let OpenGL do this. */ glRasterPos3f(x, y, z); } else { GLdouble modelview[16], proj[16]; GLint viewport[4]; GLdouble winX, winY, winZ; /* Get modelview, projection and viewport */ glGetDoublev(GL_MODELVIEW_MATRIX, modelview); glGetDoublev(GL_PROJECTION_MATRIX, proj); viewport[0] = 0; viewport[1] = 0; viewport[2] = tr->CurrentTileWidth; viewport[3] = tr->CurrentTileHeight; /* Project object coord to window coordinate */ if (gluProject(x, y, z, modelview, proj, viewport, &winX, &winY, &winZ)){ /* set raster pos to window coord (0,0) */ glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0.0, tr->CurrentTileWidth, 0.0, tr->CurrentTileHeight, 0.0, 1.0); glRasterPos3f(0.0, 0.0, (GLfloat) -winZ); /* Now use empty bitmap to adjust raster position to (winX,winY) */ { GLubyte bitmap[1] = {0}; glBitmap(1, 1, 0.0, 0.0, (GLfloat) winX, (GLfloat) winY, bitmap); } /* restore original matrices */ glPopMatrix(); /*proj*/ glMatrixMode(GL_MODELVIEW); glPopMatrix(); } #ifdef DEBUG if (glGetError()) printf("GL error!\n"); #endif } } therion-5.4.1/loch/lxTR.h000066400000000000000000000071621307545355600152030ustar00rootroot00000000000000/* $Id: tr.h,v 1.5 1997/07/21 17:34:07 brianp Exp $ */ /* * $Log: tr.h,v $ * Revision 1.5 1997/07/21 17:34:07 brianp * added tile borders, incremented version to 1.1 * * Revision 1.4 1997/07/21 15:47:35 brianp * renamed all "near" and "far" variables * * Revision 1.3 1997/04/26 21:23:25 brianp * added trRasterPos3f function * * Revision 1.2 1997/04/19 23:26:10 brianp * many API changes * * Revision 1.1 1997/04/18 21:53:05 brianp * Initial revision * */ /* * Tiled Rendering library * Version 1.1 * Copyright (C) Brian Paul * * * This library allows one to render arbitrarily large images with OpenGL. * The basic idea is to break the image into tiles which are rendered one * at a time. The tiles are assembled together to form the final, large * image. Tiles and images can be of any size. * * Basic usage: * * 1. Allocate a tile rendering context: * TRcontext t = trNew(); * * 2. Specify the final image buffer and tile size: * GLubyte image[W][H][4] * trImageSize(t, W, H); * trImageBuffer(t, GL_RGBA, GL_UNSIGNED_BYTE, (GLubyte *) image); * * 3. Setup your projection: * trFrustum(t, left, right, bottom top, near, far); * or * trOrtho(t, left, right, bottom top, near, far); * or * trPerspective(t, fovy, aspect, near, far); * * 4. Render the tiles: * do { * trBeginTile(t); * DrawMyScene(); * } while (trEndTile(t)); * * You provide the DrawMyScene() function which calls glClear() and * draws all your stuff. * * 5. The image array is now complete. Display it, write it to a file, etc. * * 6. Delete the tile rendering context when finished: * trDelete(t); * */ #ifndef lxTR_h #define lxTR_h /* Standard libraries */ #ifndef LXDEPCHECK #include #include #include #include #ifdef _WIN32 #include #endif #ifdef LXMACOSX #include #include #else #include #include #endif #endif /* LXDEPCHECK - standard libraries */ #ifdef __cplusplus extern "C" { #endif #define TR_VERSION "1.1" #define TR_MAJOR_VERSION 1 #define TR_MINOR_VERSION 1 typedef struct _TRctx TRcontext; typedef enum { TR_TILE_WIDTH = 100, TR_TILE_HEIGHT, TR_TILE_BORDER, TR_IMAGE_WIDTH, TR_IMAGE_HEIGHT, TR_ROWS, TR_COLUMNS, TR_CURRENT_ROW, TR_CURRENT_COLUMN, TR_CURRENT_TILE_WIDTH, TR_CURRENT_TILE_HEIGHT, TR_ROW_ORDER, TR_TOP_TO_BOTTOM, TR_BOTTOM_TO_TOP } TRenum; extern TRcontext *trNew(void); extern void trDelete(TRcontext *tr); extern void trTileSize(TRcontext *tr, GLint width, GLint height, GLint border); extern void trTileBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image); extern void trImageSize(TRcontext *tr, GLint width, GLint height); extern void trImageBuffer(TRcontext *tr, GLenum format, GLenum type, GLvoid *image); extern void trRowOrder(TRcontext *tr, TRenum order); extern GLint trGet(TRcontext *tr, TRenum param); extern void trOrtho(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); extern void trFrustum(TRcontext *tr, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); extern void trPerspective(TRcontext *tr, GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar ); extern void trBeginTile(TRcontext *tr); extern int trEndTile(TRcontext *tr); extern void trRasterPos3f(TRcontext *tr, GLfloat x, GLfloat y, GLfloat z); #ifdef __cplusplus } #endif #endif therion-5.4.1/loch/lxWX.cxx000066400000000000000000000251221307545355600155630ustar00rootroot00000000000000#include "lxWX.h" #ifndef LXDEPCHECK #include #include #include #include #endif wxStaticBox * lxStaticBox; wxStaticBoxSizer * lxStaticBoxSizer; wxBoxSizer * lxBoxSizer; wxGridSizer * lxGridSizer; wxFlexGridSizer * lxFlexGridSizer; wxGridBagSizer * lxGBSizer; wxRadioButton * lxRadioBtn; wxCheckBox * lxCheckBox; wxPanel * lxPanel; wxSize lxSize; wxPoint lxPoint; lxDoubleValidator::lxDoubleValidator(double * val, const double vmin, const double vmax, const wxChar * fmt) : wxValidator() { this->m_variable = val; this->m_vMin = vmin; this->m_vMax = vmax; this->m_fmt = fmt; } lxDoubleValidator::lxDoubleValidator(const lxDoubleValidator & val) : wxValidator() { Copy(val); } bool lxDoubleValidator::Copy(const lxDoubleValidator& val) { this->m_variable = val.m_variable; this->m_vMin = val.m_vMin; this->m_vMax = val.m_vMax; this->m_fmt = val.m_fmt; wxValidator::Copy(val); return TRUE; } lxDoubleValidator::~lxDoubleValidator() { } bool lxDoubleValidator::Validate(wxWindow * WXUNUSED(parent)) { double tmp; if( !CheckValidator() ) return FALSE; if (!((wxTextCtrl *)m_validatorWindow)->GetValue().ToDouble(&tmp)) { // TODO: MSGBox saying something about the range ((wxTextCtrl *)this->m_validatorWindow)->SetSelection(-1, -1); this->m_validatorWindow->SetFocus(); return FALSE; } if ((tmp < this->m_vMin) || (tmp > this->m_vMax)) { ((wxTextCtrl *)this->m_validatorWindow)->SetSelection(-1, -1); this->m_validatorWindow->SetFocus(); return FALSE; } return TRUE; } bool lxDoubleValidator::TransferToWindow() { if (!CheckValidator()) return FALSE; ((wxTextCtrl *) m_validatorWindow)->SetValue(wxString::Format(this->m_fmt, *this->m_variable)); return TRUE; } bool lxDoubleValidator::TransferFromWindow() { if (((wxTextCtrl *)m_validatorWindow)->GetValue().ToDouble(this->m_variable)) { if (*this->m_variable < this->m_vMin) *this->m_variable = this->m_vMin; if (*this->m_variable > this->m_vMax) *this->m_variable = this->m_vMax; } return TRUE; } lxRadioBtnValidator::lxRadioBtnValidator(long * val, const long optval) : wxValidator() { this->m_variable = val; this->m_variableValue = optval; } lxRadioBtnValidator::lxRadioBtnValidator(const lxRadioBtnValidator & val) : wxValidator() { Copy(val); } bool lxRadioBtnValidator::Copy(const lxRadioBtnValidator& val) { this->m_variable = val.m_variable; this->m_variableValue = val.m_variableValue; wxValidator::Copy(val); return TRUE; } lxRadioBtnValidator::~lxRadioBtnValidator() { } bool lxRadioBtnValidator::Validate(wxWindow * WXUNUSED(parent)) { if( !CheckValidator() ) return FALSE; return TRUE; } bool lxRadioBtnValidator::TransferToWindow() { if (!CheckValidator()) return FALSE; ((wxRadioButton *) m_validatorWindow)->SetValue((*this->m_variable) == this->m_variableValue); return TRUE; } bool lxRadioBtnValidator::TransferFromWindow() { if (((wxRadioButton *) m_validatorWindow)->GetValue()) *this->m_variable = this->m_variableValue; return TRUE; } void lxAdjustBitmapRGB(size_t s, unsigned char * d) { unsigned char * x; size_t i = 0; x = d; while ((i + 3) < s) { if (x[2] >= 0x80) { if ((abs(x[0] - x[2]) < 0x10) && (abs(x[0] - x[1]) < 0x10)) { x[0] -= 0x0C; x[1] -= 0x0C; } } else { if ((abs(x[0] - x[2]) < 0x10) && (abs(x[0] - x[1]) < 0x10)) { x[2] += 0x0C; } } x += 3; i += 3; } } lxCRC32::lxCRC32() { this->m_prevCrc = 0; this->Initialize(); } void lxCRC32::Initialize() { this->m_crcStr = _T(""); } bool lxCRC32::Changed() { unsigned long crc = this->Calculate(); bool r; r = (this->m_prevCrc != crc); this->m_prevCrc = crc; return r; } void lxCRC32::AddInteger(long var) { this->m_crcStr += wxString::Format(_("%ld"), var); } void lxCRC32::AddReal(double dbl) { this->m_crcStr += wxString::Format(_("%.14e"), dbl); } void lxCRC32::AddString(wxString sss) { this->m_crcStr += sss; } static unsigned long lxCrc32Table[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL }; unsigned long lxCRC32::Calculate() { unsigned long i; unsigned long crc32val; size_t len = this->m_crcStr.Length() * sizeof(wxChar); const unsigned char * s = (const unsigned char *) this->m_crcStr.GetData(); crc32val = 0; for (i = 0; i < len; i++) { crc32val = lxCrc32Table[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8); } return crc32val; } lxTBoxPos::lxTBoxPos(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset) { this->Init(tool, frame, corner, xOffset, yOffset); } lxTBoxPos::lxTBoxPos() { this->Init(NULL, NULL, 0, 0, 0); } void lxTBoxPos::Init(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset) { this->m_corner = corner; this->m_xOffset = xOffset; this->m_yOffset = yOffset; this->m_winFrame = frame; this->m_winTool = tool; } void lxTBoxPos::Save() { if ((this->m_winFrame == NULL) || (this->m_winTool == NULL)) return; int fw, fh, fx, fy, tw, th, tx, ty, nc; double cdist, mdist; this->m_winFrame->GetSize(& fw, & fh); this->m_winFrame->GetPosition(& fx, & fy); this->m_winTool->GetSize(& tw, & th); this->m_winTool->GetPosition(& tx, & ty); nc = 0; cdist = hypot(fx - tx, fy - ty); mdist = cdist; cdist = hypot(fx + fw - tx - tw, fy - ty); if (cdist < mdist) {mdist = cdist; nc = 1;} cdist = hypot(fx + fw - tx - tw, fy + fh - ty - th); if (cdist < mdist) {mdist = cdist; nc = 2;} cdist = hypot(fx - tx, fy + fh - ty - th); if (cdist < mdist) {mdist = cdist; nc = 3;} this->m_corner = nc; if (((wxFrame*)this->m_winFrame)->IsFullScreen() && ((nc == 1) || (nc == 4))) { ty += this->m_fsOffset; } switch (nc) { case 1: this->m_xOffset = fx + fw - tx - tw; this->m_yOffset = ty - fy; break; case 2: this->m_xOffset = fx + fw - tx - tw; this->m_yOffset = fy + fh - ty - th; break; case 3: this->m_xOffset = tx - fx; this->m_yOffset = fy + fh - ty - th; break; default: this->m_xOffset = tx - fx; this->m_yOffset = ty - fy; break; } } void lxTBoxPos::Restore() { if ((this->m_winFrame == NULL) || (this->m_winTool == NULL)) return; int fw, fh, fx, fy, tw, th, tx, ty, sx, sy; wxDisplaySize(& sx, & sy); this->m_winFrame->GetSize(& fw, & fh); this->m_winFrame->GetPosition(& fx, & fy); this->m_winTool->GetSize(& tw, & th); this->m_winTool->GetPosition(& tx, & ty); if (((wxFrame*)this->m_winFrame)->IsFullScreen() && ((this->m_corner == 1) || (this->m_corner == 4))) { fy -= this->m_fsOffset; } switch (this->m_corner) { case 1: tx = fx + fw - this->m_xOffset - tw; ty = fy + this->m_yOffset; break; case 2: tx = fx + fw - this->m_xOffset - tw; ty = fy + fh - this->m_yOffset - th; break; case 3: tx = fx + this->m_xOffset; ty = fy + fh - this->m_yOffset - th; break; default: tx = fx + this->m_xOffset; ty = fy + this->m_yOffset; break; } sx -= tw; sy -= th; if (tx < 0) tx = 0; if (tx > sx) tx = sx; if (ty < 0) ty = 0; if (ty > sy) ty = sy; this->m_winTool->Move(tx, ty); //this->Save(); } void lxTBoxPos::Set(int corner, int xOffset, int yOffset) { this->m_corner = corner; this->m_xOffset = xOffset; this->m_yOffset = yOffset; } int lxTBoxPos::m_fsOffset(0); therion-5.4.1/loch/lxWX.h000066400000000000000000000102471307545355600152120ustar00rootroot00000000000000#ifndef lxWX_h #define lxWX_h // Standard libraries #ifndef LXDEPCHECK #include #include #include #include #if !wxCHECK_VERSION(2,7,0) #define wxFD_OVERWRITE_PROMPT wxOVERWRITE_PROMPT #define wxFD_SAVE wxSAVE #endif #endif //LXDEPCHECK - standard libraries #ifdef __WXGTK__ #define lxBORDER 3 #else #define lxBORDER 5 #endif #define lxFStaticText(ID) ((wxStaticText *)FindWindow(ID)) #define lxFRadioBtn(ID) ((wxRadioButton *)FindWindow(ID)) #define lxFCheckBox(ID) ((wxCheckBox *)FindWindow(ID)) #define lxFButton(ID) ((wxButton *)FindWindow(ID)) #define lxFTextCtrl(ID) ((wxTextCtrl*)FindWindow(ID)) #define lxFSpinCtrl(ID) ((wxSpinCtrl*)FindWindow(ID)) #define lxFSlider(ID) ((wxSlider*)FindWindow(ID)) #define lxFChoice(ID) ((wxChoice*)FindWindow(ID)) #define lxNOTTOP wxBOTTOM | wxLEFT | wxRIGHT #define lxNOTLEFT wxBOTTOM | wxTOP | wxRIGHT void lxAdjustBitmapRGB(size_t s, unsigned char * d); #ifdef LXWIN32 #define lxADJUSTRGB(s, n) lxAdjustBitmapRGB(s, n) #else #define lxADJUSTRGB(s, n) #endif extern wxStaticBox * lxStaticBox; extern wxStaticBoxSizer * lxStaticBoxSizer; extern wxBoxSizer * lxBoxSizer; extern wxGridSizer * lxGridSizer; extern wxGridBagSizer * lxGBSizer; extern wxFlexGridSizer * lxFlexGridSizer; extern wxRadioButton * lxRadioBtn; extern wxCheckBox * lxCheckBox; extern wxPanel * lxPanel; extern wxSize lxSize; extern wxPoint lxPoint; #define lxSETWWIDTH(ID, fact) \ lxSize = FindWindow(ID)->GetSize(); \ lxSize.SetWidth((int) (lxSize.GetHeight() * fact)); \ FindWindow(ID)->SetSizeHints(lxSize, lxSize); #define lxSETWWH(ID, fact, fact2) \ lxSize = FindWindow(ID)->GetSize(); \ lxSize.SetWidth((int) (lxSize.GetHeight() * fact)); \ lxSize.SetHeight((int) (lxSize.GetHeight() * fact * fact2)); \ FindWindow(ID)->SetSizeHints(lxSize, lxSize); class lxTBoxPos { int m_xOffset, m_yOffset, m_corner; wxWindow * m_winTool, * m_winFrame; public: static int m_fsOffset; lxTBoxPos(); lxTBoxPos(wxWindow * tool, wxWindow * frame, int corner, int xOffset, int yOffset); void Init(wxWindow * tool, wxWindow * frame, int corner = 0, int xOffset = 0, int yOffset = 0); void Set(int corner, int xOffset, int yOffset); void Save(); void Restore(); }; class lxCRC32 { public: unsigned long m_prevCrc; wxString m_crcStr; lxCRC32(); void Initialize(); void AddInteger(long var); void AddReal(double dbl); void AddString(wxString sss); unsigned long Calculate(); bool Changed(); }; class lxDoubleValidator : public wxValidator { public: lxDoubleValidator(double * val, const double vmin, const double vmax, const wxChar * fmt = _T("%.0f")); lxDoubleValidator(const lxDoubleValidator & val); ~lxDoubleValidator(); virtual wxObject *Clone() const { return new lxDoubleValidator(*this); } bool Copy(const lxDoubleValidator& val); virtual bool Validate(wxWindow *parent); virtual bool TransferToWindow(); virtual bool TransferFromWindow(); protected: double * m_variable; double m_vMin, m_vMax; const wxChar * m_fmt; bool CheckValidator() const { wxCHECK_MSG( m_validatorWindow, FALSE, _T("No window associated with validator") ); wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxTextCtrl)), FALSE, _T("wxNumberValidator is only for wxTextCtrl's") ); wxCHECK_MSG( ((wxTextCtrl *)m_validatorWindow)->IsSingleLine(), FALSE, _T("Multiline wxTextCtrl not allowed yet") ); return TRUE; } }; class lxRadioBtnValidator : public wxValidator { public: lxRadioBtnValidator(long * val, const long optval); lxRadioBtnValidator(const lxRadioBtnValidator & val); ~lxRadioBtnValidator(); virtual wxObject *Clone() const { return new lxRadioBtnValidator(*this); } bool Copy(const lxRadioBtnValidator& val); virtual bool Validate(wxWindow *parent); virtual bool TransferToWindow(); virtual bool TransferFromWindow(); protected: long * m_variable; long m_variableValue; bool CheckValidator() const { wxCHECK_MSG( m_validatorWindow, FALSE, _T("No window associated with validator") ); wxCHECK_MSG( m_validatorWindow->IsKindOf(CLASSINFO(wxRadioButton)), FALSE, _T("wxRadioBtnValidator is only for wxRadioButtons") ); return TRUE; } }; #endif therion-5.4.1/loch/makeconfig.pl000066400000000000000000000014661307545355600166020ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); open(MF,">Makefile"); $insidecfg = 0; $insideprm = 0; $config = $ARGV[0]; $param = $ARGV[1]; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*$config\s+CONFIG\s*$/) { $insidecfg = 1; } if ($ln =~ /^\s*\#\s*$config\s+ENDCONFIG\s*$/) { $insidecfg = 0; } if ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+$param\s*$/)) { $insideprm = 1; } elsif ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+\S+\s*$/)) { $insideprm = 0; } if ($ln =~ /\S/) { if ($insidecfg) { if ($insideprm) { $ln =~ s/^\s*\#\#//; } else { if ($ln =~ /^\s*[^\#]/) { $ln = "##$ln"; } } } } print MF $ln; } close(MF); therion-5.4.1/loch/makedepend.pl000066400000000000000000000003551307545355600165700ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); foreach $ln (@mflines) { print $ln; if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { last; } } therion-5.4.1/loch/makedepend2.pl000066400000000000000000000004561307545355600166540ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); open(MF,">Makefile"); $ind = 0; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { $ind = 1; } if ($ind && ($ln =~ /^\w+\.o\:\s+/)) { print MF "\$(LOUTDIR)/$ln"; } else { print MF $ln; } } close(MF); therion-5.4.1/loch/makefile.pl000066400000000000000000000017561307545355600162560ustar00rootroot00000000000000use File::Glob; use File::Copy; use File::Path; if ($ARGV[0] =~ /^\s*cp\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); } elsif ($ARGV[0] =~ /^\s*mv\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); unlink($ARGV[1]) || warn("$0: can't delete $ARGV[1]\n");; } elsif ($ARGV[0] =~ /^\s*rm\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { if ($f =~ /\*/) { @fl = glob($f); foreach $ff (@fl) { unlink($ff) || $quietdel || warn("$0: can't delete $ff\n"); } } else { unlink($f) || $quietdel || warn("$0: can't delete $f\n"); } } } elsif ($ARGV[0] =~ /^\s*rmdir\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { rmtree($f) || $quietdel || warn("$0: can't delete $f\n");; } } therion-5.4.1/loch/maketest.pl000066400000000000000000000000741307545355600163060ustar00rootroot00000000000000if ((-s $ARGV[0]) > 0) { exit 0 } else { die "error" } therion-5.4.1/make_release.py000077500000000000000000000036421307545355600162050ustar00rootroot00000000000000#!/usr/bin/env python import re, datetime, sys, subprocess if sys.version_info.major > 2: raw_input = input banner = ''' Warning! This script makes a new release and pushes it to github. All changes should already be committed. Continue? (no/yes): ''' def err(s): print('\nfatal: %s\n' % s) sys.exit(1) if raw_input(banner) == 'yes': # check CHANGES to assure that the release is ready and to get the tag message isfirst = True msg = '' ver = '' with open('CHANGES') as f: for l in f: if isfirst: isfirst = False m = re.match(r'Therion (\d+\.\d+(?:\.\d+)?) \((\d{4}-\d\d-\d\d)\):\s+$',l) if m: if m.group(2) != datetime.date.today().isoformat(): err('release date in the CHANGES is not today') ver = m.group(1) else: err('no version info in the file CHANGES') msg += l else: if l.startswith('-'*70): break else: msg += l.replace('"',r'\"').replace('$',r'\$') # check for uncommited changes subprocess.check_call('git pull', shell=True) if subprocess.check_output('git status -s', shell=True): err('there are uncommitted changes on your drive') # add a tag and push subprocess.check_call('git tag -a v%s -m "%s"' % (ver,msg), shell=True) subprocess.check_call('git push origin v%s' % ver, shell=True) # update CHANGES to assure that subsequent commits would not be mistaken for a release by set_version.py m = re.match(r'(.+\.)(\d+)$', ver) assert m ver = '%s%d' % (m.group(1), int(m.group(2))+1) with open('CHANGES') as f: oldchanges = f.read() with open('CHANGES', 'w') as f: f.write("Therion %s (in progress):\n\n\n%s\n\n" % (ver, '-'*80) + oldchanges) subprocess.check_call('git add CHANGES', shell=True) subprocess.check_call('git commit -m "update CHANGES"', shell=True) subprocess.check_call('git push', shell=True) else: print('bye') therion-5.4.1/makearchive.pl000066400000000000000000000007411307545355600160240ustar00rootroot00000000000000if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2,$v3) = ($1,$2,$4); if (!$v3) { $v3 = 0; } close(VFL); $v3++; } else { $v1 = 0; $v2 = 0; $v3 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2.$v3\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2.$v3"; close(VFL); system("tar -cvf ../therion-$v1.$v2.$v3.tar -C .. therion"); system("gzip ../therion-$v1.$v2.$v3.tar"); therion-5.4.1/makearchive2.pl000066400000000000000000000003721307545355600161060ustar00rootroot00000000000000if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; $version = $&; close(VFL); } else { $version = "0.0"; } system("tar -cvf ../therion-$version.tar -C .. therion"); system("gzip ../therion-$version.tar"); therion-5.4.1/makebinary.pl000066400000000000000000000020631307545355600156660ustar00rootroot00000000000000$platform = lc($ARGV[0]); #($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time); #$year += 1900; #$mon += 1; #$datestr = sprintf("%04d%02d%02d",$year,$mon,$mday); if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)\.(\d+)/; ($v1,$v2,$v3) = ($1,$2,$3); close(VFL); } else { $v1 = 0; $v2 = 2; $v3 = 1; } $dd = "therion-temp"; $d = "../$dd"; system("mkdir $d"); system("cp ./therion $d"); system("cp ./install $d"); system("cp ./therion.ini $d"); system("cp ./xtherion/xtherion $d"); system("cp ./xtherion/xtherion.ini $d"); system("cp ./thbook/thbook.pdf $d"); system("cp ./man/therion.1 $d"); system("cp ./man/xtherion.1 $d"); system("cp ./README $d"); system("cp ./COPYING $d"); if ($platform eq "win32") { system("zip -jr ../therion-$platform-$v1.$v2.$v3.zip $d"); } else { system("tar -cvf ../therion-linux.i386-$v1.$v2.$v3.tar -C $d install therion therion.ini xtherion xtherion.ini thbook.pdf therion.1 xtherion.1 README COPYING"); system("gzip -f ../therion-linux.i386-$v1.$v2.$v3.tar"); } system("rm -R $d"); therion-5.4.1/makeconfig.pl000066400000000000000000000014661307545355600156550ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); open(MF,">Makefile"); $insidecfg = 0; $insideprm = 0; $config = $ARGV[0]; $param = $ARGV[1]; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*$config\s+CONFIG\s*$/) { $insidecfg = 1; } if ($ln =~ /^\s*\#\s*$config\s+ENDCONFIG\s*$/) { $insidecfg = 0; } if ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+$param\s*$/)) { $insideprm = 1; } elsif ($insidecfg && ($ln =~ /^\s*\#\s*$config\s+\S+\s*$/)) { $insideprm = 0; } if ($ln =~ /\S/) { if ($insidecfg) { if ($insideprm) { $ln =~ s/^\s*\#\#//; } else { if ($ln =~ /^\s*[^\#]/) { $ln = "##$ln"; } } } } print MF $ln; } close(MF); therion-5.4.1/makeconvert.pl000077500000000000000000000017531307545355600160720ustar00rootroot00000000000000#!/usr/bin/perl @ls = `ls -1 -R`; @flist = (); $cdir = '.'; foreach $ln (@ls) { if ($ln =~ /(.*)\:$/) { $cdir = $1; } elsif ($ln =~ /\S/) { $ln =~ s/^\s+//; $ln =~ s/\s+$//; if ($ln =~ /(\.th$|\.th2$)/) { push @flist, "$cdir/$ln"; } } } foreach $fn (@flist) { open(FL,"$fn"); @fls = ; close(FL); @flso = (); $toconv = 1; $numch = 0; foreach $fln (@fls) { if ($fln =~ /\d\s+station\s+\-name\s+\S+/) { $toconv = 0; } if ($fln =~ /\s+\-id\s+\S+/) { $toconv = 0; } if ($fln =~ /(\s+)\-name(\s+\S+)/) {$numch++}; $fln =~ s/(\s+)\-name(\s+\S+)/\1\-id\2/g; if ($fln =~ /(^\s*)name(\s+\S+\s*$)/) {$numch++}; $fln =~ s/(^\s*)name(\s+\S+\s*$)/\1\id\2/g; if ($fln =~ /(\s+)\-station(\s+\S+)/) {$numch++}; $fln =~ s/(\s+)\-station(\s+\S+)/\1\-name\2/g; push @flso,$fln; } if ($toconv && ($numch > 0)) { print "$fn ($numch changes)\n"; open(FL,">$fn"); print FL "@flso"; close(FL); } } therion-5.4.1/makeconvert2.pl000077500000000000000000000017571307545355600161600ustar00rootroot00000000000000#!/usr/bin/perl @ls = `ls -1 -R`; @flist = (); $cdir = '.'; foreach $ln (@ls) { if ($ln =~ /(.*)\:$/) { $cdir = $1; } elsif ($ln =~ /\S/) { $ln =~ s/^\s+//; $ln =~ s/\s+$//; if ($ln =~ /(\.th$|\.th2$)/) { push @flist, "$cdir/$ln"; } } } foreach $fn (@flist) { open(FL,"$fn"); @fls = ; close(FL); @flso = (); $toconv = 1; $numch = 0; foreach $fln (@fls) { if ($fln =~ /endcenterline/) { $toconv = 0; } if ($fln =~ /^\s*centerline\s*$/) { $toconv = 0; } if ($fln =~ /^\s*enddata/) { $numch++; $fln =~ s/data/centerline/; } if ($fln =~ /^\s*data\s*$/) { $numch++; $fln =~ s/data/centerline/; } if ($fln =~ /^\s*data\s*(\s+)$/) { if ($1 =~ /^\-/) { $numch++; $fln =~ s/data/centerline/; } } push @flso,$fln; } if ($toconv && ($numch > 0)) { print "$fn ($numch changes)\n"; open(FL,">$fn"); print FL "@flso"; close(FL); } } therion-5.4.1/makedepend.pl000066400000000000000000000003551307545355600156430ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); # backup makefile open(MFB,">Makefile~"); print MFB @mflines; close(MFB); foreach $ln (@mflines) { print $ln; if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { last; } } therion-5.4.1/makedepend2.pl000066400000000000000000000004551307545355600157260ustar00rootroot00000000000000# read make file open(MF,"Makefile"); @mflines = ; close(MF); open(MF,">Makefile"); $ind = 0; foreach $ln (@mflines) { if ($ln =~ /^\s*\#\s*DEPENDENCIES/) { $ind = 1; } if ($ind && ($ln =~ /^\w+\.o\:\s+/)) { print MF "\$(OUTDIR)/$ln"; } else { print MF $ln; } } close(MF); therion-5.4.1/makefile.pl000066400000000000000000000017561307545355600153310ustar00rootroot00000000000000use File::Glob; use File::Copy; use File::Path; if ($ARGV[0] =~ /^\s*cp\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); } elsif ($ARGV[0] =~ /^\s*mv\s*$/i) { copy($ARGV[1],$ARGV[2]) || die("$0: error -- cp $ARGV[1] -> $ARGV[2]\n"); unlink($ARGV[1]) || warn("$0: can't delete $ARGV[1]\n");; } elsif ($ARGV[0] =~ /^\s*rm\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { if ($f =~ /\*/) { @fl = glob($f); foreach $ff (@fl) { unlink($ff) || $quietdel || warn("$0: can't delete $ff\n"); } } else { unlink($f) || $quietdel || warn("$0: can't delete $f\n"); } } } elsif ($ARGV[0] =~ /^\s*rmdir\s*$/i) { $dum = shift @ARGV; $quietdel = ''; if ($ARGV[0] =~ /^\s*\-q\s*$/) { $dum = shift @ARGV; $quietdel = 1; } foreach $f (@ARGV) { rmtree($f) || $quietdel || warn("$0: can't delete $f\n");; } } therion-5.4.1/makeinstall.tcl000066400000000000000000000046261307545355600162260ustar00rootroot00000000000000set platform LINUX set instdir /usr/local if {$argc > 0} { set platform [lindex $argv 0] } else { if {[string equal $tcl_platform(platform) windows]} { set platform WIN32 } } proc copyfile {force src dst} { if {$force} { if {[catch { file copy -force -- $src $dst }]} { puts stderr "installation error: could not write $dst" } } else { if {![file exists $dst]} { copyfile 1 $src $dst } } } if {[string equal $platform WIN32]} { copyfile 1 ../therion.bin/therion.exe "c:/Program files/Therion/therion.exe" copyfile 1 ../therion.bin/xtherion/xtherion.tcl "c:/Program files/Therion/xtherion.tcl" copyfile 1 ../therion.bin/loch/loch.exe "c:/Program files/Therion/loch.exe" } elseif {[string equal $platform MACOSX]} { copyfile 1 therion /usr/bin/therion file attributes /usr/bin/therion -permissions 0755 copyfile 1 xtherion/xtherion /usr/bin/xtherion file attributes /usr/bin/xtherion -permissions 0755 file delete -force /Applications/loch.app copyfile 1 loch/loch.app /Applications file attributes /Applications/loch.app -permissions 0755 file attributes /Applications/loch.app/Contents -permissions 0755 file attributes /Applications/loch.app/Contents/Info.plist -permissions 0644 file attributes /Applications/loch.app/Contents/PkgInfo -permissions 0644 file attributes /Applications/loch.app/Contents/MacOS -permissions 0755 file attributes /Applications/loch.app/Contents/MacOS/loch -permissions 0755 file attributes /Applications/loch.app/Contents/Resources -permissions 0755 file attributes /Applications/loch.app/Contents/Resources/loch.icns -permissions 0644 copyfile 1 therion.ini /etc/therion.ini.new file attributes /etc/therion.ini.new -permissions 0644 copyfile 1 xtherion/xtherion.ini /etc/xtherion.ini.new file attributes /etc/xtherion.ini.new -permissions 0644 copyfile 0 therion.ini /etc/therion.ini file attributes /etc/therion.ini -permissions 0644 copyfile 0 xtherion/xtherion.ini /etc/xtherion.ini file attributes /etc/xtherion.ini -permissions 0644 } else { copyfile 1 therion $instdir/bin/therion copyfile 1 xtherion/xtherion $instdir/bin/xtherion copyfile 1 loch/loch $instdir/bin/loch copyfile 1 therion.ini $instdir/etc/therion.ini.new copyfile 1 xtherion/xtherion.ini $instdir/etc/xtherion.ini.new copyfile 0 therion.ini $instdir/etc/therion.ini copyfile 0 xtherion/xtherion.ini $instdir/etc/xtherion.ini } therion-5.4.1/makelibrary.pl000066400000000000000000000002001307545355600160350ustar00rootroot00000000000000$a = 0; open(INP,$ARGV[0]); while() { if (/\/\*\*/) { $a = 1; } if ($a) { print; } } close(INP); therion-5.4.1/makerelease.pl000066400000000000000000000004771307545355600160310ustar00rootroot00000000000000if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2) = ($1,$2); close(VFL); $v2++; } else { $v1 = 0; $v2 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2"; close(VFL); therion-5.4.1/makerelease2.pl000066400000000000000000000005671307545355600161130ustar00rootroot00000000000000if (open(VFL,"thversion.h")) { @verfl = ; $verfl[0] =~ /(\d+)\.(\d+)(\.(\d+))?/; ($v1,$v2,$v3) = ($1,$2,$4); if (!$v3) { $v3 = 0; } close(VFL); $v3++; } else { $v1 = 0; $v2 = 0; $v3 = 0; } open(VFL,">thversion.h"); print VFL "#define THVERSION \"$v1.$v2.$v3\"\n"; close(VFL); open(VFL,">thbook/version.tex"); print VFL "$v1.$v2.$v3"; close(VFL); therion-5.4.1/maketest.pl000066400000000000000000000000741307545355600153610ustar00rootroot00000000000000if ((-s $ARGV[0]) > 0) { exit 0 } else { die "error" } therion-5.4.1/makeunixify.tcl000066400000000000000000000033701307545355600162460ustar00rootroot00000000000000proc procdir {dir} { set dirs [glob -nocomplain -directory $dir -types d *] set files [glob -nocomplain -directory $dir -types f *] foreach d $dirs { exec chmod 775 $d procdir $d } puts "\n\n\nDIR: $dir" foreach f $files { puts $f exec chmod 664 $f dos2unix $f } } proc dos2unix {fnm} { set doit 0 if {[regexp {\.(c|cxx|h|tcl|svx|th|ini|thcfg|th2|thc|cof|xpm|txt|pl|mp|tex|TXT|sty|usr|enc|htm|xvi)$} $fnm]} { set doit 1 } elseif {[regexp {(Makefile|TODO\.\w|README|COPYING|CHANGES|thconfig|thconfig\..*)$} $fnm]} { set doit 1 } if {!$doit} return; set fmtime [file mtime $fnm] set fid [open $fnm r] fconfigure $fid -translation binary set fdt [read $fid] close $fid if {[regexp {\15} $fdt]} { puts " ...converted to UNIX format" regsub -all {\15} $fdt {} fdt set fid [open $fnm w] fconfigure $fid -translation binary puts -nonewline $fid $fdt close $fid file mtime $fnm $fmtime } } procdir . exec chmod 775 ./cclass.pl exec chmod 775 makeconvert.pl exec chmod 775 makeconvert2.pl exec chmod 775 thcsdata.tcl exec chmod 775 threpair-files exec chmod 775 thsymbolsetlist.pl exec chmod 775 geomag/igrf2c.py exec chmod 775 mpost/genmpost.pl exec chmod 775 samples/samples.tcl exec chmod 775 tex/gentex.pl exec chmod 775 texenc/afm2enc.pl exec chmod 775 texenc/mktexenc.pl exec chmod 775 texenc/unidata.pl exec chmod 775 thchencdata/generate.pl exec chmod 775 thlang/process.pl exec chmod 775 thlang/thlang_stats.pl exec chmod 775 xtherion/bac.tcl exec chmod 775 xtherion/dbg.tcl exec chmod 775 xtherion/bac.tcl exec chmod 775 xtherion/source.tcl exec chmod 775 xtherion/lang/process.pl exec chmod 775 ./abisso2th.py exec chmod 775 geomag/test/build.sh exec chmod 775 geomag/test/test.py therion-5.4.1/man/000077500000000000000000000000001307545355600137615ustar00rootroot00000000000000therion-5.4.1/man/loch.1000066400000000000000000000053631307545355600147770ustar00rootroot00000000000000.TH "THERION" "1" .SH "NAME" loch \(em Therion model viewer .SH "SYNOPSIS" .PP \fBloch\fR [FILE] .SH "DESCRIPTION" .PP This manual page documents \fBloch\fR, which is part of the therion-viewer package. .PP \fBloch\fR is a 3D viewer which displays .lox files produced by therion and allows them to be examined. .SH "OPTIONS" .PP loch optionally takes a .lox, Survex .3d or Compass .plt file to open. .SH "BASIC CONTROL" .PP \fBKey and Mouse Controls\fR .TS tab(); l l l. FunctionMouse actionKey Zoom & RotateLeft click + drag Zoom onlyLeft click + drag up/down, then hold left and click rightCtrl + Up/Down Rotate onlyLeft click + drag left/right, then hold left and click rightLeft/Right PanRight click + dragShift + Arrows TiltMiddle (wheel) click + drag or wheel rotateUp/Down Full screenLeft double click F11 Context menuRight click .TE .PP If continuous rotation is turned on, then rotation mouse movements change the speed or direction of rotation. If rotation is locked, then rotation mouse movements have no effect. .SH "OFF SCREEN RENDERING" .PP Loch is able to render large bitmaps that can be afterwards post processed and printed. Bitmaps can be exported in PDF, PNG or BMP formats. Configuration of export is done via the Rendering setup dialog. You can set the following features: .PP \fISize and Scaling\fP .PP Screen shot: Screen copy will be saved into a file with no other changes. .PP Image width: The screen image will be exported with the specified width. .PP Image height: The screen image will be exported with the specified height. .PP Scale: The screen image will be exported with the specified scale. .PP \fIImage options\fP .PP Rendering resolution: Resolution of the image file used when image size or scale are specified. .PP Image size: Image size in pixels and uncompressed bytes calculated from previous settings. .PP White background: Force white background in exported image. .SH "KNOWN BUGS" .PP Sometimes empty rectangles appear in off screen rendered file. Changing the window size usually helps. .PP * Crashes have been observed on intel graphics cards unless the texture initialisations are removed in the code. .PP * Stereo mode does not work correctly on some graphics adapters. .PP * This help does not work. .SH "SEE ALSO" .PP therion(1), xtherion(1) .PP For full information see the Therion Manual in /usr/share/doc/therion-doc/thbook.pdf which describes therion-viewer and its use in detail. .SH "AUTHOR" .PP This manual page was adapted from existing docs by Wookey wookey@debian.org for the \fBDebian\fP system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public Licence, Version 2 or any later version published by the Free Software Foundation. therion-5.4.1/man/therion.1000066400000000000000000000110731307545355600155150ustar00rootroot00000000000000.TH "THERION" "1" "2017/01/25" .SH "NAME" Therion \(em program to draw cave surveys .SH "SYNOPSIS" .PP \fBtherion\fP [\fB-q\fP] [\fB-L\fP] [\fB-l \fIlog-file\fR] [\fB-s \fIsource-file\fR] [\fB-p \fIsearch-path\fR] [\fB-b\fP|\fB--bezier\fP] [\fB--use-extern-libs\fP] [\fB-g\fP|\fB-u\fP] [\fB-i\fP] [\fB-d\fP] [\fB-x\fP] [\fB--use-extern-libs\fP] [config-file] .PP \fBtherion\fP [\fB-h\fP|\fB--help\fP] [\fB-v\fP|\fB--version\fP] [\fB--print-encodings\fP] [\fB--print-environment\fP] [\fB--print-init-file\fP] [\fB--print-library-src\fP] [\fB--print-symbols\fP] [\fB--print-tex-encodings\fP] [\fB--print-xtherion-src\fP] .SH "DESCRIPTION" .PP This manual page briefly documents \fBTherion\fP and provides an overview of the package. .PP \fBTherion\fP is a program that processes Therion data files to produce cave surveys. The data files are usually .th files which contain survey data (largely equivalent to Survex .svx files), .th2 files which contain drawing data, and thconfig files which control the data files to be used and the maps to be output. .PP \fBTherion\fP outputs PDF and SVG files for drawings, Survex .3d files, Compass .PLT files and VRML files for 3D models. .PP \fBTherion\fP uses a number of helper programs to do its job. \fBSurvex\fP is used to process the centreline data, \fBMetaPost\fP is used to draw cave symbols, and \fBpdfTeX\fP generates the final maps. .PP In order to make the entering of drawing data practical, and to make the editing of survey files easier, a graphical editor \fBXTherion\fP is included. This also includes a 'compiler' function which runs Therion on the data to produce output. This is implemented using Tcl/Tk. .PP The Therion data files describe the cave as text in terms of objects so the corresponding graphical representations are only inserted at output generation time. This means that a survey can be produced using whichever symbol set you require by specifying the relevant set of MetaPost macros. Currently the UIS symbol set is supported. .PP Multiple languages and character sets are supported \(em currently ISO-8859-1, ISO-8859-2, ISO-8859-5, ISO-8859-7, UTF-8, ASCII and CP1250. .SH "ARGUMENTS" .PP therion takes only one argument \(em a \fIconfig-file\fP. If no file is specified then the default \fIthconfig\fP file in the current directory will be used. A new default file can be created using the \fB-g\fP option. .SH "OPTIONS" .PP This program follows the usual GNU command line syntax, with long options starting with two dashes ("--"). A summary of options is included below. For a complete description, see \fBThe Therion Book\fP. .IP "\fB-h\fP, \fB--help\fP" 10 Show summary of options. .IP "\fB-v\fP, \fB--version\fP" 10 Show version information. .IP "\fB-q\fP" 10 Quiet mode \(em minimise output. .IP "\fB-g\fP" 10 Generate a new configuration file. This will be the given config-file if specified, or \fBthconfig\fP in the current directory if not. If the file already exists, it will be overwritten. .IP "\fB-i\fP" 10 Ignore comments when writing (-g|-u) configuration file. .IP "\fB-L\fP" 10 Do not create a log-file. Normally all messages are written into a \fBtherion.log\fP file. .IP "\fB-l log-file\fP" 10 Change the name of the log file. .IP "\fB-p search-path\fP" 10 This option is used to set the search path (or list of paths, separated by colon), which therion will use to find its source files (if it doesn't find them in the working directory). .IP "\fB-q\fP" 10 Run therion in quiet mode. It will print only warning and error messages (to STDERR). .IP "\fB--print-encodings\fP" 10 Print a list of all supported encodings. .IP "\fB--print-init-file\fP" 10 Print a default initialisation file. For more details see the Initialisation section in the Appendix of the Therion Book. .IP "\fB-s\fP" 10 Set the name of the source file. .IP "\fB-u\fP" 10 Upgrade the configuration file. .IP "\fB-d\fP" 10 Turn on debugging mode. The current implementation creates a temporary directory named \fBthTMPDIR\fP (in your system temporary directory) and does not delete any temporary files. .SH "SEE ALSO" .PP loch(1), xtherion(1) .PP For full information see The Therion Book which describes Therion and its use in detail. .SH "AUTHORS" .PP Stacho Mudrak and Martin Budaj. This manual page was originally written by Wookey wookey@debian.org for the \fBDebian\fP system. Modified by MB. .PP Copyright Wookey 2003, Martin Budaj 2003. This file is licensed under the GNU General Public Licence. therion-5.4.1/man/xtherion.1000066400000000000000000000025651307545355600157130ustar00rootroot00000000000000.TH "THERION" "1" "2017/02/25" .SH "NAME" XTherion \(em Graphical drawing editor for Therion .SH "SYNOPSIS" .PP \fBxtherion\fP [FILE...] .SH "DESCRIPTION" .PP This manual page documents \fBXTherion\fP, which is part of the therion package. .PP \fBXTherion\fP is an application that serves as a graphical front end for Therion. Therion itself works entirely with text-based files, but much of the data needs to be generated graphically, so XTherion is one example of how it might be done. It is written in Tcl/Tk. .PP \fBXTherion\fP lets you load a background image (a scan of the cave segment or to-scale notes), scale it, then draw Therion 'scraps' over the image, and relate it to survey stations and save the resulting data. .PP Image formats GIF, PNM and PPM are supported by default, plus PNG and JPEG if the libtk-img package is installed. .PP For full information see The Therion Book which describes the application and its use in detail. .SH "OPTIONS" .PP XTherion optionally takes a list of .th, .th2, thconfig or thcfg files to open. .SH "SEE ALSO" .PP loch(1), therion(1) .SH "AUTHOR" .PP Stacho Mudrak. This manual page was originally written by Wookey wookey@debian.org for the \fBDebian\fP system. Modified by MB and Olly Betts. .PP Copyright Wookey 2003, Martin Budaj 2003, Olly Betts 2015, 2017 This file is licensed under the GNU General Public Licence. therion-5.4.1/mpost/000077500000000000000000000000001307545355600143505ustar00rootroot00000000000000therion-5.4.1/mpost/Makefile000066400000000000000000000000271307545355600160070ustar00rootroot00000000000000all: perl genmpost.pl therion-5.4.1/mpost/genmpost.pl000077500000000000000000000106031307545355600165440ustar00rootroot00000000000000#!/usr/bin/perl -w sub encodecxx { $str = shift; $str =~ s/\x0D//g; $str =~ s/\x0C//g; $str =~ s/\x0A//g; $str =~ s/\\/\\\\/g; $str =~ s/\n/\\n/g; $str =~ s/\t/\\t/g; $str =~ s/\"/\\"/g; return $str; } sub init_symbol { my $s = shift; # if ($s =~ /def\s+((p|l|a)_([a-z]+_){1,2}[A-Z]+)/) { if ($s =~ /(def|let)\s+(p|l|a|s)_([a-z_]+)_([A-Z]+)\W/) { $SYMBOLS{$2}{$3}{$4} = 1; } # elsif ($s =~ /beginpattern\(a_([a-z]+)_([A-Z]+)\)/) { # $SYMBOLS{"a"}{$1}{$2} = 1; # } } sub process_symbols { my ($s1, $s2, $s3, %ss); open(OUT, ">../SYMBOLS.txt"); $thmpost_library .= "\n"; foreach $s1 (reverse sort keys %SYMBOLS) { print OUT "\n\n[", ($s1 eq "p") ? "Point" : (($s1 eq "l") ? "Line" : (($s1 eq "s") ? "Special" : "Area")), " symbols]\n"; foreach $s2 (sort keys %{$SYMBOLS{$s1}}) { print OUT "\n$s2: "; foreach $s3 (sort keys %{$SYMBOLS{$s1}{$s2}}) { print OUT "$s3 "; $thmpost_library .= "\"initsymbol(\\\"$s1\_$s2\_$s3\\\");\\n\"\n"; $ss{$s3} = 1; } } } close(OUT); my $i = 0; my $ssl; foreach $s3 (sort keys %ss) { $ssl .= "\"$s3\",\n"; $ss{$s3} = $i; $i++; } open(OUT, ">../thsymbolsets.h"); print OUT "#ifndef thsymbolsets_h\n#define thsymbolsets_h\n\n"; print OUT "#include \"thsymbolsetlist.h\"\n\n"; print OUT "#include \n"; print OUT "#include \n\n"; print OUT "\n#define thsymsets_size $i\n\n"; print OUT "extern int thsymsets_symbols [thsymbolset_size][thsymsets_size];\n\n"; print OUT "extern int thsymsets_figure [thsymbolset_size][thsymsets_size+1];\n\n"; print OUT "extern int thsymsets_order[thsymbolset_size];\n\n"; print OUT "extern int thsymsets_count[thsymsets_size];\n\n"; print OUT "extern std::map thsymsets_comment;\n\n"; print OUT "\nstatic const thsymbolset__char_ptr thsymsets [] = {\n$ssl};\n\nvoid thsymsets_symbols_init();\n\n"; print OUT "#endif\n\n"; close(OUT); open(OUT, ">../thsymbolsets.cxx"); print OUT "#include \"thsymbolsets.h\"\n\n"; print OUT "int thsymsets_symbols [thsymbolset_size][thsymsets_size];\n\n"; print OUT "int thsymsets_figure [thsymbolset_size][thsymsets_size+1];\n\n"; print OUT "int thsymsets_order[thsymbolset_size];\n\n"; print OUT "int thsymsets_count[thsymsets_size];\n\n"; print OUT "std::map thsymsets_comment;\n\n"; print OUT "\n\n\nvoid thsymsets_symbols_init() {\n"; print OUT "\tsize_t i, j;\n\tfor(i = 0; i <= thsymbolset_size; i++)\n"; print OUT "\t\tfor(j = 0; j < thsymsets_size; j++) \n\t\t\tthsymsets_symbols[i][j] = 0;\n\t\t\n\t\n"; foreach $s1 (reverse sort keys %SYMBOLS) { if (($s1 eq "p") || ($s1 eq "a") || ($s1 eq "l")) { foreach $s2 (sort keys %{$SYMBOLS{$s1}}) { foreach $s3 (sort keys %{$SYMBOLS{$s1}{$s2}}) { print OUT "\tthsymsets_symbols[SYM" . uc($s1) . "_" . uc($s2) . "][$ss{$s3}] = 1;\n"; } } } } print OUT "}\n"; close(OUT); } print "reading therion.mp\n"; $thmpost_library = ""; open(INPT,"therion.mp"); while ($ln = ) { init_symbol($ln); if ($ln =~ /^\s*input\s+(\S+)\s*\;/) { if (open(INPT2,"$1.mp") || open(INPT2,"$1")) { print "reading $1\n"; $fname = $1; $thmpost_library .= "\n\"\\n\\n\\n%%%%% INPUT $fname %%%%%\\n\\n\\n\""; while($ln2 = ) { init_symbol($ln2); if ($ln2 !~ /\s*endinput\s*\;\s*$/) { $thmpost_library .= "\n\"" . encodecxx($ln2) . "\\n\""; } } close(INPT2); $thmpost_library .= "\n\"\\n\\n\\n%%%%% ENDINPUT $fname %%%%%\\n\\n\\n\""; } else { $thmpost_library .= "\n\"" . encodecxx($ln) . "\\n\""; } } else { $thmpost_library .= "\n\"" . encodecxx($ln) . "\\n\""; } } close(INPT); process_symbols(); open(OUTPT,">../thmpost.h"); print OUTPT <../thmpost.cxx"); print OUTPT < 2*radius; endfor; j := j + (j/(2*radius))[u*d_beg,u*d_end]; exitif j > 2*radius; endfor; ); % clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_pebbles_SKBB (expr p) = T:=identity; pickup PenC; path q, qq; q = bbox p; picture tmp_pic; tmp_pic := image( for i = xpart llcorner q step 1.5u until xpart urcorner q: for j = ypart llcorner q step 1.5u until ypart urcorner q: qq := (superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75)) % randomized (u/25) rotated uniformdeviate(360) shifted ((i,j) randomized 0.8u); if xpart (p intersectiontimes qq) < 0: thdraw qq; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_water_SKBB (expr Path) = T:=identity; thfill Path; enddef; let a_sump_SKBB = a_water_SKBB; def a_u (expr p) = T:=identity; thfill p withcolor red; enddef; therion-5.4.1/mpost/thLine.mp000066400000000000000000000733011307545355600161350ustar00rootroot00000000000000%% therion source code %% %% This file defines macros for line symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thLine.mp,v $ %% $Revision: 1.4 $ %% %% Copyright (C) 2000 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % some definitions % adjust step according to the length of the path; return at least two steps vardef adjust_step (expr len, s) = if s <= len/2: len / (floor(len / s)) else: len/2 fi enddef; def mark_(expr p,t,l) = thdraw (point t of p) -- ((point t of p) + l * unitvector(thdir(p,t) rotated 90)); enddef; vardef thdir (expr p,t) = % 1 * epsilon caused problems in scales < 1:1000 % n * epsilon is enough for scale 1:(n*1000) if arclength(p)=0: hide(thwarning("unable to determine direction on zero-length path")) (0,1) else: % ((direction t-100*epsilon of p) + (direction t+100*epsilon of p)) / 2 postcontrol (t+1000*epsilon) of p - precontrol (t-1000*epsilon) of p % direction t of p fi enddef; vardef polyline_offset(expr p, amount, direction) = % direction should be 90 or -90 save P; path P,R; P = punked p; % convert to polyline pair za, zb; for i=0 upto length P: if i > 0: za := unitvector(point i of P - point i-1 of P); % direction of the previous segment else: % the first segment if cycle P: za := unitvector(point length P of P - point (length P)-1 of P); else: za := unitvector(point 1 of P - point 0 of P); % za == zb fi; fi; if i < length P: zb := unitvector(point i+1 of P - point i of P); % direction of the next segment else: % the last segment if cycle P: % zb is unused as the path is closed by "-- cycle" else: zb := za; fi; fi; A := 180-(angle(za)-angle(zb)); R := if i>0: R -- fi if (i=length P) and cycle P: cycle else: point i of P + amount*unitvector(((za+zb)/2) rotated direction)/abs(sind(A/2)) fi; endfor; R enddef; % walls: def l_wall_bedrock_UIS (expr P) = T:=identity; pickup PenA; thdraw P; enddef; def l_wall_sand_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.1u); pickup PenB; forever: t := arctime cas of P; thdraw ((point t of P) + (uniformdeviate 1) * .4u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_pebbles_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .35u); pickup PenC; q:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/20) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_clay_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; q := (-0.15u,0){up}..{down}origin..{up}(0.15u,0); forever: t := arctime (cas + mojkrok/2) of P; thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_debris_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .4u); pickup PenC; % q := ((-.1u,-.15u)--(.2,.03u)--(-.2u,.15u)--cycle) scaled 1.5; q := ((-.2u,-.1u)--(.2u,-.1u)--(0,.2u)--cycle) scaled 1.1; forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/10) rotated uniformdeviate (360) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_wall_blocks_SKBB (expr P) = % pickup PenD; % draw P withcolor red; T:=identity; cas := 0; dlzka := arclength P; if dlzka > 0: mojkrok:=adjust_step(dlzka, 1.5u); pickup PenA; forever: t1 := arctime (cas + mojkrok*1/10) of P; t2 := arctime (cas + mojkrok*9/10) of P; q := ((point t1 of P) + .4u * unitvector(thdir(P,t1) rotated -90)) -- (subpath (t1,t2) of P) -- ((point t2 of P) + .4u * unitvector(thdir(P,t2) rotated -90)); thdraw q randomized (u/6); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; fi; enddef; def l_wall_ice_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .5u); pickup PenC; p := (-.1u,0)--(.1u,0); q := (0,-.1u)--(0,.1u); forever: t := arctime (cas + mojkrok/2) of P; thdraw p shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); thdraw q shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_underlying_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled optical_zoom; enddef; def l_wall_unsurveyed_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; def l_wall_presumed_UIS (expr P) = T:=identity; pickup PenA; thdraw P dashed evenly scaled (2*optical_zoom); enddef; % other line symbols def l_pit_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenD; forever: t := arctime cas of P; mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; enddef; let l_floorstep_UIS = l_pit_UIS; def l_overhang_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.3u); pickup PenC; t1:=0; forever: t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok) of P; thfill (subpath (t1,t2) of P) -- ((point t of P) + .3u * unitvector(thdir(P,t) rotated 90)) -- cycle; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors t1:=t2; endfor; thdraw P; enddef; def l_chimney_UIS (expr P) = T:=identity; pickup PenC; thdraw P dashed evenly scaled optical_zoom; enddef; def l_ceilingstep_SKBB (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; thdraw (subpath (t1,t2) of P); mark_ (P,t,0.2u); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_ceilingmeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); pickup PenC; forever: t := arctime (cas + mojkrok/2) of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp + 0.2u * Pv + 0.2u * Pd) -- (Pp + 0.2u * Pv - 0.2u * Pd); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); thdraw (Pp - 0.2u * Pv + 0.2u * Pd) -- (Pp - 0.2u * Pv - 0.2u * Pd); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; %Bruce Mutton 2012.06.16 uses general code for l_ceilingmeander_SKBB defined in therion source code by Martin Budaj 5.3.9 % but ticks on outside (rock) side of lines def l_ceilingmeander_UIS (expr P) = pair Pp; pair Pd; pair Pv; T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length pickup PenC; forever: t := arctime (cas + mojkrok/2) of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.2u * Pv) -- (Pp + 0.3u * Pv); % add 0.1u to each moves ticks outside thdraw (Pp + 0.2u * Pv + 0.2u * Pd) -- (Pp + 0.2u * Pv - 0.2u * Pd); thdraw (Pp - 0.2u * Pv) -- (Pp - 0.3u * Pv); % subtract 0.1u to each moves ticks outside thdraw (Pp - 0.2u * Pv + 0.2u * Pd) -- (Pp - 0.2u * Pv - 0.2u * Pd); cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_ceilingmeander_NZSS = l_ceilingmeander_UIS; %Bruce Mutton 2012.06.16 uses general code for l_ceilingstep_SKBB defined in therion source code by Martin Budaj 5.3.9 % but ticks on righthand (rock) side of line def l_ceilingstep_UIS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.8u); % symbol length nudged to be multiple of path length pickup PenC; forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; thdraw (subpath (t1,t2) of P); mark_ (P,t,-0.2u); % change sign to -0.2u cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_ceilingstep_NZSS = l_ceilingstep_UIS; %Bruce Mutton 2012.06.10 uses general code for l_pit_UIS defined in therion source code by Martin Budaj 5.3.9 % dots on righthand (rock) side of line spaced 0.2u, 0.2u same as floor-step ticks def l_chimney_NZSS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); % symbol length nudged to be multiple of path length q:= (0.20u,-0.20u) -- (0.21u,-0.21u); % dot pickup PenC; %2nd thinnest pen forever: t := arctime cas of P; thdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % draw dots cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenB; %2nd thickest pen thdraw P; %continuous line enddef; %Bruce Mutton 2010.06.20 uses general code and adjust_step defined in therion source code by Martin Budaj %for Therion 5.3.8 def l_wall_presumed_NZSS (expr P) = T:=identity; cas := 0; % cursor to step along path dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1.5u); % symbol length nudged to be multiple of path length q := (-0.2u,-0.4u)--(0,0)--(0.2u,-0.4u); % define v shape forever: t1 := arctime (cas + mojkrok*1/5) of P; t := arctime (cas + mojkrok/2) of P; t2 := arctime (cas + mojkrok*4/5) of P; pickup PenA; % thick thdraw (subpath (t1,t2) of P); % dash pickup PenC; % thin thdraw q rotated angle(thdir(P,t)) shifted (point t of P ); % v shape cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; def l_floormeander_SKBB (expr P) = pair Pp; pair Pd; pair Pv; pair PPp; pair PPd; pair PPv; T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.25u); pickup PenC; forever: t := arctime cas of P; Pp := (point t of P); Pd := unitvector(thdir(P,t)); Pv := Pd rotated 90; thdraw (Pp + 0.1u * Pv) -- (Pp + 0.2u * Pv); thdraw (Pp - 0.1u * Pv) -- (Pp - 0.2u * Pv); if cas > 0: thdraw (PPp + 0.2u * PPv) -- (Pp + 0.2u * Pv); thdraw (PPp - 0.2u * PPv) -- (Pp - 0.2u * Pv); fi; PPp := Pp; PPd := Pd; PPv := Pv; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; enddef; boolean alw_perpendicular; def l_slope_SKBB (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; offset:=0; dlzka := (arclength P); if dlzka>3u: offset := 0.3u; elseif dlzka>u: offset := 0.1u; fi; dlzka:=dlzka-2offset; cas := offset; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); thdraw (point t of P) -- ((point t of P) + if par: 0.333 * fi l * unitvector(dir(a))); cas := cas + mojkrok; par := not par; exitif cas > dlzka + offset + 0.1mm; % for rounding errors endfor; if S = 1: pickup PenC; draw P fi; %pickup pencircle scaled 3pt; %for i=0 upto li: draw point i of P; endfor; enddef; def l_slope_BCRA (expr P,S)(text Q) = %show Q; T:=identity; numeric dirs[]; numeric lengths[]; for i=Q: dirs[redpart i]:=greenpart i; lengths[redpart i]:=bluepart i; endfor; li:=length(P); % last alw_perpendicular:=true; for i=0 upto li: if unknown dirs[i]: dirs[i]:=-1; else: if dirs[i]>-1: dirs[i]:=((90-dirs[i]) - angle(thdir(P,i))) mod 360; alw_perpendicular:=false; fi; fi; if unknown lengths[i]: lengths[i]:=-1; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: d:=dirs[i]; if d=-1: if (i=0) or (i=li): dirs[i] := angle(thdir(P,i) rotated 90) mod 360; pi:=i; else: if ni<=i: for j=i upto li: ni:=j; exitif dirs[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); dirs[i]:=w[dirs[pi],dirs[ni]]; % if (dirs[i]-angle(thdir(P,i))) mod 360>180: % dirs[i]:=w[dirs[ni],dirs[pi]]; % message("*******"); % fi; fi; else: pi:=i; fi; endfor; %for i=0 upto li: show dirs[i]; endfor; ni:=0; % next pi:=0; % previous for i=0 upto li: l:=lengths[i]; if l=-1: if (i=0) or (i=li): lengths[i] := 1cm; % should never happen! thwarning("slope width at the end point not specified"); pi:=i; else: if ni<=i: for j=i+1 upto li: ni:=j; exitif lengths[j]>-1; endfor; fi; w:=arclength(subpath(pi,i) of P) / arclength(subpath(pi,ni) of P); lengths[i]:=w[lengths[pi],lengths[ni]]; pi:=i; fi; else: pi:=i; fi; endfor; % for i=0 upto li: show lengths[i]; endfor; T:=identity; boolean par; offset:=0; dlzka := (arclength P); if dlzka>3u: offset := 0.3u; elseif dlzka>u: offset := 0.1u; fi; dlzka:=dlzka-2offset; cas := offset; mojkrok:=adjust_step(dlzka,1.4u) / 2; pickup PenD; par := false; forever: t := arctime cas of P; if t mod 1>0: % not a key point w := (arclength(subpath(floor t,t) of P) / arclength(subpath(floor t,ceiling t) of P)); if alw_perpendicular: a := 90; else: a := w[dirs[floor t],dirs[ceiling t]]; fi; l := w[lengths[floor t],lengths[ceiling t]]; else: if alw_perpendicular: a := 90; else: a:= dirs[t]; fi; l:=lengths[t]; fi; a := a + angle(thdir(P,t)); if par: thfill (point t of P) + mojkrok/2.5 * unitvector(dir(a+90))-- ((point t of P) + l * unitvector(dir(a))) -- (point t of P) + mojkrok/2.5 * unitvector(dir(a-90)) -- cycle; fi; cas := cas + mojkrok; par := not par; exitif cas > dlzka + offset + 0.1mm; % for rounding errors endfor; enddef; def l_contour_UIS(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if pnt=-2: mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_contour_SKBB(expr P)(text txt) = T:=identity; pickup PenD; thdraw P; for pnt=txt: if (pnt=-2) or (pnt=-1): mark_(P,arctime(arclength(P)/2) of P, 0.2u); elseif pnt>=0: mark_(P,pnt,0.2*u); fi; exitif pnt<0; endfor; enddef; def l_rockborder_UIS (expr P) = T:=identity; pickup PenC; if cycle P: thclean P fi; thdraw P; enddef; def l_rockedge_UIS (expr P) = T:=identity; pickup PenD; thdraw P; enddef; def l_border_visible_SKBB (expr Path) = T:=identity; pickup PenC; draw Path; enddef; def l_border_temporary_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled optical_zoom; enddef; def l_flowstone_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .7u); if (cycle P) and (dlzka < 3.5u): % make at least 5 curls on a cyclic path mojkrok := dlzka/5; fi; pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 60)} .. {dir (angle(thdir(P,t2)) - 60)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_moonmilk_UIS (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .3u); pickup PenC; t1:=0; forever: t2 := arctime (cas + mojkrok) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 80)} .. {dir (angle(thdir(P,t2)) - 80)}(point t2 of P); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors t1:=t2; endfor; enddef; def l_survey_surface_SKBB (expr P) = T:=identity; thdrawoptions(dashed withdots scaled (0.2 * optical_zoom) withpen PenC); thdraw P; thdrawoptions(); enddef; def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; if ATTR__scrap_centerline: thdraw P; else: PolygonLine:=.8u; pair zz[]; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; if length (zz2-zz1) > 2*PolygonLine: thdraw zz1 -- zz1 + PolygonLine * unitvector(zz2 - zz1); thdraw zz2 -- zz2 + PolygonLine * unitvector(zz1 - zz2); else: thdraw zz1 -- zz2; fi; endfor; fi; enddef; def l_survey_cave_UIS (expr P) = T:=identity; pair zz[]; pickup PenC; for t = 0 upto length P - 1: zz1 := point t of P; zz2 := point t+1 of P; draw zz1 -- zz2; endfor; enddef; def l_waterflow_permanent_UIS (expr Path) = path ppp; T:=identity; cas := 0; dlzka := arclength Path; mojkrok:=adjust_step(dlzka, 0.5u); pickup PenD; vardef azim = 50 + 15*normaldeviate enddef; az1 := azim; sgn := 1; ppp := point 0 of Path; forever: t1 := arctime cas of Path; t2 := arctime (cas+mojkrok) of Path; if cas+1.1*mojkrok > dlzka: az2 := 0; else: az2 := azim; fi; d1 := angle(thdir(Path,t1)) + sgn * az1; d2 := angle(thdir(Path,t2)) - sgn * az2; ppp := ppp & (point t1 of Path){dir d1} .. {dir d2}(point t2 of Path); az1 := az2; sgn := -1 * sgn; cas := cas + mojkrok; exitif cas > dlzka + mojkrok/3; % for rounding errors endfor; % drawarrow ppp; thdraw ppp; thdrawoptions(); oldahlength:=ahlength; ahlength:=ahlength*optical_zoom; thdraw arrowhead ppp; thfill arrowhead ppp; ahlength:=oldahlength; enddef; def l_waterflow_intermittent_SKBB (expr Path) = thdrawoptions(dashed evenly scaled optical_zoom); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_waterflow_conjectural_SKBB (expr Path) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_waterflow_permanent_UIS (Path); thdrawoptions(); enddef; def l_invisible (expr P) = enddef; def l_undefined (expr P) = T:=identity; pickup PenC; thdraw P withcolor red; thwarning("undefined line symbol used"); enddef; % Q = 0 -- no arrows % 1 -- end % 2 -- begin % 3 -- both def l_arrow_SKBB (expr P, Q) = T:=identity; pickup PenC; thdraw P; p := (-.1u,-.25u)--(0,0)--(.1u,-.25u); if odd Q: draw p rotated (angle(thdir(P,0))+90) shifted (point 0 of P); fi; if Q>1: draw p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P); fi; enddef; def l_mapconnection_SKBB (expr P) = thdrawoptions(dashed withdots scaled (0.5 * optical_zoom) withpen PenB); l_arrow_SKBB(P,3); thdrawoptions(); enddef; def l_section_SKBB (expr P)(text txt) = T:=identity; path Q; Q = punked P; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := postcontrol t of P; zz4 := precontrol t+1 of P; if (length(zz3-1/3[zz1,zz2]) > 0.1pt) or (length(zz4-2/3[zz1,zz2]) > 0.1pt): zz5 = whatever[zz1,zz2]; (zz3-zz5) = whatever * (zz1-zz2) rotated 90; draw zz1--zz5; zz6 = whatever[zz1,zz2]; (zz4-zz6) = whatever * (zz1-zz2) rotated 90; draw zz2--zz6; else: draw zz1--zz2; fi; endfor; for pnt=txt: if pnt=-1: else: T:=identity rotated angle(thdir(Q,pnt)) shifted (point pnt of Q); pickup PenC; thdraw (0,0)--(0,.8u); thdraw (-.1u,.55u)--(0,.8u)--(.1u,.55u); fi; exitif pnt=-1; endfor; enddef; let l_border_invisible = l_invisible; let l_wall_invisible = l_invisible; def l_debug (expr col, pen, P) = T:=identity; pickup if pen=0: PenD else: PenB fi; thdraw P withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def l_u (expr P) = T:=identity; pickup PenA; thdraw P withcolor red; enddef; def l_gradient_UIS (expr P) = T:=identity; pickup PenC; thdraw P; p:=(-.15u,-.4u)--(0,0)--(.15u,-.4u)--cycle; thfill (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); thdraw (p rotated (angle(thdir(P,length P))-90) shifted (point infinity of P)); enddef; def l_gradient_BCRA (expr P) = T:=identity; pickup PenC; for t = 0 upto length P - 1: pair zz[]; zz1 := point t of P; zz2 := point t+1 of P; zz3 := unitvector(zz2 - zz1); thfill zz1 + u/3 * zz3 + .25u * (zz3 rotated 90) -- zz2 - u/3 * zz3 -- zz1 + u/3 * zz3 + .25u * (zz3 rotated -90) -- cycle; endfor; enddef; def l_rope_SKBB (expr P, show_anchors, show_rebelays) = T:=identity; pickup PenC; if not show_rebelays: draw P; else: d:=0.5u; for i:=0 upto (length P - 2): x1 := xpart point i of P; y1 := ypart point i of P; x2 := xpart point i+1 of P; y2 := ypart point i+1 of P; dx1:=x1; dy1:=y1; x1:=0; y1:=0; x2:=x2-dx1; y2:=y2-dy1; if y2 > y1: y3 := y1 - d; x3 := x1 + (x2-x1)*sqrt(d)/(sqrt(d)+sqrt(y2-y1+d)); else: y3 := y2 - d; x3 := x1 + (x2-x1)*sqrt(y1-y2+d)/(sqrt(d)+sqrt(y1-y2+d)); fi; numeric a,b,c; a*x1/10*x1 + b/10*x1 + c/10 = y1/10; a*x2/10*x2 + b/10*x2 + c/10 = y2/10; a*x3/10*x3 + b/10*x3 + c/10 = y3/10; draw (x1+dx1,y1+dy1) for t = x1 step (x2-x1)/20 until x2+10*epsilon: -- (t+dx1,a*t*t+b*t+c+dy1) endfor; endfor; pair x; x = point (length P)-1 of P + whatever * down; x = point (length P) of P + whatever * right; draw point (length P)-1 of P -- x; fi; if show_anchors: for i:=0 upto length P if show_rebelays: -1 fi: thdraw point i of P withpen pencircle scaled 0.25u; endfor; fi; enddef; def l_border_presumed_SKBB (expr Path) = T:=identity; pickup PenC; draw Path dashed evenly scaled (0.25 * optical_zoom); enddef; def l_steps_SKBB (expr P) = if known ATTR_c: c := scantokens ATTR_c; else: c := 2; fi; if ATTR__elevation: if (c < 2): thwarning("Invalid stairs definition (c<2)"); pickup PenA; draw P withcolor red; else: path PP; if (ypart point 0 of P) < (ypart point length P of P): PP := P; else: PP := reverse P; fi; path p; for j:=0 upto ((length PP) - 1): p := (point j of PP) -- (point (j + 1) of PP); c := ceiling(abs((ypart point 0 of p) - (ypart point length p of p)) / (0.2 / Scale * 72 / 2.54)); % 20 cm height if (c < 2): c:=2 fi; pair cp; cp = point length p of p - point 0 of p; dx := (xpart cp) / c; dy := (ypart cp) / c; cp := point 0 of p; for i:= 0 upto c - 1: l_border_visible(cp -- cp + (0,dy) -- cp + (dx,dy)); cp := cp + (dx, dy); endfor; %draw P; endfor; fi; else: if known ATTR_l: l := scantokens ATTR_l; else: l := (length(P)-2)/2; fi; if ((length(P) < 4) or (c < 2)) or ((odd length P) and (not known ATTR_l)): thwarning("Invalid stairs definition" if c<2: &" (c<2)" fi); pickup PenA; draw P withcolor red; else: path p, q; p = subpath (1, 1+l) of P; q = reverse subpath (l+2, length(P)) of P; lp := arclength(p); lq := arclength(q); for i=1 upto c: l_border_visible(point(arctime ((i-1)/(c-1)*lp) of p) of p -- point(arctime ((i-1)/(c-1)*lq) of q) of q); endfor; l_border_visible(p); l_border_visible(q); drawoptions(withcolor 0.3*white); %p_label(decimal c, point 0.5 of P, 0, 6); drawoptions(); fi; fi; enddef; def l_handrail_SKBB (expr P) = if ATTR__elevation: T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1u); pickup PenD; pair tmppoint; tmph := 1 / Scale * 72 / 2.54; % 1 m height tmppoint:=(point 0 of P) +(0,tmph); forever: t := arctime cas of P; draw point t of P -- (point t of P)+(0,tmph) withpen PenD; if cas > 0: draw tmppoint -- (point t of P)+(0,tmph) withpen PenC; tmppoint := (point t of P)+(0,tmph); fi; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; else: T:=identity; cas := 0; pair coord; sq_size:=0.12u; dlzka := arclength P; mojkrok:=adjust_step(dlzka, u); pickup PenD; forever: t := arctime cas of P; coord := point t of P; thfill coord+(-sq_size,-sq_size)--coord+(sq_size,-sq_size)--coord+(sq_size,sq_size)--coord+(-sq_size,sq_size)--cycle; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; fi; enddef; def l_fixedladder_SKBB (expr Q) = % TODO: support side view in elevation (front view could be the same as in the plan view) T:=identity; path P, P_left, P_right; P := punked Q; % ensure that there is no bezier curve pair p_tmp, za, zb; len := arclength P; dt:=adjust_step(len, 0.3u); t := dt/2; wdth := 0.25u; % half-width of the ladder pickup PenC; % draw the steps forever: p_tmp := point arctime t of P of P; draw p_tmp+wdth*unitvector(thdir(P,arctime t of P) rotated -90) -- p_tmp+wdth*unitvector(thdir(P,arctime t of P) rotated 90); t := t + dt; exitif t > len + 10*epsilon; endfor; draw polyline_offset(P,wdth, 90); draw polyline_offset(P,wdth,-90); enddef; def l_ropeladder_SKBB (expr P) = pickup PenD; draw P withcolor red; enddef; def l_viaferrata_SKBB (expr P) = pickup PenD; draw P withcolor red; enddef; therion-5.4.1/mpost/thPoint.mp000066400000000000000000000637241307545355600163470ustar00rootroot00000000000000%% therion source code %% %% This file defines macros for point map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thPoint.mp,v $ %% $Revision: 1.8 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- pair U; def p_stalactite_UIS(expr pos,theta,sc,al) = U:=(.15u, .4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); enddef; def p_stalagmite_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); enddef; def p_pillar_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); enddef; def p_curtain_UIS(expr pos,theta,sc,al) = U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); thdraw (0,.15u)--(0,0){dir 180}..(-.12u,-.11u)..{dir 0}(0,-.22u)--(0,-.4u); enddef; def p_helictite_UIS(expr pos,theta,sc,al) = U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,.4u)--(0,-.4u); p := (-.2u,.4u)---(-.2u,.1u){down}..{dir -10}(-.1u,0.02u)---origin; thdraw p; thdraw p reflectedabout (origin,(0,u)) reflectedabout (origin,(u,0)); enddef; def p_sodastraw_UIS(expr pos,theta,sc,al) = U:=(.5u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); pickup PenD; thdraw (-.4u,.2u)--(-.4u,0); thdraw (-.12u,.2u)--(-.12u,-.25u); thdraw (.02u,.2u)--(.02u,-.1u); thdraw (.23u,.2u)--(.23u,-.19u); thdraw (.35u,.2u)--(.35u,-.15u); enddef; def p_crystal_UIS (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.35*u,0)--(.35*u,0)); thdraw p; thdraw p rotated (60); thdraw p rotated (120); enddef; def p_flowstone_UIS (expr pos,theta,sc,al)= U:=(.45u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.15*u,0)--(.15*u,0)); thdraw p shifted (.3u,-.1u); thdraw p shifted (-.3u,-.1u); thdraw p shifted (0,.1u); enddef; def p_moonmilk_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u){up}..{dir -60}(-.18u,-.105u){dir 80}.. {dir-80}(.18u,-.105u){dir 60}..{down}(.5u,-.2u); enddef; def p_wallcalcite_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.2u)--(0,.1u)--(.2u,-.2u); enddef; def p_popcorn_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.2u)--(.5u,-.2u); pickup PenD; thdraw (-.3u,-.2u)--(-.3u,.1u); thdraw (0,-.2u)--(0,.1u); thdraw (.3u,-.2u)--(.3u,.1u); thfill fullcircle scaled .2u shifted (-.3u,.1u); thfill fullcircle scaled .2u shifted (0,.1u); thfill fullcircle scaled .2u shifted (.3u,.1u); enddef; def p_disk_UIS (expr pos,theta,sc,al)= U:=(.2u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.2u,-.3u)--origin--(.2u,-.3u); p:=fullcircle scaled .3u shifted (0,.15u); thclean p; thdraw p; enddef; def p_gypsum_NSS (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.25u,0)--(.25u,0); thdraw (0,-.25u)--(0,.25u); enddef; def p_aragonite_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u)--(0,.3u); thdraw (0,-.1u){dir 40}..{dir 5}(.3u,.08u); thdraw (0,-.1u){dir 140}..{dir 175}(-.3u,.08u); thdraw (0,.2u){dir 30}..{dir 5}(.25u,.3u); thdraw (0,.2u){dir 150}..{dir 175}(-.25u,.3u); enddef; def p_cavepearl_SKBB (expr pos,theta,sc,al)= U:=(.25u,.25u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=fullcircle scaled .25u shifted (0,.16u); thdraw p; thdraw p rotated 120; thdraw p rotated 240; enddef; def p_gypsumflower_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; % thdraw (.2u,0){left}..(0,.2u)..(.25u,.35u)..(.5u,0).. % (.1u,-.3u)..{dir 125}(-.5u,.2u); thdraw (.18u,0){left}..(0,.15u)..(.2u,.3u)..(.4u,0).. (.15u,-.28u)..{dir 120}(-.4u,.15u); enddef; def p_rimstonepool_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); thfill buildcycle(p,((.5u,.1u)--(-.5u,.1u))); thdraw p; enddef; def p_rimstonedam_ASF (expr pos,theta,sc,al)= U:=(.4u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir -70}..{dir 70}(.4u,.2u); enddef; def p_anastomosis_UIS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.2u)--(-.3u,-.3u)--(0,.3u)--(.1u,.2u); thdraw p; thdraw p shifted (.3u,0); enddef; def p_karren_UIS (expr pos,theta,sc,al)= U:=(.5u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.3u){dir -85}..{dir 85}(-.32u,-.3u)..(-.28u,.3u){dir 85}.. {dir -85}(-.12u,.3u)..(-.08u,-.3u){dir-85}..{dir 85}(.08u,-.3u).. {dir85}(.12u,.3u)..(.28u,.3u){dir -85}..(.32u,-.3u){dir -85}.. {dir 85}(.5u,-.3u); enddef; def p_scallop_UIS (expr pos,theta,sc,al)= U:=(.2u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-.4u){dir 125}..{dir 105}(-.2u,.1u){up}.. {down}(.2u,.1u){dir -105}...{dir -125}(0,-.4u); enddef; def p_flute_UIS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u)--(.5u,.2u); thdraw (-.3u,.2u){dir -70}..{dir 70}(.3u,.2u); enddef; def p_raft_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,.2u){dir -80}..(-.3u,-.2u)..origin..(.3u,.2u).. {dir -80}(.5u,-.2u); enddef; def p_raftcone_NSS (expr pos,theta,sc,al)= U:=(.3u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,.4u)--(.3u,-.4u); enddef; def p_spring_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,.2u){down}..(0,-.2u)..{up}(.3u,.2u); enddef; def p_sink_SKBB (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.2u){up}..(0,.2u)..{down}(.3u,-.2u); enddef; def p_narrowend_UIS (expr pos,theta,sc,al)= U:=(.1u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.4u)--(-.1u,.4u); thdraw (.1u,-.4u)--(.1u,.4u); enddef; def p_lowend_UIS (expr pos,theta,sc,al)= U:=(.4u,.1u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,-.1u)--(.4u,-.1u); thdraw (-.4u,.1u)--(.4u,.1u); enddef; def p_lowend_NSS (expr pos,theta,sc,al)= U:=(.4u,0); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,0)--(.4u,0); enddef; def p_flowstonechoke_NSS (expr pos,theta,sc,al)= U:=(.4u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.4u,-.4u){right}..{dir120}(-.2u,-.2u){dir -20}..{up}(0,0); thdraw p; thdraw p shifted (0,.2u); thdraw p reflectedabout (origin,down); thdraw p reflectedabout (origin,down) shifted (0,.2u); enddef; def p_breakdownchoke_NSS (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.1u)--(-.15u,.05u)--(-.48u,.2u)--cycle; thdraw (-.2u,-.2u)--(.15u,-.18u)--(-.08u,.14u)--cycle; thdraw (.1u,0)--(.4u,-.1u)--(.5u,.2u)--(.1u,.2u)--cycle; enddef; def p_bedrock_ASF (expr pos,theta,sc,al)= U:=(.5u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,0)--(.5u,0); thdraw (-.3u,0)--(-.3u,.2u); thdraw (.3u,0)--(.3u,-.2u); enddef; def p_sand_UIS (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenB; thdraw (0,.2u); thdraw (0,.2u) rotated 120; thdraw (0,.2u) rotated 240; enddef; def p_clay_SKBB (expr pos,theta,sc,al) = U:=(.3u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,0){up}..origin{down}..{up}(0.3u,0); enddef; def p_pebbles_UIS (expr pos,theta,sc,al)= U:=(.45u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=superellipse((.2u,0),(0,.1u),(-.2u,0),(0,.-.1u),.75); thdraw p rotated 20 shifted (0,.25u); thdraw p rotated -37 shifted (.25u,-.25u); thdraw p rotated -62 shifted (-.25u,-.25u); enddef; def p_debris_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.4u)--(0,-.22u)--(-.4u,-.1u)--cycle; thdraw (.2u,-.4u)--(.4u,-.1u)--(.1u,-.1u)--cycle; thdraw (-.1u,0)--(.2u,.3u)--(-.2u,.3u)--cycle; enddef; def p_blocks_UIS (expr pos,theta,sc,al)= U:=(.5u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.5u,-.5u)--(.3u,-.4u)--(-.17u,.2u)--cycle; thdraw (.25u,-.25u)--(.5u,-.15u)--(.3u,.5u)--(-.1u,.5u)--cycle; thdraw (-.27u,0)--(-.1u,.3u)--(-.5u,.35u)--cycle; pickup PenD; thdraw (-.5u,-.5u)--(-.1u,-.2u)--(-.17u,.2u); thdraw (-.1u,-.2u)--(.3u,-.4u); thdraw (.25u,-.25u)--(.3u,0)--(.2u,.2u)--(-.1u,.5u); thdraw (.3u,.5u)--(.2u,.2u); thdraw (.5u,-.15u)--(.3u,0); enddef; def p_water_UIS (expr pos,theta,sc,al)= U:=(.425u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenD; p:=fullcircle xscaled (.85u) yscaled (.6u); thfill p withpattern pattern_water_UIS; thdraw p; enddef; def p_ice_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := (0,.05u)--(0,.35u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); p := (-0.15u,.2u)--(0.15u,.2u); thdraw p; thdraw p shifted (-.25u,-.3u); thdraw p shifted (.25u,-.3u); enddef; def p_snow_SKBB (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := origin--(0,.25*u); q := ((0,.35u)--(0,0.25u)--(0.1u,0.25u)) rotatedaround ((0,0.25u),45); thdraw p; thdraw p rotated (60); thdraw p rotated (120); thdraw p rotated (180); thdraw p rotated (240); thdraw p rotated (300); thdraw q; thdraw q rotated (60); thdraw q rotated (120); thdraw q rotated (180); thdraw q rotated (240); thdraw q rotated (300); enddef; def p_archeomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := fullcircle scaled .8u; thdraw (-.5u,-.5u)--origin cutbefore p; thdraw (-.5u,.5u)--origin cutbefore p; thdraw origin--(.4u,0); thdraw p; enddef; def p_paleomaterial_UIS (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.4u,-.2u)..(-.2u,-.08u)---(-.1u,.05u)---(0,.2u)..(-.03u,.4u).. (.2u,.3u)..(.35u,.25u)..(.2u,.2u)---origin---(-.1u,-.17u).. (-.08u,-.25u){dir -120}..(-.3u,-.23u) ..cycle; enddef; def p_guano_UIS (expr pos,theta,sc,al)= U:=(.4u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.4u,.2u){dir 40}..{down}(0,-.35u){up}..{dir-40}(.4u,.2u); enddef; def p_vegetabledebris_ASF (expr pos,theta,sc,al)= U:=(.38u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.3u)--(0,.3u); thdraw (0,-.3u)--(.3u,.3u); thdraw (-.25u,.13u)--(.38u,.13u); thdraw (-.38u,-.13u)--(.25u,-.13u); enddef; def p_root_ASF (expr pos,theta,sc,al)= U:=(.1u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.1u,-.5u)--(-.1u,.5u); p:=(-.1u,-.3u)--(.1u,-.5u); thdraw p; thdraw p shifted (0,.2u); thdraw p shifted (0,.4u); enddef; def p_entrance_UIS (expr pos,theta,sc,al)= U:=(.2u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.2u,-.5u)--(0,.5u)--(.2u,-.5u)--cycle; enddef; def p_waterflow_paleo_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); thdraw halfcircle scaled .4u shifted (0,-.4u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_UIS (expr pos,theta,sc,al)= U:=(.15u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-u)--(0,u); p:=(-.15u,.6u)--(0,u)--(.15u,.6u)--cycle; thfill p; thdraw p; enddef; def p_gradient_BCRA (expr pos,theta,sc,al)= U:=(.25u,0.7u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill (-.25u,-0.7u)--(0,.7u)--(.25u,-.7u)--cycle; enddef; % by Philip Schuchardt def p_gradient_NSS (expr pos,theta,sc,al) = U:=(.7u, .6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u, -.5u) -- (-.7u, -.2u); thdraw (-.2u, -.4u) -- (-.4u, .3u); thdraw (0u, -.3u) -- (0u, .6u); thdraw (.3u, -.5u) -- (.7u, -.2u); thdraw (.2u, -.4u) -- (.4u, .3u); enddef; def p_waterflow_permanent_UIS (expr pos,theta,sc,al)= U:=(.15u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(0,.5u){down}..(.12u,.3u)..(-.15u,.15u)..(.13u,0).. (-.08u,-.2u)..{down}(0,-.5u); p:=p rotated 180; thdraw p; thdrawoptions(); oldahlength:=ahlength; ahlength:=2.5pt*optical_zoom; thdraw arrowhead p; thfill arrowhead p; ahlength:=oldahlength; enddef; def p_waterflow_intermittent_UIS (expr pos,theta,sc,al)= thdrawoptions(dashed evenly scaled (.5 * optical_zoom)); p_waterflow_permanent_UIS (pos,theta,sc,al); thdrawoptions(); enddef; def p_airdraught_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; enddef; def p_airdraught_winter_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); enddef; def p_airdraught_summer_UIS (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,u)--(0,-0.8u); p:=(-.2u,.65u){dir 20}..{dir 90}(0,u); thdraw p; thdraw p reflectedabout (origin,(0,u)); for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); endfor; thclean fullcircle scaled 0.6u shifted (0,0.05u); thdraw (-0.1732u,-0.05u) -- (0.1732u,0.15u); thdraw (0.1732u,-0.05u) -- (-0.1732u,0.15u); thdraw (0,-0.15u) -- (0,0.25u); thclean fullcircle scaled 0.3u shifted (0,0.05u); thdraw fullcircle scaled 0.2u shifted (0,0.05u); enddef; def p_station_fixed_ASF (expr pos)= T:=identity shifted pos; pickup PenD; pair z; z:=(0,.2u); thclean z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw z -- (z rotated 120) -- (z rotated 240) -- cycle; thdraw origin; enddef; def p_station_painted_SKBB (expr pos)= T:=identity shifted pos; pickup PenC; thclean fullcircle scaled 0.25u; thdraw fullcircle scaled 0.25u; enddef; def p_station_natural_ASF (expr pos)= T:=identity shifted pos; pickup PenD; thclean fullcircle scaled .3u; thdraw fullcircle scaled .3u; thdraw origin; enddef; def p_station_temporary_ASF (expr pos)= T:=identity shifted pos; pickup PenD; p:=(-.2u,0)--(.2u,0); thdraw p; thdraw p rotated 90; thclean fullcircle scaled .16u; pickup PenC; thdraw origin; enddef; let p_station_temporary_SKBB = p_station_painted_SKBB; def p_steps_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.3u)--(-.3u,.1u)--(-.1u,.1u)--(-.1u,-.1u)-- (.1u,-.1u)--(.1u,-.3u)--(.3u,-.3u); enddef; def p_fixedladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.15u,-.4u)--(-.15u,.4u); thdraw (.15u,-.4u)--(.15u,.4u); thdraw (-.15u,0)--(.15u,0); thdraw (-.15u,.2u)--(.15u,.2u); thdraw (-.15u,-.2u)--(.15u,-.2u); enddef; def p_ropeladder_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (.1u,-.4u)..(.2u,-.2u)..(.1u,.2u)..(.2u,.4u); thdraw (-.2u,-.4u)..(-.1u,-.2u)..(-.2u,.2u)..(-.1u,.4u); thdraw (-.2u,.2u)--(.1u,.2u); thdraw (-.15u,0)--(.15u,0); thdraw (-.1u,-.2u)--(.2u,-.2u); enddef; def p_bridge_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.3u,.2u)--(-.2u,.1u)--(.2u,.1u)--(.3u,.2u); thdraw (-.3u,-.2u)--(-.2u,-.1u)--(.2u,-.1u)--(.3u,-.2u); enddef; def p_noequipment_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thfill (0,-.1u)--(-.05u,.3u)--(.05u,.3u)--cycle; thdraw (0,-.2u) withpen PenX; enddef; def p_anchor_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; thdraw fullcircle scaled .2u shifted (0.2u,0) withpen PenC; begingroup; interim linecap:=butt; thdraw (-.3u,0)--(.1u,0) withpen PenA; endgroup; thdraw (.1u,-.4u)--(.1u,.4u) withpen PenD; enddef; def p_traverse_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.25u,.05u)..(0,-.08u)..(.25u,.05u); pickup pencircle scaled .18u; thdraw (-.25u,.05u); thdraw (.25u,.05u); enddef; def p_rope_SKBB (expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.2u,.2u)..origin..(.1u,.1u)--(.1u,-.4u); pickup pencircle scaled .18u; thdraw (-.2u,.2u); thdraw (.1u,.1u); enddef; def p_camp_SKBB (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.4u,-.4u)--(0,.5u)--(.4u,-.4u)--cycle; pickup PenD; thdraw (0,-.4u)--(0,.5u); enddef; def p_dig_UIS (expr pos,r,s,al) = U:=(.4u, .5u); T:=identity aligned al shifted pos; thfill ((-.075u,-.5u){down} .. {up}(0.075u, -.5u) -- (0.075u, .15u) -- (0.3u, 0.15u) -- (0.3u, 0.5u) -- (-.3u, .5u) -- (-.3u, .15u) -- (-.075u, .15u) -- cycle) rotated 45; enddef; def p_continuation_UIS(expr pos,theta,sc,al) = U:=(.15u,.3u); T:=identity aligned al shifted pos; pickup PenC; thdraw (-.1u,.2u){up}..{down}(.1u,.2u)..{down}(0,-.05u); pickup PenX; thdraw (0,-.2u); enddef; def p_station_SKBB(expr pos,mark,txt)(text flags) = T:=identity shifted pos; if mark=4: p_station_fixed(pos) elseif mark=3: p_station_natural(pos) elseif mark=2: p_station_painted(pos) elseif mark=1: p_station_temporary(pos) fi; path path_cave; path_cave = (-.3u,-.25u) -- (-.2u,-.25u){dir 135} .. (0, .25u) .. {dir 225}(.2u,-.25u) -- (.3u,-.25u); for i=flags: pickup PenX; if i="entrance": % thfill fullcircle scaled 1 cm withtransparentcolor tr_blue; thdraw path_cave; % p_label.urt(txt,pos+(0.4u,0),0,0); if not numeric txt: p_smartlabel(txt,pos); fi; elseif i="sink": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.02u) -- (0,.05u) -- (.15u,-.02u) withcolor blue; elseif i="spring": thdraw path_cave cutbefore ((-u,0)--(u,0)) cutafter ((-u,0)--(u,0)); pickup PenA; thdraw (0,-.45u) -- (0,.05u) withcolor blue; thdraw (-.15u,-.38u) -- (0,-.45u) -- (.15u,-.38u) withcolor blue; elseif i="doline": thdraw (-.5u,.05u){down}..(0,-0.6u)..{up}(.5u,.05u); elseif i="dig": thdraw (-.5u,.25u) -- (-.35u,.25u)--(-.23u,-.25u)--(.23u,-.25u)--(.35u,.25u)--(.5u,.25u); elseif substring(0,11) of i = "air-draught": pickup PenB; thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (.11u,0); thdraw ((0,.11u){dir-120} ..{dir-70}(0,0) .. {dir-120}(0,-.11u)) shifted (-.11u,0); elseif i="continuation": if picture(txt): picture ATTR__text; ATTR__text := txt; fi; begingroup; save T; transform T; p_continuation(pos+(0,.25u),0,1,(0,1)); endgroup; if picture(txt): save ATTR__text; fi; elseif i="arch": thdraw (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; thfill (-.5u,-.25u)--(-.5u,.25u)--(.5u,.25u)--(.5u,-.25u)..(0,.2u)..cycle; elseif i="overhang": thdraw (.2u,-.25u)--(-.2u,-.25u){up}..{right}(.2u,.25u); fi; endfor; % thdraw (0,0) withpen PenX withcolor red; enddef; def p_debug (expr col, pen, pos)= T:=identity shifted pos; thdraw origin withpen pencircle scaled if pen=0: 2pt else: 4pt fi withcolor if col=-2: (1,.85,0) elseif col=-1: black elseif col=0: red else: blue fi; enddef; def p_u(expr pos,theta,sc,al) = T:=identity shifted pos; thdraw origin withpen pencircle scaled 4pt withcolor red; enddef; def p_handrail_SKBB(expr pos,theta,sc,al) = tmph := 1 / Scale * 72 / 2.54; % 1 m height U:=(.1u, tmph); pickup PenC; T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,0) -- (0,tmph); thdraw (0,tmph) withpen pencircle scaled .25u; enddef; def p_viaferrata_SKBB(expr pos,r,s,al) = U:=(.4u, .4u); T:=identity aligned al shifted pos; thdraw unitsquare scaled .8u shifted (-0.4u,-.4u) withpen PenD; pickup PenC; thdraw (-.15u,.15u)--(-.15u,.1u)--(.15u,.1u)--(.15u,.15u); thdraw (-.15u,-.05u)--(-.15u,-.1u)--(.15u,-.1u)--(.15u,-.05u); enddef; def p_stalagmites_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); endfor; enddef; def p_stalactites_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); endfor; enddef; def p_gradient_SKBB (expr pos,theta,sc,al)= U:=(.3u,.6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.6u)--(-.3u,.6u); thdraw (0,-.6u)--(0,-0.2u); thdraw (.3u,-.6u)--(.3u,.6u); enddef; def p_pillars_UIS(expr pos,theta,sc,al) = U:=(.3u, .2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; for i=-1 upto 1: T:=identity aligned al rotated theta scaled (sc * 0.7) shifted (pos + (i * .3u, 0)); thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); endfor; enddef; therion-5.4.1/mpost/thSpecial.mp000066400000000000000000000053771307545355600166360ustar00rootroot00000000000000%% therion source code %% %% This file defines macros for special symbols %% %% $Date: $ %% $RCSfile: $ %% $Revision: $ %% %% Copyright (C) 2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- def s_northarrow_SKBB_old (expr rot) = T:=identity; picture tmp_pic; tmp_pic = image ( begingroup interim defaultscale:=3; label(if (lang="sk") or (lang="cz"): "S" else: "N" fi, origin); endgroup; drawarrow (0,-1cm)--(0,1cm); ); draw tmp_pic rotatedaround(origin, -rot); enddef; def s_northarrow_SKBB (expr rot) = T:=identity scaled 0.7 rotated -rot; thdraw (-.5cm,-1cm)--(0,1.5cm)--(.5cm,-1cm)--(0,-.5cm)--cycle; thfill (-.5cm,-1cm)--(0,1.5cm)--(0,-.5cm)--cycle; enddef; def s_scalebar_SKBB (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); begingroup interim labeloffset:=2bp; label.top(thTEX(decimal (l) & "\thinspace" & txt),origin); endgroup enddef; def s_scalebar_SM (expr l, units, txt) = begingroup interim warningcheck:=0; tmpl:=l / Scale * cm * units / 2; endgroup; pickup PenC; draw (-tmpl,0)--(tmpl,0); draw (-tmpl,0)--(-tmpl,2bp); draw (tmpl,0)--(tmpl,2bp); draw (0,0)--(0,2bp); begingroup interim labeloffset:=3.5bp; label.top(thTEX(decimal (0)),(-tmpl,0)); label.top(thTEX(decimal (l/2)),origin); label.top(thTEX(decimal (l) & "\thinspace" & txt),(tmpl,0)); endgroup enddef; def s_hgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -5mm fi, 0 ) -- ( if xpos > 0: 0 else: 5mm fi, 0 ); draw ( 0, if ypos < 0: 0 else: -5mm fi ) -- ( 0, if ypos > 0: 0 else: 5mm fi ); enddef; def s_vgrid_SM (expr xpos, ypos, xsize, ysize) = pickup PenD; draw ( if xpos < 0: 0 else: -xsize/2 fi, 0 ) -- ( if xpos > 0: 0 else: xsize/2 fi, 0 ) dashed evenly; enddef; therion-5.4.1/mpost/thText.mp000066400000000000000000000136701307545355600161750ustar00rootroot00000000000000%% therion source code %% %% This file defines macros for labels %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: thText.mp,v $ %% $Revision: 1.6 $ %% %% Copyright (C) 2000-2004 Martin Budaj %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- labeloffset:=0bp; def l_label(expr txt,path) = picture pict,pic; pair pos; numeric dx[],dy[],ptime; string ss,ch; pic := thelabel(txt,(0,0)); strl := xpart(lrcorner pic - llcorner pic); pathl := arclength (path); dx0 := xpart(llcorner pic); % dy0 := ypart(llcorner pic); if strl>pathl: txtzoom := pathl / strl; thwarning("text scaled down to fit the path"); else: txtzoom := 1; fi; zoom := pathl / strl; for p within pic: if textual p: ss := textpart p; dx1 := xpart p; dy1 := ypart p; dx2 := dx1; if xxpart p / yypart p <> 1: message("Error: distorted text!") fi; txtscale := txtzoom * xxpart p; l := length(ss); ptime := 0; for i=0 upto (l - 1): ch := substring(i,i+1) of ss; pict := ch infont fontpart p scaled txtscale; charwidth := xpart (lrcorner pict - llcorner pict) / txtzoom; dy2 := ypart lrcorner pict / txtzoom; ptime := (dx2 - dx0 + 0.5*charwidth) * zoom; t := arctime ptime of (path); pos := point t of path + (dy1+dy2)*txtzoom*unitvector((direction t of path) rotated 90); begingroup % interim labeloffset:=0bp; lab:=thelabel.top(pict,pos); process_label(pos,angle direction t of path); endgroup; dx2 := dx2 + charwidth; endfor; else: message("Strange component of line label!"); fi; endfor; % draw path; enddef; vardef p_label@#(expr txt,pos,rot,mode) = if (mode=1) or (mode=7): interim labeloffset:=(u/8) fi; lab:=thelabel@#(txt, pos); if mode>1: pickup PenD fi; if mode=1: pickup pencircle scaled (u/6); drawdot(pos); process_label(pos,0); elseif mode=2: process_uplabel; elseif mode=3: process_downlabel; elseif mode=4: process_updownlabel; elseif mode=5: process_circledlabel; elseif mode=6: process_boxedlabel; elseif mode=7: process_label(pos,rot); % station name elseif mode=8: process_filledlabel(pos, rot); else: process_label(pos,rot); fi; enddef; % at beginfig: save smartll[], smartur[]; pair smartll[], smartur[]; smart_count=0; numeric smart_count, smart_D; boolean smart_quit, smart_inner_quit; def p_smartlabel (expr txt, pos) = begingroup; interim bboxmargin:=0.2pt; lab:=thelabel.rt(txt,pos+(0.4u,0)); q:=bbox lab; smart_D := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_D)), ((point 2 of q) shifted (0,smart_D)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_D := smart_D - 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; smart_U := 0; forever: smart_quit := true; smart_inner_quit := false; for i=1 upto smart_count: if smart_overlap(((point 0 of q) shifted (0,smart_U)), ((point 2 of q) shifted (0,smart_U)), smartll[i], smartur[i]) = 1: smart_quit := false; smart_U := smart_U + 3pt; smart_inner_quit := true; fi; exitif smart_inner_quit; endfor; exitif smart_quit; endfor; if (smart_U < -smart_D): smart_D := smart_U; fi; draw lab shifted (0,smart_D); if (abs(smart_D)>3pt): pickup PenB; draw pos{left}..{right}(pos shifted (.4u, smart_D)) dashed withdots scaled 0.2; pickup PenA; drawdot pos; fi; smart_count := smart_count + 1; smartll[smart_count] := point 0 of (q shifted (0,smart_D)); smartur[smart_count] := point 2 of (q shifted (0,smart_D)); endgroup; enddef; def smart_overlap (expr llA, urA, llB, urB) = if ((xpart llA < xpart urB) and (xpart urA > xpart llB)) and ((ypart llA < ypart urB) and (ypart urA > ypart llB)): 1 else: 0 fi enddef; def p_wallaltitude (expr pprev,pos,pnext,txt) = rot:=angle(unitvector(pnext-pos)+unitvector(pos-pprev)) - 90; pickup PenD; pair zz; % zz:=(pos + 3*unitvector(dir rot)); zz:=(pos + (u/4)*unitvector(dir rot)); draw (pos)--zz; begingroup % interim labeloffset:=2pt; interim labeloffset:=(u/12); if horiz_labels: rot:=rot mod 360; if rot<=22.5: lab:=thelabel.rt(txt, zz); elseif rot<=67.5: lab:=thelabel.urt(txt, zz); elseif rot<=112.5: lab:=thelabel.top(txt, zz); elseif rot<=157.5: lab:=thelabel.ulft(txt, zz); elseif rot<=202.5: lab:=thelabel.lft(txt, zz); elseif rot<=247.5: lab:=thelabel.llft(txt, zz); elseif rot<=292.5: lab:=thelabel.bot(txt, zz); elseif rot<=337.5: lab:=thelabel.lrt(txt, zz); else: lab:=thelabel.rt(txt, zz); fi; else: if (abs rot>90) and (abs rot <=270): rot:=rot-180; lab:=thelabel.lft(txt, pos); else: lab:=thelabel.rt(txt, pos); fi; fi; process_label(pos, if horiz_labels: 0 else: rot fi); endgroup; enddef; therion-5.4.1/mpost/thTrans.mp000066400000000000000000000122321307545355600163310ustar00rootroot00000000000000% default translations let p_station_fixed = p_station_fixed_ASF; let p_station_painted = p_station_painted_SKBB; let p_station_natural = p_station_natural_ASF; let p_station_temporary = p_station_temporary_ASF; let p_waterflow_paleo = p_waterflow_paleo_UIS; let p_waterflow_permanent = p_waterflow_permanent_UIS; let p_waterflow_intermittent = p_waterflow_intermittent_UIS; let p_stalactite = p_stalactite_UIS; let p_stalagmite = p_stalagmite_UIS; let p_pillar = p_pillar_UIS; let p_icestalactite = p_icestalactite_AUT; let p_icestalagmite = p_icestalagmite_AUT; let p_icepillar = p_icepillar_AUT; let p_curtain = p_curtain_UIS; let p_helictite = p_helictite_UIS; let p_sodastraw = p_sodastraw_UIS; let p_crystal = p_crystal_UIS; let p_flowstone = p_flowstone_UIS; let p_moonmilk = p_moonmilk_UIS; let p_wallcalcite = p_wallcalcite_UIS; let p_popcorn = p_popcorn_UIS; let p_disk = p_disk_UIS; let p_gypsum = p_gypsum_NSS; let p_aragonite = p_aragonite_NSS; let p_cavepearl = p_cavepearl_SKBB; let p_gypsumflower = p_gypsumflower_NSS; let p_rimstonepool = p_rimstonepool_ASF; let p_rimstonedam = p_rimstonedam_ASF; let p_anastomosis = p_anastomosis_UIS; let p_karren = p_karren_UIS; let p_scallop = p_scallop_UIS; let p_flute = p_flute_UIS; let p_raft = p_raft_NSS; let p_raftcone = p_raftcone_NSS; let p_spring = p_spring_SKBB; let p_sink = p_sink_SKBB; let p_narrowend = p_narrowend_UIS; let p_lowend = p_lowend_UIS; let p_flowstonechoke = p_flowstonechoke_NSS; let p_breakdownchoke = p_breakdownchoke_NSS; let p_claychoke = p_claychoke_AUT; let p_claytree = p_claytree_AUT; let p_bedrock = p_bedrock_ASF; let p_clay = p_clay_SKBB; let p_sand = p_sand_UIS; let p_pebbles = p_pebbles_UIS; let p_debris = p_debris_UIS; let p_blocks = p_blocks_UIS; let p_water = p_water_UIS; let p_ice = p_ice_UIS; let p_snow = p_snow_SKBB; let p_archeomaterial = p_archeomaterial_UIS; let p_paleomaterial = p_paleomaterial_UIS; let p_guano = p_guano_UIS; let p_vegetabledebris = p_vegetabledebris_ASF; let p_root = p_root_ASF; let p_entrance = p_entrance_UIS; let p_gradient = p_gradient_UIS; let p_rope = p_rope_SKBB; let p_fixedladder = p_fixedladder_SKBB; let p_ropeladder = p_ropeladder_SKBB; let p_steps = p_steps_SKBB; let p_bridge = p_bridge_SKBB; let p_traverse = p_traverse_SKBB; let p_anchor = p_anchor_SKBB; let p_camp = p_camp_SKBB; let p_dig = p_dig_UIS; let p_noequipment = p_noequipment_SKBB; let p_sectionarrow = p_sectionarrow_SKBB; let p_continuation = p_continuation_UIS; let p_airdraught = p_airdraught_UIS; let p_airdraught_winter = p_airdraught_winter_UIS; let p_airdraught_summer = p_airdraught_summer_UIS; let p_station = p_station_SKBB; let p_handrail = p_handrail_SKBB; let p_viaferrata = p_viaferrata_SKBB; let p_stalactites = p_stalactites_UIS; let p_stalagmites = p_stalagmites_UIS; let p_pillars = p_pillars_UIS; let l_wall_bedrock = l_wall_bedrock_UIS; let l_wall_sand = l_wall_sand_SKBB; let l_wall_clay = l_wall_clay_SKBB; let l_wall_pebbles = l_wall_pebbles_SKBB; let l_wall_debris = l_wall_debris_SKBB; let l_wall_blocks = l_wall_blocks_SKBB; let l_wall_ice = l_wall_ice_SKBB; let l_wall_underlying = l_wall_underlying_UIS; let l_wall_unsurveyed = l_wall_unsurveyed_SKBB; let l_wall_presumed = l_wall_presumed_UIS; %let l_wall_invisible = l_wall_invisible; let l_wall_pit = l_wall_pit_AUT; let l_wall_overlying = l_wall_overlying_AUT; let l_wall_flowstone = l_wall_flowstone_AUT; let l_wall_moonmilk = l_wall_moonmilk_AUT; let l_waterflow_permanent = l_waterflow_permanent_UIS; let l_waterflow_intermittent = l_waterflow_intermittent_SKBB; let l_waterflow_conjectural = l_waterflow_conjectural_SKBB; let l_border_visible = l_border_visible_SKBB; let l_border_temporary = l_border_temporary_SKBB; let l_border_presumed = l_border_presumed_SKBB; %let l_border_invisible = l_border_invisible; let l_floorstep = l_floorstep_UIS; let l_pit = l_pit_UIS; let l_ceilingstep = l_ceilingstep_SKBB; let l_chimney = l_chimney_UIS; let l_overhang = l_overhang_SKBB; let l_slope = l_slope_SKBB; let l_ceilingmeander = l_ceilingmeander_SKBB; let l_floormeander = l_floormeander_SKBB; let l_contour = l_contour_SKBB; let l_rockborder = l_rockborder_UIS; let l_rockedge = l_rockedge_UIS; let l_flowstone = l_flowstone_UIS; let l_moonmilk = l_moonmilk_UIS; let l_section = l_section_SKBB; let l_survey_cave = l_survey_cave_SKBB; let l_survey_surface = l_survey_surface_SKBB; let l_arrow = l_arrow_SKBB; let l_gradient = l_gradient_UIS; let l_mapconnection = l_mapconnection_SKBB; let l_handrail = l_handrail_SKBB; let l_steps = l_steps_SKBB; let l_fixedladder = l_fixedladder_SKBB; let l_ropeladder = l_ropeladder_SKBB; let l_rope = l_rope_SKBB; let l_viaferrata = l_viaferrata_SKBB; let a_water = a_water_UIS; let a_sump = a_sump_UIS; let a_sand = a_sand_UIS; let a_debris = a_debris_SKBB; let a_blocks = a_blocks_SKBB; let a_snow = a_snow_SKBB; let a_ice = a_ice_SKBB; let a_pebbles = a_pebbles_SKBB; let a_clay = a_clay_SKBB; let a_bedrock = a_bedrock_SKBB; let a_flowstone = a_flowstone_ASF; let a_moonmilk = a_moonmilk_SKBB; let a_dimensions = a_dimensions_SKBB; let s_northarrow = s_northarrow_SKBB; let s_scalebar = s_scalebar_SKBB; let s_hgrid = s_hgrid_SM; let s_vgrid = s_vgrid_SM; therion-5.4.1/mpost/therion.mp000066400000000000000000000674731307545355600163770ustar00rootroot00000000000000%% therion source code %% %% therion.mp %% %% This file defines low-level MetaPost macros and variables required %% for generation of map symbols %% %% $Date: 2003/07/01 09:06:44 $ %% $RCSfile: therion.mp,v $ %% $Revision: 1.3 $ %% %% Copyright (C) 2000-2003 Martin Budaj %% %% Some macros are adapted from MPATTERN package of P. Bolek %% %% Some macros are used from MetaFun package of H. Hagen %% %% -------------------------------------------------------------------- %% This program is free software; you can redistribute it and/or modify %% it under the terms of the GNU General Public License as published by %% the Free Software Foundation; either version 2 of the License, or %% any later version. %% %% This program is distributed in the hope that it will be useful, %% but WITHOUT ANY WARRANTY; without even the implied warranty of %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the %% GNU General Public License for more details. %% %% You should have received a copy of the GNU General Public License %% along with this program; if not, write to the Free Software %% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA %% -------------------------------------------------------------------- % This file defines low level macros used for map signatures in Therion. % Before loading this file set `Scale' variable to numeric value % representing denominator of the scale ratio. Internal variable % `prologues' is set to 1 by this file. This module loads also % symbol libraries. tracingstats:=1; prologues:=0; if known Background: background:=Background fi; %TrueScale:=Scale; % @VARIABLE % symbol_scale -- % % internal numeric; in map symbol definitions used for scaling % in T transformation; recommended % values are 1 or 2. %newinternal symbol_scale; %symbol_scale := 1; % @VARIABLE % fill_only -- % % boolean, used in thdraw and % thpattfill commands. When set to false, it has % no effect, when it is true, it supresses all drawing % commands with exception of thpermanentfill, so that only filled % areas are drawn boolean fill_only, horiz_labels, transparency; fill_only := false; horiz_labels:=true; transparency:=false; string ATTR__id, ATTR__survey, ATTR__scrap, NorthDir; boolean ATTR__scrap_centerline; picture ATTR__text; numeric ATTR__height; boolean ATTR__elevation; ATTR__scrap_centerline := false; ATTR__height:=0; ATTR__elevation:=false; boolean ATTR__shotflag_splay; ATTR__shotflag_splay:=false; boolean ATTR__shotflag_duplicate; ATTR__shotflag_duplicate:=false; boolean ATTR__shotflag_approx; ATTR__shotflag_approx:=false; boolean ATTR__stationflag_splay; ATTR__stationflag_splay:=false; color label_fill_color, label_fill_color_tmp; label_fill_color := (1.0, 1.0, 1.0); def push_label_fill_color(expr r,g,b) = label_fill_color_tmp := label_fill_color; label_fill_color := (r,g,b); enddef; def pop_label_fill_color = label_fill_color := label_fill_color_tmp; enddef; def process_filledlabel(expr cent, rot) = begingroup; interim bboxmargin:=2.0bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); fill q withcolor label_fill_color; draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; numeric area_border_errors; area_border_errors = 0; % @VARIABLE % last_write -- % % numeric; charcode of last figure which contained % write_bbox macro; this value is used by % close_file macro. Initially set to -1. numeric last_write; last_write = -1; % @VARIABLE % strut_string -- % % string containing combination of the "highest" and "lowest" character % in used font; it's used by free_text macro. %string strut_string; %strut_string = "("; % @VARIABLE % file_name -- % % string, name of file, where write_bbox macro writes % text clipping path % @VARIABLE % s ch -- % % string, temporary string/char variables string s, ch, file_name, bg_name, clip_name, lang, diff_pos, diff_neg, current_scrap, current_src; % @VARIABLE % u v w -- % % internal numeric variables used as basic length units for drawing; % they are set by initialize macro. %

  • u -- normal unit decreasing with increasing scale %
  • v -- like u, but can increase drammaticaly % when some limit is encountered (to get effects like logarithmic % scale) %
  • w -- nearly constant at all scales %
% @VARIABLE % legend_scale -- % % numeric, length of the longer side of signatures' legend box newinternal legend_scale, u,v,w; % @VARIABLE % lab Lab -- % % picture, in which are saved typeset labels picture lab, Lab; % @VARIABLE % T -- % % transformation, defines transformation function for transforming % every argument of thfill % macros transform T; % @VARIABLE % p,q -- % % path, for saving temporary paths path p,q; % @MACRO % initialize -- % % initializes basic length units (u,v,w) and pens used % in map symbols according to scale. Five circular pens are defined: %
  • PenA -- thick; for outlines %
  • PenB, PenC -- thinner; for pits, symbols etc. %
  • PenD -- thinnest; for fine details %
  • PenX -- extra thick; not recommended for use %
def fonts_setup (expr t,s,m,l,h) = write "\def\updown#1#2{\vbox{" & "\offinterlineskip" & "\setbox100=\hbox{#1}" & "\setbox101=\hbox{#2}" & "\ifnum\wd100>\wd101\hsize=\wd100\else\hsize=\wd101\fi" & "\centerline{\box100}\vskip4pt" & "\centerline{\box101}}}" & "\def\thlabel{\thnormalsize}" & "\def\thremark{\thsmallsize\si}" & "\def\thcomment{\thsmallsize}" & "\def\thentrance{\thsmallsize}" & "\def\thaltitude{\thsmallsize}" & "\def\thstationname{\thsmallsize}" & "\def\thdate{\thsmallsize}" & "\def\thheight{\thsmallsize}" & "\def\thheightpos{+\ignorespaces}" & "\def\thheightneg{-\ignorespaces}" & "\def\thframed{\thsmallsize}" & "\def\thwallaltitude{\thtinysize}" to "mptexpre.tex"; write "\def\thtinysize{\size[" & decimal max(optical_zoom*t,0) & "]}" & "\def\thsmallsize{\size[" & decimal max(optical_zoom*s,0) & "]}" & "\def\thnormalsize{\size[" & decimal max(optical_zoom*m,0) & "]}" & "\def\thlargesize{\size[" & decimal max(optical_zoom*l,0) & "]}" & "\def\thhugesize{\size[" & decimal max(optical_zoom*h,0) & "]}" to "mptexpre.tex"; write EOF to "mptexpre.tex"; enddef; def initialize (expr sc) = if unknown BaseScale: BaseScale = sc; fi; optical_zoom := BaseScale/sc; if BaseScale <= 1: % 1:100 u:=14bp; v:=14bp; w:=12bp; fonts_setup(8,10,12,16,24); elseif BaseScale <= 2: % 1:200 u:=12bp; v:=12bp; w:=12bp; fonts_setup(7,8,10,14,20); elseif BaseScale <= 5: % 1:500 u:=10bp; v:=10bp; w:=12bp; fonts_setup(6,7,8,10,14); else: u:=7bp; v:=14bp; w:=10bp; fonts_setup(5,6,7,8,10); fi; u := optical_zoom * u; v := optical_zoom * v; w := optical_zoom * w; defaultscale := 0.8 * optical_zoom; def PenA = pencircle scaled (u/10) enddef; def PenB = pencircle scaled (0.7*u/10) enddef; def PenC = pencircle scaled (0.5*u/10) enddef; def PenD = pencircle scaled (0.35*u/10) enddef; def PenX = pencircle scaled (1.2*u/10) enddef; legend_scale := 3.14*u; enddef; % macro is expanded, we have to know all dimensions and pens before reading % mpattern macros initialize(Scale); vardef thTEX primary s = write "verbatimtex \input th_enc.tex etex" to "mptextmp.mp"; write "btex \mainfont "&s&" etex" to "mptextmp.mp"; write EOF to "mptextmp.mp"; scantokens "input mptextmp" enddef; % @MACRO % inscale -- % % zooms objects to scale specified in legend_scale variable (used in legend % typesetting) def inscale = xscaled legend_scale yscaled (0.618*legend_scale) enddef; % @MACRO % draw_legend_box -- % % draws a legend bounding box and resets drawoptions() options def draw_legend_box = clip currentpicture to unitsquare inscale; drawoptions(); pickup PenB; draw unitsquare inscale; enddef; def clean_legend_box = unfill unitsquare inscale; enddef; def legend_point (expr name) = % if substring (2,9) of name = "station": % scantokens(name)((0.5,0.5) inscale); % else: scantokens(name)((0.5,0.5) inscale,0,1,(0,0)); % fi; draw_legend_box; enddef; def legend_line (expr name) = scantokens(name)((((-0.3,.5)..(.3,.7)..(.5,.3)..{dir 80}(1.3,.9)) inscale) randomized 3mm); draw_legend_box; enddef; % legend_label % legend_area % legend_random % @MACRO % roundone -- % % rounds numeric value to one decimal point vardef roundone(expr n) = % round(10*n)/10 n enddef; % @MACRO % process_label -- % % draws a label saved in lab picture variable and calls % write_bbox macro. def process_label (expr cent, rot) = begingroup; interim bboxmargin:=0.8bp; q:=((bbox lab) smoothed 2) rotatedaround (cent, rot); draw lab rotatedaround (cent, rot); write_circ_bbox(q); % without corners smoothing it was enough to use % write_bbox(q); endgroup; enddef; % @MACRO % process_uplabel -- % % draws a label into semicircular box and writes clipping path to a file def process_uplabel = begingroup; interim bboxmargin := 0.8 bp; q:=bbox lab; endgroup; alef:=.8-.02*(xpart lrcorner q - xpart llcorner q); % show alef; q:=alef[llcorner q,ulcorner q]{up} .. {down}alef[lrcorner q, urcorner q] -- lrcorner q -- llcorner q -- cycle; draw lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_downlabel -- % % draws a label into down oriented semicircular box and writes % clipping path to a file def process_downlabel = begingroup; interim bboxmargin := 0.8 bp; q:=bbox lab; endgroup; alef:=1-(.8-.02*(xpart lrcorner q - xpart llcorner q)); q:=alef[llcorner q,ulcorner q]{down} .. {up}alef[lrcorner q, urcorner q] -- urcorner q -- ulcorner q -- cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % process_updownlabel -- % % draws a label splitted into down and up oriented semicircular boxes and % writes clipping path to a file def process_updownlabel = begingroup; interim bboxmargin := 0.8 bp; p:=bbox lab; endgroup; leftside:=xpart llcorner p; rightside:=xpart lrcorner p; draw (xpart llcorner p,.5[ypart llcorner p,ypart ulcorner p]) -- (xpart lrcorner p,.5[ypart llcorner p,ypart ulcorner p]); alef:=1.05-.02*(xpart lrcorner p - xpart llcorner p); % alef:=.8-.02*(rightside-leftside); p:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner p), (rightside, ypart lrcorner p)]{down} .. {up}alef[(leftside, ypart ulcorner p),(leftside, ypart llcorner p)] -- cycle; % p:=alef[llcorner p,ulcorner p]{up} .. {down}alef[lrcorner p, urcorner p] -- % aleff[llcorner p,ulcorner p]{down} .. % {up}aleff[lrcorner p, urcorner p] -- cycle; draw lab; draw p; p:=reverse p; write_circ_bbox(p); enddef; def process_updownlabel_OLD = p:=bbox lab; q:=bbox Lab; leftside:=min(xpart llcorner p, xpart ulcorner q); rightside:=max(xpart lrcorner p, xpart urcorner q); draw .5[(leftside, ypart llcorner p),(leftside, ypart ulcorner q)] -- .5[(rightside,ypart lrcorner p),(rightside,ypart urcorner q)]; alef:=.8-.02*(rightside-leftside); q:=alef[(leftside, ypart llcorner p),(leftside, ypart ulcorner p)]{up} .. {down}alef[(rightside, ypart lrcorner p), (rightside, ypart urcorner p)] -- alef[(rightside, ypart urcorner q), (rightside, ypart lrcorner q)]{down} .. {up}alef[(leftside, ypart ulcorner q),(leftside, ypart llcorner q)] -- cycle; draw lab; draw Lab; draw q; q:=reverse q; write_circ_bbox(q); enddef; % @MACRO % process_boxedlabel -- % % draws a label into circular box and writes % clipping path to a file def process_boxedlabel = q:=bbox lab; draw lab; draw q; write_bbox(q); enddef; % @MACRO % process_circledlabel -- % % draws a label into circular box and writes % clipping path to a file def process_circledlabel = begingroup; interim bboxmargin := 0.4 bp; q:=bbox lab; endgroup; q:=point 0 of q .. point 1 of q .. point 2 of q .. point 3 of q .. cycle; draw lab; draw q; write_circ_bbox(q); enddef; % @MACRO % write_bbox -- % % Arguments: % path variable -- rectangular bounding box of a label; % assumptions: path is cyclic, counterclockwise oriented, with four points, % composed from linear segments; % see general write_circ_bbox macro % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_bbox (expr q) = file_name := jobname & "." & decimal(charcode) & "bbox"; for i:=4 downto 0: s := decimal(roundone(xpart point i of q)) & " " & decimal(roundone(ypart point i of q)) & if i=4: " m " else: " l" fi; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % write_circ_bbox -- % % Arguments: % path variable, only assumption is that path is cyclic % and counterclockwise oriented. % Results: % one file per figure which uses labels with a clipping path in pseudo-pdf % format def write_circ_bbox expr q = file_name := jobname & "." & decimal(charcode) & "bbox"; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s to file_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s to file_name; endfor; last_write := charcode; enddef; % @MACRO % close_file -- % % closes file with a clipping path; it's invoked by endchar macro def close_file = if last_write=charcode: write EOF to jobname & "." & decimal(charcode) & "bbox"; fi; enddef; % endchar should run close_file macro extra_endfig := "close_file;"; % @MACRO % thdraw -- % % like plain MetaPost's draw, but draws a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % (If fill_only=false) def thdrawoptions(text t) = def _thop_ = t enddef enddef; thdrawoptions(); def thdraw expr p = if not fill_only: addto currentpicture if picture p: also (p transformed T) else: doublepath (p transformed T) withpen currentpen fi _thop_ _op_ else: addto currentpicture also nullpicture fi enddef; % @MACRO % thfill -- % % fills a path transformed % (rotated, scaled, shifted) to scrap's coordinates according T variable. % Filled areas are clipped (like most % other lines and points) with a clipping path around text labels. def thfill expr c = addto currentpicture contour (c transformed T) _thop_ _op_ enddef; def thfilldraw expr c = if not fill_only: addto currentpicture contour (c transformed T) withpen currentpen _thop_ _op_ else: addto currentpicture contour (c transformed T) _thop_ _op_ fi enddef; def thunfill expr c = thfill c withcolor background enddef; def thundraw expr p = thdraw p withcolor background enddef; def thunfilldraw expr c = thfilldraw c withcolor background enddef; def thclean expr c = if transparency: thfill c withtransparentcolor tr_bg else: thunfill c fi; enddef; def thPatternFill (expr Path, Pattern) = T:=identity; thclean Path; thfill Path withpattern Pattern; enddef; %def thLegendPatternFill (expr Path, Pattern) = % T:=identity; % thfill Path withpattern Pattern; %enddef; % for drawarrow: def _finarr text t = thdraw _apth t; thfilldraw arrowhead _apth t enddef; % @MACRO % thpermanentfill -- % % Fills specified area with a solid color; this area is not affected by % text clipping path %def thpermanentfill expr c = % addto currentpicture contour (c transformed T) _thop_ _op_ %enddef; let thpermanentfill = thfill; primarydef p aligned al= p shifted (xpart al * xpart U, ypart al * ypart U) enddef; % macros for drawing scraps in upper and lower levels; filled lower scraps % require special treatment (MetaPost doesn't support non-continuous paths). % We can't use one file for both, while PDF XObject has to be explicitely % filled or stroked. Second macro writes also pseudo-pdf code of a clipping % path for given scrap boolean drawnext; drawnext:=true; def draw_upscrap (expr isout)(text t) = path q; for i=t: if (numeric i): if (i=1): drawnext:=true; else: drawnext:=false; fi; else: if drawnext: draw i withpen PenD; fi; if not known q: q:=i; else: q:=q -- i; fi; fi; endfor; if not cycle q: q:=q -- cycle; fi; if turningnumber q = 0: thwarning("scrap outline intersects itself"); fi; if isout=1: if turningnumber q > 0: q := reverse q; fi; else: if turningnumber q < 0: q := reverse q; fi; fi; addto bgfill contour q; enddef; % following macro writes noncontinuous PostScript path directly to EPS file % (filled background and clipping path) picture bgfill; bgfill:=nullpicture; def draw_downscrap = bg_name := jobname & "." & decimal(charcode) & "bg"; clip_name := jobname & "." & decimal(charcode) & "clip"; write "%!PS" to bg_name; write "%%BoundingBox: " & decimal floor xpart llcorner bgfill & " " & decimal floor ypart llcorner bgfill & " " & decimal ceiling xpart urcorner bgfill & " " & decimal ceiling ypart urcorner bgfill to bg_name; write "%%Page: 1 1" to bg_name; write "newpath" to bg_name; for qq within bgfill: q := pathpart qq; tmp:=length q; s := decimal(roundone(xpart point tmp of q)) & " " & decimal(roundone(ypart point tmp of q)) & " m"; write s & "oveto" to bg_name; write s to clip_name; for i:=tmp downto 1: s := decimal(roundone(xpart precontrol i of q)) & " " & decimal(roundone(ypart precontrol i of q)) & " " & decimal(roundone(xpart postcontrol i-1 of q)) & " " & decimal(roundone(ypart postcontrol i-1 of q)) & " " & decimal(roundone(xpart point i-1 of q)) & " " & decimal(roundone(ypart point i-1 of q)) & " c"; write s & "urveto" to bg_name; write s to clip_name; endfor; endfor; write "closepath fill" to bg_name; write "showpage" to bg_name; write "%%EOF" to bg_name; write EOF to bg_name; write EOF to clip_name; bgfill:=nullpicture; enddef; vardef buildcycle(text ll) = save ta_, tb_, k_, i_, pp_; path pp_[]; k_=0; for q=ll: pp_[incr k_]=q; endfor i_=k_; for i=1 upto k_: (ta_[i], length pp_[i_]-tb_[i_]) = pp_[i] intersectiontimes reverse pp_[i_]; if ta_[i]<0: message("[Error: area borders "& area_border[i] &" and "& area_border[i_] &" don't intersect in scrap " & current_scrap & " (file " & current_src & ")]"); area_border_errors := area_border_errors + 1; fi i_ := i; endfor for i=1 upto k_: subpath (ta_[i],tb_[i]) of pp_[i] .. endfor cycle enddef; vardef unitvector primary z = if (z<>(0,0)): z/abs z else: hide(thwarning("strange path")) (0,epsilon) fi enddef; def thwarning (expr m) = message("[Warning: " & m & " in scrap " & current_scrap & "]"); enddef; def check_area_borders = if area_border_errors > 0: fi; enddef; %%%%%%%%%%%% Map symbols management %%%%%%%%%%%%%%%%%%% def mapsymbol (expr name, set, warning) = string s, stype, lname, ID; stype = substring (0,1) of name; lname = name & "_" & set; ID := "ID_" & lname; if (known scantokens ID): if stype = "a": s = "def " & name & " = scantokens(" & ditto & lname & ditto & ") enddef;"; else: s = "let " & name & " = " & lname & ";"; fi; scantokens s; elseif warning: message("[Warning: undefined symbol `" & lname & "']"); fi; enddef; %def hidesymbol (expr name) = % string s, stype; % stype = substring (0,1) of name; % if stype = "a": % s = "def " & name & " = scantokens(" & ditto & "a_empty" & ditto & ") enddef;"; % else: % s = "vardef " & name & "@# (text t) = enddef;"; % fi; % scantokens s; % write name to "missed.dat"; %enddef; def initsymbol (expr name) = s := "ID_" & name & " = 1"; scantokens s; enddef; %%% % comment out groups in order to use 'save ATTR_*' appropriately def beginfig(expr c) = % begingroup charcode:=c; clearxy; clearit; clearpen; pickup defaultpen; drawoptions(); scantokens extra_beginfig; save smartll, smartur; pair smartll[], smartur[]; smart_count := 0; enddef; def endfig = scantokens extra_endfig; shipit; % endgroup enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % P. Bolek's MPATTERN package adapted and simplified for Therion % (with the same user interface except of patterncolor) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% string Pname_, PXYsteps_; string Pmatrix_; numeric Pnum_; Pnum_=0; def PmakeBB_= PBBox_ := "[" & decimal Plft_ & " " & decimal Plow_ & " " & decimal Prt_ & " " & decimal Pup_ & "]"; enddef; def Psteps_= PXYsteps_ := decimal if unknown PXStep_: (Prt_-Plft_) else: PXStep_ fi & ":" & decimal if unknown PYStep_: (Pup_-Plow_) else: PYStep_ fi; enddef; vardef Pfindbounds_= Plow_ = ypart (llcorner currentpicture); Plft_ = xpart (llcorner currentpicture); Pup_ = ypart (urcorner currentpicture); Prt_ = xpart (urcorner currentpicture); PmakeBB_; enddef; def PmakePattern_(expr name)= write decimal (Pnum_*epsilon) & ":" & jobname & "." & decimal charcode & ":" & PBBox_ & ":" & PXYsteps_ & ":" & Pmatrix_ to "patterns.dat" enddef; % User interface macros vardef patternbbox(expr a)(text b)= save Pi_, Pz_; numeric Pi_, Pz_[]; if pair a: Plft_:=min(xpart(a),xpart(b)); Plow_:=min(ypart(a),ypart(b)); Prt_:=max(xpart(a),xpart(b)); Pup_:=max(ypart(a),ypart(b)); else: Pi_=1; for t=b: Pz_[Pi_]=t; Pi_:=Pi_+1; endfor; Plft_:=min(a,Pz_2); Plow_:=min(Pz_1,Pz_3); Prt_:=max(a,Pz_2); Pup_:=max(Pz_1,Pz_3); fi; PmakeBB_; enddef; def beginpattern(suffix name)= numeric PXStep_, PYStep_; numeric Plow_, Plft_, Pup_, Prt_; string PBBox_; Pmatrix_:="[1 0 0 1 0 0]"; Pname_:=str name; Pnum_:=Pnum_+1; beginfig(Pnum_+4000); enddef; def endpattern= if unknown PBBox_: Pfindbounds_; fi; endfig; Psteps_; PmakePattern_(Pname_); scantokens(Pname_ & "=Pnum_;"); enddef; picture pattpict; color patterncolor_; patterncolor_ := black; primarydef p withpattern s= if known s: hide(pattpict := image(draw (0,0)--(10,10)); for i within pattpict: patterncolor_ := (redpart i, greenpart i, bluepart i); endfor;) p withcolor (epsilon, 10*epsilon, s*epsilon) if known mpversion: if scantokens(mpversion)>=1.000: withprescript(decimal redpart patterncolor_ & " " & decimal greenpart patterncolor_ & " " & decimal bluepart patterncolor_ & " THsetpatterncolor") fi; fi; else: p withcolor (1,0,0); message("Warning: undefined pattern ignored"); fi; enddef; def patterntransform expr t= Pmatrix_ := "[" & decimal xxpart t & " " & decimal yxpart t & " " & decimal xypart t & " " & decimal yypart t & " " & decimal xpart t & " " & decimal ypart t & "]"; enddef; def patternxstep expr t= PXStep_ = t; enddef; def patternystep expr t= PYStep_ = t; enddef; def patternstep text t= if pair t: PXStep_ = xpart t; PYStep_ = ypart t; else: (PXStep_,PYStep_)=t; fi; enddef; def patterncolor expr t= message("Warning: patterncolor not supported in Therion"); enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of pattern macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % transparent rgb colors numeric RGBnum; RGBnum=0; string RGBname; def def_transparent_rgb (suffix name)(expr r, g, b) = RGBnum := RGBnum+1; RGBname := str name; write decimal (RGBnum*epsilon) & ":" & decimal r & " " & decimal g & " " & decimal b to "rgbcolors.dat"; scantokens(RGBname & ":=RGBnum;"); enddef; primarydef p withtransparentcolor s= p withcolor (epsilon, 12*epsilon, s*epsilon); enddef; def_transparent_rgb(tr_white, 1, 1, 1); def_transparent_rgb(tr_blue, 0, 0, 1); def_transparent_rgb(tr_black, 0, 0, 0); def_transparent_rgb(tr_bg, redpart background, greenpart background, bluepart background); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % some useful macros from H. Hagen's MetaFun package %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vardef paired (expr d) = if pair d : d else : (d,d) fi enddef ; primarydef p randomshifted s = begingroup ; save ss ; pair ss ; ss := paired(s) ; p shifted (-.5xpart ss + uniformdeviate xpart ss, -.5ypart ss + uniformdeviate ypart ss) endgroup enddef ; primarydef p randomized s = (if path p : for i=0 upto length(p)-1 : ((point i of p) randomshifted s) .. controls ((postcontrol i of p) randomshifted s) and ((precontrol (i+1) of p) randomshifted s) .. endfor if cycle p : cycle else : ((point length(p) of p) randomshifted s) fi elseif pair p : p randomshifted s elseif color p : if color s : (uniformdeviate redpart s * redpart p, uniformdeviate greenpart s * greenpart p, uniformdeviate bluepart s * bluepart p) elseif pair s : ((xpart s + uniformdeviate (ypart s - xpart s)) * p) else : (uniformdeviate s * p) fi else : p + uniformdeviate s fi) enddef ; primarydef p llmoved d = ((llcorner p) shifted (-xpart paired(d),-ypart paired(d))) enddef ; primarydef p lrmoved d = ((lrcorner p) shifted (+xpart paired(d),-ypart paired(d))) enddef ; primarydef p urmoved d = ((urcorner p) shifted (+xpart paired(d),+ypart paired(d))) enddef ; primarydef p ulmoved d = ((ulcorner p) shifted (-xpart paired(d),+ypart paired(d))) enddef ; primarydef p smoothed d = (p llmoved (-xpart paired(d),0) -- p lrmoved (-xpart paired(d),0) {right} .. p lrmoved (0,-ypart paired(d)) -- p urmoved (0,-ypart paired(d)) {up} .. p urmoved (-xpart paired(d),0) -- p ulmoved (-xpart paired(d),0) {left} .. p ulmoved (0,-ypart paired(d)) -- p llmoved (0,-ypart paired(d)) {down} .. cycle) enddef ; vardef punked primary p = (point 0 of p for i=1 upto length(p)-1 : -- point i of p endfor if cycle p : -- cycle else : -- point length(p) of p fi) enddef ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of MetaFun macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % we input map symbol definitions input thPoint; input thLine; input thArea; input thText; input thSpecial; input uAUT; input thTrans; nonstopmode; therion-5.4.1/mpost/uAUT.mp000066400000000000000000000711101307545355600155240ustar00rootroot00000000000000% Austrian Symbol Set, author Georg Pacher % enhanced 2017 by Benedikt Hallinger % color (for Austrian symbol-set) color col_water_bg; col_water_bg :=(226/255,244/255,253/255); %%%%%%%%%%%%%%%%%%%%%%% %% areas % returns true if pair point lies within path q. % outside_point is any pair outside of path q (needed for reference). vardef pointinside(expr pt,q,outside_point)= T:=identity; path test; test:= outside_point--pt; %thdraw test; boolean isinside; isinside:=false; numintersections:=recgetnumintersections(test,q,0); if (numintersections <0): isinside:=true; elseif odd(numintersections): isinside:=true; else: isinside:=false; fi; isinside enddef; % get number of intersection between paths p (length 1!) and q % recnum is needed for limitation of recursions. % If the number of allowed recursions is reached, a negativ number of intersections is returned vardef recgetnumintersections(expr p,q,recnum)= pair inter; save preinter; save postinter; save numintersections; path preinter, postinter; inter:=p intersectiontimes q; %show recnum; if recnum >25: numintersections:=-100; else: if xpart(inter)>0 : %show (xpart inter); % split p into two paths and call yourself again preinter:=subpath (0,xpart(inter)-2eps) of p; postinter:=subpath (xpart(inter)+2eps,1) of p; numintersections:= recgetnumintersections(preinter,q,recnum+1) + recgetnumintersections(postinter,q,recnum+1) + 1; else: numintersections:=0; fi; fi; numintersections enddef; beginpattern(pattern_water_AUT); draw origin--10up withpen pensquare scaled (0.02u); patternxstep(.18u); patterntransform(identity rotated 90); endpattern; beginpattern(pattern_sump_AUT); draw origin--(0,.25u) withpen pensquare scaled (0.02u); draw origin--(.25u,0) withpen pensquare scaled (0.02u); endpattern; beginpattern(pattern_sand_AUT); pickup PenC; p:= origin -- (0.01u,0.01u); for i=0.0u step 0.2u until 2.4u: for j=0.0u step 0.2u until 2.4u: draw p rotated uniformdeviate(360) shifted ((i,j) randomized 0.09u); endfor; endfor; if BaseScale<=2.5: my_step:=2.4u; else: my_step:=2.6u; fi; patternstep(my_step,my_step); endpattern; beginpattern(pattern_pebbles_AUT); pickup PenC; path qq; for i=0.0u step 0.3u until 5.1u: for j=0.0u step 0.3u until 5.1u: qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75)) randomized (u/45) scaled (uniformdeviate(0.4)+.55) rotated uniformdeviate(360) shifted ((i,j) randomized 0.15u); draw qq; endfor; endfor; patternstep(5.1u,5.1u); endpattern; beginpattern(pattern_ice_AUT); pickup PenC; p:=(-.15u,.0u) -- (0.15u,.0u); draw p; draw p shifted (0.25u,.0u) rotated (90); draw p shifted (0.45u,0.25u); draw p shifted (0.0u,0.45u) rotated (90); patternxstep(.9u); patternystep(0.5u); endpattern; beginpattern(pattern_flowstone_AUT); pickup PenC; draw (0.0u, 0.01u)--(0.33u, 0.01u); draw (0.33u, 0.33u)--(0.66u, 0.33u); patternbbox(0u,0u, 0.66u, 0.66u); % definiert Rechteckgroesse des Symbols endpattern; def a_water_AUT (expr Path) = T:=identity; thclean Path; pickup PenC; thfill Path withcolor col_water_bg; thfill Path withpattern pattern_water_AUT; thdraw Path; enddef; def a_sump_AUT (expr Path) = T:=identity; thclean Path; pickup PenC; thfill Path withcolor col_water_bg; thfill Path withpattern pattern_sump_AUT; thdraw Path; enddef; def a_sand_AUT (expr Path) = T:=identity; % thclean Path; thfill Path withpattern pattern_sand_AUT ; enddef; let a_clay_AUT = a_sand_AUT; def a_pebbles_AUT (expr p) = T:=identity; thfill p withpattern pattern_pebbles_AUT; enddef; def a_debris_AUT (expr p) = T:=identity; symbol_distance:=1.0; scale_factor:= 0.3; pickup PenC; path q, qq; q = bbox p; pair outside; outside:= ulcorner q + up; picture tmp_pic; uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100); tmp_pic := image( for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q: for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q: qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) randomized (uu/2)) scaled (uniformdeviate(0.4)+scale_factor ) rotated uniformdeviate(360) shifted ((i,j) randomized 0.5uu); if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; else: qq:= qq scaled (uniformdeviate(.2)+.5 ) if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; fi; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_ice_AUT (expr p) = T:=identity; thclean p; thfill p withpattern pattern_ice_AUT; pickup PenC; thdraw p; enddef; def a_snow_AUT (expr P) = T:=identity; pickup PenC; path q; q = bbox P; picture tmp_pic, tmp_sn; pair z; tmp_sn := image( pickup PenC; p := origin--(0,.2*u); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); p := ((0,.3u)--(0,0.2u)--(0.1u,0.2u)) rotatedaround ((0,0.2u),45); draw p; draw p rotated (60); draw p rotated (120); draw p rotated (180); draw p rotated (240); draw p rotated (300); ); tmp_pic := image( for i = xpart llcorner q step 1.0u until xpart urcorner q: for j = ypart llcorner q step 1.0u until ypart urcorner q: z:=((i,j) randomized 0.5u); if xpart (P intersectiontimes ((bbox tmp_sn) shifted z)) < 0: draw tmp_sn shifted z; fi; endfor; endfor; ); clip tmp_pic to P; draw tmp_pic; thdraw P; enddef; def a_blocks_AUT (expr p) = T:=identity; symbol_distance:=1.6; scale_factor:= 0.8; pickup PenC; path q, qq; q = bbox p; pair outside; outside:= ulcorner q + up; picture tmp_pic; uu := max(u, (xpart urcorner q - xpart llcorner q)/100, (ypart urcorner q - ypart llcorner q)/100); tmp_pic := image( for i = xpart llcorner q step symbol_distance*uu until xpart urcorner q: for j = ypart llcorner q step symbol_distance*uu until ypart urcorner q: qq := punked (((-.5uu,-.5uu)--(.5uu,-.5uu)--(1.05uu,0.01uu)--(.5uu,.5uu)--(-.5uu,.5uu)--cycle) randomized (uu/2)) scaled (uniformdeviate(0.7)+scale_factor ) rotated uniformdeviate(360) shifted ((i,j) randomized 0.75uu); if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; else: qq:= qq scaled (uniformdeviate(.2)+.5 ) if xpart (p intersectiontimes qq) < 0: if pointinside((i,j),p,outside): thclean qq; thdraw qq; fi; fi; fi; endfor; endfor; ); clip tmp_pic to p; drawoptions(); draw tmp_pic; enddef; def a_flowstone_AUT (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_flowstone_AUT ; enddef; %% lines def l_wall_pit_AUT (expr P) = T:=identity; % draw outer path pickup PenA; thdraw P; laenge:= arclength P; pair inner[],innerdir[], inter; pair test; samplingdistance:=max(0.15u,laenge/1500); path testcircle; % testcircle, used to test, whether the path makes a 'v'-like bend, % where normal sampling and offsetting gives poor results for the parallel line % size of testcircle= size PenA/2 + 2* (distance between outer and inner line) % + PenC (inner line) testcircle := halfcircle scaled (.5*u/10+2*.125u+.5*u/10) shifted (0,.5*u/10); cur:=samplingdistance/2; count:=0; forever: t:= arctime cur of P; inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P)); %thdraw testcircle rotated (angle thdir(P,t)) shifted (point t of P) withpen (pencircle scaled 0.01u) ; if (xpart inter) >=0: % we are at a 'sharp bend', so set next point to intersectionpoint cur:=cur+samplingdistance; t := max( xpart inter, arctime cur of P); %thdraw point t of P withcolor 0.7*green; forever: t:= arctime cur of P; inter:=P intersectiontimes (testcircle rotated (angle thdir(P,t)) shifted (point t of P)); exitif (xpart inter <0); cur := cur + samplingdistance; exitif (cur >=laenge); endfor; if (cur =laenge); endfor; if count>2: % draw inner path pickup PenC; path innerpath; innerpath = for i=0 upto count-2: inner[i]{(innerdir[i])} .. endfor if cycle P: cycle; else: inner[count-1]; fi; thdraw innerpath; % draw the triangles path draw_triangle; pair l_triangle; laenge:= arclength innerpath; symsize:= adjust_step(laenge,0.5u); triangle_width:=symsize/2; cur:=(symsize/2); t := arctime (cur) of innerpath; t1:= arctime (cur-triangle_width/2) of innerpath; t2:= arctime (cur+triangle_width/2) of innerpath; l_triangle := (point t of innerpath); if ATTR__height >= 10: thfill else: thdraw fi (subpath (t1,t2) of innerpath) -- ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90)) -- cycle; for cur=(symsize/2) step symsize until laenge: t := arctime (cur) of innerpath; test := (point t of innerpath); my_dist := length(test-l_triangle); if (abs(my_dist-symsize) < 0.05u) or (my_dist>symsize): t1:= arctime (cur-triangle_width/2) of innerpath; t2:= arctime (cur+triangle_width/2) of innerpath; draw_triangle:=(subpath (t1,t2) of innerpath) -- ((point t of innerpath) + symsize/2 * unitvector(thdir(innerpath,t) rotated 90)) -- cycle; if xpart (draw_triangle intersectiontimes P) < 0: if ATTR__height >= 10: thfill draw_triangle; else: thclean draw_triangle; thdraw draw_triangle; fi; l_triangle:= test; fi; fi; endfor; fi; enddef; def l_wall_sand_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 0.1u); pickup PenC; forever: t := arctime cas of P; thdraw (((0.01u,0.01u)--origin) rotated uniformdeviate(360) shifted ((point t of P) + (uniformdeviate 1) * .4u * unitvector(thdir(P,t) rotated -90))); cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; pickup PenC; thdraw P; enddef; def l_wall_pebbles_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .18u); pickup PenC; q:=superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75); forever: t := arctime (cas + mojkrok/2) of P; thdraw q randomized (u/45) rotated (angle(thdir(P,t)) + (normaldeviate*40)) shifted point t of P; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; enddef; let l_wall_clay_AUT = l_wall_sand_AUT; def l_wall_debris_AUT (expr P) = T:=identity; pickup PenC; laenge := arclength P; path block; path old_block; cur := 0; t:= arctime cur of P; % draw first block old_block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.05u,.15u)--cycle)); block_width := (xpart urcorner old_block - xpart ulcorner old_block); old_block:=old_block rotated angle(thdir(P,0)) shifted point t of P; thclean old_block; thdraw old_block; cur := cur + 0.9*block_width; t:= arctime cur of P; % proceed with path forever: % generate random block block := punked (((-.25u,-.25u)--(0.25.u,-.25u)--(0.50u,0.01u)--(0.25u,.25u)--(-.25u,.25u)--cycle) randomized (u/4)) scaled (uniformdeviate(0.3)+.4) rotated uniformdeviate(360); % check width of block block_width := (xpart urcorner block - xpart ulcorner block); exitif cur > (laenge- 2.5*block_width/2); % find next position where the block fits in without intersecting the previous one forever: exitif xpart ( (block rotated angle(-direction t of P) shifted point t of P) intersectiontimes old_block) < 0; cur:=cur+0.01u; t:= arctime cur of P; exitif cur > (laenge- 2.5*block_width/2); endfor; exitif cur > (laenge- 2.5*block_width/2); old_block:= block rotated angle(-direction t of P) shifted point t of P; thclean old_block; thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; endfor; t:= arctime laenge-eps of P; % generate last block block := (((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.1u,.15u)--cycle)); block_width := (xpart urcorner block - xpart ulcorner block); % scale last block to fit in the remaining gap scale_factor:=1.5*(laenge-cur)/block_width; forever: exitif scale_factor < 0; % bruces stab at preventing endless loop at large scales exitif xpart ( (block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P)) intersectiontimes old_block) < 0; scale_factor:=scale_factor-0.01; endfor; if scale_factor > 0: thclean block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P); thdraw block rotated angle(-direction t of P) scaled scale_factor shifted (point t of P); fi; enddef; def l_wall_blocks_AUT (expr P) = T:=identity; pickup PenC; laenge := arclength P; path block; path old_block; cur := 0; t:= arctime cur of P; % draw first block old_block := ( (.7u,-.35u)--(.85u,0.01u)--(.4u,.5u)--(.1u,.3u)--(-.0u,-.0u) ); block_width := (xpart urcorner old_block - xpart ulcorner old_block); old_block:=old_block rotated angle( thdir(P,0) ) shifted point t of P; thclean (old_block--cycle); thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; forever: % generate random block block := punked ( ( (.8u,-.35u)--(.85u,0.01u)--(.6u,.4u)--(.1u,.1u)--(-.0u,-.3u) ) randomized (0.3u) ) scaled (uniformdeviate(0.3)+.65) rotated (uniformdeviate(45)-15); % check width of block block_width := (xpart urcorner block - xpart ulcorner block); exitif cur > (laenge- 3.5*block_width/2); % find next position where the block fits in without intersecting the previous one forever: exitif xpart ( ((block--cycle) rotated angle(direction t of P) shifted point t of P) intersectiontimes old_block) < 0; cur:=cur+0.01u; t:= arctime cur of P; exitif cur > (laenge- 3.5*block_width/2); endfor; exitif cur > (laenge- 3.5*block_width/2); old_block:= block rotated angle(direction t of P) shifted point t of P; thclean (old_block--cycle); thdraw old_block; cur := cur + block_width/2; t:= arctime cur of P; endfor; % generate last block t:= arctime laenge-eps of P; block := (( (-.15u,-.35u)--(.0u,.0u)--(-.45u,.5u)--(-.75u,.3u)--(-.85u,-.0u)) ); block_width := (xpart urcorner block - xpart ulcorner block); % scale last block to fit in the remaining gap scale_factor:=(laenge-cur)/block_width; forever: exitif scale_factor < 0; exitif xpart ( ( (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P) ) intersectiontimes old_block) < 0; scale_factor:=scale_factor-0.001; endfor; if scale_factor > 0: thclean (block--cycle) rotated angle (direction t of P) scaled scale_factor shifted (point t of P); thdraw (block) rotated angle (direction t of P) scaled scale_factor shifted (point t of P); fi; enddef; def l_wall_ice_AUT (expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, .6u); pickup PenC; p := (-.15u,0)--(.15u,0); q := p rotated 90 shifted (.25u,.0u); picture symbol,test_symbol; symbol:= image ( thdraw p; thdraw q; ); path bound,old_bound,test_bound; begingroup; interim bboxmargin:=0; bound := bbox (symbol); endgroup; t := arctime (cas + mojkrok/2) of P; thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); forever: t := arctime (cas + mojkrok/2) of P; test_bound:= bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); if xpart ((old_bound) intersectiontimes (test_bound))<0: if xpart (P intersectiontimes (test_bound))<0: thdraw symbol rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); old_bound:=bound rotated angle(thdir(P,t)) shifted (point t of P + .25u * unitvector(thdir(P,t) rotated -90)); fi; fi; cas := cas + mojkrok; exitif cas > dlzka - (2*mojkrok/3); % for rounding errors endfor; thdraw P; enddef; def l_wall_underlying_AUT (expr P) = T:=identity; pickup PenA; laenge:= arclength P; t1 := arctime (0.5u) of P; t2 := arctime (laenge-.5u) of P; thdraw (subpath (t1,t2) of P) dashed evenly scaled optical_zoom; enddef; def l_wall_overlying_AUT (expr P) = T:=identity; laenge:= arclength P; t1 := arctime (0.25u) of P; t2 := arctime (laenge-.25u) of P; t3 :=arctime (laenge) of P; pickup pensquare scaled (3.5*u/10); thdraw (subpath (t1,t2) of P) withcolor background; pickup PenA; thdraw subpath(0,t1) of P; thdraw subpath(t2,t3) of P; thdraw (subpath (t1,t2) of P) dashed dashpattern(on 2bp off 2bp on .5bp off 2bp on 2bp) scaled optical_zoom; enddef; def l_wall_moonmilk_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.8u); circle_width:=symsize/2; cur:=(symsize-circle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t2 := arctime (cur + circle_width) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P); cur := cur + symsize; exitif cur > laenge + (symsize / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_wall_flowstone_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.8u); circle_width:=symsize/2; cur:=(symsize-circle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t2 := arctime (cur + circle_width) of P; thdraw (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P); thfill (point t1 of P){dir (angle(thdir(P,t1)) + 90)} .. {dir (angle(thdir(P,t2)) - 90)}(point t2 of P) -- (point t1 of P)--cycle; cur := cur + symsize; exitif cur > laenge + (symsize / 3); % for rounding errors endfor; pickup PenA; thdraw P; enddef; def l_pit_AUT (expr P) = T:=identity; laenge:= arclength P; symsize:=adjust_step(laenge,0.5u); triangle_width:=symsize/2; cur:=(symsize-triangle_width)/2; pickup PenC; forever: t1 := arctime (cur) of P; t := arctime (cur + triangle_width/2) of P; t2 := arctime (cur + triangle_width) of P; if ATTR__height >= 10: thfill (subpath (t1,t2) of P) -- ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- cycle; else: thclean (subpath (t1,t2) of P) -- ((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- cycle; thdraw (point t2 of P) --((point t of P) + symsize/2 * unitvector(thdir(P,t) rotated 90)) -- (point t1 of P); fi; cur := cur + symsize; exitif cur > laenge - (1*symsize/3); % for rounding errors t1:=arctime (cur) of P; endfor; thdraw P; enddef; let l_overhang_AUT = l_pit_AUT; let l_floorstep_AUT = l_floorstep_UIS; let l_contour_AUT =l_contour_SKBB; let l_ceilingstep_AUT = l_ceilingstep_UIS; let l_ceilingmeander_AUT = l_ceilingmeander_UIS; def l_flowstone_AUT (expr P) = T:=identity; pickup PenC; thdraw P dashed evenly scaled optical_zoom; enddef; def l_survey_cave_AUT (expr P) = T:=identity; pair zz[]; pickup PenD; thdraw P; enddef; %% points def p_stalactite_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u, .4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,-.4u) -- (0,.15u) -- (-.15u,.4u); thdraw (0,.15u) -- (.15u,.4u); else: U:=(.175u, .175u); T:=identity aligned al rotated theta scaled sc shifted pos; thclean fullcircle scaled 0.35u; thdraw fullcircle scaled 0.35u; fi; enddef; let p_icestalactite_AUT = p_stalactite_AUT; def p_stalagmite_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,.4u) -- (0,-.15u) -- (-.15u,-.4u); thdraw (0,-.15u) -- (.15u,-.4u); else: U:=(.15u,.15u); T:=identity aligned al rotated theta scaled sc shifted pos; thfill fullcircle scaled 0.3u; fi; enddef; let p_icestalagmite_AUT = p_stalagmite_AUT; def p_pillar_AUT(expr pos,theta,sc,al) = pickup PenC; if ATTR__elevation: U:=(.15u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; thdraw (0,.15u)--(0,-.15u); thdraw (-.15u,-.4u)--(0,-.15u)--(.15u,-.4u); thdraw (-.15u,.4u)--(0,.15u)--(.15u,.4u); else: U:=(.225u,.225u); T:=identity aligned al rotated theta scaled sc shifted pos; thclean fullcircle scaled 0.45u; thdraw fullcircle scaled 0.45u; thfill fullcircle scaled 0.3u; fi; enddef; let p_icepillar_AUT = p_pillar_AUT; def p_crystal_AUT (expr pos,theta,sc,al)= U:=(.35u,.35u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p := ((-.35*u,0)--(.35*u,0)); thdraw p; thdraw p rotated (45); thdraw p rotated (90); thdraw p rotated (135); thdrawoptions(); enddef; def p_spring_AUT (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,.1u)..(0,-.1u)..(.3u,.1u); enddef; def p_sink_AUT (expr pos,theta,sc,al)= U:=(.3u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (-.3u,-.1u)..(0,.1u)..(.3u,-.1u); enddef; def p_breakdownchoke_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos; pickup PenC; thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.21u,.305u)--(.0u,-.305u)--(.21u,.305u); enddef; def p_sand_AUT (expr pos,theta,sc,al)= U:=(.2u,.2u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:= origin -- (0.01u,0.01u); for i=-0.1u step 0.2u until .15u: for j=-0.1u step 0.2u until .15u: thdraw p rotated uniformdeviate(360) shifted ((i,j) randomized 0.09u); endfor; endfor; thdrawoptions(); enddef; let p_clay_AUT = p_sand_AUT; def p_pebbles_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path qq; for i=-0.15u step 0.3u until .2u: for j=-0.15u step 0.3u until .2u: qq := (superellipse((.1u,0),(0,.05u),(-.1u,0),(0,.-.05u),.75)) randomized (u/45) scaled (uniformdeviate(0.4)+.55) rotated uniformdeviate(360) shifted ((i,j) randomized 0.15u); thdraw qq; endfor; endfor; enddef; def p_debris_AUT (expr pos,theta,sc,al)= U:=(.5u,.5u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path block,q; block := ((-.15u,-.15u)--(.15u,-.15u)--(.3u,0.01u)--(.15u,.15u)--(-.15u,.15u)--cycle) ; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.15u); thclean q; thdraw q; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.15u,-0.15u); thclean q; thdraw q; q:= (punked (block randomized (0.15u))) rotated uniformdeviate(360) shifted (0.15u,-0.15u); thclean q; thdraw q; enddef; def p_blocks_AUT (expr pos,theta,sc,al)= U:=(u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; path block,q; block := ((-.25u,-.25u)--(.25u,-.25u)--(.5u,0.01u)--(.25u,.25u)--(-.25u,.25u)--cycle) ; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.3)+0.3) shifted (0.0u,0.25u); thclean q; thdraw q; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) scaled (uniformdeviate(0.5)+0.7) shifted (-0.25u,-0.25u); thclean q; thdraw q; q:= (punked (block randomized (0.3u))) rotated uniformdeviate(360) shifted (0.25u,-0.25u); thclean q; thdraw q; enddef; def p_water_AUT (expr pos,theta,sc,al)= U:=(.425u,.3u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenD; p:=fullcircle xscaled (.85u) yscaled (.6u); thfill p withcolor col_water_bg; thfill p withpattern pattern_water_AUT; thdraw p; enddef; def p_ice_AUT (expr pos,theta,sc,al)= U:=(.6u,.4u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:=(-.15u,.0u) -- (0.15u,.0u); thdraw p rotated 90; thdraw p shifted (0.45u,.0u); thdraw p shifted (-0.45u,.0u); thdraw p rotated 90 shifted (-0.45u,0.25u); thdraw p shifted (0u,0.25u); thdraw p rotated 90 shifted (0.45u,.25u); enddef; def p_entrance_AUT (expr pos,theta,sc,al)= U:=(.3u,.75u); T:=identity aligned al rotated theta scaled sc shifted pos; path slice; for i= -0.5 step 0.01 until 0.5: slice:= (-.3u*(0.5-i),1.5*i*u)--(0,.75u)--(.3u*(0.5-i),1.5i*u)--cycle; thfill slice withcolor (min(0.95,0.5-1.75i),min(0.95,.5-1.75i),min(0.95,.5-1.75i)); endfor; thdraw ((-.3u,-0.75u)--(0,.75u)--(.3u,-0.75u)--cycle); enddef; def p_gradient_AUT (expr pos,theta,sc,al)= U:=(.15u,u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; thdraw (0,-0.5u)--(0,0.5u); p:=(-.15u,.3u)--(0,0.7u)--(.15u,.3u)--cycle; thfill p; thdraw p; enddef; def p_airdraught_AUT (expr pos,theta,sc,al)= U:=(.2u,u); T:=identity aligned al rotated theta scaled 1 shifted pos; pickup PenC; thdraw (0,.5u)--(0,-0.8u); p:=(-.2u,.2u)--(0,.55u)--(.2u,.2u)--cycle; thfill p; for i:=1 upto round(3+2*mlog(sc)/mlog 2): thdraw (0,-(1-0.2i)*u)--(.2u,-(1-0.2(i-1))*u); thdraw (0,-(1-0.2i)*u)--(-.2u,-(1-0.2(i-1))*u); endfor; enddef; def p_station_temporary_AUT (expr pos)= T:=identity shifted pos; pickup PenD; thclean fullcircle scaled 0.15u; thdraw fullcircle scaled 0.15u; enddef; let p_station_painted_AUT = p_station_fixed_ASF ; let p_station_fixed_AUT = p_station_fixed_ASF ; def p_claychoke_AUT (expr pos,theta,sc,al)= U:=(.4u,.4u); T:=identity rotated -theta aligned al rotated theta scaled sc shifted pos; pickup PenC; thclean (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.4u,-.4u)--(.4u,-.4u)--(.4u,.4u)--(-.4u,.4u)--cycle; thdraw (-.15u,.3u)--(-.15u,-.25u)--(.15u,-.25u); enddef; def p_claytree_AUT (expr pos,theta,sc,al)= U:=(.55u,.6u); T:=identity aligned al rotated theta scaled sc shifted pos; pickup PenC; p:= (-.15u,.15u)--(.0u,.6u)--(.15u,.15u); thdraw p ; thdraw p shifted (-.4u,-.3u); thdraw p shifted (.4u,-.2u) ; enddef; therion-5.4.1/pt2pdf.pl000066400000000000000000000177511307545355600147550ustar00rootroot00000000000000#!/usr/bin/perl -w use POSIX "ceil"; use Getopt::Std; die "Usage: pt2pdf .txt\n" unless $ARGV[0]; getopt('i'); $plan = 2; $elev = 3; $cm = 72/2.54; ## SETTINGS ## $cave = ""; $team = ""; $date = ""; $columns = 3; $scale[$plan] = 1/200; $scale[$elev] = 1/400; $rotate[$plan] = 0; $rotate[$elev] = 1; $paper_x = 20*$cm; $paper_y = 30*$cm; $margin = 20; # bp $tex = " \\pageframe{% \\sketch{0}{1}{\\data}% \\sketch{0.05}{0.03}{\\plan}% \\sketch{0.95}{0.03}{\\elev}% } \\autoframe{\\plan} \\pageframe{% \\sketch{0}{1}{\\data}% } \\autoframe{\\data} "; ## END OF SETTINGS ## if (defined $opt_i) {do $opt_i;} $block = 0; $poly_len = 0; @DATA=(); $DATA[1] = ""; @CENTRELINE = (); open IN, $ARGV[0] or die "can't open pockettopo file $ARGV[0]!\n"; while() { s/\s+$//; if (/^$/) {next;} if (/^TRIP$/) { $block = 1; # $DATA[$block] = ""; $subblock = 0; } elsif (/^PLAN$/) { $block = 2; reset_bbox($block); } elsif (/^ELEVATION$/) { if ($poly_len>0) { if ($poly_len==1) { $DATA[2] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[2] .= "\\pdfliteral{S}%\n"; $poly_len = 0; } $block = 3; reset_bbox($block); } elsif (/^DATE (\d{4}\-\d{2}\-\d{2})$/) { $date ||= $1; } elsif (/^DECLINATION$/) { } elsif (/^DATA$/) { $subblock = 1; # @CENTRELINE = (); } elsif (/^STATIONS$/) { $subblock = 1; $DATA[$block] .= "\\pdfliteral{2 w 0.5 G}%\n"; } elsif (/^SHOTS$/) { $subblock = 2; $DATA[$block] .= "\\pdfliteral{0.5 w 0.5 G [2] 0 d}%\n"; } elsif (/^POLYLINE ([A-Z]+)$/) { $subblock = 3; if ($poly_len>0) { if ($poly_len==1) { $DATA[$block] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[$block] .= "\\pdfliteral{S}%\n"; $poly_len = 0; } else { $DATA[$block] .= "\\pdfliteral{0.5 w [] 0 d}%\n"; } $col = $1; if ($col eq "BLACK") {$color = "0 0 0";} elsif ($col eq "GRAY") {$color = "0.5 0.5 0.5";} elsif ($col eq "BROWN") {$color = "0.74 0.59 0.23";} elsif ($col eq "RED") {$color = "1 0 0";} elsif ($col eq "GREEN") {$color = "0.066 0.87 0.047";} elsif ($col eq "BLUE") {$color = "0 0 1";} else {$color = "0.78 0.28 0.89";} $DATA[$block] .= "\\pdfliteral{$color RG}%\n"; $is_first_poly = 1; } else { if ($block == 1) { if ($subblock == 1) { @ldata = split /\t/; $cl_from = $ldata[0]; $cl_to = $ldata[1]; $cl_az = $ldata[2]; $cl_cl = $ldata[3]; $cl_len = $ldata[4]; $tmp = ""; if (!$cl_to) {$tmp .= "\\pdfliteral{0.6 g}";} $tmp .= "$cl_from&$cl_to&$cl_az&$cl_cl&$cl_len"; if (!$cl_to) {$tmp .= "\\pdfliteral{0 g}";} push @CENTRELINE, $tmp; } } elsif ($block>1) { @ldata = split /\s+/; if ($subblock == 1) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); $txt = $ldata[2]; add_to_bbox($x,$y,$block); $DATA[$block] .= "\\pdfliteral{$x $y m $x $y l S}%\n"; $DATA[$block] .= "\\pdfliteral{BT /F\\pdffontname\\f\\space 6 Tf $x $y Td ($txt) Tj ET}"; } if ($subblock == 2) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); $x2 = inscale($ldata[2]); $y2 = inscale($ldata[3]); add_to_bbox($x,$y,$block); add_to_bbox($x2,$y2,$block); $DATA[$block] .= "\\pdfliteral{$x $y m $x2 $y2 l S}%\n"; } if ($subblock == 3) { $x = inscale($ldata[0]); $y = inscale($ldata[1]); add_to_bbox($x,$y,$block); if ($is_first_poly) { $DATA[$block] .= "\\pdfliteral{$x $y m}%\n"; $poly_moveto = "$x $y"; $is_first_poly = 0; } else { $DATA[$block] .= "\\pdfliteral{$x $y l}%\n"; } $poly_len++; } } } } if ($poly_len>0) { if ($poly_len==1) { $DATA[$block] .= "\\pdfliteral{$poly_moveto l}%\n"; } $DATA[$block] .= "\\pdfliteral{S}%\n"; } close IN; expand_bbox(2,$margin); expand_bbox(3,$margin); for $i (2..3) { if ($rotate[$i]==0) { $hsize[$i] = $maxx[$i]-$minx[$i]; $vsize[$i] = $maxy[$i]-$miny[$i]; } else { $vsize[$i] = $maxx[$i]-$minx[$i]; $hsize[$i] = $maxy[$i]-$miny[$i]; } if ($hsize[$i] > $paper_x || $vsize[$i] > $paper_y) { die "The sketch does not fit onto paper in the current scale!\n"; } } if (defined $date) {$fname = $date;} else {$fname = "archive";} $fname2 = $ARGV[0]; $fname2 =~ s/\.txt$//; $fname .= "_" . $fname2; open OUT, ">$fname.tex"; print OUT <> } 0\n"; if ($i==2) {print OUT "\\plan";} else {print OUT "\\elev";} print OUT "=\\pdflastxform\n"; print OUT "\n"; } print OUT "$tex\n"; print OUT "\\end\n"; close OUT; system("pdftex $fname.tex"); unlink("$fname.log"); unlink("$fname.tex"); sub add_to_bbox { # global minmaxxy my ($x,$y,$b) = @_; if ($x < $minx[$b]) {$minx[$b] = $x;} if ($x > $maxx[$b]) {$maxx[$b] = $x;} if ($y < $miny[$b]) {$miny[$b] = $y;} if ($y > $maxy[$b]) {$maxy[$b] = $y;} } sub reset_bbox { # global minmaxxy my $b = shift; $minx[$b] = 1e10; $maxx[$b] = -1e10; $miny[$b] = 1e10; $maxy[$b] = -1e10; } sub expand_bbox { # global minmaxxy my ($b,$val) = @_; $minx[$b] -= $val; $maxx[$b] += $val; $miny[$b] -= $val; $maxy[$b] += $val; } sub inscale { # global block my $n = shift; return $n * 100 * 72 /2.54 * $scale[$block]; } sub make_table { # global CENTRELINE, columns my $elem = @CENTRELINE; my $rows = ceil($elem/$columns); my $pos; my $s = "\\halign{\\f "; for ($j = 0; $j < $columns; $j++) { if ($j>0) {$s.="\\quad&";} $s .= "\\hfil#&\\hfil#&\\hfil#&\\hfil#&\\hfil#"; } $s .= "\\cr\n"; for ($j = 0; $j < $columns; $j++) { if ($j>0) {$s.="&";} $s .= "From&To&Compass&Clino&Length"; } $s .= "\\cr\\noalign{\\smallskip\\hrule\\smallskip}\n"; for ($i = 0; $i < $rows; $i++) { for ($j = 0; $j < $columns; $j++) { $pos = $i+$j*$rows; if ($j>0) {$s .= "&";} if ($pos<$elem) { $s .= $CENTRELINE[$pos]; } } $s .= "\\cr\n"; } $s .= "}\n"; return $s; } therion-5.4.1/samples/000077500000000000000000000000001307545355600146525ustar00rootroot00000000000000therion-5.4.1/samples/Makefile000066400000000000000000000006051307545355600163130ustar00rootroot00000000000000OUTDIR ?= . ifneq ($(OUTDIR),.) LOUTDIR = $(OUTDIR) else LOUTDIR = .. endif all: ifneq ($(LOUTDIR),..) rm -rf $(LOUTDIR)/samples rm -rf $(LOUTDIR)/samples.doc cp -rf ../samples $(LOUTDIR) endif tclsh samples.tcl $(LOUTDIR) $(LOUTDIR)/samples ifneq ($(LOUTDIR),..) perl ../makefile.pl mv samples.log $(LOUTDIR)/samples rm -f samples.log endif clean: tclsh samples.tcl . clean therion-5.4.1/samples/areas/000077500000000000000000000000001307545355600157455ustar00rootroot00000000000000therion-5.4.1/samples/areas/thconfig000066400000000000000000000003101307545355600174630ustar00rootroot00000000000000encoding utf-8 source types.th2 export map -o types.pdf \ -layout-map-header 0 0 off \ -layout-symbol-hide group centerline #!PROCESS #!TITLE 7 Area symbols #!IMAGE types.pdf #!CLEAN types.pdf therion-5.4.1/samples/areas/types.th2000066400000000000000000000064001307545355600175300ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust 177.0 -100.0 657.0 1333.0 ##XTHERION## xth_me_area_zoom_to 100 centerline data normal from to compass clino tape 0 1 0 0 30 endcenterline scrap scrap.types -scale [0 0 1600 0 0.0 0.0 40.64 0.0 m] line wall -id l7-497-1096 503.0 52.0 476.0 169.0 531.0 426.0 498.0 531.0 465.0 636.0 516.0 1016.0 500.0 1178.0 endline line border -id l46-411-69 319.0 72.0 363.0 70.0 487.0 67.0 513.0 72.0 endline line wall -id l6-342-1086 340.0 48.0 323.0 129.0 365.0 427.0 338.0 528.0 299.42 672.33 359.0 1029.0 332.0 1171.0 endline point 511.0 562.0 label -text blocks -align r point 502.0 645.0 label -text debris -align r point 503.0 727.0 label -text pebbles -align r point 507.0 818.0 label -text sand -align r point 511.0 911.0 label -text clay -align r area blocks l14-414-607 l6-342-1086 l15-428-512 l7-497-1096 endarea area debris l13-424-689 l6-342-1086 l14-414-607 l7-497-1096 endarea area pebbles l12-412-775 l6-342-1086 l13-424-689 l7-497-1096 endarea area sand l11-426-861 l6-342-1086 l12-412-775 l7-497-1096 endarea area clay l10-429-957 l6-342-1086 l11-426-861 l7-497-1096 endarea area sump l9-429-1051 l6-342-1086 l10-429-957 l7-497-1096 endarea area water l8-427-1151 l6-342-1086 l9-429-1051 l7-497-1096 endarea point 517.0 1003.0 label -text sump -align r point 519.0 1094.0 label -text water -align r line border -id l19-409-159 320.0 161.0 353.0 158.0 491.0 159.0 511.0 163.0 endline line border -id l18-413-242 324.0 244.0 367.0 240.0 485.0 239.0 509.0 242.0 endline line border -id l17-420-327 330.0 331.0 397.0 325.0 490.0 327.0 515.0 332.0 endline line border -id l16-411-424 333.0 425.0 374.0 420.0 503.0 426.0 520.0 431.0 endline line border -id l15-428-512 326.0 513.0 375.0 510.0 491.0 514.0 515.0 521.0 endline line border -id l14-414-607 317.0 606.0 358.0 604.0 490.0 606.0 510.0 611.0 endline line border -id l13-424-689 310.0 694.0 388.0 687.0 494.0 688.0 507.0 691.0 endline line border -id l12-412-775 318.0 780.0 370.0 774.0 475.0 774.0 508.0 776.0 endline line border -id l11-426-861 317.0 870.0 359.0 862.0 487.0 857.0 507.0 862.0 endline line border -id l10-429-957 327.0 963.0 371.0 953.0 494.0 957.0 513.0 965.0 endline line border -id l9-429-1051 330.0 1040.0 376.0 1051.0 478.0 1057.0 515.0 1046.0 endline point 507.0 109.0 label -text snow -align r point 506.0 199.0 label -text ice -align r area moonmilk l17-420-327 l6-342-1086 l18-413-242 l7-497-1096 l7-497-1096 l7-497-1096 endarea area flowstone l16-411-424 l6-342-1086 l17-420-327 l7-497-1096 endarea area bedrock l15-428-512 l6-342-1086 l16-411-424 l7-497-1096 endarea point 510.0 279.0 label -text moonmilk -align r point 517.0 375.0 label -text flowstone -align r point 524.0 473.0 label -text bedrock -align r point 475.0 1200.0 label -text "Therion area types" -scale xl -align top area snow l19-409-159 l6-342-1086 l46-411-69 l7-497-1096 endarea area ice l18-413-242 l6-342-1086 l19-409-159 l7-497-1096 endarea line border -id l8-427-1151 329.0 1139.0 370.0 1152.0 478.0 1162.0 521.0 1143.0 endline point 431.0 1105.0 station -name 1 point 423.0 33.0 station -name 0 endscrap therion-5.4.1/samples/basics/000077500000000000000000000000001307545355600161165ustar00rootroot00000000000000therion-5.4.1/samples/basics/rabbit.th000066400000000000000000000030031307545355600177120ustar00rootroot00000000000000encoding iso8859-2 survey rabbit -title "Rabbit Cave" centreline date 1997.08.10 team "Martin Budaj" team "Stacho Mudrk" team "Miroslav Hofer" units compass clino grads data normal from to compass clino tape 0 1 200 -5 6.4 1 2 73 8 5.2 2 3 42 0 2.09 3 4 82 8 4 4 5 21 -8 8.28 4 6 354 -5 10.89 6 7 358 5 7.08 7 8 260 1 2.73 8 9 382 8 7.28 9 10 308 2 6.59 10 11 373 -14 3.44 11 12 276 -2 6.97 11 13 390 62 4.98 flags surface 13 14 295 3 11.9 14 15 170 2 23.28 fix 15 20 40 646.23 extend ignore 5 extend ignore 12 endcentreline input rabbit.th2 join ew1:0 ew2:end join ew1:end ew2:0 join ps1 ps2 map pdx -title "Rabbit Cave -- extended elevation" xs1 xs2 endmap map pdp -title "Rabbit Cave - plan" ps1 ps2 endmap surface bitmap surface.jpg [0 0 5 20 100 100 55 70] grid 5 20 10 10 6 6 638 642 646 650 654 650 639 644 649 654 659 654 638 642 646 650 654 650 638 642 646 650 654 650 639 644 649 654 659 654 640 646 652 658 664 658 endsurface endsurvey rabbit therion-5.4.1/samples/basics/rabbit.th2000066400000000000000000000443611307545355600200100ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust 72.0 55.5 1095.5 1416.0 ##XTHERION## xth_me_area_zoom_to 200 ##XTHERION## xth_me_image_insert {204.0 1 1.0} {1288.0 {}} img/2002-08-10.gif 0 {} scrap ps2 -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 629.0 269.5 debris line pit 596.0 214.5 595.5 232.0 584.0 228.5 584.0 228.5 smooth off endline line pit 599.5 216.0 615.5 246.0 627.5 233.0 629.0 215.0 smooth off endline point 619.0 234.5 station -name 12 line wall 584.5 210.75 596.75 220.25 615.25 217.0 621.0 215.0 626.75 213.0 632.25 214.75 637.75 221.75 643.25 228.75 643.25 230.75 652.0 241.5 altitude . 662.43 254.31 657.0 254.25 662.25 262.5 667.5 270.75 657.25 289.5 663.0 305.25 smooth off endline line chimney -clip off 578.0 261.5 601.75 274.0 611.25 277.75 607.5 303.75 603.75 329.75 559.25 318.25 559.25 318.25 smooth off endline line wall 559.25 318.25 575.94 295.99 563.5 291.5 572.5 282.25 577.1 277.52 572.0 275.0 578.0 261.5 584.0 248.0 576.75 249.25 576.5 244.75 576.25 240.25 592.5 229.75 576.25 215.0 smooth off endline point 568.0 360.5 station -name 11 endscrap scrap ps1 -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 251.5 245.5 station -name 11 point 310.0 271.5 station -name 10 point 324.0 396.0 station -name 9 point 460.0 436.5 station -name 8 point 429.5 478.5 station -name 7 point 536.5 563.5 station -name 6 point 600.5 734.0 station -name 5 point 693.0 702.0 station -name 4 point 702.5 631.5 station -name 3 point 733.0 610.0 station -name 2 point 460.0 436.5 station-name -align br point 536.5 563.5 station-name -align br point 646.0 517.0 station-name -align b point 693.0 702.0 station-name -align r point 773.5 517.0 station-name -align b point 773.5 517.0 station -name 1 point 646.0 517.0 station -name 0 line wall 605.5 507.5 subtype presumed 625.0 506.0 subtype bedrock 632.0 505.0 endline line wall 636.75 630.0 644.75 636.0 644.0 626.0 649.0 630.0 654.0 634.0 662.5 627.08 662.5 612.5 662.5 605.5 676.5 609.0 671.5 595.0 666.5 581.0 654.0 584.5 653.0 568.5 651.6 546.04 651.5 547.5 650.5 540.0 649.5 532.5 649.0 533.5 641.0 528.0 636.92 525.2 631.5 520.0 626.5 520.0 subtype presumed 621.5 520.0 615.5 518.0 608.0 520.5 smooth off endline line wall -close on -outline in 697.0 590.5 689.0 596.0 691.5 608.0 672.5 609.0 672.0 619.5 671.5 630.0 667.0 636.5 667.0 636.5 smooth off 668.0 641.5 665.0 645.5 665.0 645.5 676.0 653.5 685.5 645.5 690.81 641.03 690.5 646.5 694.5 641.0 698.5 635.5 698.5 629.0 709.0 621.5 719.5 614.0 722.5 609.5 720.5 601.5 smooth off 715.5 586.0 715.5 586.0 707.5 585.0 704.5 595.0 smooth off 697.0 590.5 endline line wall 571.75 561.5 565.5 566.5 567.25 567.25 570.5 573.5 573.75 579.75 581.75 580.0 589.75 589.0 602.83 603.72 600.5 592.75 611.0 605.75 617.16 613.37 619.0 611.25 625.75 617.75 632.5 624.25 631.75 628.5 636.5 630.0 smooth off endline line wall 554.5 537.5 552.5 543.25 545.65 543.55 555.5 550.5 559.75 553.5 559.46 555.62 560.5 557.5 564.5 564.75 568.75 557.25 568.75 557.25 smooth off endline point 308.5 274.0 station-name -align tl line wall 333.5 197.0 342.5 211.5 333.9 216.51 341.0 224.5 349.0 233.5 347.0 236.5 350.5 242.0 354.0 247.5 365.75 265.0 364.5 274.5 363.25 284.0 362.5 290.0 361.5 295.25 altitude . 359.14 307.65 354.5 293.75 349.75 299.75 345.19 305.51 354.5 308.25 351.5 322.5 350.15 328.9 348.25 330.5 344.5 335.5 342.69 337.91 343.5 341.5 340.5 346.5 smooth off 343.5 390.0 364.25 360.25 363.75 384.25 363.47 397.76 378.0 397.75 383.0 402.0 395.1 412.28 409.0 400.5 423.25 414.25 440.33 430.73 459.5 417.75 463.75 417.5 altitude . 473.0 416.96 477.0 397.25 492.0 398.0 501.82 398.49 501.0 393.5 508.5 398.75 516.0 404.0 509.75 409.0 515.25 414.25 520.75 419.5 524.0 434.0 519.25 438.0 514.5 442.0 508.0 452.25 499.25 450.25 485.22 447.04 479.0 467.75 491.25 472.25 503.08 476.6 494.25 486.5 493.5 490.0 490.95 501.9 487.5 504.0 507.25 513.75 529.45 524.71 515.25 511.5 525.25 514.75 536.51 518.41 539.75 541.0 550.75 529.5 smooth off endline line wall 212.75 232.5 212.75 232.5 233.5 247.25 232.25 230.5 231.0 213.75 227.75 202.0 231.75 185.75 smooth off endline point 218.5 263.0 fixed-ladder line wall 241.25 387.25 260.0 382.75 264.0 380.5 268.0 372.25 272.0 364.0 278.25 363.5 272.25 357.5 266.25 351.5 262.5 348.25 247.25 348.75 239.99 348.99 237.75 345.75 235.0 341.25 232.25 336.75 231.5 336.25 236.25 332.75 241.0 329.25 231.5 307.75 231.25 295.5 231.0 283.25 239.51 273.75 233.25 256.0 231.75 251.75 211.5 246.75 211.5 246.75 smooth off endline line wall 391.75 526.5 395.0 524.75 398.75 515.75 388.5 507.0 387.5 497.25 381.75 492.5 smooth off 381.75 492.5 388.25 482.25 381.75 475.25 smooth off 392.75 459.75 415.0 462.5 428.25 458.5 428.25 451.5 428.25 444.5 437.0 444.25 436.75 437.5 436.5 430.75 432.25 435.0 427.5 431.0 422.75 427.0 413.25 429.25 397.25 428.5 smooth off 393.5 435.0 398.25 441.0 387.25 440.25 371.29 439.16 374.5 433.25 366.75 432.25 359.0 431.25 364.75 437.25 350.25 434.5 335.75 431.75 323.25 432.75 323.25 432.75 smooth off 323.25 424.25 291.5 412.0 291.5 412.0 276.5 411.5 270.25 411.5 264.0 411.5 253.75 404.0 252.5 399.5 251.25 395.0 252.75 390.25 244.25 393.0 smooth off endline line wall 471.5 609.25 subtype presumed 438.25 573.0 427.46 559.99 423.25 533.5 smooth off subtype bedrock 415.75 533.75 404.5 531.5 404.5 531.5 399.75 527.25 394.5 530.75 smooth off endline line wall 568.5 740.0 600.5 717.5 610.0 690.5 610.0 690.5 623.5 689.0 625.0 676.0 smooth off 637.0 672.5 637.0 672.5 639.0 667.5 633.0 663.0 smooth off 633.0 663.0 632.0 658.5 629.5 657.0 smooth off 613.75 657.5 607.75 650.5 609.25 640.5 580.25 617.0 575.5 611.25 569.25 612.75 563.34 614.17 548.5 604.5 547.0 601.75 545.5 599.0 533.25 593.75 522.0 594.25 smooth off altitude . 511.25 582.5 498.75 586.0 487.75 562.75 smooth off 481.0 561.0 486.5 551.75 484.25 549.0 482.0 546.25 478.75 541.0 468.0 531.0 467.77 530.79 442.0 519.25 445.5 545.25 subtype presumed 447.4 559.37 487.25 599.75 487.25 599.75 smooth off endline line wall 576.5 757.5 591.5 745.5 590.5 739.5 572.0 746.5 smooth off endline line wall 741.5 678.5 735.5 686.5 741.5 694.5 727.5 694.5 725.5 710.5 723.5 726.5 727.5 738.5 723.5 744.5 altitude . 719.5 750.5 711.5 758.5 709.5 764.5 707.5 770.5 703.5 772.5 697.5 772.5 691.5 772.5 689.5 776.5 691.5 784.5 smooth off 691.5 784.5 689.5 792.5 681.5 792.5 673.5 792.5 671.5 804.5 659.5 790.5 647.5 776.5 633.5 756.5 619.5 764.5 smooth off 619.5 764.5 619.5 752.5 599.5 760.5 smooth off 594.5 753.5 594.5 753.5 584.5 758.5 581.5 763.0 smooth off endline line wall 773.5 610.5 769.23 601.96 765.5 589.0 758.5 600.0 744.23 622.42 748.5 612.0 744.0 610.0 739.5 608.0 734.0 608.5 728.5 617.5 724.29 624.39 722.5 622.0 715.5 627.5 708.5 633.0 707.5 632.0 710.5 637.5 715.55 646.76 708.0 640.0 710.0 652.0 smooth off 710.0 652.0 711.5 674.5 727.5 674.5 735.5 674.5 739.5 672.5 739.5 672.5 smooth off endline line wall 795.0 574.5 787.09 574.5 786.0 575.5 789.0 579.0 792.0 582.5 789.5 588.0 785.0 587.5 780.5 587.0 780.5 592.5 783.0 598.0 smooth off endline line wall 803.5 534.5 789.5 537.0 791.0 545.0 789.0 556.0 787.0 567.0 789.0 565.5 794.0 565.5 smooth off endline line wall 632.0 505.0 630.5 491.0 636.5 491.0 656.5 474.0 660.5 477.0 670.0 467.5 683.81 453.69 660.0 443.5 686.0 425.0 712.0 406.5 723.0 400.0 732.0 400.0 741.0 400.0 760.0 415.0 769.0 420.0 771.55 421.42 771.5 426.5 776.5 441.0 781.5 455.5 791.0 487.0 794.0 493.0 altitude . 797.0 499.0 787.0 529.5 802.5 527.5 smooth off endline line pit 419.0 535.5 422.5 526.5 414.5 517.5 430.0 516.5 445.5 515.5 442.0 515.0 446.5 536.5 smooth off endline point 202.5 237.0 entrance -orientation 73.4 -align b point 223.5 243.5 gradient -orientation 69.7 point 441.0 490.0 water -align tl point 445.0 485.5 water -align br point 429.5 478.5 stalactite -align l point 455.0 457.5 stalactite point 351.0 386.0 stalactite line rock-border -close on 371.0 426.5 353.5 424.5 348.0 418.0 356.5 415.0 367.0 415.5 372.0 419.0 371.0 426.5 endline line pit 371.5 434.5 382.5 422.5 376.0 413.0 367.5 408.0 359.0 403.0 366.0 391.0 366.0 391.0 smooth off endline line pit 348.0 370.5 306.5 376.5 310.5 384.0 309.0 389.5 307.5 395.0 317.0 404.0 349.5 402.0 smooth off endline line rock-edge 300.5 223.0 315.0 252.0 308.0 278.0 315.0 252.0 342.5 254.0 endline line rock-edge 262.0 217.0 269.5 221.0 274.5 228.0 291.0 212.5 274.5 228.0 275.0 248.0 267.0 258.5 endline line rock-border -close on 251.5 245.5 247.0 236.5 250.5 231.5 258.0 235.5 256.5 248.0 251.5 245.5 endline line rock-border -close on 262.0 217.0 271.0 212.5 291.0 212.5 290.0 224.0 286.5 245.0 280.0 261.0 267.0 258.5 261.5 228.5 262.0 217.0 endline line rock-border -close on 294.5 246.0 300.5 223.0 308.0 223.0 322.0 233.0 327.0 243.0 342.5 254.0 317.5 280.5 308.0 278.0 301.5 264.0 294.5 246.0 endline point 269.0 300.0 debris point 323.5 332.5 debris point 280.0 390.5 debris point 516.5 521.5 water-flow -orientation 0.0 -align t line pit 603.5 635.5 612.5 624.0 602.0 616.0 586.0 623.0 endline line contour 530.5 595.0 506.5 559.5 494.5 556.5 488.5 557.0 smooth off endline line contour 488.0 515.0 499.5 524.5 516.0 518.0 516.0 518.0 smooth off endline line contour 386.0 503.0 409.5 485.5 407.5 476.0 411.5 460.0 smooth off endline line contour 382.5 483.0 395.5 474.0 399.0 458.5 399.0 458.5 smooth off endline point 475.0 490.0 clay point 495.0 423.0 debris point 471.0 444.5 sand point 569.0 593.0 sand point 623.0 639.0 sand point 647.5 722.0 sand point 673.5 734.0 stalactite point 685.5 670.25 stalactite line chimney 697.0 590.5 671.5 595.0 endline line chimney 737.5 609.5 720.5 601.5 endline line chimney 582.5 730.5 582.5 730.5 597.67 728.34 600.5 734.0 603.5 740.0 604.5 743.0 594.5 753.5 smooth off endline point 715.0 686.5 flowstone -orientation 115.4 line flowstone -close on 689.0 688.0 670.47 698.86 681.5 723.0 699.5 714.5 717.5 706.0 703.5 679.5 689.0 688.0 endline point 686.5 726.5 flowstone -orientation 347.4 point 701.5 749.5 flowstone -orientation 235.6 point 675.0 763.5 flowstone -orientation 235.6 point 647.0 750.5 flowstone -orientation 235.6 line pit 710.5 637.5 695.5 657.0 668.0 667.5 662.5 680.5 smooth off endline line pit 614.5 737.5 624.0 726.0 618.5 714.5 627.5 709.0 636.5 703.5 626.0 691.58 649.0 684.5 655.5 682.5 654.5 671.0 664.5 666.5 674.5 662.0 691.0 649.0 694.5 641.0 smooth off endline line chimney 782.0 534.0 759.5 548.0 750.5 581.0 730.5 596.0 smooth off endline line chimney 730.5 596.0 739.5 580.0 746.47 563.63 738.5 553.0 smooth off endline line chimney -reverse on 787.75 576.0 788.5 563.5 endline line chimney 764.75 596.5 764.75 596.5 774.5 595.5 782.75 587.75 smooth off endline line chimney -reverse on 793.75 517.25 792.0 541.75 endline line chimney 634.0 524.0 632.0 505.0 endline point 688.5 525.75 clay point 749.0 499.5 clay point 727.75 439.75 clay point 745.5 550.75 stalactite -align b point 702.25 483.25 stalactite point 694.75 563.5 stalactite endscrap scrap xs1 -projection extended -flip horizontal -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 897.0 1250.5 station -name 10 point 898.5 1122.0 station -name 9 point 917.5 981.0 station -name 8 point 918.0 931.5 station -name 7 point 930.5 794.0 station -name 6 point 918.0 580.0 station -name 4 point 950.0 511.0 station -name 3 point 943.5 470.5 station -name 2 point 930.0 370.0 station -name 1 line wall 943.0 506.5 944.0 487.0 940.5 471.0 925.5 466.5 940.5 447.0 924.0 432.0 915.89 424.63 921.0 421.0 915.5 416.5 smooth off 915.5 416.5 909.0 415.0 908.0 410.0 smooth off 908.0 410.0 902.5 409.0 899.0 413.0 smooth off 895.0 414.0 881.5 403.0 895.0 396.0 908.5 389.0 912.5 390.0 917.5 386.5 smooth off 915.0 378.5 920.0 370.5 912.0 363.0 907.36 358.65 912.5 351.0 908.0 345.5 902.63 338.94 901.0 320.0 900.5 310.0 900.0 300.0 903.5 300.0 903.5 295.0 903.5 290.0 917.0 286.0 917.0 286.0 smooth off 921.0 275.5 916.5 274.0 919.5 268.0 914.5 262.0 914.5 262.0 smooth off 914.5 262.0 917.0 257.5 916.5 252.0 smooth off 936.0 245.0 936.0 245.0 953.0 230.0 944.5 223.0 smooth off endline line wall 861.0 1249.5 857.0 1191.5 863.5 1191.5 863.0 1186.0 867.0 1184.5 smooth off 861.0 1182.0 860.5 1176.5 853.0 1172.5 smooth off 852.5 1162.5 844.0 1158.0 845.0 1142.5 smooth off 871.0 1114.5 868.0 1096.0 880.0 1045.5 889.5 1042.0 899.0 1038.5 888.0 1029.5 901.0 1023.0 911.4 1017.8 906.0 1014.5 906.5 1006.0 907.0 997.5 911.5 991.5 905.0 987.5 898.5 983.5 901.5 970.0 888.0 967.0 874.5 964.0 876.5 953.5 871.5 944.5 smooth off 873.0 934.0 869.5 928.5 869.5 928.5 smooth off 880.0 921.0 883.5 923.0 880.0 911.5 879.4 909.53 891.5 898.0 899.5 896.5 907.5 895.0 906.5 894.0 906.0 886.5 905.5 879.0 919.0 881.5 914.0 859.5 911.34 847.8 907.5 841.0 907.5 841.0 smooth off 907.5 826.5 911.0 814.5 908.0 798.0 899.5 788.0 896.83 784.86 906.0 786.5 905.5 775.0 905.0 763.5 916.0 760.0 910.0 729.0 904.0 698.0 911.0 699.5 904.5 686.5 898.0 673.5 898.5 665.0 899.0 654.5 899.5 644.0 902.5 639.0 880.5 615.5 858.5 592.0 851.0 598.5 848.5 578.5 smooth off 848.5 578.5 853.0 571.0 849.0 565.0 smooth off 860.0 561.5 853.5 556.0 868.0 555.5 877.55 555.17 888.0 552.0 888.0 552.0 smooth off 888.0 552.0 894.5 542.0 900.0 540.5 905.5 539.0 911.0 521.5 919.5 527.5 923.27 530.16 923.5 522.5 931.5 519.0 939.5 515.5 947.0 513.5 943.0 506.5 smooth off endline area water l153-922-620 l117-939-614 endarea line rock-border -close on 936.5 788.5 930.5 794.0 935.0 796.0 938.0 792.5 936.5 788.5 endline line border -id l153-922-620 933.5 607.0 adjust horizontal 932.5 949.5 endline line wall -id l117-939-614 -subtype sand 952.5 223.0 951.0 227.5 952.5 238.5 947.5 243.5 942.5 248.5 945.0 257.5 942.5 266.0 940.0 274.5 943.0 272.0 943.5 278.5 944.0 285.0 942.0 303.0 942.5 311.5 943.73 332.49 940.0 341.0 940.0 353.5 940.0 366.0 943.0 381.5 946.5 392.5 smooth off 945.5 396.5 945.5 408.0 951.0 431.0 smooth off 950.5 437.5 950.0 448.0 952.5 464.5 954.02 474.51 947.5 470.0 950.0 480.0 953.42 493.69 949.5 494.5 950.0 505.5 smooth off 950.0 511.0 959.0 514.0 955.0 523.5 950.5 529.0 946.0 534.5 945.5 535.5 946.0 543.5 subtype bedrock 946.5 551.5 942.5 555.5 942.5 563.0 smooth off 933.5 607.0 subtype sand 944.0 608.5 932.5 615.5 947.5 622.5 953.58 625.34 940.5 623.0 940.0 631.0 939.41 640.49 935.0 637.5 936.0 653.5 937.0 669.5 940.5 660.5 938.0 679.0 935.5 697.5 941.5 688.5 934.0 705.0 928.07 718.04 932.75 718.25 936.0 721.5 941.0 726.5 936.0 740.0 940.5 751.0 943.04 757.21 932.77 775.06 936.5 788.5 939.0 797.5 933.0 819.0 935.0 833.0 941.05 875.38 931.0 906.0 941.0 913.0 smooth off subtype bedrock 941.0 913.0 933.0 933.5 932.5 949.5 932.0 965.5 921.5 972.0 921.0 989.5 920.67 1001.01 920.5 1006.5 920.5 1006.5 smooth off 933.5 1011.5 924.0 1052.5 924.0 1052.5 smooth off 912.5 1063.5 914.0 1063.0 914.0 1073.0 smooth off 912.5 1087.0 905.0 1097.0 901.47 1102.02 902.0 1111.0 902.5 1119.5 898.5 1112.5 898.5 1122.0 898.5 1131.5 917.0 1138.0 917.0 1138.0 smooth off subtype debris 917.0 1138.0 918.73 1192.95 918.5 1195.0 917.19 1206.7 930.5 1208.0 931.0 1250.5 smooth off endline line rock-border -reverse on 937.0 600.0 919.0 590.5 925.5 595.5 922.5 593.0 919.5 590.5 918.56 585.99 918.0 580.0 917.48 574.43 928.5 580.0 942.5 563.0 smooth off endline line rock-border 890.5 897.5 915.5 897.5 adjust vertical endline line rock-border 879.5 918.0 909.5 918.5 adjust vertical endline line rock-border 869.5 928.5 872.0 931.0 918.0 927.5 918.0 931.5 918.0 935.5 871.0 931.0 870.0 936.0 smooth off endline line rock-border 873.0 952.0 885.0 956.0 898.5 952.5 905.0 959.0 smooth off 886.5 959.5 888.0 963.0 878.5 963.0 smooth off endline line rock-border 844.5 1139.0 872.5 1139.0 adjust vertical endline line rock-border 843.5 1150.5 887.5 1150.5 adjust vertical endline line rock-border 846.0 1158.0 868.0 1158.0 adjust vertical endline area water l151-964-516 endarea line border -id l151-964-516 -close on 940.0 353.5 942.5 563.0 adjust horizontal 965.0 565.5 963.0 351.0 940.0 353.5 endline line border -subtype invisible 871.0 931.5 918.0 931.5 adjust vertical endline line rock-border 853.0 1172.5 865.5 1172.5 adjust vertical endline line rock-border 897.0 1250.5 903.5 1235.0 931.5 1229.0 endline line wall -id ew1 -subtype invisible 931.0 1250.5 897.0 1250.5 861.0 1249.5 endline point 918.0 580.0 station-name -align l point 930.0 370.0 station-name -align l point 897.0 1250.5 station-name -align l point 917.5 981.0 station-name -align l point 930.5 794.0 station-name -align l point 939.0 247.5 station-name -align tl point 940.5 246.0 station -name 0 endscrap scrap xs2 -projection extended -flip horizontal -scale [295.0 203.0 995.0 207.5 0.0 0.0 0 -36 m] point 690.5 1121.5 station -name 13 point 773.5 1069.5 station -name 11 line rock-border 787.0 1065.5 773.5 1069.5 777.5 1073.5 788.0 1072.5 endline line rock-border -close on 788.0 1050.0 785.0 1032.5 778.0 1036.5 773.0 1044.0 773.5 1050.5 779.5 1059.0 786.0 1061.0 788.0 1050.0 endline line rock-border 792.0 1028.0 772.0 1020.5 761.0 1007.0 endline point 722.0 1106.0 entrance -orientation 160.9 -align b point 760.5 1101.5 fixed-ladder -align tr line wall -subtype debris 791.0 1006.0 792.5 1037.0 780.0 1051.5 785.5 1081.0 smooth off subtype bedrock 735.5 1106.5 endline line wall -subtype debris 716.0 1092.0 723.0 1089.5 725.5 1085.0 733.0 1083.0 735.6 1082.31 750.0 1071.0 741.5 1069.0 smooth off 741.5 1069.0 721.0 1044.0 721.0 1007.0 smooth off endline line wall -id ew2 -subtype invisible 721.0 1007.0 761.0 1007.0 791.0 1006.0 endline point 761.0 1007.0 station -name 10 endscrap therion-5.4.1/samples/basics/surface.jpg000066400000000000000000000072341307545355600202560ustar00rootroot00000000000000JFIFC  !"$"$Cdd"4!1A"Qa2q#3B!1"AQ ?rL1l,ZZ;'DuմQ͗U3IQ[ߜ-KWOZH*m%lǍGz3ڜЈg>Ⱦ~0E=~^̟WDD7:n6h /XB=){\bIf4UC*bۜSRQT9~UKtm}kq{` WSSTx,<a9*8JjF *NصMC%dT]5ǂ-~~JIUBȖv}ů&/uEq0ˤuQZᴂbKIi r$e<[[wA[BA4ˁ_U Ll [?/όbr3vQn;Tp+Ƒqqc*2/JB .ӨZw2&Hl53M.֒Z>ϑLL<a4*AU $ ~o||jZ29ctoZ2jAk \ .G9Xi_pn40m!7GL,).'aSv}(3H'Z ^U!ed٤sK,%Rx^,/o= _M_WR91$ /?,'IP\,,6 mp4V>%H/"aꃶAخEoզ#E|P,i& ݸ'ٷ;W+ 2lIcG7[{~1hu\\cꤊM/&A !d2snjzbbS1[oy5\-8+i@>p"M)n0 FPp9a]GL@߉@, nvL}]j!6d`a\r|Yd{xEcCBi$.[RMo!R}eU.?WUc}LQHڒvسHPX+˩\)Xm VI/l/EXi8!zdS2IcmH7$H6# i\>O=V_OU{x:z,S=,$c`NWfu!@I/YyY)ư\jU H7{m;S@OSX-q=(ɔdjyVfe\;\liU' zf3y?8Gu2HDГp@c<2xlvv6sr1F7Mp5u< xFT(e*o{o;PNR&خs֓o4ʉcfٯ;-)/<)&5?N덃uVYAv,n [rT`R &{, T.11/ivc A*066+7$7F庑XY>|LLd68cS%Dļ6$' gٽlfG$XiLLE ^oƪ*{x{bb`U3}LHͭI44I*{k8Rn.y- 晬;I !lmsc)SƯ1tk&&-幆R'i#B,mŰɔeFJ!'iq @]ܜLLL_therion-5.4.1/samples/basics/thconfig000066400000000000000000000011031307545355600176350ustar00rootroot00000000000000encoding utf-8 source rabbit.th #!PROCESS #!TITLE 2 Drawing maps in therion layout water-blue code metapost def a_water (expr p) = T:=identity; thfill p withcolor (0.0, 0.5, 1.0); enddef; endlayout select pdx@rabbit select pdp@rabbit export map -projection plan -output rabbit-plan.pdf \ -layout-map-header 0 0 s #!IMAGE rabbit-plan.pdf export map -projection extended -output rabbit-xelev.pdf \ -layout-map-header 0 110 sw -layout water-blue #!IMAGE rabbit-xelev.pdf export model -output rabbit.lox #!CLEAN rabbit.lox rabbit-plan.pdf rabbit-xelev.pdf therion-5.4.1/samples/cave-list/000077500000000000000000000000001307545355600165415ustar00rootroot00000000000000therion-5.4.1/samples/cave-list/thconfig000066400000000000000000000041131307545355600202640ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!TITLE 4 Listing caves #! #! When surveying caves in some large area, you often need to generate #! an up to date list of all caves in that area. In therion dataset, "cave" #! can be defined in several ways, depending on the level of cave survey. #! #! If you have just surveyed entrance station (e.g. using GPS or standard #! surveying methods), all you need to do is to assign entrance #! flag using source centerline fix cave-1 123456 789101112 1234 fix cave-2 123333 789101122 1256 #!CODE station cave-1 "Unsurveyed cave" entrance #!ENDCODE #! #! If there is some explored passage behind this entrance, but you did not #! survey it properly, you should add also continuation flag #! and explored flag followed by explored length. Explored but #! unsurveyed passage lengths are also part of summary statistics. #! #!CODE station cave-2 "Unsurveyed but explored" entrance \ continuation explored 80m #!ENDCODE endcenterline #! #! If you have properly surveyed some cave, its data are usually in some #! survey structure. Survey becomes a cave, if it has main entrance #! station specified using -entrance option. Example: #! #!CODE survey small_cave -title "Tunnel cave" -entrance 0 #!ENDCODE centerline fix 0 123488 78910888 1244 data normal from to compass clino tape 0 1 100 -10 10 1 2 200 -20 15 station 0 "Main entrance" entrance station 2 "Second entrance" entrance endcenterline endsurvey survey xx endsurvey endsource #! #! If survey contains survey data, but it has no main entrance specified, it #! is not considered as a cave, just as data organization unit and thus not #! present in the cave list. Only surveys containing some caves (i.e. entrance #! stations or surveys with main entrance defined) are present in the final #! cave list table. #! #! After caves in your data have been properly defined, you can generate #! table using #!CODE export cave-list -o caves.html #!ENDCODE #! #! Resulting table looks like this #!HTML caves.html #!CLEAN caves.html therion-5.4.1/samples/map-offset/000077500000000000000000000000001307545355600167135ustar00rootroot00000000000000therion-5.4.1/samples/map-offset/cave.th000066400000000000000000000003451307545355600201700ustar00rootroot00000000000000encoding utf-8 centerline data cartesian from to dx dy dz 0 1 5 0 0 1 2 5 1 0 2 3 5 0 0 2 A -5 -1 -5 A B 5 1 0 A T 4 0.5 -5 endcenterline input cave.th2 map m1 s1 endmap map m2 s2 endmap map m3 s3 endmap therion-5.4.1/samples/map-offset/cave.th2000066400000000000000000000036751307545355600202630ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -113.5 -109.5 471.5 403.5 ##XTHERION## xth_me_area_zoom_to 200 scrap s1 -scale [-128.0 -128.0 482.33 -128.0 0.0 0.0 15.502382 0.0 m] line pit -close on 207.0 62.0 178.0 58.0 120.0 40.0 167.0 38.0 214.0 36.0 236.0 66.0 207.0 62.0 endline line wall 341.0 76.0 300.0 74.0 254.0 84.0 231.0 77.0 208.0 70.0 155.0 54.0 131.0 56.0 107.0 58.0 20.0 59.0 20.0 59.0 smooth off endline line wall 17.0 28.0 48.0 25.0 83.0 22.0 119.0 21.0 155.0 20.0 209.0 41.0 249.0 39.0 289.0 37.0 340.0 38.0 340.0 38.0 smooth off endline point 334.648 59.0526 station -name 3 point 236.218 59.0526 station -name 2 point 137.798 39.3726 station -name 1 point 39.368 39.3726 station -name 0 endscrap scrap s2 -scale [-128.0 -128.0 482.33 -128.0 0.0 0.0 15.502382 0.0 m] line wall 255.0 219.0 260.0 167.0 239.0 170.0 252.0 148.0 265.0 126.0 184.0 146.0 158.0 129.0 132.0 112.0 123.0 155.0 122.0 123.0 121.44 104.98 121.0 81.0 121.0 81.0 smooth off endline line pit -close on 169.0 147.0 162.52 138.1 217.0 136.0 217.0 158.0 217.0 180.0 207.0 159.0 192.0 157.0 185.73 156.16 173.0 152.5 169.0 147.0 endline point 260.0 142.5 map-connection point 100.5 135.5 map-connection line wall 111.0 86.0 118.0 117.0 94.0 136.0 114.0 151.0 134.0 166.0 124.68 122.82 224.0 178.0 233.0 183.0 245.0 182.0 244.0 218.0 smooth off endline point 230.218 160.0526 station -name B point 131.798 140.3726 station -name A endscrap scrap s3 -scale [131.798 140.3726 230.218 160.0526 0.0 0.0 5 1 m] point 174.5 222.5 station -name T line chimney -close on 175.0 234.5 167.5 246.0 154.5 248.5 154.0 217.5 153.5 186.5 182.5 223.0 175.0 234.5 endline line wall 147.0 268.5 155.5 256.5 186.0 251.0 183.0 228.0 180.0 205.0 159.5 202.0 152.5 181.0 smooth off endline point 141.0 273.0 map-connection line wall 145.5 183.0 149.5 204.5 155.0 248.5 140.0 265.0 smooth off endline endscrap therion-5.4.1/samples/map-offset/thconfig.1000066400000000000000000000006031307545355600205750ustar00rootroot00000000000000encoding utf-8 source cave.th #!PROCESS #!FILE 1 #!TITLE 30 Dipsplaying overlaying maps in offset #! #! Assume that there are two maps m1 and m2 #! (m1 is above m2). By default therion displays #! m1 overlying m2. #! #!IMAGE map1.pdf #!CLEAN map1.pdf select m1 select m2 input thconfig.layout export map -layout l -o map1.pdf therion-5.4.1/samples/map-offset/thconfig.2000066400000000000000000000011711307545355600205770ustar00rootroot00000000000000encoding utf-8 source cave.th #!PROCESS #!FILE 2 #! #! To display map m2 in offset you need to create a map #! containing m2 and specify offset and preview type #! for m2 in this map. Example: source #!CODE map m12 m1 break m2 [0 8 m] below endmap #!ENDCODE endsource #! After selecting the m12 in configuration file you #! receive: #! #!IMAGE map2.pdf #!CLEAN map2.pdf select m12 input thconfig.layout export map -layout l -o map2.pdf #! Joining arrows are created from map-connection points #! specified in scraps that are moved. Otherwise these points are #! ignored. #! therion-5.4.1/samples/map-offset/thconfig.3000066400000000000000000000005171307545355600206030ustar00rootroot00000000000000encoding utf-8 source cave.th #!PROCESS #!FILE 3 #! #! If the situation is more complicated, e.g. there is m3 #! below m2 #!IMAGE map3.pdf #!CLEAN map3.pdf #! you need to create more complicated map structure #! to handle this. select m1 select m2 select m3 input thconfig.layout export map -layout l -o map3.pdf therion-5.4.1/samples/map-offset/thconfig.4000066400000000000000000000005131307545355600206000ustar00rootroot00000000000000encoding utf-8 source cave.th #!PROCESS #!FILE 4 source #!CODE map m23 m2 break m3 [-8 0 m] below endmap map m123 m1 break m23 [0 8 m] below endmap #!ENDCODE endsource #! Then m123 looks like this: #! #!IMAGE map4.pdf #!CLEAN map4.pdf select m123 input thconfig.layout export map -layout l -o map4.pdf therion-5.4.1/samples/map-offset/thconfig.layout000066400000000000000000000001701307545355600217510ustar00rootroot00000000000000layout l map-header 0 0 off symbol-hide group centerline color map-fg [100 100 80] origin -10 -10 0 m endlayout therion-5.4.1/samples/morphing/000077500000000000000000000000001307545355600164755ustar00rootroot00000000000000therion-5.4.1/samples/morphing/sample1/000077500000000000000000000000001307545355600200375ustar00rootroot00000000000000therion-5.4.1/samples/morphing/sample1/cave1.jpg000066400000000000000000000470601307545355600215470ustar00rootroot00000000000000JFIFHHC(#(#!#-+(06T[n^L6Pῐ#/Fm m O\o\mk}E_(mK4JsW6Mv}v-yjI 27UM j')p1 U*"۔RPzj㘛(tOg'Yb_Kj%)Ԇ=ҔUҌlT2Y'[c7J;w A5*Dx›]ɰmmEvUxNOЭ'fTOYc<A`PR t52Z K)kDZ1JadT*_E`]Y'b ^JגdD nW5a+OR&xų|{4Q%HCAC@A$ЀR1ƔW(i" "o w` RP V) d װD@FsjVYWoN} Qc4[ \GFT p yܠbRji#Vy:A5ZjAH{^Nq-7ݔcuO9y(=AlL MJS\l@/6n [HҊ4f1 m<_S[jt kRO*'ގu2(y ^m҇M)G rUULTmZ]QMck aJ=5gE+&FX WD]_">PBJ^CN]I$D*' 6B4 z~QF?{j~6$F.jגrLnvxe;7Q4a7o> <09[ VbX. A\h>Ei@R<"W~@k$Iw K,iX4T[%|śRzqsOZjJhNl3Ǧ*/8M^у)rI(iʃ괣fuڣt3RJ;J6JqAΚ{'Fy\qJwr+%%Q=]w1+mСH.2Іnh'=ҕcX)N1VjjOcj*] 3'ɿAł*/D2o$ ; 6RW\1#0%M\q̙m+O'51,EU}f3w/ipK$H>`O"ABPG@MaX`g5Tk }0**H?Avâ`\j$pH `\ Y<,饘,mzzN ߩ'YAISVrY[n_EciYI,BSP9k?$(9=#NZkg'ƚOH0ep5֟?M'k ne2,:h`!D@N7_ ,t_3!\ `\FCq\:V .M^Py2F̾X s?1xɤ VXٌ |pY L9٣ ?# "5 ug , jX*A ²v|T4]H%KF b— UEBh m6 ܒ@fG3Tj:l %cA9?Yw g+y=6s`n_ "n~|;@@;h~ ,y!wǐNi%W\ #Le ko,ݯDVRVjA[vme u6q؞I86EtO.kTn" & Y Z*zl" J<2 &$Y4`C@P{#TTBўx\2F p!.>+HTD STjywZުݥ%񹽱Eflc'UFJ(j=gEK-MG $G=(szTFMԗ1X4' KJX Ipncٕ,+`ٗ+n _&7PP+ i͊47"Do"Q'Xf_ߐ3Xܫ[EtrB|XCAQU 3%E,rP( *whQ%Vrsڭ5a1ڼW(w/'5[P y)J4 i%`tܼ3[9AAY@kz-R*rohlu"O''٪(ZI@NX :E`; -(\g5-DŞwZRͤ^׭5 9ʪ )R7~_n.;)zߧ]ԡXMr6%xt{{?fsw]dTi‹6e[]Hh mQ KcR_H<Efܤfg *vD*$@O\x%t2%.QvDC3ADVL&`3.!|4@(d<X"-`IvյI[V{f ^xkOM5rKh-TMtRǣt֖*jOcMmZ(|?/PZYyC,Cn,rҒKY;_h$ETCh-hmAE%db ,ApW#u(hKK({g9@d+%e^'gZJaYhQVJY`)/,Q4IRCiz*^$/ 6V4TpvY1 3zM`7\o3HA4|K٠\W 2㇒Q/+ ?S}5`)C|x=PzM;kٗ:Q' X~1M[x9M-Szz )TjFO[d1Q+TRw7Hf\-sgh=MVfQ|z6 Mz`_!VIrł! &B4]` \+v@D.D(E.I՗(SV_,vTk26(,#QBDV@J8c'" d@f+I1 .L4@F_?F_?(Fbh" Z+@OHTIZ} kR&(Kwmw*O@%1( >ˮ/`o(6^5`WPњS:éY"WM䨷|`4P_1xLo@u[- rI9j2Y$U.XS&RyKl$ WR5fe"@RIgKKR$ҦIc|VB>B>8,I ?NX:PdŝOw6N*JۂoSxvG}FU解otIZ{߂U/kRJv<_۾7eRufewoNR6>ri0KR?]Ջt"w! D%D*|y(W/&{B&]T)3AY_ eJ,eਐe@O%B!B d=#5.ؙ\א(jK䜱;.Jbh’5,|~ e~Ip\0Ml-+2)@?$V>च}ݙYVTcSM5meZ%F\בCi_8kkܕ'|^j,ɫޖQ(*TiQ]}t;ؿGV>ojqSyhe6%~:)-Mvt᜾rnN-}g)=-f=QjJ_K|q vr*|pr[gLVB@Df%8QViZ %H:]ecDiL [ReSK=VR&0*kϡ " U99H[NA||0{ VX׶/5eՁVjKqkxw~#UAf* |O"P+%"k~E3%eR* G+")z1}$ki1qQvrKOcϡ7\vcWMڐCZRTsԳSN jOSO1jL# 5 Q=o'--]۝r#Eӊ(OM|x:ծV%%i٣EדyX|&<&J6ۢ_+Uh " 6h;bQj~|_j)Je[< @ХL,L6Qeeh  UD %m`m{XY5Fo=7+3Ym3+||}ɗvDoYeŸϐ4 3~@ݑ*~@2X , k7^_b&48}U1됪lix(%~ tsԂ=d꒮ 3{jNLξF4d bEG)Nʦi6oM8KsܟgyZ r~-8GZf>|EM,pO ^ZvH8-i?(kP=E}95ty:V3Ҹ"d`nZ9jO|֜sj76%)NOV#).fjoS|_DDF %B_h4IS(Wَ6M3@ L婯Jؘ4 p&PKVxH[-p6e4e5b 6f *|؂'! 䕐fj4Ƅe,X( 0 K(ZJiK.;0hSKM`Ʀ+sqrTu3*y^H8d0ũ+O O=?Ӽf FjӴ Q4h?"@I FLŔN=G:E/'{}ܧl~N"ѹB.pϔwӒ O{u/\#IHbs :.HtO5r:.ºr23m'#uH[ ItɕKњъ~נ5(rbehC 6-`կ!j eO&ժYC@kr +<{LdR[ɯaT &D&rԅ%lJ CSrռzx(/-ovPVTGQN6SҔ/n{b`rg*k2W5(s+nT Im{5'v)Rm^II} IFm B6b+<lX.03,gIo3hIOUFQ\zQ_^+ɔt,fiB)$iNZ"^S][I[i#mVweᣭQl&:V]SKVrRQR\{nx8SZ/:auj".\_'^0r ߩJ2~IGN1Ft3Ҩ9U.OWN /3(4g9ViyEhޛoF$R2uAK )éR9wK_+[ZB &43 V!J6To5M;Z'> <kx"O"E;Ȱ I:`gY9G;(J)ta֛ܸ|sۛQbm6frؓC|Rn{EORu$\:SwIњR|3:E9&[Ĥ]źy[i]\a?ɇi|Ɯo5ZqJIQo\ek fmZ@Rz~ٔ-&ISԚӃlS<CR} TTVK./Zro֞I:n"Me rKG;%/ABӷ޺QғԖMUr q#-#ͭ*6~qim-Jխ%'m -452rMln)m@QoNZVhOGpme^ :ZB75!nҿ$ei?S2 LppeO7vR9KOSRqn4g;\pب%$SY9F+&&b~Qn%HM^mrN1ԋIjc7==1);s.嚆)[F_JqROcv`6YcКi41IEvvܡ隌-R$G(KWmR|1)(9j}Q^0{JԢB*y_}Ue Nozܡ%Lhmj)s¶+-R;IՑc %+Ք1(҄!X4,uQ0c[RJ4'QH,fF 4z#%Sn\#. ٠Djبn%ԊJDbHx! aX2Kk3OI(mOA_%>TܶөJiѼQZSGX9xpgIRmgVUuLjN:_O):gF Lq)U *.t](@?g`MMVBᖔ'$:zKK1-=OUZoS\%|'?(kͯ=t+/G%ƤS|ɿCF4:CF=gw*扵>GՎ7A~M:5M(';&媡KM? ~훃mGZє=ay9C|SX;K 7J;xA-$('-sm-M&i7ۖT<Ӕa(g8=knjORq̩ t4$nqw]-+"0Ռ? kJwQk{d.Aup(iaH2@KBw,.@P"Y Z삒U䔀x nLADL}~I0Ю `)epP[/-"@J$ み@r֓U6G8OcTkRSRՊn1w3+AmoJ)+Q糣nTKѭ}]waiӊUu4Gk/of| ,$ ӾH}+?diQj'emUrgAxXeiEd끄Hbskڱ2rՓ;"=3|mdшq运%QxApƴ\ㅓjZɠn>K9.ggR2ݩ(IIh5>E)Dғ gʎz_ ĥɭ7uH%I`D~쬣*J47F5qiJ#OX'vz#εOI0X-5(idt%j^NzR㣴\JNuYўɫ_EףLH>$ܗ j*)'^B  rh 2Ң %@/tj\$.J9OVoSnU`z#sR.$ lpe ~ ]6oG M [Uqx3 ڦN[ci*w+UM*W _, iL^*/,Ť٦7cf2 YY}]'8key:fckUV_,"iΓ:NӚxkJѮM"rUy4)Jaz(&I@r]sX 0·%8߳^ . e 㡣-\eX qԃCTK?NyeS)+]8~PK-`O+kZPSRݕ/7Zqqpm#*2_UFmG4h.4a6]6:RkE50AV YmIE=uI(A}>knL.G'xnif}֤&ՠc;u?ܙ71[ڗQ3{&-HI Ì_1J+ ;4 sD[j5,ՌˀYLkoqTs r^(^xY,O)MNrnܿR Zji4kb9a4n5Rj7)RG9?*( ,IcZب*U^L/N.Zr{Zh`n J>F+t|.SRzA&z#I(. ¼_$l+lk,1K$4^I%F~ |NFSbri.RXAVʎF33B J~2n8f*T!;$ \om&|#Rӧ9iBqtciYuEW@ %oi>I Vgo *{rk>J|ZD~F ed&qM;S2mtY%MXK}_Z0' h7- >EQQ>߂m.Mco, Tϐ \2V^$T,ir5}$+Vg.+rVrTDe`48* ڒ宒~KƓX|8ec%R9Fn.:gjjQ+EΛq{%:+ɧ=[f@w%)7xe<[|䚮| d'tF0\(̞Յo+mV-(EmeQ| 6G-imro˼UݾJ?j5c)E/ڲJs{tQ\Ҥ c墟TtI?gj!8? ӮM`B\TPW +FP#A@d?;` 7DTȧ:\2_֗K嚒@e5UVP"" (B]Al rjMXv[@e*jU"" $H]]` -SFLifآƬ7idE/F]K 5a''Q5Om=NcR _!ɈIrBř<BAP%$em F*+ +٤Fwb!KuI%ߒ K(v2[v:֊WHݚ.UA؃;Yqֽ' 'TʉUc)& '@@D͡܀,6U> /5Y75WMVUoBk^<*)g("D%%BIQBTe,^/dRɣ{3I$~63mOeGvVt[@[ۂۀ5n^AĶniށhv{- dhwn[Ji0Ը.MV: '}ށJފ"15+ pfmHƦӎڿEtfܽAEF%:ҌCMIl!iv, ATcvTckA>mjZQv4zʒp&1U,GkV2sMwQsғ -x`1J xұ\ukj'N֐HnWh(OaxEyd }w&l?"ˠ.J+UXM2$XˀLgVthb0ADEDDFcX rj@]c}xxDD U ""VT -גL X lI`Ҕ.ʕڂ\Qn͕ih,@wǔjR')}ܸ|8NզsTsm=UqMCKM@0Rrk%x:VbZ{)߳oJ<5ftv)N1t"QbQtivp?2~^~(* c4u݋i+g' n,"'-p wROONkպ@7ZmsL5>sK$>߀+^I|ms& Mx*{f[fOSXo9s%&V^70SX>XG eH+$4X6&ܬ\KevXW银 &{. ^<3T Ehs<,\ &߀mx`f ދAa VAg-/4y= "t+ RaU{*4lh;\f'&KN9%IS9^0I$Yix(c\~E5, 8&9NR_(ا5M[;(EpZRJαuwIgDsMx:&dXZWu'-]hv CUMag(ۤI6{υѶEqեOhO1ݩb/%CD(VR4)~2կZa8hYgwDV7m%v:ԗ9fRUԘ0q\+t" !ؔ]AyDZ((.Xl I04+`@h,tOM;ȕ&?rPUpD@*vr\Igk:նJslOMg_.UHAH46!kZ18o㞍nEjERIXCٙA4F R -?&qzmTgxL8f()i9LWT cTi7^86&[^/7@c߰V} 窫W2kϳvyn5)]:[dhOKM>ɘŦ-{q}0}wɴ}oVa7\|2̮R ?,|h*ECJDXFI;Ԟ?Si]Ls$׶I1-ԭC%jQYZ/)r<_u=m5bW୎ fsMTgGEϐH JX&k(|oet;Q\Eq@45%IA<PJqYNjqL"DQH2h?C9J4Ҵ:'i4ee^׷ *IY3)EMXFLs>XE3R?oѷeJȄԛ\3twnfwɮ#1/jKQԹeU3JQh4Aa n 䀁$`T4K^(;F|Fo"_t_~w?gRdS̩Uj XY(IDa*/]R`%hl, $0+XcfoL8ବX@}jn| $'%\&gr[ <V"Ғ])fYo(Z_nv8Ond8 ]O:i(Uf޴b鼃]Iz+a5h+nh/&JuHnW )#1TTb ዓ1/-rb\AVmcU>M[rm+hZVj{d/yج[nSؿ&̡L(vgM%5fTLiIK G>hh ?nɻ8ɥviK 4EjɵL;4N&k6`VQ4ٛ{ ԛZ70yM7*N$·ȴFynMFr73Ƽ|;/;MWA㑷iD $OS(Z`ck*̒aFQ4TX>1i`h˔JJ0 39/k%R187nySIԢMJ+ gRq5%LrzR=XA4ǣ]p('v`&9RIMGs^@߳MR5忑v5%!SA՝4amot]& )ɧ9o%qf4!Vw}݇9Ap?4=8}1wݘmӦ"'y+=>K sܷ9+gOQJVs'2mlVuc,5aaߣ15%jnm2,S FDMtܘ'ŷ_N?MԒ .HaRm_B8%5~ >@Xѥ'f !7AY.d3RX홛IBjOj# J,WpJ^¬h pixEe/)3I*4]5v k(Ia/͖o P.8\|D튺"$eϢ/ !K9x. &hgL!V#X _V/V(.VNI6RۛH̵mRMZq^ 6qԬ<_6R]s{Uܗ* {OwɴvA\lIZ)rQ|G ^yNr1XFM8~86ÃcNjn\㐡r$"3_\s|tD@ ;g7!5_]!D@ư ?6|,W oo8%m{ p9&[߀5|V x `ieFU|<V9 ?%| 5큗銷D 6̀l ]2y,䂕0M~z ~{g^J6߂d K@&Q,Y~H/' }DPe`BLUEћ(qU<BDD]p)]`$E`O2^@щ- Z PϦani6wk&V[t`p>YAAW8ǖ*K+, r9 2ΛRVcWS/2u;^|tQQ28 t+4> 2P 6p] qHy @H Z+F{bh)& ݒ]y%.p\k5cYrKд *w| '!Urn¨@.Hp\+$d9@V.v7Pue^ H 2(ekDqӎrrze}NvaXۖ[k]h h\hW3Btherion-5.4.1/samples/morphing/sample1/cave1.th000066400000000000000000000014341307545355600213750ustar00rootroot00000000000000encoding iso8859-2 centerline calibrate clino 90 units clino compass degrees data normal from to length backcompass clino 1 2 11.94 306 128 2 3 4.54 200 133.5 3 4 10.91 319 140 4 5 6.32 10 95.5 5 6 15.84 97 87.5 6 7 4.09 137 139 7 8 7.35 105 75 8 9 12.91 23 117.5 9 10 29.53 133 60 10 11 14.54 44 125 11 12 16.01 89 105 7 13 18.78 257 117.5 13 14 11.32 342 88 14 15 15.05 270 95 15 16 6.95 150 75 16 17 3.87 94 80 15 18 2.6 0 95 18 19 2.86 278 120 19 20 2.9 326 100 20 21 4.71 57 78 21 22 8.41 332 114 22 23 8.69 347 67 23 24 5.05 24 94 endcenterline therion-5.4.1/samples/morphing/sample1/cave1.th2000066400000000000000000000010211307545355600214470ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128 -860 736 132.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {0 1 1.0} {0 {}} cave1.jpg 0 {} scrap hlinena_s1 -scale [-128 -860 736 -860 0.0 0.0 21.9456 0.0 m] -sketch cave1.jpg 0 -732 point 347.0 -170.0 station -name 13 point 360.0 -40.0 station -name 14 point 21.0 -301.0 station -name 11 point 134.0 -298.0 station -name 10 point 424.0 -629.0 station -name 9 point 471.0 -374.0 station -name 8 point 533.0 -301.0 station -name 7 endscrap therion-5.4.1/samples/morphing/sample1/cave2.th2000066400000000000000000000066231307545355600214650ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128 -860 736 132.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {0 1 1.0} {0 {}} cave1.jpg 0 {} scrap hlinena_s1 -scale [-128 -860 736 -860 0.0 0.0 21.9456 0.0 m] -sketch cave1.jpg 0 -732 line wall 279.0 -25.0 292.0 -35.0 309.0 -48.0 315.0 -57.0 321.0 -66.0 331.0 -78.0 337.0 -81.0 343.0 -84.0 354.0 -96.0 346.0 -103.0 338.0 -110.0 341.0 -120.0 344.0 -127.0 347.0 -134.0 344.0 -142.0 344.0 -150.0 344.0 -158.0 344.43 -160.14 347.0 -170.0 353.0 -193.0 351.0 -208.0 366.0 -217.0 381.0 -226.0 400.0 -225.0 417.0 -234.0 434.0 -243.0 449.0 -257.0 459.0 -269.0 469.0 -281.0 482.0 -308.0 482.0 -308.0 smooth off 482.0 -308.0 470.0 -328.0 472.0 -340.0 474.0 -352.0 470.0 -366.0 466.0 -377.0 462.0 -388.0 458.0 -403.0 450.0 -406.0 442.0 -409.0 433.0 -411.0 410.0 -407.0 387.0 -403.0 353.0 -397.0 338.0 -392.0 323.0 -387.0 270.0 -386.0 256.0 -378.0 242.0 -370.0 212.0 -352.0 206.0 -346.0 200.0 -340.0 191.0 -320.0 177.0 -316.0 163.0 -312.0 153.0 -298.0 134.0 -298.0 115.0 -298.0 111.0 -299.0 104.0 -306.0 97.0 -313.0 90.0 -321.0 80.0 -309.0 70.0 -297.0 66.0 -284.0 52.0 -284.0 38.0 -284.0 30.0 -294.0 21.0 -296.0 smooth off endline line wall 554.0 -231.0 550.0 -241.0 549.0 -249.0 540.0 -250.0 531.0 -251.0 519.0 -257.0 508.0 -252.0 497.0 -247.0 464.0 -212.0 450.0 -207.0 436.0 -202.0 419.0 -193.0 410.0 -189.0 401.0 -185.0 395.0 -182.0 391.0 -169.0 387.0 -156.0 374.0 -142.0 374.0 -130.0 374.0 -118.0 377.0 -119.0 379.0 -111.0 381.0 -103.0 381.0 -95.0 381.0 -95.0 smooth off 394.0 -84.0 394.0 -84.0 425.0 -87.0 438.0 -86.0 451.0 -85.0 463.0 -78.0 466.0 -68.0 469.0 -58.0 469.0 -37.0 445.0 -37.0 421.0 -37.0 408.0 -46.0 392.0 -42.0 376.0 -38.0 354.0 -41.0 343.0 -32.0 332.0 -23.0 316.0 -1.0 316.0 -1.0 smooth off endline line wall 529.0 -431.0 499.0 -417.0 499.0 -417.0 493.0 -412.0 503.0 -396.0 513.0 -380.0 515.0 -373.0 518.0 -356.0 521.0 -339.0 517.0 -320.0 526.0 -314.0 535.0 -308.0 530.0 -307.0 533.0 -301.0 536.0 -295.0 539.0 -295.0 551.0 -292.0 563.0 -289.0 572.0 -287.0 577.0 -276.0 582.0 -265.0 595.0 -256.0 595.0 -243.0 smooth off endline line wall 17.0 -345.0 42.0 -358.0 47.0 -361.0 66.0 -362.0 85.0 -363.0 97.0 -351.0 106.0 -346.0 115.0 -341.0 125.0 -326.0 130.0 -331.0 135.0 -336.0 151.0 -341.0 157.0 -351.0 163.0 -361.0 181.0 -378.0 189.0 -386.0 197.0 -394.0 208.0 -411.0 229.0 -421.0 250.0 -431.0 270.0 -450.0 270.0 -468.0 270.0 -486.0 268.0 -497.0 277.0 -510.0 286.0 -523.0 277.0 -545.0 282.0 -560.0 287.0 -575.0 294.0 -596.0 301.0 -606.0 308.0 -616.0 318.0 -617.0 331.0 -629.0 344.0 -641.0 366.0 -652.0 366.0 -652.0 smooth off 366.0 -652.0 343.0 -655.0 350.0 -672.0 357.0 -689.0 374.0 -705.0 392.0 -701.0 410.0 -697.0 423.0 -694.0 422.0 -676.0 421.0 -658.0 421.0 -639.0 421.0 -639.0 smooth off 421.0 -639.0 449.0 -635.0 467.0 -634.0 485.0 -633.0 507.0 -624.0 499.0 -599.0 491.0 -574.0 480.0 -517.0 480.0 -506.0 480.0 -495.0 476.0 -480.0 480.0 -475.0 484.0 -470.0 491.0 -444.0 491.0 -444.0 smooth off 491.0 -444.0 514.0 -453.0 526.0 -458.0 smooth off endline point 347.0 -170.0 station -name 13 point 360.0 -40.0 station -name 14 point 21.0 -301.0 station -name 11 point 134.0 -298.0 station -name 10 point 424.0 -629.0 station -name 9 point 471.0 -374.0 station -name 8 point 533.0 -301.0 station -name 7 endscrap therion-5.4.1/samples/morphing/sample1/thconfig.1000066400000000000000000000004271307545355600217250ustar00rootroot00000000000000#!PROCESS #!FILE ../1 #!TITLE 10 Sketch morphing #! #! Original survey sketch: #!IMAGE cave1.jpg source cave1.th source cave1.th2 input ../thconfig.layout export map -o cave1.pdf -layout clean -layout-scale 1 300 #! Image after morphing: #!IMAGE cave1.pdf #!CLEAN cave1.pdf therion-5.4.1/samples/morphing/sample1/thconfig.2000066400000000000000000000003161307545355600217230ustar00rootroot00000000000000#!PROCESS #!FILE ../1.5 source cave1.th source cave2.th2 input ../thconfig.layout export map -o cave2.pdf -layout clean -layout-scale 1 300 #! Walls after morphing: #!IMAGE cave2.pdf #!CLEAN cave2.pdf therion-5.4.1/samples/morphing/sample2/000077500000000000000000000000001307545355600200405ustar00rootroot00000000000000therion-5.4.1/samples/morphing/sample2/cave.png000066400000000000000000000314041307545355600214660ustar00rootroot00000000000000PNG  IHDRQ8 wPLTE FHE>dtRNS@fbKGDH pHYs""/dntIME*L- IDATx}wޞm-sO mkmTVЮ?;5JURiݪnz~TWկ~_Wկ~_W/iŋ8pFw\216r0A/| 18183 \4yu@E>8=hY}`0|}5k7ZQ (0SB;vbNND;c3;(.^,4pF1p@?]FqT,^߭12֭~lJ3a5?M|3D'i#"+٠qÈ* U#t޸KoĚlHsy_Lkp,.0<XЁ| pN/Z4< _}w~PX'=!n[0ڀpGm7E1d֓A%aH{efŻ_ .]ƚ!Q*1BԪKn(;4baz參2B}> Z3<`9G!.8?)P3ja(iL1O'QGE3B\$2FUMI8ĔoÄ?l~!$J% Pŀ)~F9^ F`q2T Pr:l1nPWi =5\؍оԚT$赇Vm{4hK|<:=Ot5"FJὛ}!8+PSV<$Gq$!8 XoV15cB2!qm3Hh 6sT4)da^VaX[J#^e/҈H}K(2Kr86 FR"겜o& ?FcV.n 3" dO]~ Ѭ]N'O 5a#_F7A)\zkozP r} Zak c:oH՘4SG,C`4R,ѵ[%Q 1ל`!)N..9)BTa7A]!pA[+vQ94%b՜YZn?n5R *R=ttְ>8nT8wc:>0m5k1aϞu A=;6DϞu3g^ ^>Mz61hIv,"{--yм}o'9j$mחvC@ _ ǬgVHE-6lTFAb~FmmEPA4ӳw~X_0(fb߳AK 9}ׁ9Ѓ,\53 AvlQe6gFؙy_R6~dO^QHgZ%?,Em= $"#= 3}h06!(CmSpOE ȑ~rB/N} /7^`QYfcя Ol=\@d,˲箇 ocNm#Ñ+JYc%`FXqE|*ZH6Q80 ΥS;%s=n"ޑܳA3kBQ _-V,1tc &jp,dNo)@Yv8%6vųCi9.(BH+v\KTR:kPjTH^ [9Bڲ {0x9vh۾>uk_IIJ_16KE6PռD;Q!CE>(ĉ=! t9%Qg%\STjfBO .j7KPWOM$qYj7{SD\Y|vlmJ-3fR9=zi@ 0S4R\C&= p8OB&?14~G: ;E/>.'0\6/d }9{,q\3`(xVbJa3ч@xrG ޙ<[MC x?)` IAXA  tPiM_kfU !0=&% <vKīxAi8 oi@܃ LXzTL&џsvse#9jk>~?Xȯf7t<]F*!'gcBnQocc+ *METxulw!@- 8$rQ1Fy vDQ&,@+Ash*?~A4l"MA5UR{U ǐD+ AG>Xғ?HnL_ZYҿ< m @( 1gAhF0!R'OZO;ʍ x~`-*~ZDܼDT@W6.*vHh/- }@emR3ФجH# WG.X-?$:BPe \4*$T3 hihٲ&ytA$H+egB A!?nE8QE~$̥L-3C%}  :mÏ6 +lF幦mTĉ>ؠb<䑈_'` UbL,G5VQz 3CjoڄoiVo?%94CB(!gk4Em[yUc:q*`d0%H?P#̀'@=8򼥬G6,Ԡ$D;^Z6)V{>שhUYm8!׏*=4903`sL>6or Et6'[ E2t^9&ߒE]p+ikl[j#0- c*NZ@i*P"o?Cu j!<1PI^o y!D싶dvj!35=gu14M^5[ qijl9}߲@OrhNO] Zzmv:ϮnA? 0viC;<5ZSjGaU:++%^H2@2s [4b uKG~H|BM=_aXWvYlμ1J횱vNl0v&I2_ϩE$>`c@5fp50V6j Rldit1Cޫ^N 9nڽ")!#8QnXhn bް`~ڳ2=E.#}[ɔ[b87Z93&2.ybw{Za:l=zOX0% 6 P['_Y3Y ۛT6~ e&10SKwOiL0wo'%K[R= 69j c :Fv0{3<@D.B3I*zK[Y@P`U\*fɿx5eG!iʪgA)sas\&XE/\ `QP YB輡HjP!ȓfsƉҢH"vwe%6~p~e(w8@I ,tz.`l@cUVq+h+?TFHl~(h5o`6D$&J;4Y/ZU %}7[T#OTb Gk5Z{HHh%\K} jʀ^C$FV噅F 9M5YX2+ĬŲgRن6-w$eP(z]öi5 Zi?>;ƂDNzD{x sT/`x|n 4; Q'B\?IWT~ Rm}rmYJj+KiX{ 7GQ|:"7i'ABo@N NQJZrwdW&9s  <<$*g kRg$8: C8O,ZaUz1QF|7ʎS] QIL/DL~'w!×P=VOeK, aaHh j1cݓb3A$QM4-־f0Mɮ^M=<<)kN\bW6СM-dS_+z6x/d)C"э-(ܶ">p%ȉ = 9L]\ eP]Աb*IqodžbZrc hi565({{)W93R Yznp VZn[dܿcѾLhT#b aMeb H3}ᛣ`U"Kvr+]c-T?PY2 H"1,Z[w >'K$1Sqw 0DSL"U3ehOZ;4I77VN4r'`1o u@( IdA+ 0mT IZ z4d:ȓ/4,Z :"P b ynl. $.L+2VAM )E;G,4T>&,mM[)]B0LIC*"h<`۴ RE"GXwHAڕ=~QjjnZ"< kGecU ́q*<r}H{ZHd/ۺomtŌ (<#B3+eXc,7XG)Svi"ML/A )VضRDLJ˓m;~Q~ $S B Pcvf9!ʀ:Tu=2{4&/ 1?J RNWg r ̚K;i.:uyiǙVIDATSvfPNW$)9 }j gGcUV+P9.K#,ePrYWB RAӸNƨFPcCLڀ_@-rNkXų P,PV;_"ThF؄F㵶4l*uTk59g!Wjc.d- xK@Y}[+s"2%fR [Q%)E& ޓ@rwLJ@)'}&;O *D趋8B)"j!He^?H^xz.s@y€(Et "VZ“iAtPfd.T"۶3`$?63xFS0.X]; @d )bt3t¨Chw$DWuZcM7>J"8ܻSr)V/G/>1D6DKqzW`Z _[w1g&h8>0DHft`9R*,'("5cQsJjw5wP$R,.jZ,TltNg#W1Ww;=gDaN]"bw e ]fߴ6MkK!(?Xi |jthxLL4u5%?,t>;t;hlQ^jz({L-eCc/:ZJ~CT4$1mO2 Yjh/s2 Ma05䬗$맒Zxr[HnS*QwW癭bQ`Vيbio!|2.3EH;XzU- $5T;x dٚ,E7 :MS#Du[t :H$l)TTYdgy yi4>ס=*TЁwHlT%69&w0Ekm1 2I%FiaLavUfd^DVt,Wy %̂J}iTT"h'jCU=bc?k]U!eS AR(yqJIO&4._ Ӗ"f 27jD.lL V-Ⱦ Y0J9sg)<lC[fRT ]P4J:76nIe+V'S=FR\dʶ=9(8NГX;Y%5T|bD+ Pf~lX@ DD/v3>\ʣ֑<޹7$R6.X8fS35֦gwē$bZōн{#i@R&Ⱥ&"k[ .oG<+%l#jLl7^ںz/f$n&X%cCs0CE2Pc7F@]\.4Ѱvxz3UP&Hau[JbZz^LeQ^9#=#u dQQ ZyN%M`m((u>ؓʀ/Y% ' RSŗMXn8{x]+ {^xjO3CpllhYhl@1++T3}R.r:P\ Hޓipƈ,6J۽&d:4hh.E!VЙhS`^ʆq8"+Kj"jǻflz!J!ht tm6˪gx t:9C19C-" oKU.u*f'(=iy!#R \M@P`p5IjA)Xc]k;}+S_6 yU EBЇN7{`+9yZe$i-@8=&Sq?MY mNI4NV:{..4=M<(&5(f=shk$/W<}6:<2gDBDn:^c#}ClTgdQ #1eg'໘E,d$FòATwѽ4d@ER < VoPR8 nϙ4y,(>k*>+ńQ9J avQZz>{30xD'L!u*s#@PpejK&b8qiLS3LS.Ğ nqo_[ xِaeق';[?A)eő- +Œsc0L',ArlO9čyd vr6c&o G,fY< 9V/rQ,eI&/}."%S4JFYF 5lh]h.ο.u)9ӂ&6|o//^(P3^ ܴQt`r9mܖVH~C*{ci|vz!>h۵Wuf extra points insertion: #!IMAGE cave2.pdf #!CLEAN cave2.pdf therion-5.4.1/samples/morphing/sample2/thconfig.3000066400000000000000000000003631307545355600217270ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE ../2.4 source cave.th source cave3.th2 input ../thconfig.layout export map -o cave3.pdf -layout clean -layout-scale 1 500 -layout-overlap 2 cm #! And the morphed walls: #!IMAGE cave3.pdf #!CLEAN cave3.pdf therion-5.4.1/samples/morphing/thconfig.layout000066400000000000000000000004221307545355600215330ustar00rootroot00000000000000encoding utf-8 layout clean # line survey code metapost def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; endcode symbol-set SKBB map-header 0 0 off sketches on color map-fg [100 100 80] endlayout therion-5.4.1/samples/pocket-topo/000077500000000000000000000000001307545355600171165ustar00rootroot00000000000000therion-5.4.1/samples/pocket-topo/Demo.txt000066400000000000000000002004531307545355600205470ustar00rootroot00000000000000FIX 503.0 600123.000 200456.000 777.770 TRIP DATE 2008-01-01 DECLINATION 0.00 DATA 503.0 301.86 2.25 1.800 > 503.0 206.82 8.10 0.870 > 503.0 263.70 25.47 1.050 > 503.0 503.1 263.23 -26.10 5.380 < 503.1 32.78 -3.78 1.280 < 503.1 44.47 66.36 2.580 < 503.1 57.92 77.87 2.990 < 503.1 116.02 -18.81 1.700 < 503.1 503.2 67.41 -69.35 3.120 < 503.2 503.3 323.53 -25.66 4.200 < 503.3 160.14 -81.12 0.380 > 503.3 211.90 2.02 0.990 > 503.3 74.27 -13.62 0.210 > 503.3 142.73 65.83 0.640 > 503.2 504.0 0.00 0.00 0.000 > 504.0 252.33 -18.28 0.500 > 504.0 36.91 1.67 0.880 > 504.0 332.75 -69.96 0.750 > 504.0 167.43 1.85 0.570 > 504.0 504.1 182.20 -35.77 1.530 > 504.1 34.89 21.36 0.990 > 504.1 193.36 61.35 0.370 > 504.1 56.25 -70.93 1.140 > 504.1 82.62 78.13 0.740 > 504.1 504.2 62.58 -21.09 3.470 > 504.2 154.51 -0.79 0.860 > 504.2 150.03 -73.74 0.580 > 504.2 161.72 71.89 0.510 > 504.2 504.3 68.91 -7.91 3.870 > 504.3 214.98 14.15 0.880 > 504.3 189.67 18.19 0.360 > 504.3 170.95 -78.40 0.210 > 504.3 345.85 83.58 1.240 > 504.3 504.4 168.66 2.46 2.460 > 504.4 346.90 1.05 0.520 > 504.4 56.69 0.35 0.690 > 504.4 64.95 4.13 0.690 > 504.4 65.83 5.10 0.690 > 504.4 63.63 4.39 0.680 > 504.4 58.10 7.12 0.680 > 504.4 222.19 43.68 0.280 > 504.4 67.76 -71.19 0.390 > 504.4 37.88 45.26 2.310 > 504.4 504.5 47.55 -0.53 3.360 > 504.5 150.64 84.46 0.980 > 504.5 143.00 7.91 0.720 > 504.5 212.26 -75.06 0.220 > 504.5 504.6 69.08 53.79 2.880 > 504.6 329.24 0.88 0.890 > 504.6 233.09 46.41 0.530 > 504.6 356.13 -54.32 0.550 > PLAN STATIONS 0.000 0.000 503.0 -4.803 -0.582 503.1 -3.784 -0.163 503.2 -6.021 2.882 503.3 -3.784 -0.163 504.0 -3.831 -1.405 504.1 -0.958 0.090 504.2 2.616 1.462 504.3 3.096 -0.953 504.4 5.565 1.305 504.5 7.155 1.906 504.6 SHOTS 5.565 1.305 7.155 1.906 7.155 1.906 6.700 2.671 7.155 1.906 6.863 1.687 7.155 1.906 7.133 2.226 3.096 -0.953 5.565 1.305 5.565 1.305 5.612 1.222 5.565 1.305 5.994 0.736 5.565 1.305 5.535 1.257 2.616 1.462 3.096 -0.953 3.096 -0.953 2.978 -0.447 3.096 -0.953 3.673 -0.574 3.096 -0.953 3.719 -0.662 3.096 -0.953 3.723 -0.672 3.096 -0.953 3.703 -0.652 3.096 -0.953 3.669 -0.596 3.096 -0.953 2.960 -1.103 3.096 -0.953 3.213 -0.905 3.096 -0.953 4.094 0.330 -0.958 0.090 2.616 1.462 2.616 1.462 2.127 0.763 2.616 1.462 2.559 1.125 2.616 1.462 2.623 1.421 2.616 1.462 2.582 1.597 -3.831 -1.405 -0.958 0.090 -0.958 0.090 -0.588 -0.686 -0.958 0.090 -0.877 -0.050 -0.958 0.090 -0.908 -0.060 -3.784 -0.163 -3.831 -1.405 -3.831 -1.405 -3.304 -0.649 -3.831 -1.405 -3.872 -1.577 -3.831 -1.405 -3.521 -1.198 -3.831 -1.405 -3.680 -1.385 -3.784 -0.163 -3.784 -0.163 -3.784 -0.163 -4.237 -0.307 -3.784 -0.163 -3.255 0.541 -3.784 -0.163 -3.902 0.065 -3.784 -0.163 -3.660 -0.719 -3.784 -0.163 -6.021 2.882 -6.021 2.882 -6.001 2.827 -6.021 2.882 -6.544 2.042 -6.021 2.882 -5.825 2.937 -6.021 2.882 -5.862 2.673 -4.803 -0.582 -3.784 -0.163 0.000 0.000 -4.803 -0.582 -4.803 -0.582 -4.112 0.492 -4.803 -0.582 -4.078 0.157 -4.803 -0.582 -4.271 -0.248 -4.803 -0.582 -3.357 -1.288 0.000 0.000 -1.528 0.950 0.000 0.000 -0.388 -0.768 0.000 0.000 -0.942 -0.104 POLYLINE BLUE -6.164 2.222 -6.124 2.242 -6.084 2.262 -6.004 2.342 -6.004 2.282 -6.024 2.242 -6.024 2.202 -6.024 2.122 POLYLINE BLUE -6.504 1.782 -6.404 1.982 -6.324 2.062 -6.284 2.042 -6.244 2.042 -6.204 2.062 -6.164 2.062 -6.104 2.102 -6.064 2.162 -6.044 2.202 -5.984 2.302 POLYLINE BLUE -4.804 -1.528 -4.744 -1.498 -4.684 -1.498 -4.624 -1.468 -4.504 -1.528 -4.534 -1.588 -4.534 -1.528 -4.624 -1.648 -4.684 -1.678 POLYLINE BLUE -5.044 -1.888 -5.044 -1.828 -5.044 -1.768 -5.014 -1.708 -4.954 -1.648 -4.864 -1.648 -4.804 -1.648 -4.744 -1.618 -4.684 -1.588 -4.624 -1.588 -4.594 -1.528 POLYLINE BLACK 6.806 2.035 6.786 1.995 6.766 1.935 6.786 1.995 6.786 2.035 6.806 2.095 6.826 2.135 6.846 2.175 6.886 2.195 6.926 2.215 6.966 2.235 7.026 2.215 7.066 2.195 7.066 2.155 7.066 2.095 7.066 2.055 7.066 2.015 7.006 1.975 6.966 1.955 6.926 1.935 6.886 1.955 6.826 1.935 6.786 1.915 6.806 1.975 6.826 2.035 6.866 2.135 POLYLINE BLACK 6.166 1.495 6.206 1.515 6.246 1.535 6.306 1.555 6.346 1.575 6.386 1.575 6.426 1.595 6.466 1.575 6.506 1.555 6.486 1.515 6.446 1.455 6.406 1.435 6.366 1.415 6.326 1.415 6.286 1.415 6.246 1.415 6.206 1.455 6.206 1.495 POLYLINE BLACK 6.566 1.895 6.526 1.855 6.506 1.795 6.506 1.755 6.486 1.715 6.466 1.675 6.446 1.615 6.486 1.615 6.526 1.595 6.566 1.595 6.586 1.635 6.586 1.695 6.606 1.735 6.626 1.775 6.586 1.815 POLYLINE BLACK 6.506 1.815 6.486 1.855 6.486 1.895 6.466 1.935 6.466 1.975 6.466 2.015 6.526 2.015 6.566 2.015 6.606 2.015 6.666 2.015 6.726 1.995 6.726 1.955 6.706 1.895 6.666 1.855 6.646 1.815 6.606 1.815 6.546 1.815 6.506 1.835 6.506 1.875 POLYLINE BLACK 6.966 2.435 7.006 2.475 7.046 2.515 7.086 2.555 7.046 2.535 7.006 2.475 POLYLINE BLACK 7.186 2.035 7.246 2.015 7.286 2.015 7.326 1.995 POLYLINE BLACK 7.146 2.015 POLYLINE BLACK 7.126 2.275 7.126 2.215 7.126 2.175 7.126 2.135 7.126 2.075 7.146 2.035 POLYLINE BLACK 6.906 2.375 6.946 2.395 6.986 2.395 7.026 2.415 7.066 2.435 POLYLINE BLACK 6.386 1.975 6.426 2.015 6.466 2.035 6.526 2.055 6.566 2.075 6.626 2.095 6.666 2.115 6.706 2.115 6.766 2.135 6.806 2.155 6.826 2.195 6.846 2.255 6.866 2.295 6.906 2.335 6.946 2.355 POLYLINE BLACK 6.126 1.795 6.146 1.835 6.186 1.875 6.226 1.915 6.266 1.935 6.306 1.955 6.366 1.975 6.406 2.015 POLYLINE BLACK 6.406 1.215 POLYLINE BLACK 6.426 1.175 6.426 1.115 6.426 1.075 6.386 1.115 6.386 1.175 6.366 1.235 6.346 1.275 6.406 1.295 6.506 1.335 6.546 1.335 6.586 1.355 6.626 1.355 6.686 1.335 6.706 1.295 6.706 1.255 6.686 1.195 6.666 1.155 6.646 1.115 6.606 1.075 6.566 1.075 6.526 1.055 6.486 1.075 6.446 1.075 6.406 1.115 6.386 1.175 6.406 1.215 POLYLINE BLACK 6.226 1.195 6.206 1.235 6.226 1.275 6.266 1.315 6.306 1.335 6.346 1.355 6.366 1.315 6.346 1.275 6.306 1.235 6.266 1.195 6.226 1.155 6.186 1.155 6.146 1.195 6.146 1.235 6.166 1.275 6.186 1.315 6.226 1.355 6.266 1.375 6.306 1.415 6.346 1.435 6.386 1.455 6.426 1.455 6.426 1.415 6.406 1.375 6.386 1.335 6.346 1.315 6.306 1.355 6.326 1.395 6.366 1.435 6.406 1.455 POLYLINE BLACK 5.926 1.615 5.966 1.675 6.026 1.715 6.066 1.715 6.106 1.715 6.146 1.715 6.146 1.675 6.106 1.635 6.066 1.595 6.046 1.555 6.026 1.515 5.986 1.475 5.946 1.495 5.906 1.535 5.886 1.575 5.906 1.615 5.966 1.655 6.026 1.695 6.106 1.735 6.166 1.755 6.206 1.755 6.246 1.715 6.266 1.675 6.246 1.635 6.246 1.595 6.206 1.555 6.186 1.515 6.146 1.475 6.086 1.455 6.046 1.495 POLYLINE BLACK 6.066 1.875 6.026 1.835 6.006 1.775 5.966 1.735 POLYLINE BLACK 5.946 1.715 5.966 1.755 5.986 1.815 5.986 1.855 6.006 1.895 6.006 1.935 6.006 1.975 6.006 2.015 6.026 2.055 6.046 2.095 6.086 2.155 6.126 2.195 6.166 2.235 6.206 2.275 6.246 2.335 6.266 2.375 6.286 2.415 6.306 2.455 6.346 2.495 6.346 2.535 6.386 2.595 POLYLINE BLACK 6.066 0.855 6.106 0.875 6.146 0.895 6.186 0.915 6.246 0.935 6.286 0.955 POLYLINE BLACK 6.766 2.815 6.726 2.835 6.666 2.835 6.626 2.815 6.586 2.795 6.526 2.775 6.486 2.735 6.446 2.695 6.406 2.655 6.366 2.615 6.326 2.575 6.286 2.535 6.246 2.515 6.206 2.495 6.146 2.475 6.066 2.455 6.026 2.435 5.906 2.415 POLYLINE BLACK 6.726 2.715 6.666 2.695 POLYLINE BLACK 6.626 2.635 POLYLINE BLACK 7.126 2.255 7.066 2.315 7.046 2.355 7.006 2.395 6.966 2.435 6.926 2.475 6.906 2.515 6.866 2.575 6.826 2.615 6.786 2.655 6.746 2.715 6.686 2.755 6.646 2.795 POLYLINE BLACK 5.566 1.335 5.586 1.395 5.646 1.475 5.686 1.495 5.726 1.515 5.766 1.535 5.806 1.575 5.846 1.595 5.886 1.615 POLYLINE BLACK 6.166 1.115 6.226 1.115 6.266 1.095 6.306 1.075 6.286 1.035 6.266 0.975 6.226 0.935 6.186 0.935 6.146 0.915 6.106 0.935 6.086 0.975 6.106 1.015 6.146 1.055 POLYLINE BLACK 5.706 1.295 5.746 1.335 5.806 1.355 5.866 1.375 5.906 1.375 5.886 1.335 5.886 1.275 5.886 1.235 5.866 1.195 5.826 1.155 5.786 1.135 5.746 1.115 5.706 1.175 5.706 1.215 5.766 1.275 POLYLINE BLACK 5.726 1.275 POLYLINE BLACK 5.946 1.395 5.946 1.335 5.946 1.295 5.966 1.255 5.966 1.215 5.966 1.175 5.946 1.215 5.946 1.275 5.946 1.315 5.946 1.355 5.986 1.395 6.026 1.415 6.066 1.375 6.106 1.335 6.146 1.295 6.146 1.255 6.106 1.215 6.066 1.175 6.026 1.135 5.986 1.135 5.946 1.135 POLYLINE BLACK 6.046 1.195 6.086 1.175 6.126 1.175 6.146 1.135 6.146 1.075 6.126 1.035 6.086 0.995 6.026 0.955 5.986 0.935 5.946 0.935 5.926 0.995 5.926 1.035 5.946 1.075 5.966 1.115 6.006 1.155 6.046 1.155 6.106 1.135 6.106 1.075 6.106 1.035 6.066 0.995 6.046 0.955 6.006 0.935 5.966 0.915 5.926 0.935 5.926 0.995 5.946 1.035 5.966 1.075 POLYLINE BLACK 6.146 0.915 6.186 0.935 6.226 0.935 6.286 0.955 6.326 0.955 6.366 0.975 6.406 0.975 6.446 1.015 6.506 1.035 6.546 1.055 POLYLINE BLACK 5.326 1.035 5.366 1.055 5.406 1.075 5.446 1.055 5.486 1.015 5.486 0.975 5.466 0.935 5.426 0.895 5.386 0.895 5.346 0.875 5.326 0.915 5.346 0.975 5.386 1.015 5.426 1.055 5.446 1.095 5.386 1.055 5.346 0.995 POLYLINE BLACK 5.666 0.955 5.666 1.035 5.686 1.095 5.706 1.135 5.726 1.175 5.706 1.135 5.686 1.075 5.666 1.015 5.626 0.975 5.606 0.915 5.566 0.875 5.586 0.915 5.606 0.955 5.646 1.015 5.666 1.055 5.686 1.115 5.746 1.135 5.786 1.135 5.826 1.075 5.846 1.035 5.826 0.995 5.786 0.955 5.746 0.915 5.706 0.895 5.666 0.895 5.626 0.895 5.586 0.895 5.586 0.935 5.586 0.975 5.586 1.015 POLYLINE BLACK 5.686 1.095 POLYLINE BLACK 5.246 0.715 5.266 0.755 5.346 0.795 5.386 0.835 5.426 0.855 5.466 0.855 5.526 0.855 5.566 0.855 5.606 0.855 5.646 0.855 5.686 0.855 5.726 0.855 5.766 0.855 5.806 0.835 5.866 0.815 5.906 0.815 5.946 0.815 5.986 0.815 6.026 0.835 6.066 0.835 6.106 0.855 POLYLINE BLACK 4.986 1.095 5.046 1.095 5.086 1.115 5.126 1.115 5.166 1.115 5.206 1.135 5.246 1.155 5.286 1.175 5.326 1.195 5.366 1.215 5.426 1.235 5.466 1.275 5.506 1.295 5.546 1.315 5.586 1.355 5.626 1.375 POLYLINE BLACK 4.366 0.215 4.426 0.255 4.466 0.275 4.506 0.315 4.526 0.255 4.526 0.215 4.526 0.175 4.506 0.135 4.466 0.075 4.426 0.075 4.386 0.115 4.366 0.155 4.386 0.195 4.406 0.235 4.446 0.275 POLYLINE BLACK 4.406 0.375 4.406 0.415 4.426 0.475 4.446 0.515 4.466 0.575 4.506 0.595 4.566 0.615 4.606 0.635 4.586 0.575 4.566 0.535 4.546 0.495 4.526 0.455 4.486 0.415 4.446 0.415 4.406 0.415 POLYLINE BLACK 4.466 0.575 4.506 0.595 4.546 0.635 4.606 0.675 4.646 0.715 4.646 0.655 4.666 0.615 4.646 0.575 4.606 0.555 4.566 0.535 4.526 0.495 4.546 0.555 4.586 0.595 4.646 0.635 POLYLINE BLACK 4.566 0.315 4.606 0.355 4.646 0.415 4.686 0.475 4.726 0.495 4.786 0.475 4.826 0.475 4.806 0.435 4.766 0.375 4.726 0.335 4.706 0.295 4.646 0.255 4.606 0.275 4.586 0.335 POLYLINE BLACK 4.926 0.755 4.906 0.715 4.886 0.635 4.846 0.575 4.846 0.535 4.866 0.595 4.886 0.635 4.906 0.695 4.906 0.735 4.926 0.775 4.966 0.815 5.026 0.815 5.066 0.835 5.126 0.835 5.126 0.775 5.126 0.735 5.106 0.695 5.046 0.655 5.006 0.615 4.966 0.575 4.926 0.555 4.886 0.495 4.866 0.555 POLYLINE BLACK 4.506 -0.005 4.546 0.055 4.586 0.075 4.626 0.095 4.666 0.115 4.706 0.155 4.766 0.195 4.826 0.255 4.846 0.315 4.866 0.355 4.926 0.415 4.986 0.455 5.026 0.495 5.066 0.495 5.126 0.535 5.166 0.575 5.186 0.615 5.206 0.655 5.226 0.695 5.266 0.775 5.306 0.815 POLYLINE BLACK 4.186 0.415 4.226 0.455 4.266 0.475 4.306 0.515 4.346 0.555 4.386 0.595 4.426 0.635 4.466 0.675 4.506 0.715 4.546 0.735 4.586 0.755 4.626 0.795 4.666 0.835 4.686 0.875 4.726 0.895 4.766 0.915 4.806 0.935 4.846 0.975 4.886 0.995 4.926 1.035 4.986 1.055 POLYLINE BLACK 3.746 -0.645 3.786 -0.665 3.826 -0.705 3.866 -0.745 3.886 -0.785 POLYLINE BLACK 3.866 -0.565 3.866 -0.625 3.886 -0.665 3.906 -0.705 3.926 -0.745 3.966 -0.785 POLYLINE BLACK 3.966 -0.445 4.006 -0.405 4.046 -0.385 4.086 -0.365 4.126 -0.345 POLYLINE BLACK 3.186 -1.105 3.146 -1.145 3.106 -1.165 3.086 -1.205 POLYLINE BLACK 3.066 -1.085 3.026 -1.125 POLYLINE BLACK 3.046 -1.065 3.026 -1.105 3.006 -1.165 POLYLINE BLACK 3.286 -0.385 POLYLINE BLACK 3.286 -0.365 3.266 -0.405 3.286 -0.445 3.326 -0.465 3.366 -0.425 3.346 -0.385 POLYLINE BLACK 3.266 -0.385 3.306 -0.385 POLYLINE BLACK 3.206 -0.385 3.266 -0.365 3.306 -0.365 3.346 -0.365 3.366 -0.405 POLYLINE BLACK 3.606 -0.165 3.586 -0.125 3.566 -0.085 3.586 -0.045 3.626 -0.025 POLYLINE BLACK 3.646 -0.045 3.686 -0.105 3.666 -0.145 3.626 -0.185 POLYLINE BLACK 3.666 -0.065 3.686 -0.105 3.666 -0.145 3.626 -0.165 3.586 -0.145 POLYLINE BLACK 3.626 -0.085 3.666 -0.105 3.666 -0.145 POLYLINE BLACK 3.626 -0.085 POLYLINE BLACK 3.786 0.195 3.826 0.215 3.866 0.195 3.886 0.135 3.846 0.115 3.786 0.095 3.746 0.095 POLYLINE BLACK 3.686 0.015 3.726 0.055 3.766 0.055 POLYLINE BLACK 3.746 0.075 3.786 0.055 3.826 0.015 3.766 -0.025 3.726 -0.025 3.686 -0.045 POLYLINE BLACK 3.806 0.175 3.846 0.195 POLYLINE BLACK 3.826 0.135 POLYLINE BLACK 3.726 0.135 3.766 0.155 3.806 0.195 3.846 0.175 POLYLINE BLACK 4.226 -0.185 4.166 -0.185 4.126 -0.205 4.086 -0.205 4.026 -0.205 3.986 -0.205 3.986 -0.165 4.006 -0.125 POLYLINE BLACK 3.986 -0.105 4.026 -0.105 4.066 -0.105 4.126 -0.105 4.166 -0.105 4.206 -0.105 4.226 -0.145 4.246 -0.185 POLYLINE BLACK 4.146 0.295 4.126 0.255 4.086 0.215 4.066 0.175 4.046 0.135 4.066 0.175 4.106 0.235 4.146 0.235 4.186 0.235 4.226 0.215 4.206 0.175 4.186 0.135 4.166 0.095 4.126 0.075 4.086 0.095 4.046 0.075 4.046 0.115 4.066 0.155 4.106 0.215 POLYLINE BLACK 4.046 -0.385 4.086 -0.385 4.126 -0.365 4.166 -0.325 4.206 -0.285 4.246 -0.245 4.286 -0.205 4.366 -0.145 4.406 -0.105 4.446 -0.065 4.486 -0.045 4.526 -0.005 POLYLINE BLACK 3.786 -0.685 3.826 -0.705 3.866 -0.725 3.826 -0.685 3.806 -0.645 3.806 -0.605 3.826 -0.545 3.866 -0.525 3.906 -0.485 3.946 -0.465 POLYLINE BLACK 3.126 -1.145 3.166 -1.105 3.206 -1.085 3.266 -1.045 3.286 -1.005 3.326 -0.965 3.366 -0.925 3.406 -0.905 3.446 -0.865 3.486 -0.845 3.526 -0.805 3.546 -0.765 3.586 -0.725 3.626 -0.685 3.666 -0.665 3.706 -0.665 3.746 -0.705 POLYLINE BLACK 3.146 -0.925 3.146 -0.965 3.126 -1.025 3.086 -1.065 3.046 -1.085 POLYLINE BLACK 4.126 0.375 4.086 0.375 4.046 0.375 4.006 0.375 3.966 0.375 3.926 0.375 3.886 0.375 3.806 0.375 3.766 0.375 3.726 0.355 3.686 0.375 3.646 0.415 3.606 0.455 3.586 0.495 3.546 0.535 3.506 0.555 3.466 0.595 3.426 0.615 3.386 0.655 3.346 0.675 3.286 0.695 3.246 0.735 3.206 0.755 3.166 0.795 3.126 0.815 3.086 0.835 3.046 0.875 POLYLINE BLACK 3.266 -0.205 POLYLINE BLACK 2.946 0.415 POLYLINE BLACK 2.966 0.635 POLYLINE BLACK 2.926 0.875 POLYLINE BLACK 2.946 0.815 POLYLINE BLACK 3.046 0.715 POLYLINE BLACK 3.286 0.475 3.286 0.435 3.286 0.375 3.266 0.335 3.226 0.315 3.186 0.355 3.166 0.395 3.166 0.455 3.166 0.495 3.226 0.515 3.266 0.475 POLYLINE BLACK 3.446 -0.085 3.466 -0.125 3.446 -0.165 3.426 -0.125 3.386 -0.085 3.426 -0.085 POLYLINE BLACK 3.486 0.035 3.506 -0.005 3.486 -0.045 3.426 -0.025 3.406 0.015 3.426 0.075 3.466 0.075 POLYLINE BLACK 3.346 0.175 3.406 0.215 3.446 0.215 3.466 0.175 3.466 0.115 3.406 0.115 3.386 0.155 3.386 0.215 POLYLINE BLACK 3.426 0.095 POLYLINE BLACK 2.966 0.115 2.926 0.155 2.866 0.215 2.826 0.235 2.786 0.275 2.746 0.315 2.806 0.275 2.866 0.255 2.906 0.215 2.946 0.195 2.946 0.135 2.946 0.075 2.946 0.015 2.926 -0.025 2.886 0.015 2.826 0.035 2.786 0.075 2.766 0.115 2.746 0.155 2.766 0.195 2.766 0.255 2.766 0.295 2.766 0.335 POLYLINE BLACK 3.126 0.355 3.146 0.315 3.146 0.255 3.166 0.215 3.166 0.155 3.126 0.115 3.066 0.095 3.046 0.135 3.046 0.195 3.006 0.275 3.006 0.315 2.986 0.355 3.046 0.395 3.106 0.395 POLYLINE BLACK 3.186 -0.125 3.206 -0.165 3.186 -0.205 3.186 -0.265 3.126 -0.225 3.066 -0.185 3.026 -0.145 2.986 -0.085 2.986 -0.025 2.986 0.015 3.026 0.015 3.086 0.015 3.146 0.035 3.186 0.035 3.226 -0.005 3.246 -0.065 3.246 -0.125 POLYLINE BLACK 2.546 0.755 2.566 0.715 2.586 0.655 2.586 0.615 2.606 0.555 2.606 0.515 2.626 0.475 2.626 0.435 2.626 0.375 2.646 0.335 2.646 0.295 2.666 0.255 2.686 0.215 2.666 0.175 2.666 0.135 2.666 0.095 2.686 0.055 2.686 -0.005 2.686 -0.045 2.686 -0.085 2.686 -0.125 2.686 -0.165 2.686 -0.205 2.686 -0.245 2.706 -0.285 2.706 -0.325 2.726 -0.365 2.726 -0.425 2.766 -0.465 2.786 -0.505 2.786 -0.545 2.826 -0.585 2.866 -0.625 2.906 -0.665 2.926 -0.705 2.946 -0.745 2.966 -0.805 3.006 -0.825 3.046 -0.865 3.086 -0.905 3.126 -0.945 3.146 -0.985 3.166 -1.025 POLYLINE BLACK 2.406 0.875 2.466 0.855 POLYLINE BLACK 2.446 1.035 POLYLINE BLACK 2.506 1.215 POLYLINE BLACK 2.826 1.135 POLYLINE BLACK 2.646 1.035 POLYLINE BLACK 2.786 1.215 POLYLINE BLACK 2.926 1.015 POLYLINE BLACK 2.906 1.095 POLYLINE BLACK 2.746 1.315 POLYLINE BLACK 2.646 1.015 POLYLINE BLACK 2.466 1.095 POLYLINE BLACK 2.606 1.075 POLYLINE BLACK 2.446 1.415 POLYLINE BLACK 2.446 1.375 POLYLINE BLACK 2.306 1.215 POLYLINE BLACK 2.126 1.095 POLYLINE BLACK 2.066 1.075 POLYLINE BLACK 2.086 1.215 POLYLINE BLACK 1.806 1.315 POLYLINE BLACK 1.906 1.315 POLYLINE BLACK 2.046 1.435 POLYLINE BLACK 2.206 1.215 POLYLINE BLACK 2.306 1.355 POLYLINE BLACK 2.786 1.415 2.826 1.375 POLYLINE BLACK 2.946 1.295 POLYLINE BLACK 2.906 1.335 2.946 1.295 POLYLINE BLACK 2.946 1.235 2.946 1.195 2.966 1.155 2.966 1.115 2.986 1.075 3.006 1.035 3.026 0.975 3.046 0.935 3.066 0.895 3.086 0.855 3.106 0.815 3.146 0.775 POLYLINE BLACK 2.706 1.415 2.746 1.375 2.786 1.355 2.826 1.315 POLYLINE BLACK 2.586 1.655 POLYLINE BLACK 2.586 1.695 2.626 1.655 2.646 1.615 2.666 1.575 2.686 1.535 2.686 1.475 2.706 1.435 2.726 1.395 POLYLINE BLACK 2.206 0.935 2.246 0.915 2.286 0.915 2.326 0.895 2.366 0.875 2.406 0.875 POLYLINE BLACK 1.426 0.735 1.466 0.775 1.506 0.795 1.546 0.835 1.606 0.875 1.646 0.895 1.686 0.895 1.726 0.915 1.766 0.935 1.806 0.955 1.846 0.955 1.886 0.955 1.926 0.955 1.966 0.935 2.006 0.935 2.066 0.935 2.106 0.935 2.146 0.935 2.186 0.935 2.226 0.935 2.266 0.935 POLYLINE BLACK 0.846 0.555 0.806 0.555 0.766 0.555 POLYLINE BLACK 0.886 0.555 POLYLINE BLACK 1.566 1.095 1.566 1.135 1.606 1.155 1.646 1.175 1.686 1.175 1.726 1.195 1.766 1.155 1.746 1.115 1.746 1.055 1.726 1.015 1.686 0.995 1.646 0.955 1.606 0.935 1.566 0.935 1.506 0.935 1.506 0.995 1.526 1.035 1.546 1.095 1.566 1.135 1.606 1.155 POLYLINE BLACK 1.106 0.875 POLYLINE BLACK 1.306 1.175 POLYLINE BLACK 1.206 1.155 POLYLINE BLACK 0.946 0.695 POLYLINE BLACK 1.086 0.615 POLYLINE BLACK 1.166 0.755 POLYLINE BLACK 1.006 1.075 POLYLINE BLACK 0.946 1.035 POLYLINE BLACK 0.646 0.855 POLYLINE BLACK 0.746 0.955 POLYLINE BLACK 0.386 0.955 0.446 0.995 0.546 1.055 0.586 1.075 0.626 1.075 0.606 1.015 0.586 0.975 0.546 0.935 0.506 0.915 0.466 0.935 0.426 0.975 0.466 1.015 0.506 1.055 0.546 1.055 POLYLINE BLACK 0.426 0.995 POLYLINE BLACK 0.946 0.575 0.906 0.555 0.866 0.535 0.826 0.515 0.786 0.495 POLYLINE BLACK 0.746 0.555 0.786 0.575 0.846 0.595 0.886 0.615 0.926 0.595 POLYLINE BLACK 0.506 0.555 0.546 0.575 0.626 0.595 0.686 0.595 0.726 0.615 0.766 0.595 0.706 0.575 0.666 0.535 0.626 0.515 0.586 0.495 0.546 0.535 POLYLINE BLACK 0.266 0.675 0.326 0.675 0.466 0.695 0.586 0.695 0.606 0.655 0.606 0.615 0.566 0.575 0.526 0.575 0.486 0.555 0.426 0.555 0.386 0.575 0.346 0.595 0.366 0.635 0.406 0.675 0.526 0.715 0.566 0.735 POLYLINE BLACK 0.086 0.735 0.146 0.755 0.186 0.795 0.246 0.815 0.246 0.775 0.246 0.735 0.206 0.695 0.146 0.655 0.106 0.635 0.066 0.635 0.066 0.675 0.086 0.715 0.126 0.735 POLYLINE BLACK 0.186 0.495 0.246 0.515 0.286 0.535 0.326 0.555 0.346 0.515 0.326 0.475 0.286 0.435 0.246 0.435 0.206 0.435 0.166 0.435 0.146 0.475 POLYLINE BLACK 0.026 0.475 0.086 0.495 0.126 0.515 0.086 0.475 0.066 0.435 0.026 0.395 -0.014 0.355 -0.054 0.335 -0.074 0.375 -0.034 0.415 0.026 0.455 0.066 0.495 0.106 0.515 POLYLINE BLACK -0.214 0.435 -0.154 0.455 -0.074 0.495 -0.034 0.435 -0.074 0.415 -0.114 0.415 -0.154 0.415 -0.214 0.395 -0.174 0.435 POLYLINE BLACK -0.454 0.495 -0.414 0.515 -0.374 0.535 -0.314 0.555 -0.354 0.515 -0.354 0.475 -0.394 0.435 -0.434 0.395 -0.474 0.415 -0.434 0.455 -0.394 0.475 POLYLINE BLACK -0.194 0.655 -0.154 0.655 -0.094 0.655 -0.114 0.615 -0.134 0.575 -0.174 0.535 -0.214 0.535 -0.234 0.575 -0.254 0.615 -0.214 0.655 -0.154 0.675 POLYLINE BLACK 1.366 0.715 1.346 0.675 1.326 0.635 1.306 0.595 1.266 0.555 1.206 0.495 1.166 0.475 1.126 0.435 1.066 0.415 1.026 0.395 0.986 0.375 0.926 0.355 0.846 0.355 0.806 0.335 0.766 0.335 0.706 0.335 0.666 0.355 0.626 0.355 0.566 0.355 0.526 0.355 0.486 0.355 0.446 0.355 0.406 0.355 0.346 0.375 0.306 0.355 0.266 0.355 0.226 0.335 0.146 0.315 0.106 0.315 0.066 0.275 POLYLINE BLACK -0.034 0.815 0.006 0.855 0.046 0.895 0.086 0.915 0.126 0.955 0.186 0.995 0.246 1.035 0.286 1.055 0.326 1.095 0.366 1.115 0.426 1.135 0.466 1.135 0.526 1.155 0.566 1.175 0.606 1.195 0.666 1.215 0.706 1.215 0.746 1.215 0.786 1.235 0.826 1.235 0.866 1.255 0.906 1.255 0.946 1.255 0.986 1.275 1.026 1.295 1.086 1.315 1.126 1.335 1.166 1.335 1.206 1.355 1.246 1.355 1.286 1.355 1.326 1.375 1.366 1.375 1.426 1.375 1.466 1.375 1.506 1.395 1.546 1.395 1.586 1.395 1.626 1.395 1.666 1.395 1.706 1.395 1.746 1.395 1.786 1.395 1.826 1.395 1.866 1.375 1.906 1.395 1.966 1.395 2.026 1.395 2.066 1.395 2.106 1.415 2.146 1.415 2.186 1.435 2.226 1.435 2.266 1.455 2.306 1.455 2.346 1.475 2.386 1.495 2.426 1.515 2.466 1.535 2.506 1.555 2.546 1.575 POLYLINE BLACK -0.754 0.355 -0.714 0.395 -0.674 0.435 -0.614 0.475 -0.574 0.495 -0.534 0.515 -0.474 0.535 -0.434 0.555 -0.394 0.575 -0.334 0.615 -0.294 0.655 -0.254 0.675 -0.214 0.695 -0.174 0.715 -0.114 0.755 -0.054 0.775 -0.014 0.795 0.026 0.815 POLYLINE BLACK -0.054 0.075 -0.014 0.075 0.026 0.095 0.066 0.135 0.086 0.175 0.106 0.215 0.146 0.255 0.186 0.295 0.226 0.335 POLYLINE BLACK -1.574 -0.305 -1.614 -0.345 POLYLINE BLACK -1.434 -0.265 -1.434 -0.225 -1.414 -0.185 POLYLINE BLACK -1.394 -0.165 -1.334 -0.165 -1.294 -0.165 -1.254 -0.185 -1.254 -0.225 -1.274 -0.265 -1.314 -0.305 -1.354 -0.325 -1.394 -0.325 -1.414 -0.285 -1.414 -0.245 POLYLINE BLACK -1.554 -0.105 -1.474 -0.105 -1.434 -0.085 -1.394 -0.125 -1.434 -0.165 -1.534 -0.205 -1.614 -0.225 -1.634 -0.165 -1.554 -0.105 POLYLINE BLACK -1.414 -0.285 -1.394 -0.325 -1.414 -0.385 -1.454 -0.425 -1.534 -0.465 -1.654 -0.465 -1.674 -0.425 -1.674 -0.385 -1.634 -0.345 -1.594 -0.345 POLYLINE BLACK -1.594 -0.345 POLYLINE BLACK -1.874 -0.505 -1.814 -0.485 -1.694 -0.445 -1.694 -0.505 -1.714 -0.545 -1.794 -0.565 -1.834 -0.585 -1.874 -0.585 -1.874 -0.545 POLYLINE BLACK -1.934 -0.325 -1.854 -0.265 -1.814 -0.245 -1.754 -0.265 -1.734 -0.305 -1.754 -0.345 -1.794 -0.385 -1.834 -0.385 -1.914 -0.365 -1.874 -0.325 POLYLINE BLACK -2.214 -0.525 -2.174 -0.505 -2.094 -0.485 -2.054 -0.465 -1.994 -0.505 -1.974 -0.545 -2.014 -0.585 -2.034 -0.625 -2.074 -0.625 -2.194 -0.605 -2.254 -0.605 -2.234 -0.545 -2.214 -0.505 POLYLINE BLACK -2.734 -0.565 -2.674 -0.565 -2.574 -0.545 -2.554 -0.585 -2.574 -0.645 -2.654 -0.665 -2.694 -0.665 -2.734 -0.625 -2.694 -0.585 POLYLINE BLACK -2.634 -0.745 -2.554 -0.705 -2.414 -0.665 -2.374 -0.645 -2.374 -0.685 -2.374 -0.725 -2.414 -0.765 -2.454 -0.785 -2.554 -0.825 -2.594 -0.825 -2.574 -0.725 POLYLINE BLACK -2.994 -0.765 -2.834 -0.725 -2.794 -0.725 -2.774 -0.785 -2.754 -0.825 -2.814 -0.845 -2.854 -0.845 -2.934 -0.885 -2.974 -0.885 -2.994 -0.845 -2.994 -0.805 -2.974 -0.745 POLYLINE BLACK -3.134 -0.625 -3.094 -0.605 -2.954 -0.545 -2.914 -0.565 -2.794 -0.585 -2.854 -0.625 -2.894 -0.665 -2.954 -0.685 -2.994 -0.685 -3.074 -0.685 -3.114 -0.665 -3.074 -0.605 -3.034 -0.585 POLYLINE BLACK -3.554 -0.625 -3.514 -0.605 -3.434 -0.585 -3.394 -0.625 -3.374 -0.665 -3.394 -0.705 -3.474 -0.705 -3.514 -0.685 -3.514 -0.625 POLYLINE BLACK -3.374 -0.785 -3.334 -0.765 -3.294 -0.765 -3.254 -0.745 -3.194 -0.785 -3.154 -0.825 -3.294 -0.885 -3.334 -0.905 -3.374 -0.905 -3.394 -0.865 -3.414 -0.825 -3.434 -0.785 POLYLINE BLACK -0.914 0.155 -0.974 0.155 -1.014 0.135 -1.054 0.135 -1.094 0.135 -1.134 0.135 -1.174 0.115 -1.214 0.115 -1.274 0.095 -1.314 0.095 -1.354 0.095 -1.394 0.095 -1.434 0.095 -1.474 0.075 -1.514 0.055 -1.574 0.035 -1.614 0.015 -1.654 -0.005 -1.694 -0.045 -1.734 -0.085 -1.774 -0.105 -1.834 -0.145 -1.894 -0.185 -1.934 -0.225 -1.974 -0.245 -2.014 -0.265 -2.054 -0.285 -2.094 -0.325 -2.134 -0.345 -2.174 -0.365 -2.214 -0.365 -2.254 -0.385 -2.294 -0.405 -2.334 -0.425 -2.374 -0.425 -2.414 -0.445 -2.454 -0.465 -2.494 -0.465 -2.534 -0.485 -2.574 -0.485 -2.614 -0.505 -2.654 -0.485 -2.674 -0.445 -2.714 -0.425 -2.754 -0.445 -2.814 -0.445 -2.854 -0.465 -2.894 -0.485 -2.934 -0.485 -2.974 -0.485 -3.014 -0.485 -3.054 -0.485 -3.094 -0.465 -3.134 -0.465 -3.174 -0.485 POLYLINE BLACK -4.134 -1.325 -4.174 -1.365 -4.234 -1.405 -4.274 -1.445 -4.314 -1.485 -4.354 -1.505 -4.394 -1.565 -4.354 -1.505 -4.314 -1.465 -4.274 -1.425 -4.234 -1.385 -4.194 -1.345 -4.154 -1.345 -4.094 -1.365 -4.094 -1.405 -4.134 -1.465 -4.154 -1.505 -4.214 -1.525 -4.254 -1.525 -4.294 -1.525 -4.334 -1.525 POLYLINE BLACK -4.234 -1.305 -4.154 -1.305 -4.114 -1.305 -4.074 -1.285 POLYLINE BLACK -4.254 -1.305 -4.294 -1.285 -4.274 -1.245 -4.234 -1.205 -4.194 -1.165 POLYLINE BLACK -4.234 -1.185 -4.194 -1.185 -4.154 -1.185 -4.094 -1.165 -4.054 -1.205 -4.014 -1.245 -3.994 -1.285 POLYLINE BLACK -3.554 -0.345 -3.554 -0.385 -3.514 -0.445 -3.494 -0.485 -3.454 -0.525 -3.414 -0.565 -3.374 -0.585 -3.334 -0.605 -3.294 -0.585 -3.254 -0.565 -3.234 -0.525 -3.194 -0.505 POLYLINE BLACK -3.534 -0.765 -3.514 -0.805 -3.534 -0.865 -3.554 -0.905 -3.574 -0.945 -3.614 -0.985 -3.594 -1.025 -3.554 -1.065 -3.514 -1.065 -3.474 -1.065 -3.414 -1.065 -3.374 -1.065 -3.334 -1.065 -3.294 -1.085 -3.254 -1.085 -3.214 -1.085 -3.174 -1.105 POLYLINE BLACK -4.354 0.435 -4.314 0.395 -4.294 0.355 -4.254 0.295 -4.234 0.255 -4.214 0.215 -4.194 0.175 -4.174 0.135 -4.154 0.095 -4.134 0.055 -4.114 0.015 -4.094 -0.025 -4.074 -0.065 -4.054 -0.125 -4.034 -0.165 -4.034 -0.205 -4.014 -0.245 -3.994 -0.285 -3.974 -0.325 -3.954 -0.365 -3.914 -0.405 -3.874 -0.445 -3.854 -0.485 -3.834 -0.525 -3.814 -0.565 -3.814 -0.625 -3.814 -0.665 -3.814 -0.705 -3.854 -0.745 -3.874 -0.805 -3.894 -0.845 -3.934 -0.885 -3.974 -0.905 -4.014 -0.945 -4.054 -0.985 -4.094 -1.005 -4.134 -1.045 POLYLINE BLACK -4.614 -1.745 -4.574 -1.725 -4.514 -1.705 -4.474 -1.685 -4.434 -1.665 -4.394 -1.665 -4.354 -1.645 -4.314 -1.625 -4.274 -1.605 -4.214 -1.585 -4.174 -1.565 -4.134 -1.545 -4.074 -1.525 -4.034 -1.505 -3.994 -1.485 -3.954 -1.445 -3.914 -1.425 -3.854 -1.405 -3.814 -1.385 -3.754 -1.365 -3.714 -1.365 -3.674 -1.345 -3.634 -1.345 -3.594 -1.325 -3.514 -1.305 -3.454 -1.285 -3.414 -1.265 -3.374 -1.265 -3.334 -1.245 -3.294 -1.225 -3.254 -1.205 -3.214 -1.205 -3.174 -1.185 -3.134 -1.165 -3.094 -1.165 -3.034 -1.145 -2.994 -1.125 -2.934 -1.125 -2.894 -1.105 -2.854 -1.085 -2.814 -1.065 -2.774 -1.045 -2.734 -1.025 -2.674 -1.005 -2.614 -0.985 -2.574 -0.965 -2.534 -0.945 -2.474 -0.945 -2.434 -0.925 -2.394 -0.905 -2.354 -0.885 -2.314 -0.885 -2.274 -0.865 -2.234 -0.865 -2.194 -0.845 -2.154 -0.845 -2.114 -0.825 -2.054 -0.825 -2.014 -0.805 -1.974 -0.805 -1.934 -0.785 -1.894 -0.765 -1.854 -0.745 -1.814 -0.725 -1.774 -0.705 -1.714 -0.685 -1.674 -0.665 -1.634 -0.645 -1.594 -0.625 -1.554 -0.625 -1.514 -0.625 -1.474 -0.605 -1.434 -0.585 -1.394 -0.545 -1.354 -0.525 -1.314 -0.505 -1.274 -0.485 -1.234 -0.445 -1.194 -0.425 -1.154 -0.405 -1.114 -0.385 -1.074 -0.365 -1.034 -0.325 -0.994 -0.285 POLYLINE BLACK -4.694 -1.445 -4.654 -1.425 -4.614 -1.385 -4.574 -1.365 -4.514 -1.325 -4.474 -1.305 -4.434 -1.265 -4.374 -1.225 -4.334 -1.205 -4.294 -1.185 -4.234 -1.165 -4.194 -1.145 -4.134 -1.105 -4.154 -1.065 -4.194 -1.045 -4.254 -1.025 -4.294 -0.985 -4.334 -0.945 -4.374 -0.925 -4.414 -0.885 -4.454 -0.845 -4.494 -0.805 -4.534 -0.785 -4.574 -0.745 -4.594 -0.705 -4.634 -0.665 -4.674 -0.645 -4.714 -0.585 -4.734 -0.545 POLYLINE BLACK -3.934 -0.085 -3.974 -0.085 -4.014 -0.045 POLYLINE BLACK -5.614 2.175 POLYLINE BLACK -5.734 2.335 POLYLINE BLACK -4.574 1.475 POLYLINE BLACK -4.714 1.435 POLYLINE BLACK -4.314 1.195 POLYLINE BLACK -4.774 1.975 POLYLINE BLACK -5.234 2.055 POLYLINE BLACK -4.934 2.055 POLYLINE BLACK -3.754 0.535 -3.794 0.555 -3.834 0.555 -3.874 0.575 POLYLINE BLACK -5.034 2.175 POLYLINE BLACK -4.434 1.275 POLYLINE BLACK -4.474 1.415 POLYLINE BLACK -5.654 2.775 POLYLINE BLACK -5.774 2.795 POLYLINE BLACK -5.914 2.575 POLYLINE BLACK -5.954 2.635 POLYLINE BLACK -5.874 2.475 POLYLINE BLACK -5.974 2.675 POLYLINE BLACK -6.074 2.495 -6.114 2.455 -6.154 2.435 -6.194 2.415 -6.214 2.375 -6.254 2.315 -6.274 2.275 -6.314 2.255 -6.354 2.215 -6.394 2.175 POLYLINE BLACK -6.314 2.375 -6.334 2.335 -6.354 2.295 -6.394 2.255 -6.434 2.215 -6.454 2.175 POLYLINE BLACK -5.974 2.975 -6.014 2.935 -6.054 2.895 -6.074 2.835 -6.114 2.795 -6.134 2.755 -6.174 2.715 -6.194 2.675 -6.234 2.635 -6.274 2.575 -6.274 2.535 -6.294 2.495 -6.314 2.455 -6.314 2.415 -6.314 2.375 POLYLINE BLACK -4.554 1.495 POLYLINE BLACK -4.754 1.455 POLYLINE BLACK -4.934 2.195 POLYLINE BLACK -5.214 2.015 POLYLINE BLACK -5.174 2.235 POLYLINE BLACK -5.234 2.175 POLYLINE BLACK -5.414 2.135 POLYLINE BLACK -5.494 2.095 POLYLINE BLACK -5.354 1.915 POLYLINE BLACK -5.174 1.715 POLYLINE BLACK -5.114 1.555 POLYLINE BLACK -5.074 1.475 POLYLINE BLACK -4.894 1.375 POLYLINE BLACK -4.854 1.555 POLYLINE BLACK -5.094 1.615 POLYLINE BLACK -5.254 1.675 POLYLINE BLACK -5.354 1.855 POLYLINE BLACK -3.934 0.675 -3.974 0.735 -3.994 0.775 -4.014 0.815 -4.034 0.855 -4.054 0.895 -4.074 0.935 -4.094 0.995 -4.114 1.035 -4.114 1.075 -4.134 1.135 -4.114 1.075 -4.094 1.035 -4.074 0.975 -4.054 0.935 -4.034 0.895 -4.014 0.835 -3.994 0.795 -3.974 0.755 -3.954 0.695 -3.954 0.655 -3.934 0.615 POLYLINE BLACK -5.464 2.085 POLYLINE BLACK -5.584 2.385 -5.614 2.475 -5.614 2.535 -5.614 2.625 -5.614 2.685 -5.554 2.685 -5.494 2.655 -5.434 2.625 -5.374 2.595 -5.314 2.535 -5.314 2.445 -5.284 2.385 -5.284 2.325 -5.314 2.265 -5.374 2.235 -5.434 2.295 -5.494 2.355 -5.554 2.415 -5.584 2.475 POLYLINE BLACK -5.164 1.695 -5.074 1.665 -5.014 1.665 -4.954 1.635 -4.894 1.605 -4.804 1.605 -4.744 1.575 -4.684 1.545 -4.624 1.545 -4.564 1.515 -4.504 1.485 -4.474 1.575 -4.504 1.635 -4.504 1.695 -4.534 1.755 -4.594 1.815 -4.654 1.845 -4.714 1.845 -4.774 1.845 -4.834 1.845 -4.894 1.875 -4.954 1.875 -5.014 1.905 -5.104 1.935 -5.104 1.875 -5.134 1.785 -5.044 1.725 POLYLINE BLACK -6.064 2.475 -5.974 2.385 -5.884 2.295 -5.824 2.235 -5.734 2.145 -5.704 2.085 -5.644 2.025 -5.584 1.935 -5.494 1.845 -5.374 1.665 -5.314 1.605 -5.254 1.545 -5.194 1.485 -5.134 1.425 -5.074 1.365 -5.014 1.335 -4.924 1.245 -4.864 1.215 -4.834 1.155 POLYLINE BLACK -6.124 2.445 POLYLINE BLACK -5.974 2.955 -5.854 2.895 -5.794 2.895 -5.734 2.865 -5.644 2.835 -5.584 2.805 -5.524 2.745 -5.464 2.685 -5.404 2.625 -5.314 2.595 -5.254 2.535 -5.164 2.445 -5.074 2.385 -5.014 2.325 -4.954 2.295 -4.894 2.205 -4.834 2.145 -4.774 2.115 -4.684 2.025 -4.594 1.935 -4.564 1.875 -4.504 1.815 -4.444 1.755 -4.414 1.695 -4.384 1.605 -4.324 1.545 -4.294 1.485 -4.294 1.425 POLYLINE BLACK -4.234 1.335 -4.264 1.395 -4.294 1.455 -4.294 1.515 -4.324 1.575 -4.384 1.665 -4.414 1.725 POLYLINE BLACK -4.024 0.855 -4.084 0.915 -4.114 0.975 -4.174 1.065 -4.174 1.125 -4.234 1.185 -4.264 1.245 -4.294 1.305 -4.324 1.365 -4.324 1.455 -4.354 1.515 -4.384 1.575 -4.354 1.515 POLYLINE BLACK -4.264 0.375 -4.264 0.465 -4.294 0.525 -4.294 0.585 -4.234 0.585 -4.144 0.555 -4.114 0.495 -4.084 0.405 -4.114 0.345 -4.204 0.375 -4.264 0.465 -4.294 0.525 POLYLINE BLACK -3.964 0.285 -3.934 0.345 -3.904 0.405 -3.844 0.405 -3.844 0.285 -3.814 0.225 -3.904 0.225 -3.964 0.285 -3.994 0.345 POLYLINE BLACK -4.114 0.105 -4.144 0.165 -4.174 0.225 -4.204 0.315 -4.144 0.345 -4.084 0.345 -4.024 0.375 -4.024 0.315 -3.994 0.225 -3.964 0.165 -3.964 0.105 -4.024 0.075 -4.084 0.105 -4.144 0.165 -4.144 0.225 POLYLINE BLACK -4.024 -0.135 -4.024 -0.075 -4.024 0.015 -3.964 0.075 -3.904 0.105 -3.844 0.045 -3.784 -0.015 -3.814 -0.075 -3.874 -0.135 -3.934 -0.105 POLYLINE BLACK -3.844 -0.405 -3.814 -0.315 -3.784 -0.195 -3.724 -0.195 -3.634 -0.225 -3.574 -0.345 -3.574 -0.405 -3.694 -0.405 -3.784 -0.435 -3.814 -0.315 POLYLINE BLACK -3.754 -0.525 -3.694 -0.585 -3.634 -0.645 -3.604 -0.735 -3.574 -0.795 -3.544 -0.855 POLYLINE BLACK -4.384 0.495 -4.354 0.345 -4.324 0.285 -4.294 0.195 -4.264 0.135 -4.204 0.015 -4.174 -0.045 -4.114 -0.105 -4.054 -0.195 -4.024 -0.255 -3.964 -0.315 -3.934 -0.375 -3.904 -0.435 -3.844 -0.495 -3.814 -0.585 -3.754 -0.615 -3.664 -0.675 -3.604 -0.735 POLYLINE BLACK -3.694 -0.105 -3.694 -0.165 -3.664 -0.225 -3.634 -0.285 -3.604 -0.375 -3.574 -0.435 POLYLINE BLACK -4.144 0.885 -4.084 0.795 -4.024 0.735 -3.994 0.645 -3.934 0.585 -3.904 0.525 -3.874 0.465 -3.814 0.315 -3.784 0.255 -3.784 0.195 -3.784 0.135 -3.754 0.045 -3.754 -0.015 -3.754 -0.075 -3.724 -0.165 -3.694 -0.225 -3.694 -0.285 POLYLINE BLACK -3.784 0.495 -3.694 0.465 -3.634 0.405 -3.604 0.345 -3.544 0.255 -3.514 0.195 -3.454 0.135 -3.394 0.045 -3.304 -0.075 -3.154 -0.075 -3.094 -0.075 -3.034 -0.105 -2.974 -0.105 -2.914 -0.075 -2.854 -0.045 -2.794 -0.045 -2.734 -0.045 -2.674 -0.045 -2.614 -0.045 -2.554 -0.045 -2.494 -0.045 -2.464 -0.135 -2.434 -0.045 -2.404 0.015 -2.344 0.075 -2.314 0.135 -2.284 0.195 -2.254 0.255 POLYLINE BLACK -1.324 0.435 -1.234 0.465 -1.174 0.495 -1.114 0.525 -1.054 0.495 -0.994 0.435 -0.994 0.375 -1.024 0.285 -1.054 0.225 -1.114 0.225 -1.174 0.225 -1.234 0.255 -1.264 0.345 -1.264 0.405 -1.264 0.465 POLYLINE BLACK -1.204 1.275 -1.084 1.335 -1.024 1.365 -0.934 1.395 POLYLINE BLACK -1.324 1.095 -1.294 1.185 -1.294 1.245 -1.264 1.305 -1.324 1.185 -1.354 1.125 -1.384 1.065 -1.384 1.005 POLYLINE BLACK -1.294 1.065 -1.234 1.005 -1.174 0.945 -1.114 0.885 -1.054 0.825 -0.994 0.765 -0.934 0.705 -0.904 0.645 -0.844 0.555 -0.814 0.495 -0.784 0.435 -0.634 0.525 -0.604 0.585 -0.514 0.645 -0.454 0.705 POLYLINE BLACK -1.444 0.585 -1.384 0.705 -1.354 0.765 -1.264 0.765 -1.204 0.765 -1.144 0.675 -1.114 0.615 -1.114 0.555 -1.234 0.525 -1.354 0.495 -1.354 0.615 POLYLINE BLACK -0.994 0.135 -0.994 0.225 -0.964 0.285 -0.964 0.345 -0.904 0.375 -0.844 0.375 -0.784 0.375 -0.754 0.255 -0.784 0.165 -0.784 0.105 -0.784 0.045 -0.754 -0.015 -0.904 0.015 -0.964 0.045 -0.964 0.135 -0.934 0.195 -0.904 0.255 POLYLINE BLACK -0.784 -0.345 -0.784 -0.435 -0.814 -0.585 -0.814 -0.645 -0.814 -0.705 -0.814 -0.645 -0.784 -0.495 -0.634 -0.405 -0.574 -0.375 -0.514 -0.345 -0.424 -0.345 -0.364 -0.405 -0.334 -0.495 -0.364 -0.555 -0.334 -0.615 -0.514 -0.705 -0.604 -0.735 -0.664 -0.735 -0.724 -0.765 -0.724 -0.645 -0.724 -0.495 -0.724 -0.435 POLYLINE BLACK -0.544 -0.075 -0.604 -0.105 POLYLINE BLACK -0.694 -0.135 -0.664 -0.195 -0.634 -0.255 -0.544 -0.285 -0.454 -0.255 -0.394 -0.255 -0.334 -0.255 -0.364 -0.135 -0.364 -0.075 -0.514 -0.075 -0.574 -0.105 POLYLINE BLACK -0.454 0.255 -0.514 0.225 -0.604 0.165 -0.664 0.105 -0.634 0.045 -0.604 -0.045 -0.574 -0.105 -0.484 0.015 -0.424 0.075 -0.454 0.135 -0.454 0.195 POLYLINE BLACK -0.244 -0.075 -0.304 -0.015 -0.364 0.015 -0.364 0.075 -0.364 0.135 -0.334 0.195 -0.334 0.285 -0.304 0.345 -0.244 0.285 -0.184 0.285 -0.124 0.255 -0.124 0.195 -0.124 0.135 -0.094 0.075 -0.094 0.015 -0.124 -0.045 -0.184 -0.045 -0.244 -0.045 POLYLINE BLACK -0.274 -0.735 -0.334 -0.765 -0.424 -0.795 -0.514 -0.825 -0.574 -0.855 -0.664 -0.885 -0.754 -0.915 -0.814 -0.945 -0.934 -1.005 -0.994 -1.065 -1.054 -1.065 -1.204 -1.155 -1.294 -1.155 -1.354 -1.185 -1.474 -1.245 -1.534 -1.275 -1.594 -1.305 POLYLINE BLACK -4.114 0.765 -4.174 0.855 -4.234 0.945 -4.294 1.005 -4.414 1.065 -4.474 1.125 -4.534 1.185 -4.594 1.245 -4.654 1.305 -4.744 1.245 -4.804 1.215 -4.864 1.155 -4.744 1.065 -4.654 0.975 POLYLINE BLACK -4.384 0.375 -4.384 0.435 -4.384 0.495 -4.414 0.555 -4.474 0.615 -4.504 0.705 -4.594 0.795 -4.624 0.855 -4.684 0.945 -4.714 1.005 -4.654 0.975 -4.504 0.765 -4.414 0.705 -4.504 0.765 -4.594 0.915 -4.624 0.975 POLYLINE BLACK -4.714 -0.465 -4.684 -0.405 -4.654 -0.315 -4.624 -0.255 -4.594 -0.195 -4.564 -0.135 -4.534 -0.075 -4.534 0.015 -4.504 0.075 -4.474 0.135 -4.474 0.195 -4.444 0.285 -4.444 0.345 -4.414 0.405 POLYLINE BLACK -3.574 -1.275 -3.484 -1.215 -3.424 -1.215 -3.274 -1.155 -3.214 -1.155 -3.124 -1.125 -3.064 -1.095 -3.004 -1.065 -2.944 -1.065 -2.854 -1.035 -2.794 -1.005 -2.734 -1.005 -2.674 -0.975 -2.614 -0.975 -2.554 -0.945 -2.494 -0.915 -2.404 -0.915 -2.344 -0.885 -2.284 -0.885 -2.224 -0.885 -2.164 -0.855 -2.104 -0.825 -2.044 -0.825 -1.984 -0.795 -1.924 -0.765 -1.864 -0.765 -1.804 -0.735 -1.714 -0.735 -1.654 -0.705 -1.594 -0.705 -1.534 -0.675 -1.474 -0.645 -1.414 -0.615 -1.354 -0.585 -1.294 -0.525 -1.234 -0.495 -1.174 -0.435 -1.114 -0.435 -1.054 -0.375 -0.994 -0.345 -0.934 -0.315 POLYLINE BLACK -0.964 -0.165 -0.934 -0.225 -0.904 -0.285 -0.874 -0.345 -0.844 -0.405 -0.814 -0.465 POLYLINE BLACK -3.484 0.375 -3.364 0.375 -3.304 0.345 -3.244 0.315 -3.184 0.315 -3.124 0.315 -3.034 0.315 -2.914 0.285 -2.824 0.285 -2.764 0.255 -2.704 0.255 -2.644 0.255 -2.584 0.285 -2.524 0.255 -2.464 0.225 -2.404 0.225 -2.314 0.195 -2.254 0.195 -2.194 0.195 -2.134 0.195 -2.074 0.195 -2.014 0.225 -1.954 0.225 -1.894 0.225 -1.834 0.225 -1.774 0.225 -1.714 0.225 -1.654 0.225 -1.594 0.225 -1.504 0.225 -1.444 0.225 -1.384 0.225 -1.324 0.195 -1.234 0.195 -1.174 0.165 -1.114 0.135 -1.054 0.075 -1.024 0.015 -0.994 -0.045 -0.994 -0.105 -0.994 -0.165 -0.994 -0.225 -0.994 -0.285 POLYLINE BLACK -4.264 0.765 -4.204 0.765 -4.174 0.705 -4.114 0.615 -4.054 0.585 -3.994 0.555 -3.934 0.495 -3.874 0.465 -3.814 0.405 -3.754 0.375 -3.664 0.315 -3.604 0.315 -3.544 0.315 -3.484 0.315 -3.424 0.315 -3.364 0.315 -3.304 0.315 -3.244 0.345 -3.184 0.375 -3.124 0.405 -3.004 0.405 -2.944 0.435 -2.884 0.435 -2.824 0.465 -2.764 0.465 -2.674 0.465 -2.614 0.525 -2.554 0.585 -2.494 0.585 -2.434 0.615 -2.374 0.645 -2.314 0.675 -2.254 0.675 -2.164 0.705 -2.104 0.735 -2.044 0.765 -1.984 0.795 -1.924 0.795 -1.864 0.825 -1.804 0.855 -1.744 0.885 -1.654 0.915 POLYLINE BLACK -1.444 1.185 -1.384 1.125 -1.354 1.065 -1.354 1.005 -1.444 0.945 -1.504 0.915 -1.564 0.945 -1.624 0.945 -1.684 0.945 ELEVATION STATIONS 0.000 0.000 503.0 -4.838 -2.383 503.1 -5.940 -5.284 503.2 -9.719 -7.102 503.3 -5.940 -5.284 504.0 -4.697 -6.180 504.1 -1.458 -7.424 504.2 2.370 -7.964 504.3 4.833 -7.856 504.4 8.179 -7.893 504.5 9.879 -5.569 504.6 SHOTS 8.179 -7.893 9.879 -5.569 9.879 -5.569 9.726 -5.555 9.879 -5.569 9.528 -5.185 9.879 -5.569 9.973 -6.016 4.833 -7.856 8.179 -7.893 8.179 -7.893 8.174 -6.918 8.179 -7.893 8.258 -7.794 8.179 -7.893 8.124 -8.106 2.370 -7.964 4.833 -7.856 4.833 -7.856 4.313 -7.846 4.833 -7.856 5.514 -7.852 4.833 -7.856 5.379 -7.806 4.833 -7.856 5.339 -7.795 4.833 -7.856 5.429 -7.804 4.833 -7.856 5.496 -7.772 4.833 -7.856 5.595 -7.663 4.833 -7.856 4.909 -8.225 4.833 -7.856 6.435 -6.215 -1.458 -7.424 2.370 -7.964 2.370 -7.964 2.117 -7.749 2.370 -7.964 2.676 -7.852 2.370 -7.964 2.411 -8.170 2.370 -7.964 2.386 -6.732 -4.697 -6.180 -1.458 -7.424 -1.458 -7.424 -1.439 -7.436 -1.458 -7.424 -1.441 -7.981 -1.458 -7.424 -1.476 -6.939 -5.940 -5.284 -4.697 -6.180 -4.697 -6.180 -3.881 -5.819 -4.697 -6.180 -5.342 -5.855 -4.697 -6.180 -4.327 -7.257 -4.697 -6.180 -4.598 -5.456 -5.940 -5.284 -5.940 -5.284 -5.940 -5.284 -5.779 -5.441 -5.940 -5.284 -6.664 -5.258 -5.940 -5.284 -6.164 -5.989 -5.940 -5.284 -5.389 -5.266 -5.940 -5.284 -9.719 -7.102 -9.719 -7.102 -9.662 -7.477 -9.719 -7.102 -9.354 -7.067 -9.719 -7.102 -9.646 -7.151 -9.719 -7.102 -9.457 -6.518 -4.838 -2.383 -5.940 -5.284 0.000 0.000 -4.838 -2.383 -4.838 -2.383 -5.888 -2.467 -4.838 -2.383 -5.791 -0.020 -4.838 -2.383 -5.457 0.540 -4.838 -2.383 -3.485 -2.931 0.000 0.000 -1.405 0.071 0.000 0.000 -0.476 0.123 0.000 0.000 -0.947 0.452 POLYLINE BLACK 1.874 -5.924 1.844 -6.014 1.784 -6.074 1.694 -6.134 1.604 -6.254 1.484 -6.374 1.454 -6.464 1.394 -6.494 1.334 -6.614 1.274 -6.674 1.244 -6.794 1.244 -7.124 1.214 -7.214 1.214 -7.274 1.184 -7.334 1.184 -7.394 1.154 -7.454 1.154 -7.514 1.124 -7.604 1.094 -7.664 1.124 -7.724 0.974 -8.024 POLYLINE BLACK 2.084 -6.044 1.964 -6.284 1.934 -6.374 1.934 -6.434 1.904 -6.494 1.904 -6.644 1.844 -6.764 1.844 -6.824 1.904 -6.944 1.934 -7.034 2.054 -7.094 2.144 -7.154 2.264 -7.214 2.414 -7.274 2.474 -7.304 2.504 -7.364 2.504 -7.604 2.534 -7.664 2.534 -7.754 2.504 -7.814 POLYLINE BLACK 0.164 -7.094 0.134 -7.154 0.104 -7.244 0.044 -7.304 0.014 -7.364 -0.046 -7.424 -0.076 -7.514 -0.106 -7.574 -0.136 -7.664 -0.136 -7.784 -0.166 -7.844 -0.166 -8.084 POLYLINE BLACK 8.014 -8.184 8.174 -8.104 8.254 -7.984 8.334 -7.944 8.574 -7.704 8.654 -7.704 8.814 -7.624 POLYLINE BLACK 10.214 -6.024 10.134 -6.064 10.054 -6.224 10.174 -6.304 10.254 -6.304 10.334 -6.264 10.414 -6.184 10.374 -6.104 10.414 -6.024 10.294 -5.944 POLYLINE BLACK 9.934 -5.944 9.854 -5.984 9.774 -6.064 9.734 -6.144 9.734 -6.304 9.814 -6.304 10.014 -6.224 10.094 -6.144 10.054 -6.064 9.974 -6.064 POLYLINE BLACK 9.574 -5.984 9.454 -6.024 9.374 -6.104 9.374 -6.304 9.454 -6.384 9.654 -6.304 9.734 -6.224 9.774 -6.144 9.734 -6.064 9.614 -6.024 9.534 -6.104 POLYLINE BLACK 9.214 -6.224 9.174 -6.304 9.094 -6.384 9.014 -6.504 9.054 -6.584 9.134 -6.624 9.334 -6.584 9.414 -6.464 9.414 -6.384 9.334 -6.344 9.214 -6.384 POLYLINE BLACK 8.974 -6.704 8.894 -6.824 8.854 -6.904 8.854 -6.984 8.894 -7.064 8.974 -7.064 9.094 -6.984 9.174 -6.784 9.094 -6.584 8.974 -6.584 8.894 -6.664 POLYLINE BLACK 9.094 -7.064 9.014 -7.104 8.974 -7.224 8.894 -7.384 8.894 -7.464 8.974 -7.544 9.174 -7.424 9.334 -7.224 9.334 -7.104 9.174 -7.064 9.054 -7.064 POLYLINE BLACK 9.334 -7.464 9.254 -7.504 9.174 -7.544 9.134 -7.624 9.134 -7.704 9.254 -7.784 9.374 -7.824 9.494 -7.744 9.574 -7.664 9.614 -7.584 9.534 -7.504 9.414 -7.464 POLYLINE BLACK 8.934 -7.624 8.854 -7.624 8.774 -7.664 8.734 -7.744 8.774 -7.824 8.974 -7.824 9.094 -7.744 9.174 -7.664 9.094 -7.624 9.054 -7.544 POLYLINE BLACK 7.894 -6.464 7.774 -6.544 7.694 -6.584 7.654 -6.664 7.734 -6.704 7.814 -6.704 7.894 -6.664 8.014 -6.624 8.014 -6.544 POLYLINE BLACK 6.774 -7.304 6.734 -7.424 6.654 -7.624 6.654 -8.144 POLYLINE BLACK 6.214 -7.264 6.134 -7.384 6.094 -7.464 6.054 -7.704 6.014 -7.784 6.014 -8.064 POLYLINE BLACK 5.614 -7.144 5.534 -7.224 5.454 -7.384 5.454 -7.504 5.414 -7.584 5.414 -7.824 5.454 -7.944 5.454 -8.024 POLYLINE BLACK 3.654 -6.184 3.734 -6.224 3.814 -6.224 3.934 -6.304 4.014 -6.344 4.134 -6.344 POLYLINE BLACK 4.134 -7.504 4.094 -7.624 4.014 -7.744 4.014 -7.864 POLYLINE BLACK 3.414 -6.544 3.414 -6.624 3.494 -6.784 3.494 -6.984 3.534 -7.064 3.574 -7.184 3.654 -7.264 3.654 -7.584 3.574 -7.744 3.574 -7.864 POLYLINE BLACK 2.814 -6.304 2.774 -6.384 2.774 -6.464 2.814 -6.544 2.854 -6.664 2.854 -6.744 2.934 -6.864 2.974 -6.944 3.054 -7.064 3.134 -7.144 3.134 -7.224 3.174 -7.304 3.174 -7.584 3.134 -7.704 3.134 -7.784 POLYLINE BLACK 4.414 -7.344 4.494 -7.304 4.574 -7.304 4.694 -7.344 4.774 -7.344 4.854 -7.384 4.934 -7.384 POLYLINE BLACK 2.614 -7.344 2.694 -7.344 2.774 -7.384 2.854 -7.384 2.974 -7.424 3.054 -7.384 3.134 -7.384 3.254 -7.304 3.494 -7.304 3.614 -7.264 3.774 -7.344 3.854 -7.344 POLYLINE BLACK 6.414 -5.384 6.494 -5.384 6.614 -5.464 POLYLINE BLACK 6.454 -5.424 POLYLINE BLACK 5.694 -5.504 5.774 -5.464 5.854 -5.464 POLYLINE BLACK 5.054 -5.624 4.974 -5.704 4.974 -5.784 4.934 -5.864 4.934 -6.424 4.894 -6.504 4.894 -6.664 POLYLINE BLACK 8.454 -5.824 8.414 -5.904 8.334 -5.984 8.374 -6.104 8.494 -6.064 8.574 -6.024 8.614 -5.944 8.574 -5.864 8.494 -5.784 8.414 -5.744 POLYLINE BLACK 8.214 -5.744 8.134 -5.824 8.134 -6.024 8.214 -6.024 8.294 -5.944 8.334 -5.864 8.334 -5.784 POLYLINE BLACK 7.534 -5.384 7.534 -5.664 7.694 -5.504 7.614 -5.424 7.414 -5.424 POLYLINE BLACK 7.054 -5.464 7.094 -5.384 7.014 -5.384 6.974 -5.464 6.894 -5.544 6.934 -5.624 7.014 -5.664 7.134 -5.704 7.254 -5.624 7.294 -5.464 7.214 -5.384 7.134 -5.384 7.094 -5.464 POLYLINE BLACK 7.974 -5.344 7.894 -5.424 7.814 -5.664 7.854 -5.744 7.934 -5.784 7.974 -5.704 8.014 -5.544 7.934 -5.424 7.814 -5.464 POLYLINE BLACK 8.054 -5.704 7.974 -5.744 7.854 -5.984 7.974 -6.024 8.134 -5.864 8.134 -5.744 8.014 -5.704 7.934 -5.744 POLYLINE BLACK 8.094 -6.064 8.014 -6.104 7.974 -6.184 7.934 -6.304 7.934 -6.424 8.014 -6.504 8.094 -6.544 8.134 -6.424 8.214 -6.144 8.214 -6.064 8.094 -6.024 POLYLINE BLACK 8.134 -6.624 8.054 -6.664 8.014 -6.744 7.974 -6.904 8.094 -6.864 8.174 -6.864 8.254 -6.744 8.254 -6.624 8.214 -6.544 8.134 -6.504 8.054 -6.464 POLYLINE BLACK 6.854 -5.504 6.774 -5.504 6.694 -5.584 6.654 -5.664 6.654 -5.744 6.734 -5.744 6.894 -5.584 6.894 -5.384 6.734 -5.344 6.654 -5.384 POLYLINE BLACK 6.254 -5.624 6.214 -5.744 6.294 -5.784 6.374 -5.744 6.494 -5.664 6.534 -5.544 6.494 -5.464 6.414 -5.464 6.294 -5.504 POLYLINE BLACK 6.054 -5.464 5.974 -5.424 5.894 -5.504 5.854 -5.584 5.854 -5.744 5.974 -5.704 6.054 -5.624 6.134 -5.504 6.054 -5.504 5.934 -5.584 POLYLINE BLACK 5.574 -5.504 5.454 -5.584 5.414 -5.664 5.454 -5.744 5.574 -5.744 5.654 -5.624 5.574 -5.464 POLYLINE BLACK 5.134 -5.464 5.054 -5.544 5.054 -5.624 5.014 -5.704 5.134 -5.784 5.294 -5.704 5.374 -5.624 5.334 -5.544 5.254 -5.504 5.134 -5.504 POLYLINE BLACK 4.814 -6.744 4.814 -6.864 4.854 -6.944 5.014 -6.544 4.814 -6.544 4.774 -6.704 POLYLINE BLACK 4.774 -6.464 4.694 -6.544 4.694 -6.704 4.774 -6.624 4.774 -6.544 4.774 -6.464 POLYLINE BLACK 4.614 -6.304 4.574 -6.424 4.574 -6.504 4.654 -6.544 4.694 -6.464 4.694 -6.344 4.654 -6.264 POLYLINE BLACK 3.534 -6.184 3.454 -6.264 3.454 -6.384 3.494 -6.464 3.574 -6.504 3.774 -6.424 3.814 -6.304 3.734 -6.144 POLYLINE BLACK 3.134 -5.984 3.094 -6.104 3.094 -6.304 3.174 -6.384 3.254 -6.424 3.334 -6.384 3.414 -6.304 3.414 -6.184 3.374 -6.104 POLYLINE BLACK 2.654 -5.944 2.574 -5.904 2.534 -6.024 2.534 -6.184 2.654 -6.264 2.734 -6.264 2.854 -6.224 2.934 -6.184 2.974 -6.104 2.934 -6.024 2.854 -5.904 2.774 -5.824 POLYLINE BLACK 2.254 -5.784 2.174 -5.824 2.094 -5.864 2.014 -5.904 1.974 -5.984 2.054 -6.024 2.174 -6.064 2.294 -6.064 2.334 -6.224 2.414 -6.144 2.494 -5.984 2.534 -5.864 2.494 -5.784 2.414 -5.784 POLYLINE BLACK 4.014 -7.024 4.014 -7.104 3.974 -7.224 3.974 -7.344 3.934 -7.424 4.014 -7.504 4.134 -7.464 4.214 -7.504 4.334 -7.464 4.414 -7.424 4.414 -7.344 4.374 -7.264 4.414 -7.184 4.414 -7.064 4.334 -6.984 4.254 -6.944 4.134 -6.984 4.054 -7.024 POLYLINE BLACK 5.174 -7.024 5.254 -7.064 5.374 -7.064 5.534 -7.144 5.734 -7.144 5.814 -7.184 6.094 -7.184 6.254 -7.224 6.334 -7.184 6.414 -7.184 6.534 -7.224 6.694 -7.304 6.934 -7.304 7.054 -7.264 7.134 -7.224 7.214 -7.224 7.294 -7.144 7.294 -7.024 7.334 -6.944 7.334 -6.824 7.334 -6.744 7.294 -6.664 7.294 -6.584 7.254 -6.504 7.214 -6.384 7.174 -6.304 7.094 -6.224 7.014 -6.144 6.894 -6.064 6.814 -6.064 6.734 -6.064 6.654 -6.024 6.534 -6.024 6.454 -6.024 6.374 -6.024 6.254 -6.024 6.174 -6.024 6.054 -5.984 5.974 -5.984 5.854 -5.984 5.734 -5.984 5.654 -6.064 5.574 -6.104 5.494 -6.184 5.374 -6.224 5.294 -6.264 5.214 -6.344 5.174 -6.424 5.174 -6.704 5.094 -6.784 5.094 -6.864 5.134 -6.944 POLYLINE BLACK 7.934 -8.144 7.854 -8.064 7.774 -8.144 7.734 -8.224 7.734 -8.304 7.854 -8.344 8.014 -8.264 8.014 -8.184 8.014 -8.104 POLYLINE BLACK 7.574 -8.144 7.494 -8.184 7.454 -8.264 7.534 -8.344 7.614 -8.344 7.694 -8.304 7.694 -8.224 7.614 -8.144 POLYLINE BLACK 7.374 -8.104 7.294 -8.144 7.214 -8.184 7.174 -8.264 7.214 -8.344 7.294 -8.344 7.374 -8.304 7.454 -8.224 7.414 -8.104 7.334 -8.144 POLYLINE BLACK 7.094 -8.144 6.974 -8.144 6.894 -8.224 6.894 -8.304 6.974 -8.344 7.094 -8.264 7.134 -8.184 7.054 -8.144 POLYLINE BLACK 6.774 -8.104 6.694 -8.104 6.614 -8.104 6.574 -8.224 6.614 -8.304 6.694 -8.344 6.774 -8.304 6.854 -8.224 6.814 -8.144 POLYLINE BLACK 6.494 -8.104 6.414 -8.144 6.294 -8.184 6.214 -8.224 6.294 -8.304 6.374 -8.344 6.454 -8.344 6.574 -8.264 6.574 -8.184 POLYLINE BLACK 6.174 -8.144 6.094 -8.144 6.054 -8.264 6.054 -8.344 6.134 -8.304 6.214 -8.224 6.294 -8.104 6.214 -8.024 POLYLINE BLACK 5.934 -8.104 5.854 -8.104 5.774 -8.184 5.694 -8.344 5.814 -8.344 5.974 -8.224 5.894 -8.184 POLYLINE BLACK 5.534 -8.184 5.494 -8.344 5.614 -8.304 5.694 -8.264 5.774 -8.184 5.694 -8.064 5.614 -8.064 POLYLINE BLACK 5.334 -8.184 5.374 -8.104 5.294 -8.064 5.214 -8.104 5.134 -8.184 5.094 -8.304 5.174 -8.344 5.294 -8.264 5.374 -8.184 5.454 -8.144 5.374 -8.104 5.294 -8.144 POLYLINE BLACK 5.014 -8.104 4.854 -8.184 4.814 -8.304 4.894 -8.344 5.134 -8.264 5.214 -8.144 5.094 -8.104 POLYLINE BLACK 4.734 -8.144 4.654 -8.184 4.574 -8.264 4.534 -8.344 4.614 -8.384 4.854 -8.304 4.894 -8.224 4.774 -8.144 POLYLINE BLACK 4.414 -8.104 4.334 -8.144 4.254 -8.224 4.294 -8.304 4.374 -8.384 4.454 -8.304 4.494 -8.184 4.494 -8.104 4.414 -8.144 POLYLINE BLACK 4.214 -8.144 4.174 -8.064 4.094 -8.144 4.054 -8.264 4.014 -8.344 4.134 -8.304 4.214 -8.264 4.294 -8.184 4.294 -8.104 4.174 -8.144 POLYLINE BLACK 3.894 -8.104 3.774 -8.144 3.694 -8.184 3.654 -8.304 3.734 -8.384 3.814 -8.424 3.934 -8.384 3.974 -8.304 4.014 -8.184 3.974 -8.104 POLYLINE BLACK 3.454 -8.144 3.374 -8.184 3.334 -8.264 3.334 -8.384 3.574 -8.384 3.654 -8.304 3.694 -8.224 3.654 -8.144 POLYLINE BLACK 3.294 -8.184 3.214 -8.144 3.134 -8.104 3.054 -8.104 2.974 -8.184 3.054 -8.264 3.134 -8.264 3.214 -8.304 3.294 -8.224 3.334 -8.144 3.214 -8.184 POLYLINE BLACK 2.814 -8.104 2.734 -8.144 2.694 -8.224 2.734 -8.304 2.774 -8.224 2.774 -8.304 2.854 -8.304 2.934 -8.224 2.974 -8.144 2.894 -8.104 2.814 -8.104 POLYLINE BLACK 2.494 -8.184 2.374 -8.184 2.294 -8.224 2.294 -8.304 2.414 -8.384 2.574 -8.304 2.614 -8.224 POLYLINE BLUE -10.186 -6.064 -10.226 -6.144 -10.186 -6.224 -10.226 -6.304 -10.226 -6.464 POLYLINE BLUE -10.506 -6.464 -10.426 -6.464 -10.306 -6.464 -10.226 -6.464 POLYLINE BLUE -10.346 -5.544 -10.266 -5.584 -10.186 -5.664 -10.186 -5.744 -10.146 -5.824 -10.226 -5.944 -10.306 -6.104 -10.306 -6.184 -10.346 -6.264 -10.266 -6.424 -10.146 -6.504 POLYLINE BLACK 0.014 -8.064 -0.066 -8.064 -0.106 -8.144 -0.106 -8.224 -0.026 -8.224 0.094 -8.224 0.174 -8.184 0.134 -8.104 0.014 -8.064 POLYLINE BLACK -1.186 -5.344 -1.306 -5.384 -1.346 -5.464 -1.426 -5.584 -1.466 -5.664 -1.546 -5.744 -1.546 -5.904 -1.586 -5.984 -1.586 -6.184 -1.626 -6.344 -1.666 -6.584 -1.666 -6.744 POLYLINE BLACK -1.826 -5.104 -1.986 -5.264 -2.066 -5.464 -2.146 -5.624 -2.146 -5.704 -2.186 -5.784 -2.186 -6.104 -2.266 -6.344 POLYLINE BLACK -2.506 -4.864 -2.586 -4.904 -2.666 -4.984 -2.706 -5.064 -2.866 -5.224 -2.986 -5.304 -3.106 -5.544 -3.106 -5.704 -3.146 -5.824 -3.146 -5.904 -3.186 -6.064 -3.186 -6.144 POLYLINE BLACK -0.946 -4.744 -1.026 -4.744 -1.146 -4.824 -1.186 -4.904 -1.226 -5.064 -1.226 -5.144 -1.066 -5.304 -0.986 -5.344 -0.866 -5.424 -0.786 -5.424 -0.706 -5.424 -0.626 -5.384 -0.546 -5.344 -0.506 -5.264 -0.506 -5.184 -0.546 -5.104 -0.626 -4.944 -0.666 -4.864 POLYLINE BLACK -1.506 -4.544 -1.546 -4.464 -1.666 -4.544 -1.746 -4.624 -1.786 -4.704 -1.746 -4.984 -1.666 -5.024 -1.546 -5.024 -1.426 -5.024 -1.346 -4.984 -1.266 -5.024 -1.186 -4.944 -1.146 -4.864 -1.186 -4.784 -1.186 -4.664 -1.266 -4.584 -1.346 -4.544 -1.426 -4.544 POLYLINE BLACK -2.026 -4.424 -2.106 -4.424 -2.266 -4.504 -2.386 -4.584 -2.466 -4.624 -2.466 -4.824 -2.426 -4.904 -2.346 -4.944 -2.266 -4.984 -2.186 -4.984 -2.106 -4.944 -1.986 -4.864 -1.906 -4.864 -1.826 -4.784 -1.826 -4.664 -1.866 -4.584 -1.906 -4.504 -1.986 -4.424 POLYLINE BLACK -0.466 -5.424 -0.506 -5.584 -0.546 -5.504 -0.626 -5.624 -0.626 -5.704 -0.706 -5.864 -0.626 -5.904 -0.546 -5.904 -0.426 -5.904 -0.346 -5.824 -0.306 -5.744 -0.306 -5.664 -0.306 -5.584 -0.346 -5.504 -0.426 -5.504 POLYLINE BLACK -0.746 -5.984 -0.826 -6.024 -0.866 -6.144 -0.906 -6.224 -0.986 -6.304 -1.026 -6.384 -1.026 -6.384 -1.026 -6.464 -0.946 -6.464 -0.826 -6.424 -0.746 -6.384 -0.706 -6.264 -0.706 -6.184 -0.746 -6.104 -0.746 -6.024 POLYLINE BLACK -0.426 -7.304 -0.626 -7.504 -0.746 -7.744 -0.786 -7.864 -0.786 -8.024 -0.826 -8.144 -0.786 -8.224 POLYLINE BLACK -1.026 -7.224 -1.106 -7.304 -1.186 -7.424 -1.226 -7.504 -1.266 -7.624 -1.306 -7.864 -1.306 -8.064 POLYLINE BLACK -1.466 -7.104 -1.386 -7.064 -1.306 -7.064 -1.226 -7.064 -1.146 -7.064 -1.066 -7.064 -0.946 -7.064 -0.866 -7.064 -0.666 -7.104 -0.586 -7.144 -0.506 -7.144 -0.426 -7.184 -0.306 -7.184 -0.226 -7.264 -0.146 -7.384 -0.066 -7.344 0.014 -7.384 POLYLINE BLACK -0.866 -6.664 -0.746 -6.704 -0.746 -6.624 -0.666 -6.624 -0.586 -6.584 -0.506 -6.584 -0.426 -6.584 -0.226 -6.624 -0.146 -6.664 -0.106 -6.744 -0.106 -6.824 -0.026 -6.904 0.014 -6.984 0.094 -7.104 0.174 -7.104 POLYLINE BLACK -1.586 -6.744 -1.586 -6.824 -1.626 -6.904 -1.546 -6.984 -1.426 -7.024 -1.346 -6.984 -1.146 -6.944 -0.986 -6.944 -0.906 -6.904 -0.826 -6.864 -0.826 -6.784 -0.906 -6.744 -0.946 -6.664 -1.026 -6.624 -1.186 -6.624 -1.426 -6.744 -1.546 -6.704 -1.666 -6.744 POLYLINE BLACK -3.226 -5.984 -3.306 -6.144 -3.466 -6.344 -3.506 -6.424 -3.626 -6.584 -3.706 -6.824 -3.786 -7.104 -3.786 -7.304 -3.826 -7.384 POLYLINE BLACK -2.306 -6.424 -2.386 -6.504 -2.426 -6.584 -2.546 -6.744 -2.786 -6.984 -2.866 -7.144 -2.906 -7.344 -2.906 -7.424 -2.946 -7.624 POLYLINE BLACK -1.546 -7.064 -1.666 -7.144 -1.746 -7.264 -1.826 -7.504 -1.906 -7.584 -1.946 -7.664 -2.026 -7.744 -2.026 -7.824 POLYLINE BLACK -4.066 -5.864 -4.146 -5.944 -4.306 -6.064 -4.386 -6.144 -4.426 -6.304 -4.466 -6.504 -4.506 -6.584 -4.586 -6.784 -4.626 -6.864 -4.626 -6.944 POLYLINE BLACK -4.986 -6.024 -4.906 -6.024 -4.826 -6.024 -4.746 -6.064 -4.666 -6.104 -4.546 -6.104 -4.466 -6.144 -4.386 -6.224 -4.306 -6.224 -4.226 -6.344 -4.146 -6.384 -4.066 -6.424 -3.986 -6.424 -3.906 -6.424 -3.786 -6.464 -3.706 -6.544 -3.626 -6.584 -3.466 -6.664 -3.306 -6.824 -3.106 -6.784 -3.026 -6.864 -2.946 -6.904 -2.786 -7.064 -2.706 -7.064 -2.586 -7.104 -2.426 -7.184 -2.226 -7.184 -2.146 -7.264 -2.026 -7.304 -1.946 -7.304 -1.866 -7.304 -1.786 -7.304 -1.666 -7.344 POLYLINE BLACK -4.586 -5.144 -4.546 -5.224 -4.546 -5.304 -4.346 -5.504 -4.266 -5.544 -4.186 -5.624 -4.106 -5.664 -4.026 -5.744 -3.946 -5.784 -3.866 -5.864 -3.786 -5.864 -3.706 -5.864 -3.626 -5.864 -3.546 -5.864 -3.426 -5.904 -3.346 -5.944 -3.266 -5.984 -3.186 -5.984 -3.186 -5.944 -3.106 -5.984 -3.026 -6.024 -2.906 -6.024 -2.826 -6.104 -2.746 -6.104 -2.666 -6.144 -2.546 -6.184 -2.466 -6.264 -2.386 -6.264 -2.306 -6.224 -2.226 -6.344 -2.146 -6.344 -2.106 -6.424 -1.946 -6.584 -1.866 -6.624 -1.786 -6.664 -1.626 -6.824 -1.546 -6.864 -1.506 -7.024 POLYLINE BLUE 0.494 -6.624 0.454 -6.704 0.454 -6.784 0.494 -6.944 0.534 -7.024 0.614 -6.984 0.654 -6.904 0.694 -6.824 0.774 -6.744 POLYLINE BLUE 0.814 -6.064 0.814 -6.144 0.734 -6.304 0.694 -6.424 0.694 -6.504 0.654 -6.584 0.654 -6.704 0.614 -6.784 0.614 -7.024 POLYLINE BLACK -0.106 -8.064 -0.226 -8.104 -0.226 -8.184 -0.106 -8.144 -0.106 -8.064 -0.226 -8.064 POLYLINE BLACK -0.386 -8.064 -0.506 -8.024 -0.426 -8.144 -0.346 -8.144 -0.306 -8.024 POLYLINE BLACK -1.146 -8.264 -1.066 -8.264 -0.946 -8.264 -0.866 -8.264 -0.786 -8.224 -0.706 -8.224 -0.626 -8.224 -0.506 -8.224 -0.426 -8.184 -0.346 -8.184 -0.226 -8.224 -0.146 -8.224 -0.066 -8.224 0.014 -8.264 0.134 -8.304 0.294 -8.304 0.374 -8.384 0.414 -8.304 0.694 -8.304 0.854 -8.384 POLYLINE BLACK 2.094 -8.184 2.014 -8.224 1.934 -8.304 1.934 -8.424 2.014 -8.424 2.134 -8.384 2.254 -8.224 2.214 -8.144 2.094 -8.144 POLYLINE BLACK 1.854 -8.064 1.734 -8.104 1.694 -8.184 1.614 -8.264 1.574 -8.344 1.694 -8.424 1.814 -8.304 1.934 -8.224 1.974 -8.144 1.854 -8.104 1.654 -8.144 POLYLINE BLACK 1.494 -8.104 1.374 -8.144 1.294 -8.184 1.254 -8.264 1.334 -8.384 1.454 -8.384 1.614 -8.184 1.494 -8.064 POLYLINE BLACK 1.174 -8.104 1.094 -8.104 1.014 -8.184 0.974 -8.264 1.014 -8.344 1.094 -8.344 1.174 -8.304 1.254 -8.224 1.254 -8.144 1.174 -8.104 POLYLINE BLACK -0.666 -8.024 -0.746 -8.104 -0.746 -8.184 -0.666 -8.144 -0.546 -8.144 -0.546 -8.024 -0.586 -7.904 POLYLINE BLACK -0.906 -8.024 -1.026 -8.104 -1.026 -8.224 -0.826 -8.184 -0.746 -8.104 -0.826 -8.144 POLYLINE BLACK -1.146 -7.984 -1.226 -8.024 -1.266 -8.104 -1.186 -8.144 -1.106 -8.144 -1.026 -8.104 -1.106 -8.024 POLYLINE BLACK -1.426 -7.984 -1.546 -8.104 -1.546 -8.184 -1.426 -8.184 -1.306 -8.144 -1.426 -8.104 -1.506 -8.104 POLYLINE BLACK -1.626 -7.984 -1.706 -7.984 -1.826 -8.064 -1.866 -8.144 -1.706 -8.144 -1.626 -8.064 -1.546 -8.024 -1.666 -7.984 -1.786 -8.064 POLYLINE BLACK -1.946 -7.864 -2.066 -7.904 -2.146 -8.024 -2.106 -8.104 -1.946 -8.024 -1.866 -7.944 -1.986 -7.904 POLYLINE BLACK -2.226 -7.864 -2.306 -7.864 -2.386 -7.904 -2.466 -7.984 -2.226 -8.024 -2.066 -7.864 -2.106 -7.784 -2.226 -7.784 POLYLINE BLACK -2.546 -7.744 -2.706 -7.904 -2.586 -7.944 -2.506 -7.984 -2.426 -7.904 -2.426 -7.824 -2.506 -7.864 POLYLINE BLACK -2.906 -7.744 -2.986 -7.784 -3.026 -7.864 -2.906 -7.944 -2.786 -7.904 -2.706 -7.824 -2.826 -7.744 -2.946 -7.824 POLYLINE BLACK -3.266 -7.544 -3.386 -7.624 -3.346 -7.744 -3.226 -7.824 -3.146 -7.824 -3.066 -7.744 -3.026 -7.664 -3.146 -7.584 -3.266 -7.624 POLYLINE BLACK -3.546 -7.424 -3.666 -7.424 -3.706 -7.504 -3.586 -7.584 -3.466 -7.584 -3.386 -7.544 -3.306 -7.464 -3.506 -7.424 -3.586 -7.464 POLYLINE BLACK -3.946 -7.264 -4.026 -7.344 -4.026 -7.424 -3.866 -7.504 -3.746 -7.424 -3.666 -7.344 -3.786 -7.304 -3.866 -7.344 POLYLINE BLACK -4.346 -7.064 -4.346 -7.144 -4.386 -7.264 -4.306 -7.384 -4.106 -7.464 -4.026 -7.344 -3.986 -7.224 -4.066 -7.144 -4.146 -7.144 POLYLINE BLACK -4.666 -7.064 -4.746 -7.184 -4.546 -7.184 -4.466 -7.144 -4.546 -6.984 -4.666 -7.024 POLYLINE BLACK -4.826 -6.784 -4.906 -6.784 -4.986 -6.944 -4.986 -7.064 -4.906 -7.104 -4.826 -7.104 -4.626 -6.944 -4.626 -6.864 -4.826 -6.864 -4.906 -6.984 POLYLINE BLACK -5.066 -6.664 -5.106 -6.744 -5.066 -6.824 -4.986 -6.824 -4.826 -6.704 -4.826 -6.624 -4.946 -6.624 -5.026 -6.664 POLYLINE BLACK -3.346 -2.544 -3.506 -2.704 -3.546 -2.784 -3.626 -2.824 -3.666 -2.904 -3.746 -2.984 -3.786 -3.064 -3.906 -3.104 -3.946 -3.224 -3.986 -3.304 -4.066 -3.384 -4.106 -3.464 -4.186 -3.544 -4.186 -3.624 -4.266 -3.704 -4.266 -3.824 -4.346 -3.944 -4.346 -4.024 -4.386 -4.104 -4.426 -4.384 -4.426 -4.624 -4.466 -4.704 -4.466 -4.784 -4.506 -4.904 -4.546 -4.984 -4.546 -5.144 POLYLINE BLACK -6.826 -2.904 -6.906 -2.984 -6.906 -3.064 -6.946 -3.144 -6.946 -3.224 -7.026 -3.384 -7.186 -3.624 -7.226 -3.704 -7.266 -3.824 -7.266 -4.224 -7.226 -4.424 -7.226 -4.504 -7.186 -4.624 -7.186 -4.784 -7.146 -4.864 -7.146 -5.024 -7.106 -5.104 -7.106 -5.784 -7.146 -5.864 -7.106 -5.944 -7.106 -6.024 -7.026 -6.184 -6.946 -6.264 -6.946 -6.384 -6.866 -6.464 POLYLINE BLACK -9.706 -6.384 -9.746 -6.504 -9.746 -6.704 -9.786 -6.784 -9.786 -6.864 -9.746 -6.944 -9.666 -7.184 -9.506 -7.384 POLYLINE BLACK -9.066 -5.624 -9.106 -5.704 -9.106 -5.784 -9.146 -5.904 -9.226 -5.984 -9.306 -6.184 -9.306 -6.424 -9.266 -6.584 -9.186 -6.664 -9.146 -6.744 -9.026 -6.944 -8.906 -7.024 -8.826 -7.024 POLYLINE BLACK -8.226 -2.984 -8.266 -3.064 -8.266 -3.144 -8.346 -3.304 -8.386 -3.424 -8.386 -3.824 -8.346 -3.984 -8.346 -3.944 -8.306 -4.024 -8.226 -4.104 -8.226 -4.184 -8.186 -4.304 -8.186 -4.384 -8.106 -4.544 -8.106 -4.584 -8.066 -4.664 -8.066 -4.784 -8.026 -4.784 -8.026 -5.184 -7.986 -5.264 -7.986 -5.464 -8.106 -5.704 -8.106 -6.024 -8.146 -6.144 -8.146 -6.424 -7.986 -6.744 -7.906 -6.824 POLYLINE BLACK -6.626 -2.144 -6.706 -2.224 -6.746 -2.304 -6.706 -2.384 -6.706 -2.544 -6.666 -2.624 -6.586 -2.824 -6.506 -2.784 -6.426 -2.824 -6.346 -2.824 -6.266 -2.824 -6.146 -2.824 -6.066 -2.824 -6.026 -2.704 -5.986 -2.624 -5.986 -2.544 -6.106 -2.344 -6.186 -2.344 -6.186 -2.224 -6.266 -2.104 -6.466 -1.984 -6.626 -2.024 POLYLINE BLACK -7.186 -2.264 -7.306 -2.264 -7.386 -2.344 -7.426 -2.424 -7.386 -2.504 -7.346 -2.624 -7.346 -2.704 -7.266 -2.784 -7.186 -2.784 -7.106 -2.824 -7.026 -2.864 -6.906 -2.864 -6.826 -2.784 -6.746 -2.784 -6.706 -2.704 -6.706 -2.624 -6.706 -2.504 -6.786 -2.344 -6.946 -2.224 POLYLINE BLACK -7.946 -2.264 -8.026 -2.264 -8.146 -2.344 -8.186 -2.464 -8.186 -2.544 -8.066 -2.544 -8.026 -2.744 -7.946 -2.824 -7.906 -2.904 -7.826 -2.944 -7.706 -2.904 -7.626 -2.864 -7.546 -2.864 -7.466 -2.864 -7.386 -2.904 -7.346 -2.824 -7.386 -2.744 -7.466 -2.624 -7.506 -2.504 -7.706 -2.304 -7.866 -2.224 -7.986 -2.184 POLYLINE BLACK -8.906 -2.424 -8.946 -2.504 -8.986 -2.624 -8.986 -2.704 -8.906 -2.864 -8.826 -2.824 -8.706 -2.864 -8.626 -2.904 -8.466 -2.944 -8.346 -2.944 -8.226 -2.904 -8.146 -2.904 -8.066 -2.944 -7.986 -2.824 -7.986 -2.744 -8.066 -2.664 -8.106 -2.544 -8.186 -2.504 -8.306 -2.424 -8.746 -2.424 POLYLINE BLACK -9.026 -3.864 -8.946 -3.824 -8.826 -3.784 -8.746 -3.784 -8.706 -3.704 -8.626 -3.704 -8.506 -3.584 -8.386 -3.624 -8.266 -3.544 -8.186 -3.544 -7.986 -3.504 -7.866 -3.464 -7.786 -3.464 -7.666 -3.424 -7.586 -3.464 -7.466 -3.464 -7.266 -3.464 -7.146 -3.464 -7.066 -3.424 -6.986 -3.384 -6.866 -3.424 -6.706 -3.384 -6.466 -3.384 -6.266 -3.384 -5.986 -3.384 -5.866 -3.384 -5.666 -3.384 POLYLINE BLACK -9.146 -5.624 -9.066 -5.544 -8.986 -5.504 -8.906 -5.424 -8.786 -5.384 -8.706 -5.344 -8.546 -5.304 -8.386 -5.224 -8.266 -5.184 -8.186 -5.144 -7.986 -5.064 -7.866 -5.024 -7.666 -4.984 -7.586 -4.944 -7.506 -4.944 -7.306 -4.904 -7.066 -4.824 -6.946 -4.784 -6.706 -4.744 -6.506 -4.704 -6.266 -4.624 -6.066 -4.584 POLYLINE BLACK -9.626 -6.144 -9.546 -6.144 -9.466 -6.064 -9.386 -6.024 -9.306 -5.944 -9.266 -5.864 -9.226 -5.784 -9.186 -5.704 -9.186 -5.584 -9.146 -5.504 -9.146 -5.424 -9.146 -5.344 -9.106 -5.224 -9.106 -5.144 -9.106 -5.024 -9.106 -4.904 -9.066 -4.784 -9.066 -4.704 -9.066 -4.624 -9.066 -4.504 -9.026 -4.424 -9.026 -4.344 -9.026 -4.144 -9.026 -4.064 -9.026 -3.984 -8.986 -3.784 -8.986 -3.704 -8.946 -3.624 -8.946 -3.504 -8.946 -3.424 -8.946 -3.344 -8.906 -3.264 -8.946 -3.184 -8.986 -3.104 POLYLINE BLACK -9.586 -6.264 -9.746 -6.344 -9.986 -6.624 -10.066 -6.704 -10.106 -6.784 -10.106 -6.864 -10.146 -7.024 -10.186 -7.104 -10.186 -7.224 -10.066 -7.304 -10.066 -7.384 -9.946 -7.464 -9.866 -7.464 -9.826 -7.544 -9.746 -7.544 -9.626 -7.504 POLYLINE BLACK -9.666 -7.504 -9.546 -7.424 -9.466 -7.344 -9.386 -7.304 -9.306 -7.224 -9.226 -7.184 -9.106 -7.144 -9.026 -7.104 -8.946 -7.064 -8.826 -7.064 -8.746 -7.024 -8.626 -6.984 -8.546 -6.984 -8.466 -6.984 -8.346 -6.944 -8.226 -6.904 -8.066 -6.864 -7.986 -6.824 -7.906 -6.784 -7.826 -6.784 -7.706 -6.744 -7.546 -6.664 -7.386 -6.624 -7.306 -6.584 -7.026 -6.544 -6.946 -6.504 -6.826 -6.464 -6.746 -6.424 -6.626 -6.384 POLYLINE BLACK -6.786 -0.984 -6.706 -0.944 -6.586 -0.984 -6.506 -1.064 -6.426 -1.104 -6.226 -1.104 -6.106 -1.144 -6.026 -1.144 -5.866 -1.184 -5.706 -1.224 -5.546 -1.304 -5.426 -1.344 -5.346 -1.344 -5.266 -1.424 -5.186 -1.544 -5.106 -1.584 -5.026 -1.744 -4.986 -1.904 -4.986 -1.984 -5.026 -2.104 -5.026 -2.424 -5.106 -2.584 -5.106 -2.664 -5.186 -2.744 -5.226 -2.824 -5.306 -2.904 -5.346 -2.984 -5.386 -3.104 -5.466 -3.184 -5.506 -3.304 -5.546 -3.384 -5.626 -3.464 -5.666 -3.584 -5.706 -3.664 -5.706 -3.744 -5.746 -3.864 -5.826 -4.024 -5.866 -4.144 -5.906 -4.224 -5.906 -4.384 -5.946 -4.464 -5.946 -4.544 -5.986 -4.624 -6.026 -4.744 -6.066 -4.824 -6.066 -4.904 -6.106 -4.984 -6.106 -5.104 -6.146 -5.184 -6.146 -5.344 -6.186 -5.424 -6.186 -5.504 POLYLINE BLACK -7.986 0.896 -7.866 0.856 -7.786 0.776 -7.706 0.776 -7.626 0.776 -7.586 0.696 -7.386 0.656 -7.226 0.656 -7.026 0.616 -6.746 0.536 -6.426 0.536 -6.306 0.496 -6.226 0.496 -6.106 0.496 -6.026 0.496 -5.946 0.496 -5.826 0.496 -5.746 0.536 -5.666 0.576 -5.506 0.576 -5.306 0.576 -5.266 0.696 -5.186 0.736 -5.026 0.936 -5.026 1.136 POLYLINE BLACK -2.786 1.016 -2.786 0.856 -2.746 0.736 -2.706 0.656 -2.626 0.536 -2.546 0.456 -2.466 0.376 -2.386 0.296 -2.266 0.256 -2.186 0.216 -2.106 0.216 -2.026 0.176 -1.946 0.176 -1.826 0.136 -1.746 0.136 -1.666 0.176 -1.586 0.176 -1.466 0.216 -1.386 0.256 -1.266 0.336 -1.106 0.496 -1.026 0.496 -0.906 0.536 -0.746 0.616 -0.506 0.696 -0.386 0.736 -0.106 0.816 POLYLINE BLACK -6.506 -5.744 -6.426 -5.704 -6.306 -5.744 -6.226 -5.784 -6.146 -5.904 -6.066 -5.904 -6.026 -6.024 -5.986 -6.104 -5.986 -6.184 -5.946 -6.144 -5.946 -6.264 -6.026 -6.344 -6.146 -6.384 -6.226 -6.424 -6.306 -6.424 -6.466 -6.344 -6.626 -6.184 -6.746 -6.104 -6.786 -6.024 -6.786 -5.944 -6.706 -5.864 -6.626 -5.784 -6.546 -5.744 -6.506 -5.664 POLYLINE BLACK -5.666 -6.064 -5.586 -6.144 -5.506 -6.184 -5.426 -6.184 -5.346 -6.224 -5.226 -6.264 -5.186 -6.344 -5.106 -6.344 -5.026 -6.464 -5.026 -6.544 -5.186 -6.624 -5.546 -6.624 -5.626 -6.504 -5.626 -6.424 -5.746 -6.424 -5.826 -6.344 -5.866 -6.264 -5.826 -6.144 -5.786 -6.064 -5.786 -5.984 POLYLINE BLACK -5.306 -4.824 -5.386 -4.864 -5.466 -5.024 -5.466 -5.184 -5.426 -5.264 -5.426 -5.384 -5.346 -5.424 -5.226 -5.464 -5.146 -5.504 -5.066 -5.504 -4.906 -5.464 -4.826 -5.464 -4.746 -5.384 -4.706 -5.304 -4.706 -5.224 -4.706 -5.104 -4.706 -5.024 -4.746 -4.944 -4.786 -4.864 -4.866 -4.784 POLYLINE BLACK -5.386 -4.544 -5.306 -4.504 -5.226 -4.424 -5.146 -4.384 -5.066 -4.384 -4.986 -4.384 -4.866 -4.424 -4.786 -4.424 -4.706 -4.504 -4.666 -4.584 -4.746 -4.624 -4.826 -4.744 -4.866 -4.664 -4.906 -4.744 -4.986 -4.824 -4.986 -4.904 -5.066 -4.984 -5.146 -4.984 -5.146 -4.904 -5.226 -4.784 -5.226 -4.704 -5.346 -4.664 -5.426 -4.624 POLYLINE BLACK -0.386 -0.344 -0.506 -0.384 -0.546 -0.464 -0.546 -0.544 -0.466 -0.704 -0.386 -0.704 -0.266 -0.664 -0.186 -0.584 -0.146 -0.504 -0.106 -0.384 -0.186 -0.304 POLYLINE BLACK -0.706 -0.584 -0.786 -0.624 -0.906 -0.704 -0.946 -0.784 -0.946 -0.864 -0.906 -0.944 -0.826 -1.024 -0.746 -1.024 -0.666 -0.944 -0.546 -0.824 -0.506 -0.744 -0.506 -0.624 -0.546 -0.544 -0.626 -0.504 -0.706 -0.544 -0.746 -0.664 POLYLINE BLACK -1.066 -0.904 -1.146 -0.904 -1.226 -0.984 -1.266 -1.064 -1.266 -1.144 -1.226 -1.224 -1.146 -1.304 -1.066 -1.304 -0.946 -1.184 -0.866 -1.104 -0.866 -1.024 -0.906 -0.944 -0.946 -0.824 -0.986 -0.744 POLYLINE BLACK -1.506 -1.184 -1.586 -1.184 -1.626 -1.304 -1.706 -1.304 -1.786 -1.424 -1.786 -1.504 -1.386 -1.504 -1.306 -1.424 -1.266 -1.344 -1.266 -1.264 -1.346 -1.184 -1.466 -1.104 POLYLINE BLACK -1.906 -1.424 -1.986 -1.424 -2.026 -1.544 -2.106 -1.504 -2.186 -1.664 -2.106 -1.824 -2.026 -1.864 -1.906 -1.864 -1.826 -1.864 -1.746 -1.864 -1.666 -1.824 -1.626 -1.704 -1.666 -1.624 -1.706 -1.504 -1.706 -1.424 -1.786 -1.384 -1.946 -1.504 POLYLINE BLACK -2.226 -1.944 -2.386 -1.944 -2.466 -2.024 -2.426 -2.144 -2.426 -2.224 -2.346 -2.224 -2.266 -2.224 -2.186 -2.224 -2.106 -2.184 -1.986 -2.144 -1.946 -2.024 -1.946 -1.944 -1.906 -1.864 -1.946 -1.744 -2.066 -1.704 -2.146 -1.744 POLYLINE BLACK -2.666 -2.144 -2.746 -2.104 -2.826 -2.184 -2.906 -2.344 -2.866 -2.464 -2.746 -2.504 -2.666 -2.504 -2.586 -2.504 -2.506 -2.464 -2.426 -2.384 -2.426 -2.304 -2.466 -2.224 -2.506 -2.104 -2.546 -2.024 -2.626 -2.104 POLYLINE BLACK -3.226 -2.424 -3.306 -2.584 -3.306 -2.784 -3.226 -2.824 -3.106 -2.864 -3.026 -2.864 -2.906 -2.784 -2.866 -2.704 -2.786 -2.544 -2.826 -2.464 -2.866 -2.344 -2.986 -2.304 -3.066 -2.344 -3.146 -2.224 -3.226 -2.224 POLYLINE BLACK 0.088 0.154 -0.092 -0.026 -0.212 -0.086 -0.332 -0.206 -0.212 -0.266 -0.032 -0.386 0.088 -0.446 0.268 -0.266 0.328 -0.146 0.388 -0.026 0.268 0.094 0.148 0.094 POLYLINE BLACK -0.092 0.034 therion-5.4.1/samples/pocket-topo/Demo_e.xvi000066400000000000000000001002301307545355600210320ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { {0.00 0.00 503.0} {-190.47 -93.82 503.1} {-233.86 -208.03 503.2} {-382.64 -279.61 503.3} {-233.86 -208.03 504.0} {-184.92 -243.31 504.1} {-57.40 -292.28 504.2} {93.31 -313.54 504.3} {190.28 -309.29 504.4} {322.01 -310.75 504.5} {388.94 -219.25 504.6} } set XVIshots { {322.01 -310.75 388.94 -219.25} {388.94 -219.25 382.91 -218.70} {388.94 -219.25 375.12 -204.13} {388.94 -219.25 392.64 -236.85} {190.28 -309.29 322.01 -310.75} {322.01 -310.75 321.81 -272.36} {322.01 -310.75 325.12 -306.85} {322.01 -310.75 319.84 -319.13} {93.31 -313.54 190.28 -309.29} {190.28 -309.29 169.80 -308.90} {190.28 -309.29 217.09 -309.13} {190.28 -309.29 211.77 -307.32} {190.28 -309.29 210.20 -306.89} {190.28 -309.29 213.74 -307.24} {190.28 -309.29 216.38 -305.98} {190.28 -309.29 220.28 -301.69} {190.28 -309.29 193.27 -323.82} {190.28 -309.29 253.35 -244.69} {-57.40 -292.28 93.31 -313.54} {93.31 -313.54 83.35 -305.08} {93.31 -313.54 105.35 -309.13} {93.31 -313.54 94.92 -321.65} {93.31 -313.54 93.94 -265.04} {-184.92 -243.31 -57.40 -292.28} {-57.40 -292.28 -56.65 -292.76} {-57.40 -292.28 -56.73 -314.21} {-57.40 -292.28 -58.11 -273.19} {-233.86 -208.03 -184.92 -243.31} {-184.92 -243.31 -152.80 -229.09} {-184.92 -243.31 -210.31 -230.51} {-184.92 -243.31 -170.35 -285.71} {-184.92 -243.31 -181.02 -214.80} {-233.86 -208.03 -233.86 -208.03} {-233.86 -208.03 -227.52 -214.21} {-233.86 -208.03 -262.36 -207.01} {-233.86 -208.03 -242.68 -235.79} {-233.86 -208.03 -212.17 -207.32} {-233.86 -208.03 -382.64 -279.61} {-382.64 -279.61 -380.39 -294.37} {-382.64 -279.61 -368.27 -278.23} {-382.64 -279.61 -379.76 -281.54} {-382.64 -279.61 -372.32 -256.61} {-190.47 -93.82 -233.86 -208.03} {0.00 0.00 -190.47 -93.82} {-190.47 -93.82 -231.81 -97.13} {-190.47 -93.82 -227.99 -0.79} {-190.47 -93.82 -214.84 21.26} {-190.47 -93.82 -137.20 -115.39} {0.00 0.00 -55.31 2.80} {0.00 0.00 -18.74 4.84} {0.00 0.00 -37.28 17.80} } set XVIsketchlines { {black 73.78 -233.23 72.60 -236.77 70.24 -239.13 66.69 -241.50 63.15 -246.22 58.43 -250.94 57.24 -254.49 54.88 -255.67 52.52 -260.39 50.16 -262.76 48.98 -267.48 48.98 -280.47 47.80 -284.02 47.80 -286.38 46.61 -288.74 46.61 -291.10 45.43 -293.46 45.43 -295.83 44.25 -299.37 43.07 -301.73 44.25 -304.09 38.35 -315.91} {black 82.05 -237.95 77.32 -247.40 76.14 -250.94 76.14 -253.31 74.96 -255.67 74.96 -261.57 72.60 -266.30 72.60 -268.66 74.96 -273.39 76.14 -276.93 80.87 -279.29 84.41 -281.65 89.13 -284.02 95.04 -286.38 97.40 -287.56 98.58 -289.92 98.58 -299.37 99.76 -301.73 99.76 -305.28 98.58 -307.64} {black 6.46 -279.29 5.28 -281.65 4.09 -285.20 1.73 -287.56 0.55 -289.92 -1.81 -292.28 -2.99 -295.83 -4.17 -298.19 -5.35 -301.73 -5.35 -306.46 -6.54 -308.82 -6.54 -318.27} {black 315.51 -322.20 321.81 -319.06 324.96 -314.33 328.11 -312.76 337.56 -303.31 340.71 -303.31 347.01 -300.16} {black 402.13 -237.17 398.98 -238.74 395.83 -245.04 400.55 -248.19 403.70 -248.19 406.85 -246.61 410.00 -243.46 408.43 -240.31 410.00 -237.17 405.28 -234.02} {black 391.10 -234.02 387.95 -235.59 384.80 -238.74 383.23 -241.89 383.23 -248.19 386.38 -248.19 394.25 -245.04 397.40 -241.89 395.83 -238.74 392.68 -238.74} {black 376.93 -235.59 372.20 -237.17 369.06 -240.31 369.06 -248.19 372.20 -251.34 380.08 -248.19 383.23 -245.04 384.80 -241.89 383.23 -238.74 378.50 -237.17 375.35 -240.31} {black 362.76 -245.04 361.18 -248.19 358.03 -251.34 354.88 -256.06 356.46 -259.21 359.61 -260.79 367.48 -259.21 370.63 -254.49 370.63 -251.34 367.48 -249.76 362.76 -251.34} {black 353.31 -263.94 350.16 -268.66 348.58 -271.81 348.58 -274.96 350.16 -278.11 353.31 -278.11 358.03 -274.96 361.18 -267.09 358.03 -259.21 353.31 -259.21 350.16 -262.36} {black 358.03 -278.11 354.88 -279.69 353.31 -284.41 350.16 -290.71 350.16 -293.86 353.31 -297.01 361.18 -292.28 367.48 -284.41 367.48 -279.69 361.18 -278.11 356.46 -278.11} {black 367.48 -293.86 364.33 -295.43 361.18 -297.01 359.61 -300.16 359.61 -303.31 364.33 -306.46 369.06 -308.03 373.78 -304.88 376.93 -301.73 378.50 -298.58 375.35 -295.43 370.63 -293.86} {black 351.73 -300.16 348.58 -300.16 345.43 -301.73 343.86 -304.88 345.43 -308.03 353.31 -308.03 358.03 -304.88 361.18 -301.73 358.03 -300.16 356.46 -297.01} {black 310.79 -254.49 306.06 -257.64 302.91 -259.21 301.34 -262.36 304.49 -263.94 307.64 -263.94 310.79 -262.36 315.51 -260.79 315.51 -257.64} {black 266.69 -287.56 265.12 -292.28 261.97 -300.16 261.97 -320.63} {black 244.65 -285.98 241.50 -290.71 239.92 -293.86 238.35 -303.31 236.77 -306.46 236.77 -317.48} {black 221.02 -281.26 217.87 -284.41 214.72 -290.71 214.72 -295.43 213.15 -298.58 213.15 -308.03 214.72 -312.76 214.72 -315.91} {black 143.86 -243.46 147.01 -245.04 150.16 -245.04 154.88 -248.19 158.03 -249.76 162.76 -249.76} {black 162.76 -295.43 161.18 -300.16 158.03 -304.88 158.03 -309.61} {black 134.41 -257.64 134.41 -260.79 137.56 -267.09 137.56 -274.96 139.13 -278.11 140.71 -282.83 143.86 -285.98 143.86 -298.58 140.71 -304.88 140.71 -309.61} {black 110.79 -248.19 109.21 -251.34 109.21 -254.49 110.79 -257.64 112.36 -262.36 112.36 -265.51 115.51 -270.24 117.09 -273.39 120.24 -278.11 123.39 -281.26 123.39 -284.41 124.96 -287.56 124.96 -298.58 123.39 -303.31 123.39 -306.46} {black 173.78 -289.13 176.93 -287.56 180.08 -287.56 184.80 -289.13 187.95 -289.13 191.10 -290.71 194.25 -290.71} {black 102.91 -289.13 106.06 -289.13 109.21 -290.71 112.36 -290.71 117.09 -292.28 120.24 -290.71 123.39 -290.71 128.11 -287.56 137.56 -287.56 142.28 -285.98 148.58 -289.13 151.73 -289.13} {black 252.52 -211.97 255.67 -211.97 260.39 -215.12} {black 254.09 -213.54} {black 224.17 -216.69 227.32 -215.12 230.47 -215.12} {black 198.98 -221.42 195.83 -224.57 195.83 -227.72 194.25 -230.87 194.25 -252.91 192.68 -256.06 192.68 -262.36} {black 332.83 -229.29 331.26 -232.44 328.11 -235.59 329.69 -240.31 334.41 -238.74 337.56 -237.17 339.13 -234.02 337.56 -230.87 334.41 -227.72 331.26 -226.14} {black 323.39 -226.14 320.24 -229.29 320.24 -237.17 323.39 -237.17 326.54 -234.02 328.11 -230.87 328.11 -227.72} {black 296.61 -211.97 296.61 -222.99 302.91 -216.69 299.76 -213.54 291.89 -213.54} {black 277.72 -215.12 279.29 -211.97 276.14 -211.97 274.57 -215.12 271.42 -218.27 272.99 -221.42 276.14 -222.99 280.87 -224.57 285.59 -221.42 287.17 -215.12 284.02 -211.97 280.87 -211.97 279.29 -215.12} {black 313.94 -210.39 310.79 -213.54 307.64 -222.99 309.21 -226.14 312.36 -227.72 313.94 -224.57 315.51 -218.27 312.36 -213.54 307.64 -215.12} {black 317.09 -224.57 313.94 -226.14 309.21 -235.59 313.94 -237.17 320.24 -230.87 320.24 -226.14 315.51 -224.57 312.36 -226.14} {black 318.66 -238.74 315.51 -240.31 313.94 -243.46 312.36 -248.19 312.36 -252.91 315.51 -256.06 318.66 -257.64 320.24 -252.91 323.39 -241.89 323.39 -238.74 318.66 -237.17} {black 320.24 -260.79 317.09 -262.36 315.51 -265.51 313.94 -271.81 318.66 -270.24 321.81 -270.24 324.96 -265.51 324.96 -260.79 323.39 -257.64 320.24 -256.06 317.09 -254.49} {black 269.84 -216.69 266.69 -216.69 263.54 -219.84 261.97 -222.99 261.97 -226.14 265.12 -226.14 271.42 -219.84 271.42 -211.97 265.12 -210.39 261.97 -211.97} {black 246.22 -221.42 244.65 -226.14 247.80 -227.72 250.94 -226.14 255.67 -222.99 257.24 -218.27 255.67 -215.12 252.52 -215.12 247.80 -216.69} {black 238.35 -215.12 235.20 -213.54 232.05 -216.69 230.47 -219.84 230.47 -226.14 235.20 -224.57 238.35 -221.42 241.50 -216.69 238.35 -216.69 233.62 -219.84} {black 219.45 -216.69 214.72 -219.84 213.15 -222.99 214.72 -226.14 219.45 -226.14 222.60 -221.42 219.45 -215.12} {black 202.13 -215.12 198.98 -218.27 198.98 -221.42 197.40 -224.57 202.13 -227.72 208.43 -224.57 211.57 -221.42 210.00 -218.27 206.85 -216.69 202.13 -216.69} {black 189.53 -265.51 189.53 -270.24 191.10 -273.39 197.40 -257.64 189.53 -257.64 187.95 -263.94} {black 187.95 -254.49 184.80 -257.64 184.80 -263.94 187.95 -260.79 187.95 -257.64 187.95 -254.49} {black 181.65 -248.19 180.08 -252.91 180.08 -256.06 183.23 -257.64 184.80 -254.49 184.80 -249.76 183.23 -246.61} {black 139.13 -243.46 135.98 -246.61 135.98 -251.34 137.56 -254.49 140.71 -256.06 148.58 -252.91 150.16 -248.19 147.01 -241.89} {black 123.39 -235.59 121.81 -240.31 121.81 -248.19 124.96 -251.34 128.11 -252.91 131.26 -251.34 134.41 -248.19 134.41 -243.46 132.83 -240.31} {black 104.49 -234.02 101.34 -232.44 99.76 -237.17 99.76 -243.46 104.49 -246.61 107.64 -246.61 112.36 -245.04 115.51 -243.46 117.09 -240.31 115.51 -237.17 112.36 -232.44 109.21 -229.29} {black 88.74 -227.72 85.59 -229.29 82.44 -230.87 79.29 -232.44 77.72 -235.59 80.87 -237.17 85.59 -238.74 90.31 -238.74 91.89 -245.04 95.04 -241.89 98.19 -235.59 99.76 -230.87 98.19 -227.72 95.04 -227.72} {black 158.03 -276.54 158.03 -279.69 156.46 -284.41 156.46 -289.13 154.88 -292.28 158.03 -295.43 162.76 -293.86 165.91 -295.43 170.63 -293.86 173.78 -292.28 173.78 -289.13 172.20 -285.98 173.78 -282.83 173.78 -278.11 170.63 -274.96 167.48 -273.39 162.76 -274.96 159.61 -276.54} {black 203.70 -276.54 206.85 -278.11 211.57 -278.11 217.87 -281.26 225.75 -281.26 228.90 -282.83 239.92 -282.83 246.22 -284.41 249.37 -282.83 252.52 -282.83 257.24 -284.41 263.54 -287.56 272.99 -287.56 277.72 -285.98 280.87 -284.41 284.02 -284.41 287.17 -281.26 287.17 -276.54 288.74 -273.39 288.74 -268.66 288.74 -265.51 287.17 -262.36 287.17 -259.21 285.59 -256.06 284.02 -251.34 282.44 -248.19 279.29 -245.04 276.14 -241.89 271.42 -238.74 268.27 -238.74 265.12 -238.74 261.97 -237.17 257.24 -237.17 254.09 -237.17 250.94 -237.17 246.22 -237.17 243.07 -237.17 238.35 -235.59 235.20 -235.59 230.47 -235.59 225.75 -235.59 222.60 -238.74 219.45 -240.31 216.30 -243.46 211.57 -245.04 208.43 -246.61 205.28 -249.76 203.70 -252.91 203.70 -263.94 200.55 -267.09 200.55 -270.24 202.13 -273.39} {black 312.36 -320.63 309.21 -317.48 306.06 -320.63 304.49 -323.78 304.49 -326.93 309.21 -328.50 315.51 -325.35 315.51 -322.20 315.51 -319.06} {black 298.19 -320.63 295.04 -322.20 293.46 -325.35 296.61 -328.50 299.76 -328.50 302.91 -326.93 302.91 -323.78 299.76 -320.63} {black 290.31 -319.06 287.17 -320.63 284.02 -322.20 282.44 -325.35 284.02 -328.50 287.17 -328.50 290.31 -326.93 293.46 -323.78 291.89 -319.06 288.74 -320.63} {black 279.29 -320.63 274.57 -320.63 271.42 -323.78 271.42 -326.93 274.57 -328.50 279.29 -325.35 280.87 -322.20 277.72 -320.63} {black 266.69 -319.06 263.54 -319.06 260.39 -319.06 258.82 -323.78 260.39 -326.93 263.54 -328.50 266.69 -326.93 269.84 -323.78 268.27 -320.63} {black 255.67 -319.06 252.52 -320.63 247.80 -322.20 244.65 -323.78 247.80 -326.93 250.94 -328.50 254.09 -328.50 258.82 -325.35 258.82 -322.20} {black 243.07 -320.63 239.92 -320.63 238.35 -325.35 238.35 -328.50 241.50 -326.93 244.65 -323.78 247.80 -319.06 244.65 -315.91} {black 233.62 -319.06 230.47 -319.06 227.32 -322.20 224.17 -328.50 228.90 -328.50 235.20 -323.78 232.05 -322.20} {black 217.87 -322.20 216.30 -328.50 221.02 -326.93 224.17 -325.35 227.32 -322.20 224.17 -317.48 221.02 -317.48} {black 210.00 -322.20 211.57 -319.06 208.43 -317.48 205.28 -319.06 202.13 -322.20 200.55 -326.93 203.70 -328.50 208.43 -325.35 211.57 -322.20 214.72 -320.63 211.57 -319.06 208.43 -320.63} {black 197.40 -319.06 191.10 -322.20 189.53 -326.93 192.68 -328.50 202.13 -325.35 205.28 -320.63 200.55 -319.06} {black 186.38 -320.63 183.23 -322.20 180.08 -325.35 178.50 -328.50 181.65 -330.08 191.10 -326.93 192.68 -323.78 187.95 -320.63} {black 173.78 -319.06 170.63 -320.63 167.48 -323.78 169.06 -326.93 172.20 -330.08 175.35 -326.93 176.93 -322.20 176.93 -319.06 173.78 -320.63} {black 165.91 -320.63 164.33 -317.48 161.18 -320.63 159.61 -325.35 158.03 -328.50 162.76 -326.93 165.91 -325.35 169.06 -322.20 169.06 -319.06 164.33 -320.63} {black 153.31 -319.06 148.58 -320.63 145.43 -322.20 143.86 -326.93 147.01 -330.08 150.16 -331.65 154.88 -330.08 156.46 -326.93 158.03 -322.20 156.46 -319.06} {black 135.98 -320.63 132.83 -322.20 131.26 -325.35 131.26 -330.08 140.71 -330.08 143.86 -326.93 145.43 -323.78 143.86 -320.63} {black 129.69 -322.20 126.54 -320.63 123.39 -319.06 120.24 -319.06 117.09 -322.20 120.24 -325.35 123.39 -325.35 126.54 -326.93 129.69 -323.78 131.26 -320.63 126.54 -322.20} {black 110.79 -319.06 107.64 -320.63 106.06 -323.78 107.64 -326.93 109.21 -323.78 109.21 -326.93 112.36 -326.93 115.51 -323.78 117.09 -320.63 113.94 -319.06 110.79 -319.06} {black 98.19 -322.20 93.46 -322.20 90.31 -323.78 90.31 -326.93 95.04 -330.08 101.34 -326.93 102.91 -323.78} {blue -401.02 -238.74 -402.60 -241.89 -401.02 -245.04 -402.60 -248.19 -402.60 -254.49} {blue -413.62 -254.49 -410.47 -254.49 -405.75 -254.49 -402.60 -254.49} {blue -407.32 -218.27 -404.17 -219.84 -401.02 -222.99 -401.02 -226.14 -399.45 -229.29 -402.60 -234.02 -405.75 -240.31 -405.75 -243.46 -407.32 -246.61 -404.17 -252.91 -399.45 -256.06} {black 0.55 -317.48 -2.60 -317.48 -4.17 -320.63 -4.17 -323.78 -1.02 -323.78 3.70 -323.78 6.85 -322.20 5.28 -319.06 0.55 -317.48} {black -46.69 -210.39 -51.42 -211.97 -52.99 -215.12 -56.14 -219.84 -57.72 -222.99 -60.87 -226.14 -60.87 -232.44 -62.44 -235.59 -62.44 -243.46 -64.02 -249.76 -65.59 -259.21 -65.59 -265.51} {black -71.89 -200.94 -78.19 -207.24 -81.34 -215.12 -84.49 -221.42 -84.49 -224.57 -86.06 -227.72 -86.06 -240.31 -89.21 -249.76} {black -98.66 -191.50 -101.81 -193.07 -104.96 -196.22 -106.54 -199.37 -112.83 -205.67 -117.56 -208.82 -122.28 -218.27 -122.28 -224.57 -123.86 -229.29 -123.86 -232.44 -125.43 -238.74 -125.43 -241.89} {black -37.24 -186.77 -40.39 -186.77 -45.12 -189.92 -46.69 -193.07 -48.27 -199.37 -48.27 -202.52 -41.97 -208.82 -38.82 -210.39 -34.09 -213.54 -30.94 -213.54 -27.80 -213.54 -24.65 -211.97 -21.50 -210.39 -19.92 -207.24 -19.92 -204.09 -21.50 -200.94 -24.65 -194.65 -26.22 -191.50} {black -59.29 -178.90 -60.87 -175.75 -65.59 -178.90 -68.74 -182.05 -70.31 -185.20 -68.74 -196.22 -65.59 -197.80 -60.87 -197.80 -56.14 -197.80 -52.99 -196.22 -49.84 -197.80 -46.69 -194.65 -45.12 -191.50 -46.69 -188.35 -46.69 -183.62 -49.84 -180.47 -52.99 -178.90 -56.14 -178.90} {black -79.76 -174.17 -82.91 -174.17 -89.21 -177.32 -93.94 -180.47 -97.09 -182.05 -97.09 -189.92 -95.51 -193.07 -92.36 -194.65 -89.21 -196.22 -86.06 -196.22 -82.91 -194.65 -78.19 -191.50 -75.04 -191.50 -71.89 -188.35 -71.89 -183.62 -73.46 -180.47 -75.04 -177.32 -78.19 -174.17} {black -18.35 -213.54 -19.92 -219.84 -21.50 -216.69 -24.65 -221.42 -24.65 -224.57 -27.80 -230.87 -24.65 -232.44 -21.50 -232.44 -16.77 -232.44 -13.62 -229.29 -12.05 -226.14 -12.05 -222.99 -12.05 -219.84 -13.62 -216.69 -16.77 -216.69} {black -29.37 -235.59 -32.52 -237.17 -34.09 -241.89 -35.67 -245.04 -38.82 -248.19 -40.39 -251.34 -40.39 -251.34 -40.39 -254.49 -37.24 -254.49 -32.52 -252.91 -29.37 -251.34 -27.80 -246.61 -27.80 -243.46 -29.37 -240.31 -29.37 -237.17} {black -16.77 -287.56 -24.65 -295.43 -29.37 -304.88 -30.94 -309.61 -30.94 -315.91 -32.52 -320.63 -30.94 -323.78} {black -40.39 -284.41 -43.54 -287.56 -46.69 -292.28 -48.27 -295.43 -49.84 -300.16 -51.42 -309.61 -51.42 -317.48} {black -57.72 -279.69 -54.57 -278.11 -51.42 -278.11 -48.27 -278.11 -45.12 -278.11 -41.97 -278.11 -37.24 -278.11 -34.09 -278.11 -26.22 -279.69 -23.07 -281.26 -19.92 -281.26 -16.77 -282.83 -12.05 -282.83 -8.90 -285.98 -5.75 -290.71 -2.60 -289.13 0.55 -290.71} {black -34.09 -262.36 -29.37 -263.94 -29.37 -260.79 -26.22 -260.79 -23.07 -259.21 -19.92 -259.21 -16.77 -259.21 -8.90 -260.79 -5.75 -262.36 -4.17 -265.51 -4.17 -268.66 -1.02 -271.81 0.55 -274.96 3.70 -279.69 6.85 -279.69} {black -62.44 -265.51 -62.44 -268.66 -64.02 -271.81 -60.87 -274.96 -56.14 -276.54 -52.99 -274.96 -45.12 -273.39 -38.82 -273.39 -35.67 -271.81 -32.52 -270.24 -32.52 -267.09 -35.67 -265.51 -37.24 -262.36 -40.39 -260.79 -46.69 -260.79 -56.14 -265.51 -60.87 -263.94 -65.59 -265.51} {black -127.01 -235.59 -130.16 -241.89 -136.46 -249.76 -138.03 -252.91 -142.76 -259.21 -145.91 -268.66 -149.06 -279.69 -149.06 -287.56 -150.63 -290.71} {black -90.79 -252.91 -93.94 -256.06 -95.51 -259.21 -100.24 -265.51 -109.69 -274.96 -112.83 -281.26 -114.41 -289.13 -114.41 -292.28 -115.98 -300.16} {black -60.87 -278.11 -65.59 -281.26 -68.74 -285.98 -71.89 -295.43 -75.04 -298.58 -76.61 -301.73 -79.76 -304.88 -79.76 -308.03} {black -160.08 -230.87 -163.23 -234.02 -169.53 -238.74 -172.68 -241.89 -174.25 -248.19 -175.83 -256.06 -177.40 -259.21 -180.55 -267.09 -182.13 -270.24 -182.13 -273.39} {black -196.30 -237.17 -193.15 -237.17 -190.00 -237.17 -186.85 -238.74 -183.70 -240.31 -178.98 -240.31 -175.83 -241.89 -172.68 -245.04 -169.53 -245.04 -166.38 -249.76 -163.23 -251.34 -160.08 -252.91 -156.93 -252.91 -153.78 -252.91 -149.06 -254.49 -145.91 -257.64 -142.76 -259.21 -136.46 -262.36 -130.16 -268.66 -122.28 -267.09 -119.13 -270.24 -115.98 -271.81 -109.69 -278.11 -106.54 -278.11 -101.81 -279.69 -95.51 -282.83 -87.64 -282.83 -84.49 -285.98 -79.76 -287.56 -76.61 -287.56 -73.46 -287.56 -70.31 -287.56 -65.59 -289.13} {black -180.55 -202.52 -178.98 -205.67 -178.98 -208.82 -171.10 -216.69 -167.95 -218.27 -164.80 -221.42 -161.65 -222.99 -158.50 -226.14 -155.35 -227.72 -152.20 -230.87 -149.06 -230.87 -145.91 -230.87 -142.76 -230.87 -139.61 -230.87 -134.88 -232.44 -131.73 -234.02 -128.58 -235.59 -125.43 -235.59 -125.43 -234.02 -122.28 -235.59 -119.13 -237.17 -114.41 -237.17 -111.26 -240.31 -108.11 -240.31 -104.96 -241.89 -100.24 -243.46 -97.09 -246.61 -93.94 -246.61 -90.79 -245.04 -87.64 -249.76 -84.49 -249.76 -82.91 -252.91 -76.61 -259.21 -73.46 -260.79 -70.31 -262.36 -64.02 -268.66 -60.87 -270.24 -59.29 -276.54} {blue 19.45 -260.79 17.87 -263.94 17.87 -267.09 19.45 -273.39 21.02 -276.54 24.17 -274.96 25.75 -271.81 27.32 -268.66 30.47 -265.51} {blue 32.05 -238.74 32.05 -241.89 28.90 -248.19 27.32 -252.91 27.32 -256.06 25.75 -259.21 25.75 -263.94 24.17 -267.09 24.17 -276.54} {black -4.17 -317.48 -8.90 -319.06 -8.90 -322.20 -4.17 -320.63 -4.17 -317.48 -8.90 -317.48} {black -15.20 -317.48 -19.92 -315.91 -16.77 -320.63 -13.62 -320.63 -12.05 -315.91} {black -45.12 -325.35 -41.97 -325.35 -37.24 -325.35 -34.09 -325.35 -30.94 -323.78 -27.80 -323.78 -24.65 -323.78 -19.92 -323.78 -16.77 -322.20 -13.62 -322.20 -8.90 -323.78 -5.75 -323.78 -2.60 -323.78 0.55 -325.35 5.28 -326.93 11.57 -326.93 14.72 -330.08 16.30 -326.93 27.32 -326.93 33.62 -330.08} {black 82.44 -322.20 79.29 -323.78 76.14 -326.93 76.14 -331.65 79.29 -331.65 84.02 -330.08 88.74 -323.78 87.17 -320.63 82.44 -320.63} {black 72.99 -317.48 68.27 -319.06 66.69 -322.20 63.54 -325.35 61.97 -328.50 66.69 -331.65 71.42 -326.93 76.14 -323.78 77.72 -320.63 72.99 -319.06 65.12 -320.63} {black 58.82 -319.06 54.09 -320.63 50.94 -322.20 49.37 -325.35 52.52 -330.08 57.24 -330.08 63.54 -322.20 58.82 -317.48} {black 46.22 -319.06 43.07 -319.06 39.92 -322.20 38.35 -325.35 39.92 -328.50 43.07 -328.50 46.22 -326.93 49.37 -323.78 49.37 -320.63 46.22 -319.06} {black -26.22 -315.91 -29.37 -319.06 -29.37 -322.20 -26.22 -320.63 -21.50 -320.63 -21.50 -315.91 -23.07 -311.18} {black -35.67 -315.91 -40.39 -319.06 -40.39 -323.78 -32.52 -322.20 -29.37 -319.06 -32.52 -320.63} {black -45.12 -314.33 -48.27 -315.91 -49.84 -319.06 -46.69 -320.63 -43.54 -320.63 -40.39 -319.06 -43.54 -315.91} {black -56.14 -314.33 -60.87 -319.06 -60.87 -322.20 -56.14 -322.20 -51.42 -320.63 -56.14 -319.06 -59.29 -319.06} {black -64.02 -314.33 -67.17 -314.33 -71.89 -317.48 -73.46 -320.63 -67.17 -320.63 -64.02 -317.48 -60.87 -315.91 -65.59 -314.33 -70.31 -317.48} {black -76.61 -309.61 -81.34 -311.18 -84.49 -315.91 -82.91 -319.06 -76.61 -315.91 -73.46 -312.76 -78.19 -311.18} {black -87.64 -309.61 -90.79 -309.61 -93.94 -311.18 -97.09 -314.33 -87.64 -315.91 -81.34 -309.61 -82.91 -306.46 -87.64 -306.46} {black -100.24 -304.88 -106.54 -311.18 -101.81 -312.76 -98.66 -314.33 -95.51 -311.18 -95.51 -308.03 -98.66 -309.61} {black -114.41 -304.88 -117.56 -306.46 -119.13 -309.61 -114.41 -312.76 -109.69 -311.18 -106.54 -308.03 -111.26 -304.88 -115.98 -308.03} {black -128.58 -297.01 -133.31 -300.16 -131.73 -304.88 -127.01 -308.03 -123.86 -308.03 -120.71 -304.88 -119.13 -301.73 -123.86 -298.58 -128.58 -300.16} {black -139.61 -292.28 -144.33 -292.28 -145.91 -295.43 -141.18 -298.58 -136.46 -298.58 -133.31 -297.01 -130.16 -293.86 -138.03 -292.28 -141.18 -293.86} {black -155.35 -285.98 -158.50 -289.13 -158.50 -292.28 -152.20 -295.43 -147.48 -292.28 -144.33 -289.13 -149.06 -287.56 -152.20 -289.13} {black -171.10 -278.11 -171.10 -281.26 -172.68 -285.98 -169.53 -290.71 -161.65 -293.86 -158.50 -289.13 -156.93 -284.41 -160.08 -281.26 -163.23 -281.26} {black -183.70 -278.11 -186.85 -282.83 -178.98 -282.83 -175.83 -281.26 -178.98 -274.96 -183.70 -276.54} {black -190.00 -267.09 -193.15 -267.09 -196.30 -273.39 -196.30 -278.11 -193.15 -279.69 -190.00 -279.69 -182.13 -273.39 -182.13 -270.24 -190.00 -270.24 -193.15 -274.96} {black -199.45 -262.36 -201.02 -265.51 -199.45 -268.66 -196.30 -268.66 -190.00 -263.94 -190.00 -260.79 -194.72 -260.79 -197.87 -262.36} {black -131.73 -100.16 -138.03 -106.46 -139.61 -109.61 -142.76 -111.18 -144.33 -114.33 -147.48 -117.48 -149.06 -120.63 -153.78 -122.20 -155.35 -126.93 -156.93 -130.08 -160.08 -133.23 -161.65 -136.38 -164.80 -139.53 -164.80 -142.68 -167.95 -145.83 -167.95 -150.55 -171.10 -155.28 -171.10 -158.43 -172.68 -161.57 -174.25 -172.60 -174.25 -182.05 -175.83 -185.20 -175.83 -188.35 -177.40 -193.07 -178.98 -196.22 -178.98 -202.52} {black -268.74 -114.33 -271.89 -117.48 -271.89 -120.63 -273.46 -123.78 -273.46 -126.93 -276.61 -133.23 -282.91 -142.68 -284.49 -145.83 -286.06 -150.55 -286.06 -166.30 -284.49 -174.17 -284.49 -177.32 -282.91 -182.05 -282.91 -188.35 -281.34 -191.50 -281.34 -197.80 -279.76 -200.94 -279.76 -227.72 -281.34 -230.87 -279.76 -234.02 -279.76 -237.17 -276.61 -243.46 -273.46 -246.61 -273.46 -251.34 -270.31 -254.49} {black -382.13 -251.34 -383.70 -256.06 -383.70 -263.94 -385.28 -267.09 -385.28 -270.24 -383.70 -273.39 -380.55 -282.83 -374.25 -290.71} {black -356.93 -221.42 -358.50 -224.57 -358.50 -227.72 -360.08 -232.44 -363.23 -235.59 -366.38 -243.46 -366.38 -252.91 -364.80 -259.21 -361.65 -262.36 -360.08 -265.51 -355.35 -273.39 -350.63 -276.54 -347.48 -276.54} {black -323.86 -117.48 -325.43 -120.63 -325.43 -123.78 -328.58 -130.08 -330.16 -134.80 -330.16 -150.55 -328.58 -156.85 -328.58 -155.28 -327.01 -158.43 -323.86 -161.57 -323.86 -164.72 -322.28 -169.45 -322.28 -172.60 -319.13 -178.90 -319.13 -180.47 -317.56 -183.62 -317.56 -188.35 -315.98 -188.35 -315.98 -204.09 -314.41 -207.24 -314.41 -215.12 -319.13 -224.57 -319.13 -237.17 -320.71 -241.89 -320.71 -252.91 -314.41 -265.51 -311.26 -268.66} {black -260.87 -84.41 -264.02 -87.56 -265.59 -90.71 -264.02 -93.86 -264.02 -100.16 -262.44 -103.31 -259.29 -111.18 -256.14 -109.61 -252.99 -111.18 -249.84 -111.18 -246.69 -111.18 -241.97 -111.18 -238.82 -111.18 -237.24 -106.46 -235.67 -103.31 -235.67 -100.16 -240.39 -92.28 -243.54 -92.28 -243.54 -87.56 -246.69 -82.83 -254.57 -78.11 -260.87 -79.69} {black -282.91 -89.13 -287.64 -89.13 -290.79 -92.28 -292.36 -95.43 -290.79 -98.58 -289.21 -103.31 -289.21 -106.46 -286.06 -109.61 -282.91 -109.61 -279.76 -111.18 -276.61 -112.76 -271.89 -112.76 -268.74 -109.61 -265.59 -109.61 -264.02 -106.46 -264.02 -103.31 -264.02 -98.58 -267.17 -92.28 -273.46 -87.56} {black -312.83 -89.13 -315.98 -89.13 -320.71 -92.28 -322.28 -97.01 -322.28 -100.16 -317.56 -100.16 -315.98 -108.03 -312.83 -111.18 -311.26 -114.33 -308.11 -115.91 -303.39 -114.33 -300.24 -112.76 -297.09 -112.76 -293.94 -112.76 -290.79 -114.33 -289.21 -111.18 -290.79 -108.03 -293.94 -103.31 -295.51 -98.58 -303.39 -90.71 -309.69 -87.56 -314.41 -85.98} {black -350.63 -95.43 -352.20 -98.58 -353.78 -103.31 -353.78 -106.46 -350.63 -112.76 -347.48 -111.18 -342.76 -112.76 -339.61 -114.33 -333.31 -115.91 -328.58 -115.91 -323.86 -114.33 -320.71 -114.33 -317.56 -115.91 -314.41 -111.18 -314.41 -108.03 -317.56 -104.88 -319.13 -100.16 -322.28 -98.58 -327.01 -95.43 -344.33 -95.43} {black -355.35 -152.13 -352.20 -150.55 -347.48 -148.98 -344.33 -148.98 -342.76 -145.83 -339.61 -145.83 -334.88 -141.10 -330.16 -142.68 -325.43 -139.53 -322.28 -139.53 -314.41 -137.95 -309.69 -136.38 -306.54 -136.38 -301.81 -134.80 -298.66 -136.38 -293.94 -136.38 -286.06 -136.38 -281.34 -136.38 -278.19 -134.80 -275.04 -133.23 -270.31 -134.80 -264.02 -133.23 -254.57 -133.23 -246.69 -133.23 -235.67 -133.23 -230.94 -133.23 -223.07 -133.23} {black -360.08 -221.42 -356.93 -218.27 -353.78 -216.69 -350.63 -213.54 -345.91 -211.97 -342.76 -210.39 -336.46 -208.82 -330.16 -205.67 -325.43 -204.09 -322.28 -202.52 -314.41 -199.37 -309.69 -197.80 -301.81 -196.22 -298.66 -194.65 -295.51 -194.65 -287.64 -193.07 -278.19 -189.92 -273.46 -188.35 -264.02 -186.77 -256.14 -185.20 -246.69 -182.05 -238.82 -180.47} {black -378.98 -241.89 -375.83 -241.89 -372.68 -238.74 -369.53 -237.17 -366.38 -234.02 -364.80 -230.87 -363.23 -227.72 -361.65 -224.57 -361.65 -219.84 -360.08 -216.69 -360.08 -213.54 -360.08 -210.39 -358.50 -205.67 -358.50 -202.52 -358.50 -197.80 -358.50 -193.07 -356.93 -188.35 -356.93 -185.20 -356.93 -182.05 -356.93 -177.32 -355.35 -174.17 -355.35 -171.02 -355.35 -163.15 -355.35 -160.00 -355.35 -156.85 -353.78 -148.98 -353.78 -145.83 -352.20 -142.68 -352.20 -137.95 -352.20 -134.80 -352.20 -131.65 -350.63 -128.50 -352.20 -125.35 -353.78 -122.20} {black -377.40 -246.61 -383.70 -249.76 -393.15 -260.79 -396.30 -263.94 -397.87 -267.09 -397.87 -270.24 -399.45 -276.54 -401.02 -279.69 -401.02 -284.41 -396.30 -287.56 -396.30 -290.71 -391.57 -293.86 -388.43 -293.86 -386.85 -297.01 -383.70 -297.01 -378.98 -295.43} {black -380.55 -295.43 -375.83 -292.28 -372.68 -289.13 -369.53 -287.56 -366.38 -284.41 -363.23 -282.83 -358.50 -281.26 -355.35 -279.69 -352.20 -278.11 -347.48 -278.11 -344.33 -276.54 -339.61 -274.96 -336.46 -274.96 -333.31 -274.96 -328.58 -273.39 -323.86 -271.81 -317.56 -270.24 -314.41 -268.66 -311.26 -267.09 -308.11 -267.09 -303.39 -265.51 -297.09 -262.36 -290.79 -260.79 -287.64 -259.21 -276.61 -257.64 -273.46 -256.06 -268.74 -254.49 -265.59 -252.91 -260.87 -251.34} {black -267.17 -38.74 -264.02 -37.17 -259.29 -38.74 -256.14 -41.89 -252.99 -43.46 -245.12 -43.46 -240.39 -45.04 -237.24 -45.04 -230.94 -46.61 -224.65 -48.19 -218.35 -51.34 -213.62 -52.91 -210.47 -52.91 -207.32 -56.06 -204.17 -60.79 -201.02 -62.36 -197.87 -68.66 -196.30 -74.96 -196.30 -78.11 -197.87 -82.83 -197.87 -95.43 -201.02 -101.73 -201.02 -104.88 -204.17 -108.03 -205.75 -111.18 -208.90 -114.33 -210.47 -117.48 -212.05 -122.20 -215.20 -125.35 -216.77 -130.08 -218.35 -133.23 -221.50 -136.38 -223.07 -141.10 -224.65 -144.25 -224.65 -147.40 -226.22 -152.13 -229.37 -158.43 -230.94 -163.15 -232.52 -166.30 -232.52 -172.60 -234.09 -175.75 -234.09 -178.90 -235.67 -182.05 -237.24 -186.77 -238.82 -189.92 -238.82 -193.07 -240.39 -196.22 -240.39 -200.94 -241.97 -204.09 -241.97 -210.39 -243.54 -213.54 -243.54 -216.69} {black -314.41 35.28 -309.69 33.70 -306.54 30.55 -303.39 30.55 -300.24 30.55 -298.66 27.40 -290.79 25.83 -284.49 25.83 -276.61 24.25 -265.59 21.10 -252.99 21.10 -248.27 19.53 -245.12 19.53 -240.39 19.53 -237.24 19.53 -234.09 19.53 -229.37 19.53 -226.22 21.10 -223.07 22.68 -216.77 22.68 -208.90 22.68 -207.32 27.40 -204.17 28.98 -197.87 36.85 -197.87 44.72} {black -109.69 40.00 -109.69 33.70 -108.11 28.98 -106.54 25.83 -103.39 21.10 -100.24 17.95 -97.09 14.80 -93.94 11.65 -89.21 10.08 -86.06 8.50 -82.91 8.50 -79.76 6.93 -76.61 6.93 -71.89 5.35 -68.74 5.35 -65.59 6.93 -62.44 6.93 -57.72 8.50 -54.57 10.08 -49.84 13.23 -43.54 19.53 -40.39 19.53 -35.67 21.10 -29.37 24.25 -19.92 27.40 -15.20 28.98 -4.17 32.13} {black -256.14 -226.14 -252.99 -224.57 -248.27 -226.14 -245.12 -227.72 -241.97 -232.44 -238.82 -232.44 -237.24 -237.17 -235.67 -240.31 -235.67 -243.46 -234.09 -241.89 -234.09 -246.61 -237.24 -249.76 -241.97 -251.34 -245.12 -252.91 -248.27 -252.91 -254.57 -249.76 -260.87 -243.46 -265.59 -240.31 -267.17 -237.17 -267.17 -234.02 -264.02 -230.87 -260.87 -227.72 -257.72 -226.14 -256.14 -222.99} {black -223.07 -238.74 -219.92 -241.89 -216.77 -243.46 -213.62 -243.46 -210.47 -245.04 -205.75 -246.61 -204.17 -249.76 -201.02 -249.76 -197.87 -254.49 -197.87 -257.64 -204.17 -260.79 -218.35 -260.79 -221.50 -256.06 -221.50 -252.91 -226.22 -252.91 -229.37 -249.76 -230.94 -246.61 -229.37 -241.89 -227.80 -238.74 -227.80 -235.59} {black -208.90 -189.92 -212.05 -191.50 -215.20 -197.80 -215.20 -204.09 -213.62 -207.24 -213.62 -211.97 -210.47 -213.54 -205.75 -215.12 -202.60 -216.69 -199.45 -216.69 -193.15 -215.12 -190.00 -215.12 -186.85 -211.97 -185.28 -208.82 -185.28 -205.67 -185.28 -200.94 -185.28 -197.80 -186.85 -194.65 -188.43 -191.50 -191.57 -188.35} {black -212.05 -178.90 -208.90 -177.32 -205.75 -174.17 -202.60 -172.60 -199.45 -172.60 -196.30 -172.60 -191.57 -174.17 -188.43 -174.17 -185.28 -177.32 -183.70 -180.47 -186.85 -182.05 -190.00 -186.77 -191.57 -183.62 -193.15 -186.77 -196.30 -189.92 -196.30 -193.07 -199.45 -196.22 -202.60 -196.22 -202.60 -193.07 -205.75 -188.35 -205.75 -185.20 -210.47 -183.62 -213.62 -182.05} {black -15.20 -13.54 -19.92 -15.12 -21.50 -18.27 -21.50 -21.42 -18.35 -27.72 -15.20 -27.72 -10.47 -26.14 -7.32 -22.99 -5.75 -19.84 -4.17 -15.12 -7.32 -11.97} {black -27.80 -22.99 -30.94 -24.57 -35.67 -27.72 -37.24 -30.87 -37.24 -34.02 -35.67 -37.17 -32.52 -40.31 -29.37 -40.31 -26.22 -37.17 -21.50 -32.44 -19.92 -29.29 -19.92 -24.57 -21.50 -21.42 -24.65 -19.84 -27.80 -21.42 -29.37 -26.14} {black -41.97 -35.59 -45.12 -35.59 -48.27 -38.74 -49.84 -41.89 -49.84 -45.04 -48.27 -48.19 -45.12 -51.34 -41.97 -51.34 -37.24 -46.61 -34.09 -43.46 -34.09 -40.31 -35.67 -37.17 -37.24 -32.44 -38.82 -29.29} {black -59.29 -46.61 -62.44 -46.61 -64.02 -51.34 -67.17 -51.34 -70.31 -56.06 -70.31 -59.21 -54.57 -59.21 -51.42 -56.06 -49.84 -52.91 -49.84 -49.76 -52.99 -46.61 -57.72 -43.46} {black -75.04 -56.06 -78.19 -56.06 -79.76 -60.79 -82.91 -59.21 -86.06 -65.51 -82.91 -71.81 -79.76 -73.39 -75.04 -73.39 -71.89 -73.39 -68.74 -73.39 -65.59 -71.81 -64.02 -67.09 -65.59 -63.94 -67.17 -59.21 -67.17 -56.06 -70.31 -54.49 -76.61 -59.21} {black -87.64 -76.54 -93.94 -76.54 -97.09 -79.69 -95.51 -84.41 -95.51 -87.56 -92.36 -87.56 -89.21 -87.56 -86.06 -87.56 -82.91 -85.98 -78.19 -84.41 -76.61 -79.69 -76.61 -76.54 -75.04 -73.39 -76.61 -68.66 -81.34 -67.09 -84.49 -68.66} {black -104.96 -84.41 -108.11 -82.83 -111.26 -85.98 -114.41 -92.28 -112.83 -97.01 -108.11 -98.58 -104.96 -98.58 -101.81 -98.58 -98.66 -97.01 -95.51 -93.86 -95.51 -90.71 -97.09 -87.56 -98.66 -82.83 -100.24 -79.69 -103.39 -82.83} {black -127.01 -95.43 -130.16 -101.73 -130.16 -109.61 -127.01 -111.18 -122.28 -112.76 -119.13 -112.76 -114.41 -109.61 -112.83 -106.46 -109.69 -100.16 -111.26 -97.01 -112.83 -92.28 -117.56 -90.71 -120.71 -92.28 -123.86 -87.56 -127.01 -87.56} {black 3.46 6.06 -3.62 -1.02 -8.35 -3.39 -13.07 -8.11 -8.35 -10.47 -1.26 -15.20 3.46 -17.56 10.55 -10.47 12.91 -5.75 15.28 -1.02 10.55 3.70 5.83 3.70} {black -3.62 1.34} } set XVIgrid {-433.307086615 -351.338582677 39.3700787402 0.0 0.0 39.3700787402 22 11} therion-5.4.1/samples/pocket-topo/Demo_p.xvi000066400000000000000000001131441307545355600210550ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { {0.00 0.00 503.0} {-189.09 -22.91 503.1} {-148.98 -6.42 503.2} {-237.05 113.46 503.3} {-148.98 -6.42 504.0} {-150.83 -55.31 504.1} {-37.72 3.54 504.2} {102.99 57.56 504.3} {121.89 -37.52 504.4} {219.09 51.38 504.5} {281.69 75.04 504.6} } set XVIshots { {219.09 51.38 281.69 75.04} {281.69 75.04 263.78 105.16} {281.69 75.04 270.20 66.42} {281.69 75.04 280.83 87.64} {121.89 -37.52 219.09 51.38} {219.09 51.38 220.94 48.11} {219.09 51.38 235.98 28.98} {219.09 51.38 217.91 49.49} {102.99 57.56 121.89 -37.52} {121.89 -37.52 117.24 -17.60} {121.89 -37.52 144.61 -22.60} {121.89 -37.52 146.42 -26.06} {121.89 -37.52 146.57 -26.46} {121.89 -37.52 145.79 -25.67} {121.89 -37.52 144.45 -23.46} {121.89 -37.52 116.54 -43.43} {121.89 -37.52 126.50 -35.63} {121.89 -37.52 161.18 12.99} {-37.72 3.54 102.99 57.56} {102.99 57.56 83.74 30.04} {102.99 57.56 100.75 44.29} {102.99 57.56 103.27 55.94} {102.99 57.56 101.65 62.87} {-150.83 -55.31 -37.72 3.54} {-37.72 3.54 -23.15 -27.01} {-37.72 3.54 -34.53 -1.97} {-37.72 3.54 -35.75 -2.36} {-148.98 -6.42 -150.83 -55.31} {-150.83 -55.31 -130.08 -25.55} {-150.83 -55.31 -152.44 -62.09} {-150.83 -55.31 -138.62 -47.17} {-150.83 -55.31 -144.88 -54.53} {-148.98 -6.42 -148.98 -6.42} {-148.98 -6.42 -166.81 -12.09} {-148.98 -6.42 -128.15 21.30} {-148.98 -6.42 -153.62 2.56} {-148.98 -6.42 -144.09 -28.31} {-148.98 -6.42 -237.05 113.46} {-237.05 113.46 -236.26 111.30} {-237.05 113.46 -257.64 80.39} {-237.05 113.46 -229.33 115.63} {-237.05 113.46 -230.79 105.24} {-189.09 -22.91 -148.98 -6.42} {0.00 0.00 -189.09 -22.91} {-189.09 -22.91 -161.89 19.37} {-189.09 -22.91 -160.55 6.18} {-189.09 -22.91 -168.15 -9.76} {-189.09 -22.91 -132.17 -50.71} {0.00 0.00 -60.16 37.40} {0.00 0.00 -15.28 -30.24} {0.00 0.00 -37.09 -4.09} } set XVIsketchlines { {blue -242.68 87.48 -241.10 88.27 -239.53 89.06 -236.38 92.20 -236.38 89.84 -237.17 88.27 -237.17 86.69 -237.17 83.54} {blue -256.06 70.16 -252.13 78.03 -248.98 81.18 -247.40 80.39 -245.83 80.39 -244.25 81.18 -242.68 81.18 -240.31 82.76 -238.74 85.12 -237.95 86.69 -235.59 90.63} {blue -189.13 -60.16 -186.77 -58.98 -184.41 -58.98 -182.05 -57.80 -177.32 -60.16 -178.50 -62.52 -178.50 -60.16 -182.05 -64.88 -184.41 -66.06} {blue -198.58 -74.33 -198.58 -71.97 -198.58 -69.61 -197.40 -67.24 -195.04 -64.88 -191.50 -64.88 -189.13 -64.88 -186.77 -63.70 -184.41 -62.52 -182.05 -62.52 -180.87 -60.16} {black 267.95 80.12 267.17 78.54 266.38 76.18 267.17 78.54 267.17 80.12 267.95 82.48 268.74 84.06 269.53 85.63 271.10 86.42 272.68 87.20 274.25 87.99 276.61 87.20 278.19 86.42 278.19 84.84 278.19 82.48 278.19 80.91 278.19 79.33 275.83 77.76 274.25 76.97 272.68 76.18 271.10 76.97 268.74 76.18 267.17 75.39 267.95 77.76 268.74 80.12 270.31 84.06} {black 242.76 58.86 244.33 59.65 245.91 60.43 248.27 61.22 249.84 62.01 251.42 62.01 252.99 62.80 254.57 62.01 256.14 61.22 255.35 59.65 253.78 57.28 252.20 56.50 250.63 55.71 249.06 55.71 247.48 55.71 245.91 55.71 244.33 57.28 244.33 58.86} {black 258.50 74.61 256.93 73.03 256.14 70.67 256.14 69.09 255.35 67.52 254.57 65.94 253.78 63.58 255.35 63.58 256.93 62.80 258.50 62.80 259.29 64.37 259.29 66.73 260.08 68.31 260.87 69.88 259.29 71.46} {black 256.14 71.46 255.35 73.03 255.35 74.61 254.57 76.18 254.57 77.76 254.57 79.33 256.93 79.33 258.50 79.33 260.08 79.33 262.44 79.33 264.80 78.54 264.80 76.97 264.02 74.61 262.44 73.03 261.65 71.46 260.08 71.46 257.72 71.46 256.14 72.24 256.14 73.82} {black 274.25 95.87 275.83 97.44 277.40 99.02 278.98 100.59 277.40 99.80 275.83 97.44} {black 282.91 80.12 285.28 79.33 286.85 79.33 288.43 78.54} {black 281.34 79.33} {black 280.55 89.57 280.55 87.20 280.55 85.63 280.55 84.06 280.55 81.69 281.34 80.12} {black 271.89 93.50 273.46 94.29 275.04 94.29 276.61 95.08 278.19 95.87} {black 251.42 77.76 252.99 79.33 254.57 80.12 256.93 80.91 258.50 81.69 260.87 82.48 262.44 83.27 264.02 83.27 266.38 84.06 267.95 84.84 268.74 86.42 269.53 88.78 270.31 90.35 271.89 91.93 273.46 92.72} {black 241.18 70.67 241.97 72.24 243.54 73.82 245.12 75.39 246.69 76.18 248.27 76.97 250.63 77.76 252.20 79.33} {black 252.20 47.83} {black 252.99 46.26 252.99 43.90 252.99 42.32 251.42 43.90 251.42 46.26 250.63 48.62 249.84 50.20 252.20 50.98 256.14 52.56 257.72 52.56 259.29 53.35 260.87 53.35 263.23 52.56 264.02 50.98 264.02 49.41 263.23 47.05 262.44 45.47 261.65 43.90 260.08 42.32 258.50 42.32 256.93 41.54 255.35 42.32 253.78 42.32 252.20 43.90 251.42 46.26 252.20 47.83} {black 245.12 47.05 244.33 48.62 245.12 50.20 246.69 51.77 248.27 52.56 249.84 53.35 250.63 51.77 249.84 50.20 248.27 48.62 246.69 47.05 245.12 45.47 243.54 45.47 241.97 47.05 241.97 48.62 242.76 50.20 243.54 51.77 245.12 53.35 246.69 54.13 248.27 55.71 249.84 56.50 251.42 57.28 252.99 57.28 252.99 55.71 252.20 54.13 251.42 52.56 249.84 51.77 248.27 53.35 249.06 54.92 250.63 56.50 252.20 57.28} {black 233.31 63.58 234.88 65.94 237.24 67.52 238.82 67.52 240.39 67.52 241.97 67.52 241.97 65.94 240.39 64.37 238.82 62.80 238.03 61.22 237.24 59.65 235.67 58.07 234.09 58.86 232.52 60.43 231.73 62.01 232.52 63.58 234.88 65.16 237.24 66.73 240.39 68.31 242.76 69.09 244.33 69.09 245.91 67.52 246.69 65.94 245.91 64.37 245.91 62.80 244.33 61.22 243.54 59.65 241.97 58.07 239.61 57.28 238.03 58.86} {black 238.82 73.82 237.24 72.24 236.46 69.88 234.88 68.31} {black 234.09 67.52 234.88 69.09 235.67 71.46 235.67 73.03 236.46 74.61 236.46 76.18 236.46 77.76 236.46 79.33 237.24 80.91 238.03 82.48 239.61 84.84 241.18 86.42 242.76 87.99 244.33 89.57 245.91 91.93 246.69 93.50 247.48 95.08 248.27 96.65 249.84 98.23 249.84 99.80 251.42 102.17} {black 238.82 33.66 240.39 34.45 241.97 35.24 243.54 36.02 245.91 36.81 247.48 37.60} {black 266.38 110.83 264.80 111.61 262.44 111.61 260.87 110.83 259.29 110.04 256.93 109.25 255.35 107.68 253.78 106.10 252.20 104.53 250.63 102.95 249.06 101.38 247.48 99.80 245.91 99.02 244.33 98.23 241.97 97.44 238.82 96.65 237.24 95.87 232.52 95.08} {black 264.80 106.89 262.44 106.10} {black 260.87 103.74} {black 280.55 88.78 278.19 91.14 277.40 92.72 275.83 94.29 274.25 95.87 272.68 97.44 271.89 99.02 270.31 101.38 268.74 102.95 267.17 104.53 265.59 106.89 263.23 108.46 261.65 110.04} {black 219.13 52.56 219.92 54.92 222.28 58.07 223.86 58.86 225.43 59.65 227.01 60.43 228.58 62.01 230.16 62.80 231.73 63.58} {black 242.76 43.90 245.12 43.90 246.69 43.11 248.27 42.32 247.48 40.75 246.69 38.39 245.12 36.81 243.54 36.81 241.97 36.02 240.39 36.81 239.61 38.39 240.39 39.96 241.97 41.54} {black 224.65 50.98 226.22 52.56 228.58 53.35 230.94 54.13 232.52 54.13 231.73 52.56 231.73 50.20 231.73 48.62 230.94 47.05 229.37 45.47 227.80 44.69 226.22 43.90 224.65 46.26 224.65 47.83 227.01 50.20} {black 225.43 50.20} {black 234.09 54.92 234.09 52.56 234.09 50.98 234.88 49.41 234.88 47.83 234.88 46.26 234.09 47.83 234.09 50.20 234.09 51.77 234.09 53.35 235.67 54.92 237.24 55.71 238.82 54.13 240.39 52.56 241.97 50.98 241.97 49.41 240.39 47.83 238.82 46.26 237.24 44.69 235.67 44.69 234.09 44.69} {black 238.03 47.05 239.61 46.26 241.18 46.26 241.97 44.69 241.97 42.32 241.18 40.75 239.61 39.17 237.24 37.60 235.67 36.81 234.09 36.81 233.31 39.17 233.31 40.75 234.09 42.32 234.88 43.90 236.46 45.47 238.03 45.47 240.39 44.69 240.39 42.32 240.39 40.75 238.82 39.17 238.03 37.60 236.46 36.81 234.88 36.02 233.31 36.81 233.31 39.17 234.09 40.75 234.88 42.32} {black 241.97 36.02 243.54 36.81 245.12 36.81 247.48 37.60 249.06 37.60 250.63 38.39 252.20 38.39 253.78 39.96 256.14 40.75 257.72 41.54} {black 209.69 40.75 211.26 41.54 212.83 42.32 214.41 41.54 215.98 39.96 215.98 38.39 215.20 36.81 213.62 35.24 212.05 35.24 210.47 34.45 209.69 36.02 210.47 38.39 212.05 39.96 213.62 41.54 214.41 43.11 212.05 41.54 210.47 39.17} {black 223.07 37.60 223.07 40.75 223.86 43.11 224.65 44.69 225.43 46.26 224.65 44.69 223.86 42.32 223.07 39.96 221.50 38.39 220.71 36.02 219.13 34.45 219.92 36.02 220.71 37.60 222.28 39.96 223.07 41.54 223.86 43.90 226.22 44.69 227.80 44.69 229.37 42.32 230.16 40.75 229.37 39.17 227.80 37.60 226.22 36.02 224.65 35.24 223.07 35.24 221.50 35.24 219.92 35.24 219.92 36.81 219.92 38.39 219.92 39.96} {black 223.86 43.11} {black 206.54 28.15 207.32 29.72 210.47 31.30 212.05 32.87 213.62 33.66 215.20 33.66 217.56 33.66 219.13 33.66 220.71 33.66 222.28 33.66 223.86 33.66 225.43 33.66 227.01 33.66 228.58 32.87 230.94 32.09 232.52 32.09 234.09 32.09 235.67 32.09 237.24 32.87 238.82 32.87 240.39 33.66} {black 196.30 43.11 198.66 43.11 200.24 43.90 201.81 43.90 203.39 43.90 204.96 44.69 206.54 45.47 208.11 46.26 209.69 47.05 211.26 47.83 213.62 48.62 215.20 50.20 216.77 50.98 218.35 51.77 219.92 53.35 221.50 54.13} {black 171.89 8.46 174.25 10.04 175.83 10.83 177.40 12.40 178.19 10.04 178.19 8.46 178.19 6.89 177.40 5.31 175.83 2.95 174.25 2.95 172.68 4.53 171.89 6.10 172.68 7.68 173.46 9.25 175.04 10.83} {black 173.46 14.76 173.46 16.34 174.25 18.70 175.04 20.28 175.83 22.64 177.40 23.43 179.76 24.21 181.34 25.00 180.55 22.64 179.76 21.06 178.98 19.49 178.19 17.91 176.61 16.34 175.04 16.34 173.46 16.34} {black 175.83 22.64 177.40 23.43 178.98 25.00 181.34 26.57 182.91 28.15 182.91 25.79 183.70 24.21 182.91 22.64 181.34 21.85 179.76 21.06 178.19 19.49 178.98 21.85 180.55 23.43 182.91 25.00} {black 179.76 12.40 181.34 13.98 182.91 16.34 184.49 18.70 186.06 19.49 188.43 18.70 190.00 18.70 189.21 17.13 187.64 14.76 186.06 13.19 185.28 11.61 182.91 10.04 181.34 10.83 180.55 13.19} {black 193.94 29.72 193.15 28.15 192.36 25.00 190.79 22.64 190.79 21.06 191.57 23.43 192.36 25.00 193.15 27.36 193.15 28.94 193.94 30.51 195.51 32.09 197.87 32.09 199.45 32.87 201.81 32.87 201.81 30.51 201.81 28.94 201.02 27.36 198.66 25.79 197.09 24.21 195.51 22.64 193.94 21.85 192.36 19.49 191.57 21.85} {black 177.40 -0.20 178.98 2.17 180.55 2.95 182.13 3.74 183.70 4.53 185.28 6.10 187.64 7.68 190.00 10.04 190.79 12.40 191.57 13.98 193.94 16.34 196.30 17.91 197.87 19.49 199.45 19.49 201.81 21.06 203.39 22.64 204.17 24.21 204.96 25.79 205.75 27.36 207.32 30.51 208.90 32.09} {black 164.80 16.34 166.38 17.91 167.95 18.70 169.53 20.28 171.10 21.85 172.68 23.43 174.25 25.00 175.83 26.57 177.40 28.15 178.98 28.94 180.55 29.72 182.13 31.30 183.70 32.87 184.49 34.45 186.06 35.24 187.64 36.02 189.21 36.81 190.79 38.39 192.36 39.17 193.94 40.75 196.30 41.54} {black 147.48 -25.39 149.06 -26.18 150.63 -27.76 152.20 -29.33 152.99 -30.91} {black 152.20 -22.24 152.20 -24.61 152.99 -26.18 153.78 -27.76 154.57 -29.33 156.14 -30.91} {black 156.14 -17.52 157.72 -15.94 159.29 -15.16 160.87 -14.37 162.44 -13.58} {black 125.43 -43.50 123.86 -45.08 122.28 -45.87 121.50 -47.44} {black 120.71 -42.72 119.13 -44.29} {black 119.92 -41.93 119.13 -43.50 118.35 -45.87} {black 129.37 -15.16} {black 129.37 -14.37 128.58 -15.94 129.37 -17.52 130.94 -18.31 132.52 -16.73 131.73 -15.16} {black 128.58 -15.16 130.16 -15.16} {black 126.22 -15.16 128.58 -14.37 130.16 -14.37 131.73 -14.37 132.52 -15.94} {black 141.97 -6.50 141.18 -4.92 140.39 -3.35 141.18 -1.77 142.76 -0.98} {black 143.54 -1.77 145.12 -4.13 144.33 -5.71 142.76 -7.28} {black 144.33 -2.56 145.12 -4.13 144.33 -5.71 142.76 -6.50 141.18 -5.71} {black 142.76 -3.35 144.33 -4.13 144.33 -5.71} {black 142.76 -3.35} {black 149.06 7.68 150.63 8.46 152.20 7.68 152.99 5.31 151.42 4.53 149.06 3.74 147.48 3.74} {black 145.12 0.59 146.69 2.17 148.27 2.17} {black 147.48 2.95 149.06 2.17 150.63 0.59 148.27 -0.98 146.69 -0.98 145.12 -1.77} {black 149.84 6.89 151.42 7.68} {black 150.63 5.31} {black 146.69 5.31 148.27 6.10 149.84 7.68 151.42 6.89} {black 166.38 -7.28 164.02 -7.28 162.44 -8.07 160.87 -8.07 158.50 -8.07 156.93 -8.07 156.93 -6.50 157.72 -4.92} {black 156.93 -4.13 158.50 -4.13 160.08 -4.13 162.44 -4.13 164.02 -4.13 165.59 -4.13 166.38 -5.71 167.17 -7.28} {black 163.23 11.61 162.44 10.04 160.87 8.46 160.08 6.89 159.29 5.31 160.08 6.89 161.65 9.25 163.23 9.25 164.80 9.25 166.38 8.46 165.59 6.89 164.80 5.31 164.02 3.74 162.44 2.95 160.87 3.74 159.29 2.95 159.29 4.53 160.08 6.10 161.65 8.46} {black 159.29 -15.16 160.87 -15.16 162.44 -14.37 164.02 -12.80 165.59 -11.22 167.17 -9.65 168.74 -8.07 171.89 -5.71 173.46 -4.13 175.04 -2.56 176.61 -1.77 178.19 -0.20} {black 149.06 -26.97 150.63 -27.76 152.20 -28.54 150.63 -26.97 149.84 -25.39 149.84 -23.82 150.63 -21.46 152.20 -20.67 153.78 -19.09 155.35 -18.31} {black 123.07 -45.08 124.65 -43.50 126.22 -42.72 128.58 -41.14 129.37 -39.57 130.94 -37.99 132.52 -36.42 134.09 -35.63 135.67 -34.06 137.24 -33.27 138.82 -31.69 139.61 -30.12 141.18 -28.54 142.76 -26.97 144.33 -26.18 145.91 -26.18 147.48 -27.76} {black 123.86 -36.42 123.86 -37.99 123.07 -40.35 121.50 -41.93 119.92 -42.72} {black 162.44 14.76 160.87 14.76 159.29 14.76 157.72 14.76 156.14 14.76 154.57 14.76 152.99 14.76 149.84 14.76 148.27 14.76 146.69 13.98 145.12 14.76 143.54 16.34 141.97 17.91 141.18 19.49 139.61 21.06 138.03 21.85 136.46 23.43 134.88 24.21 133.31 25.79 131.73 26.57 129.37 27.36 127.80 28.94 126.22 29.72 124.65 31.30 123.07 32.09 121.50 32.87 119.92 34.45} {black 128.58 -8.07} {black 115.98 16.34} {black 116.77 25.00} {black 115.20 34.45} {black 115.98 32.09} {black 119.92 28.15} {black 129.37 18.70 129.37 17.13 129.37 14.76 128.58 13.19 127.01 12.40 125.43 13.98 124.65 15.55 124.65 17.91 124.65 19.49 127.01 20.28 128.58 18.70} {black 135.67 -3.35 136.46 -4.92 135.67 -6.50 134.88 -4.92 133.31 -3.35 134.88 -3.35} {black 137.24 1.38 138.03 -0.20 137.24 -1.77 134.88 -0.98 134.09 0.59 134.88 2.95 136.46 2.95} {black 131.73 6.89 134.09 8.46 135.67 8.46 136.46 6.89 136.46 4.53 134.09 4.53 133.31 6.10 133.31 8.46} {black 134.88 3.74} {black 116.77 4.53 115.20 6.10 112.83 8.46 111.26 9.25 109.69 10.83 108.11 12.40 110.47 10.83 112.83 10.04 114.41 8.46 115.98 7.68 115.98 5.31 115.98 2.95 115.98 0.59 115.20 -0.98 113.62 0.59 111.26 1.38 109.69 2.95 108.90 4.53 108.11 6.10 108.90 7.68 108.90 10.04 108.90 11.61 108.90 13.19} {black 123.07 13.98 123.86 12.40 123.86 10.04 124.65 8.46 124.65 6.10 123.07 4.53 120.71 3.74 119.92 5.31 119.92 7.68 118.35 10.83 118.35 12.40 117.56 13.98 119.92 15.55 122.28 15.55} {black 125.43 -4.92 126.22 -6.50 125.43 -8.07 125.43 -10.43 123.07 -8.86 120.71 -7.28 119.13 -5.71 117.56 -3.35 117.56 -0.98 117.56 0.59 119.13 0.59 121.50 0.59 123.86 1.38 125.43 1.38 127.01 -0.20 127.80 -2.56 127.80 -4.92} {black 100.24 29.72 101.02 28.15 101.81 25.79 101.81 24.21 102.60 21.85 102.60 20.28 103.39 18.70 103.39 17.13 103.39 14.76 104.17 13.19 104.17 11.61 104.96 10.04 105.75 8.46 104.96 6.89 104.96 5.31 104.96 3.74 105.75 2.17 105.75 -0.20 105.75 -1.77 105.75 -3.35 105.75 -4.92 105.75 -6.50 105.75 -8.07 105.75 -9.65 106.54 -11.22 106.54 -12.80 107.32 -14.37 107.32 -16.73 108.90 -18.31 109.69 -19.88 109.69 -21.46 111.26 -23.03 112.83 -24.61 114.41 -26.18 115.20 -27.76 115.98 -29.33 116.77 -31.69 118.35 -32.48 119.92 -34.06 121.50 -35.63 123.07 -37.20 123.86 -38.78 124.65 -40.35} {black 94.72 34.45 97.09 33.66} {black 96.30 40.75} {black 98.66 47.83} {black 111.26 44.69} {black 104.17 40.75} {black 109.69 47.83} {black 115.20 39.96} {black 114.41 43.11} {black 108.11 51.77} {black 104.17 39.96} {black 97.09 43.11} {black 102.60 42.32} {black 96.30 55.71} {black 96.30 54.13} {black 90.79 47.83} {black 83.70 43.11} {black 81.34 42.32} {black 82.13 47.83} {black 71.10 51.77} {black 75.04 51.77} {black 80.55 56.50} {black 86.85 47.83} {black 90.79 53.35} {black 109.69 55.71 111.26 54.13} {black 115.98 50.98} {black 114.41 52.56 115.98 50.98} {black 115.98 48.62 115.98 47.05 116.77 45.47 116.77 43.90 117.56 42.32 118.35 40.75 119.13 38.39 119.92 36.81 120.71 35.24 121.50 33.66 122.28 32.09 123.86 30.51} {black 106.54 55.71 108.11 54.13 109.69 53.35 111.26 51.77} {black 101.81 65.16} {black 101.81 66.73 103.39 65.16 104.17 63.58 104.96 62.01 105.75 60.43 105.75 58.07 106.54 56.50 107.32 54.92} {black 86.85 36.81 88.43 36.02 90.00 36.02 91.57 35.24 93.15 34.45 94.72 34.45} {black 56.14 28.94 57.72 30.51 59.29 31.30 60.87 32.87 63.23 34.45 64.80 35.24 66.38 35.24 67.95 36.02 69.53 36.81 71.10 37.60 72.68 37.60 74.25 37.60 75.83 37.60 77.40 36.81 78.98 36.81 81.34 36.81 82.91 36.81 84.49 36.81 86.06 36.81 87.64 36.81 89.21 36.81} {black 33.31 21.85 31.73 21.85 30.16 21.85} {black 34.88 21.85} {black 61.65 43.11 61.65 44.69 63.23 45.47 64.80 46.26 66.38 46.26 67.95 47.05 69.53 45.47 68.74 43.90 68.74 41.54 67.95 39.96 66.38 39.17 64.80 37.60 63.23 36.81 61.65 36.81 59.29 36.81 59.29 39.17 60.08 40.75 60.87 43.11 61.65 44.69 63.23 45.47} {black 43.54 34.45} {black 51.42 46.26} {black 47.48 45.47} {black 37.24 27.36} {black 42.76 24.21} {black 45.91 29.72} {black 39.61 42.32} {black 37.24 40.75} {black 25.43 33.66} {black 29.37 37.60} {black 15.20 37.60 17.56 39.17 21.50 41.54 23.07 42.32 24.65 42.32 23.86 39.96 23.07 38.39 21.50 36.81 19.92 36.02 18.35 36.81 16.77 38.39 18.35 39.96 19.92 41.54 21.50 41.54} {black 16.77 39.17} {black 37.24 22.64 35.67 21.85 34.09 21.06 32.52 20.28 30.94 19.49} {black 29.37 21.85 30.94 22.64 33.31 23.43 34.88 24.21 36.46 23.43} {black 19.92 21.85 21.50 22.64 24.65 23.43 27.01 23.43 28.58 24.21 30.16 23.43 27.80 22.64 26.22 21.06 24.65 20.28 23.07 19.49 21.50 21.06} {black 10.47 26.57 12.83 26.57 18.35 27.36 23.07 27.36 23.86 25.79 23.86 24.21 22.28 22.64 20.71 22.64 19.13 21.85 16.77 21.85 15.20 22.64 13.62 23.43 14.41 25.00 15.98 26.57 20.71 28.15 22.28 28.94} {black 3.39 28.94 5.75 29.72 7.32 31.30 9.69 32.09 9.69 30.51 9.69 28.94 8.11 27.36 5.75 25.79 4.17 25.00 2.60 25.00 2.60 26.57 3.39 28.15 4.96 28.94} {black 7.32 19.49 9.69 20.28 11.26 21.06 12.83 21.85 13.62 20.28 12.83 18.70 11.26 17.13 9.69 17.13 8.11 17.13 6.54 17.13 5.75 18.70} {black 1.02 18.70 3.39 19.49 4.96 20.28 3.39 18.70 2.60 17.13 1.02 15.55 -0.55 13.98 -2.13 13.19 -2.91 14.76 -1.34 16.34 1.02 17.91 2.60 19.49 4.17 20.28} {black -8.43 17.13 -6.06 17.91 -2.91 19.49 -1.34 17.13 -2.91 16.34 -4.49 16.34 -6.06 16.34 -8.43 15.55 -6.85 17.13} {black -17.87 19.49 -16.30 20.28 -14.72 21.06 -12.36 21.85 -13.94 20.28 -13.94 18.70 -15.51 17.13 -17.09 15.55 -18.66 16.34 -17.09 17.91 -15.51 18.70} {black -7.64 25.79 -6.06 25.79 -3.70 25.79 -4.49 24.21 -5.28 22.64 -6.85 21.06 -8.43 21.06 -9.21 22.64 -10.00 24.21 -8.43 25.79 -6.06 26.57} {black 53.78 28.15 52.99 26.57 52.20 25.00 51.42 23.43 49.84 21.85 47.48 19.49 45.91 18.70 44.33 17.13 41.97 16.34 40.39 15.55 38.82 14.76 36.46 13.98 33.31 13.98 31.73 13.19 30.16 13.19 27.80 13.19 26.22 13.98 24.65 13.98 22.28 13.98 20.71 13.98 19.13 13.98 17.56 13.98 15.98 13.98 13.62 14.76 12.05 13.98 10.47 13.98 8.90 13.19 5.75 12.40 4.17 12.40 2.60 10.83} {black -1.34 32.09 0.24 33.66 1.81 35.24 3.39 36.02 4.96 37.60 7.32 39.17 9.69 40.75 11.26 41.54 12.83 43.11 14.41 43.90 16.77 44.69 18.35 44.69 20.71 45.47 22.28 46.26 23.86 47.05 26.22 47.83 27.80 47.83 29.37 47.83 30.94 48.62 32.52 48.62 34.09 49.41 35.67 49.41 37.24 49.41 38.82 50.20 40.39 50.98 42.76 51.77 44.33 52.56 45.91 52.56 47.48 53.35 49.06 53.35 50.63 53.35 52.20 54.13 53.78 54.13 56.14 54.13 57.72 54.13 59.29 54.92 60.87 54.92 62.44 54.92 64.02 54.92 65.59 54.92 67.17 54.92 68.74 54.92 70.31 54.92 71.89 54.92 73.46 54.13 75.04 54.92 77.40 54.92 79.76 54.92 81.34 54.92 82.91 55.71 84.49 55.71 86.06 56.50 87.64 56.50 89.21 57.28 90.79 57.28 92.36 58.07 93.94 58.86 95.51 59.65 97.09 60.43 98.66 61.22 100.24 62.01} {black -29.69 13.98 -28.11 15.55 -26.54 17.13 -24.17 18.70 -22.60 19.49 -21.02 20.28 -18.66 21.06 -17.09 21.85 -15.51 22.64 -13.15 24.21 -11.57 25.79 -10.00 26.57 -8.43 27.36 -6.85 28.15 -4.49 29.72 -2.13 30.51 -0.55 31.30 1.02 32.09} {black -2.13 2.95 -0.55 2.95 1.02 3.74 2.60 5.31 3.39 6.89 4.17 8.46 5.75 10.04 7.32 11.61 8.90 13.19} {black -61.97 -12.01 -63.54 -13.58} {black -56.46 -10.43 -56.46 -8.86 -55.67 -7.28} {black -54.88 -6.50 -52.52 -6.50 -50.94 -6.50 -49.37 -7.28 -49.37 -8.86 -50.16 -10.43 -51.73 -12.01 -53.31 -12.80 -54.88 -12.80 -55.67 -11.22 -55.67 -9.65} {black -61.18 -4.13 -58.03 -4.13 -56.46 -3.35 -54.88 -4.92 -56.46 -6.50 -60.39 -8.07 -63.54 -8.86 -64.33 -6.50 -61.18 -4.13} {black -55.67 -11.22 -54.88 -12.80 -55.67 -15.16 -57.24 -16.73 -60.39 -18.31 -65.12 -18.31 -65.91 -16.73 -65.91 -15.16 -64.33 -13.58 -62.76 -13.58} {black -62.76 -13.58} {black -73.78 -19.88 -71.42 -19.09 -66.69 -17.52 -66.69 -19.88 -67.48 -21.46 -70.63 -22.24 -72.20 -23.03 -73.78 -23.03 -73.78 -21.46} {black -76.14 -12.80 -72.99 -10.43 -71.42 -9.65 -69.06 -10.43 -68.27 -12.01 -69.06 -13.58 -70.63 -15.16 -72.20 -15.16 -75.35 -14.37 -73.78 -12.80} {black -87.17 -20.67 -85.59 -19.88 -82.44 -19.09 -80.87 -18.31 -78.50 -19.88 -77.72 -21.46 -79.29 -23.03 -80.08 -24.61 -81.65 -24.61 -86.38 -23.82 -88.74 -23.82 -87.95 -21.46 -87.17 -19.88} {black -107.64 -22.24 -105.28 -22.24 -101.34 -21.46 -100.55 -23.03 -101.34 -25.39 -104.49 -26.18 -106.06 -26.18 -107.64 -24.61 -106.06 -23.03} {black -103.70 -29.33 -100.55 -27.76 -95.04 -26.18 -93.46 -25.39 -93.46 -26.97 -93.46 -28.54 -95.04 -30.12 -96.61 -30.91 -100.55 -32.48 -102.13 -32.48 -101.34 -28.54} {black -117.87 -30.12 -111.57 -28.54 -110.00 -28.54 -109.21 -30.91 -108.43 -32.48 -110.79 -33.27 -112.36 -33.27 -115.51 -34.84 -117.09 -34.84 -117.87 -33.27 -117.87 -31.69 -117.09 -29.33} {black -123.39 -24.61 -121.81 -23.82 -116.30 -21.46 -114.72 -22.24 -110.00 -23.03 -112.36 -24.61 -113.94 -26.18 -116.30 -26.97 -117.87 -26.97 -121.02 -26.97 -122.60 -26.18 -121.02 -23.82 -119.45 -23.03} {black -139.92 -24.61 -138.35 -23.82 -135.20 -23.03 -133.62 -24.61 -132.83 -26.18 -133.62 -27.76 -136.77 -27.76 -138.35 -26.97 -138.35 -24.61} {black -132.83 -30.91 -131.26 -30.12 -129.69 -30.12 -128.11 -29.33 -125.75 -30.91 -124.17 -32.48 -129.69 -34.84 -131.26 -35.63 -132.83 -35.63 -133.62 -34.06 -134.41 -32.48 -135.20 -30.91} {black -35.98 6.10 -38.35 6.10 -39.92 5.31 -41.50 5.31 -43.07 5.31 -44.65 5.31 -46.22 4.53 -47.80 4.53 -50.16 3.74 -51.73 3.74 -53.31 3.74 -54.88 3.74 -56.46 3.74 -58.03 2.95 -59.61 2.17 -61.97 1.38 -63.54 0.59 -65.12 -0.20 -66.69 -1.77 -68.27 -3.35 -69.84 -4.13 -72.20 -5.71 -74.57 -7.28 -76.14 -8.86 -77.72 -9.65 -79.29 -10.43 -80.87 -11.22 -82.44 -12.80 -84.02 -13.58 -85.59 -14.37 -87.17 -14.37 -88.74 -15.16 -90.31 -15.94 -91.89 -16.73 -93.46 -16.73 -95.04 -17.52 -96.61 -18.31 -98.19 -18.31 -99.76 -19.09 -101.34 -19.09 -102.91 -19.88 -104.49 -19.09 -105.28 -17.52 -106.85 -16.73 -108.43 -17.52 -110.79 -17.52 -112.36 -18.31 -113.94 -19.09 -115.51 -19.09 -117.09 -19.09 -118.66 -19.09 -120.24 -19.09 -121.81 -18.31 -123.39 -18.31 -124.96 -19.09} {black -162.76 -52.17 -164.33 -53.74 -166.69 -55.31 -168.27 -56.89 -169.84 -58.46 -171.42 -59.25 -172.99 -61.61 -171.42 -59.25 -169.84 -57.68 -168.27 -56.10 -166.69 -54.53 -165.12 -52.95 -163.54 -52.95 -161.18 -53.74 -161.18 -55.31 -162.76 -57.68 -163.54 -59.25 -165.91 -60.04 -167.48 -60.04 -169.06 -60.04 -170.63 -60.04} {black -166.69 -51.38 -163.54 -51.38 -161.97 -51.38 -160.39 -50.59} {black -167.48 -51.38 -169.06 -50.59 -168.27 -49.02 -166.69 -47.44 -165.12 -45.87} {black -166.69 -46.65 -165.12 -46.65 -163.54 -46.65 -161.18 -45.87 -159.61 -47.44 -158.03 -49.02 -157.24 -50.59} {black -139.92 -13.58 -139.92 -15.16 -138.35 -17.52 -137.56 -19.09 -135.98 -20.67 -134.41 -22.24 -132.83 -23.03 -131.26 -23.82 -129.69 -23.03 -128.11 -22.24 -127.32 -20.67 -125.75 -19.88} {black -139.13 -30.12 -138.35 -31.69 -139.13 -34.06 -139.92 -35.63 -140.71 -37.20 -142.28 -38.78 -141.50 -40.35 -139.92 -41.93 -138.35 -41.93 -136.77 -41.93 -134.41 -41.93 -132.83 -41.93 -131.26 -41.93 -129.69 -42.72 -128.11 -42.72 -126.54 -42.72 -124.96 -43.50} {black -171.42 17.13 -169.84 15.55 -169.06 13.98 -167.48 11.61 -166.69 10.04 -165.91 8.46 -165.12 6.89 -164.33 5.31 -163.54 3.74 -162.76 2.17 -161.97 0.59 -161.18 -0.98 -160.39 -2.56 -159.61 -4.92 -158.82 -6.50 -158.82 -8.07 -158.03 -9.65 -157.24 -11.22 -156.46 -12.80 -155.67 -14.37 -154.09 -15.94 -152.52 -17.52 -151.73 -19.09 -150.94 -20.67 -150.16 -22.24 -150.16 -24.61 -150.16 -26.18 -150.16 -27.76 -151.73 -29.33 -152.52 -31.69 -153.31 -33.27 -154.88 -34.84 -156.46 -35.63 -158.03 -37.20 -159.61 -38.78 -161.18 -39.57 -162.76 -41.14} {black -181.65 -68.70 -180.08 -67.91 -177.72 -67.13 -176.14 -66.34 -174.57 -65.55 -172.99 -65.55 -171.42 -64.76 -169.84 -63.98 -168.27 -63.19 -165.91 -62.40 -164.33 -61.61 -162.76 -60.83 -160.39 -60.04 -158.82 -59.25 -157.24 -58.46 -155.67 -56.89 -154.09 -56.10 -151.73 -55.31 -150.16 -54.53 -147.80 -53.74 -146.22 -53.74 -144.65 -52.95 -143.07 -52.95 -141.50 -52.17 -138.35 -51.38 -135.98 -50.59 -134.41 -49.80 -132.83 -49.80 -131.26 -49.02 -129.69 -48.23 -128.11 -47.44 -126.54 -47.44 -124.96 -46.65 -123.39 -45.87 -121.81 -45.87 -119.45 -45.08 -117.87 -44.29 -115.51 -44.29 -113.94 -43.50 -112.36 -42.72 -110.79 -41.93 -109.21 -41.14 -107.64 -40.35 -105.28 -39.57 -102.91 -38.78 -101.34 -37.99 -99.76 -37.20 -97.40 -37.20 -95.83 -36.42 -94.25 -35.63 -92.68 -34.84 -91.10 -34.84 -89.53 -34.06 -87.95 -34.06 -86.38 -33.27 -84.80 -33.27 -83.23 -32.48 -80.87 -32.48 -79.29 -31.69 -77.72 -31.69 -76.14 -30.91 -74.57 -30.12 -72.99 -29.33 -71.42 -28.54 -69.84 -27.76 -67.48 -26.97 -65.91 -26.18 -64.33 -25.39 -62.76 -24.61 -61.18 -24.61 -59.61 -24.61 -58.03 -23.82 -56.46 -23.03 -54.88 -21.46 -53.31 -20.67 -51.73 -19.88 -50.16 -19.09 -48.58 -17.52 -47.01 -16.73 -45.43 -15.94 -43.86 -15.16 -42.28 -14.37 -40.71 -12.80 -39.13 -11.22} {black -184.80 -56.89 -183.23 -56.10 -181.65 -54.53 -180.08 -53.74 -177.72 -52.17 -176.14 -51.38 -174.57 -49.80 -172.20 -48.23 -170.63 -47.44 -169.06 -46.65 -166.69 -45.87 -165.12 -45.08 -162.76 -43.50 -163.54 -41.93 -165.12 -41.14 -167.48 -40.35 -169.06 -38.78 -170.63 -37.20 -172.20 -36.42 -173.78 -34.84 -175.35 -33.27 -176.93 -31.69 -178.50 -30.91 -180.08 -29.33 -180.87 -27.76 -182.44 -26.18 -184.02 -25.39 -185.59 -23.03 -186.38 -21.46} {black -154.88 -3.35 -156.46 -3.35 -158.03 -1.77} {black -221.02 85.63} {black -225.75 91.93} {black -180.08 58.07} {black -185.59 56.50} {black -169.84 47.05} {black -187.95 77.76} {black -206.06 80.91} {black -194.25 80.91} {black -147.80 21.06 -149.37 21.85 -150.94 21.85 -152.52 22.64} {black -198.19 85.63} {black -174.57 50.20} {black -176.14 55.71} {black -222.60 109.25} {black -227.32 110.04} {black -232.83 101.38} {black -234.41 103.74} {black -231.26 97.44} {black -235.20 105.31} {black -239.13 98.23 -240.71 96.65 -242.28 95.87 -243.86 95.08 -244.65 93.50 -246.22 91.14 -247.01 89.57 -248.58 88.78 -250.16 87.20 -251.73 85.63} {black -248.58 93.50 -249.37 91.93 -250.16 90.35 -251.73 88.78 -253.31 87.20 -254.09 85.63} {black -235.20 117.13 -236.77 115.55 -238.35 113.98 -239.13 111.61 -240.71 110.04 -241.50 108.46 -243.07 106.89 -243.86 105.31 -245.43 103.74 -247.01 101.38 -247.01 99.80 -247.80 98.23 -248.58 96.65 -248.58 95.08 -248.58 93.50} {black -179.29 58.86} {black -187.17 57.28} {black -194.25 86.42} {black -205.28 79.33} {black -203.70 87.99} {black -206.06 85.63} {black -213.15 84.06} {black -216.30 82.48} {black -210.79 75.39} {black -203.70 67.52} {black -201.34 61.22} {black -199.76 58.07} {black -192.68 54.13} {black -191.10 61.22} {black -200.55 63.58} {black -206.85 65.94} {black -210.79 73.03} {black -154.88 26.57 -156.46 28.94 -157.24 30.51 -158.03 32.09 -158.82 33.66 -159.61 35.24 -160.39 36.81 -161.18 39.17 -161.97 40.75 -161.97 42.32 -162.76 44.69 -161.97 42.32 -161.18 40.75 -160.39 38.39 -159.61 36.81 -158.82 35.24 -158.03 32.87 -157.24 31.30 -156.46 29.72 -155.67 27.36 -155.67 25.79 -154.88 24.21} {black -215.12 82.09} {black -219.84 93.90 -221.02 97.44 -221.02 99.80 -221.02 103.35 -221.02 105.71 -218.66 105.71 -216.30 104.53 -213.94 103.35 -211.57 102.17 -209.21 99.80 -209.21 96.26 -208.03 93.90 -208.03 91.54 -209.21 89.17 -211.57 87.99 -213.94 90.35 -216.30 92.72 -218.66 95.08 -219.84 97.44} {black -203.31 66.73 -199.76 65.55 -197.40 65.55 -195.04 64.37 -192.68 63.19 -189.13 63.19 -186.77 62.01 -184.41 60.83 -182.05 60.83 -179.69 59.65 -177.32 58.46 -176.14 62.01 -177.32 64.37 -177.32 66.73 -178.50 69.09 -180.87 71.46 -183.23 72.64 -185.59 72.64 -187.95 72.64 -190.31 72.64 -192.68 73.82 -195.04 73.82 -197.40 75.00 -200.94 76.18 -200.94 73.82 -202.13 70.28 -198.58 67.91} {black -238.74 97.44 -235.20 93.90 -231.65 90.35 -229.29 87.99 -225.75 84.45 -224.57 82.09 -222.20 79.72 -219.84 76.18 -216.30 72.64 -211.57 65.55 -209.21 63.19 -206.85 60.83 -204.49 58.46 -202.13 56.10 -199.76 53.74 -197.40 52.56 -193.86 49.02 -191.50 47.83 -190.31 45.47} {black -241.10 96.26} {black -235.20 116.34 -230.47 113.98 -228.11 113.98 -225.75 112.80 -222.20 111.61 -219.84 110.43 -217.48 108.07 -215.12 105.71 -212.76 103.35 -209.21 102.17 -206.85 99.80 -203.31 96.26 -199.76 93.90 -197.40 91.54 -195.04 90.35 -192.68 86.81 -190.31 84.45 -187.95 83.27 -184.41 79.72 -180.87 76.18 -179.69 73.82 -177.32 71.46 -174.96 69.09 -173.78 66.73 -172.60 63.19 -170.24 60.83 -169.06 58.46 -169.06 56.10} {black -166.69 52.56 -167.87 54.92 -169.06 57.28 -169.06 59.65 -170.24 62.01 -172.60 65.55 -173.78 67.91} {black -158.43 33.66 -160.79 36.02 -161.97 38.39 -164.33 41.93 -164.33 44.29 -166.69 46.65 -167.87 49.02 -169.06 51.38 -170.24 53.74 -170.24 57.28 -171.42 59.65 -172.60 62.01 -171.42 59.65} {black -167.87 14.76 -167.87 18.31 -169.06 20.67 -169.06 23.03 -166.69 23.03 -163.15 21.85 -161.97 19.49 -160.79 15.94 -161.97 13.58 -165.51 14.76 -167.87 18.31 -169.06 20.67} {black -156.06 11.22 -154.88 13.58 -153.70 15.94 -151.34 15.94 -151.34 11.22 -150.16 8.86 -153.70 8.86 -156.06 11.22 -157.24 13.58} {black -161.97 4.13 -163.15 6.50 -164.33 8.86 -165.51 12.40 -163.15 13.58 -160.79 13.58 -158.43 14.76 -158.43 12.40 -157.24 8.86 -156.06 6.50 -156.06 4.13 -158.43 2.95 -160.79 4.13 -163.15 6.50 -163.15 8.86} {black -158.43 -5.31 -158.43 -2.95 -158.43 0.59 -156.06 2.95 -153.70 4.13 -151.34 1.77 -148.98 -0.59 -150.16 -2.95 -152.52 -5.31 -154.88 -4.13} {black -151.34 -15.94 -150.16 -12.40 -148.98 -7.68 -146.61 -7.68 -143.07 -8.86 -140.71 -13.58 -140.71 -15.94 -145.43 -15.94 -148.98 -17.13 -150.16 -12.40} {black -147.80 -20.67 -145.43 -23.03 -143.07 -25.39 -141.89 -28.94 -140.71 -31.30 -139.53 -33.66} {black -172.60 19.49 -171.42 13.58 -170.24 11.22 -169.06 7.68 -167.87 5.31 -165.51 0.59 -164.33 -1.77 -161.97 -4.13 -159.61 -7.68 -158.43 -10.04 -156.06 -12.40 -154.88 -14.76 -153.70 -17.13 -151.34 -19.49 -150.16 -23.03 -147.80 -24.21 -144.25 -26.57 -141.89 -28.94} {black -145.43 -4.13 -145.43 -6.50 -144.25 -8.86 -143.07 -11.22 -141.89 -14.76 -140.71 -17.13} {black -163.15 34.84 -160.79 31.30 -158.43 28.94 -157.24 25.39 -154.88 23.03 -153.70 20.67 -152.52 18.31 -150.16 12.40 -148.98 10.04 -148.98 7.68 -148.98 5.31 -147.80 1.77 -147.80 -0.59 -147.80 -2.95 -146.61 -6.50 -145.43 -8.86 -145.43 -11.22} {black -148.98 19.49 -145.43 18.31 -143.07 15.94 -141.89 13.58 -139.53 10.04 -138.35 7.68 -135.98 5.31 -133.62 1.77 -130.08 -2.95 -124.17 -2.95 -121.81 -2.95 -119.45 -4.13 -117.09 -4.13 -114.72 -2.95 -112.36 -1.77 -110.00 -1.77 -107.64 -1.77 -105.28 -1.77 -102.91 -1.77 -100.55 -1.77 -98.19 -1.77 -97.01 -5.31 -95.83 -1.77 -94.65 0.59 -92.28 2.95 -91.10 5.31 -89.92 7.68 -88.74 10.04} {black -52.13 17.13 -48.58 18.31 -46.22 19.49 -43.86 20.67 -41.50 19.49 -39.13 17.13 -39.13 14.76 -40.31 11.22 -41.50 8.86 -43.86 8.86 -46.22 8.86 -48.58 10.04 -49.76 13.58 -49.76 15.94 -49.76 18.31} {black -47.40 50.20 -42.68 52.56 -40.31 53.74 -36.77 54.92} {black -52.13 43.11 -50.94 46.65 -50.94 49.02 -49.76 51.38 -52.13 46.65 -53.31 44.29 -54.49 41.93 -54.49 39.57} {black -50.94 41.93 -48.58 39.57 -46.22 37.20 -43.86 34.84 -41.50 32.48 -39.13 30.12 -36.77 27.76 -35.59 25.39 -33.23 21.85 -32.05 19.49 -30.87 17.13 -24.96 20.67 -23.78 23.03 -20.24 25.39 -17.87 27.76} {black -56.85 23.03 -54.49 27.76 -53.31 30.12 -49.76 30.12 -47.40 30.12 -45.04 26.57 -43.86 24.21 -43.86 21.85 -48.58 20.67 -53.31 19.49 -53.31 24.21} {black -39.13 5.31 -39.13 8.86 -37.95 11.22 -37.95 13.58 -35.59 14.76 -33.23 14.76 -30.87 14.76 -29.69 10.04 -30.87 6.50 -30.87 4.13 -30.87 1.77 -29.69 -0.59 -35.59 0.59 -37.95 1.77 -37.95 5.31 -36.77 7.68 -35.59 10.04} {black -30.87 -13.58 -30.87 -17.13 -32.05 -23.03 -32.05 -25.39 -32.05 -27.76 -32.05 -25.39 -30.87 -19.49 -24.96 -15.94 -22.60 -14.76 -20.24 -13.58 -16.69 -13.58 -14.33 -15.94 -13.15 -19.49 -14.33 -21.85 -13.15 -24.21 -20.24 -27.76 -23.78 -28.94 -26.14 -28.94 -28.50 -30.12 -28.50 -25.39 -28.50 -19.49 -28.50 -17.13} {black -21.42 -2.95 -23.78 -4.13} {black -27.32 -5.31 -26.14 -7.68 -24.96 -10.04 -21.42 -11.22 -17.87 -10.04 -15.51 -10.04 -13.15 -10.04 -14.33 -5.31 -14.33 -2.95 -20.24 -2.95 -22.60 -4.13} {black -17.87 10.04 -20.24 8.86 -23.78 6.50 -26.14 4.13 -24.96 1.77 -23.78 -1.77 -22.60 -4.13 -19.06 0.59 -16.69 2.95 -17.87 5.31 -17.87 7.68} {black -9.61 -2.95 -11.97 -0.59 -14.33 0.59 -14.33 2.95 -14.33 5.31 -13.15 7.68 -13.15 11.22 -11.97 13.58 -9.61 11.22 -7.24 11.22 -4.88 10.04 -4.88 7.68 -4.88 5.31 -3.70 2.95 -3.70 0.59 -4.88 -1.77 -7.24 -1.77 -9.61 -1.77} {black -10.79 -28.94 -13.15 -30.12 -16.69 -31.30 -20.24 -32.48 -22.60 -33.66 -26.14 -34.84 -29.69 -36.02 -32.05 -37.20 -36.77 -39.57 -39.13 -41.93 -41.50 -41.93 -47.40 -45.47 -50.94 -45.47 -53.31 -46.65 -58.03 -49.02 -60.39 -50.20 -62.76 -51.38} {black -161.97 30.12 -164.33 33.66 -166.69 37.20 -169.06 39.57 -173.78 41.93 -176.14 44.29 -178.50 46.65 -180.87 49.02 -183.23 51.38 -186.77 49.02 -189.13 47.83 -191.50 45.47 -186.77 41.93 -183.23 38.39} {black -172.60 14.76 -172.60 17.13 -172.60 19.49 -173.78 21.85 -176.14 24.21 -177.32 27.76 -180.87 31.30 -182.05 33.66 -184.41 37.20 -185.59 39.57 -183.23 38.39 -177.32 30.12 -173.78 27.76 -177.32 30.12 -180.87 36.02 -182.05 38.39} {black -185.59 -18.31 -184.41 -15.94 -183.23 -12.40 -182.05 -10.04 -180.87 -7.68 -179.69 -5.31 -178.50 -2.95 -178.50 0.59 -177.32 2.95 -176.14 5.31 -176.14 7.68 -174.96 11.22 -174.96 13.58 -173.78 15.94} {black -140.71 -50.20 -137.17 -47.83 -134.80 -47.83 -128.90 -45.47 -126.54 -45.47 -122.99 -44.29 -120.63 -43.11 -118.27 -41.93 -115.91 -41.93 -112.36 -40.75 -110.00 -39.57 -107.64 -39.57 -105.28 -38.39 -102.91 -38.39 -100.55 -37.20 -98.19 -36.02 -94.65 -36.02 -92.28 -34.84 -89.92 -34.84 -87.56 -34.84 -85.20 -33.66 -82.83 -32.48 -80.47 -32.48 -78.11 -31.30 -75.75 -30.12 -73.39 -30.12 -71.02 -28.94 -67.48 -28.94 -65.12 -27.76 -62.76 -27.76 -60.39 -26.57 -58.03 -25.39 -55.67 -24.21 -53.31 -23.03 -50.94 -20.67 -48.58 -19.49 -46.22 -17.13 -43.86 -17.13 -41.50 -14.76 -39.13 -13.58 -36.77 -12.40} {black -37.95 -6.50 -36.77 -8.86 -35.59 -11.22 -34.41 -13.58 -33.23 -15.94 -32.05 -18.31} {black -137.17 14.76 -132.44 14.76 -130.08 13.58 -127.72 12.40 -125.35 12.40 -122.99 12.40 -119.45 12.40 -114.72 11.22 -111.18 11.22 -108.82 10.04 -106.46 10.04 -104.09 10.04 -101.73 11.22 -99.37 10.04 -97.01 8.86 -94.65 8.86 -91.10 7.68 -88.74 7.68 -86.38 7.68 -84.02 7.68 -81.65 7.68 -79.29 8.86 -76.93 8.86 -74.57 8.86 -72.20 8.86 -69.84 8.86 -67.48 8.86 -65.12 8.86 -62.76 8.86 -59.21 8.86 -56.85 8.86 -54.49 8.86 -52.13 7.68 -48.58 7.68 -46.22 6.50 -43.86 5.31 -41.50 2.95 -40.31 0.59 -39.13 -1.77 -39.13 -4.13 -39.13 -6.50 -39.13 -8.86 -39.13 -11.22} {black -167.87 30.12 -165.51 30.12 -164.33 27.76 -161.97 24.21 -159.61 23.03 -157.24 21.85 -154.88 19.49 -152.52 18.31 -150.16 15.94 -147.80 14.76 -144.25 12.40 -141.89 12.40 -139.53 12.40 -137.17 12.40 -134.80 12.40 -132.44 12.40 -130.08 12.40 -127.72 13.58 -125.35 14.76 -122.99 15.94 -118.27 15.94 -115.91 17.13 -113.54 17.13 -111.18 18.31 -108.82 18.31 -105.28 18.31 -102.91 20.67 -100.55 23.03 -98.19 23.03 -95.83 24.21 -93.46 25.39 -91.10 26.57 -88.74 26.57 -85.20 27.76 -82.83 28.94 -80.47 30.12 -78.11 31.30 -75.75 31.30 -73.39 32.48 -71.02 33.66 -68.66 34.84 -65.12 36.02} {black -56.85 46.65 -54.49 44.29 -53.31 41.93 -53.31 39.57 -56.85 37.20 -59.21 36.02 -61.57 37.20 -63.94 37.20 -66.30 37.20} } set XVIgrid {-277.322834646 -94.0157480316 39.3700787402 0.0 0.0 39.3700787402 15 6} therion-5.4.1/samples/pocket-topo/demo.th000066400000000000000000000032611307545355600204010ustar00rootroot00000000000000encoding utf-8 centreline fix 503.0 600123.000 200456.000 777.770 endcentreline centreline date 2008.01.01 data normal from to compass clino tape extend right 503.0 - 301.86 2.25 1.800 503.0 - 206.82 8.10 0.870 503.0 - 263.70 25.47 1.050 extend left 503.0 503.1 263.23 -26.10 5.380 503.1 - 32.78 -3.78 1.280 503.1 - 44.47 66.36 2.580 503.1 - 57.92 77.87 2.990 503.1 - 116.02 -18.81 1.700 503.1 503.2 67.41 -69.35 3.120 503.2 503.3 323.53 -25.66 4.200 extend right 503.3 - 160.14 -81.12 0.380 503.3 - 211.90 2.02 0.990 503.3 - 74.27 -13.62 0.210 503.3 - 142.73 65.83 0.640 503.2 504.0 0.00 0.00 0.000 504.0 - 252.33 -18.28 0.500 504.0 - 36.91 1.67 0.880 504.0 - 332.75 -69.96 0.750 504.0 - 167.43 1.85 0.570 504.0 504.1 182.20 -35.77 1.530 504.1 - 34.89 21.36 0.990 504.1 - 193.36 61.35 0.370 504.1 - 56.25 -70.93 1.140 504.1 - 82.62 78.13 0.740 504.1 504.2 62.58 -21.09 3.470 504.2 - 154.51 -0.79 0.860 504.2 - 150.03 -73.74 0.580 504.2 - 161.72 71.89 0.510 504.2 504.3 68.91 -7.91 3.870 504.3 - 214.98 14.15 0.880 504.3 - 189.67 18.19 0.360 504.3 - 170.95 -78.40 0.210 504.3 - 345.85 83.58 1.240 504.3 504.4 168.66 2.46 2.460 504.4 - 346.90 1.05 0.520 504.4 - 56.69 0.35 0.690 504.4 - 64.95 4.13 0.690 504.4 - 65.83 5.10 0.690 504.4 - 63.63 4.39 0.680 504.4 - 58.10 7.12 0.680 504.4 - 222.19 43.68 0.280 504.4 - 67.76 -71.19 0.390 504.4 - 37.88 45.26 2.310 504.4 504.5 47.55 -0.53 3.360 504.5 - 150.64 84.46 0.980 504.5 - 143.00 7.91 0.720 504.5 - 212.26 -75.06 0.220 504.5 504.6 69.08 53.79 2.880 504.6 - 329.24 0.88 0.890 504.6 - 233.09 46.41 0.530 504.6 - 356.13 -54.32 0.550 endcentreline therion-5.4.1/samples/pocket-topo/demo.th2000066400000000000000000000004731307545355600204650ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 955.771653544 825.551181103 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {277.322834646 1 1.0} {94.0157480316 503.0} Demo_p.xvi 0 {} ##XTHERION## xth_me_image_insert {434.307086615 1 1.0} {655.188976378 503.0} Demo_e.xvi 0 {} therion-5.4.1/samples/pocket-topo/thconfig000066400000000000000000000003001307545355600206330ustar00rootroot00000000000000encoding utf-8 source demo.th export model -o cave.3d export model -o cave.plt export model -o cave.lox export map -o cave.xvi -layout-scale 1 100 #!CLEAN cave.3d cave.plt cave.lox cave.xvi therion-5.4.1/samples/q-marks/000077500000000000000000000000001307545355600162255ustar00rootroot00000000000000therion-5.4.1/samples/q-marks/centerline.th000066400000000000000000000010571307545355600207150ustar00rootroot00000000000000encoding utf-8 #!FILE 2 centerline data normal from to compass clino tape 0 1 10 8 8.4 1 2 43 24 6.1 2 3 334 16 9.1 1 4 267 11 6.9 4 5 288 7 8.7 2 6 69 8 11.8 6 7 25 23 8.3 #!SUBTITLE Question marks in centerline #! In the centerline object, you may add a special flags to the station, #! where continuation is possible. Just use following syntax #!CODE station 5 "pit" continuation attr Code V explored 20m #!ENDCODE endcenterline therion-5.4.1/samples/q-marks/map.th2000066400000000000000000000050131307545355600174200ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 953.0 816.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {354.329 1 1.0} {98.423 0} map.xvi 0 {} scrap scrap.1 -scale [-128.0 -128.0 935.085 -128.0 0.0 0.0 27.002359 0.0 m] #!FILE 4 #!SUBTITLE Question marks in maps #! In the scrap (.th2 file), you can use -text, -code #! and -explored options to continuation symbol. #!CODE point 796.0 676.0 continuation -attr Code A -explored 50m \ -text "water too cold to continue survey" #!ENDCODE line pit 134.0 257.0 148.0 276.0 150.0 329.0 150.0 329.0 smooth off endline point 87.989 305.313 station -name 5 point 249.609 252.753 station -name 4 point 735.829 558.663 station -name 7 point 672.239 422.443 station -name 6 point 382.089 494.683 station -name 3 point 457.479 339.963 station -name 2 point 382.679 259.643 station -name 1 point 354.329 98.423 station -name 0 line wall 432.0 347.0 432.0 347.0 418.0 312.0 386.0 295.0 354.0 278.0 321.0 274.0 301.0 277.0 281.0 280.0 243.0 268.0 203.0 287.0 163.0 306.0 150.0 326.0 125.0 340.0 100.0 354.0 56.0 377.0 48.0 344.0 40.0 311.0 -9.0 248.0 61.0 242.0 131.0 236.0 109.0 273.0 153.0 260.0 197.0 247.0 230.0 231.0 290.0 233.0 350.0 235.0 388.0 270.0 349.0 217.0 310.0 164.0 343.0 132.0 295.0 97.0 smooth off endline point 362.0 507.0 continuation -align tl -attr Code B \ -text "strong wind from breakdown" point 407.0 516.0 air-draught -orientation 155.4 line wall:debris 383.0 507.0 324.0 408.0 383.0 452.0 432.0 347.0 smooth off endline line wall 729.0 603.0 713.0 574.0 676.0 492.0 667.0 478.0 658.0 464.0 673.0 431.0 637.0 421.0 601.0 411.0 513.0 377.0 491.0 367.0 469.0 357.0 470.0 345.0 459.0 371.0 448.0 397.0 425.0 437.0 420.0 451.0 415.0 465.0 394.0 504.0 394.0 504.0 smooth off endline area water l22-793-660 endarea line border -id l22-793-660 -close on 711.0 588.0 737.0 568.0 759.95 527.0 771.0 527.0 785.0 527.0 820.0 638.0 820.0 638.0 smooth off 760.0 683.0 760.0 683.0 685.0 608.0 711.0 588.0 endline line wall:presumed 729.0 603.0 760.0 660.0 endline line wall:presumed 768.0 557.0 783.0 598.0 807.0 636.0 807.0 636.0 smooth off endline line wall 378.0 85.0 383.0 142.0 388.0 225.0 402.0 247.0 416.0 269.0 433.0 305.0 448.0 310.0 463.0 315.0 466.0 329.0 523.0 352.0 580.0 375.0 614.0 388.0 648.0 399.0 682.0 410.0 693.0 413.0 709.0 428.0 725.0 443.0 751.0 521.0 768.0 557.0 smooth off endline endscrap therion-5.4.1/samples/q-marks/thconfig.1000066400000000000000000000010321307545355600201040ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!TITLE 60 Question marks handling #!FILE 1 #! #! Possible continuations are treated special way in therion #! in both centerline and map files. You may associate text #! description, explored length (behind this continuation) #! or any other atribute to it (like Code if you have your #! own coding standard for continuations). input thconfig.1.layout source centerline.th export map -o map1.pdf -layout normal export map -o map2.pdf -layout show-cont export map -o map.xvi #!CLEAN map1.pdf map2.pdf map.xvi therion-5.4.1/samples/q-marks/thconfig.1.layout000066400000000000000000000023161307545355600214260ustar00rootroot00000000000000encoding utf-8 #!FILE 3 layout common scale 1 500 map-header 0 0 off #! When you export map and use #!CODE symbol-show point flag:continuation #!ENDCODE #! in your layout, station with continuation flag specified #! is marked by question mark (continuation #! symbol is shown above the station). #!IMAGE map1.pdf endlayout layout normal copy common endlayout layout show-cont copy common #! You may redefine continuation symbol to show also #! continuation description (stored in _text #! attribute) using following layout code #!CODE code metapost def p_continuation(expr pos,theta,sc,al) = % draw default continuation symbol p_continuation_UIS(pos,theta,sc,al); % if text attribute is set if known(ATTR__text) and picture(ATTR__text): % set labeling color to light orange push_label_fill_color(1.0, 0.9, 0.8); % draw filled label with text next to ? p_label.urt(ATTR__text,(.5u,-.25u) transformed T,0.0,8); % restore original labeling color pop_label_fill_color; fi; enddef; endcode #!ENDCODE #! Then also continuation description is displayed in the map. #!IMAGE map2.pdf endlayout therion-5.4.1/samples/q-marks/thconfig.2000066400000000000000000000014261307545355600201140ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 5 #! #! In the map, also the question marks only are displayed by default. #! #!IMAGE map3.pdf #! #! When you redefine continuation symbol as mentioned above, #! you can show also continuation codes and descriptions. #! #!IMAGE map4.pdf input thconfig.1.layout source survey sample -title "Sample cave" input centerline.th input map.th2 endsurvey endsource export map -o map3.pdf -layout normal export map -o map4.pdf -layout show-cont #!SUBTITLE Exporting question mark lists #! You may also export a list of all continuations from your project #! project using #!CODE export continuation-list -o questions.html #!ENDCODE #! File questions.html then contains following list: #!HTML questions.html #!CLEAN map3.pdf map4.pdf questions.html therion-5.4.1/samples/samples.tcl000077500000000000000000000376331307545355600170410ustar00rootroot00000000000000#! /usr/bin/tclsh # Test all therion features and generate features HTML pages. # # Usage: samples.tcl # samples.tcl clean set outdd ".." if {[llength $argv] > 0} { set outdd [lindex $argv 0] } set outd "$outdd/samples.doc" set flog [open samples.log w] proc log_msg {msg} { global flog puts -nonewline $msg puts -nonewline $flog $msg } set dirnum 0 set dirlist {} set filelist {} proc scan_files {dir} { global filelist dirnum farray cleanlist dirlist set subdirs {} catch { set subdirs [glob -directory $dir -types d *] } foreach sd $subdirs { scan_files $sd } lappend dirlist $dir incr dirnum log_msg "Scanning directory: $dir\n" set flist {} catch { set flist [glob -directory $dir *.th *.th2 *.tc thconfig*] } foreach fn $flist { set fn [file tail $fn] lappend filelist [list $fn $dir [llength $filelist] $dirnum] log_msg " $fn\n" } } set thcmd [file normalize [file join [pwd] "$outdd/therion"]] set processlist {} proc scan_lists {} { global dirnum farray dirlist global filelist farray cleanlist processlist thcmd foreach fr $filelist { set fnum [lindex $fr 2] set farray($fnum,FILE) 0 set farray($fnum,CLEAN) {} set farray($fnum,PROCESS) {} set fid [open [file join [lindex $fr 1] [lindex $fr 0]] r] while {![eof $fid]} { gets $fid ln if {[regexp -nocase {^\s*\#\!(FILE|PROCESS|CLEAN)(.*)} $ln dum cmnd rest]} { regsub {^\s+} $rest {} rest regsub {\s+$} $rest {} rest switch [string toupper $cmnd] { FILE { if {[string length $rest] > 0} { set farray($fnum,FILE) $rest } } PROCESS { lappend farray($fnum,PROCESS) $rest } CLEAN { if {[llength $rest] > 0} { foreach fn $rest { lappend farray($fnum,CLEAN) $fn } } } } } } close $fid } foreach dn $dirlist { set clist {} catch { set clist [glob -directory $dn *.log *~ .xth_* .xtherion.dat] } foreach cf $clist { lappend cleanlist $cf } } set sortl {} set fxmax {} set fxmin {} foreach fr $filelist { set fnum [lindex $fr 2] set fdir [lindex $fr 1] set dnum [lindex $fr 3] set ftxt $farray($fnum,FILE) while {[regexp {^\s*\.\.\/} $ftxt]} { set fdir [file dirname $fdir] set dnum [expr [lsearch $dirlist $fdir] + 1] regsub {^\s*\.\.\/} $ftxt {} ftxt } set fxval [expr double($ftxt)] if {[llength $fxmax] == 0} { set fxmax $fxval set fxmin $fxmax } else { if {$fxmax < $fxval} {set fxmax $fxval} if {$fxmin > $fxval} {set fxmin $fxval} } lappend sortl [list $fnum $dnum $fxval] } set ddist [expr $fxmax - $fxmin + 1.0] foreach litem $sortl { set fnum [lindex $litem 0] set dnum [lindex $litem 1] set fxval [lindex $litem 2] set fsort([expr double($dnum) * $ddist + $fxval]) [list $fnum $dnum] } set newfilelist {} set xlist [lsort -real [array names fsort]] foreach x $xlist { set newitem [lindex $filelist [lindex $fsort($x) 0]] lset newitem 3 [lindex $fsort($x) 1] lappend newfilelist $newitem } set filelist $newfilelist foreach fr $filelist { set fnum [lindex $fr 2] foreach item $farray($fnum,CLEAN) { lappend cleanlist [file join [lindex $fr 1] $item] } foreach item $farray($fnum,PROCESS) { set nitem $item if {[string length $nitem] == 0} { set nitem "$thcmd [lindex $fr 0]" } lappend processlist [list $nitem [lindex $fr 1]] } } } proc clean_files {} { global cleanlist log_msg "\nDeleting files:\n" foreach fn $cleanlist { log_msg "$fn " if {[catch { file delete -force -- $fn }]} { log_msg "\[ERROR\]\n" } else { log_msg "\[OK\]\n" } } } proc process_files {} { global processlist set cdir [pwd] log_msg "\nProcessing files:\n" foreach ps $processlist { set p [lindex $ps 0] set d [lindex $ps 1] cd $d log_msg "$d: $p\n" catch { eval "exec $p >&@ stdout" # eval exec "cmd /c $p" } log_msg "\n\n" cd $cdir } } proc get_html_body {fn} { set fid [open $fn "r"] set ftext [read $fid] close $fid regexp -nocase {\<\s*body[^\>]*\>\s*(.*)\<\/\s*body[^\>]*\>} $ftext dum ftext regsub -nocase -all {\<\s*table} $ftext {]*\>\s*(.*)\<\/\s*body[^\>]*\>} $ftext dum ftext regsub -nocase -all {\<\s*table[^\>]*>} $ftext "\\bigskip\\begingroup\\input etc/TXSruled.tex \\LeftJustifyTables\\ruledtable" ftext regsub -nocase -all {[\n\s]*[\n\s]*
} $ftext "\\endruledtable\\endgroup\\bigskip" ftext regsub -nocase -all {\]*>} $ftext {} ftext regsub -nocase {[\n\s]*} $ftext "\}\\cr" ftext regsub -nocase -all {[\n\s]*\} $ftext "\\nr" ftext regsub -nocase -all {\]*>} $ftext "" ftext regsub -nocase -all {\} $ftext {\&} ftext regsub -nocase -all {\]*>} $ftext "\{\\bf " ftext regsub -nocase -all {\} $ftext "\}\\&" ftext regsub -all {\_} $ftext {\\_} ftext regsub -all {\ } $ftext { } ftext regsub {\s*$} $ftext {} ftext return $ftext } proc create_docs {} { global filelist tcl_platform outd outdd set cdir {} set chid 0 set imid 0 set chapters {} set imagelist {} array set data {} array set texdata {} # scan chapters and subchapters log_msg "\nScanning texts:\n" set inparagraph 0 set incode 0 foreach fr $filelist { set fnum [lindex $fr 2] if {[lindex $fr 3] != $cdir} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } incr chid lappend chapters [list $chid 0] set data($chid,TITLE) [file tail [lindex $fr 1]] set texdata($chid,TITLE) [file tail [lindex $fr 1]] set data($chid,TEXT) {} set texdata($chid,TEXT) {} set csub 0 set data($chid,SUBS) {} set texdata($chid,SUBS) {} set cdir [lindex $fr 3] } log_msg "[file join [lindex $fr 1] [lindex $fr 0]]\n" set fid [open [file join [lindex $fr 1] [lindex $fr 0]] r] while {![eof $fid]} { gets $fid ln if {[regexp {^\s*encoding\s+(\S+)} $ln dum enc]} { switch $enc { default {set fenc $enc} } fconfigure $fid -encoding $fenc } if {[regexp -nocase {^\s*\#\!title\s+(\S+)\s+(\S.*)} $ln dum cn ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } incr chid lappend chapters [list $chid $cn] set data($chid,TITLE) $ct set texdata($chid,TITLE) $ct set data($chid,TEXT) {} set texdata($chid,TEXT) {} set csub 0 set data($chid,SUBS) {} set texdata($chid,SUBS) {} } elseif {[regexp -nocase {^\s*\#\!subtitle\s+(\S.*)$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } lappend data($chid,SUBS) $ct lappend texdata($chid,SUBS) $ct append data($chid,TEXT) "

$ct

\n" append texdata($chid,TEXT) "\\subsubchapter {$ct}.\n" incr csub } elseif {[regexp {^\s*\#\!\s*$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } } elseif {[regexp -nocase {^\s*\#\!image\s+(\S.*)$} $ln dum ii]} { set iisrc [file join [lindex $fr 1] $ii] set iifnm [format "%06d-%s" $imid [file tail $iisrc]] set iiimg [format "%06d.png" $imid [file tail $iisrc]] lappend imagelist [list $imid $iisrc $iifnm $iiimg] if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) "

\n\n

\n" append texdata($chid,TEXT) "\n\n\\fitpic{$outdd/samples.doc/$iifnm}\n\n" incr imid } elseif {[regexp -nocase {^\s*\#\!HTML\s+(\S.*)$} $ln dum ii]} { set html_src [file join [lindex $fr 1] $ii] if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) [get_html_body $html_src] append texdata($chid,TEXT) [get_html_body_for_tex $html_src] } elseif {[regexp -nocase {^\s*\#\!code\s*$} $ln dum ct]} { if {$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 0 } append data($chid,TEXT) "
\n"
	append texdata($chid,TEXT) "|"
	set incode 1
      } elseif {[regexp -nocase {^\s*\#\!endcode\s*$} $ln dum ct]} {
	append data($chid,TEXT) "
\n" append texdata($chid,TEXT) "|\n" set incode 0 } elseif {[regexp -nocase {^\s*\#\!(process|clean|file)} $ln dum cmd]} { } elseif {$incode} { append data($chid,TEXT) "$ln\n" append texdata($chid,TEXT) "$ln\n" } elseif {[regexp {^\s*\#\!(.*\S.*)$} $ln dum ct]} { if {!$inparagraph} { append data($chid,TEXT) "

\n" append texdata($chid,TEXT) "\n\n" set inparagraph 1 } append data($chid,TEXT) "$ct\n" regsub -nocase -all {\} $ct {|} ct regsub -nocase -all {\} $ct "\{\\it " ct regsub -nocase -all {\} $ct "\}" ct regsub -nocase -all {MetaPost} $ct "\\MP{}" ct append texdata($chid,TEXT) "$ct\n" } } close $fid } if {[string compare $tcl_platform(platform) windows] == 0} { package require registry set convpath [file normalize "[registry get HKEY_CURRENT_USER\\SOFTWARE\\Therion InstallDir]/bin/convert.exe"] } else { set convpath convert } # create output directory file mkdir $outd log_msg "\nConverting images:\n" foreach img $imagelist { set iiimg [lindex $img 3] set iifnm [lindex $img 2] set iisrc [lindex $img 1] log_msg "$iisrc\n" set dpi 300 while {[catch { eval "exec \"$convpath\" -density $dpi $iisrc $outd/tmp.png" }] && ($dpi > 10)} { log_msg "error at $dpi dpi processing $iisrc\n" set dpi [expr int(double($dpi) * 0.9)] } eval "exec \"$convpath\" -resize 419x419 $outd/tmp.png $outd/$iiimg" file delete -force $outd/tmp.png file copy -force -- $iisrc "$outd/$iifnm" } set fid [open "$outd/index.css" w] puts $fid { body,td,.headerlinks {font-family: Verdana, Helvetica, Arial, sans-serif; line-height: 1.5;} body { background-color:white;} .headerlinks {font-weight: 500;} p,h1,h2,h3 {margin-left: 16px; margin-right: 16px;} h1 {font-size: 150%} h2 {font-size: 125%} .footer {margin-left: 16px;} a {text-decoration: none} a:active {color: blue; text-decoration: none;} a:visited {color: blue; text-decoration: none;} a:hover {color: red; text-decoration: none; } ol { list-style-type: lower-greek } ul { list-style-type: circle } code { font-family: Courier; font-weight: bold; line-height: 1.5; } pre.code { padding:0.5em; border:1px solid #000; font-weight:bold; color:#000; background-color:#f7f9fa; overflow:auto; line-height:140%; margin-left: 16px; margin-right: 16px; } font.nav {font-size: 75%;} table.htmlinput { font-size:80%; margin-left: 16px; margin-right: 16px; border-spacing: 0px; } th.htmlinput { border-bottom:2px solid #a7a9aa; padding-left:8px; padding-right:8px; padding-top:0px; padding-bottom:1px } td.htmlinput { border-bottom:1px solid #a7a9aa; padding-left:8px; padding-right:8px; padding-top:0px; padding-bottom:0px } } # END OF CSS close $fid # export html pages set fidx [open "$outd/index.html" w] fconfigure $fidx -encoding utf-8 set texfidx [open "$outd/index.tex" w] foreach ch $chapters { set csort([expr double([lindex $ch 1])]) $ch } set xlist [lsort -real [array names csort]] set chapters {} foreach xch $xlist { set ch $csort($xch) if {[string length $data([lindex $ch 0],TEXT)] > 0} { lappend chapters $ch } } set nchapters [llength $chapters] puts $fidx "\n\nTherion features.\n\n\n" puts $fidx "

\n\n\n\n\n
\n" puts $fidx "\n" puts $fidx "" puts $fidx "\n
|Start|
" puts $fidx "
" puts $fidx "

Therion features:

\n

\n

    " set chx 0 foreach ch $chapters { set chid [lindex $ch 0] set chfn "[lindex $ch 1].html" puts $fidx "
  • $data($chid,TITLE)
  • " puts $texfidx "\\subchapter {$texdata($chid,TITLE)}." puts $texfidx $texdata($chid,TEXT) set fout [open "$outd/$chfn" w] fconfigure $fout -encoding utf-8 puts $fout "\n\n$data($chid,TITLE)\n\n\n" puts $fout "
    \n\n\n\n\n
    \n" puts $fout "\n" puts $fout "" puts $fout "" puts $fout "" puts $fout "\n
    " if {$chx > 0} { puts $fout "|Previous|" } puts $fout "|Contents|" if {($chx + 1) < $nchapters} { puts $fout "|Next|" } puts $fout "
    " puts $fout "
    " puts $fout "

    $data($chid,TITLE)

    " puts -nonewline $fout $data($chid,TEXT) puts $fout "

    \n"; puts $fout "
    " puts $fout "\n" puts $fout "" puts $fout "" puts $fout "" puts $fout "\n
    " if {$chx > 0} { puts $fout "|Previous|" } puts $fout "|Contents|" if {($chx + 1) < $nchapters} { puts $fout "|Next|" } puts $fout "
    " puts $fout "
    \n
    \n" close $fout incr chx } puts $fidx "
\n

" puts $fidx "
" puts $fidx "\n" puts $fidx "" puts $fidx "\n
|Start|
" puts $fidx "
\n
\n" puts $fidx "" } if {([llength $argv] > 1) && [regexp -nocase {^clean$} [lindex $argv 1]]} { scan_files "" scan_lists clean_files } else { if {[llength $argv] == 1} { scan_files "" } else { foreach d [lrange $argv 1 end] { scan_files $d } } scan_lists process_files create_docs } close $flog exit therion-5.4.1/samples/survex/000077500000000000000000000000001307545355600162065ustar00rootroot00000000000000therion-5.4.1/samples/survex/cave.svx000066400000000000000000000002471307545355600176710ustar00rootroot00000000000000*begin cave *include use/use.svx *include create/create.svx *include ignore/ignore.svx *fix use.0 27 17 50 *fix create.0 20 10 25 *fix ignore.0 10 10 0 *end cave therion-5.4.1/samples/survex/cave1.th000066400000000000000000000006431307545355600175450ustar00rootroot00000000000000encoding utf-8 #!FILE 5 #!SUBTITLE Managing large projects #! Assume a situation when you want to join these three small maps #! within single large project. Assume that coordinates of cave #! entrances are specified in the top-level cave.3d file. If your #! joining code will be #!CODE import cave.3d -surveys use survey cave input use/use.th input create/create.th input ignore/ignore.th endsurvey #!ENDCODE therion-5.4.1/samples/survex/cave2.th000066400000000000000000000003041307545355600175400ustar00rootroot00000000000000encoding utf-8 #!FILE 7 #!CODE import cave.3d -surveys use import cave.3d -surveys create survey cave input use/use.th input create/create.th input ignore/ignore.th endsurvey #!ENDCODE therion-5.4.1/samples/survex/create/000077500000000000000000000000001307545355600174515ustar00rootroot00000000000000therion-5.4.1/samples/survex/create/create.svx000066400000000000000000000002751307545355600214620ustar00rootroot00000000000000*begin create *export 0 *data normal from to bearing clino length 0 1 343 7 4.1 1 2 317 3 10.6 2 3 325 -2 8.1 *begin sub *export 0 0 1 235 0 8.6 *end sub *equate 3 sub.0 *end create therion-5.4.1/samples/survex/create/create.th000066400000000000000000000007061307545355600212540ustar00rootroot00000000000000encoding utf-8 #!FILE ../2.9 #!SUBTITLE Creating non-existing surveys #! If you import your .3d file using #!CODE import create.3d -surveys create #!ENDCODE #! all survex prefixes are taken into account and if surveys with #! corresponding names do not exist, they are created. In this case, #! if you do #!CODE input create.th2 #!ENDCODE #! right after import command, you refer to stations in .th2 #! file with names shown on the map. therion-5.4.1/samples/survex/create/create.th2000066400000000000000000000015531307545355600213370ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -124.498 -126.88 623.627 623.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {456.253 1 1.0} {60.18 0@create.} create.xvi 0 {} scrap create.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 437.0 56.0 426.0 98.0 396.0 123.0 370.0 158.0 344.0 193.0 265.0 239.0 240.0 281.0 215.0 323.0 218.0 344.0 164.0 333.0 110.0 322.0 78.0 227.0 55.0 319.0 32.0 411.0 215.0 393.0 150.0 481.0 smooth off endline point 60.842 321.52 station -name 1@sub.create point 199.612 418.56 station -name 0@sub.create point 290.952 288.05 station -name 2@create point 433.082 135.69 station -name 1@create point 456.502 59.12 station -name 0@create line wall 470.0 62.0 460.71 184.57 359.0 236.0 309.0 289.0 259.0 342.0 175.0 473.0 165.0 490.0 smooth off endline endscrap therion-5.4.1/samples/survex/create/create.xvi000066400000000000000000000011161307545355600214430ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { { 197.83 -179.72 0@create.} { 174.41 -103.15 1@create.} { 32.28 49.21 2@create.} { -59.06 179.72 3@create.} { -197.83 82.68 1@sub.create.} { -59.06 179.72 0@sub.create.} } set XVIshots { { 197.83 -179.72 174.41 -103.15} { 174.41 -103.15 32.28 49.21} { 32.28 49.21 -59.06 179.72} { -59.06 179.72 -197.83 82.68} } set XVIgrid {-254.921 -238.78 19.685 0.0 0.0 19.685 26 24} therion-5.4.1/samples/survex/create/thconfig000066400000000000000000000003351307545355600211760ustar00rootroot00000000000000encoding utf-8 #!FILE ../3 #!IMAGE create.pdf #!PROCESS cavern create.svx #!PROCESS #!CLEAN create.err create.pdf source create.th input ../thconfig.layout #export map -o create.xvi export map -o create.pdf -layout cl therion-5.4.1/samples/survex/ignore/000077500000000000000000000000001307545355600174715ustar00rootroot00000000000000therion-5.4.1/samples/survex/ignore/ignore.svx000066400000000000000000000002751307545355600215220ustar00rootroot00000000000000*begin ignore *export 0 *data normal from to bearing clino length 0 1 17 -1 9.1 1 2 24 -20 4.6 2 3 43 5 10.3 *begin sub *export 0 0 1 134 0 9.6 *end sub *equate 2 sub.0 *end ignore therion-5.4.1/samples/survex/ignore/ignore.th000066400000000000000000000004601307545355600213110ustar00rootroot00000000000000encoding utf-8 #!FILE ../3.9 #!SUBTITLE Ignoring station prefixes #! Last possibility is to import your .3d file using #!CODE import ignore.3d -surveys ignore #!ENDCODE input ignore.th2 #! Also in this case, station references in corresponding .th2 file #! are same as station names on the next map. therion-5.4.1/samples/survex/ignore/ignore.th2000066400000000000000000000015451307545355600214000ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 442.96 620.125 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {59.057 1 1.0} {59.052 ignore.0} ignore.xvi 0 {} scrap ignore.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 45.0 68.0 87.0 235.0 92.0 326.0 274.0 469.0 endline line wall 299.0 191.0 269.0 224.0 194.0 261.0 215.0 283.0 236.0 305.0 296.0 330.0 274.0 351.0 252.0 372.0 210.0 363.0 290.0 444.0 endline line wall 74.0 53.0 95.0 124.0 114.0 213.0 147.0 272.0 smooth off 147.0 272.0 211.0 215.0 271.0 155.0 smooth off endline point 281.887 176.772 station -name ignore.sub.1 point 283.857 455.712 station -name ignore.3 point 146.067 308.072 station -name ignore.sub.0 point 111.417 230.312 station -name ignore.1 point 59.057 59.052 station -name ignore.0 endscrap therion-5.4.1/samples/survex/ignore/ignore.xvi000066400000000000000000000011111307545355600214760ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { { -112.40 -198.33 ignore.0} { -60.04 -27.07 ignore.1} { -25.39 50.69 ignore.2} { 112.40 198.33 ignore.3} { 110.43 -80.61 ignore.sub.1} { -25.39 50.69 ignore.sub.0} } set XVIshots { { -112.40 -198.33 -60.04 -27.07} { -60.04 -27.07 -25.39 50.69} { -25.39 50.69 112.40 198.33} { -25.39 50.69 110.43 -80.61} } set XVIgrid {-171.457 -257.382 19.685 0.0 0.0 19.685 17 26} therion-5.4.1/samples/survex/ignore/thconfig000066400000000000000000000005111307545355600212120ustar00rootroot00000000000000encoding utf-8 #!FILE ../4 #!IMAGE ignore.pdf #! Note that no surveys are created in this case. Station names #! are taken from .3d files without change. #!PROCESS cavern ignore.svx #!PROCESS #!CLEAN ignore.err ignore.pdf source ignore.th input ../thconfig.layout #export map -o ignore.xvi export map -o ignore.pdf -layout cl therion-5.4.1/samples/survex/thconfig.1000066400000000000000000000014071307545355600200730ustar00rootroot00000000000000encoding utf-8 #!FILE 6 #!PROCESS cavern cave.svx #!PROCESS source cave1.th input thconfig.layout export map -o cave1.pdf -layout cl -layout-color map-fg altitude #! not all stations are replaced correctly. The "created" series #! is placed wrong on the map. #!IMAGE cave1.pdf #!CLEAN cave1.pdf cave.err #! This is because in top level import command, survey create is #! imported from file create/create.3d with wrong coordinates, #! and we import top-level .3d file with -surveys use switch. #! This means, cave.create.1 will be imported here as create.1@cave and not #! 1@create.cave. #! #! To solve this problem, we need to re-import stations #! from top-level cave.3d file once more with -surveys create #! switch. therion-5.4.1/samples/survex/thconfig.2000066400000000000000000000011351307545355600200720ustar00rootroot00000000000000encoding utf-8 #!FILE 8 #!PROCESS source cave2.th input thconfig.layout export map -o cave2.pdf -layout cl -layout-color map-fg altitude #! After this additional import final looks as expected. #!IMAGE cave2.pdf #!CLEAN cave2.pdf #!SUBTITLE Conclusion #!Even if there are several possibilities how to map survex prefix structure #!to therion survey structure, the most clean solution is to create #!survey structure to desired depth in .th files using empty #!survey/endsurvey pairs and allways use #!-surveys use switch when importing .3d files. therion-5.4.1/samples/survex/thconfig.layout000066400000000000000000000012451307545355600212500ustar00rootroot00000000000000encoding utf-8 #!TITLE 40 Importing survex .3d files #!FILE 1 #! #! Therion surveys nearly correspond to station prefixes defined by #! *begin/*end pairs in survex source files. Usually there #! does not exist one-to-one mapping between them. So if you want #! to keep your centerline in survex files you need to solve the #! problem how to match survex and therion data structures. This #! sample shows three different ways, how to deal with station prefixes #! when importing survex .3d files to therion. layout cl symbol-set SKBB map-header 0 0 off color map-fg [100 100 80] debug station-names survey-level all scale 1 250 endlayout therion-5.4.1/samples/survex/use/000077500000000000000000000000001307545355600170025ustar00rootroot00000000000000therion-5.4.1/samples/survex/use/thconfig000066400000000000000000000005121307545355600205240ustar00rootroot00000000000000encoding utf-8 #!FILE ../2 #! Map with station names in this case looks like this: #!IMAGE use.pdf #! Station names are before '@' symbol, survey names follow this symbol. #!PROCESS cavern use.svx #!PROCESS #!CLEAN use.err use.pdf source use.th input ../thconfig.layout #export map -o use.xvi export map -o use.pdf -layout cl therion-5.4.1/samples/survex/use/use-in.th2000066400000000000000000000014121307545355600206170ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 659.495 414.0 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {492.124 1 1.0} {196.85 0} use.xvi 0 {} #!FILE ../1.92 scrap use-in.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 420.0 26.0 401.0 79.0 342.0 218.0 342.0 218.0 smooth off 342.0 218.0 422.0 222.0 490.0 183.0 smooth off endline line wall 255.0 190.0 278.0 198.0 317.0 214.0 317.0 214.0 smooth off 317.0 214.0 362.0 106.0 390.0 16.0 smooth off endline line wall 496.0 209.0 421.0 236.0 504.0 349.0 238.0 229.0 smooth off endline point 391.934 52.56 station -name sub.1 #!CODE point 321.454 236.22 station -name 1 #!ENDCODE point 492.124 196.85 station -name 0 endscrap therion-5.4.1/samples/survex/use/use-out.th2000066400000000000000000000011011307545355600210130ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -128.0 -128.0 659.495 403.59 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {492.124 1 1.0} {196.85 0} use.xvi 0 {} #!FILE ../1.91 scrap use-out.s -scale [-128.0 -128.0 620.125 -128.0 0.0 0.0 19.002375 0.0 m] line wall 227.0 220.0 138.0 189.0 175.0 188.0 44.0 189.0 endline line wall 50.0 156.0 99.0 160.0 142.0 139.0 242.0 189.0 endline #!CODE point 165.744 176.58 station -name 2@use #!ENDCODE #! but in the use-in.th file using point 58.664 169.09 station -name 3@use endscrap therion-5.4.1/samples/survex/use/use.svx000066400000000000000000000002741307545355600203430ustar00rootroot00000000000000*begin use *export 0 *data normal from to bearing clino length 0 1 283 12 9.1 1 2 249 -10 8.6 2 3 266 30 6.3 *begin sub *export 0 0 1 159 0 10.0 *end sub *equate 1 sub.0 *end use therion-5.4.1/samples/survex/use/use.th000066400000000000000000000012541307545355600201350ustar00rootroot00000000000000encoding utf-8 #!FILE ../1.9 #!SUBTITLE Using surveys specified in .th files #! If you will import .3d file with -surveys use switch, #! then therion tries to find the match between survex prefix #! and therion survey name. If this match is found, stations #! are inserted into survey found. Otherwise prefix is left with #! station names. Example code: #!CODE import use.3d -surveys use input use-out.th2 survey use input use-in.th2 endsurvey #!ENDCODE #! In this case you should take care where you input your .th2 files #! containing scraps. In use-out.th2 file you should refer to station names #! using: join use-in.s@use use-out.s therion-5.4.1/samples/survex/use/use.xvi000066400000000000000000000010361307545355600203260ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { { 216.73 52.46 0} { 46.06 91.83 1} { -109.65 32.19 2} { -216.73 24.70 3} { 116.54 -91.83 sub.1} { 46.06 91.83 sub.0} } set XVIshots { { 216.73 52.46 46.06 91.83} { 46.06 91.83 -109.65 32.19} { -109.65 32.19 -216.73 24.70} { 46.06 91.83 116.54 -91.83} } set XVIgrid {-275.394 -144.39 19.685 0.0 0.0 19.685 28 15} therion-5.4.1/samples/sym-colors/000077500000000000000000000000001307545355600167615ustar00rootroot00000000000000therion-5.4.1/samples/sym-colors/thconfig000066400000000000000000000005231307545355600205050ustar00rootroot00000000000000source ../basics/rabbit.th source map x -title "Test XHovadina X" pdp@rabbit endmap endsource select x layout colors map-header 105 50 w language sk legend on symbol-color group centerline [100 0 0] symbol-color group water [0 20 100] endlayout export map -o cave.pdf -layout colors #!CLEAN cave.pdf therion-5.4.1/samples/u-symbols/000077500000000000000000000000001307545355600166045ustar00rootroot00000000000000therion-5.4.1/samples/u-symbols/map.th2000066400000000000000000000023431307545355600200020ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust 146.0 241.0 749.0 656.0 ##XTHERION## xth_me_area_zoom_to 100 #!FILE 1 #!TITLE 80 Using user defined symbol types #! If therion does not offer any appropriate symbol for the feature #! you want to draw to the map, you can use user defined symbol type #! (type u, valid for point, line and area objects). #! #! The syntax is very simple. Assume you want to create "bat" point, line #! and area. You just use u:bat as a type (bat is in fact subtype) #! of u type. So your code will be like this: scrap x -scale [250.0 421.0 710.0 421.0 0.0 0.0 20 0.0 m] line border -id l7-455-492 -close on 292.0 485.0 287.0 466.0 334.96 364.11 371.0 375.0 407.33 385.98 419.87 488.52 333.0 503.0 303.0 508.0 297.0 504.0 292.0 485.0 endline #!CODE point 555.0 480.0 u:bat #!ENDCODE #! or #!CODE line u:bat #!ENDCODE 524.0 458.0 480.0 447.0 483.0 501.0 407.0 472.0 endline #! or #!CODE area u:bat #!ENDCODE l7-455-492 endarea line wall 279.0 449.0 306.0 465.0 353.0 505.0 426.0 509.0 499.0 513.0 529.0 502.0 564.0 523.0 endline line wall 307.0 375.0 357.0 396.0 409.0 469.0 472.0 436.0 535.0 403.0 585.0 433.0 616.0 462.0 endline endscrap map xx x endmap therion-5.4.1/samples/u-symbols/thconfig.1000066400000000000000000000004361307545355600204720ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 2 source map.th2 export map -o map1.pdf -layout-map-header 0 0 off #! When you export map without defining the symbols in MetaPost, user defined symbols are highlighted #! in red without any graphical representation. #!IMAGE map1.pdf #!CLEAN map1.pdf therion-5.4.1/samples/u-symbols/thconfig.2000066400000000000000000000122631307545355600204740ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 3 source map.th2 #! To display them correctly you need to define symbols for them in #! MetaPost languge the same way as ordinary symbols are usually redefined. #! #! Firstly point symbol. In the layout m #!CODE code metapost #!ENDCODE path bat_path_x; bat_path_x := (160.43589,619.76148) .. controls (200.83034,598.56215) and (225.01974,599.82632) .. (242.33709,601.15842) .. controls (250.91988,585.02142) and (280.12279,545.7622) .. (328.92385,566.52372) .. controls (343.18917,529.89929) and (387.77695,513.04018) .. (453.54702,518.36185) .. controls (456.6654,525.97557) and (466.09064,533.43257) .. (471.27843,523.05007) .. controls (463.85291,520.67657) and (466.71891,517.42483) .. (471.63814,522.23522) .. controls (472.87859,519.83044) and (472.11254,517.25674) .. (467.00984,516.24193) .. controls (498.08181,494.38071) and (518.37927,488.7935) .. (554.08261,484.34703) .. controls (536.23968,468.87122) and (526.7451,451.32142) .. (536.0878,433.78585) .. controls (539.04313,428.23891) and (549.65293,437.81051) .. (550.08905,431.99134) .. controls (543.35122,428.68782) and (547.16851,429.31755) .. (550.93619,430.90592) .. controls (555.01514,419.20795) and (542.29889,420.82043) .. (539.21019,422.32967) .. controls (526.80565,412.03922) and (538.14174,362.22955) .. (562.04206,325.41289) .. controls (560.70416,305.4475) and (552.94665,275.48765) .. (596.42383,240.15823) .. controls (586.13796,214.86512) and (584.21841,176.344) .. (618.88684,158.99293) .. controls (600.38363,161.42082) and (571.90452,163.00167) .. (555.87287,173.29962) .. controls (533.80922,180.31406) and (511.7587,189.77279) .. (494.76462,217.75852) .. controls (469.02274,260.15007) and (465.60841,280.08537) .. (466.27659,287.73284) .. controls (467.27295,299.13663) and (456.20597,295.4343) .. (455.42733,284.84646) .. controls (447.034,297.47822) and (465.71846,292.96944) .. (457.40227,311.17742) .. controls (451.51715,333.88534) and (454.55183,344.68208) .. (455.22274,365.27634) .. controls (445.59186,380.66207) and (438.52169,394.98144) .. (432.56329,406.97544) .. controls (421.27321,411.75599) and (411.86904,413.85884) .. (403.92838,423.33244) .. controls (391.19793,418.79449) and (380.875,414.46152) .. (373.6673,409.41976) .. controls (365.11095,413.84661) and (372.76761,437.1554) .. (372.88328,437.30963) -- (360.72573,447.88215) .. controls (360.72573,447.88215) and (348.36583,439.38367) .. (342.32921,440.26049) .. controls (340.52016,451.25937) and (343.58923,463.9528) .. (354.67087,475.2679) .. controls (341.63825,482.57642) and (339.10347,494.24676) .. (313.80723,490.57484) .. controls (304.61922,489.24114) and (282.31298,490.61764) .. (258.32359,496.84657) .. controls (246.18809,499.99759) and (248.48311,482.8706) .. (236.36849,493.22467) .. controls (239.32461,491.85429) and (242.55704,492.01948) .. (245.59044,495.64662) .. controls (248.83726,499.52895) and (249.4495,502.08244) .. (244.59097,503.87878) .. controls (221.93401,514.80409) and (190.83965,541.85436) .. (178.69512,574.11392) .. controls (176.80431,577.00681) and (162.4873,600.33708) .. cycle; path bat_path_bb; bat_path_bb = bbox bat_path_x; path bat_path; bat_path = bat_path_x shifted (-(llcorner bat_path_bb) - (urcorner bat_path_bb - llcorner bat_path_bb) / 2.0) scaled (1u / ((xpart urcorner bat_path_bb) - (xpart llcorner bat_path_bb))) rotated 210; #! section of your layout define point u:bat symbol like this #!CODE def p_u_bat(expr pos, theta, sc, al) = T := identity shifted pos; thfill (bat_path scaled 2.0) withcolor black; enddef; #!ENDCODE #! similarly the line u:bat symbol #!CODE def l_u_bat(expr P) = T:=identity; cas := 0; dlzka := arclength P; mojkrok:=adjust_step(dlzka, 1.0u); pickup PenD; forever: t := arctime cas of P; thfill bat_path scaled 0.5 shifted (point t of P) withcolor black; cas := cas + mojkrok; exitif cas > dlzka + (mojkrok / 3); % for rounding errors endfor; enddef; #!ENDCODE #! and finally the area u:bat symbol (pattern in this case) #!CODE % bat pattern beginpattern(pattern_bat); fill bat_path withcolor black; endpattern; % bat area symbol def a_u_bat (expr Path) = T:=identity; thclean Path; thfill Path withpattern pattern_bat; enddef; #!ENDCODE #! These symbols will be included also in the legend. To #! change the way how they are drawn there just define appropriate #! macro. Its name should be symbol macro name with _legend #! suffix. #!CODE def l_u_bat_legend = l_u_bat(((.2,.2) -- (.8,.8)) inscale) enddef; #!ENDCODE code tex-map \legendcontent={% \hsize=\legendwidth \color[0 0 0]\the\legendtextcolor \formattedlegend \color[0 0 0] } legend-width 8 cm endcode endlayout #! Finally, add description of your new symbols that will be shown #! in the legend using text command anywhere #! in the configuration file. #!CODE text en "point u:bat" "bat" text en "line u:bat" "bat path" text en "area u:bat" "lot of bats" #!ENDCODE #! After all these definitions you receive bat point, line and area symbols #! with proper graphical representation and legend boxes. export map -o map2.pdf -layout m -layout-map-header 0 0 nw -layout-legend on #!IMAGE map2.pdf #!CLEAN map2.pdf therion-5.4.1/samples/xelevation/000077500000000000000000000000001307545355600170305ustar00rootroot00000000000000therion-5.4.1/samples/xelevation/cave1.th000066400000000000000000000005231307545355600203640ustar00rootroot00000000000000encoding utf-8 input cave1.th2 centerline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 endcenterline therion-5.4.1/samples/xelevation/cave1.th2000066400000000000000000000033331307545355600204500ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -147.692 -108.312 482.323 620.128 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {118.107 1 1.0} {452.754 0} cave1.xvi 0 {} scrap scrap1 -scale [-128.0 -128.0 423.275 -128.0 0.0 0.0 14.002385 0.0 m] line floor-step -reverse on 94.0 382.0 115.0 373.0 134.0 340.0 134.0 320.0 smooth off endline line floor-step 273.0 210.0 253.0 231.0 237.0 232.0 221.0 229.0 smooth off endline point 341.0 60.0 entrance -orientation 288.7 line wall -close on -outline in 154.0 158.0 209.16 203.43 247.0 224.0 221.0 246.0 195.0 268.0 156.0 337.0 139.0 332.0 122.0 327.0 99.0 301.0 79.0 290.0 59.0 279.0 97.0 208.0 104.0 187.0 111.0 166.0 137.0 144.0 154.0 158.0 endline line wall 103.0 454.0 110.0 418.0 117.0 402.0 111.0 385.0 105.0 368.0 80.0 335.0 36.0 309.0 -8.0 283.0 10.0 285.0 39.0 217.0 68.0 149.0 76.0 130.0 98.0 125.0 120.0 120.0 180.0 87.0 310.0 44.0 smooth off endline line wall 323.0 93.0 200.0 114.0 182.0 119.0 201.0 140.0 220.0 161.0 254.0 197.0 265.0 226.0 272.31 245.28 273.0 251.0 282.0 280.0 smooth off endline point 274.0 297.0 continuation -align tr point 264.557 271.854 station -name 5' line chimney 241.0 273.0 241.69 248.93 276.0 248.0 276.0 248.0 smooth off endline line wall 263.0 293.0 241.0 241.0 225.74 283.76 212.0 300.0 190.0 326.0 164.0 335.0 151.0 367.0 138.0 399.0 129.0 458.0 129.0 458.0 smooth off endline point 312.087 69.434 station -name 6 point 257.677 239.374 station -name 5 point 154.137 116.534 station -name 4 point 77.367 177.754 station -name 3 point 46.457 290.154 station -name 2 point 133.857 362.994 station -name 1 point 118.107 452.754 station -name 0 endscrap therion-5.4.1/samples/xelevation/cave1.xvi000066400000000000000000000014701307545355600205610ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { { -61.02 192.22 0} { -45.28 102.46 1} { -132.68 29.63 2} { -101.77 -82.78 3} { -25.00 -144.00 4} { 78.54 -21.16 5} { 85.43 11.32 5'} { 132.68 -192.22 6} } set XVIshots { { -61.02 192.22 -45.28 102.46} { -45.28 102.46 -132.68 29.63} { -132.68 29.63 -101.77 -82.78} { -101.77 -82.78 -25.00 -144.00} { -45.28 102.46 78.54 -21.16} { 78.54 -21.16 -25.00 -144.00} { 78.54 -21.16 85.43 11.32} { -25.00 -144.00 132.68 -192.22} } set XVIgrid {-198.819 -240.846 19.685 0.0 0.0 19.685 20 25} therion-5.4.1/samples/xelevation/cave2.th000066400000000000000000000012731307545355600203700ustar00rootroot00000000000000#!FILE 2 #! This is obviously not what we would like to get. #! #! To control process of extended elevation, there is a special #! extend option in centerline command. centerline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 #! #! First of all, we would like to start our extended elevation #! at station 6 (where the entrance is). This can be done by specifying #!CODE extend start 6 #!ENDCODE #! in the centerline. Now it looks better, endcenterline therion-5.4.1/samples/xelevation/cave3.th000066400000000000000000000014611307545355600203700ustar00rootroot00000000000000centerline data normal from to compass clino tape 0 1 170 -10 4.7 # first loop branch 1 2 230 -60 12.3 2 3 166 -18 6.3 3 4 130 -12 5.1 # second loop branch 1 5 133 +4 8.9 5 4 220 -62 16.1 5 5' 12 65 4 4 6 107 -23 9.1 extend start 6 #!FILE 4 #! #! If we would like to start this branch from station 4, we need #! to forbid therion to extend station 5 from 1. This can be done #! by specifying #!CODE extend ignore 1 5 #!ENDCODE #! This means, that shot from 1 to 5 will be ignored, when extended #! elevation is generated. #! #! If we would like to extend branch starting #! with station 5 to the left, we need to specify also #!CODE extend left 5 #!ENDCODE #! #! This will extend all stations from station 5 to the left. endcenterline therion-5.4.1/samples/xelevation/cave3.th2000066400000000000000000000034131307545355600204510ustar00rootroot00000000000000encoding utf-8 ##XTHERION## xth_me_area_adjust -138.296 -187.056 1042.899 600.439 ##XTHERION## xth_me_area_zoom_to 100 ##XTHERION## xth_me_image_insert {838.825 1 1.0} {393.697 0} cave3.xvi 0 {} scrap s1 -projection extended -scale [-128.0 -128.0 1033.51 -128.0 0.0 0.0 29.502354 0.0 m] point 838.825 393.697 station -name 0 point 747.715 377.557 station -name 1 point 626.645 166.927 station -name 2 point 508.705 130.117 station -name 3 point 410.505 110.437 station -name 4 point 246.335 39.617 station -name 6 line wall 841.0 412.0 803.0 407.0 673.0 384.0 651.0 374.0 629.0 364.0 638.0 188.0 623.0 175.0 608.0 162.0 479.0 168.0 452.0 167.0 425.0 166.0 245.0 140.0 228.0 156.0 smooth off endline line wall 728.0 106.0 723.0 239.0 747.0 340.0 761.0 356.0 775.0 372.0 826.0 378.0 843.0 381.0 smooth off endline line wall:debris 251.0 28.0 274.0 40.0 392.0 93.0 415.0 92.0 438.0 91.0 497.0 110.0 542.0 110.0 587.0 110.0 621.0 113.0 652.0 111.0 683.0 109.0 728.0 106.0 728.0 106.0 smooth off endline endscrap scrap s2 -projection extended -scale [-128.0 -128.0 1033.51 -128.0 0.0 0.0 29.502354 0.0 m] line wall 246.0 374.0 251.0 385.0 263.0 395.0 264.0 356.0 265.0 317.0 303.0 249.0 310.0 93.0 smooth off endline line wall:debris 415.0 92.0 310.0 93.0 endline line wall:debris 89.0 362.0 158.0 365.0 246.0 374.0 246.0 374.0 smooth off endline line wall 452.0 167.0 392.0 269.0 318.0 342.0 297.0 395.0 286.05 422.64 287.0 424.0 285.0 461.0 endline line wall 246.0 459.0 245.0 414.0 259.0 401.0 85.0 397.0 smooth off endline point 86.945 377.557 station -name 1 point 264.0 460.0 continuation point 261.715 387.007 station -name 5 point 410.505 110.437 station -name 4 endscrap map m break s1 break s2 endmap therion-5.4.1/samples/xelevation/cave3.xvi000066400000000000000000000016771307545355600205740ustar00rootroot00000000000000set XVIgrids {1.0 m} set XVIstations { { 375.94 176.67 0} { 284.83 160.53 1} { 284.83 160.53 1} { 163.76 -50.10 2} { 163.76 -50.10 2} { 45.82 -86.91 3} { 45.82 -86.91 3} { -52.38 -106.59 4} { -375.94 160.53 1} { -201.17 169.98 5} { -201.17 169.98 5} { -52.38 -106.59 4} { -52.38 -106.59 4} { -217.28 -176.67 6} } set XVIshots { { 375.94 176.67 284.83 160.53} { 284.83 160.53 163.76 -50.10} { 163.76 -50.10 45.82 -86.91} { 45.82 -86.91 -52.38 -106.59} { -375.94 160.53 -201.17 169.98} { -201.17 169.98 -52.38 -106.59} { -52.38 -106.59 -217.28 -176.67} } set XVIgrid {-473.181 -276.083 19.685 0.0 0.0 19.685 48 28} therion-5.4.1/samples/xelevation/thconfig.1000066400000000000000000000011551307545355600207150ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 1 #!TITLE 25 Extended elevation control #! #! Assume following situation (in plan view), #! when there is a loop in centerline between stations 1 and 4, #! small chimney near station 5 #! and entrance to the cave is at station 6. #!IMAGE map1p.pdf #! By default, centerline extended elevation of this situation looks like this: #!IMAGE map1x.pdf source cave1.th input thconfig.layout #export map -proj plan -o cave1.xvi export map -proj plan -o map1p.pdf -layout l -layout-scale 1 300 export map -proj extended -o map1x.pdf -layout l -layout-scale 1 500 #!CLEAN map1p.pdf map1x.pdf therion-5.4.1/samples/xelevation/thconfig.2000066400000000000000000000003641307545355600207170ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 3 #!IMAGE map2.pdf #!but there is still a problem with a branch containing station 5. source cave2.th input thconfig.layout export map -proj extended -o map2.pdf -layout l -layout-scale 1 500 #!CLEAN map2.pdf therion-5.4.1/samples/xelevation/thconfig.3000066400000000000000000000003411307545355600207130ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 4.1 #! #!IMAGE map3.pdf #! source cave3.th input thconfig.layout #export map -proj extended -o cave3.xvi export map -proj extended -o map3.pdf -layout l -layout-scale 1 500 #!CLEAN map3.pdf therion-5.4.1/samples/xelevation/thconfig.4000066400000000000000000000007661307545355600207270ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 6 #!SUBTITLE Stations in extended elevation scraps #! #! Even if the station 1 is present more then one time in the map, #! therion automatically #! detects correct position of this station in each scrap and they are #! usually drawn correctly. #!IMAGE map4.pdf source cave3.th source cave3.th2 source centerline extend hide 5 5' endcenterline endsource input thconfig.layout export map -proj extended -o map4.pdf -layout l -layout-scale 1 500 #!CLEAN map4.pdf therion-5.4.1/samples/xelevation/thconfig.5000066400000000000000000000020731307545355600207210ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 7 #! The only thing that is missing is connection line between stations 1 #! in these two branches. source cave3.th source cave3.th2 #! Therion does not automatically generate these lines because their #! shape usually depends on particilar map. #! #! To draw such a line all you need to do is to create a simple scrap #! with this line. Here is an example: source centerline extend hide 5 5' endcenterline #!CODE scrap sc -proj extended point 0 0 station -name 1 -from 5 -visibility off point 100 0 station -name 1 -from 2 -visibility off line map-connection 0 5 0 15 100 15 100 5 endline endscrap #!ENDCODE #! As you can see, even there are two stations with same name, they #! are distinguished by -from option, which specifies #! previous station in extended elevation. Using this scrap you receive the #! final map: map mc sc endmap endsource select mc select m #!IMAGE map5.pdf input thconfig.layout export map -proj extended -o map5.pdf -layout l -layout-scale 1 500 #!CLEAN map5.pdf therion-5.4.1/samples/xelevation/thconfig.6000066400000000000000000000007201307545355600207170ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 4.5 #! #! As we have mentioned before, there is a small chimney above station 5. #! In this case, it is much more natural to draw this shot as vertical #! (because it is a chimney). To specify this, use source cave3.th source centerline #!CODE extend vertical 5 5' #!ENDCODE endcenterline endsource #!IMAGE map6.pdf input thconfig.layout export map -proj extended -o map6.pdf -layout l -layout-scale 1 500 #!CLEAN map6.pdf therion-5.4.1/samples/xelevation/thconfig.7000066400000000000000000000005471307545355600207270ustar00rootroot00000000000000encoding utf-8 #!PROCESS #!FILE 4.6 #! #! Or you can completely hide this leg from extended centerline using: source cave3.th source centerline #!CODE extend hide 5 5' #!ENDCODE endcenterline endsource #!IMAGE map7.pdf input thconfig.layout export map -proj extended -o map7.pdf -layout l -layout-scale 1 500 -layout-transparency off #!CLEAN map7.pdf therion-5.4.1/samples/xelevation/thconfig.layout000066400000000000000000000004071307545355600220710ustar00rootroot00000000000000layout l # line survey code metapost def l_survey_cave_SKBB (expr P) = T:=identity; pickup PenC; thdraw P; enddef; endcode symbol-set SKBB map-header 0 0 off color map-fg [100 100 80] debug station-names endlayout therion-5.4.1/set_version.py000077500000000000000000000031631307545355600161260ustar00rootroot00000000000000#!/usr/bin/env python # set version information based on # 1) git data # 2) the first line of the file CHANGES (valid for releases) # 3) use at least previous release info + current date import subprocess, datetime, re def run(s): return subprocess.check_output(s, shell=True).strip().decode('ascii') try: release = run('git tag --points-at HEAD 2> /dev/null') # check for a TAG in the current commit date = run('git show -s --format="%cd" --date=short HEAD') if release.startswith('v'): # release number if the commit is tagged ver = "%s (%s)" % (release[1:], date) else: # otherwise last known tag + short commit hash prevver = run('git describe --abbrev=0 --tags master') commit = run('git rev-parse --short HEAD') ver = "%s+%s (%s)" % (prevver[1:], commit, date) except: # no git version available patt = r'Therion (\d+\.\d+(?:\.\d+)?) \((\d{4}-\d\d-\d\d)\):$' try: # check the file CHANGES for version info on the first line (this would be a released version) with open('CHANGES') as f: txt = f.readline().strip() m = re.match(patt,txt) if m: ver = '%s (%s)' % (m.group(1),m.group(2)) else: raise ValueError() except: # find the most recent release in the file CHANGES with open('CHANGES') as f: for l in f: m = re.match(patt,l.strip()) if m: ver1 = m.group(1) break ver = "%s+? (compiled on %s)" % (ver1, datetime.date.today().isoformat()) with open('thversion.h','w') as f: f.write('#define THVERSION "%s"\n' % ver) with open('thbook/version.tex','w') as f: f.write('%s\n' % ver) therion-5.4.1/tex/000077500000000000000000000000001307545355600140065ustar00rootroot00000000000000therion-5.4.1/tex/Makefile000066400000000000000000000000251307545355600154430ustar00rootroot00000000000000all: perl gentex.pl therion-5.4.1/tex/gentex.pl000077500000000000000000000017741307545355600156510ustar00rootroot00000000000000#!/usr/bin/perl sub encodecxx { $str = shift; $str =~ s/\x0D//g; $str =~ s/\x0C//g; $str =~ s/\x0A//g; $str =~ s/\\/\\\\/g; $str =~ s/\n/\\n/g; $str =~ s/\t/\\t/g; $str =~ s/\"/\\"/g; return $str; } print "reading therion.tex\n"; $thtex_library = ""; open(INPT,"therion.tex"); while ($ln = ) { $thtex_library .= "\n\"" . encodecxx($ln) . "\\n\""; } close(INPT); open(OUTPT,">../thtex.h"); print OUTPT <../thtex.cxx"); print OUTPT <}% \newbox\xxx \newbox\mapbox \newbox\navbox \newcount\pointerE \newcount\pointerW \newcount\pointerN \newcount\pointerS \newtoks\pointerU \newtoks\pointerD \newcount\pagenum \newtoks\pagename \newtoks\pagelabel \newtoks\opacity \opacity{0.7} \newtoks\surfaceopacity \surfaceopacity{0.7} \newif\ifpagenumbering \pagenumberingfalse \newtoks\bgcolor \newif\iflegendbgfill \let\ne\noexpand \def\notdef{notdef} % hyperlinks \def\flatlink#1#2#3#4#5{% \setbox\xxx=\hbox{}\wd\xxx=#3bp\ht\xxx=#4bp% \rlap{\kern#1bp\raise#2bp\hbox{% \vbox to0bp{\vss\hbox to 0bp{% \pdfstartlink attr {/Border [0 0 0]} goto name {#5}% \box\xxx\pdfendlink\hss}}}}}% \def\textlink#1#2{% \pdfstartlink attr {/Border [0 0 0]} goto name {#2}#1\pdfendlink}% \def\includechars#1:#2\endinclude{\pdfincludechars#1{#2}} \newbox\tmpboxa \newbox\tmpboxb \newdimen\legendsymbolwd \newdimen\legendsymbolht \legendsymbolht=12pt \newdimen\tmpdimen \def\legendsymbolbox#1#2{% \setbox\tmpboxa=\hbox{\pdfrefxform#1}% \setbox\tmpboxb=\hbox{\the\legendtextsize(}% \legendsymbolwd=\wd\tmpboxa \legendsymbolht=\ht\tmpboxa \advance\legendsymbolht by -\ht\tmpboxb \advance\legendsymbolht by -1dd \tmpdimen=\hsize \advance\tmpdimen by 10pt \divide\tmpdimen by\legendcolumns \advance\tmpdimen by-10pt \hbox to \tmpdimen{% \box\tmpboxa\kern10pt\raise\legendsymbolht\vtop{% \advance\tmpdimen by -\legendsymbolwd \advance\tmpdimen by -10pt \hsize=\tmpdimen\rightskip=0pt plus \tmpdimen minus 0pt\relax\the\legendtextsize #2\vskip1dd}\hss}% } \def\colorlegendbox#1#2#3{% \setbox\xxx=\hbox to 36bp{\PL{q #1 #2 #3 rg 0 0 36 24 re f Q}\hfil}% \ht\xxx=25bp\dp\xxx=0bp \immediate\pdfxform\xxx } \let\PL\pdfliteral \newdimen\xcorr \newdimen\ycorr \def\PB#1#2#3{\rlap{\kern#1bp\raise#2bp\hbox{\pdfrefxform#3}}} %placebox \def\gridcoord#1#2{\hbox to0pt{% \ifnum#1=1\hss\fi \ifnum#1=4\hss\fi \ifnum#1=7\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi \vbox to0pt{% \ifnum#1>3\vss\fi \kern2pt% \hbox{\kern2pt#2\kern2pt}% \kern2pt% \ifnum#1<7\vss\fi }% \ifnum#1=3\hss\fi \ifnum#1=6\hss\fi \ifnum#1=9\hss\fi \ifnum#1=8\hss\fi \ifnum#1=2\hss\fi }% } \def\PBcorr#1#2#3{% \xcorr=#1bp\advance\xcorr by\extraW\advance\xcorr by\overlap% \ycorr=#2bp\advance\ycorr by\extraS\advance\ycorr by\overlap% \rlap{\kern\xcorr\raise\ycorr\hbox{\pdfrefxform#3}}} %placebox \def\bitmap#1#2#3#4#5#6#7{% \pdfliteral{q #1 #2 #3 #4 #5 #6 cm}% \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \def\bitmapcorr#1#2#3#4#5#6#7{% \xcorr=0bp\advance\xcorr by\extraW\advance\xcorr by\overlap \ycorr=0bp\advance\ycorr by\extraS\advance\ycorr by\overlap \dimtobp{\xcorr}\edef\wdth{\tmpdef}% \dimtobp{\ycorr}\edef\hght{\tmpdef}% \pdfliteral{q 1 0 0 1 \wdth\space\hght\space cm #1 #2 #3 #4 #5 #6 cm}% two-step transformation to avoid overflow \rlap{\pdfrefximage#7}% \pdfliteral{Q}% } \newdimen\tmpdimenX \newdimen\tmpdimenY \def\calibrX#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraW} \def\calibrY#1{\tmpdimen=#1\advance\tmpdimen by\overlap\advance\tmpdimen by\extraS} \def\TITLE#1{\eject\hbox{}\vskip5cm\centerline{\size[24]#1}\vfil\eject} % processing of the E-W-N-S references \def\showpointer#1{\ifnum\the#1=0\else\the#1\fi} % processing of the up and down references \def\showpointerlist#1{\edef\test{\the#1}\ifx\test\notdef\else \expandafter\process\the#1\endarg\fi} \def\process#1||#2\endarg{ \expandafter\processpointeritem#1\endarg% \if@#2@\def\next##1\endarg{} \else\let\next=\process\fi \next#2\endarg} \def\processpointeritem#1|#2|#3\endarg{\hbox{\textlink{\arr\ #2 (#1)}{#3}}} \def\arr{} % to be redefined in the \dopage macro \def\pagesetup#1#2#3#4#5#6{ \pdfpagewidth#1 \pdfpageheight#2 \hsize#3 \vsize#4 \pdfhorigin#5 \pdfvorigin#6 \hoffset0pt \voffset0pt\relax } \def\linestyle{1 J 1 j 1.5 w} \def\framed#1{% \dimtobp{\wd#1}\edef\wdth{\tmpdef}% \dimtobp{\ht#1}\edef\hght{\tmpdef}% \hbox to \wd#1{\rlap{\box#1}\PL{q \linestyle\space 0 0 \wdth\space\hght\space re S Q}\hfill}% } {\catcode`\p=12\catcode`\t=12\gdef\SKIPPT#1pt{#1}} \def\dimtobp#1{% \tmpdimen=#1% \tmpdimen=0.996264\tmpdimen \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% } \def\color[#1 #2 #3]{% \tmpdimen=#1pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#2pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \tmpdimen=#3pt% \divide\tmpdimen100 \edef\tmpdef{\the\tmpdimen}% \edef\tmpdef{\expandafter\SKIPPT\tmpdef}% \pdfliteral{\tmpdef}% \pdfliteral{rg} } % actual placing of the page elements \def\dopage{% \vbox{\centerline{\framed{\mapbox}} \bigskip \line{% \vbox to \ht\navbox{ \hbox{\size[20]\the\pagelabel \ifpagenumbering\space(\the\pagenum)\fi \space\size[16]\the\pagename} \ifpagenumbering \medskip \hbox{\qquad\qquad \vtop{% \hbox to 0pt{\hss\showpointer\pointerN\hss} \hbox to 0pt{\llap{\showpointer\pointerW\hskip0.7em}% \raise1pt\hbox to 0pt{\hss$\updownarrow$\hss}% \raise1pt\hbox to 0pt{\hss$\leftrightarrow$\hss}% \rlap{\hskip0.7em\showpointer\pointerE}} \hbox to 0pt{\hss\showpointer\pointerS\hss} }\qquad\qquad \vtop{ \def\arr{$\uparrow$} \showpointerlist\pointerU \def\arr{$\downarrow$} \showpointerlist\pointerD } } \fi \vss } \hss \vbox to \ht\navbox{ \ifnortharrow\hbox to 0pt{\hss\northarrow\qquad}\fi \vss \ifscalebar\hbox to 0pt{\hss\scalebar\qquad}\fi } \box\navbox } } } \newif\iflegend \newif\ifcolorlegend \newtoks\legendcontent \newtoks\cavename \newtoks\comment \newtoks\legendtitle \newtoks\colorlegendtitle \newif\ifnortharrow \newif\ifscalebar \newtoks\explotitle \newtoks\explodate \newtoks\exploteam \newtoks\topotitle \newtoks\topodate \newtoks\topoteam \newtoks\cartotitle \newtoks\cartodate \newtoks\cartoteam \newtoks\copyrights \newtoks\cavelength \newtoks\cavedepth \newtoks\cavelengthtitle \newtoks\cavedepthtitle \newtoks\cavemaxx \newtoks\caveminx \newtoks\cavemaxy \newtoks\caveminy \newtoks\cavemaxz \newtoks\caveminz \newtoks\thversion \newtoks\outcscode \newtoks\outcsname \newtoks\northdir \newtoks\magdecl \newtoks\gridconv \newtoks\currentdate \newtoks\legendtextcolor\legendtextcolor={\color[0 0 0]} \newtoks\legendtextsize\legendtextsize={\size[12]} \newtoks\legendtextheadersize\legendtextheadersize={\size[26]} \newtoks\legendtextsectionsize\legendtextsectionsize={\size[14]} \def\scalebar{\pdfrefxform\THWscalebar} \def\northarrow{\pdfrefxform\THWnortharrow} \newdimen\legendwidth %\legendwidth=14cm \newcount\legendcolumns \legendcolumns=2 \legendcontent={% \hsize=\legendwidth \color[0 0 0]\the\legendtextcolor \ifnortharrow\vbox to 0pt{\line{\hfil\northarrow}\vss}\fi \edef\tmp{\the\cavename} \ifx\tmp\empty \else {\the\legendtextheadersize\the\cavename}\vskip1cm \fi \ifscalebar\scalebar\vskip1cm\fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\the\legendtextsize\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\explotitle: \ss\the\exploteam\quad\si\the\explodate\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\topotitle: \ss\the\topoteam\quad\si\the\topodate\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cartotitle: \ss\the\cartoteam\quad\si\the\cartodate\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\the\legendtextsize\ss\the\copyrights\par} \fi } \formattedlegend \color[0 0 0] } \def\maplayout{ \legendbox{NW}{\the\legendcontent} \legendbox{NE}{\northarrow} } \def\formattedlegend{% \ifcolorlegend \vskip1cm{\the\legendtextsectionsize\the\colorlegendtitle}\bigskip \insertcolorlegend \fi \iflegend \vskip1cm{\the\legendtextsectionsize\the\legendtitle}\bigskip \insertlegend \fi} \let\atlaslegend=\formattedlegend \def\atlastitlepages{ \edef\tmp{\the\cavename} \ifx\tmp\empty \else \TITLE{\the\cavename} \fi {\rightskip=0pt plus 3em\parskip=3bp \edef\tmp{\the\comment} \ifx\tmp\empty \else {\size[12]\the\comment} \par\medskip \fi \everypar{\hangindent=2em\hangafter=1} \edef\tmp{\the\exploteam} \ifx\tmp\empty \else {\size[12]\si\the\explotitle: \ss\the\exploteam\par} \fi \edef\tmp{\the\topoteam} \ifx\tmp\empty \else {\size[12]\si\the\topotitle: \ss\the\topoteam\par} \fi \edef\tmp{\the\cartoteam} \ifx\tmp\empty \else {\size[12]\si\the\cartotitle: \ss\the\cartoteam\par} \fi \edef\tmp{\the\copyrights} \ifx\tmp\empty \else {\size[12]\ss\the\copyrights\par} \fi \edef\tmp{\the\cavelength} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavelengthtitle: \ss\the\cavelength\par} \fi \edef\tmp{\the\cavedepth} \ifx\tmp\empty \else {\the\legendtextsize\si\the\cavedepthtitle: \ss\the\cavedepth\par} \fi } } \newdimen\sx \newdimen\sy \newdimen\sxd \newdimen\syd \def\LEGN{N} \def\LEGE{E} \def\LEGW{W} \def\LEGS{S} \def\LEGNE{NE} \def\LEGNW{NW} \def\LEGSE{SE} \def\LEGSW{SW} \def\LEGC{C} \newdimen\extraN \extraN=0mm \newdimen\extraS \extraS=0mm \newdimen\extraE \extraE=0mm \newdimen\extraW \extraW=0mm \newdimen\adjustedHS \newdimen\adjustedVS \newdimen\adjustedX \newdimen\adjustedY \newdimen\framethickness\framethickness=0cm \def\legendbox#1#2#3#4{% \unskip \setbox\tmpboxa=\vbox{#4}% \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \sxd=\hsize \divide\sxd by 100 \sxd=#1\sxd \syd=\vsize \divide\syd by 100 \syd=#2\syd \edef\test{#3}% \ifx\test\LEGN \divide\sx by 2 \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGW \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGE \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \else\ifx\test\LEGS \divide\sx by 2 \advance\sxd by -\sx \else\ifx\test\LEGNW \advance\syd by -\sy \else\ifx\test\LEGNE \advance\sxd by -\sx \advance\syd by -\sy \else\ifx\test\LEGSW \else\ifx\test\LEGSE \advance\sxd by -\sx \else\ifx\test\LEGC \divide\sx by 2 \advance\sxd by -\sx \divide\sy by 2 \advance\syd by -\sy \fi\fi\fi\fi\fi\fi\fi\fi\fi % \ifdim\sxd<-\extraW \global\extraW=-\sxd\fi \ifdim\syd<-\extraS \global\extraS=-\syd\fi \sx=\wd\tmpboxa \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sx by \sxd \advance\sx by -\hsize \advance\sy by \syd \advance\sy by -\vsize \ifdim\sx>\extraE \global\extraE=\sx \fi \ifdim\sy>\extraN \global\extraN=\sy \fi % \unskip % \advance\sxd by \extraW -- presunute do thpdf.cxx % \advance\syd by \extraS % vypln pod legendou \iflegendbgfill \begingroup \advance\sxd-1cm \advance\syd-1cm \sx=\wd\tmpboxa \advance\sx by 2cm \dimtobp{\sxd}\edef\shiftx{\tmpdef}% \dimtobp{\syd}\edef\shifty{\tmpdef}% % \dimtobp{\wd\tmpboxa}\edef\wdth{\tmpdef}% \dimtobp{\sx}\edef\wdth{\tmpdef}% \sy=\ht\tmpboxa \advance\sy by \dp\tmpboxa \advance\sy by 2 cm \dimtobp{\sy}\edef\hght{\tmpdef}% \rlap{\PL{q \the\bgcolor\space rg \shiftx\space \shifty\space \wdth\space \hght\space re f Q}}% \endgroup \fi % \advance\syd by \dp\tmpboxa \rlap{\kern\sxd\raise\syd\box\tmpboxa}% \ignorespaces } \def\loadpicture#1{\pdfximage{#1}\pdfrefximage\pdflastximage} \def\insertmaps{% \color[0 0 0] \input th_formdef \input th_pagedef \input th_pages \immediate\write-1{ \the\count10 \space numeric registers used out of \ifx\eTeXversion\undefined256\else32768\fi} } \def\insertlegend{% \input th_legend } \def\insertcolorlegend{% \input th_legendcolor } \def\insertkeyplan#1#2{% \tmpdimen=#1 \tmpdimen=2\tmpdimen \setbox0=\hbox{\pdfximage width \tmpdimen {#2}\pdfrefximage\pdflastximage} % \pdfxform0\keyplan=\pdflastxform \setbox1=\hbox to #1 {\copy0\hss} \setbox2=\hbox to #1 {\hss\box0} \eject \ifodd\pageno\hbox{}\vfil\eject\fi \line{\hss\pdfxform1\pdfrefxform\pdflastxform} \vfil \eject \line{\pdfxform2\pdfrefxform\pdflastxform\hss} \vfil \eject } \newcount\stopcount \newcount\stoprow \newcount\rows \newcount\rowstmp \newcount\i \newcount\j \def\placemaps{ \message{ [Warning: \string\placemaps\space is deprecated; use \string\insertmaps] } \insertmaps } %% Petr Olsak's multicolumn macros (slightly modified) \newdimen\colsep \colsep=1em % horiz. mezera mezi sloupci \newcount\tempnum % pracovn promnn \splittopskip=\baselineskip \def\roundtolines #1{%% zaokrouhl na cel nsobky vel. dku \divide #1 by\baselineskip \multiply #1 by\baselineskip} \def\corrsize #1{%% #1 := #1 + \splittopskip - \topskip \advance #1 by \splittopskip \advance #1 by-\topskip} \def\begmulti#1{\par\bigskip\penalty0 \def\Ncols{#1} \setbox0=\vbox\bgroup\penalty0 %% \hsize := ka sloupce = (\hsize+\colsep) / n - \colsep \advance\hsize by\colsep \divide\hsize by\Ncols \advance\hsize by-\colsep} \def\endmulti{\vfil\egroup \setbox1=\vsplit0 to0pt %% \dimen1 := velikost zbylho msta na strnce \ifdim\pagegoal=\maxdimen \dimen1=\vsize \corrsize{\dimen1} \else \dimen1=\pagegoal \advance\dimen1 by-\pagetotal \fi \ifdim \dimen1<2\baselineskip \vfil\break \dimen1=\vsize \corrsize{\dimen1} \fi %% \dimen0 := vka n sloupcov sazby po rozdlen do sloupc %% = (\ht0 + (n-1)\baselineskip) / n, zaokruhleno na dky \dimen0=\Ncols\baselineskip \advance\dimen0 by-\baselineskip \advance\dimen0 by \ht0 \divide\dimen0 by\Ncols \roundtolines{\dimen0} %% Rozdlit sazbu n sloupc do strnek nebo nerozdlit ? \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \ifvoid0 \else \errmessage{Lost text in multiple columns?} \fi \bigskip} \def\makecolumns#1{\setbox1=\hbox{}\tempnum=0 \loop \ifnum\Ncols>\tempnum \setbox1=\hbox{\unhbox1 \vsplit0 to#1 \hss} \advance\tempnum by1 \repeat \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip \line{\unhbox1\unskip}} \def\splitpart{\roundtolines{\dimen1} \makecolumns{\dimen1} \advance\dimen0 by-\dimen1 %% \dimen0 := vka _zbyl_ n sloupcov sazby %% \dimen1 := przdn msto na strnce = (cca) \vsize \vfil\break \dimen1=\vsize \corrsize{\dimen1} %% Rozdlit zbylou sazbu n sloupc do vce strnek ? \ifvoid0 \else \ifdim \dimen0>\dimen1 \splitpart \else \makecolumns{\dimen0} \fi \fi} %% end of multicolumn macros \input th_enc \input th_texts \input th_resources \input th_fontdef \nonstopmode therion-5.4.1/texenc/000077500000000000000000000000001307545355600144745ustar00rootroot00000000000000therion-5.4.1/texenc/afm2enc.pl000077500000000000000000000012351307545355600163500ustar00rootroot00000000000000#!/usr/bin/perl -w if (scalar @ARGV != 1) {die "Run with .afm file as an argument!";} $infile = $ARGV[0]; if ($infile =~ /\.afm$/) { $infile = $`; } else { die "Is the file $infile really an AFM file?"; } open(IN, "$infile.afm") or die "Can't open file $infile.afm: $!"; while() { chomp; if (/C\s+(\d+)\s*;.*;\s*N\s+(\w+)\s*;/) { if ($1>=0) { $CHAR[$1] = $2; } } } close(IN); open(OUT, ">$infile.enc") or die "Can't write file $infile.enc: $!"; print OUT "/$infile [\n"; for ($i=0; $i<256; $i++) { if (defined $CHAR[$i]) { print OUT "/$CHAR[$i]\n"; } else { print OUT "/.notdef\n"; } } print OUT "] def\n"; close(OUT); therion-5.4.1/texenc/basechars.txt000066400000000000000000000443371307545355600172030ustar00rootroot0000000000000000C0 0041 0300 00C1 0041 0301 00C2 0041 0302 00C3 0041 0303 00C4 0041 0308 00C5 0041 030A 00C7 0043 0327 00C8 0045 0300 00C9 0045 0301 00CA 0045 0302 00CB 0045 0308 00CC 0049 0300 00CD 0049 0301 00CE 0049 0302 00CF 0049 0308 00D1 004E 0303 00D2 004F 0300 00D3 004F 0301 00D4 004F 0302 00D5 004F 0303 00D6 004F 0308 00D9 0055 0300 00DA 0055 0301 00DB 0055 0302 00DC 0055 0308 00DD 0059 0301 00E0 0061 0300 00E1 0061 0301 00E2 0061 0302 00E3 0061 0303 00E4 0061 0308 00E5 0061 030A 00E7 0063 0327 00E8 0065 0300 00E9 0065 0301 00EA 0065 0302 00EB 0065 0308 00EC 0069 0300 00ED 0069 0301 00EE 0069 0302 00EF 0069 0308 00F1 006E 0303 00F2 006F 0300 00F3 006F 0301 00F4 006F 0302 00F5 006F 0303 00F6 006F 0308 00F9 0075 0300 00FA 0075 0301 00FB 0075 0302 00FC 0075 0308 00FD 0079 0301 00FF 0079 0308 0100 0041 0304 0101 0061 0304 0102 0041 0306 0103 0061 0306 0104 0041 0328 0105 0061 0328 0106 0043 0301 0107 0063 0301 0108 0043 0302 0109 0063 0302 010A 0043 0307 010B 0063 0307 010C 0043 030C 010D 0063 030C 010E 0044 030C 010F 0064 030C 0112 0045 0304 0113 0065 0304 0114 0045 0306 0115 0065 0306 0116 0045 0307 0117 0065 0307 0118 0045 0328 0119 0065 0328 011A 0045 030C 011B 0065 030C 011C 0047 0302 011D 0067 0302 011E 0047 0306 011F 0067 0306 0120 0047 0307 0121 0067 0307 0122 0047 0327 0123 0067 0327 0124 0048 0302 0125 0068 0302 0128 0049 0303 0129 0069 0303 012A 0049 0304 012B 0069 0304 012C 0049 0306 012D 0069 0306 012E 0049 0328 012F 0069 0328 0130 0049 0307 0134 004A 0302 0135 006A 0302 0136 004B 0327 0137 006B 0327 0139 004C 0301 013A 006C 0301 013B 004C 0327 013C 006C 0327 013D 004C 030C 013E 006C 030C 0143 004E 0301 0144 006E 0301 0145 004E 0327 0146 006E 0327 0147 004E 030C 0148 006E 030C 014C 004F 0304 014D 006F 0304 014E 004F 0306 014F 006F 0306 0150 004F 030B 0151 006F 030B 0154 0052 0301 0155 0072 0301 0156 0052 0327 0157 0072 0327 0158 0052 030C 0159 0072 030C 015A 0053 0301 015B 0073 0301 015C 0053 0302 015D 0073 0302 015E 0053 0327 015F 0073 0327 0160 0053 030C 0161 0073 030C 0162 0054 0327 0163 0074 0327 0164 0054 030C 0165 0074 030C 0168 0055 0303 0169 0075 0303 016A 0055 0304 016B 0075 0304 016C 0055 0306 016D 0075 0306 016E 0055 030A 016F 0075 030A 0170 0055 030B 0171 0075 030B 0172 0055 0328 0173 0075 0328 0174 0057 0302 0175 0077 0302 0176 0059 0302 0177 0079 0302 0178 0059 0308 0179 005A 0301 017A 007A 0301 017B 005A 0307 017C 007A 0307 017D 005A 030C 017E 007A 030C 01A0 004F 031B 01A1 006F 031B 01AF 0055 031B 01B0 0075 031B 01CD 0041 030C 01CE 0061 030C 01CF 0049 030C 01D0 0069 030C 01D1 004F 030C 01D2 006F 030C 01D3 0055 030C 01D4 0075 030C 01D5 00DC 0304 01D6 00FC 0304 01D7 00DC 0301 01D8 00FC 0301 01D9 00DC 030C 01DA 00FC 030C 01DB 00DC 0300 01DC 00FC 0300 01DE 00C4 0304 01DF 00E4 0304 01E0 0226 0304 01E1 0227 0304 01E2 00C6 0304 01E3 00E6 0304 01E6 0047 030C 01E7 0067 030C 01E8 004B 030C 01E9 006B 030C 01EA 004F 0328 01EB 006F 0328 01EC 01EA 0304 01ED 01EB 0304 01EE 01B7 030C 01EF 0292 030C 01F0 006A 030C 01F4 0047 0301 01F5 0067 0301 01F8 004E 0300 01F9 006E 0300 01FA 00C5 0301 01FB 00E5 0301 01FC 00C6 0301 01FD 00E6 0301 01FE 00D8 0301 01FF 00F8 0301 0200 0041 030F 0201 0061 030F 0202 0041 0311 0203 0061 0311 0204 0045 030F 0205 0065 030F 0206 0045 0311 0207 0065 0311 0208 0049 030F 0209 0069 030F 020A 0049 0311 020B 0069 0311 020C 004F 030F 020D 006F 030F 020E 004F 0311 020F 006F 0311 0210 0052 030F 0211 0072 030F 0212 0052 0311 0213 0072 0311 0214 0055 030F 0215 0075 030F 0216 0055 0311 0217 0075 0311 0218 0053 0326 0219 0073 0326 021A 0054 0326 021B 0074 0326 021E 0048 030C 021F 0068 030C 0226 0041 0307 0227 0061 0307 0228 0045 0327 0229 0065 0327 022A 00D6 0304 022B 00F6 0304 022C 00D5 0304 022D 00F5 0304 022E 004F 0307 022F 006F 0307 0230 022E 0304 0231 022F 0304 0232 0059 0304 0233 0079 0304 0340 0300 0341 0301 0343 0313 0344 0308 0301 0374 02B9 037E 003B 0385 00A8 0301 0386 0391 0301 0387 00B7 0388 0395 0301 0389 0397 0301 038A 0399 0301 038C 039F 0301 038E 03A5 0301 038F 03A9 0301 0390 03CA 0301 03AA 0399 0308 03AB 03A5 0308 03AC 03B1 0301 03AD 03B5 0301 03AE 03B7 0301 03AF 03B9 0301 03B0 03CB 0301 03CA 03B9 0308 03CB 03C5 0308 03CC 03BF 0301 03CD 03C5 0301 03CE 03C9 0301 03D3 03D2 0301 03D4 03D2 0308 0400 0415 0300 0401 0415 0308 0403 0413 0301 0407 0406 0308 040C 041A 0301 040D 0418 0300 040E 0423 0306 0419 0418 0306 0439 0438 0306 0450 0435 0300 0451 0435 0308 0453 0433 0301 0457 0456 0308 045C 043A 0301 045D 0438 0300 045E 0443 0306 0476 0474 030F 0477 0475 030F 04C1 0416 0306 04C2 0436 0306 04D0 0410 0306 04D1 0430 0306 04D2 0410 0308 04D3 0430 0308 04D6 0415 0306 04D7 0435 0306 04DA 04D8 0308 04DB 04D9 0308 04DC 0416 0308 04DD 0436 0308 04DE 0417 0308 04DF 0437 0308 04E2 0418 0304 04E3 0438 0304 04E4 0418 0308 04E5 0438 0308 04E6 041E 0308 04E7 043E 0308 04EA 04E8 0308 04EB 04E9 0308 04EC 042D 0308 04ED 044D 0308 04EE 0423 0304 04EF 0443 0304 04F0 0423 0308 04F1 0443 0308 04F2 0423 030B 04F3 0443 030B 04F4 0427 0308 04F5 0447 0308 04F8 042B 0308 04F9 044B 0308 0622 0627 0653 0623 0627 0654 0624 0648 0654 0625 0627 0655 0626 064A 0654 06C0 06D5 0654 06C2 06C1 0654 06D3 06D2 0654 0929 0928 093C 0931 0930 093C 0934 0933 093C 0958 0915 093C 0959 0916 093C 095A 0917 093C 095B 091C 093C 095C 0921 093C 095D 0922 093C 095E 092B 093C 095F 092F 093C 09CB 09C7 09BE 09CC 09C7 09D7 09DC 09A1 09BC 09DD 09A2 09BC 09DF 09AF 09BC 0A33 0A32 0A3C 0A36 0A38 0A3C 0A59 0A16 0A3C 0A5A 0A17 0A3C 0A5B 0A1C 0A3C 0A5E 0A2B 0A3C 0B48 0B47 0B56 0B4B 0B47 0B3E 0B4C 0B47 0B57 0B5C 0B21 0B3C 0B5D 0B22 0B3C 0B94 0B92 0BD7 0BCA 0BC6 0BBE 0BCB 0BC7 0BBE 0BCC 0BC6 0BD7 0C48 0C46 0C56 0CC0 0CBF 0CD5 0CC7 0CC6 0CD5 0CC8 0CC6 0CD6 0CCA 0CC6 0CC2 0CCB 0CCA 0CD5 0D4A 0D46 0D3E 0D4B 0D47 0D3E 0D4C 0D46 0D57 0DDA 0DD9 0DCA 0DDC 0DD9 0DCF 0DDD 0DDC 0DCA 0DDE 0DD9 0DDF 0F43 0F42 0FB7 0F4D 0F4C 0FB7 0F52 0F51 0FB7 0F57 0F56 0FB7 0F5C 0F5B 0FB7 0F69 0F40 0FB5 0F73 0F71 0F72 0F75 0F71 0F74 0F76 0FB2 0F80 0F78 0FB3 0F80 0F81 0F71 0F80 0F93 0F92 0FB7 0F9D 0F9C 0FB7 0FA2 0FA1 0FB7 0FA7 0FA6 0FB7 0FAC 0FAB 0FB7 0FB9 0F90 0FB5 1026 1025 102E 1E00 0041 0325 1E01 0061 0325 1E02 0042 0307 1E03 0062 0307 1E04 0042 0323 1E05 0062 0323 1E06 0042 0331 1E07 0062 0331 1E08 00C7 0301 1E09 00E7 0301 1E0A 0044 0307 1E0B 0064 0307 1E0C 0044 0323 1E0D 0064 0323 1E0E 0044 0331 1E0F 0064 0331 1E10 0044 0327 1E11 0064 0327 1E12 0044 032D 1E13 0064 032D 1E14 0112 0300 1E15 0113 0300 1E16 0112 0301 1E17 0113 0301 1E18 0045 032D 1E19 0065 032D 1E1A 0045 0330 1E1B 0065 0330 1E1C 0228 0306 1E1D 0229 0306 1E1E 0046 0307 1E1F 0066 0307 1E20 0047 0304 1E21 0067 0304 1E22 0048 0307 1E23 0068 0307 1E24 0048 0323 1E25 0068 0323 1E26 0048 0308 1E27 0068 0308 1E28 0048 0327 1E29 0068 0327 1E2A 0048 032E 1E2B 0068 032E 1E2C 0049 0330 1E2D 0069 0330 1E2E 00CF 0301 1E2F 00EF 0301 1E30 004B 0301 1E31 006B 0301 1E32 004B 0323 1E33 006B 0323 1E34 004B 0331 1E35 006B 0331 1E36 004C 0323 1E37 006C 0323 1E38 1E36 0304 1E39 1E37 0304 1E3A 004C 0331 1E3B 006C 0331 1E3C 004C 032D 1E3D 006C 032D 1E3E 004D 0301 1E3F 006D 0301 1E40 004D 0307 1E41 006D 0307 1E42 004D 0323 1E43 006D 0323 1E44 004E 0307 1E45 006E 0307 1E46 004E 0323 1E47 006E 0323 1E48 004E 0331 1E49 006E 0331 1E4A 004E 032D 1E4B 006E 032D 1E4C 00D5 0301 1E4D 00F5 0301 1E4E 00D5 0308 1E4F 00F5 0308 1E50 014C 0300 1E51 014D 0300 1E52 014C 0301 1E53 014D 0301 1E54 0050 0301 1E55 0070 0301 1E56 0050 0307 1E57 0070 0307 1E58 0052 0307 1E59 0072 0307 1E5A 0052 0323 1E5B 0072 0323 1E5C 1E5A 0304 1E5D 1E5B 0304 1E5E 0052 0331 1E5F 0072 0331 1E60 0053 0307 1E61 0073 0307 1E62 0053 0323 1E63 0073 0323 1E64 015A 0307 1E65 015B 0307 1E66 0160 0307 1E67 0161 0307 1E68 1E62 0307 1E69 1E63 0307 1E6A 0054 0307 1E6B 0074 0307 1E6C 0054 0323 1E6D 0074 0323 1E6E 0054 0331 1E6F 0074 0331 1E70 0054 032D 1E71 0074 032D 1E72 0055 0324 1E73 0075 0324 1E74 0055 0330 1E75 0075 0330 1E76 0055 032D 1E77 0075 032D 1E78 0168 0301 1E79 0169 0301 1E7A 016A 0308 1E7B 016B 0308 1E7C 0056 0303 1E7D 0076 0303 1E7E 0056 0323 1E7F 0076 0323 1E80 0057 0300 1E81 0077 0300 1E82 0057 0301 1E83 0077 0301 1E84 0057 0308 1E85 0077 0308 1E86 0057 0307 1E87 0077 0307 1E88 0057 0323 1E89 0077 0323 1E8A 0058 0307 1E8B 0078 0307 1E8C 0058 0308 1E8D 0078 0308 1E8E 0059 0307 1E8F 0079 0307 1E90 005A 0302 1E91 007A 0302 1E92 005A 0323 1E93 007A 0323 1E94 005A 0331 1E95 007A 0331 1E96 0068 0331 1E97 0074 0308 1E98 0077 030A 1E99 0079 030A 1E9B 017F 0307 1EA0 0041 0323 1EA1 0061 0323 1EA2 0041 0309 1EA3 0061 0309 1EA4 00C2 0301 1EA5 00E2 0301 1EA6 00C2 0300 1EA7 00E2 0300 1EA8 00C2 0309 1EA9 00E2 0309 1EAA 00C2 0303 1EAB 00E2 0303 1EAC 1EA0 0302 1EAD 1EA1 0302 1EAE 0102 0301 1EAF 0103 0301 1EB0 0102 0300 1EB1 0103 0300 1EB2 0102 0309 1EB3 0103 0309 1EB4 0102 0303 1EB5 0103 0303 1EB6 1EA0 0306 1EB7 1EA1 0306 1EB8 0045 0323 1EB9 0065 0323 1EBA 0045 0309 1EBB 0065 0309 1EBC 0045 0303 1EBD 0065 0303 1EBE 00CA 0301 1EBF 00EA 0301 1EC0 00CA 0300 1EC1 00EA 0300 1EC2 00CA 0309 1EC3 00EA 0309 1EC4 00CA 0303 1EC5 00EA 0303 1EC6 1EB8 0302 1EC7 1EB9 0302 1EC8 0049 0309 1EC9 0069 0309 1ECA 0049 0323 1ECB 0069 0323 1ECC 004F 0323 1ECD 006F 0323 1ECE 004F 0309 1ECF 006F 0309 1ED0 00D4 0301 1ED1 00F4 0301 1ED2 00D4 0300 1ED3 00F4 0300 1ED4 00D4 0309 1ED5 00F4 0309 1ED6 00D4 0303 1ED7 00F4 0303 1ED8 1ECC 0302 1ED9 1ECD 0302 1EDA 01A0 0301 1EDB 01A1 0301 1EDC 01A0 0300 1EDD 01A1 0300 1EDE 01A0 0309 1EDF 01A1 0309 1EE0 01A0 0303 1EE1 01A1 0303 1EE2 01A0 0323 1EE3 01A1 0323 1EE4 0055 0323 1EE5 0075 0323 1EE6 0055 0309 1EE7 0075 0309 1EE8 01AF 0301 1EE9 01B0 0301 1EEA 01AF 0300 1EEB 01B0 0300 1EEC 01AF 0309 1EED 01B0 0309 1EEE 01AF 0303 1EEF 01B0 0303 1EF0 01AF 0323 1EF1 01B0 0323 1EF2 0059 0300 1EF3 0079 0300 1EF4 0059 0323 1EF5 0079 0323 1EF6 0059 0309 1EF7 0079 0309 1EF8 0059 0303 1EF9 0079 0303 1F00 03B1 0313 1F01 03B1 0314 1F02 1F00 0300 1F03 1F01 0300 1F04 1F00 0301 1F05 1F01 0301 1F06 1F00 0342 1F07 1F01 0342 1F08 0391 0313 1F09 0391 0314 1F0A 1F08 0300 1F0B 1F09 0300 1F0C 1F08 0301 1F0D 1F09 0301 1F0E 1F08 0342 1F0F 1F09 0342 1F10 03B5 0313 1F11 03B5 0314 1F12 1F10 0300 1F13 1F11 0300 1F14 1F10 0301 1F15 1F11 0301 1F18 0395 0313 1F19 0395 0314 1F1A 1F18 0300 1F1B 1F19 0300 1F1C 1F18 0301 1F1D 1F19 0301 1F20 03B7 0313 1F21 03B7 0314 1F22 1F20 0300 1F23 1F21 0300 1F24 1F20 0301 1F25 1F21 0301 1F26 1F20 0342 1F27 1F21 0342 1F28 0397 0313 1F29 0397 0314 1F2A 1F28 0300 1F2B 1F29 0300 1F2C 1F28 0301 1F2D 1F29 0301 1F2E 1F28 0342 1F2F 1F29 0342 1F30 03B9 0313 1F31 03B9 0314 1F32 1F30 0300 1F33 1F31 0300 1F34 1F30 0301 1F35 1F31 0301 1F36 1F30 0342 1F37 1F31 0342 1F38 0399 0313 1F39 0399 0314 1F3A 1F38 0300 1F3B 1F39 0300 1F3C 1F38 0301 1F3D 1F39 0301 1F3E 1F38 0342 1F3F 1F39 0342 1F40 03BF 0313 1F41 03BF 0314 1F42 1F40 0300 1F43 1F41 0300 1F44 1F40 0301 1F45 1F41 0301 1F48 039F 0313 1F49 039F 0314 1F4A 1F48 0300 1F4B 1F49 0300 1F4C 1F48 0301 1F4D 1F49 0301 1F50 03C5 0313 1F51 03C5 0314 1F52 1F50 0300 1F53 1F51 0300 1F54 1F50 0301 1F55 1F51 0301 1F56 1F50 0342 1F57 1F51 0342 1F59 03A5 0314 1F5B 1F59 0300 1F5D 1F59 0301 1F5F 1F59 0342 1F60 03C9 0313 1F61 03C9 0314 1F62 1F60 0300 1F63 1F61 0300 1F64 1F60 0301 1F65 1F61 0301 1F66 1F60 0342 1F67 1F61 0342 1F68 03A9 0313 1F69 03A9 0314 1F6A 1F68 0300 1F6B 1F69 0300 1F6C 1F68 0301 1F6D 1F69 0301 1F6E 1F68 0342 1F6F 1F69 0342 1F70 03B1 0300 1F71 03AC 1F72 03B5 0300 1F73 03AD 1F74 03B7 0300 1F75 03AE 1F76 03B9 0300 1F77 03AF 1F78 03BF 0300 1F79 03CC 1F7A 03C5 0300 1F7B 03CD 1F7C 03C9 0300 1F7D 03CE 1F80 1F00 0345 1F81 1F01 0345 1F82 1F02 0345 1F83 1F03 0345 1F84 1F04 0345 1F85 1F05 0345 1F86 1F06 0345 1F87 1F07 0345 1F88 1F08 0345 1F89 1F09 0345 1F8A 1F0A 0345 1F8B 1F0B 0345 1F8C 1F0C 0345 1F8D 1F0D 0345 1F8E 1F0E 0345 1F8F 1F0F 0345 1F90 1F20 0345 1F91 1F21 0345 1F92 1F22 0345 1F93 1F23 0345 1F94 1F24 0345 1F95 1F25 0345 1F96 1F26 0345 1F97 1F27 0345 1F98 1F28 0345 1F99 1F29 0345 1F9A 1F2A 0345 1F9B 1F2B 0345 1F9C 1F2C 0345 1F9D 1F2D 0345 1F9E 1F2E 0345 1F9F 1F2F 0345 1FA0 1F60 0345 1FA1 1F61 0345 1FA2 1F62 0345 1FA3 1F63 0345 1FA4 1F64 0345 1FA5 1F65 0345 1FA6 1F66 0345 1FA7 1F67 0345 1FA8 1F68 0345 1FA9 1F69 0345 1FAA 1F6A 0345 1FAB 1F6B 0345 1FAC 1F6C 0345 1FAD 1F6D 0345 1FAE 1F6E 0345 1FAF 1F6F 0345 1FB0 03B1 0306 1FB1 03B1 0304 1FB2 1F70 0345 1FB3 03B1 0345 1FB4 03AC 0345 1FB6 03B1 0342 1FB7 1FB6 0345 1FB8 0391 0306 1FB9 0391 0304 1FBA 0391 0300 1FBB 0386 1FBC 0391 0345 1FBE 03B9 1FC1 00A8 0342 1FC2 1F74 0345 1FC3 03B7 0345 1FC4 03AE 0345 1FC6 03B7 0342 1FC7 1FC6 0345 1FC8 0395 0300 1FC9 0388 1FCA 0397 0300 1FCB 0389 1FCC 0397 0345 1FCD 1FBF 0300 1FCE 1FBF 0301 1FCF 1FBF 0342 1FD0 03B9 0306 1FD1 03B9 0304 1FD2 03CA 0300 1FD3 0390 1FD6 03B9 0342 1FD7 03CA 0342 1FD8 0399 0306 1FD9 0399 0304 1FDA 0399 0300 1FDB 038A 1FDD 1FFE 0300 1FDE 1FFE 0301 1FDF 1FFE 0342 1FE0 03C5 0306 1FE1 03C5 0304 1FE2 03CB 0300 1FE3 03B0 1FE4 03C1 0313 1FE5 03C1 0314 1FE6 03C5 0342 1FE7 03CB 0342 1FE8 03A5 0306 1FE9 03A5 0304 1FEA 03A5 0300 1FEB 038E 1FEC 03A1 0314 1FED 00A8 0300 1FEE 0385 1FEF 0060 1FF2 1F7C 0345 1FF3 03C9 0345 1FF4 03CE 0345 1FF6 03C9 0342 1FF7 1FF6 0345 1FF8 039F 0300 1FF9 038C 1FFA 03A9 0300 1FFB 038F 1FFC 03A9 0345 1FFD 00B4 2000 2002 2001 2003 2126 03A9 212A 004B 212B 00C5 219A 2190 0338 219B 2192 0338 21AE 2194 0338 21CD 21D0 0338 21CE 21D4 0338 21CF 21D2 0338 2204 2203 0338 2209 2208 0338 220C 220B 0338 2224 2223 0338 2226 2225 0338 2241 223C 0338 2244 2243 0338 2247 2245 0338 2249 2248 0338 2260 003D 0338 2262 2261 0338 226D 224D 0338 226E 003C 0338 226F 003E 0338 2270 2264 0338 2271 2265 0338 2274 2272 0338 2275 2273 0338 2278 2276 0338 2279 2277 0338 2280 227A 0338 2281 227B 0338 2284 2282 0338 2285 2283 0338 2288 2286 0338 2289 2287 0338 22AC 22A2 0338 22AD 22A8 0338 22AE 22A9 0338 22AF 22AB 0338 22E0 227C 0338 22E1 227D 0338 22E2 2291 0338 22E3 2292 0338 22EA 22B2 0338 22EB 22B3 0338 22EC 22B4 0338 22ED 22B5 0338 2329 3008 232A 3009 2ADC 2ADD 0338 304C 304B 3099 304E 304D 3099 3050 304F 3099 3052 3051 3099 3054 3053 3099 3056 3055 3099 3058 3057 3099 305A 3059 3099 305C 305B 3099 305E 305D 3099 3060 305F 3099 3062 3061 3099 3065 3064 3099 3067 3066 3099 3069 3068 3099 3070 306F 3099 3071 306F 309A 3073 3072 3099 3074 3072 309A 3076 3075 3099 3077 3075 309A 3079 3078 3099 307A 3078 309A 307C 307B 3099 307D 307B 309A 3094 3046 3099 309E 309D 3099 30AC 30AB 3099 30AE 30AD 3099 30B0 30AF 3099 30B2 30B1 3099 30B4 30B3 3099 30B6 30B5 3099 30B8 30B7 3099 30BA 30B9 3099 30BC 30BB 3099 30BE 30BD 3099 30C0 30BF 3099 30C2 30C1 3099 30C5 30C4 3099 30C7 30C6 3099 30C9 30C8 3099 30D0 30CF 3099 30D1 30CF 309A 30D3 30D2 3099 30D4 30D2 309A 30D6 30D5 3099 30D7 30D5 309A 30D9 30D8 3099 30DA 30D8 309A 30DC 30DB 3099 30DD 30DB 309A 30F4 30A6 3099 30F7 30EF 3099 30F8 30F0 3099 30F9 30F1 3099 30FA 30F2 3099 30FE 30FD 3099 F900 8C48 F901 66F4 F902 8ECA F903 8CC8 F904 6ED1 F905 4E32 F906 53E5 F907 9F9C F908 9F9C F909 5951 F90A 91D1 F90B 5587 F90C 5948 F90D 61F6 F90E 7669 F90F 7F85 F910 863F F911 87BA F912 88F8 F913 908F F914 6A02 F915 6D1B F916 70D9 F917 73DE F918 843D F919 916A F91A 99F1 F91B 4E82 F91C 5375 F91D 6B04 F91E 721B F91F 862D F920 9E1E F921 5D50 F922 6FEB F923 85CD F924 8964 F925 62C9 F926 81D8 F927 881F F928 5ECA F929 6717 F92A 6D6A F92B 72FC F92C 90CE F92D 4F86 F92E 51B7 F92F 52DE F930 64C4 F931 6AD3 F932 7210 F933 76E7 F934 8001 F935 8606 F936 865C F937 8DEF F938 9732 F939 9B6F F93A 9DFA F93B 788C F93C 797F F93D 7DA0 F93E 83C9 F93F 9304 F940 9E7F F941 8AD6 F942 58DF F943 5F04 F944 7C60 F945 807E F946 7262 F947 78CA F948 8CC2 F949 96F7 F94A 58D8 F94B 5C62 F94C 6A13 F94D 6DDA F94E 6F0F F94F 7D2F F950 7E37 F951 964B F952 52D2 F953 808B F954 51DC F955 51CC F956 7A1C F957 7DBE F958 83F1 F959 9675 F95A 8B80 F95B 62CF F95C 6A02 F95D 8AFE F95E 4E39 F95F 5BE7 F960 6012 F961 7387 F962 7570 F963 5317 F964 78FB F965 4FBF F966 5FA9 F967 4E0D F968 6CCC F969 6578 F96A 7D22 F96B 53C3 F96C 585E F96D 7701 F96E 8449 F96F 8AAA F970 6BBA F971 8FB0 F972 6C88 F973 62FE F974 82E5 F975 63A0 F976 7565 F977 4EAE F978 5169 F979 51C9 F97A 6881 F97B 7CE7 F97C 826F F97D 8AD2 F97E 91CF F97F 52F5 F980 5442 F981 5973 F982 5EEC F983 65C5 F984 6FFE F985 792A F986 95AD F987 9A6A F988 9E97 F989 9ECE F98A 529B F98B 66C6 F98C 6B77 F98D 8F62 F98E 5E74 F98F 6190 F990 6200 F991 649A F992 6F23 F993 7149 F994 7489 F995 79CA F996 7DF4 F997 806F F998 8F26 F999 84EE F99A 9023 F99B 934A F99C 5217 F99D 52A3 F99E 54BD F99F 70C8 F9A0 88C2 F9A1 8AAA F9A2 5EC9 F9A3 5FF5 F9A4 637B F9A5 6BAE F9A6 7C3E F9A7 7375 F9A8 4EE4 F9A9 56F9 F9AA 5BE7 F9AB 5DBA F9AC 601C F9AD 73B2 F9AE 7469 F9AF 7F9A F9B0 8046 F9B1 9234 F9B2 96F6 F9B3 9748 F9B4 9818 F9B5 4F8B F9B6 79AE F9B7 91B4 F9B8 96B8 F9B9 60E1 F9BA 4E86 F9BB 50DA F9BC 5BEE F9BD 5C3F F9BE 6599 F9BF 6A02 F9C0 71CE F9C1 7642 F9C2 84FC F9C3 907C F9C4 9F8D F9C5 6688 F9C6 962E F9C7 5289 F9C8 677B F9C9 67F3 F9CA 6D41 F9CB 6E9C F9CC 7409 F9CD 7559 F9CE 786B F9CF 7D10 F9D0 985E F9D1 516D F9D2 622E F9D3 9678 F9D4 502B F9D5 5D19 F9D6 6DEA F9D7 8F2A F9D8 5F8B F9D9 6144 F9DA 6817 F9DB 7387 F9DC 9686 F9DD 5229 F9DE 540F F9DF 5C65 F9E0 6613 F9E1 674E F9E2 68A8 F9E3 6CE5 F9E4 7406 F9E5 75E2 F9E6 7F79 F9E7 88CF F9E8 88E1 F9E9 91CC F9EA 96E2 F9EB 533F F9EC 6EBA F9ED 541D F9EE 71D0 F9EF 7498 F9F0 85FA F9F1 96A3 F9F2 9C57 F9F3 9E9F F9F4 6797 F9F5 6DCB F9F6 81E8 F9F7 7ACB F9F8 7B20 F9F9 7C92 F9FA 72C0 F9FB 7099 F9FC 8B58 F9FD 4EC0 F9FE 8336 F9FF 523A FA00 5207 FA01 5EA6 FA02 62D3 FA03 7CD6 FA04 5B85 FA05 6D1E FA06 66B4 FA07 8F3B FA08 884C FA09 964D FA0A 898B FA0B 5ED3 FA0C 5140 FA0D 55C0 FA10 585A FA12 6674 FA15 51DE FA16 732A FA17 76CA FA18 793C FA19 795E FA1A 7965 FA1B 798F FA1C 9756 FA1D 7CBE FA1E 7FBD FA20 8612 FA22 8AF8 FA25 9038 FA26 90FD FA2A 98EF FA2B 98FC FA2C 9928 FA2D 9DB4 FA30 4FAE FA31 50E7 FA32 514D FA33 52C9 FA34 52E4 FA35 5351 FA36 559D FA37 5606 FA38 5668 FA39 5840 FA3A 58A8 FA3B 5C64 FA3C 5C6E FA3D 6094 FA3E 6168 FA3F 618E FA40 61F2 FA41 654F FA42 65E2 FA43 6691 FA44 6885 FA45 6D77 FA46 6E1A FA47 6F22 FA48 716E FA49 722B FA4A 7422 FA4B 7891 FA4C 793E FA4D 7949 FA4E 7948 FA4F 7950 FA50 7956 FA51 795D FA52 798D FA53 798E FA54 7A40 FA55 7A81 FA56 7BC0 FA57 7DF4 FA58 7E09 FA59 7E41 FA5A 7F72 FA5B 8005 FA5C 81ED FA5D 8279 FA5E 8279 FA5F 8457 FA60 8910 FA61 8996 FA62 8B01 FA63 8B39 FA64 8CD3 FA65 8D08 FA66 8FB6 FA67 9038 FA68 96E3 FA69 97FF FA6A 983B FB1D 05D9 05B4 FB1F 05F2 05B7 FB2A 05E9 05C1 FB2B 05E9 05C2 FB2C FB49 05C1 FB2D FB49 05C2 FB2E 05D0 05B7 FB2F 05D0 05B8 FB30 05D0 05BC FB31 05D1 05BC FB32 05D2 05BC FB33 05D3 05BC FB34 05D4 05BC FB35 05D5 05BC FB36 05D6 05BC FB38 05D8 05BC FB39 05D9 05BC FB3A 05DA 05BC FB3B 05DB 05BC FB3C 05DC 05BC FB3E 05DE 05BC FB40 05E0 05BC FB41 05E1 05BC FB43 05E3 05BC FB44 05E4 05BC FB46 05E6 05BC FB47 05E7 05BC FB48 05E8 05BC FB49 05E9 05BC FB4A 05EA 05BC FB4B 05D5 05B9 FB4C 05D1 05BF FB4D 05DB 05BF FB4E 05E4 05BF therion-5.4.1/texenc/encodings/000077500000000000000000000000001307545355600164455ustar00rootroot00000000000000therion-5.4.1/texenc/encodings/cmcyr.enc000066400000000000000000000046421307545355600202570ustar00rootroot00000000000000/cmcyr [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /afii10071 /.notdef /afii10023 /.notdef /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068 /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067 /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092 /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020 /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019 /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /afii61352 /.notdef /.notdef /.notdef /guillemotleft /guillemotright /.notdef /.notdef /afii10044 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def therion-5.4.1/texenc/encodings/raw.enc000066400000000000000000000063531307545355600177340ustar00rootroot00000000000000/TeXraw [ %%%%% '000 = "00 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon %%%%% '010 = "08 /Phi /Psi /Omega /ff /fi /fl /ffi /ffl %%%%% '020 = "10 /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring %%%%% '030 = "18 /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash %%%%% '040 = "20 /.notdef /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright %%%%% '050 = "28 /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash %%%%% '060 = "30 /zero /one /two /three /four /five /six /seven %%%%% '070 = "38 /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question %%%%% '100 = "40 /at /A /B /C /D /E /F /G %%%%% '110 = "48 /H /I /J /K /L /M /N /O %%%%% '120 = "50 /P /Q /R /S /T /U /V /W %%%%% '130 = "58 /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent %%%%% '140 = "60 /quoteleft /a /b /c /d /e /f /g %%%%% '150 = "68 /h /i /j /k /l /m /n /o %%%%% '160 = "70 /p /q /r /s /t /u /v /w %%%%% '170 = "78 /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis %%%%% '200 = "80 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '210 = "88 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '220 = "90 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '230 = "98 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '240 = "A0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '250 = "A8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '260 = "B0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '270 = "B8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '300 = "C0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '310 = "C8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '320 = "D0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '330 = "D8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '340 = "E0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '350 = "E8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '360 = "F0 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '370 = "F8 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef ] def therion-5.4.1/texenc/encodings/xl2.enc000066400000000000000000000077271307545355600176560ustar00rootroot00000000000000/XL2encoding [ %%%%% '000 = "00 /Gamma /Delta /Theta /Lambda /Xi /Pi /Sigma /Upsilon %%%%% '010 = "08 /Phi /Psi /Omega /ff /fi /fl /ffi /ffl %%%%% '020 = "10 /dotlessi /dotlessj /grave /acute /caron /breve /macron /ring %%%%% '030 = "18 /cedilla /germandbls /ae /oe /oslash /AE /OE /Oslash %%%%% '040 = "20 /.notdef /exclam /quotedblright /numbersign /dollar /percent /ampersand /quoteright %%%%% '050 = "28 /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash %%%%% '060 = "30 /zero /one /two /three /four /five /six /seven %%%%% '070 = "38 /eight /nine /colon /semicolon /exclamdown /equal /questiondown /question %%%%% '100 = "40 /at /A /B /C /D /E /F /G %%%%% '110 = "48 /H /I /J /K /L /M /N /O %%%%% '120 = "50 /P /Q /R /S /T /U /V /W %%%%% '130 = "58 /X /Y /Z /bracketleft /quotedblleft /bracketright /circumflex /dotaccent %%%%% '140 = "60 /quoteleft /a /b /c /d /e /f /g %%%%% '150 = "68 /h /i /j /k /l /m /n /o %%%%% '160 = "70 /p /q /r /s /t /u /v /w %%%%% '170 = "78 /x /y /z /endash /emdash /hungarumlaut /tilde /dieresis %%%%% '200 = "80 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '210 = "88 /.notdef /.notdef /.notdef /.notdef /.notdef /perthousand /.notdef /.notdef %%%%% '220 = "90 /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef %%%%% '230 = "98 /Agrave /.notdef /.notdef /.notdef /hyphen /ogonek /guillemotleft /guillemotright %%%%% '240 = "A0 /.notdef /.notdef /.notdef /.notdef /.notdef /Lcaron /.notdef /.notdef %%%%% '250 = "A8 /.notdef /Scaron /.notdef /Tcaron /.notdef /.notdef /Zcaron /.notdef %%%%% '260 = "B0 /.notdef /.notdef /.notdef /.notdef /.notdef /lcaron /.notdef /.notdef %%%%% '270 = "B8 /agrave /scaron /.notdef /tcaron /.notdef /.notdef /zcaron /.notdef %%%%% '300 = "C0 /Racute /Aacute /.notdef /.notdef /Adieresis /Lacute /.notdef /.notdef %%%%% '310 = "C8 /Ccaron /Eacute /.notdef /.notdef /Ecaron /Iacute /.notdef /Dcaron %%%%% '320 = "D0 /.notdef /.notdef /Ncaron /Oacute /Ocircumflex /.notdef /Odieresis /.notdef %%%%% '330 = "D8 /Rcaron /Uring /Uacute /.notdef /Udieresis /Yacute /.notdef /.notdef %%%%% '340 = "E0 /racute /aacute /.notdef /.notdef /adieresis /lacute /.notdef /.notdef %%%%% '350 = "E8 /ccaron /eacute /.notdef /.notdef /ecaron /iacute /.notdef /dcaron %%%%% '360 = "F0 /.notdef /.notdef /ncaron /oacute /ocircumflex /.notdef /odieresis /.notdef %%%%% '370 = "F8 /rcaron /uring /uacute /.notdef /udieresis /yacute /quotedblbase /quotedblleft ] def % LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; % LIGKERN quoteleft quoteleft =: quotedblleft ; % LIGKERN quoteright quoteright =: quotedblright ; % LIGKERN exclamdown exclamdown =: guillemotleft ; % frenchdblquotes % LIGKERN questiondown questiondown =: guillemotright ; % csquoteleft % LIGKERN comma comma =: quotedblbase ; % LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; % LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; % LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; % LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; % LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; % LIGKERN nine {} * ; * {} nine ; % LIGKERN question {} quoteleft ; exclam {} quoteleft ; therion-5.4.1/texenc/glyphlist.txt000066400000000000000000002251251307545355600172630ustar00rootroot00000000000000# Name: Adobe Glyph List # Table version: 2.0 # Date: September 20, 2002 # # See http://partners.adobe.com/asn/developer/typeforum/unicodegn.html # # Format: Semicolon-delimited fields: # (1) glyph name # (2) Unicode scalar value A;0041 AE;00C6 AEacute;01FC AEmacron;01E2 AEsmall;F7E6 Aacute;00C1 Aacutesmall;F7E1 Abreve;0102 Abreveacute;1EAE Abrevecyrillic;04D0 Abrevedotbelow;1EB6 Abrevegrave;1EB0 Abrevehookabove;1EB2 Abrevetilde;1EB4 Acaron;01CD Acircle;24B6 Acircumflex;00C2 Acircumflexacute;1EA4 Acircumflexdotbelow;1EAC Acircumflexgrave;1EA6 Acircumflexhookabove;1EA8 Acircumflexsmall;F7E2 Acircumflextilde;1EAA Acute;F6C9 Acutesmall;F7B4 Acyrillic;0410 Adblgrave;0200 Adieresis;00C4 Adieresiscyrillic;04D2 Adieresismacron;01DE Adieresissmall;F7E4 Adotbelow;1EA0 Adotmacron;01E0 Agrave;00C0 Agravesmall;F7E0 Ahookabove;1EA2 Aiecyrillic;04D4 Ainvertedbreve;0202 Alpha;0391 Alphatonos;0386 Amacron;0100 Amonospace;FF21 Aogonek;0104 Aring;00C5 Aringacute;01FA Aringbelow;1E00 Aringsmall;F7E5 Asmall;F761 Atilde;00C3 Atildesmall;F7E3 Aybarmenian;0531 B;0042 Bcircle;24B7 Bdotaccent;1E02 Bdotbelow;1E04 Becyrillic;0411 Benarmenian;0532 Beta;0392 Bhook;0181 Blinebelow;1E06 Bmonospace;FF22 Brevesmall;F6F4 Bsmall;F762 Btopbar;0182 C;0043 Caarmenian;053E Cacute;0106 Caron;F6CA Caronsmall;F6F5 Ccaron;010C Ccedilla;00C7 Ccedillaacute;1E08 Ccedillasmall;F7E7 Ccircle;24B8 Ccircumflex;0108 Cdot;010A Cdotaccent;010A Cedillasmall;F7B8 Chaarmenian;0549 Cheabkhasiancyrillic;04BC Checyrillic;0427 Chedescenderabkhasiancyrillic;04BE Chedescendercyrillic;04B6 Chedieresiscyrillic;04F4 Cheharmenian;0543 Chekhakassiancyrillic;04CB Cheverticalstrokecyrillic;04B8 Chi;03A7 Chook;0187 Circumflexsmall;F6F6 Cmonospace;FF23 Coarmenian;0551 Csmall;F763 D;0044 DZ;01F1 DZcaron;01C4 Daarmenian;0534 Dafrican;0189 Dcaron;010E Dcedilla;1E10 Dcircle;24B9 Dcircumflexbelow;1E12 Dcroat;0110 Ddotaccent;1E0A Ddotbelow;1E0C Decyrillic;0414 Deicoptic;03EE Delta;2206 Deltagreek;0394 Dhook;018A Dieresis;F6CB DieresisAcute;F6CC DieresisGrave;F6CD Dieresissmall;F7A8 Digammagreek;03DC Djecyrillic;0402 Dlinebelow;1E0E Dmonospace;FF24 Dotaccentsmall;F6F7 Dslash;0110 Dsmall;F764 Dtopbar;018B Dz;01F2 Dzcaron;01C5 Dzeabkhasiancyrillic;04E0 Dzecyrillic;0405 Dzhecyrillic;040F E;0045 Eacute;00C9 Eacutesmall;F7E9 Ebreve;0114 Ecaron;011A Ecedillabreve;1E1C Echarmenian;0535 Ecircle;24BA Ecircumflex;00CA Ecircumflexacute;1EBE Ecircumflexbelow;1E18 Ecircumflexdotbelow;1EC6 Ecircumflexgrave;1EC0 Ecircumflexhookabove;1EC2 Ecircumflexsmall;F7EA Ecircumflextilde;1EC4 Ecyrillic;0404 Edblgrave;0204 Edieresis;00CB Edieresissmall;F7EB Edot;0116 Edotaccent;0116 Edotbelow;1EB8 Efcyrillic;0424 Egrave;00C8 Egravesmall;F7E8 Eharmenian;0537 Ehookabove;1EBA Eightroman;2167 Einvertedbreve;0206 Eiotifiedcyrillic;0464 Elcyrillic;041B Elevenroman;216A Emacron;0112 Emacronacute;1E16 Emacrongrave;1E14 Emcyrillic;041C Emonospace;FF25 Encyrillic;041D Endescendercyrillic;04A2 Eng;014A Enghecyrillic;04A4 Enhookcyrillic;04C7 Eogonek;0118 Eopen;0190 Epsilon;0395 Epsilontonos;0388 Ercyrillic;0420 Ereversed;018E Ereversedcyrillic;042D Escyrillic;0421 Esdescendercyrillic;04AA Esh;01A9 Esmall;F765 Eta;0397 Etarmenian;0538 Etatonos;0389 Eth;00D0 Ethsmall;F7F0 Etilde;1EBC Etildebelow;1E1A Euro;20AC Ezh;01B7 Ezhcaron;01EE Ezhreversed;01B8 F;0046 Fcircle;24BB Fdotaccent;1E1E Feharmenian;0556 Feicoptic;03E4 Fhook;0191 Fitacyrillic;0472 Fiveroman;2164 Fmonospace;FF26 Fourroman;2163 Fsmall;F766 G;0047 GBsquare;3387 Gacute;01F4 Gamma;0393 Gammaafrican;0194 Gangiacoptic;03EA Gbreve;011E Gcaron;01E6 Gcedilla;0122 Gcircle;24BC Gcircumflex;011C Gcommaaccent;0122 Gdot;0120 Gdotaccent;0120 Gecyrillic;0413 Ghadarmenian;0542 Ghemiddlehookcyrillic;0494 Ghestrokecyrillic;0492 Gheupturncyrillic;0490 Ghook;0193 Gimarmenian;0533 Gjecyrillic;0403 Gmacron;1E20 Gmonospace;FF27 Grave;F6CE Gravesmall;F760 Gsmall;F767 Gsmallhook;029B Gstroke;01E4 H;0048 H18533;25CF H18543;25AA H18551;25AB H22073;25A1 HPsquare;33CB Haabkhasiancyrillic;04A8 Hadescendercyrillic;04B2 Hardsigncyrillic;042A Hbar;0126 Hbrevebelow;1E2A Hcedilla;1E28 Hcircle;24BD Hcircumflex;0124 Hdieresis;1E26 Hdotaccent;1E22 Hdotbelow;1E24 Hmonospace;FF28 Hoarmenian;0540 Horicoptic;03E8 Hsmall;F768 Hungarumlaut;F6CF Hungarumlautsmall;F6F8 Hzsquare;3390 I;0049 IAcyrillic;042F IJ;0132 IUcyrillic;042E Iacute;00CD Iacutesmall;F7ED Ibreve;012C Icaron;01CF Icircle;24BE Icircumflex;00CE Icircumflexsmall;F7EE Icyrillic;0406 Idblgrave;0208 Idieresis;00CF Idieresisacute;1E2E Idieresiscyrillic;04E4 Idieresissmall;F7EF Idot;0130 Idotaccent;0130 Idotbelow;1ECA Iebrevecyrillic;04D6 Iecyrillic;0415 Ifraktur;2111 Igrave;00CC Igravesmall;F7EC Ihookabove;1EC8 Iicyrillic;0418 Iinvertedbreve;020A Iishortcyrillic;0419 Imacron;012A Imacroncyrillic;04E2 Imonospace;FF29 Iniarmenian;053B Iocyrillic;0401 Iogonek;012E Iota;0399 Iotaafrican;0196 Iotadieresis;03AA Iotatonos;038A Ismall;F769 Istroke;0197 Itilde;0128 Itildebelow;1E2C Izhitsacyrillic;0474 Izhitsadblgravecyrillic;0476 J;004A Jaarmenian;0541 Jcircle;24BF Jcircumflex;0134 Jecyrillic;0408 Jheharmenian;054B Jmonospace;FF2A Jsmall;F76A K;004B KBsquare;3385 KKsquare;33CD Kabashkircyrillic;04A0 Kacute;1E30 Kacyrillic;041A Kadescendercyrillic;049A Kahookcyrillic;04C3 Kappa;039A Kastrokecyrillic;049E Kaverticalstrokecyrillic;049C Kcaron;01E8 Kcedilla;0136 Kcircle;24C0 Kcommaaccent;0136 Kdotbelow;1E32 Keharmenian;0554 Kenarmenian;053F Khacyrillic;0425 Kheicoptic;03E6 Khook;0198 Kjecyrillic;040C Klinebelow;1E34 Kmonospace;FF2B Koppacyrillic;0480 Koppagreek;03DE Ksicyrillic;046E Ksmall;F76B L;004C LJ;01C7 LL;F6BF Lacute;0139 Lambda;039B Lcaron;013D Lcedilla;013B Lcircle;24C1 Lcircumflexbelow;1E3C Lcommaaccent;013B Ldot;013F Ldotaccent;013F Ldotbelow;1E36 Ldotbelowmacron;1E38 Liwnarmenian;053C Lj;01C8 Ljecyrillic;0409 Llinebelow;1E3A Lmonospace;FF2C Lslash;0141 Lslashsmall;F6F9 Lsmall;F76C M;004D MBsquare;3386 Macron;F6D0 Macronsmall;F7AF Macute;1E3E Mcircle;24C2 Mdotaccent;1E40 Mdotbelow;1E42 Menarmenian;0544 Mmonospace;FF2D Msmall;F76D Mturned;019C Mu;039C N;004E NJ;01CA Nacute;0143 Ncaron;0147 Ncedilla;0145 Ncircle;24C3 Ncircumflexbelow;1E4A Ncommaaccent;0145 Ndotaccent;1E44 Ndotbelow;1E46 Nhookleft;019D Nineroman;2168 Nj;01CB Njecyrillic;040A Nlinebelow;1E48 Nmonospace;FF2E Nowarmenian;0546 Nsmall;F76E Ntilde;00D1 Ntildesmall;F7F1 Nu;039D O;004F OE;0152 OEsmall;F6FA Oacute;00D3 Oacutesmall;F7F3 Obarredcyrillic;04E8 Obarreddieresiscyrillic;04EA Obreve;014E Ocaron;01D1 Ocenteredtilde;019F Ocircle;24C4 Ocircumflex;00D4 Ocircumflexacute;1ED0 Ocircumflexdotbelow;1ED8 Ocircumflexgrave;1ED2 Ocircumflexhookabove;1ED4 Ocircumflexsmall;F7F4 Ocircumflextilde;1ED6 Ocyrillic;041E Odblacute;0150 Odblgrave;020C Odieresis;00D6 Odieresiscyrillic;04E6 Odieresissmall;F7F6 Odotbelow;1ECC Ogoneksmall;F6FB Ograve;00D2 Ogravesmall;F7F2 Oharmenian;0555 Ohm;2126 Ohookabove;1ECE Ohorn;01A0 Ohornacute;1EDA Ohorndotbelow;1EE2 Ohorngrave;1EDC Ohornhookabove;1EDE Ohorntilde;1EE0 Ohungarumlaut;0150 Oi;01A2 Oinvertedbreve;020E Omacron;014C Omacronacute;1E52 Omacrongrave;1E50 Omega;2126 Omegacyrillic;0460 Omegagreek;03A9 Omegaroundcyrillic;047A Omegatitlocyrillic;047C Omegatonos;038F Omicron;039F Omicrontonos;038C Omonospace;FF2F Oneroman;2160 Oogonek;01EA Oogonekmacron;01EC Oopen;0186 Oslash;00D8 Oslashacute;01FE Oslashsmall;F7F8 Osmall;F76F Ostrokeacute;01FE Otcyrillic;047E Otilde;00D5 Otildeacute;1E4C Otildedieresis;1E4E Otildesmall;F7F5 P;0050 Pacute;1E54 Pcircle;24C5 Pdotaccent;1E56 Pecyrillic;041F Peharmenian;054A Pemiddlehookcyrillic;04A6 Phi;03A6 Phook;01A4 Pi;03A0 Piwrarmenian;0553 Pmonospace;FF30 Psi;03A8 Psicyrillic;0470 Psmall;F770 Q;0051 Qcircle;24C6 Qmonospace;FF31 Qsmall;F771 R;0052 Raarmenian;054C Racute;0154 Rcaron;0158 Rcedilla;0156 Rcircle;24C7 Rcommaaccent;0156 Rdblgrave;0210 Rdotaccent;1E58 Rdotbelow;1E5A Rdotbelowmacron;1E5C Reharmenian;0550 Rfraktur;211C Rho;03A1 Ringsmall;F6FC Rinvertedbreve;0212 Rlinebelow;1E5E Rmonospace;FF32 Rsmall;F772 Rsmallinverted;0281 Rsmallinvertedsuperior;02B6 S;0053 SF010000;250C SF020000;2514 SF030000;2510 SF040000;2518 SF050000;253C SF060000;252C SF070000;2534 SF080000;251C SF090000;2524 SF100000;2500 SF110000;2502 SF190000;2561 SF200000;2562 SF210000;2556 SF220000;2555 SF230000;2563 SF240000;2551 SF250000;2557 SF260000;255D SF270000;255C SF280000;255B SF360000;255E SF370000;255F SF380000;255A SF390000;2554 SF400000;2569 SF410000;2566 SF420000;2560 SF430000;2550 SF440000;256C SF450000;2567 SF460000;2568 SF470000;2564 SF480000;2565 SF490000;2559 SF500000;2558 SF510000;2552 SF520000;2553 SF530000;256B SF540000;256A Sacute;015A Sacutedotaccent;1E64 Sampigreek;03E0 Scaron;0160 Scarondotaccent;1E66 Scaronsmall;F6FD Scedilla;015E Schwa;018F Schwacyrillic;04D8 Schwadieresiscyrillic;04DA Scircle;24C8 Scircumflex;015C Scommaaccent;0218 Sdotaccent;1E60 Sdotbelow;1E62 Sdotbelowdotaccent;1E68 Seharmenian;054D Sevenroman;2166 Shaarmenian;0547 Shacyrillic;0428 Shchacyrillic;0429 Sheicoptic;03E2 Shhacyrillic;04BA Shimacoptic;03EC Sigma;03A3 Sixroman;2165 Smonospace;FF33 Softsigncyrillic;042C Ssmall;F773 Stigmagreek;03DA T;0054 Tau;03A4 Tbar;0166 Tcaron;0164 Tcedilla;0162 Tcircle;24C9 Tcircumflexbelow;1E70 Tcommaaccent;0162 Tdotaccent;1E6A Tdotbelow;1E6C Tecyrillic;0422 Tedescendercyrillic;04AC Tenroman;2169 Tetsecyrillic;04B4 Theta;0398 Thook;01AC Thorn;00DE Thornsmall;F7FE Threeroman;2162 Tildesmall;F6FE Tiwnarmenian;054F Tlinebelow;1E6E Tmonospace;FF34 Toarmenian;0539 Tonefive;01BC Tonesix;0184 Tonetwo;01A7 Tretroflexhook;01AE Tsecyrillic;0426 Tshecyrillic;040B Tsmall;F774 Twelveroman;216B Tworoman;2161 U;0055 Uacute;00DA Uacutesmall;F7FA Ubreve;016C Ucaron;01D3 Ucircle;24CA Ucircumflex;00DB Ucircumflexbelow;1E76 Ucircumflexsmall;F7FB Ucyrillic;0423 Udblacute;0170 Udblgrave;0214 Udieresis;00DC Udieresisacute;01D7 Udieresisbelow;1E72 Udieresiscaron;01D9 Udieresiscyrillic;04F0 Udieresisgrave;01DB Udieresismacron;01D5 Udieresissmall;F7FC Udotbelow;1EE4 Ugrave;00D9 Ugravesmall;F7F9 Uhookabove;1EE6 Uhorn;01AF Uhornacute;1EE8 Uhorndotbelow;1EF0 Uhorngrave;1EEA Uhornhookabove;1EEC Uhorntilde;1EEE Uhungarumlaut;0170 Uhungarumlautcyrillic;04F2 Uinvertedbreve;0216 Ukcyrillic;0478 Umacron;016A Umacroncyrillic;04EE Umacrondieresis;1E7A Umonospace;FF35 Uogonek;0172 Upsilon;03A5 Upsilon1;03D2 Upsilonacutehooksymbolgreek;03D3 Upsilonafrican;01B1 Upsilondieresis;03AB Upsilondieresishooksymbolgreek;03D4 Upsilonhooksymbol;03D2 Upsilontonos;038E Uring;016E Ushortcyrillic;040E Usmall;F775 Ustraightcyrillic;04AE Ustraightstrokecyrillic;04B0 Utilde;0168 Utildeacute;1E78 Utildebelow;1E74 V;0056 Vcircle;24CB Vdotbelow;1E7E Vecyrillic;0412 Vewarmenian;054E Vhook;01B2 Vmonospace;FF36 Voarmenian;0548 Vsmall;F776 Vtilde;1E7C W;0057 Wacute;1E82 Wcircle;24CC Wcircumflex;0174 Wdieresis;1E84 Wdotaccent;1E86 Wdotbelow;1E88 Wgrave;1E80 Wmonospace;FF37 Wsmall;F777 X;0058 Xcircle;24CD Xdieresis;1E8C Xdotaccent;1E8A Xeharmenian;053D Xi;039E Xmonospace;FF38 Xsmall;F778 Y;0059 Yacute;00DD Yacutesmall;F7FD Yatcyrillic;0462 Ycircle;24CE Ycircumflex;0176 Ydieresis;0178 Ydieresissmall;F7FF Ydotaccent;1E8E Ydotbelow;1EF4 Yericyrillic;042B Yerudieresiscyrillic;04F8 Ygrave;1EF2 Yhook;01B3 Yhookabove;1EF6 Yiarmenian;0545 Yicyrillic;0407 Yiwnarmenian;0552 Ymonospace;FF39 Ysmall;F779 Ytilde;1EF8 Yusbigcyrillic;046A Yusbigiotifiedcyrillic;046C Yuslittlecyrillic;0466 Yuslittleiotifiedcyrillic;0468 Z;005A Zaarmenian;0536 Zacute;0179 Zcaron;017D Zcaronsmall;F6FF Zcircle;24CF Zcircumflex;1E90 Zdot;017B Zdotaccent;017B Zdotbelow;1E92 Zecyrillic;0417 Zedescendercyrillic;0498 Zedieresiscyrillic;04DE Zeta;0396 Zhearmenian;053A Zhebrevecyrillic;04C1 Zhecyrillic;0416 Zhedescendercyrillic;0496 Zhedieresiscyrillic;04DC Zlinebelow;1E94 Zmonospace;FF3A Zsmall;F77A Zstroke;01B5 a;0061 aabengali;0986 aacute;00E1 aadeva;0906 aagujarati;0A86 aagurmukhi;0A06 aamatragurmukhi;0A3E aarusquare;3303 aavowelsignbengali;09BE aavowelsigndeva;093E aavowelsigngujarati;0ABE abbreviationmarkarmenian;055F abbreviationsigndeva;0970 abengali;0985 abopomofo;311A abreve;0103 abreveacute;1EAF abrevecyrillic;04D1 abrevedotbelow;1EB7 abrevegrave;1EB1 abrevehookabove;1EB3 abrevetilde;1EB5 acaron;01CE acircle;24D0 acircumflex;00E2 acircumflexacute;1EA5 acircumflexdotbelow;1EAD acircumflexgrave;1EA7 acircumflexhookabove;1EA9 acircumflextilde;1EAB acute;00B4 acutebelowcmb;0317 acutecmb;0301 acutecomb;0301 acutedeva;0954 acutelowmod;02CF acutetonecmb;0341 acyrillic;0430 adblgrave;0201 addakgurmukhi;0A71 adeva;0905 adieresis;00E4 adieresiscyrillic;04D3 adieresismacron;01DF adotbelow;1EA1 adotmacron;01E1 ae;00E6 aeacute;01FD aekorean;3150 aemacron;01E3 afii00208;2015 afii08941;20A4 afii10017;0410 afii10018;0411 afii10019;0412 afii10020;0413 afii10021;0414 afii10022;0415 afii10023;0401 afii10024;0416 afii10025;0417 afii10026;0418 afii10027;0419 afii10028;041A afii10029;041B afii10030;041C afii10031;041D afii10032;041E afii10033;041F afii10034;0420 afii10035;0421 afii10036;0422 afii10037;0423 afii10038;0424 afii10039;0425 afii10040;0426 afii10041;0427 afii10042;0428 afii10043;0429 afii10044;042A afii10045;042B afii10046;042C afii10047;042D afii10048;042E afii10049;042F afii10050;0490 afii10051;0402 afii10052;0403 afii10053;0404 afii10054;0405 afii10055;0406 afii10056;0407 afii10057;0408 afii10058;0409 afii10059;040A afii10060;040B afii10061;040C afii10062;040E afii10063;F6C4 afii10064;F6C5 afii10065;0430 afii10066;0431 afii10067;0432 afii10068;0433 afii10069;0434 afii10070;0435 afii10071;0451 afii10072;0436 afii10073;0437 afii10074;0438 afii10075;0439 afii10076;043A afii10077;043B afii10078;043C afii10079;043D afii10080;043E afii10081;043F afii10082;0440 afii10083;0441 afii10084;0442 afii10085;0443 afii10086;0444 afii10087;0445 afii10088;0446 afii10089;0447 afii10090;0448 afii10091;0449 afii10092;044A afii10093;044B afii10094;044C afii10095;044D afii10096;044E afii10097;044F afii10098;0491 afii10099;0452 afii10100;0453 afii10101;0454 afii10102;0455 afii10103;0456 afii10104;0457 afii10105;0458 afii10106;0459 afii10107;045A afii10108;045B afii10109;045C afii10110;045E afii10145;040F afii10146;0462 afii10147;0472 afii10148;0474 afii10192;F6C6 afii10193;045F afii10194;0463 afii10195;0473 afii10196;0475 afii10831;F6C7 afii10832;F6C8 afii10846;04D9 afii299;200E afii300;200F afii301;200D afii57381;066A afii57388;060C afii57392;0660 afii57393;0661 afii57394;0662 afii57395;0663 afii57396;0664 afii57397;0665 afii57398;0666 afii57399;0667 afii57400;0668 afii57401;0669 afii57403;061B afii57407;061F afii57409;0621 afii57410;0622 afii57411;0623 afii57412;0624 afii57413;0625 afii57414;0626 afii57415;0627 afii57416;0628 afii57417;0629 afii57418;062A afii57419;062B afii57420;062C afii57421;062D afii57422;062E afii57423;062F afii57424;0630 afii57425;0631 afii57426;0632 afii57427;0633 afii57428;0634 afii57429;0635 afii57430;0636 afii57431;0637 afii57432;0638 afii57433;0639 afii57434;063A afii57440;0640 afii57441;0641 afii57442;0642 afii57443;0643 afii57444;0644 afii57445;0645 afii57446;0646 afii57448;0648 afii57449;0649 afii57450;064A afii57451;064B afii57452;064C afii57453;064D afii57454;064E afii57455;064F afii57456;0650 afii57457;0651 afii57458;0652 afii57470;0647 afii57505;06A4 afii57506;067E afii57507;0686 afii57508;0698 afii57509;06AF afii57511;0679 afii57512;0688 afii57513;0691 afii57514;06BA afii57519;06D2 afii57534;06D5 afii57636;20AA afii57645;05BE afii57658;05C3 afii57664;05D0 afii57665;05D1 afii57666;05D2 afii57667;05D3 afii57668;05D4 afii57669;05D5 afii57670;05D6 afii57671;05D7 afii57672;05D8 afii57673;05D9 afii57674;05DA afii57675;05DB afii57676;05DC afii57677;05DD afii57678;05DE afii57679;05DF afii57680;05E0 afii57681;05E1 afii57682;05E2 afii57683;05E3 afii57684;05E4 afii57685;05E5 afii57686;05E6 afii57687;05E7 afii57688;05E8 afii57689;05E9 afii57690;05EA afii57694;FB2A afii57695;FB2B afii57700;FB4B afii57705;FB1F afii57716;05F0 afii57717;05F1 afii57718;05F2 afii57723;FB35 afii57793;05B4 afii57794;05B5 afii57795;05B6 afii57796;05BB afii57797;05B8 afii57798;05B7 afii57799;05B0 afii57800;05B2 afii57801;05B1 afii57802;05B3 afii57803;05C2 afii57804;05C1 afii57806;05B9 afii57807;05BC afii57839;05BD afii57841;05BF afii57842;05C0 afii57929;02BC afii61248;2105 afii61289;2113 afii61352;2116 afii61573;202C afii61574;202D afii61575;202E afii61664;200C afii63167;066D afii64937;02BD agrave;00E0 agujarati;0A85 agurmukhi;0A05 ahiragana;3042 ahookabove;1EA3 aibengali;0990 aibopomofo;311E aideva;0910 aiecyrillic;04D5 aigujarati;0A90 aigurmukhi;0A10 aimatragurmukhi;0A48 ainarabic;0639 ainfinalarabic;FECA aininitialarabic;FECB ainmedialarabic;FECC ainvertedbreve;0203 aivowelsignbengali;09C8 aivowelsigndeva;0948 aivowelsigngujarati;0AC8 akatakana;30A2 akatakanahalfwidth;FF71 akorean;314F alef;05D0 alefarabic;0627 alefdageshhebrew;FB30 aleffinalarabic;FE8E alefhamzaabovearabic;0623 alefhamzaabovefinalarabic;FE84 alefhamzabelowarabic;0625 alefhamzabelowfinalarabic;FE88 alefhebrew;05D0 aleflamedhebrew;FB4F alefmaddaabovearabic;0622 alefmaddaabovefinalarabic;FE82 alefmaksuraarabic;0649 alefmaksurafinalarabic;FEF0 alefmaksurainitialarabic;FEF3 alefmaksuramedialarabic;FEF4 alefpatahhebrew;FB2E alefqamatshebrew;FB2F aleph;2135 allequal;224C alpha;03B1 alphatonos;03AC amacron;0101 amonospace;FF41 ampersand;0026 ampersandmonospace;FF06 ampersandsmall;F726 amsquare;33C2 anbopomofo;3122 angbopomofo;3124 angkhankhuthai;0E5A angle;2220 anglebracketleft;3008 anglebracketleftvertical;FE3F anglebracketright;3009 anglebracketrightvertical;FE40 angleleft;2329 angleright;232A angstrom;212B anoteleia;0387 anudattadeva;0952 anusvarabengali;0982 anusvaradeva;0902 anusvaragujarati;0A82 aogonek;0105 apaatosquare;3300 aparen;249C apostrophearmenian;055A apostrophemod;02BC apple;F8FF approaches;2250 approxequal;2248 approxequalorimage;2252 approximatelyequal;2245 araeaekorean;318E araeakorean;318D arc;2312 arighthalfring;1E9A aring;00E5 aringacute;01FB aringbelow;1E01 arrowboth;2194 arrowdashdown;21E3 arrowdashleft;21E0 arrowdashright;21E2 arrowdashup;21E1 arrowdblboth;21D4 arrowdbldown;21D3 arrowdblleft;21D0 arrowdblright;21D2 arrowdblup;21D1 arrowdown;2193 arrowdownleft;2199 arrowdownright;2198 arrowdownwhite;21E9 arrowheaddownmod;02C5 arrowheadleftmod;02C2 arrowheadrightmod;02C3 arrowheadupmod;02C4 arrowhorizex;F8E7 arrowleft;2190 arrowleftdbl;21D0 arrowleftdblstroke;21CD arrowleftoverright;21C6 arrowleftwhite;21E6 arrowright;2192 arrowrightdblstroke;21CF arrowrightheavy;279E arrowrightoverleft;21C4 arrowrightwhite;21E8 arrowtableft;21E4 arrowtabright;21E5 arrowup;2191 arrowupdn;2195 arrowupdnbse;21A8 arrowupdownbase;21A8 arrowupleft;2196 arrowupleftofdown;21C5 arrowupright;2197 arrowupwhite;21E7 arrowvertex;F8E6 asciicircum;005E asciicircummonospace;FF3E asciitilde;007E asciitildemonospace;FF5E ascript;0251 ascriptturned;0252 asmallhiragana;3041 asmallkatakana;30A1 asmallkatakanahalfwidth;FF67 asterisk;002A asteriskaltonearabic;066D asteriskarabic;066D asteriskmath;2217 asteriskmonospace;FF0A asterisksmall;FE61 asterism;2042 asuperior;F6E9 asymptoticallyequal;2243 at;0040 atilde;00E3 atmonospace;FF20 atsmall;FE6B aturned;0250 aubengali;0994 aubopomofo;3120 audeva;0914 augujarati;0A94 augurmukhi;0A14 aulengthmarkbengali;09D7 aumatragurmukhi;0A4C auvowelsignbengali;09CC auvowelsigndeva;094C auvowelsigngujarati;0ACC avagrahadeva;093D aybarmenian;0561 ayin;05E2 ayinaltonehebrew;FB20 ayinhebrew;05E2 b;0062 babengali;09AC backslash;005C backslashmonospace;FF3C badeva;092C bagujarati;0AAC bagurmukhi;0A2C bahiragana;3070 bahtthai;0E3F bakatakana;30D0 bar;007C barmonospace;FF5C bbopomofo;3105 bcircle;24D1 bdotaccent;1E03 bdotbelow;1E05 beamedsixteenthnotes;266C because;2235 becyrillic;0431 beharabic;0628 behfinalarabic;FE90 behinitialarabic;FE91 behiragana;3079 behmedialarabic;FE92 behmeeminitialarabic;FC9F behmeemisolatedarabic;FC08 behnoonfinalarabic;FC6D bekatakana;30D9 benarmenian;0562 bet;05D1 beta;03B2 betasymbolgreek;03D0 betdagesh;FB31 betdageshhebrew;FB31 bethebrew;05D1 betrafehebrew;FB4C bhabengali;09AD bhadeva;092D bhagujarati;0AAD bhagurmukhi;0A2D bhook;0253 bihiragana;3073 bikatakana;30D3 bilabialclick;0298 bindigurmukhi;0A02 birusquare;3331 blackcircle;25CF blackdiamond;25C6 blackdownpointingtriangle;25BC blackleftpointingpointer;25C4 blackleftpointingtriangle;25C0 blacklenticularbracketleft;3010 blacklenticularbracketleftvertical;FE3B blacklenticularbracketright;3011 blacklenticularbracketrightvertical;FE3C blacklowerlefttriangle;25E3 blacklowerrighttriangle;25E2 blackrectangle;25AC blackrightpointingpointer;25BA blackrightpointingtriangle;25B6 blacksmallsquare;25AA blacksmilingface;263B blacksquare;25A0 blackstar;2605 blackupperlefttriangle;25E4 blackupperrighttriangle;25E5 blackuppointingsmalltriangle;25B4 blackuppointingtriangle;25B2 blank;2423 blinebelow;1E07 block;2588 bmonospace;FF42 bobaimaithai;0E1A bohiragana;307C bokatakana;30DC bparen;249D bqsquare;33C3 braceex;F8F4 braceleft;007B braceleftbt;F8F3 braceleftmid;F8F2 braceleftmonospace;FF5B braceleftsmall;FE5B bracelefttp;F8F1 braceleftvertical;FE37 braceright;007D bracerightbt;F8FE bracerightmid;F8FD bracerightmonospace;FF5D bracerightsmall;FE5C bracerighttp;F8FC bracerightvertical;FE38 bracketleft;005B bracketleftbt;F8F0 bracketleftex;F8EF bracketleftmonospace;FF3B bracketlefttp;F8EE bracketright;005D bracketrightbt;F8FB bracketrightex;F8FA bracketrightmonospace;FF3D bracketrighttp;F8F9 breve;02D8 brevebelowcmb;032E brevecmb;0306 breveinvertedbelowcmb;032F breveinvertedcmb;0311 breveinverteddoublecmb;0361 bridgebelowcmb;032A bridgeinvertedbelowcmb;033A brokenbar;00A6 bstroke;0180 bsuperior;F6EA btopbar;0183 buhiragana;3076 bukatakana;30D6 bullet;2022 bulletinverse;25D8 bulletoperator;2219 bullseye;25CE c;0063 caarmenian;056E cabengali;099A cacute;0107 cadeva;091A cagujarati;0A9A cagurmukhi;0A1A calsquare;3388 candrabindubengali;0981 candrabinducmb;0310 candrabindudeva;0901 candrabindugujarati;0A81 capslock;21EA careof;2105 caron;02C7 caronbelowcmb;032C caroncmb;030C carriagereturn;21B5 cbopomofo;3118 ccaron;010D ccedilla;00E7 ccedillaacute;1E09 ccircle;24D2 ccircumflex;0109 ccurl;0255 cdot;010B cdotaccent;010B cdsquare;33C5 cedilla;00B8 cedillacmb;0327 cent;00A2 centigrade;2103 centinferior;F6DF centmonospace;FFE0 centoldstyle;F7A2 centsuperior;F6E0 chaarmenian;0579 chabengali;099B chadeva;091B chagujarati;0A9B chagurmukhi;0A1B chbopomofo;3114 cheabkhasiancyrillic;04BD checkmark;2713 checyrillic;0447 chedescenderabkhasiancyrillic;04BF chedescendercyrillic;04B7 chedieresiscyrillic;04F5 cheharmenian;0573 chekhakassiancyrillic;04CC cheverticalstrokecyrillic;04B9 chi;03C7 chieuchacirclekorean;3277 chieuchaparenkorean;3217 chieuchcirclekorean;3269 chieuchkorean;314A chieuchparenkorean;3209 chochangthai;0E0A chochanthai;0E08 chochingthai;0E09 chochoethai;0E0C chook;0188 cieucacirclekorean;3276 cieucaparenkorean;3216 cieuccirclekorean;3268 cieuckorean;3148 cieucparenkorean;3208 cieucuparenkorean;321C circle;25CB circlemultiply;2297 circleot;2299 circleplus;2295 circlepostalmark;3036 circlewithlefthalfblack;25D0 circlewithrighthalfblack;25D1 circumflex;02C6 circumflexbelowcmb;032D circumflexcmb;0302 clear;2327 clickalveolar;01C2 clickdental;01C0 clicklateral;01C1 clickretroflex;01C3 club;2663 clubsuitblack;2663 clubsuitwhite;2667 cmcubedsquare;33A4 cmonospace;FF43 cmsquaredsquare;33A0 coarmenian;0581 colon;003A colonmonetary;20A1 colonmonospace;FF1A colonsign;20A1 colonsmall;FE55 colontriangularhalfmod;02D1 colontriangularmod;02D0 comma;002C commaabovecmb;0313 commaaboverightcmb;0315 commaaccent;F6C3 commaarabic;060C commaarmenian;055D commainferior;F6E1 commamonospace;FF0C commareversedabovecmb;0314 commareversedmod;02BD commasmall;FE50 commasuperior;F6E2 commaturnedabovecmb;0312 commaturnedmod;02BB compass;263C congruent;2245 contourintegral;222E control;2303 controlACK;0006 controlBEL;0007 controlBS;0008 controlCAN;0018 controlCR;000D controlDC1;0011 controlDC2;0012 controlDC3;0013 controlDC4;0014 controlDEL;007F controlDLE;0010 controlEM;0019 controlENQ;0005 controlEOT;0004 controlESC;001B controlETB;0017 controlETX;0003 controlFF;000C controlFS;001C controlGS;001D controlHT;0009 controlLF;000A controlNAK;0015 controlRS;001E controlSI;000F controlSO;000E controlSOT;0002 controlSTX;0001 controlSUB;001A controlSYN;0016 controlUS;001F controlVT;000B copyright;00A9 copyrightsans;F8E9 copyrightserif;F6D9 cornerbracketleft;300C cornerbracketlefthalfwidth;FF62 cornerbracketleftvertical;FE41 cornerbracketright;300D cornerbracketrighthalfwidth;FF63 cornerbracketrightvertical;FE42 corporationsquare;337F cosquare;33C7 coverkgsquare;33C6 cparen;249E cruzeiro;20A2 cstretched;0297 curlyand;22CF curlyor;22CE currency;00A4 cyrBreve;F6D1 cyrFlex;F6D2 cyrbreve;F6D4 cyrflex;F6D5 d;0064 daarmenian;0564 dabengali;09A6 dadarabic;0636 dadeva;0926 dadfinalarabic;FEBE dadinitialarabic;FEBF dadmedialarabic;FEC0 dagesh;05BC dageshhebrew;05BC dagger;2020 daggerdbl;2021 dagujarati;0AA6 dagurmukhi;0A26 dahiragana;3060 dakatakana;30C0 dalarabic;062F dalet;05D3 daletdagesh;FB33 daletdageshhebrew;FB33 dalethatafpatah;05D3 05B2 dalethatafpatahhebrew;05D3 05B2 dalethatafsegol;05D3 05B1 dalethatafsegolhebrew;05D3 05B1 dalethebrew;05D3 dalethiriq;05D3 05B4 dalethiriqhebrew;05D3 05B4 daletholam;05D3 05B9 daletholamhebrew;05D3 05B9 daletpatah;05D3 05B7 daletpatahhebrew;05D3 05B7 daletqamats;05D3 05B8 daletqamatshebrew;05D3 05B8 daletqubuts;05D3 05BB daletqubutshebrew;05D3 05BB daletsegol;05D3 05B6 daletsegolhebrew;05D3 05B6 daletsheva;05D3 05B0 daletshevahebrew;05D3 05B0 dalettsere;05D3 05B5 dalettserehebrew;05D3 05B5 dalfinalarabic;FEAA dammaarabic;064F dammalowarabic;064F dammatanaltonearabic;064C dammatanarabic;064C danda;0964 dargahebrew;05A7 dargalefthebrew;05A7 dasiapneumatacyrilliccmb;0485 dblGrave;F6D3 dblanglebracketleft;300A dblanglebracketleftvertical;FE3D dblanglebracketright;300B dblanglebracketrightvertical;FE3E dblarchinvertedbelowcmb;032B dblarrowleft;21D4 dblarrowright;21D2 dbldanda;0965 dblgrave;F6D6 dblgravecmb;030F dblintegral;222C dbllowline;2017 dbllowlinecmb;0333 dbloverlinecmb;033F dblprimemod;02BA dblverticalbar;2016 dblverticallineabovecmb;030E dbopomofo;3109 dbsquare;33C8 dcaron;010F dcedilla;1E11 dcircle;24D3 dcircumflexbelow;1E13 dcroat;0111 ddabengali;09A1 ddadeva;0921 ddagujarati;0AA1 ddagurmukhi;0A21 ddalarabic;0688 ddalfinalarabic;FB89 dddhadeva;095C ddhabengali;09A2 ddhadeva;0922 ddhagujarati;0AA2 ddhagurmukhi;0A22 ddotaccent;1E0B ddotbelow;1E0D decimalseparatorarabic;066B decimalseparatorpersian;066B decyrillic;0434 degree;00B0 dehihebrew;05AD dehiragana;3067 deicoptic;03EF dekatakana;30C7 deleteleft;232B deleteright;2326 delta;03B4 deltaturned;018D denominatorminusonenumeratorbengali;09F8 dezh;02A4 dhabengali;09A7 dhadeva;0927 dhagujarati;0AA7 dhagurmukhi;0A27 dhook;0257 dialytikatonos;0385 dialytikatonoscmb;0344 diamond;2666 diamondsuitwhite;2662 dieresis;00A8 dieresisacute;F6D7 dieresisbelowcmb;0324 dieresiscmb;0308 dieresisgrave;F6D8 dieresistonos;0385 dihiragana;3062 dikatakana;30C2 dittomark;3003 divide;00F7 divides;2223 divisionslash;2215 djecyrillic;0452 dkshade;2593 dlinebelow;1E0F dlsquare;3397 dmacron;0111 dmonospace;FF44 dnblock;2584 dochadathai;0E0E dodekthai;0E14 dohiragana;3069 dokatakana;30C9 dollar;0024 dollarinferior;F6E3 dollarmonospace;FF04 dollaroldstyle;F724 dollarsmall;FE69 dollarsuperior;F6E4 dong;20AB dorusquare;3326 dotaccent;02D9 dotaccentcmb;0307 dotbelowcmb;0323 dotbelowcomb;0323 dotkatakana;30FB dotlessi;0131 dotlessj;F6BE dotlessjstrokehook;0284 dotmath;22C5 dottedcircle;25CC doubleyodpatah;FB1F doubleyodpatahhebrew;FB1F downtackbelowcmb;031E downtackmod;02D5 dparen;249F dsuperior;F6EB dtail;0256 dtopbar;018C duhiragana;3065 dukatakana;30C5 dz;01F3 dzaltone;02A3 dzcaron;01C6 dzcurl;02A5 dzeabkhasiancyrillic;04E1 dzecyrillic;0455 dzhecyrillic;045F e;0065 eacute;00E9 earth;2641 ebengali;098F ebopomofo;311C ebreve;0115 ecandradeva;090D ecandragujarati;0A8D ecandravowelsigndeva;0945 ecandravowelsigngujarati;0AC5 ecaron;011B ecedillabreve;1E1D echarmenian;0565 echyiwnarmenian;0587 ecircle;24D4 ecircumflex;00EA ecircumflexacute;1EBF ecircumflexbelow;1E19 ecircumflexdotbelow;1EC7 ecircumflexgrave;1EC1 ecircumflexhookabove;1EC3 ecircumflextilde;1EC5 ecyrillic;0454 edblgrave;0205 edeva;090F edieresis;00EB edot;0117 edotaccent;0117 edotbelow;1EB9 eegurmukhi;0A0F eematragurmukhi;0A47 efcyrillic;0444 egrave;00E8 egujarati;0A8F eharmenian;0567 ehbopomofo;311D ehiragana;3048 ehookabove;1EBB eibopomofo;311F eight;0038 eightarabic;0668 eightbengali;09EE eightcircle;2467 eightcircleinversesansserif;2791 eightdeva;096E eighteencircle;2471 eighteenparen;2485 eighteenperiod;2499 eightgujarati;0AEE eightgurmukhi;0A6E eighthackarabic;0668 eighthangzhou;3028 eighthnotebeamed;266B eightideographicparen;3227 eightinferior;2088 eightmonospace;FF18 eightoldstyle;F738 eightparen;247B eightperiod;248F eightpersian;06F8 eightroman;2177 eightsuperior;2078 eightthai;0E58 einvertedbreve;0207 eiotifiedcyrillic;0465 ekatakana;30A8 ekatakanahalfwidth;FF74 ekonkargurmukhi;0A74 ekorean;3154 elcyrillic;043B element;2208 elevencircle;246A elevenparen;247E elevenperiod;2492 elevenroman;217A ellipsis;2026 ellipsisvertical;22EE emacron;0113 emacronacute;1E17 emacrongrave;1E15 emcyrillic;043C emdash;2014 emdashvertical;FE31 emonospace;FF45 emphasismarkarmenian;055B emptyset;2205 enbopomofo;3123 encyrillic;043D endash;2013 endashvertical;FE32 endescendercyrillic;04A3 eng;014B engbopomofo;3125 enghecyrillic;04A5 enhookcyrillic;04C8 enspace;2002 eogonek;0119 eokorean;3153 eopen;025B eopenclosed;029A eopenreversed;025C eopenreversedclosed;025E eopenreversedhook;025D eparen;24A0 epsilon;03B5 epsilontonos;03AD equal;003D equalmonospace;FF1D equalsmall;FE66 equalsuperior;207C equivalence;2261 erbopomofo;3126 ercyrillic;0440 ereversed;0258 ereversedcyrillic;044D escyrillic;0441 esdescendercyrillic;04AB esh;0283 eshcurl;0286 eshortdeva;090E eshortvowelsigndeva;0946 eshreversedloop;01AA eshsquatreversed;0285 esmallhiragana;3047 esmallkatakana;30A7 esmallkatakanahalfwidth;FF6A estimated;212E esuperior;F6EC eta;03B7 etarmenian;0568 etatonos;03AE eth;00F0 etilde;1EBD etildebelow;1E1B etnahtafoukhhebrew;0591 etnahtafoukhlefthebrew;0591 etnahtahebrew;0591 etnahtalefthebrew;0591 eturned;01DD eukorean;3161 euro;20AC evowelsignbengali;09C7 evowelsigndeva;0947 evowelsigngujarati;0AC7 exclam;0021 exclamarmenian;055C exclamdbl;203C exclamdown;00A1 exclamdownsmall;F7A1 exclammonospace;FF01 exclamsmall;F721 existential;2203 ezh;0292 ezhcaron;01EF ezhcurl;0293 ezhreversed;01B9 ezhtail;01BA f;0066 fadeva;095E fagurmukhi;0A5E fahrenheit;2109 fathaarabic;064E fathalowarabic;064E fathatanarabic;064B fbopomofo;3108 fcircle;24D5 fdotaccent;1E1F feharabic;0641 feharmenian;0586 fehfinalarabic;FED2 fehinitialarabic;FED3 fehmedialarabic;FED4 feicoptic;03E5 female;2640 ff;FB00 ffi;FB03 ffl;FB04 fi;FB01 fifteencircle;246E fifteenparen;2482 fifteenperiod;2496 figuredash;2012 filledbox;25A0 filledrect;25AC finalkaf;05DA finalkafdagesh;FB3A finalkafdageshhebrew;FB3A finalkafhebrew;05DA finalkafqamats;05DA 05B8 finalkafqamatshebrew;05DA 05B8 finalkafsheva;05DA 05B0 finalkafshevahebrew;05DA 05B0 finalmem;05DD finalmemhebrew;05DD finalnun;05DF finalnunhebrew;05DF finalpe;05E3 finalpehebrew;05E3 finaltsadi;05E5 finaltsadihebrew;05E5 firsttonechinese;02C9 fisheye;25C9 fitacyrillic;0473 five;0035 fivearabic;0665 fivebengali;09EB fivecircle;2464 fivecircleinversesansserif;278E fivedeva;096B fiveeighths;215D fivegujarati;0AEB fivegurmukhi;0A6B fivehackarabic;0665 fivehangzhou;3025 fiveideographicparen;3224 fiveinferior;2085 fivemonospace;FF15 fiveoldstyle;F735 fiveparen;2478 fiveperiod;248C fivepersian;06F5 fiveroman;2174 fivesuperior;2075 fivethai;0E55 fl;FB02 florin;0192 fmonospace;FF46 fmsquare;3399 fofanthai;0E1F fofathai;0E1D fongmanthai;0E4F forall;2200 four;0034 fourarabic;0664 fourbengali;09EA fourcircle;2463 fourcircleinversesansserif;278D fourdeva;096A fourgujarati;0AEA fourgurmukhi;0A6A fourhackarabic;0664 fourhangzhou;3024 fourideographicparen;3223 fourinferior;2084 fourmonospace;FF14 fournumeratorbengali;09F7 fouroldstyle;F734 fourparen;2477 fourperiod;248B fourpersian;06F4 fourroman;2173 foursuperior;2074 fourteencircle;246D fourteenparen;2481 fourteenperiod;2495 fourthai;0E54 fourthtonechinese;02CB fparen;24A1 fraction;2044 franc;20A3 g;0067 gabengali;0997 gacute;01F5 gadeva;0917 gafarabic;06AF gaffinalarabic;FB93 gafinitialarabic;FB94 gafmedialarabic;FB95 gagujarati;0A97 gagurmukhi;0A17 gahiragana;304C gakatakana;30AC gamma;03B3 gammalatinsmall;0263 gammasuperior;02E0 gangiacoptic;03EB gbopomofo;310D gbreve;011F gcaron;01E7 gcedilla;0123 gcircle;24D6 gcircumflex;011D gcommaaccent;0123 gdot;0121 gdotaccent;0121 gecyrillic;0433 gehiragana;3052 gekatakana;30B2 geometricallyequal;2251 gereshaccenthebrew;059C gereshhebrew;05F3 gereshmuqdamhebrew;059D germandbls;00DF gershayimaccenthebrew;059E gershayimhebrew;05F4 getamark;3013 ghabengali;0998 ghadarmenian;0572 ghadeva;0918 ghagujarati;0A98 ghagurmukhi;0A18 ghainarabic;063A ghainfinalarabic;FECE ghaininitialarabic;FECF ghainmedialarabic;FED0 ghemiddlehookcyrillic;0495 ghestrokecyrillic;0493 gheupturncyrillic;0491 ghhadeva;095A ghhagurmukhi;0A5A ghook;0260 ghzsquare;3393 gihiragana;304E gikatakana;30AE gimarmenian;0563 gimel;05D2 gimeldagesh;FB32 gimeldageshhebrew;FB32 gimelhebrew;05D2 gjecyrillic;0453 glottalinvertedstroke;01BE glottalstop;0294 glottalstopinverted;0296 glottalstopmod;02C0 glottalstopreversed;0295 glottalstopreversedmod;02C1 glottalstopreversedsuperior;02E4 glottalstopstroke;02A1 glottalstopstrokereversed;02A2 gmacron;1E21 gmonospace;FF47 gohiragana;3054 gokatakana;30B4 gparen;24A2 gpasquare;33AC gradient;2207 grave;0060 gravebelowcmb;0316 gravecmb;0300 gravecomb;0300 gravedeva;0953 gravelowmod;02CE gravemonospace;FF40 gravetonecmb;0340 greater;003E greaterequal;2265 greaterequalorless;22DB greatermonospace;FF1E greaterorequivalent;2273 greaterorless;2277 greateroverequal;2267 greatersmall;FE65 gscript;0261 gstroke;01E5 guhiragana;3050 guillemotleft;00AB guillemotright;00BB guilsinglleft;2039 guilsinglright;203A gukatakana;30B0 guramusquare;3318 gysquare;33C9 h;0068 haabkhasiancyrillic;04A9 haaltonearabic;06C1 habengali;09B9 hadescendercyrillic;04B3 hadeva;0939 hagujarati;0AB9 hagurmukhi;0A39 haharabic;062D hahfinalarabic;FEA2 hahinitialarabic;FEA3 hahiragana;306F hahmedialarabic;FEA4 haitusquare;332A hakatakana;30CF hakatakanahalfwidth;FF8A halantgurmukhi;0A4D hamzaarabic;0621 hamzadammaarabic;0621 064F hamzadammatanarabic;0621 064C hamzafathaarabic;0621 064E hamzafathatanarabic;0621 064B hamzalowarabic;0621 hamzalowkasraarabic;0621 0650 hamzalowkasratanarabic;0621 064D hamzasukunarabic;0621 0652 hangulfiller;3164 hardsigncyrillic;044A harpoonleftbarbup;21BC harpoonrightbarbup;21C0 hasquare;33CA hatafpatah;05B2 hatafpatah16;05B2 hatafpatah23;05B2 hatafpatah2f;05B2 hatafpatahhebrew;05B2 hatafpatahnarrowhebrew;05B2 hatafpatahquarterhebrew;05B2 hatafpatahwidehebrew;05B2 hatafqamats;05B3 hatafqamats1b;05B3 hatafqamats28;05B3 hatafqamats34;05B3 hatafqamatshebrew;05B3 hatafqamatsnarrowhebrew;05B3 hatafqamatsquarterhebrew;05B3 hatafqamatswidehebrew;05B3 hatafsegol;05B1 hatafsegol17;05B1 hatafsegol24;05B1 hatafsegol30;05B1 hatafsegolhebrew;05B1 hatafsegolnarrowhebrew;05B1 hatafsegolquarterhebrew;05B1 hatafsegolwidehebrew;05B1 hbar;0127 hbopomofo;310F hbrevebelow;1E2B hcedilla;1E29 hcircle;24D7 hcircumflex;0125 hdieresis;1E27 hdotaccent;1E23 hdotbelow;1E25 he;05D4 heart;2665 heartsuitblack;2665 heartsuitwhite;2661 hedagesh;FB34 hedageshhebrew;FB34 hehaltonearabic;06C1 heharabic;0647 hehebrew;05D4 hehfinalaltonearabic;FBA7 hehfinalalttwoarabic;FEEA hehfinalarabic;FEEA hehhamzaabovefinalarabic;FBA5 hehhamzaaboveisolatedarabic;FBA4 hehinitialaltonearabic;FBA8 hehinitialarabic;FEEB hehiragana;3078 hehmedialaltonearabic;FBA9 hehmedialarabic;FEEC heiseierasquare;337B hekatakana;30D8 hekatakanahalfwidth;FF8D hekutaarusquare;3336 henghook;0267 herutusquare;3339 het;05D7 hethebrew;05D7 hhook;0266 hhooksuperior;02B1 hieuhacirclekorean;327B hieuhaparenkorean;321B hieuhcirclekorean;326D hieuhkorean;314E hieuhparenkorean;320D hihiragana;3072 hikatakana;30D2 hikatakanahalfwidth;FF8B hiriq;05B4 hiriq14;05B4 hiriq21;05B4 hiriq2d;05B4 hiriqhebrew;05B4 hiriqnarrowhebrew;05B4 hiriqquarterhebrew;05B4 hiriqwidehebrew;05B4 hlinebelow;1E96 hmonospace;FF48 hoarmenian;0570 hohipthai;0E2B hohiragana;307B hokatakana;30DB hokatakanahalfwidth;FF8E holam;05B9 holam19;05B9 holam26;05B9 holam32;05B9 holamhebrew;05B9 holamnarrowhebrew;05B9 holamquarterhebrew;05B9 holamwidehebrew;05B9 honokhukthai;0E2E hookabovecomb;0309 hookcmb;0309 hookpalatalizedbelowcmb;0321 hookretroflexbelowcmb;0322 hoonsquare;3342 horicoptic;03E9 horizontalbar;2015 horncmb;031B hotsprings;2668 house;2302 hparen;24A3 hsuperior;02B0 hturned;0265 huhiragana;3075 huiitosquare;3333 hukatakana;30D5 hukatakanahalfwidth;FF8C hungarumlaut;02DD hungarumlautcmb;030B hv;0195 hyphen;002D hypheninferior;F6E5 hyphenmonospace;FF0D hyphensmall;FE63 hyphensuperior;F6E6 hyphentwo;2010 i;0069 iacute;00ED iacyrillic;044F ibengali;0987 ibopomofo;3127 ibreve;012D icaron;01D0 icircle;24D8 icircumflex;00EE icyrillic;0456 idblgrave;0209 ideographearthcircle;328F ideographfirecircle;328B ideographicallianceparen;323F ideographiccallparen;323A ideographiccentrecircle;32A5 ideographicclose;3006 ideographiccomma;3001 ideographiccommaleft;FF64 ideographiccongratulationparen;3237 ideographiccorrectcircle;32A3 ideographicearthparen;322F ideographicenterpriseparen;323D ideographicexcellentcircle;329D ideographicfestivalparen;3240 ideographicfinancialcircle;3296 ideographicfinancialparen;3236 ideographicfireparen;322B ideographichaveparen;3232 ideographichighcircle;32A4 ideographiciterationmark;3005 ideographiclaborcircle;3298 ideographiclaborparen;3238 ideographicleftcircle;32A7 ideographiclowcircle;32A6 ideographicmedicinecircle;32A9 ideographicmetalparen;322E ideographicmoonparen;322A ideographicnameparen;3234 ideographicperiod;3002 ideographicprintcircle;329E ideographicreachparen;3243 ideographicrepresentparen;3239 ideographicresourceparen;323E ideographicrightcircle;32A8 ideographicsecretcircle;3299 ideographicselfparen;3242 ideographicsocietyparen;3233 ideographicspace;3000 ideographicspecialparen;3235 ideographicstockparen;3231 ideographicstudyparen;323B ideographicsunparen;3230 ideographicsuperviseparen;323C ideographicwaterparen;322C ideographicwoodparen;322D ideographiczero;3007 ideographmetalcircle;328E ideographmooncircle;328A ideographnamecircle;3294 ideographsuncircle;3290 ideographwatercircle;328C ideographwoodcircle;328D ideva;0907 idieresis;00EF idieresisacute;1E2F idieresiscyrillic;04E5 idotbelow;1ECB iebrevecyrillic;04D7 iecyrillic;0435 ieungacirclekorean;3275 ieungaparenkorean;3215 ieungcirclekorean;3267 ieungkorean;3147 ieungparenkorean;3207 igrave;00EC igujarati;0A87 igurmukhi;0A07 ihiragana;3044 ihookabove;1EC9 iibengali;0988 iicyrillic;0438 iideva;0908 iigujarati;0A88 iigurmukhi;0A08 iimatragurmukhi;0A40 iinvertedbreve;020B iishortcyrillic;0439 iivowelsignbengali;09C0 iivowelsigndeva;0940 iivowelsigngujarati;0AC0 ij;0133 ikatakana;30A4 ikatakanahalfwidth;FF72 ikorean;3163 ilde;02DC iluyhebrew;05AC imacron;012B imacroncyrillic;04E3 imageorapproximatelyequal;2253 imatragurmukhi;0A3F imonospace;FF49 increment;2206 infinity;221E iniarmenian;056B integral;222B integralbottom;2321 integralbt;2321 integralex;F8F5 integraltop;2320 integraltp;2320 intersection;2229 intisquare;3305 invbullet;25D8 invcircle;25D9 invsmileface;263B iocyrillic;0451 iogonek;012F iota;03B9 iotadieresis;03CA iotadieresistonos;0390 iotalatin;0269 iotatonos;03AF iparen;24A4 irigurmukhi;0A72 ismallhiragana;3043 ismallkatakana;30A3 ismallkatakanahalfwidth;FF68 issharbengali;09FA istroke;0268 isuperior;F6ED iterationhiragana;309D iterationkatakana;30FD itilde;0129 itildebelow;1E2D iubopomofo;3129 iucyrillic;044E ivowelsignbengali;09BF ivowelsigndeva;093F ivowelsigngujarati;0ABF izhitsacyrillic;0475 izhitsadblgravecyrillic;0477 j;006A jaarmenian;0571 jabengali;099C jadeva;091C jagujarati;0A9C jagurmukhi;0A1C jbopomofo;3110 jcaron;01F0 jcircle;24D9 jcircumflex;0135 jcrossedtail;029D jdotlessstroke;025F jecyrillic;0458 jeemarabic;062C jeemfinalarabic;FE9E jeeminitialarabic;FE9F jeemmedialarabic;FEA0 jeharabic;0698 jehfinalarabic;FB8B jhabengali;099D jhadeva;091D jhagujarati;0A9D jhagurmukhi;0A1D jheharmenian;057B jis;3004 jmonospace;FF4A jparen;24A5 jsuperior;02B2 k;006B kabashkircyrillic;04A1 kabengali;0995 kacute;1E31 kacyrillic;043A kadescendercyrillic;049B kadeva;0915 kaf;05DB kafarabic;0643 kafdagesh;FB3B kafdageshhebrew;FB3B kaffinalarabic;FEDA kafhebrew;05DB kafinitialarabic;FEDB kafmedialarabic;FEDC kafrafehebrew;FB4D kagujarati;0A95 kagurmukhi;0A15 kahiragana;304B kahookcyrillic;04C4 kakatakana;30AB kakatakanahalfwidth;FF76 kappa;03BA kappasymbolgreek;03F0 kapyeounmieumkorean;3171 kapyeounphieuphkorean;3184 kapyeounpieupkorean;3178 kapyeounssangpieupkorean;3179 karoriisquare;330D kashidaautoarabic;0640 kashidaautonosidebearingarabic;0640 kasmallkatakana;30F5 kasquare;3384 kasraarabic;0650 kasratanarabic;064D kastrokecyrillic;049F katahiraprolongmarkhalfwidth;FF70 kaverticalstrokecyrillic;049D kbopomofo;310E kcalsquare;3389 kcaron;01E9 kcedilla;0137 kcircle;24DA kcommaaccent;0137 kdotbelow;1E33 keharmenian;0584 kehiragana;3051 kekatakana;30B1 kekatakanahalfwidth;FF79 kenarmenian;056F kesmallkatakana;30F6 kgreenlandic;0138 khabengali;0996 khacyrillic;0445 khadeva;0916 khagujarati;0A96 khagurmukhi;0A16 khaharabic;062E khahfinalarabic;FEA6 khahinitialarabic;FEA7 khahmedialarabic;FEA8 kheicoptic;03E7 khhadeva;0959 khhagurmukhi;0A59 khieukhacirclekorean;3278 khieukhaparenkorean;3218 khieukhcirclekorean;326A khieukhkorean;314B khieukhparenkorean;320A khokhaithai;0E02 khokhonthai;0E05 khokhuatthai;0E03 khokhwaithai;0E04 khomutthai;0E5B khook;0199 khorakhangthai;0E06 khzsquare;3391 kihiragana;304D kikatakana;30AD kikatakanahalfwidth;FF77 kiroguramusquare;3315 kiromeetorusquare;3316 kirosquare;3314 kiyeokacirclekorean;326E kiyeokaparenkorean;320E kiyeokcirclekorean;3260 kiyeokkorean;3131 kiyeokparenkorean;3200 kiyeoksioskorean;3133 kjecyrillic;045C klinebelow;1E35 klsquare;3398 kmcubedsquare;33A6 kmonospace;FF4B kmsquaredsquare;33A2 kohiragana;3053 kohmsquare;33C0 kokaithai;0E01 kokatakana;30B3 kokatakanahalfwidth;FF7A kooposquare;331E koppacyrillic;0481 koreanstandardsymbol;327F koroniscmb;0343 kparen;24A6 kpasquare;33AA ksicyrillic;046F ktsquare;33CF kturned;029E kuhiragana;304F kukatakana;30AF kukatakanahalfwidth;FF78 kvsquare;33B8 kwsquare;33BE l;006C labengali;09B2 lacute;013A ladeva;0932 lagujarati;0AB2 lagurmukhi;0A32 lakkhangyaothai;0E45 lamaleffinalarabic;FEFC lamalefhamzaabovefinalarabic;FEF8 lamalefhamzaaboveisolatedarabic;FEF7 lamalefhamzabelowfinalarabic;FEFA lamalefhamzabelowisolatedarabic;FEF9 lamalefisolatedarabic;FEFB lamalefmaddaabovefinalarabic;FEF6 lamalefmaddaaboveisolatedarabic;FEF5 lamarabic;0644 lambda;03BB lambdastroke;019B lamed;05DC lameddagesh;FB3C lameddageshhebrew;FB3C lamedhebrew;05DC lamedholam;05DC 05B9 lamedholamdagesh;05DC 05B9 05BC lamedholamdageshhebrew;05DC 05B9 05BC lamedholamhebrew;05DC 05B9 lamfinalarabic;FEDE lamhahinitialarabic;FCCA laminitialarabic;FEDF lamjeeminitialarabic;FCC9 lamkhahinitialarabic;FCCB lamlamhehisolatedarabic;FDF2 lammedialarabic;FEE0 lammeemhahinitialarabic;FD88 lammeeminitialarabic;FCCC lammeemjeeminitialarabic;FEDF FEE4 FEA0 lammeemkhahinitialarabic;FEDF FEE4 FEA8 largecircle;25EF lbar;019A lbelt;026C lbopomofo;310C lcaron;013E lcedilla;013C lcircle;24DB lcircumflexbelow;1E3D lcommaaccent;013C ldot;0140 ldotaccent;0140 ldotbelow;1E37 ldotbelowmacron;1E39 leftangleabovecmb;031A lefttackbelowcmb;0318 less;003C lessequal;2264 lessequalorgreater;22DA lessmonospace;FF1C lessorequivalent;2272 lessorgreater;2276 lessoverequal;2266 lesssmall;FE64 lezh;026E lfblock;258C lhookretroflex;026D lira;20A4 liwnarmenian;056C lj;01C9 ljecyrillic;0459 ll;F6C0 lladeva;0933 llagujarati;0AB3 llinebelow;1E3B llladeva;0934 llvocalicbengali;09E1 llvocalicdeva;0961 llvocalicvowelsignbengali;09E3 llvocalicvowelsigndeva;0963 lmiddletilde;026B lmonospace;FF4C lmsquare;33D0 lochulathai;0E2C logicaland;2227 logicalnot;00AC logicalnotreversed;2310 logicalor;2228 lolingthai;0E25 longs;017F lowlinecenterline;FE4E lowlinecmb;0332 lowlinedashed;FE4D lozenge;25CA lparen;24A7 lslash;0142 lsquare;2113 lsuperior;F6EE ltshade;2591 luthai;0E26 lvocalicbengali;098C lvocalicdeva;090C lvocalicvowelsignbengali;09E2 lvocalicvowelsigndeva;0962 lxsquare;33D3 m;006D mabengali;09AE macron;00AF macronbelowcmb;0331 macroncmb;0304 macronlowmod;02CD macronmonospace;FFE3 macute;1E3F madeva;092E magujarati;0AAE magurmukhi;0A2E mahapakhhebrew;05A4 mahapakhlefthebrew;05A4 mahiragana;307E maichattawalowleftthai;F895 maichattawalowrightthai;F894 maichattawathai;0E4B maichattawaupperleftthai;F893 maieklowleftthai;F88C maieklowrightthai;F88B maiekthai;0E48 maiekupperleftthai;F88A maihanakatleftthai;F884 maihanakatthai;0E31 maitaikhuleftthai;F889 maitaikhuthai;0E47 maitholowleftthai;F88F maitholowrightthai;F88E maithothai;0E49 maithoupperleftthai;F88D maitrilowleftthai;F892 maitrilowrightthai;F891 maitrithai;0E4A maitriupperleftthai;F890 maiyamokthai;0E46 makatakana;30DE makatakanahalfwidth;FF8F male;2642 mansyonsquare;3347 maqafhebrew;05BE mars;2642 masoracirclehebrew;05AF masquare;3383 mbopomofo;3107 mbsquare;33D4 mcircle;24DC mcubedsquare;33A5 mdotaccent;1E41 mdotbelow;1E43 meemarabic;0645 meemfinalarabic;FEE2 meeminitialarabic;FEE3 meemmedialarabic;FEE4 meemmeeminitialarabic;FCD1 meemmeemisolatedarabic;FC48 meetorusquare;334D mehiragana;3081 meizierasquare;337E mekatakana;30E1 mekatakanahalfwidth;FF92 mem;05DE memdagesh;FB3E memdageshhebrew;FB3E memhebrew;05DE menarmenian;0574 merkhahebrew;05A5 merkhakefulahebrew;05A6 merkhakefulalefthebrew;05A6 merkhalefthebrew;05A5 mhook;0271 mhzsquare;3392 middledotkatakanahalfwidth;FF65 middot;00B7 mieumacirclekorean;3272 mieumaparenkorean;3212 mieumcirclekorean;3264 mieumkorean;3141 mieumpansioskorean;3170 mieumparenkorean;3204 mieumpieupkorean;316E mieumsioskorean;316F mihiragana;307F mikatakana;30DF mikatakanahalfwidth;FF90 minus;2212 minusbelowcmb;0320 minuscircle;2296 minusmod;02D7 minusplus;2213 minute;2032 miribaarusquare;334A mirisquare;3349 mlonglegturned;0270 mlsquare;3396 mmcubedsquare;33A3 mmonospace;FF4D mmsquaredsquare;339F mohiragana;3082 mohmsquare;33C1 mokatakana;30E2 mokatakanahalfwidth;FF93 molsquare;33D6 momathai;0E21 moverssquare;33A7 moverssquaredsquare;33A8 mparen;24A8 mpasquare;33AB mssquare;33B3 msuperior;F6EF mturned;026F mu;00B5 mu1;00B5 muasquare;3382 muchgreater;226B muchless;226A mufsquare;338C mugreek;03BC mugsquare;338D muhiragana;3080 mukatakana;30E0 mukatakanahalfwidth;FF91 mulsquare;3395 multiply;00D7 mumsquare;339B munahhebrew;05A3 munahlefthebrew;05A3 musicalnote;266A musicalnotedbl;266B musicflatsign;266D musicsharpsign;266F mussquare;33B2 muvsquare;33B6 muwsquare;33BC mvmegasquare;33B9 mvsquare;33B7 mwmegasquare;33BF mwsquare;33BD n;006E nabengali;09A8 nabla;2207 nacute;0144 nadeva;0928 nagujarati;0AA8 nagurmukhi;0A28 nahiragana;306A nakatakana;30CA nakatakanahalfwidth;FF85 napostrophe;0149 nasquare;3381 nbopomofo;310B nbspace;00A0 ncaron;0148 ncedilla;0146 ncircle;24DD ncircumflexbelow;1E4B ncommaaccent;0146 ndotaccent;1E45 ndotbelow;1E47 nehiragana;306D nekatakana;30CD nekatakanahalfwidth;FF88 newsheqelsign;20AA nfsquare;338B ngabengali;0999 ngadeva;0919 ngagujarati;0A99 ngagurmukhi;0A19 ngonguthai;0E07 nhiragana;3093 nhookleft;0272 nhookretroflex;0273 nieunacirclekorean;326F nieunaparenkorean;320F nieuncieuckorean;3135 nieuncirclekorean;3261 nieunhieuhkorean;3136 nieunkorean;3134 nieunpansioskorean;3168 nieunparenkorean;3201 nieunsioskorean;3167 nieuntikeutkorean;3166 nihiragana;306B nikatakana;30CB nikatakanahalfwidth;FF86 nikhahitleftthai;F899 nikhahitthai;0E4D nine;0039 ninearabic;0669 ninebengali;09EF ninecircle;2468 ninecircleinversesansserif;2792 ninedeva;096F ninegujarati;0AEF ninegurmukhi;0A6F ninehackarabic;0669 ninehangzhou;3029 nineideographicparen;3228 nineinferior;2089 ninemonospace;FF19 nineoldstyle;F739 nineparen;247C nineperiod;2490 ninepersian;06F9 nineroman;2178 ninesuperior;2079 nineteencircle;2472 nineteenparen;2486 nineteenperiod;249A ninethai;0E59 nj;01CC njecyrillic;045A nkatakana;30F3 nkatakanahalfwidth;FF9D nlegrightlong;019E nlinebelow;1E49 nmonospace;FF4E nmsquare;339A nnabengali;09A3 nnadeva;0923 nnagujarati;0AA3 nnagurmukhi;0A23 nnnadeva;0929 nohiragana;306E nokatakana;30CE nokatakanahalfwidth;FF89 nonbreakingspace;00A0 nonenthai;0E13 nonuthai;0E19 noonarabic;0646 noonfinalarabic;FEE6 noonghunnaarabic;06BA noonghunnafinalarabic;FB9F noonhehinitialarabic;FEE7 FEEC nooninitialarabic;FEE7 noonjeeminitialarabic;FCD2 noonjeemisolatedarabic;FC4B noonmedialarabic;FEE8 noonmeeminitialarabic;FCD5 noonmeemisolatedarabic;FC4E noonnoonfinalarabic;FC8D notcontains;220C notelement;2209 notelementof;2209 notequal;2260 notgreater;226F notgreaternorequal;2271 notgreaternorless;2279 notidentical;2262 notless;226E notlessnorequal;2270 notparallel;2226 notprecedes;2280 notsubset;2284 notsucceeds;2281 notsuperset;2285 nowarmenian;0576 nparen;24A9 nssquare;33B1 nsuperior;207F ntilde;00F1 nu;03BD nuhiragana;306C nukatakana;30CC nukatakanahalfwidth;FF87 nuktabengali;09BC nuktadeva;093C nuktagujarati;0ABC nuktagurmukhi;0A3C numbersign;0023 numbersignmonospace;FF03 numbersignsmall;FE5F numeralsigngreek;0374 numeralsignlowergreek;0375 numero;2116 nun;05E0 nundagesh;FB40 nundageshhebrew;FB40 nunhebrew;05E0 nvsquare;33B5 nwsquare;33BB nyabengali;099E nyadeva;091E nyagujarati;0A9E nyagurmukhi;0A1E o;006F oacute;00F3 oangthai;0E2D obarred;0275 obarredcyrillic;04E9 obarreddieresiscyrillic;04EB obengali;0993 obopomofo;311B obreve;014F ocandradeva;0911 ocandragujarati;0A91 ocandravowelsigndeva;0949 ocandravowelsigngujarati;0AC9 ocaron;01D2 ocircle;24DE ocircumflex;00F4 ocircumflexacute;1ED1 ocircumflexdotbelow;1ED9 ocircumflexgrave;1ED3 ocircumflexhookabove;1ED5 ocircumflextilde;1ED7 ocyrillic;043E odblacute;0151 odblgrave;020D odeva;0913 odieresis;00F6 odieresiscyrillic;04E7 odotbelow;1ECD oe;0153 oekorean;315A ogonek;02DB ogonekcmb;0328 ograve;00F2 ogujarati;0A93 oharmenian;0585 ohiragana;304A ohookabove;1ECF ohorn;01A1 ohornacute;1EDB ohorndotbelow;1EE3 ohorngrave;1EDD ohornhookabove;1EDF ohorntilde;1EE1 ohungarumlaut;0151 oi;01A3 oinvertedbreve;020F okatakana;30AA okatakanahalfwidth;FF75 okorean;3157 olehebrew;05AB omacron;014D omacronacute;1E53 omacrongrave;1E51 omdeva;0950 omega;03C9 omega1;03D6 omegacyrillic;0461 omegalatinclosed;0277 omegaroundcyrillic;047B omegatitlocyrillic;047D omegatonos;03CE omgujarati;0AD0 omicron;03BF omicrontonos;03CC omonospace;FF4F one;0031 onearabic;0661 onebengali;09E7 onecircle;2460 onecircleinversesansserif;278A onedeva;0967 onedotenleader;2024 oneeighth;215B onefitted;F6DC onegujarati;0AE7 onegurmukhi;0A67 onehackarabic;0661 onehalf;00BD onehangzhou;3021 oneideographicparen;3220 oneinferior;2081 onemonospace;FF11 onenumeratorbengali;09F4 oneoldstyle;F731 oneparen;2474 oneperiod;2488 onepersian;06F1 onequarter;00BC oneroman;2170 onesuperior;00B9 onethai;0E51 onethird;2153 oogonek;01EB oogonekmacron;01ED oogurmukhi;0A13 oomatragurmukhi;0A4B oopen;0254 oparen;24AA openbullet;25E6 option;2325 ordfeminine;00AA ordmasculine;00BA orthogonal;221F oshortdeva;0912 oshortvowelsigndeva;094A oslash;00F8 oslashacute;01FF osmallhiragana;3049 osmallkatakana;30A9 osmallkatakanahalfwidth;FF6B ostrokeacute;01FF osuperior;F6F0 otcyrillic;047F otilde;00F5 otildeacute;1E4D otildedieresis;1E4F oubopomofo;3121 overline;203E overlinecenterline;FE4A overlinecmb;0305 overlinedashed;FE49 overlinedblwavy;FE4C overlinewavy;FE4B overscore;00AF ovowelsignbengali;09CB ovowelsigndeva;094B ovowelsigngujarati;0ACB p;0070 paampssquare;3380 paasentosquare;332B pabengali;09AA pacute;1E55 padeva;092A pagedown;21DF pageup;21DE pagujarati;0AAA pagurmukhi;0A2A pahiragana;3071 paiyannoithai;0E2F pakatakana;30D1 palatalizationcyrilliccmb;0484 palochkacyrillic;04C0 pansioskorean;317F paragraph;00B6 parallel;2225 parenleft;0028 parenleftaltonearabic;FD3E parenleftbt;F8ED parenleftex;F8EC parenleftinferior;208D parenleftmonospace;FF08 parenleftsmall;FE59 parenleftsuperior;207D parenlefttp;F8EB parenleftvertical;FE35 parenright;0029 parenrightaltonearabic;FD3F parenrightbt;F8F8 parenrightex;F8F7 parenrightinferior;208E parenrightmonospace;FF09 parenrightsmall;FE5A parenrightsuperior;207E parenrighttp;F8F6 parenrightvertical;FE36 partialdiff;2202 paseqhebrew;05C0 pashtahebrew;0599 pasquare;33A9 patah;05B7 patah11;05B7 patah1d;05B7 patah2a;05B7 patahhebrew;05B7 patahnarrowhebrew;05B7 patahquarterhebrew;05B7 patahwidehebrew;05B7 pazerhebrew;05A1 pbopomofo;3106 pcircle;24DF pdotaccent;1E57 pe;05E4 pecyrillic;043F pedagesh;FB44 pedageshhebrew;FB44 peezisquare;333B pefinaldageshhebrew;FB43 peharabic;067E peharmenian;057A pehebrew;05E4 pehfinalarabic;FB57 pehinitialarabic;FB58 pehiragana;307A pehmedialarabic;FB59 pekatakana;30DA pemiddlehookcyrillic;04A7 perafehebrew;FB4E percent;0025 percentarabic;066A percentmonospace;FF05 percentsmall;FE6A period;002E periodarmenian;0589 periodcentered;00B7 periodhalfwidth;FF61 periodinferior;F6E7 periodmonospace;FF0E periodsmall;FE52 periodsuperior;F6E8 perispomenigreekcmb;0342 perpendicular;22A5 perthousand;2030 peseta;20A7 pfsquare;338A phabengali;09AB phadeva;092B phagujarati;0AAB phagurmukhi;0A2B phi;03C6 phi1;03D5 phieuphacirclekorean;327A phieuphaparenkorean;321A phieuphcirclekorean;326C phieuphkorean;314D phieuphparenkorean;320C philatin;0278 phinthuthai;0E3A phisymbolgreek;03D5 phook;01A5 phophanthai;0E1E phophungthai;0E1C phosamphaothai;0E20 pi;03C0 pieupacirclekorean;3273 pieupaparenkorean;3213 pieupcieuckorean;3176 pieupcirclekorean;3265 pieupkiyeokkorean;3172 pieupkorean;3142 pieupparenkorean;3205 pieupsioskiyeokkorean;3174 pieupsioskorean;3144 pieupsiostikeutkorean;3175 pieupthieuthkorean;3177 pieuptikeutkorean;3173 pihiragana;3074 pikatakana;30D4 pisymbolgreek;03D6 piwrarmenian;0583 plus;002B plusbelowcmb;031F pluscircle;2295 plusminus;00B1 plusmod;02D6 plusmonospace;FF0B plussmall;FE62 plussuperior;207A pmonospace;FF50 pmsquare;33D8 pohiragana;307D pointingindexdownwhite;261F pointingindexleftwhite;261C pointingindexrightwhite;261E pointingindexupwhite;261D pokatakana;30DD poplathai;0E1B postalmark;3012 postalmarkface;3020 pparen;24AB precedes;227A prescription;211E primemod;02B9 primereversed;2035 product;220F projective;2305 prolongedkana;30FC propellor;2318 propersubset;2282 propersuperset;2283 proportion;2237 proportional;221D psi;03C8 psicyrillic;0471 psilipneumatacyrilliccmb;0486 pssquare;33B0 puhiragana;3077 pukatakana;30D7 pvsquare;33B4 pwsquare;33BA q;0071 qadeva;0958 qadmahebrew;05A8 qafarabic;0642 qaffinalarabic;FED6 qafinitialarabic;FED7 qafmedialarabic;FED8 qamats;05B8 qamats10;05B8 qamats1a;05B8 qamats1c;05B8 qamats27;05B8 qamats29;05B8 qamats33;05B8 qamatsde;05B8 qamatshebrew;05B8 qamatsnarrowhebrew;05B8 qamatsqatanhebrew;05B8 qamatsqatannarrowhebrew;05B8 qamatsqatanquarterhebrew;05B8 qamatsqatanwidehebrew;05B8 qamatsquarterhebrew;05B8 qamatswidehebrew;05B8 qarneyparahebrew;059F qbopomofo;3111 qcircle;24E0 qhook;02A0 qmonospace;FF51 qof;05E7 qofdagesh;FB47 qofdageshhebrew;FB47 qofhatafpatah;05E7 05B2 qofhatafpatahhebrew;05E7 05B2 qofhatafsegol;05E7 05B1 qofhatafsegolhebrew;05E7 05B1 qofhebrew;05E7 qofhiriq;05E7 05B4 qofhiriqhebrew;05E7 05B4 qofholam;05E7 05B9 qofholamhebrew;05E7 05B9 qofpatah;05E7 05B7 qofpatahhebrew;05E7 05B7 qofqamats;05E7 05B8 qofqamatshebrew;05E7 05B8 qofqubuts;05E7 05BB qofqubutshebrew;05E7 05BB qofsegol;05E7 05B6 qofsegolhebrew;05E7 05B6 qofsheva;05E7 05B0 qofshevahebrew;05E7 05B0 qoftsere;05E7 05B5 qoftserehebrew;05E7 05B5 qparen;24AC quarternote;2669 qubuts;05BB qubuts18;05BB qubuts25;05BB qubuts31;05BB qubutshebrew;05BB qubutsnarrowhebrew;05BB qubutsquarterhebrew;05BB qubutswidehebrew;05BB question;003F questionarabic;061F questionarmenian;055E questiondown;00BF questiondownsmall;F7BF questiongreek;037E questionmonospace;FF1F questionsmall;F73F quotedbl;0022 quotedblbase;201E quotedblleft;201C quotedblmonospace;FF02 quotedblprime;301E quotedblprimereversed;301D quotedblright;201D quoteleft;2018 quoteleftreversed;201B quotereversed;201B quoteright;2019 quoterightn;0149 quotesinglbase;201A quotesingle;0027 quotesinglemonospace;FF07 r;0072 raarmenian;057C rabengali;09B0 racute;0155 radeva;0930 radical;221A radicalex;F8E5 radoverssquare;33AE radoverssquaredsquare;33AF radsquare;33AD rafe;05BF rafehebrew;05BF ragujarati;0AB0 ragurmukhi;0A30 rahiragana;3089 rakatakana;30E9 rakatakanahalfwidth;FF97 ralowerdiagonalbengali;09F1 ramiddlediagonalbengali;09F0 ramshorn;0264 ratio;2236 rbopomofo;3116 rcaron;0159 rcedilla;0157 rcircle;24E1 rcommaaccent;0157 rdblgrave;0211 rdotaccent;1E59 rdotbelow;1E5B rdotbelowmacron;1E5D referencemark;203B reflexsubset;2286 reflexsuperset;2287 registered;00AE registersans;F8E8 registerserif;F6DA reharabic;0631 reharmenian;0580 rehfinalarabic;FEAE rehiragana;308C rehyehaleflamarabic;0631 FEF3 FE8E 0644 rekatakana;30EC rekatakanahalfwidth;FF9A resh;05E8 reshdageshhebrew;FB48 reshhatafpatah;05E8 05B2 reshhatafpatahhebrew;05E8 05B2 reshhatafsegol;05E8 05B1 reshhatafsegolhebrew;05E8 05B1 reshhebrew;05E8 reshhiriq;05E8 05B4 reshhiriqhebrew;05E8 05B4 reshholam;05E8 05B9 reshholamhebrew;05E8 05B9 reshpatah;05E8 05B7 reshpatahhebrew;05E8 05B7 reshqamats;05E8 05B8 reshqamatshebrew;05E8 05B8 reshqubuts;05E8 05BB reshqubutshebrew;05E8 05BB reshsegol;05E8 05B6 reshsegolhebrew;05E8 05B6 reshsheva;05E8 05B0 reshshevahebrew;05E8 05B0 reshtsere;05E8 05B5 reshtserehebrew;05E8 05B5 reversedtilde;223D reviahebrew;0597 reviamugrashhebrew;0597 revlogicalnot;2310 rfishhook;027E rfishhookreversed;027F rhabengali;09DD rhadeva;095D rho;03C1 rhook;027D rhookturned;027B rhookturnedsuperior;02B5 rhosymbolgreek;03F1 rhotichookmod;02DE rieulacirclekorean;3271 rieulaparenkorean;3211 rieulcirclekorean;3263 rieulhieuhkorean;3140 rieulkiyeokkorean;313A rieulkiyeoksioskorean;3169 rieulkorean;3139 rieulmieumkorean;313B rieulpansioskorean;316C rieulparenkorean;3203 rieulphieuphkorean;313F rieulpieupkorean;313C rieulpieupsioskorean;316B rieulsioskorean;313D rieulthieuthkorean;313E rieultikeutkorean;316A rieulyeorinhieuhkorean;316D rightangle;221F righttackbelowcmb;0319 righttriangle;22BF rihiragana;308A rikatakana;30EA rikatakanahalfwidth;FF98 ring;02DA ringbelowcmb;0325 ringcmb;030A ringhalfleft;02BF ringhalfleftarmenian;0559 ringhalfleftbelowcmb;031C ringhalfleftcentered;02D3 ringhalfright;02BE ringhalfrightbelowcmb;0339 ringhalfrightcentered;02D2 rinvertedbreve;0213 rittorusquare;3351 rlinebelow;1E5F rlongleg;027C rlonglegturned;027A rmonospace;FF52 rohiragana;308D rokatakana;30ED rokatakanahalfwidth;FF9B roruathai;0E23 rparen;24AD rrabengali;09DC rradeva;0931 rragurmukhi;0A5C rreharabic;0691 rrehfinalarabic;FB8D rrvocalicbengali;09E0 rrvocalicdeva;0960 rrvocalicgujarati;0AE0 rrvocalicvowelsignbengali;09C4 rrvocalicvowelsigndeva;0944 rrvocalicvowelsigngujarati;0AC4 rsuperior;F6F1 rtblock;2590 rturned;0279 rturnedsuperior;02B4 ruhiragana;308B rukatakana;30EB rukatakanahalfwidth;FF99 rupeemarkbengali;09F2 rupeesignbengali;09F3 rupiah;F6DD ruthai;0E24 rvocalicbengali;098B rvocalicdeva;090B rvocalicgujarati;0A8B rvocalicvowelsignbengali;09C3 rvocalicvowelsigndeva;0943 rvocalicvowelsigngujarati;0AC3 s;0073 sabengali;09B8 sacute;015B sacutedotaccent;1E65 sadarabic;0635 sadeva;0938 sadfinalarabic;FEBA sadinitialarabic;FEBB sadmedialarabic;FEBC sagujarati;0AB8 sagurmukhi;0A38 sahiragana;3055 sakatakana;30B5 sakatakanahalfwidth;FF7B sallallahoualayhewasallamarabic;FDFA samekh;05E1 samekhdagesh;FB41 samekhdageshhebrew;FB41 samekhhebrew;05E1 saraaathai;0E32 saraaethai;0E41 saraaimaimalaithai;0E44 saraaimaimuanthai;0E43 saraamthai;0E33 saraathai;0E30 saraethai;0E40 saraiileftthai;F886 saraiithai;0E35 saraileftthai;F885 saraithai;0E34 saraothai;0E42 saraueeleftthai;F888 saraueethai;0E37 saraueleftthai;F887 sarauethai;0E36 sarauthai;0E38 sarauuthai;0E39 sbopomofo;3119 scaron;0161 scarondotaccent;1E67 scedilla;015F schwa;0259 schwacyrillic;04D9 schwadieresiscyrillic;04DB schwahook;025A scircle;24E2 scircumflex;015D scommaaccent;0219 sdotaccent;1E61 sdotbelow;1E63 sdotbelowdotaccent;1E69 seagullbelowcmb;033C second;2033 secondtonechinese;02CA section;00A7 seenarabic;0633 seenfinalarabic;FEB2 seeninitialarabic;FEB3 seenmedialarabic;FEB4 segol;05B6 segol13;05B6 segol1f;05B6 segol2c;05B6 segolhebrew;05B6 segolnarrowhebrew;05B6 segolquarterhebrew;05B6 segoltahebrew;0592 segolwidehebrew;05B6 seharmenian;057D sehiragana;305B sekatakana;30BB sekatakanahalfwidth;FF7E semicolon;003B semicolonarabic;061B semicolonmonospace;FF1B semicolonsmall;FE54 semivoicedmarkkana;309C semivoicedmarkkanahalfwidth;FF9F sentisquare;3322 sentosquare;3323 seven;0037 sevenarabic;0667 sevenbengali;09ED sevencircle;2466 sevencircleinversesansserif;2790 sevendeva;096D seveneighths;215E sevengujarati;0AED sevengurmukhi;0A6D sevenhackarabic;0667 sevenhangzhou;3027 sevenideographicparen;3226 seveninferior;2087 sevenmonospace;FF17 sevenoldstyle;F737 sevenparen;247A sevenperiod;248E sevenpersian;06F7 sevenroman;2176 sevensuperior;2077 seventeencircle;2470 seventeenparen;2484 seventeenperiod;2498 seventhai;0E57 sfthyphen;00AD shaarmenian;0577 shabengali;09B6 shacyrillic;0448 shaddaarabic;0651 shaddadammaarabic;FC61 shaddadammatanarabic;FC5E shaddafathaarabic;FC60 shaddafathatanarabic;0651 064B shaddakasraarabic;FC62 shaddakasratanarabic;FC5F shade;2592 shadedark;2593 shadelight;2591 shademedium;2592 shadeva;0936 shagujarati;0AB6 shagurmukhi;0A36 shalshelethebrew;0593 shbopomofo;3115 shchacyrillic;0449 sheenarabic;0634 sheenfinalarabic;FEB6 sheeninitialarabic;FEB7 sheenmedialarabic;FEB8 sheicoptic;03E3 sheqel;20AA sheqelhebrew;20AA sheva;05B0 sheva115;05B0 sheva15;05B0 sheva22;05B0 sheva2e;05B0 shevahebrew;05B0 shevanarrowhebrew;05B0 shevaquarterhebrew;05B0 shevawidehebrew;05B0 shhacyrillic;04BB shimacoptic;03ED shin;05E9 shindagesh;FB49 shindageshhebrew;FB49 shindageshshindot;FB2C shindageshshindothebrew;FB2C shindageshsindot;FB2D shindageshsindothebrew;FB2D shindothebrew;05C1 shinhebrew;05E9 shinshindot;FB2A shinshindothebrew;FB2A shinsindot;FB2B shinsindothebrew;FB2B shook;0282 sigma;03C3 sigma1;03C2 sigmafinal;03C2 sigmalunatesymbolgreek;03F2 sihiragana;3057 sikatakana;30B7 sikatakanahalfwidth;FF7C siluqhebrew;05BD siluqlefthebrew;05BD similar;223C sindothebrew;05C2 siosacirclekorean;3274 siosaparenkorean;3214 sioscieuckorean;317E sioscirclekorean;3266 sioskiyeokkorean;317A sioskorean;3145 siosnieunkorean;317B siosparenkorean;3206 siospieupkorean;317D siostikeutkorean;317C six;0036 sixarabic;0666 sixbengali;09EC sixcircle;2465 sixcircleinversesansserif;278F sixdeva;096C sixgujarati;0AEC sixgurmukhi;0A6C sixhackarabic;0666 sixhangzhou;3026 sixideographicparen;3225 sixinferior;2086 sixmonospace;FF16 sixoldstyle;F736 sixparen;2479 sixperiod;248D sixpersian;06F6 sixroman;2175 sixsuperior;2076 sixteencircle;246F sixteencurrencydenominatorbengali;09F9 sixteenparen;2483 sixteenperiod;2497 sixthai;0E56 slash;002F slashmonospace;FF0F slong;017F slongdotaccent;1E9B smileface;263A smonospace;FF53 sofpasuqhebrew;05C3 softhyphen;00AD softsigncyrillic;044C sohiragana;305D sokatakana;30BD sokatakanahalfwidth;FF7F soliduslongoverlaycmb;0338 solidusshortoverlaycmb;0337 sorusithai;0E29 sosalathai;0E28 sosothai;0E0B sosuathai;0E2A space;0020 spacehackarabic;0020 spade;2660 spadesuitblack;2660 spadesuitwhite;2664 sparen;24AE squarebelowcmb;033B squarecc;33C4 squarecm;339D squarediagonalcrosshatchfill;25A9 squarehorizontalfill;25A4 squarekg;338F squarekm;339E squarekmcapital;33CE squareln;33D1 squarelog;33D2 squaremg;338E squaremil;33D5 squaremm;339C squaremsquared;33A1 squareorthogonalcrosshatchfill;25A6 squareupperlefttolowerrightfill;25A7 squareupperrighttolowerleftfill;25A8 squareverticalfill;25A5 squarewhitewithsmallblack;25A3 srsquare;33DB ssabengali;09B7 ssadeva;0937 ssagujarati;0AB7 ssangcieuckorean;3149 ssanghieuhkorean;3185 ssangieungkorean;3180 ssangkiyeokkorean;3132 ssangnieunkorean;3165 ssangpieupkorean;3143 ssangsioskorean;3146 ssangtikeutkorean;3138 ssuperior;F6F2 sterling;00A3 sterlingmonospace;FFE1 strokelongoverlaycmb;0336 strokeshortoverlaycmb;0335 subset;2282 subsetnotequal;228A subsetorequal;2286 succeeds;227B suchthat;220B suhiragana;3059 sukatakana;30B9 sukatakanahalfwidth;FF7D sukunarabic;0652 summation;2211 sun;263C superset;2283 supersetnotequal;228B supersetorequal;2287 svsquare;33DC syouwaerasquare;337C t;0074 tabengali;09A4 tackdown;22A4 tackleft;22A3 tadeva;0924 tagujarati;0AA4 tagurmukhi;0A24 taharabic;0637 tahfinalarabic;FEC2 tahinitialarabic;FEC3 tahiragana;305F tahmedialarabic;FEC4 taisyouerasquare;337D takatakana;30BF takatakanahalfwidth;FF80 tatweelarabic;0640 tau;03C4 tav;05EA tavdages;FB4A tavdagesh;FB4A tavdageshhebrew;FB4A tavhebrew;05EA tbar;0167 tbopomofo;310A tcaron;0165 tccurl;02A8 tcedilla;0163 tcheharabic;0686 tchehfinalarabic;FB7B tchehinitialarabic;FB7C tchehmedialarabic;FB7D tchehmeeminitialarabic;FB7C FEE4 tcircle;24E3 tcircumflexbelow;1E71 tcommaaccent;0163 tdieresis;1E97 tdotaccent;1E6B tdotbelow;1E6D tecyrillic;0442 tedescendercyrillic;04AD teharabic;062A tehfinalarabic;FE96 tehhahinitialarabic;FCA2 tehhahisolatedarabic;FC0C tehinitialarabic;FE97 tehiragana;3066 tehjeeminitialarabic;FCA1 tehjeemisolatedarabic;FC0B tehmarbutaarabic;0629 tehmarbutafinalarabic;FE94 tehmedialarabic;FE98 tehmeeminitialarabic;FCA4 tehmeemisolatedarabic;FC0E tehnoonfinalarabic;FC73 tekatakana;30C6 tekatakanahalfwidth;FF83 telephone;2121 telephoneblack;260E telishagedolahebrew;05A0 telishaqetanahebrew;05A9 tencircle;2469 tenideographicparen;3229 tenparen;247D tenperiod;2491 tenroman;2179 tesh;02A7 tet;05D8 tetdagesh;FB38 tetdageshhebrew;FB38 tethebrew;05D8 tetsecyrillic;04B5 tevirhebrew;059B tevirlefthebrew;059B thabengali;09A5 thadeva;0925 thagujarati;0AA5 thagurmukhi;0A25 thalarabic;0630 thalfinalarabic;FEAC thanthakhatlowleftthai;F898 thanthakhatlowrightthai;F897 thanthakhatthai;0E4C thanthakhatupperleftthai;F896 theharabic;062B thehfinalarabic;FE9A thehinitialarabic;FE9B thehmedialarabic;FE9C thereexists;2203 therefore;2234 theta;03B8 theta1;03D1 thetasymbolgreek;03D1 thieuthacirclekorean;3279 thieuthaparenkorean;3219 thieuthcirclekorean;326B thieuthkorean;314C thieuthparenkorean;320B thirteencircle;246C thirteenparen;2480 thirteenperiod;2494 thonangmonthothai;0E11 thook;01AD thophuthaothai;0E12 thorn;00FE thothahanthai;0E17 thothanthai;0E10 thothongthai;0E18 thothungthai;0E16 thousandcyrillic;0482 thousandsseparatorarabic;066C thousandsseparatorpersian;066C three;0033 threearabic;0663 threebengali;09E9 threecircle;2462 threecircleinversesansserif;278C threedeva;0969 threeeighths;215C threegujarati;0AE9 threegurmukhi;0A69 threehackarabic;0663 threehangzhou;3023 threeideographicparen;3222 threeinferior;2083 threemonospace;FF13 threenumeratorbengali;09F6 threeoldstyle;F733 threeparen;2476 threeperiod;248A threepersian;06F3 threequarters;00BE threequartersemdash;F6DE threeroman;2172 threesuperior;00B3 threethai;0E53 thzsquare;3394 tihiragana;3061 tikatakana;30C1 tikatakanahalfwidth;FF81 tikeutacirclekorean;3270 tikeutaparenkorean;3210 tikeutcirclekorean;3262 tikeutkorean;3137 tikeutparenkorean;3202 tilde;02DC tildebelowcmb;0330 tildecmb;0303 tildecomb;0303 tildedoublecmb;0360 tildeoperator;223C tildeoverlaycmb;0334 tildeverticalcmb;033E timescircle;2297 tipehahebrew;0596 tipehalefthebrew;0596 tippigurmukhi;0A70 titlocyrilliccmb;0483 tiwnarmenian;057F tlinebelow;1E6F tmonospace;FF54 toarmenian;0569 tohiragana;3068 tokatakana;30C8 tokatakanahalfwidth;FF84 tonebarextrahighmod;02E5 tonebarextralowmod;02E9 tonebarhighmod;02E6 tonebarlowmod;02E8 tonebarmidmod;02E7 tonefive;01BD tonesix;0185 tonetwo;01A8 tonos;0384 tonsquare;3327 topatakthai;0E0F tortoiseshellbracketleft;3014 tortoiseshellbracketleftsmall;FE5D tortoiseshellbracketleftvertical;FE39 tortoiseshellbracketright;3015 tortoiseshellbracketrightsmall;FE5E tortoiseshellbracketrightvertical;FE3A totaothai;0E15 tpalatalhook;01AB tparen;24AF trademark;2122 trademarksans;F8EA trademarkserif;F6DB tretroflexhook;0288 triagdn;25BC triaglf;25C4 triagrt;25BA triagup;25B2 ts;02A6 tsadi;05E6 tsadidagesh;FB46 tsadidageshhebrew;FB46 tsadihebrew;05E6 tsecyrillic;0446 tsere;05B5 tsere12;05B5 tsere1e;05B5 tsere2b;05B5 tserehebrew;05B5 tserenarrowhebrew;05B5 tserequarterhebrew;05B5 tserewidehebrew;05B5 tshecyrillic;045B tsuperior;F6F3 ttabengali;099F ttadeva;091F ttagujarati;0A9F ttagurmukhi;0A1F tteharabic;0679 ttehfinalarabic;FB67 ttehinitialarabic;FB68 ttehmedialarabic;FB69 tthabengali;09A0 tthadeva;0920 tthagujarati;0AA0 tthagurmukhi;0A20 tturned;0287 tuhiragana;3064 tukatakana;30C4 tukatakanahalfwidth;FF82 tusmallhiragana;3063 tusmallkatakana;30C3 tusmallkatakanahalfwidth;FF6F twelvecircle;246B twelveparen;247F twelveperiod;2493 twelveroman;217B twentycircle;2473 twentyhangzhou;5344 twentyparen;2487 twentyperiod;249B two;0032 twoarabic;0662 twobengali;09E8 twocircle;2461 twocircleinversesansserif;278B twodeva;0968 twodotenleader;2025 twodotleader;2025 twodotleadervertical;FE30 twogujarati;0AE8 twogurmukhi;0A68 twohackarabic;0662 twohangzhou;3022 twoideographicparen;3221 twoinferior;2082 twomonospace;FF12 twonumeratorbengali;09F5 twooldstyle;F732 twoparen;2475 twoperiod;2489 twopersian;06F2 tworoman;2171 twostroke;01BB twosuperior;00B2 twothai;0E52 twothirds;2154 u;0075 uacute;00FA ubar;0289 ubengali;0989 ubopomofo;3128 ubreve;016D ucaron;01D4 ucircle;24E4 ucircumflex;00FB ucircumflexbelow;1E77 ucyrillic;0443 udattadeva;0951 udblacute;0171 udblgrave;0215 udeva;0909 udieresis;00FC udieresisacute;01D8 udieresisbelow;1E73 udieresiscaron;01DA udieresiscyrillic;04F1 udieresisgrave;01DC udieresismacron;01D6 udotbelow;1EE5 ugrave;00F9 ugujarati;0A89 ugurmukhi;0A09 uhiragana;3046 uhookabove;1EE7 uhorn;01B0 uhornacute;1EE9 uhorndotbelow;1EF1 uhorngrave;1EEB uhornhookabove;1EED uhorntilde;1EEF uhungarumlaut;0171 uhungarumlautcyrillic;04F3 uinvertedbreve;0217 ukatakana;30A6 ukatakanahalfwidth;FF73 ukcyrillic;0479 ukorean;315C umacron;016B umacroncyrillic;04EF umacrondieresis;1E7B umatragurmukhi;0A41 umonospace;FF55 underscore;005F underscoredbl;2017 underscoremonospace;FF3F underscorevertical;FE33 underscorewavy;FE4F union;222A universal;2200 uogonek;0173 uparen;24B0 upblock;2580 upperdothebrew;05C4 upsilon;03C5 upsilondieresis;03CB upsilondieresistonos;03B0 upsilonlatin;028A upsilontonos;03CD uptackbelowcmb;031D uptackmod;02D4 uragurmukhi;0A73 uring;016F ushortcyrillic;045E usmallhiragana;3045 usmallkatakana;30A5 usmallkatakanahalfwidth;FF69 ustraightcyrillic;04AF ustraightstrokecyrillic;04B1 utilde;0169 utildeacute;1E79 utildebelow;1E75 uubengali;098A uudeva;090A uugujarati;0A8A uugurmukhi;0A0A uumatragurmukhi;0A42 uuvowelsignbengali;09C2 uuvowelsigndeva;0942 uuvowelsigngujarati;0AC2 uvowelsignbengali;09C1 uvowelsigndeva;0941 uvowelsigngujarati;0AC1 v;0076 vadeva;0935 vagujarati;0AB5 vagurmukhi;0A35 vakatakana;30F7 vav;05D5 vavdagesh;FB35 vavdagesh65;FB35 vavdageshhebrew;FB35 vavhebrew;05D5 vavholam;FB4B vavholamhebrew;FB4B vavvavhebrew;05F0 vavyodhebrew;05F1 vcircle;24E5 vdotbelow;1E7F vecyrillic;0432 veharabic;06A4 vehfinalarabic;FB6B vehinitialarabic;FB6C vehmedialarabic;FB6D vekatakana;30F9 venus;2640 verticalbar;007C verticallineabovecmb;030D verticallinebelowcmb;0329 verticallinelowmod;02CC verticallinemod;02C8 vewarmenian;057E vhook;028B vikatakana;30F8 viramabengali;09CD viramadeva;094D viramagujarati;0ACD visargabengali;0983 visargadeva;0903 visargagujarati;0A83 vmonospace;FF56 voarmenian;0578 voicediterationhiragana;309E voicediterationkatakana;30FE voicedmarkkana;309B voicedmarkkanahalfwidth;FF9E vokatakana;30FA vparen;24B1 vtilde;1E7D vturned;028C vuhiragana;3094 vukatakana;30F4 w;0077 wacute;1E83 waekorean;3159 wahiragana;308F wakatakana;30EF wakatakanahalfwidth;FF9C wakorean;3158 wasmallhiragana;308E wasmallkatakana;30EE wattosquare;3357 wavedash;301C wavyunderscorevertical;FE34 wawarabic;0648 wawfinalarabic;FEEE wawhamzaabovearabic;0624 wawhamzaabovefinalarabic;FE86 wbsquare;33DD wcircle;24E6 wcircumflex;0175 wdieresis;1E85 wdotaccent;1E87 wdotbelow;1E89 wehiragana;3091 weierstrass;2118 wekatakana;30F1 wekorean;315E weokorean;315D wgrave;1E81 whitebullet;25E6 whitecircle;25CB whitecircleinverse;25D9 whitecornerbracketleft;300E whitecornerbracketleftvertical;FE43 whitecornerbracketright;300F whitecornerbracketrightvertical;FE44 whitediamond;25C7 whitediamondcontainingblacksmalldiamond;25C8 whitedownpointingsmalltriangle;25BF whitedownpointingtriangle;25BD whiteleftpointingsmalltriangle;25C3 whiteleftpointingtriangle;25C1 whitelenticularbracketleft;3016 whitelenticularbracketright;3017 whiterightpointingsmalltriangle;25B9 whiterightpointingtriangle;25B7 whitesmallsquare;25AB whitesmilingface;263A whitesquare;25A1 whitestar;2606 whitetelephone;260F whitetortoiseshellbracketleft;3018 whitetortoiseshellbracketright;3019 whiteuppointingsmalltriangle;25B5 whiteuppointingtriangle;25B3 wihiragana;3090 wikatakana;30F0 wikorean;315F wmonospace;FF57 wohiragana;3092 wokatakana;30F2 wokatakanahalfwidth;FF66 won;20A9 wonmonospace;FFE6 wowaenthai;0E27 wparen;24B2 wring;1E98 wsuperior;02B7 wturned;028D wynn;01BF x;0078 xabovecmb;033D xbopomofo;3112 xcircle;24E7 xdieresis;1E8D xdotaccent;1E8B xeharmenian;056D xi;03BE xmonospace;FF58 xparen;24B3 xsuperior;02E3 y;0079 yaadosquare;334E yabengali;09AF yacute;00FD yadeva;092F yaekorean;3152 yagujarati;0AAF yagurmukhi;0A2F yahiragana;3084 yakatakana;30E4 yakatakanahalfwidth;FF94 yakorean;3151 yamakkanthai;0E4E yasmallhiragana;3083 yasmallkatakana;30E3 yasmallkatakanahalfwidth;FF6C yatcyrillic;0463 ycircle;24E8 ycircumflex;0177 ydieresis;00FF ydotaccent;1E8F ydotbelow;1EF5 yeharabic;064A yehbarreearabic;06D2 yehbarreefinalarabic;FBAF yehfinalarabic;FEF2 yehhamzaabovearabic;0626 yehhamzaabovefinalarabic;FE8A yehhamzaaboveinitialarabic;FE8B yehhamzaabovemedialarabic;FE8C yehinitialarabic;FEF3 yehmedialarabic;FEF4 yehmeeminitialarabic;FCDD yehmeemisolatedarabic;FC58 yehnoonfinalarabic;FC94 yehthreedotsbelowarabic;06D1 yekorean;3156 yen;00A5 yenmonospace;FFE5 yeokorean;3155 yeorinhieuhkorean;3186 yerahbenyomohebrew;05AA yerahbenyomolefthebrew;05AA yericyrillic;044B yerudieresiscyrillic;04F9 yesieungkorean;3181 yesieungpansioskorean;3183 yesieungsioskorean;3182 yetivhebrew;059A ygrave;1EF3 yhook;01B4 yhookabove;1EF7 yiarmenian;0575 yicyrillic;0457 yikorean;3162 yinyang;262F yiwnarmenian;0582 ymonospace;FF59 yod;05D9 yoddagesh;FB39 yoddageshhebrew;FB39 yodhebrew;05D9 yodyodhebrew;05F2 yodyodpatahhebrew;FB1F yohiragana;3088 yoikorean;3189 yokatakana;30E8 yokatakanahalfwidth;FF96 yokorean;315B yosmallhiragana;3087 yosmallkatakana;30E7 yosmallkatakanahalfwidth;FF6E yotgreek;03F3 yoyaekorean;3188 yoyakorean;3187 yoyakthai;0E22 yoyingthai;0E0D yparen;24B4 ypogegrammeni;037A ypogegrammenigreekcmb;0345 yr;01A6 yring;1E99 ysuperior;02B8 ytilde;1EF9 yturned;028E yuhiragana;3086 yuikorean;318C yukatakana;30E6 yukatakanahalfwidth;FF95 yukorean;3160 yusbigcyrillic;046B yusbigiotifiedcyrillic;046D yuslittlecyrillic;0467 yuslittleiotifiedcyrillic;0469 yusmallhiragana;3085 yusmallkatakana;30E5 yusmallkatakanahalfwidth;FF6D yuyekorean;318B yuyeokorean;318A yyabengali;09DF yyadeva;095F z;007A zaarmenian;0566 zacute;017A zadeva;095B zagurmukhi;0A5B zaharabic;0638 zahfinalarabic;FEC6 zahinitialarabic;FEC7 zahiragana;3056 zahmedialarabic;FEC8 zainarabic;0632 zainfinalarabic;FEB0 zakatakana;30B6 zaqefgadolhebrew;0595 zaqefqatanhebrew;0594 zarqahebrew;0598 zayin;05D6 zayindagesh;FB36 zayindageshhebrew;FB36 zayinhebrew;05D6 zbopomofo;3117 zcaron;017E zcircle;24E9 zcircumflex;1E91 zcurl;0291 zdot;017C zdotaccent;017C zdotbelow;1E93 zecyrillic;0437 zedescendercyrillic;0499 zedieresiscyrillic;04DF zehiragana;305C zekatakana;30BC zero;0030 zeroarabic;0660 zerobengali;09E6 zerodeva;0966 zerogujarati;0AE6 zerogurmukhi;0A66 zerohackarabic;0660 zeroinferior;2080 zeromonospace;FF10 zerooldstyle;F730 zeropersian;06F0 zerosuperior;2070 zerothai;0E50 zerowidthjoiner;FEFF zerowidthnonjoiner;200C zerowidthspace;200B zeta;03B6 zhbopomofo;3113 zhearmenian;056A zhebrevecyrillic;04C2 zhecyrillic;0436 zhedescendercyrillic;0497 zhedieresiscyrillic;04DD zihiragana;3058 zikatakana;30B8 zinorhebrew;05AE zlinebelow;1E95 zmonospace;FF5A zohiragana;305E zokatakana;30BE zparen;24B5 zretroflexhook;0290 zstroke;01B6 zuhiragana;305A zukatakana;30BA #--end therion-5.4.1/texenc/glyphlist.usr000066400000000000000000000004741307545355600172530ustar00rootroot00000000000000# Define custom PostScriptGlyphName to Unicode mappings here (i.e. for glyph # names which are neither included in AGL nor in the form /uniXXXX or /uXXXX). # # This file also overrides the AGL mappings so it's possible to change it here. # # Syntax: ; Omega;03A9 therion-5.4.1/texenc/mktexenc.pl000077500000000000000000000065461307545355600166650ustar00rootroot00000000000000#!/usr/bin/perl -w # This script generates C++ files and headers containing encoding vectors # with Unicode values # # Copyright (C) 2003 Martin Budaj sub find_unicode_value { my $str = shift; my $ch; $str = substr ($str,1); # leading slash is removed $str =~ s/\..*//; # Adobe step 1 $str =~ s/_//; # a little bit odd handling of ligatures -- cf. Adobe step 2 # simplified Adobe step 3 follows if (exists $AGL{$str}) {$ch = $AGL{$str};} elsif ($str =~ /^uni([0-9a-fA-F]{4})/) {$ch = $1;} # simplified again elsif ($str =~ /^u([0-9a-fA-F]{4,6})$/) {$ch = $1;} else {$ch = "0000";} $USED_CHARS{$ch} = 1; return $ch; } # we read Adobe Glyph List first open(IN, "glyphlist.txt") or die "Can't open AGL: $!"; while() { next if /^#/; chomp; next if /^$/; ($n,$u) = split /;/; if (length($u) > 4) {$u = substr($u,0,4)} # we consider only base character $AGL{$n} = $u; } close(IN); # read User's Glyph List open(IN, "glyphlist.usr") or die "Can't open UGL: $!"; while() { next if /^#/; chomp; next if /^$/; ($n,$u) = split /;/; if (length($u) > 4) {$u = substr($u,0,4)} # this shouldn't be used $AGL{$n} = $u; } close(IN); # we read the preprocessed Unicode database open(IN, "basechars.txt") or die "Can't open basechars.txt: $!"; while() { chomp; ($n,$u,$a) = split / /; $UNI{$n}{"base"} = $u; $UNI{$n}{"acc"} = ($a ? $a : "0000"); } close(IN); # read and parse all files with .enc extension in the directory `encodings' @files = glob("encodings/*.enc"); foreach $f (@files) { open (IN, "$f") or die "This can't happen!"; $i = 0; $f =~ /encodings\/(\w+)\./; $enc = $1; $ENCODINGS{$enc} = 1; while() { next if /^%/; s/%.*$//; s/^\s+//; s/\s+$//; @toks = split /\s+/; foreach $tok (@toks) { if ($i>1 && $i<258) { ${$enc}[$i-2] = find_unicode_value($tok); } $i++; } } if ($i != 260) {die "Can't parse file $f!"}; close(IN); } # find relevant base characters (base character is in some encoding(s)) foreach $composite (keys %UNI) { $ch = $composite; # if (!exists $USED_CHARS{$ch}) { # we don't need decompose characters # # already present in one of the fonts TRY: while(exists $UNI{$ch}{"base"}) { $ch = $UNI{$ch}{"base"}; if (exists $USED_CHARS{$ch}) { $UNI2{$composite}{"base"} = $ch; $UNI2{$composite}{"acc"} = $UNI{$composite}{"acc"}; last TRY; } } # } } # finally write C++ files $maxenc = keys %ENCODINGS; $maxbase = keys %UNI2; $banner = "// This file is generated automatically; don't modify it\n\n"; open(OUT, ">../thtexenc.cxx") or die; print OUT $banner; print OUT "static const int max_enc = $maxenc;\n"; print OUT "static const int max_base = $maxbase;\n\n"; print OUT "static const char* encodings[$maxenc] = {\n"; foreach $enc (sort keys %ENCODINGS) { print OUT " \"$enc\",\n"; } print OUT "};\n\n"; print OUT "static const int texenc[256][$maxenc] = {\n"; for ($i=0; $i < 256; $i++) { @tmp = (); foreach $enc (sort keys %ENCODINGS) { push(@tmp,"0x${$enc}[$i]"); } print OUT " {", join(", ",@tmp), "},\n"; } print OUT "};\n\n"; print OUT "static const int unibase[$maxbase][3] = {\n"; foreach $ch (sort keys %UNI2) { print OUT " {0x$ch, 0x$UNI2{$ch}{base}, 0x$UNI2{$ch}{acc}},\n"; } print OUT "};\n"; close OUT; therion-5.4.1/texenc/unidata.pl000077500000000000000000000014541307545355600164650ustar00rootroot00000000000000#!/usr/bin/perl -w # Parsing and simplification of the Unicode database (character decomposition). # The file `UnicodeData.txt' is not distributed with Therion. # Download it from http://www.unicode.org or don't use this program at all. # The output is basechars.txt file. # # Copyright (C) 2003 Martin Budaj open(IN, "UnicodeData.txt") or die "Can't open UnicodeData.txt: $!"; open (OUT, ">basechars.txt") or die; while() { chomp; ($n1,$n,$n,$n,$n,$n6) = split /;/; last if (length($n1)>4); # Therion doesn't support # higher Unicode values if ($n6 && !(/<.+> /)) { $n6 =~ s/<\w+> //; # if (length($n6) > 4) {$n6 = substr($n6,0,4)} # we take only the base char. print OUT "$n1 $n6\n"; } } close(IN); close(OUT); therion-5.4.1/th2ddataobject.cxx000066400000000000000000000141051307545355600166150ustar00rootroot00000000000000/** * @file th2ddataobject.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "th2ddataobject.h" #include "thexception.h" #include "thsymbolset.h" #include "thchenc.h" th2ddataobject::th2ddataobject() { this->pscrapoptr = NULL; this->nscrapoptr = NULL; this->fscrapptr = NULL; this->scale = TT_2DOBJ_SCALE_M; this->scale_numeric = 1.0; this->tags = TT_2DOBJ_TAG_CLIP_AUTO | TT_2DOBJ_TAG_VISIBILITY_ON; this->place = TT_2DOBJ_PLACE_DEFAULT; this->context = -1; this->m_subtype_str = NULL; } th2ddataobject::~th2ddataobject() { } int th2ddataobject::get_class_id() { return TT_2DDATAOBJECT_CMD; } bool th2ddataobject::is(int class_id) { if (class_id == TT_2DDATAOBJECT_CMD) return true; else return thdataobject::is(class_id); } thcmd_option_desc th2ddataobject::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_2ddataobject_opt); if (id == TT_2DOBJ_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch(id) { case TT_2DOBJ_CONTEXT: return thcmd_option_desc(id,2); default: return thcmd_option_desc(id); } } void th2ddataobject::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { int i; switch (cod.id) { case TT_2DOBJ_SCALE: th2dparse_scale(*args, this->scale, this->scale_numeric); if (this->get_class_id() == TT_AREA_CMD) ththrow(("scale specification for area not allowed")) break; case TT_2DOBJ_CLIP: i = thmatch_token(*args, thtt_onoffauto); this->tags &= ~(TT_2DOBJ_TAG_CLIP_ON | TT_2DOBJ_TAG_CLIP_AUTO); switch (i) { case TT_TRUE: this->tags |= TT_2DOBJ_TAG_CLIP_ON; break; case TT_FALSE: break; case TT_AUTO: this->tags |= TT_2DOBJ_TAG_CLIP_AUTO; break; default: ththrow(("invalid clip -- %s",*args)) } break; case TT_2DOBJ_VISIBILITY: i = thmatch_token(*args, thtt_bool); this->tags &= ~TT_2DOBJ_TAG_VISIBILITY_ON; switch (i) { case TT_TRUE: this->tags |= TT_2DOBJ_TAG_VISIBILITY_ON; break; case TT_FALSE: break; default: ththrow(("invalid visibility switch -- %s",*args)) } break; case TT_2DOBJ_PLACE: this->place = thmatch_token(*args, thtt_2ddataobject_place); if (this->place == TT_2DOBJ_PLACE_UNKNOWN) ththrow(("invalid place value -- %s",*args)) break; case TT_2DOBJ_CONTEXT: this->context = thsymbolset__get_id(args[0], args[1]); if (this->context < 0) ththrow(("invalid object context -- %s %s", args[0], args[1])) if ((this->context > SYMP_ZZZ) && (this->context != SYMX_POINT_AIRDRAUGHT) && (this->context != SYMX_POINT_HEIGHT) && (this->context != SYMX_POINT_PASSAGEHEIGHT) && (this->context != SYMX_POINT_STATION) && (this->context != SYMX_POINT_WATERFLOW) && (this->context != SYMX_LINE_BORDER) && (this->context != SYMX_LINE_SURVEY) && (this->context != SYMX_LINE_WALL) && (this->context != SYMX_LINE_WATERFLOW)) ththrow(("object context not allowed -- %s %s", args[0], args[1])) break; default: thdataobject::set(cod, args, argenc, indataline); } } int th2ddataobject::get_context() { return THCTX_SCRAP; } void th2ddataobject::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"th2ddataobject:\n"); fprintf(outf,"\tscale: %d\n",this->scale); fprintf(outf,"\ttags: %d\n",this->tags); // insert intended print of object properties here } thbuffer sTTtype, sTTsubtype; void th2dsplitTT(char * src, char ** type, char ** subtype) { size_t sl, x, tl, stl; char * t, * st; sl = strlen(src); sTTtype.guarantee(sl+1); sTTsubtype.guarantee(sl+1); t = sTTtype.get_buffer(); st = sTTsubtype.get_buffer(); t[0] = 0; st[0] = 0; tl = 0; stl = 0; bool inst = false; for(x = 0; x < sl; x++) { if (src[x] == ':') { inst = true; } else if (inst) { st[stl] = src[x]; stl++; st[stl] = 0; } else { t[tl] = src[x]; tl++; t[tl] = 0; } } *type = t; *subtype = st; } void th2ddataobject::parse_u_subtype(const char * subtype) { if (th_is_keyword(subtype)) { this->m_subtype_str = this->db->strstore(subtype, true); } else ththrow(("invalid subtype name -- %s", subtype)) } void th2dparse_scale(const char * spec, int & type, double & value) { type = thmatch_token(spec, thtt_2dobj_scales); if (type == TT_2DOBJ_SCALE_UNKNOWN) { // try to parse numeric value thparse_double(type, value, spec); if ((type != TT_SV_NUMBER) || (value <= 0.0)) { ththrow(("invalid scale -- %s", spec)); } else { type = TT_2DOBJ_SCALE_NUMBERIC; } } else { switch(type) { case TT_2DOBJ_SCALE_XS: value = 0.5; break; case TT_2DOBJ_SCALE_S: value = 0.707; break; case TT_2DOBJ_SCALE_M: value = 1.0; break; case TT_2DOBJ_SCALE_L: value = 1.414; break; case TT_2DOBJ_SCALE_XL: value = 2.0; break; } } } therion-5.4.1/th2ddataobject.h000066400000000000000000000114751307545355600162510ustar00rootroot00000000000000/** * @file th2ddataobject.h * 2ddataobject module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef th2ddataobject_h #define th2ddataobject_h #include "thdataobject.h" /** * Point scale tokens. */ enum { TT_2DOBJ_SCALE_UNKNOWN, TT_2DOBJ_SCALE_NUMBERIC, TT_2DOBJ_SCALE_XS, TT_2DOBJ_SCALE_S, TT_2DOBJ_SCALE_M, TT_2DOBJ_SCALE_L, TT_2DOBJ_SCALE_XL, }; /** * Point scale parsing table. */ static const thstok thtt_2dobj_scales[] = { {"L", TT_2DOBJ_SCALE_L}, {"M", TT_2DOBJ_SCALE_M}, {"S", TT_2DOBJ_SCALE_S}, {"XL", TT_2DOBJ_SCALE_XL}, {"XS", TT_2DOBJ_SCALE_XS}, {"huge", TT_2DOBJ_SCALE_XL}, {"l", TT_2DOBJ_SCALE_L}, {"large", TT_2DOBJ_SCALE_L}, {"m", TT_2DOBJ_SCALE_M}, {"normal", TT_2DOBJ_SCALE_M}, {"s", TT_2DOBJ_SCALE_S}, {"small", TT_2DOBJ_SCALE_S}, {"tiny", TT_2DOBJ_SCALE_XS}, {"xl", TT_2DOBJ_SCALE_XL}, {"xs", TT_2DOBJ_SCALE_XS}, {NULL, TT_2DOBJ_SCALE_UNKNOWN}, }; /** * 2ddataobject command options tokens. */ enum { TT_2DOBJ_UNKNOWN = 2000, TT_2DOBJ_SCALE = 2001, TT_2DOBJ_CLIP = 2002, TT_2DOBJ_PLACE = 2003, TT_2DOBJ_VISIBILITY = 2004, TT_2DOBJ_CONTEXT = 2005, }; /** * Default 2D object tags. */ enum { TT_2DOBJ_TAG_NONE = 0, TT_2DOBJ_TAG_CLIP_AUTO = 1024, TT_2DOBJ_TAG_CLIP_ON = 2048, TT_2DOBJ_TAG_VISIBILITY_ON = 4096, }; enum { TT_2DOBJ_PLACE_BOTTOM = 0, TT_2DOBJ_PLACE_DEFAULT_BOTTOM = 1, TT_2DOBJ_PLACE_DEFAULT = 3, TT_2DOBJ_PLACE_DEFAULT_TOP = 4, TT_2DOBJ_PLACE_TOP = 5, TT_2DOBJ_PLACE_UNKNOWN = 6, }; /** * 2ddataobject command options parsing table. */ static const thstok thtt_2ddataobject_opt[] = { {"clip", TT_2DOBJ_CLIP}, {"context", TT_2DOBJ_CONTEXT}, {"place", TT_2DOBJ_PLACE}, {"scale", TT_2DOBJ_SCALE}, {"visibility", TT_2DOBJ_VISIBILITY}, {"visible", TT_2DOBJ_VISIBILITY}, {NULL, TT_2DOBJ_UNKNOWN}, }; /** * 2ddataobject place options. */ static const thstok thtt_2ddataobject_place[] = { {"bottom", TT_2DOBJ_PLACE_BOTTOM}, {"default", TT_2DOBJ_PLACE_DEFAULT}, {"top", TT_2DOBJ_PLACE_TOP}, {NULL, TT_2DOBJ_PLACE_UNKNOWN}, }; /** * 2ddataobject class. */ class th2ddataobject : public thdataobject { public: const char * m_subtype_str; th2ddataobject * pscrapoptr, ///< Previous object in the scrap. * nscrapoptr; ///< Next object in the scrap. class thscrap * fscrapptr; ///< Father scrap pointer. int scale; ///< 2D map object scaling. double scale_numeric; ///< 2D map object numeric exact scaling. unsigned tags; ///< 2D map object tags. int place, context; /** * Standard constructor. */ th2ddataobject(); /** * Standard destructor. */ ~th2ddataobject(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "th2ddataobject";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Get context for object. */ virtual int get_context(); /** * Export object to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); /** * Export object to metapost file. */ virtual bool export_mp_end(class thexpmapmpxs * out); /** * Parse user defined subtype. */ void parse_u_subtype(const char * subtype); }; void th2dsplitTT(char * src, char ** type, char ** subtype); void th2dparse_scale(const char * spec, int & type, double & value); #endif therion-5.4.1/tharea.cxx000066400000000000000000000152671307545355600152110ustar00rootroot00000000000000/* * @file tharea.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "tharea.h" #include "thexception.h" #include "thobjectname.h" #include "thchenc.h" #include "thexpmap.h" #include "thline.h" tharea::tharea() { this->type = TT_AREA_TYPE_UNKNOWN; this->place = TT_2DOBJ_PLACE_DEFAULT_BOTTOM; this->first_line = NULL; this->last_line = NULL; this->m_outline_line = NULL; } tharea::~tharea() { delete this->m_outline_line; } void tharea::start_insert() { if (this->type == TT_AREA_TYPE_U) { if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for area of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); } } int tharea::get_class_id() { return TT_AREA_CMD; } bool tharea::is(int class_id) { if (class_id == TT_AREA_CMD) return true; else return th2ddataobject::is(class_id); } int tharea::get_cmd_nargs() { return 1; } const char * tharea::get_cmd_end() { return "endarea"; } const char * tharea::get_cmd_name() { return "area"; } thcmd_option_desc tharea::get_cmd_option_desc(const char * opts) { // int id = thmatch_token(opts, thtt_area_opt); // if (id == TT_AREA_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); // else // return thcmd_option_desc(id); } void tharea::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { char * type, * subtype; if (cod.id == 1) cod.id = TT_AREA_TYPE; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->insert_border_line(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_AREA_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; default: th2ddataobject::set(cod, args, argenc, indataline); } } void tharea::parse_type(char * tstr) { this->type = thmatch_token(tstr, thtt_area_types); if (this->type == TT_AREA_TYPE_UNKNOWN) ththrow(("unknown area type -- %s", tstr)) if (this->type == TT_AREA_TYPE_DIMENSIONS) ththrow(("area dimensions is not supported as ordinary type")) } void tharea::parse_subtype(char * ststr) { if (this->type == TT_AREA_TYPE_UNKNOWN) ththrow(("area type must be specified before subtype")) if (this->type == TT_AREA_TYPE_U) { this->parse_u_subtype(ststr); return; } else ththrow(("invalid type - subtype combination")) } void tharea::self_delete() { delete this; } void tharea::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"tharea:\n"); fprintf(outf,"\ttype: %d\n",this->type); if (this->first_line != NULL) { fprintf(outf,"\tborder lines:\n"); thdb2dab * cbl = this->first_line; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); fprintf(outf,"\n"); cbl = cbl->next_line; } } } void tharea::insert_border_line(int npars, char ** pars) { thdb2dab * bl; if (npars != 1) ththrow(("one line name per line allowed")) bl = this->db->db2d.insert_border_line(); bl->source = this->db->csrc; thparse_objectname(bl->name,& this->db->buff_stations,*pars); if (this->last_line == NULL) { this->first_line = bl; this->last_line = bl; bl->next_line = NULL; bl->prev_line = NULL; } else { this->last_line->next_line = bl; bl->prev_line = this->last_line; this->last_line = bl; } } bool tharea::export_mp(class thexpmapmpxs * out) { int macroid = SYMA_WATER, omacroid; #define tharea_type_export_mp(type,mid) case type: \ macroid = mid; \ break; switch (this->type) { tharea_type_export_mp(TT_AREA_TYPE_SAND, SYMA_SAND) tharea_type_export_mp(TT_AREA_TYPE_DEBRIS, SYMA_DEBRIS) tharea_type_export_mp(TT_AREA_TYPE_SUMP, SYMA_SUMP) tharea_type_export_mp(TT_AREA_TYPE_WATER, SYMA_WATER) tharea_type_export_mp(TT_AREA_TYPE_BLOCKS, SYMA_BLOCKS) tharea_type_export_mp(TT_AREA_TYPE_SNOW, SYMA_SNOW) tharea_type_export_mp(TT_AREA_TYPE_ICE, SYMA_ICE) tharea_type_export_mp(TT_AREA_TYPE_CLAY, SYMA_CLAY) tharea_type_export_mp(TT_AREA_TYPE_PEBBLES, SYMA_PEBBLES) tharea_type_export_mp(TT_AREA_TYPE_BEDROCK, SYMA_BEDROCK) tharea_type_export_mp(TT_AREA_TYPE_FLOWSTONE, SYMA_FLOWSTONE) tharea_type_export_mp(TT_AREA_TYPE_MOONMILK, SYMA_MOONMILK) tharea_type_export_mp(TT_AREA_TYPE_U, SYMA_U) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (this->first_line == NULL) return(false); if (out->file == NULL) return(true); th2ddataobject::export_mp(out); thdb_revision_set_type::iterator ri = this->db->revision_set.find(threvision(this->id, 0)); fprintf(out->file,"current_src := \"%s [%ld]\";\n", ri->srcf.name, ri->srcf.line); fprintf(out->file,"string area_border[];\n"); thdb2dab * bl = this->first_line; int blnum = 1; while (bl != NULL) { fprintf(out->file,"area_border[%d] := \"%s\";\n", blnum, bl->line->name); bl = bl->next_line; blnum++; } if (this->type == TT_AREA_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"a_u_%s(buildcycle(",this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(buildcycle(",out->symset->get_mp_macro(omacroid)); } this->first_line->line->export_path_mp(out); bl = this->first_line->next_line; while (bl != NULL) { fprintf(out->file,",\n"); bl->line->export_path_mp(out); bl = bl->next_line; } fprintf(out->file,"));\n"); th2ddataobject::export_mp_end(out); return(false); } therion-5.4.1/tharea.h000066400000000000000000000101421307545355600146210ustar00rootroot00000000000000/** * @file tharea.h * Area module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef tharea_h #define tharea_h #include "th2ddataobject.h" #include "thdb2dab.h" /** * Area command options tokens. */ enum { TT_AREA_UNKNOWN = 3000, TT_AREA_TYPE = 3001, }; /** * Area command options parsing table. */ static const thstok thtt_area_opt[] = { {NULL, TT_AREA_UNKNOWN}, }; /** * Area type tokens. */ enum { TT_AREA_TYPE_UNKNOWN, TT_AREA_TYPE_U, TT_AREA_TYPE_WATER, TT_AREA_TYPE_SUMP, TT_AREA_TYPE_SAND, TT_AREA_TYPE_DEBRIS, TT_AREA_TYPE_BLOCKS, TT_AREA_TYPE_SNOW, TT_AREA_TYPE_ICE, TT_AREA_TYPE_CLAY, TT_AREA_TYPE_PEBBLES, TT_AREA_TYPE_BEDROCK, TT_AREA_TYPE_FLOWSTONE, TT_AREA_TYPE_MOONMILK, TT_AREA_TYPE_DIMENSIONS, }; /** * Area types parsing table. */ static const thstok thtt_area_types[] = { {"bedrock", TT_AREA_TYPE_BEDROCK}, {"blocks", TT_AREA_TYPE_BLOCKS}, {"clay", TT_AREA_TYPE_CLAY}, {"debris", TT_AREA_TYPE_DEBRIS}, {"dimensions", TT_AREA_TYPE_DIMENSIONS}, {"flowstone", TT_AREA_TYPE_FLOWSTONE}, {"ice", TT_AREA_TYPE_ICE}, {"moonmilk", TT_AREA_TYPE_MOONMILK}, {"pebbles", TT_AREA_TYPE_PEBBLES}, {"sand", TT_AREA_TYPE_SAND}, {"snow", TT_AREA_TYPE_SNOW}, {"sump", TT_AREA_TYPE_SUMP}, {"u",TT_AREA_TYPE_U}, {"water", TT_AREA_TYPE_WATER}, {NULL, TT_AREA_TYPE_UNKNOWN}, }; /** * Area class. */ class tharea : public th2ddataobject { public: friend class thdb2d; int type; ///< Area type. thdb2dab * first_line, ///< First border line. * last_line; ///< Last border line. class thline * m_outline_line; void insert_border_line(int npars, char ** pars); ///< Insert border line. public: /** * Standard constructor. */ tharea(); /** * Standard destructor. */ ~tharea(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "tharea";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); void parse_type(char * tstr); ///< Parse area type. void parse_subtype(char * ststr); ///< Parse area subtype. virtual void start_insert(); }; #endif therion-5.4.1/thattr.cxx000066400000000000000000000513751307545355600152530ustar00rootroot00000000000000/** * @file thattr.cxx */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thattr.h" #include "extern/shapefil.h" #include "thexception.h" #include "thchenc.h" #include #include #include #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif thattr::thattr() { this->m_num_fields = 0; this->m_num_objects = 0; this->m_obj_last = NULL; } bool thattr_attr::has_flag(unsigned long flag) { return ((this->m_flags & flag) != 0); } void thattr_attr::set_flag(unsigned long flag, bool value) { if (value) this->m_flags |= flag; else this->m_flags &= (~flag); } void thattr_obj::set_tree_level(size_t level) { m_tree_level = level; } thattr_field * thattr::insert_field(const char * name) { thattr_field tmp, * r; tmp.m_id = this->m_num_fields++; tmp.m_name = name; tmp.m_parent = this; r = &(*this->m_field_list.insert(this->m_field_list.end(), tmp)); for(size_t i = 0; i < tmp.m_name.size(); ++i) tmp.m_name[i] = tolower(tmp.m_name[i]); this->m_field_map[tmp.m_name] = r; return r; } thattr_field * thattr::get_field(const char * name, bool ins) { thattr_name2field_map::iterator it; std::string str(name); for(size_t i = 0; i < str.size(); ++i) str[i] = tolower(str[i]); it = this->m_field_map.find(str); if (it == this->m_field_map.end()) { if (!ins) return NULL; else { return this->insert_field(name); } } else return it->second; } thattr_obj * thattr::get_object() { return this->m_obj_last; } thattr_obj * thattr::get_object(long user_id) { if ((this->m_obj_last != NULL) && (this->m_obj_last->m_user_id == user_id)) return this->m_obj_last; thattr_usrid2obj_map::iterator it; it = this->m_obj_usrmap.find(user_id); if (it == this->m_obj_usrmap.end()) return NULL; else return it->second; } thattr_obj * thattr::insert_object(void * data, long user_id) { thattr_obj tmp, * r; r = NULL; if (user_id >= 0) { r = this->get_object(user_id); } if (r == NULL) { tmp.m_id = this->m_num_objects++; tmp.m_data = data; tmp.m_parent = this; r = &(*this->m_obj_list.insert(this->m_obj_list.end(), tmp)); this->m_obj_map[tmp.m_id] = r; if (user_id > -1) { r->m_user_id = user_id; this->m_obj_usrmap[user_id] = r; } } this->m_obj_last = r; return r; } void thattr::insert_attribute(const char * name, thattr_attr & attr, long user_id) { // Find object. thattr_obj * o; if (user_id < 0) o = this->m_obj_last; else o = this->get_object(user_id); if (o == NULL) return; // Find field. thattr_field * f = this->get_field(name, true); // Insert attribute. if ((attr.m_type == THATTR_STRING) && (attr.m_val_string.length() == 0)) { o->m_attributes.erase(f->m_id); } else { attr.m_field = f; attr.m_obj = o; o->m_attributes[f->m_id] = attr; o->m_last_attribute = &(o->m_attributes[f->m_id]); } } thattr_attr * thattr::get_attribute() { thattr_obj * o = this->m_obj_last; if (o == NULL) return NULL; thattr_attr * a = o->m_last_attribute; return a; } void thattr::insert_attribute(const char * name, const char * value, long user_id) { int sv(0); long lv(0); double d(0.0); thattr_attr a; a.m_type = THATTR_STRING; // cast value type if ((value != NULL) && (strlen(value) > 0)) { thparse_double(sv, d, value); if (sv == TT_SV_NUMBER) { a.m_type = THATTR_DOUBLE; lv = long(d); if (double(lv) == d) { a.m_type = THATTR_INTEGER; } } } // insert attribute switch (a.m_type) { case THATTR_INTEGER: a.m_val_long = lv; break; case THATTR_DOUBLE: a.m_val_double = d; break; case THATTR_STRING: if (value != NULL) a.m_val_string = std::string(value); else a.m_val_string = std::string(""); break; } this->insert_attribute(name, a, user_id); } void thattr::insert_attribute(const char * name, double value, long user_id) { thattr_attr a; a.m_type = THATTR_DOUBLE; a.m_val_double = value; this->insert_attribute(name, a, user_id); } void thattr::insert_attribute(const char * name, long value, long user_id) { thattr_attr a; a.m_type = THATTR_INTEGER; a.m_val_long = value; this->insert_attribute(name, a, user_id); } void thattr::copy_attributes(thattr_obj * object, long user_id) { if (object == NULL) return; thattr_id2attr_map::iterator it; it = object->m_attributes.begin(); thattr_attr tmp; while (it != object->m_attributes.end()) { tmp = it->second; this->insert_attribute(it->second.m_field->m_name.c_str(), tmp, user_id); ++it; } } std::string expdbf_field_name(std::string name, std::set & fset) { std::string nn; nn = name; int i; char x[20]; if (nn.length() > 11) { do { i = 0; sprintf(x, "%d", i); nn = name.substr(0, 10 - strlen(x)); nn += "_"; nn += x; i++; } while (fset.find(nn) != fset.end()); } fset.insert(nn); return nn; } void thattr::analyze_fields() { // modify record names to match DBF format size_t i; std::set fnset; thattr_field * cf; thattr_field_list::iterator fli; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); cf->m_type = THATTR_INTEGER; cf->m_present = false; cf->m_xdbf_decimals = 0; cf->m_xdbf_width = 1; cf->m_xdbf_name = expdbf_field_name(cf->m_name, fnset); if (cf->m_double_format.empty()) cf->m_double_format = "%.1f"; cf->m_xmp_name = "ATTR_"; cf->m_xmp_name += cf->m_name; for(i = 5; i < cf->m_xmp_name.size(); ++i) { if (cf->m_xmp_name[i] <= '9') cf->m_xmp_name[i] = cf->m_xmp_name[i] + 8; else if ((cf->m_xmp_name[i] < 'a')) cf->m_xmp_name[i] = tolower(cf->m_xmp_name[i]); } cf->m_maxs = 0; } // check record types and limits long cvall; double cvald; size_t cslen; int ctype; char b[64]; thattr_attr * ca; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { for(ai = oi->m_attributes.begin(); ai != oi->m_attributes.end(); ai++) { ca = &(ai->second); cf = ca->m_field; ctype = ca->m_type; switch (ctype) { case THATTR_INTEGER: cvall = ca->m_val_long; ca->m_val_double = double(cvall); sprintf(b,"%ld", cvall); ca->m_val_string = b; break; case THATTR_DOUBLE: cvald = ai->second.m_val_double; ca->m_val_long = long(cvald); sprintf(b,"%f", cvald); ca->m_val_string = b; if (cf->m_type == THATTR_INTEGER) cf->m_type = THATTR_DOUBLE; break; case THATTR_STRING: if ((cf->m_type == THATTR_INTEGER) || (cf->m_type == THATTR_DOUBLE)) cf->m_type = THATTR_STRING; break; } cslen = ca->m_val_string.length(); if ((!cf->m_present) && ((ctype == THATTR_INTEGER) || (ctype == THATTR_DOUBLE))) { cf->m_maxd = ca->m_val_double; cf->m_mind = ca->m_val_double; cf->m_maxi = ca->m_val_long; cf->m_mini = ca->m_val_long; } cf->m_present = true; if (cslen > cf->m_maxs) cf->m_maxs = cslen; if ((ctype == THATTR_INTEGER) || (ctype == THATTR_DOUBLE)) { if (cf->m_maxd < ca->m_val_double) cf->m_maxd = ca->m_val_double; if (cf->m_mind > ca->m_val_double) cf->m_mind = ca->m_val_double; if (cf->m_maxi < ca->m_val_long) cf->m_maxi = ca->m_val_long; if (cf->m_mini > ca->m_val_long) cf->m_mini = ca->m_val_long; } } } // postprocess fields #define myabs(x) ((x) > 0 ? (x) : ((x) < 0 ? -(x) : 1)) int w2; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); switch (cf->m_type) { case THATTR_INTEGER: cf->m_xdbf_decimals = 0; cf->m_xdbf_width = (int) log10(double(myabs(cf->m_maxi))); w2 = (int) log10(double(myabs(cf->m_mini))); if (cf->m_xdbf_width < w2) cf->m_xdbf_width = w2; ++cf->m_xdbf_width; break; case THATTR_DOUBLE: cf->m_xdbf_width = (int) log10(myabs(cf->m_maxd)); w2 = (int) log10(myabs(cf->m_mind)); if (cf->m_xdbf_width < w2) cf->m_xdbf_width = w2; ++cf->m_xdbf_width; cf->m_xdbf_decimals = 0; if (cf->m_xdbf_width < 12) { cf->m_xdbf_decimals = 12 - cf->m_xdbf_width; cf->m_xdbf_width = 12; } break; case THATTR_STRING: cf->m_xdbf_width = int(cf->m_maxs + 1); break; } } } void thattr::export_dbf(const char * fname, int encoding) { // Create file. DBFHandle h; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); h = DBFCreate(fname); if (h == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. DBFFieldType ftype(FTInvalid); for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); switch (cf->m_type) { case THATTR_INTEGER: ftype = FTInteger; break; case THATTR_DOUBLE: ftype = FTDouble; break; case THATTR_STRING: ftype = FTString; break; } cf->m_xdbf_field = DBFAddField(h, cf->m_xdbf_name.c_str(), ftype, cf->m_xdbf_width, cf->m_xdbf_decimals); if (cf->m_xdbf_field == -1) { thwarning(("error writing to %s", fname)) goto EXPORT_DBF_EXIT; } } // Insert objects and write fields. for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = oi->m_attributes.find(cf->m_id); if (ai == oi->m_attributes.end()) { DBFWriteNULLAttribute(h, (int) oi->m_id, cf->m_xdbf_field); } else { ca = &(ai->second); switch (cf->m_type) { case THATTR_INTEGER: DBFWriteIntegerAttribute(h, (int) oi->m_id, cf->m_xdbf_field, (int) ca->m_val_long); break; case THATTR_DOUBLE: DBFWriteDoubleAttribute(h, (int) oi->m_id, cf->m_xdbf_field, ca->m_val_double); break; case THATTR_STRING: thdecode(&enc, encoding, ca->m_val_string.c_str()); DBFWriteStringAttribute(h, (int) oi->m_id, cf->m_xdbf_field, enc.get_buffer()); //DBFWriteStringAttribute(h, (int) oi->m_id, cf->m_xdbf_field, ca->m_val_string.c_str()); break; } } } } // Close DBF file. EXPORT_DBF_EXIT: DBFClose(h); } void thattr::export_mp_header(FILE * f) { if (this->m_num_fields == 0) return; this->analyze_fields(); } void thattr::export_mp_object_begin(FILE * f, long user_id) { if (this->m_num_fields == 0) return; thattr_obj * o = this->get_object(user_id); if (o == NULL) return; if (f == NULL) return; thattr_attr * ca; thattr_field * cf; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; std::string news; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = o->m_attributes.find(cf->m_id); if (ai != o->m_attributes.end()) { ca = &(ai->second); news = ca->m_val_string; thdecode_mp(&enc, news.c_str()); fprintf(f,"string %s;\n", cf->m_xmp_name.c_str()); fprintf(f,"%s := \"%s\";\n", cf->m_xmp_name.c_str(), enc.get_buffer()); } } } void thattr::export_mp_object_end(FILE * f, long user_id) { if (this->m_num_fields == 0) return; thattr_obj * o = this->get_object(user_id); if (o == NULL) return; if (f == NULL) return; thattr_field * cf; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = o->m_attributes.find(cf->m_id); if (ai != o->m_attributes.end()) { fprintf(f,"save %s;\n", cf->m_xmp_name.c_str()); } } } void thattr::export_txt(const char * fname, int encoding) { // Create file. FILE * f; unsigned i; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. bool hasone = false; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); fprintf(f,"%s%s",hasone ? "\t" : "",fli->m_name.c_str()); hasone = true; } fprintf(f,"\n"); // Insert objects and write fields. const char * value; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { hasone = false; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); ai = oi->m_attributes.find(cf->m_id); if (ai == oi->m_attributes.end()) { value = ""; } else { ca = &(ai->second); value = ca->m_val_string.c_str(); } if (m_tree && (!hasone)) { for(i = 0; i < oi->m_tree_level; i++) fprintf(f," "); } fprintf(f,"%s%s",hasone ? "\t" : "",value); hasone = true; } fprintf(f,"\n"); } fclose(f); } void thattr::export_kml(const char * fname, const char * name_field, const char * title) { // Create file. FILE * f; thattr_obj_list::iterator oi, oinext; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; this->analyze_fields(); thattr_field * lat = get_field("Latitude", false), * lon = get_field("Longitude", false), * alt = get_field("Altitude", false), * namef = get_field(name_field, false); double dlon, dlat, dalt; if ((lat == NULL) || (lon == NULL)) { thwarning(("geographical reference is not associated with table")); return; } f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } fprintf(f,"\n\n\n"); fprintf(f, "\n", title); // Insert objects and write fields. int clevel, nlevel; clevel = 0; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end();) { oinext = oi; oinext ++; if ((oinext != this->m_obj_list.end()) && (oinext->m_tree_level > oi->m_tree_level)) { ai = oi->m_attributes.find(namef->m_id); fprintf(f,"\n\n",ai->second.m_val_string.c_str()); clevel++; } else { ai = oi->m_attributes.find(lat->m_id); dlat = ai->second.m_val_double; ai = oi->m_attributes.find(lon->m_id); dlon = ai->second.m_val_double; ai = oi->m_attributes.find(alt->m_id); dalt = ai->second.m_val_double; if (namef != NULL) ai = oi->m_attributes.find(namef->m_id); fprintf(f,"\n\n\n%.14f,%.14f,%.14f\n\n\n", (namef != NULL) ? ai->second.m_val_string.c_str() : "", dlon, dlat, dalt); } //for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { // cf = &(*fli); // ai = oi->m_attributes.find(cf->m_id); // if (ai == oi->m_attributes.end()) { // value = ""; // } else { // ca = &(ai->second); // value = ca->m_val_string.c_str(); // } // fprintf(f,"%s%s",hasone ? "\t" : "",value); //} oi++; nlevel = 0; if (oi != this->m_obj_list.end()) nlevel = oi->m_tree_level; while (nlevel < clevel) { fprintf(f,"\n"); clevel--; } } fprintf(f,"\n\n"); fclose(f); } void thattr::export_html(const char * fname, const char * title, int encoding) { // Create file. FILE * f; thattr_attr * ca; thattr_field * cf; thattr_obj_list::iterator oi, oinext; thattr_id2attr_map::iterator ai; thattr_field_list::iterator fli; thbuffer enc; const char * alstr; this->analyze_fields(); f = fopen(fname, "w"); if (f == NULL) { thwarning(("unable to open file for output -- %s", fname)); return; } // Create fields. fprintf(f,"\n\n%s\n", title); fprintf(f, "\n" "\n" "\n" "\n\n"); fprintf(f,"\n"); for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); if ((cf->m_type == THATTR_DOUBLE) || (cf->m_type == THATTR_INTEGER)) { alstr = "right"; } else { alstr = "left"; } fprintf(f,"", alstr, fli->m_name.c_str()); } fprintf(f,"\n"); // Insert objects and write fields. const char * value; bool header_value; thbuffer valb; valb.guarantee(128); std::string value_plus; for(oi = this->m_obj_list.begin(); oi != this->m_obj_list.end(); ++oi) { fprintf(f,"", oi->m_tree_node_id); header_value = true; for(fli = this->m_field_list.begin(); fli != this->m_field_list.end(); ++fli) { cf = &(*fli); if ((cf->m_type == THATTR_DOUBLE) || (cf->m_type == THATTR_INTEGER)) { alstr = "right"; } else { alstr = "left"; } ai = oi->m_attributes.find(cf->m_id); ca = NULL; if (ai == oi->m_attributes.end()) { value = " "; } else { ca = &(ai->second); if (ca->m_type == THATTR_DOUBLE) { snprintf(valb.get_buffer(), 127, cf->m_double_format.c_str(), ca->m_val_double); value = valb.get_buffer(); } else value = ca->m_val_string.c_str(); } fprintf(f,"", value); header_value = false; } fprintf(f,"\n"); } fprintf(f,"
%s
m_tree_level); oinext = oi; oinext++; if ((oinext != this->m_obj_list.end()) && (oinext->m_tree_level > oi->m_tree_level)) { value_plus = "m_tree_node_id; value_plus += "')\">"; value_plus += value; value_plus += ""; value = value_plus.c_str(); } } if ((ca != NULL) && (ca->has_flag(THATTRFLAG_HIDDEN))) fprintf(f," style=\"color:#808080\""); fprintf(f,">%s
\n"); fprintf(f,"\n\n"); fclose(f); } therion-5.4.1/thattr.h000066400000000000000000000125041307545355600146670ustar00rootroot00000000000000/** * @file thattr.h * Generic object attribute structure. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thattr_h #define thattr_h #include #include #include #include #include "thmbuffer.h" #include "thchenc.h" enum { THATTR_NA, THATTR_STRING, THATTR_DOUBLE, THATTR_INTEGER, }; /** * Single attribute structure. */ enum { THATTRFLAG_NONE = 0, THATTRFLAG_HIDDEN = 1, }; struct thattr_attr { std::string m_val_string; ///< String value. unsigned long m_flags; ///< Value flags. double m_val_double; ///< Double value. long m_val_long; ///< Integer value. int m_type; ///< Attribute type. thattr_attr() : m_flags(THATTRFLAG_NONE) {} bool has_flag(unsigned long flag); void set_flag(unsigned long flag, bool value); struct thattr_field * m_field; ///< Attribute's field. struct thattr_obj * m_obj; ///< Attribute's object. }; typedef std::map thattr_id2attr_map; /** * Field structure. */ struct thattr_field { std::string m_name; ///< Field name. size_t m_id; ///< Internal field identifier. struct thattr * m_parent; ///< Parent attribute class. int m_type; ///< Generic export type. bool m_present; ///< Whether there is any value present. long m_mini, ///< Minimum integer value. m_maxi; ///< Maximum integer value. double m_mind, ///< Minimum double value. m_maxd; ///< Maximum double value. size_t m_maxs; ///< Maximum string length. int m_xdbf_width, ///< DBF field width. m_xdbf_decimals, ///< DBF field decimals. m_xdbf_field; ///< DBF field identifier. std::string m_xdbf_name; ///< DBF field name. std::string m_xmp_name; ///< Metapost field name. // m_xmp_last; ///< Last string value exported for given field. std::string m_double_format; ///< Double format. }; typedef std::map thattr_name2field_map; typedef std::list thattr_field_list; /** * Object structure. */ struct thattr_obj { long m_user_id; ///< User defined ID. size_t m_id, ///< Internal ID. m_tree_level; ///< Tree level of object, if table has tree structure. const char * m_tree_node_id; ///< Tree node id. void * m_data; ///< User defined data. thattr_id2attr_map m_attributes; ///< Map of attributes. thattr_attr * m_last_attribute; ///< Last attribute set for given object. struct thattr * m_parent; ///< Parent attribute class. thattr_obj() : m_user_id(-1), m_tree_level(0), m_tree_node_id(""), m_data(NULL), m_last_attribute(NULL) {} void set_tree_level(size_t level); }; typedef std::map thattr_id2obj_map; typedef std::map thattr_usrid2obj_map; typedef std::list thattr_obj_list; /** * Generic object attribute structure. */ struct thattr { size_t m_num_fields, ///< Number of fields. m_num_objects; ///< Number of objects. bool m_tree; ///< Whether table has a tree structure. thattr_obj_list m_obj_list; ///< List of objects. thattr_id2obj_map m_obj_map; ///< ID -> Object map. thattr_usrid2obj_map m_obj_usrmap; ///< User ID -> Object map. thattr_field_list m_field_list; ///< List of all fields. thattr_name2field_map m_field_map; ///< Name -> Field map. thattr(); thattr_field * insert_field(const char * name); thattr_field * get_field(const char * name, bool ins = false); thattr_obj * m_obj_last; ///< Last inserted object. thattr_obj * insert_object(void * data, long user_id = -1); thattr_obj * get_object(); ///< Return last inserted object. thattr_obj * get_object(long user_id); void insert_attribute(const char * name, thattr_attr & attr, long user_id = -1); void insert_attribute(const char * name, const char * value, long user_id = -1); void insert_attribute(const char * name, double value, long user_id = -1); void insert_attribute(const char * name, long value, long user_id = -1); thattr_attr * get_attribute(); void copy_attributes(thattr_obj * object, long user_id = -1); void analyze_fields(); void export_dbf(const char * fname, int encoding = TT_UTF_8); void export_txt(const char * fname, int encoding = TT_UTF_8); void export_html(const char * fname, const char * title, int encoding = TT_UTF_8); void export_kml(const char * fname, const char * name_field, const char * title); void export_mp_header(FILE * f); void export_mp_object_begin(FILE * f, long user_id); void export_mp_object_end(FILE * f, long user_id); }; #endif therion-5.4.1/thbezier.cxx000066400000000000000000001310531307545355600155510ustar00rootroot00000000000000/** * @file thbezier.cxx */ /* * Bezier interpolation for inkscape drawing code. * Original code published in: * An Algorithm for Automatically Fitting Digitized Curves * by Philip J. Schneider * "Graphics Gems", Academic Press, 1990 * * Authors: * Philip J. Schneider * Lauris Kaplinski * Peter Moulder * * Copyright (C) 1990 Philip J. Schneider * Copyright (C) 2001 Lauris Kaplinski * Copyright (C) 2001 Ximian, Inc. * Copyright (C) 2003,2004 Monash University * */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thbezier.h" #include #include #include #define __SP_BEZIER_UTILS_C__ #define SP_HUGE 1e5 #define noBEZIER_DEBUG #ifdef HAVE_CONFIG_H # include #endif #ifdef HAVE_IEEEFP_H # include #endif //#include //#include //#include //#include //#include #include #ifdef THMSVC #include #define hypot _hypot #endif #define g_return_val_if_fail(C,V) if (!(C)) return (V); #define g_return_if_fail(C) if (!(C)) return; #define g_new(T,L) new T [L]; #define g_free(V) delete [] V #define g_assert(X) assert(X) /* You might try changing the above to if you have problems. * Whether you use math.h or cmath, you may need to edit the .cpp file * and/or other .h files to use the same header file. */ #if defined(__isnan) # define isNaN(_a) (__isnan(_a)) /* MacOSX/Darwin definition < 10.4 */ #elif defined(WIN32) || defined(_isnan) # define isNaN(_a) (_isnan(_a)) /* Win32 definition */ #elif defined(isnan) || defined(__FreeBSD__) || defined(__osf__) # define isNaN(_a) (isnan(_a)) /* GNU definition */ #else # define isNaN(_a) (std::isnan(_a)) #endif /* If the above doesn't work, then try (a != a). * Also, please report a bug as per http://www.inkscape.org/report_bugs.php, * giving information about what platform and compiler version you're using. */ #if defined(__isfinite) # define isFinite(_a) (__isfinite(_a)) /* MacOSX/Darwin definition < 10.4 */ #elif defined(__sgi) # define isFinite(_a) (_isfinite(_a)) #elif defined(isfinite) # define isFinite(_a) (isfinite(_a)) #elif defined(__osf__) # define isFinite(_a) (finite(_a) && !isNaN(_a)) #elif defined(THMSVC) # define isFinite(_a) (_finite(_a) && !isNaN(_a)) #else # define isFinite(_a) (std::isfinite(_a)) #endif /* If the above doesn't work, then try (finite(_a) && !isNaN(_a)) or (!isNaN((_a) - (_a))). * Also, please report a bug as per http://www.inkscape.org/report_bugs.php, * giving information about what platform and compiler version you're using. */ class NR_Point { private: double _pt[2]; public: inline NR_Point() { _pt[0] = _pt[1] = 0; } inline NR_Point(double x, double y) { _pt[0] = x; _pt[1] = y; } inline NR_Point(NR_Point const &p) { for (unsigned i = 0; i < 2; ++i) { _pt[i] = p._pt[i]; } } inline NR_Point &operator=(NR_Point const &p) { for (unsigned i = 0; i < 2; ++i) { _pt[i] = p._pt[i]; } return *this; } inline double operator[](unsigned i) const { return _pt[i]; } inline double &operator[](unsigned i) { return _pt[i]; } //double operator[](size_t d) const throw() { return _pt[d]; } //double &operator[](size_t d) throw() { return _pt[d]; } /** Return a point like this point but rotated -90 degrees. (If the y axis grows downwards and the x axis grows to the right, then this is 90 degrees counter-clockwise.) **/ NR_Point ccw() const { return NR_Point(_pt[1], -_pt[0]); } /** Return a point like this point but rotated +90 degrees. (If the y axis grows downwards and the x axis grows to the right, then this is 90 degrees clockwise.) **/ NR_Point cw() const { return NR_Point(-_pt[1], _pt[0]); } void normalize(); inline NR_Point &operator+=(NR_Point const &o) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] += o._pt[i]; } return *this; } inline NR_Point &operator-=(NR_Point const &o) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] -= o._pt[i]; } return *this; } inline NR_Point &operator/=(double const s) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] /= s; } return *this; } inline NR_Point &operator*=(double const s) { for ( unsigned i = 0 ; i < 2 ; ++i ) { _pt[i] *= s; } return *this; } //inline bool operator == (const NR_Point &in_pnt) const { // return ((_pt[0] == in_pnt[0]) && (_pt[1] == in_pnt[1])); //} }; inline NR_Point rot90(NR_Point const &p) { return NR_Point(-p[1], p[0]); } inline NR_Point operator+(NR_Point const &a, NR_Point const &b) { NR_Point ret; for (int i = 0; i < 2; i++) { ret[i] = a[i] + b[i]; } return ret; } inline double dot(NR_Point const &a, NR_Point const &b) { double ret = 0; for ( int i = 0 ; i < 2 ; i++ ) { ret += a[i] * b[i]; } return ret; } void NR_Point::normalize() { double len = hypot(_pt[0], _pt[1]); g_return_if_fail(len != 0); g_return_if_fail(!isNaN(len)); static double const inf = 1e300; if(len != inf) { *this /= len; } else { unsigned n_inf_coords = 0; /* Delay updating pt in case neither coord is infinite. */ NR_Point tmp; for ( unsigned i = 0 ; i < 2 ; ++i ) { if ( _pt[i] == inf ) { ++n_inf_coords; tmp[i] = 1.0; } else if ( _pt[i] == -inf ) { ++n_inf_coords; tmp[i] = -1.0; } else { tmp[i] = 0.0; } } switch (n_inf_coords) { case 0: /* Can happen if both coords are near +/-DBL_MAX. */ *this /= 4.0; len = hypot(_pt[0], _pt[1]); g_assert(len != inf); *this /= len; break; case 1: *this = tmp; break; case 2: *this = NR_Point(sqrt(0.5) * tmp[0], sqrt(0.5) * tmp[1]); break; } } } inline NR_Point operator-(NR_Point const &a, NR_Point const &b) { NR_Point ret; for (int i = 0; i < 2; i++) { ret[i] = a[i] - b[i]; } return ret; } /** This is a rotation (sort of). */ inline NR_Point operator^(NR_Point const &a, NR_Point const &b) { NR_Point const ret(a[0] * b[0] - a[1] * b[1], a[1] * b[0] + a[0] * b[1]); return ret; } inline NR_Point operator-(NR_Point const &a) { NR_Point ret; for(unsigned i = 0; i < 2; i++) { ret[i] = -a[i]; } return ret; } inline NR_Point operator*(double const s, NR_Point const &b) { NR_Point ret; for(int i = 0; i < 2; i++) { ret[i] = s * b[i]; } return ret; } inline NR_Point operator/(NR_Point const &b, double const d) { NR_Point ret; for(int i = 0; i < 2; i++) { ret[i] = b[i] / d; } return ret; } inline bool operator==(NR_Point const &a, NR_Point const &b) { return ( ( a[0] == b[0] ) && ( a[1] == b[1] ) ); } inline bool operator!=(NR_Point const &a, NR_Point const &b) { return ( ( a[0] != b[0] ) || ( a[1] != b[1] ) ); } inline double L2(NR_Point const &p) { return hypot(p[0], p[1]); } bool is_zero(NR_Point const &p) { return ( p[0] == 0 && p[1] == 0 ); } NR_Point unit_vector(NR_Point const &a) { NR_Point ret(a); ret.normalize(); return ret; } NR_Point bezier_pt(unsigned degree, NR_Point const V[], double t); long sp_bezier_fit_cubic(NR_Point bezier[], NR_Point const data[], long len, double error); long sp_bezier_fit_cubic_r(NR_Point bezier[], NR_Point const data[], long len, double error, unsigned max_beziers); long sp_bezier_fit_cubic_full(NR_Point bezier[], int split_points[], NR_Point const data[], long len, NR_Point const &tHat1, NR_Point const &tHat2, double error, unsigned max_beziers); NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len); NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq); NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const length, double const tolerance_sq); /* * Temporary fix for various misdefinitions of isnan(). * isnan() is becoming undef'd in some .h files. * #include this last in your .cpp file to get it right. * * The problem is that isnan and isfinite are part of C99 but aren't part of * the C++ standard (which predates C99). * * Authors: * Inkscape groupies and obsessive-compulsives * * Copyright (C) 2004 authors * * Released under GNU GPL, read the file 'COPYING' for more information * * 2005 modification hereby placed in public domain. Probably supercedes the 2004 copyright * for the code itself. */ typedef NR_Point BezierCurve[]; /* Forward declarations */ static void generate_bezier(NR_Point b[], NR_Point const d[], double const u[], unsigned len, NR_Point const &tHat1, NR_Point const &tHat2, double tolerance_sq); static void estimate_lengths(NR_Point bezier[], NR_Point const data[], double const u[], unsigned len, NR_Point const &tHat1, NR_Point const &tHat2); static void estimate_bi(NR_Point b[4], unsigned ei, NR_Point const data[], double const u[], unsigned len); static void reparameterize(NR_Point const d[], unsigned len, double u[], BezierCurve const bezCurve); static double NewtonRaphsonRootFind(BezierCurve const Q, NR_Point const &P, double u); static NR_Point sp_darray_center_tangent(NR_Point const d[], unsigned center, unsigned length); static NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len); static unsigned copy_without_nans_or_adjacent_duplicates(NR_Point const src[], unsigned src_len, NR_Point dest[]); static void chord_length_parameterize(NR_Point const d[], double u[], unsigned len); static double compute_max_error_ratio(NR_Point const d[], double const u[], unsigned len, BezierCurve const bezCurve, double tolerance, unsigned *splitPoint); static double compute_hook(NR_Point const &a, NR_Point const &b, double const u, BezierCurve const bezCurve, double const tolerance); static NR_Point const unconstrained_tangent(0, 0); /* * B0, B1, B2, B3 : Bezier multipliers */ #define B0(u) ( ( 1.0 - u ) * ( 1.0 - u ) * ( 1.0 - u ) ) #define B1(u) ( 3 * u * ( 1.0 - u ) * ( 1.0 - u ) ) #define B2(u) ( 3 * u * u * ( 1.0 - u ) ) #define B3(u) ( u * u * u ) #ifdef BEZIER_DEBUG # define DOUBLE_ASSERT(x) g_assert( ( (x) > -SP_HUGE ) && ( (x) < SP_HUGE ) ) # define BEZIER_ASSERT(b) do { \ DOUBLE_ASSERT((b)[0][0]); DOUBLE_ASSERT((b)[0][1]); \ DOUBLE_ASSERT((b)[1][0]); DOUBLE_ASSERT((b)[1][1]); \ DOUBLE_ASSERT((b)[2][0]); DOUBLE_ASSERT((b)[2][1]); \ DOUBLE_ASSERT((b)[3][0]); DOUBLE_ASSERT((b)[3][1]); \ } while(0) #else # define DOUBLE_ASSERT(x) do { } while(0) # define BEZIER_ASSERT(b) do { } while(0) #endif /** * Fit a single-segment Bezier curve to a set of digitized points. * * \return Number of segments generated, or -1 on error. */ long sp_bezier_fit_cubic(NR_Point *bezier, NR_Point const *data, long len, double error) { return sp_bezier_fit_cubic_r(bezier, data, len, error, 1); } /** * Fit a multi-segment Bezier curve to a set of digitized points, with * possible weedout of identical points and NaNs. * * \param max_beziers Maximum number of generated segments * \param Result array, must be large enough for n. segments * 4 elements. * * \return Number of segments generated, or -1 on error. */ long sp_bezier_fit_cubic_r(NR_Point bezier[], NR_Point const data[], long const len, double const error, unsigned const max_beziers) { g_return_val_if_fail(bezier != NULL, -1); g_return_val_if_fail(data != NULL, -1); g_return_val_if_fail(len > 0, -1); g_return_val_if_fail(max_beziers < (1ul << (31 - 2 - 1 - 3)), -1); NR_Point *uniqued_data = g_new(NR_Point, len); unsigned uniqued_len = copy_without_nans_or_adjacent_duplicates(data, len, uniqued_data); if ( uniqued_len < 2 ) { g_free(uniqued_data); return 0; } /* Call fit-cubic function with recursion. */ long const ret = sp_bezier_fit_cubic_full(bezier, NULL, uniqued_data, uniqued_len, unconstrained_tangent, unconstrained_tangent, error, max_beziers); g_free(uniqued_data); return ret; } /** * Copy points from src to dest, filter out points containing NaN and * adjacent points with equal x and y. * \return length of dest */ static unsigned copy_without_nans_or_adjacent_duplicates(NR_Point const src[], unsigned src_len, NR_Point dest[]) { unsigned si = 0; for (;;) { if ( si == src_len ) { return 0; } if (!isNaN(src[si][0]) && !isNaN(src[si][1])) { dest[0] = NR_Point(src[si]); ++si; break; } } unsigned di = 0; for (; si < src_len; ++si) { NR_Point const src_pt = NR_Point(src[si]); if ( src_pt != dest[di] && !isNaN(src_pt[0]) && !isNaN(src_pt[1])) { dest[++di] = src_pt; } } unsigned dest_len = di + 1; g_assert( dest_len <= src_len ); return dest_len; } /** * Fit a multi-segment Bezier curve to a set of digitized points, without * possible weedout of identical points and NaNs. * * \pre data is uniqued, i.e. not exist i: data[i] == data[i + 1]. * \param max_beziers Maximum number of generated segments * \param Result array, must be large enough for n. segments * 4 elements. */ long sp_bezier_fit_cubic_full(NR_Point bezier[], int split_points[], NR_Point const data[], long const len, NR_Point const &tHat1, NR_Point const &tHat2, double const error, unsigned const max_beziers) { int const maxIterations = 4; /* Max times to try iterating */ g_return_val_if_fail(bezier != NULL, -1); g_return_val_if_fail(data != NULL, -1); g_return_val_if_fail(len > 0, -1); g_return_val_if_fail(max_beziers >= 1, -1); g_return_val_if_fail(error >= 0.0, -1); if ( len < 2 ) return 0; if ( len == 2 ) { /* We have 2 points, which can be fitted trivially. */ bezier[0] = data[0]; bezier[3] = data[len - 1]; double const dist = ( L2( data[len - 1] - data[0] ) / 3.0 ); if (isNaN(dist)) { /* Numerical problem, fall back to straight line segment. */ bezier[1] = bezier[0]; bezier[2] = bezier[3]; } else { bezier[1] = ( is_zero(tHat1) ? ( 2 * bezier[0] + bezier[3] ) / 3. : bezier[0] + dist * tHat1 ); bezier[2] = ( is_zero(tHat2) ? ( bezier[0] + 2 * bezier[3] ) / 3. : bezier[3] + dist * tHat2 ); } BEZIER_ASSERT(bezier); return 1; } /* Parameterize points, and attempt to fit curve */ unsigned splitPoint; /* Point to split point set at. */ bool is_corner; { double *u = g_new(double, len); chord_length_parameterize(data, u, len); if ( u[len - 1] == 0.0 ) { /* Zero-length path: every point in data[] is the same. * * (Clients aren't allowed to pass such data; handling the case is defensive * programming.) */ g_free(u); return 0; } generate_bezier(bezier, data, u, len, tHat1, tHat2, error); reparameterize(data, len, u, bezier); /* Find max deviation of points to fitted curve. */ double const tolerance = sqrt(error + 1e-9); double maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint); if ( fabs(maxErrorRatio) <= 1.0 ) { BEZIER_ASSERT(bezier); g_free(u); return 1; } /* If error not too large, then try some reparameterization and iteration. */ if ( 0.0 <= maxErrorRatio && maxErrorRatio <= 3.0 ) { for (int i = 0; i < maxIterations; i++) { generate_bezier(bezier, data, u, len, tHat1, tHat2, error); reparameterize(data, len, u, bezier); maxErrorRatio = compute_max_error_ratio(data, u, len, bezier, tolerance, &splitPoint); if ( fabs(maxErrorRatio) <= 1.0 ) { BEZIER_ASSERT(bezier); g_free(u); return 1; } } } g_free(u); is_corner = (maxErrorRatio < 0); } if (is_corner) { g_assert(splitPoint < unsigned(len)); if (splitPoint == 0) { if (is_zero(tHat1)) { /* Got spike even with unconstrained initial tangent. */ ++splitPoint; } else { return sp_bezier_fit_cubic_full(bezier, split_points, data, len, unconstrained_tangent, tHat2, error, max_beziers); } } else if (splitPoint == unsigned(len - 1)) { if (is_zero(tHat2)) { /* Got spike even with unconstrained final tangent. */ --splitPoint; } else { return sp_bezier_fit_cubic_full(bezier, split_points, data, len, tHat1, unconstrained_tangent, error, max_beziers); } } } if ( 1 < max_beziers ) { /* * Fitting failed -- split at max error point and fit recursively */ unsigned const rec_max_beziers1 = max_beziers - 1; NR_Point recTHat2, recTHat1; if (is_corner) { g_return_val_if_fail(0 < splitPoint && splitPoint < unsigned(len - 1), -1); recTHat1 = recTHat2 = unconstrained_tangent; } else { /* Unit tangent vector at splitPoint. */ recTHat2 = sp_darray_center_tangent(data, splitPoint, len); recTHat1 = -recTHat2; } long const nsegs1 = sp_bezier_fit_cubic_full(bezier, split_points, data, splitPoint + 1, tHat1, recTHat2, error, rec_max_beziers1); if ( nsegs1 < 0 ) { #ifdef BEZIER_DEBUG g_print("fit_cubic[1]: recursive call failed\n"); #endif return -1; } g_assert( nsegs1 != 0 ); if (split_points != NULL) { split_points[nsegs1 - 1] = splitPoint; } unsigned const rec_max_beziers2 = max_beziers - nsegs1; long const nsegs2 = sp_bezier_fit_cubic_full(bezier + nsegs1*4, ( split_points == NULL ? NULL : split_points + nsegs1 ), data + splitPoint, len - splitPoint, recTHat1, tHat2, error, rec_max_beziers2); if ( nsegs2 < 0 ) { #ifdef BEZIER_DEBUG g_print("fit_cubic[2]: recursive call failed\n"); #endif return -1; } #ifdef BEZIER_DEBUG g_print("fit_cubic: success[nsegs: %d+%d=%d] on max_beziers:%u\n", nsegs1, nsegs2, nsegs1 + nsegs2, max_beziers); #endif return nsegs1 + nsegs2; } else { return -1; } } /** * Fill in \a bezier[] based on the given data and tangent requirements, using * a least-squares fit. * * Each of tHat1 and tHat2 should be either a zero vector or a unit vector. * If it is zero, then bezier[1 or 2] is estimated without constraint; otherwise, * it bezier[1 or 2] is placed in the specified direction from bezier[0 or 3]. * * \param tolerance_sq Used only for an initial guess as to tangent directions * when \a tHat1 or \a tHat2 is zero. */ static void generate_bezier(NR_Point bezier[], NR_Point const data[], double const u[], unsigned const len, NR_Point const &tHat1, NR_Point const &tHat2, double const tolerance_sq) { bool const est1 = is_zero(tHat1); bool const est2 = is_zero(tHat2); NR_Point est_tHat1( est1 ? sp_darray_left_tangent(data, len, tolerance_sq) : tHat1 ); NR_Point est_tHat2( est2 ? sp_darray_right_tangent(data, len, tolerance_sq) : tHat2 ); estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2); /* We find that sp_darray_right_tangent tends to produce better results for our current freehand tool than full estimation. */ if (est1) { estimate_bi(bezier, 1, data, u, len); if (bezier[1] != bezier[0]) { est_tHat1 = unit_vector(bezier[1] - bezier[0]); } estimate_lengths(bezier, data, u, len, est_tHat1, est_tHat2); } } static void estimate_lengths(NR_Point bezier[], NR_Point const data[], double const uPrime[], unsigned const len, NR_Point const &tHat1, NR_Point const &tHat2) { double C[2][2]; /* Matrix C. */ double X[2]; /* Matrix X. */ /* Create the C and X matrices. */ C[0][0] = 0.0; C[0][1] = 0.0; C[1][0] = 0.0; C[1][1] = 0.0; X[0] = 0.0; X[1] = 0.0; /* First and last control points of the Bezier curve are positioned exactly at the first and last data points. */ bezier[0] = data[0]; bezier[3] = data[len - 1]; for (unsigned i = 0; i < len; i++) { /* Bezier control point coefficients. */ double const b0 = B0(uPrime[i]); double const b1 = B1(uPrime[i]); double const b2 = B2(uPrime[i]); double const b3 = B3(uPrime[i]); /* rhs for eqn */ NR_Point const a1 = b1 * tHat1; NR_Point const a2 = b2 * tHat2; C[0][0] += dot(a1, a1); C[0][1] += dot(a1, a2); C[1][0] = C[0][1]; C[1][1] += dot(a2, a2); /* Additional offset to the data point from the predicted point if we were to set bezier[1] to bezier[0] and bezier[2] to bezier[3]. */ NR_Point const shortfall = ( data[i] - ( ( b0 + b1 ) * bezier[0] ) - ( ( b2 + b3 ) * bezier[3] ) ); X[0] += dot(a1, shortfall); X[1] += dot(a2, shortfall); } /* We've constructed a pair of equations in the form of a matrix product C * alpha = X. Now solve for alpha. */ double alpha_l, alpha_r; /* Compute the determinants of C and X. */ double const det_C0_C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1]; if ( det_C0_C1 != 0 ) { /* Apparently Kramer's rule. */ double const det_C0_X = C[0][0] * X[1] - C[0][1] * X[0]; double const det_X_C1 = X[0] * C[1][1] - X[1] * C[0][1]; alpha_l = det_X_C1 / det_C0_C1; alpha_r = det_C0_X / det_C0_C1; } else { /* The matrix is under-determined. Try requiring alpha_l == alpha_r. * * One way of implementing the constraint alpha_l == alpha_r is to treat them as the same * variable in the equations. We can do this by adding the columns of C to form a single * column, to be multiplied by alpha to give the column vector X. * * We try each row in turn. */ double const c0 = C[0][0] + C[0][1]; if (c0 != 0) { alpha_l = alpha_r = X[0] / c0; } else { double const c1 = C[1][0] + C[1][1]; if (c1 != 0) { alpha_l = alpha_r = X[1] / c1; } else { /* Let the below code handle this. */ alpha_l = alpha_r = 0.; } } } /* If alpha negative, use the Wu/Barsky heuristic (see text). (If alpha is 0, you get coincident control points that lead to divide by zero in any subsequent NewtonRaphsonRootFind() call.) */ /// \todo Check whether this special-casing is necessary now that /// NewtonRaphsonRootFind handles non-positive denominator. if ( alpha_l < 1.0e-6 || alpha_r < 1.0e-6 ) { alpha_l = alpha_r = ( L2( data[len - 1] - data[0] ) / 3.0 ); } /* Control points 1 and 2 are positioned an alpha distance out on the tangent vectors, left and right, respectively. */ bezier[1] = alpha_l * tHat1 + bezier[0]; bezier[2] = alpha_r * tHat2 + bezier[3]; return; } static double lensq(NR_Point const p) { return dot(p, p); } static void estimate_bi(NR_Point bezier[4], unsigned const ei, NR_Point const data[], double const u[], unsigned const len) { g_return_if_fail(1 <= ei && ei <= 2); unsigned const oi = 3 - ei; double num[2] = {0., 0.}; double den = 0.; for (unsigned i = 0; i < len; ++i) { double const ui = u[i]; double const b[4] = { B0(ui), B1(ui), B2(ui), B3(ui) }; for (unsigned d = 0; d < 2; ++d) { num[d] += b[ei] * (b[0] * bezier[0][d] + b[oi] * bezier[oi][d] + b[3] * bezier[3][d] + - data[i][d]); } den -= b[ei] * b[ei]; } if (den != 0.) { for (unsigned d = 0; d < 2; ++d) { bezier[ei][d] = num[d] / den; } } else { bezier[ei] = ( oi * bezier[0] + ei * bezier[3] ) / 3.; } } /** * Given set of points and their parameterization, try to find a better assignment of parameter * values for the points. * * \param d Array of digitized points. * \param u Current parameter values. * \param bezCurve Current fitted curve. * \param len Number of values in both d and u arrays. * Also the size of the array that is allocated for return. */ static void reparameterize(NR_Point const d[], unsigned const len, double u[], BezierCurve const bezCurve) { g_assert( 2 <= len ); unsigned const last = len - 1; g_assert( bezCurve[0] == d[0] ); g_assert( bezCurve[3] == d[last] ); g_assert( u[0] == 0.0 ); g_assert( u[last] == 1.0 ); /* Otherwise, consider including 0 and last in the below loop. */ for (unsigned i = 1; i < last; i++) { u[i] = NewtonRaphsonRootFind(bezCurve, d[i], u[i]); } } /** * Use Newton-Raphson iteration to find better root. * * \param Q Current fitted curve * \param P Digitized point * \param u Parameter value for "P" * * \return Improved u */ static double NewtonRaphsonRootFind(BezierCurve const Q, NR_Point const &P, double const u) { g_assert( 0.0 <= u ); g_assert( u <= 1.0 ); /* Generate control vertices for Q'. */ NR_Point Q1[3]; for (unsigned i = 0; i < 3; i++) { Q1[i] = 3.0 * ( Q[i+1] - Q[i] ); } /* Generate control vertices for Q''. */ NR_Point Q2[2]; for (unsigned i = 0; i < 2; i++) { Q2[i] = 2.0 * ( Q1[i+1] - Q1[i] ); } /* Compute Q(u), Q'(u) and Q''(u). */ NR_Point const Q_u = bezier_pt(3, Q, u); NR_Point const Q1_u = bezier_pt(2, Q1, u); NR_Point const Q2_u = bezier_pt(1, Q2, u); /* Compute f(u)/f'(u), where f is the derivative wrt u of distsq(u) = 0.5 * the square of the distance from P to Q(u). Here we're using Newton-Raphson to find a stationary point in the distsq(u), hopefully corresponding to a local minimum in distsq (and hence a local minimum distance from P to Q(u)). */ NR_Point const diff = Q_u - P; double numerator = dot(diff, Q1_u); double denominator = dot(Q1_u, Q1_u) + dot(diff, Q2_u); double improved_u; if ( denominator > 0. ) { /* One iteration of Newton-Raphson: improved_u = u - f(u)/f'(u) */ improved_u = u - ( numerator / denominator ); } else { /* Using Newton-Raphson would move in the wrong direction (towards a local maximum rather than local minimum), so we move an arbitrary amount in the right direction. */ if ( numerator > 0. ) { improved_u = u * .98 - .01; } else if ( numerator < 0. ) { /* Deliberately asymmetrical, to reduce the chance of cycling. */ improved_u = .031 + u * .98; } else { improved_u = u; } } if (!isFinite(improved_u)) { improved_u = u; } else if ( improved_u < 0.0 ) { improved_u = 0.0; } else if ( improved_u > 1.0 ) { improved_u = 1.0; } /* Ensure that improved_u isn't actually worse. */ { double const diff_lensq = lensq(diff); for (double proportion = .125; ; proportion += .125) { if ( lensq( bezier_pt(3, Q, improved_u) - P ) > diff_lensq ) { if ( proportion > 1.0 ) { //g_warning("found proportion %g", proportion); improved_u = u; break; } improved_u = ( ( 1 - proportion ) * improved_u + proportion * u ); } else { break; } } } DOUBLE_ASSERT(improved_u); return improved_u; } /** * Evaluate a Bezier curve at parameter value \a t. * * \param degree The degree of the Bezier curve: 3 for cubic, 2 for quadratic etc. * \param V The control points for the Bezier curve. Must have (\a degree+1) * elements. * \param t The "parameter" value, specifying whereabouts along the curve to * evaluate. Typically in the range [0.0, 1.0]. * * Let s = 1 - t. * BezierII(1, V) gives (s, t) * V, i.e. t of the way * from V[0] to V[1]. * BezierII(2, V) gives (s**2, 2*s*t, t**2) * V. * BezierII(3, V) gives (s**3, 3 s**2 t, 3s t**2, t**3) * V. * * The derivative of BezierII(i, V) with respect to t * is i * BezierII(i-1, V'), where for all j, V'[j] = * V[j + 1] - V[j]. */ NR_Point bezier_pt(unsigned const degree, NR_Point const V[], double const t) { /** Pascal's triangle. */ static int const pascal[4][4] = {{1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}}; //g_assert( degree < G_N_ELEMENTS(pascal) ); g_assert( degree < 5 ); double const s = 1.0 - t; /* Calculate powers of t and s. */ double spow[4]; double tpow[4]; spow[0] = 1.0; spow[1] = s; tpow[0] = 1.0; tpow[1] = t; for (unsigned i = 1; i < degree; ++i) { spow[i + 1] = spow[i] * s; tpow[i + 1] = tpow[i] * t; } NR_Point ret = spow[degree] * V[0]; for (unsigned i = 1; i <= degree; ++i) { ret += pascal[degree][i] * spow[degree - i] * tpow[i] * V[i]; } return ret; } /* * ComputeLeftTangent, ComputeRightTangent, ComputeCenterTangent : * Approximate unit tangents at endpoints and "center" of digitized curve */ /** * Estimate the (forward) tangent at point d[first + 0.5]. * * Unlike the center and right versions, this calculates the tangent in * the way one might expect, i.e., wrt increasing index into d. * \pre (2 \<= len) and (d[0] != d[1]). **/ NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len) { g_assert( len >= 2 ); g_assert( d[0] != d[1] ); return unit_vector( d[1] - d[0] ); } /** * Estimates the (backward) tangent at d[last - 0.5]. * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre 2 \<= len. * \pre d[len - 1] != d[len - 2]. * \pre all[p in d] in_svg_plane(p). */ static NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len) { g_assert( 2 <= len ); unsigned const last = len - 1; unsigned const prev = last - 1; g_assert( d[last] != d[prev] ); return unit_vector( d[prev] - d[last] ); } /** * Estimate the (forward) tangent at point d[0]. * * Unlike the center and right versions, this calculates the tangent in * the way one might expect, i.e., wrt increasing index into d. * * \pre 2 \<= len. * \pre d[0] != d[1]. * \pre all[p in d] in_svg_plane(p). * \post is_unit_vector(ret). **/ NR_Point sp_darray_left_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq) { g_assert( 2 <= len ); g_assert( 0 <= tolerance_sq ); for (unsigned i = 1;;) { NR_Point const pi(d[i]); NR_Point const t(pi - d[0]); double const distsq = dot(t, t); if ( tolerance_sq < distsq ) { return unit_vector(t); } ++i; if (i == len) { return ( distsq == 0 ? sp_darray_left_tangent(d, len) : unit_vector(t) ); } } } /** * Estimates the (backward) tangent at d[last]. * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre 2 \<= len. * \pre d[len - 1] != d[len - 2]. * \pre all[p in d] in_svg_plane(p). */ NR_Point sp_darray_right_tangent(NR_Point const d[], unsigned const len, double const tolerance_sq) { g_assert( 2 <= len ); g_assert( 0 <= tolerance_sq ); unsigned const last = len - 1; for (unsigned i = last - 1;; i--) { NR_Point const pi(d[i]); NR_Point const t(pi - d[last]); double const distsq = dot(t, t); if ( tolerance_sq < distsq ) { return unit_vector(t); } if (i == 0) { return ( distsq == 0 ? sp_darray_right_tangent(d, len) : unit_vector(t) ); } } } /** * Estimates the (backward) tangent at d[center], by averaging the two * segments connected to d[center] (and then normalizing the result). * * \note The tangent is "backwards", i.e. it is with respect to * decreasing index rather than increasing index. * * \pre (0 \< center \< len - 1) and d is uniqued (at least in * the immediate vicinity of \a center). */ static NR_Point sp_darray_center_tangent(NR_Point const d[], unsigned const center, unsigned const len) { g_assert( center != 0 ); g_assert( center < len - 1 ); NR_Point ret; if ( d[center + 1] == d[center - 1] ) { /* Rotate 90 degrees in an arbitrary direction. */ NR_Point const diff = d[center] - d[center - 1]; ret = rot90(diff); } else { ret = d[center - 1] - d[center + 1]; } ret.normalize(); return ret; } /** * Assign parameter values to digitized points using relative distances between points. * * \pre Parameter array u must have space for \a len items. */ static void chord_length_parameterize(NR_Point const d[], double u[], unsigned const len) { g_return_if_fail( 2 <= len ); /* First let u[i] equal the distance travelled along the path from d[0] to d[i]. */ u[0] = 0.0; for (unsigned i = 1; i < len; i++) { double const dist = L2( d[i] - d[i-1] ); u[i] = u[i-1] + dist; } /* Then scale to [0.0 .. 1.0]. */ double tot_len = u[len - 1]; g_return_if_fail( tot_len != 0 ); if (isFinite(tot_len)) { for (unsigned i = 1; i < len; ++i) { u[i] /= tot_len; } } else { /* We could do better, but this probably never happens anyway. */ for (unsigned i = 1; i < len; ++i) { u[i] = i / (double) ( len - 1 ); } } /** \todo * It's been reported that u[len - 1] can differ from 1.0 on some * systems (amd64), despite it having been calculated as x / x where x * is isFinite and non-zero. */ if (u[len - 1] != 1) { double const diff = u[len - 1] - 1; if (fabs(diff) > 1e-13) { fprintf(stderr,"u[len - 1] = %19g (= 1 + %19g), expecting exactly 1", u[len - 1], diff); } u[len - 1] = 1; } #ifdef BEZIER_DEBUG g_assert( u[0] == 0.0 && u[len - 1] == 1.0 ); for (unsigned i = 1; i < len; i++) { g_assert( u[i] >= u[i-1] ); } #endif } /** * Find the maximum squared distance of digitized points to fitted curve, and (if this maximum * error is non-zero) set \a *splitPoint to the corresponding index. * * \pre 2 \<= len. * \pre u[0] == 0. * \pre u[len - 1] == 1.0. * \post ((ret == 0.0) * || ((*splitPoint \< len - 1) * \&\& (*splitPoint != 0 || ret \< 0.0))). */ static double compute_max_error_ratio(NR_Point const d[], double const u[], unsigned const len, BezierCurve const bezCurve, double const tolerance, unsigned *const splitPoint) { g_assert( 2 <= len ); unsigned const last = len - 1; g_assert( bezCurve[0] == d[0] ); g_assert( bezCurve[3] == d[last] ); g_assert( u[0] == 0.0 ); g_assert( u[last] == 1.0 ); /* I.e. assert that the error for the first & last points is zero. * Otherwise we should include those points in the below loop. * The assertion is also necessary to ensure 0 < splitPoint < last. */ double maxDistsq = 0.0; /* Maximum error */ double max_hook_ratio = 0.0; unsigned snap_end = 0; NR_Point prev = bezCurve[0]; for (unsigned i = 1; i <= last; i++) { NR_Point const curr = bezier_pt(3, bezCurve, u[i]); double const distsq = lensq( curr - d[i] ); if ( distsq > maxDistsq ) { maxDistsq = distsq; *splitPoint = i; } double const hook_ratio = compute_hook(prev, curr, .5 * (u[i - 1] + u[i]), bezCurve, tolerance); if (max_hook_ratio < hook_ratio) { max_hook_ratio = hook_ratio; snap_end = i; } prev = curr; } double const dist_ratio = sqrt(maxDistsq) / tolerance; double ret; if (max_hook_ratio <= dist_ratio) { ret = dist_ratio; } else { g_assert(0 < snap_end); ret = -max_hook_ratio; *splitPoint = snap_end - 1; } g_assert( ret == 0.0 || ( ( *splitPoint < last ) && ( *splitPoint != 0 || ret < 0. ) ) ); return ret; } /** * Whereas compute_max_error_ratio() checks for itself that each data point * is near some point on the curve, this function checks that each point on * the curve is near some data point (or near some point on the polyline * defined by the data points, or something like that: we allow for a * "reasonable curviness" from such a polyline). "Reasonable curviness" * means we draw a circle centred at the midpoint of a..b, of radius * proportional to the length |a - b|, and require that each point on the * segment of bezCurve between the parameters of a and b be within that circle. * If any point P on the bezCurve segment is outside of that allowable * region (circle), then we return some metric that increases with the * distance from P to the circle. * * Given that this is a fairly arbitrary criterion for finding appropriate * places for sharp corners, we test only one point on bezCurve, namely * the point on bezCurve with parameter halfway between our estimated * parameters for a and b. (Alternatives are taking the farthest of a * few parameters between those of a and b, or even using a variant of * NewtonRaphsonFindRoot() for finding the maximum rather than minimum * distance.) */ static double compute_hook(NR_Point const &a, NR_Point const &b, double const u, BezierCurve const bezCurve, double const tolerance) { NR_Point const P = bezier_pt(3, bezCurve, u); NR_Point const diff = .5 * (a + b) - P; double const dist = L2(diff); if (dist < tolerance) { return 0; } double const allowed = L2(b - a) + tolerance; return dist / allowed; /** \todo * effic: Hooks are very rare. We could start by comparing * distsq, only resorting to the more expensive L2 in cases of * uncertainty. */ } void thbezier_curve::clear() { this->m_segments.clear(); this->m_current_segment = this->m_segments.end(); } thbezier_segment * thbezier_curve::insert_segment() { return &(*this->m_segments.insert(this->m_segments.end(), thbezier_segment())); } thbezier_segment * thbezier_curve::get_first_segment() { this->m_current_segment = this->m_segments.begin(); return this->get_current_segment(); } thbezier_segment * thbezier_curve::get_current_segment() { if (this->m_current_segment != this->m_segments.end()) return &(*this->m_current_segment); else return NULL; } thbezier_segment * thbezier_curve::get_next_segment() { this->m_current_segment++; return this->get_current_segment(); } void thbezier_curve::copy_polyline(struct thbezier_polyline * line, double err) { this->clear(); size_t i, max = line->get_length(); long nbp; if (max < 3) return; NR_Point * poly, * bezier; poly = new NR_Point[max]; bezier = new NR_Point[4 * max]; thbezier_point * p; for(i = 0, p = line->get_first_point(); p != NULL; p = line->get_next_point(), i++) { poly[i][0] = p->m_x; poly[i][1] = p->m_y; } NR_Point stan(0, 0), etan(0,0); if ((poly[0][0] == poly[max-1][0]) && (poly[0][1] == poly[max-1][1])) { stan = NR_Point(poly[1][0] - poly[0][0], poly[1][1] - poly[0][1]); stan.normalize(); etan = NR_Point(poly[max-1][0] - poly[max-2][0], poly[max-1][1] - poly[max-2][1]); etan.normalize(); stan += etan; if (is_zero(stan)) stan = etan; else stan.normalize(); } //nbp = (long) sp_bezier_fit_cubic_r(bezier, poly, (long) max, err, (unsigned int)max); nbp = (long) sp_bezier_fit_cubic_full(bezier, NULL, poly, (long) max, stan, -stan, err, (unsigned int)max); thbezier_segment * s; s = this->insert_segment(); s->m_p = thbezier_point(bezier[0][0], bezier[0][1]); for(i = 0; i < (size_t) nbp; i++) { s = this->insert_segment(); s->m_cp1 = thbezier_point(bezier[4*i+1][0],bezier[4*i+1][1]); s->m_cp2 = thbezier_point(bezier[4*i+2][0],bezier[4*i+2][1]); s->m_p = thbezier_point(bezier[4*i+3][0],bezier[4*i+3][1]); } } void thbezier_polyline::clear() { this->m_points.clear(); this->m_current_point = this->m_points.end(); } thbezier_point * thbezier_polyline::insert_point() { return &(*this->m_points.insert(this->m_points.end(), thbezier_point())); } thbezier_point * thbezier_polyline::get_first_point() { this->m_current_point = this->m_points.begin(); return this->get_current_point(); } thbezier_point * thbezier_polyline::get_current_point() { if (this->m_current_point != this->m_points.end()) return &(*this->m_current_point); else return NULL; } thbezier_point * thbezier_polyline::get_next_point() { this->m_current_point++; return this->get_current_point(); } void thbezier_polyline::copy_curve(struct thbezier_curve * curve, double err) { this->clear(); // TODO: bezier 2 polyline conversion } void thbezier_main() { FILE * fin, * fout; fin = fopen("therion.bci","r"); double x, y, px(0.0), py(0.0); bool xfirst(true); thbezier_polyline line; thbezier_curve curve; thbezier_point * pt; while (fscanf(fin,"%lf%lf",&x,&y) == 2) { if ((xfirst) || (x != px) || (y != py)) { pt = line.insert_point(); pt->m_x = px = x; pt->m_y = py = y; pt->m_valid = true; } xfirst = false; } fclose(fin); if (line.m_points.size() < 3) return; curve.copy_polyline(&line, 2.0); thbezier_segment *s; fout = fopen("therion.bco","w"); s = curve.get_first_segment(); fprintf(fout, "%.2lf %.2lf\n", s->m_p.m_x, s->m_p.m_y); for(s = curve.get_next_segment(); s != NULL; s = curve.get_next_segment()) { fprintf(fout, "%.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",s->m_cp1.m_x, s->m_cp1.m_y, s->m_cp2.m_x, s->m_cp2.m_y, s->m_p.m_x, s->m_p.m_y); } fclose(fout); } therion-5.4.1/thbezier.h000066400000000000000000000043351307545355600152000ustar00rootroot00000000000000/** * @file thbezier.h * Bezier curve manipulation class. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thbezier_h #define thbezier_h #include #include #include struct thbezier_point { double m_x, m_y, m_z; bool m_valid; thbezier_point() : m_x(0.0), m_y(0.0), m_z(0.0), m_valid(false) {} thbezier_point(double x, double y, double z = 0.0) : m_x(x), m_y(y), m_z(z), m_valid(true) {} }; struct thbezier_segment { thbezier_point m_cp1, m_cp2, m_p; }; struct thbezier_curve { std::list m_segments; std::list::iterator m_current_segment; void clear(); size_t get_length() {return this->m_segments.size();} thbezier_segment * insert_segment(); thbezier_segment * get_first_segment(); thbezier_segment * get_current_segment(); thbezier_segment * get_next_segment(); void copy_polyline(struct thbezier_polyline * line, double err); }; struct thbezier_polyline { std::list m_points; std::list::iterator m_current_point; void clear(); size_t get_length() {return this->m_points.size();} thbezier_point * insert_point(); thbezier_point * get_first_point(); thbezier_point * get_current_point(); thbezier_point * get_next_point(); void copy_curve(struct thbezier_curve * curve, double err); }; void thbezier_main(); #endif therion-5.4.1/thbook/000077500000000000000000000000001307545355600144745ustar00rootroot00000000000000therion-5.4.1/thbook/Makefile000066400000000000000000000004761307545355600161430ustar00rootroot00000000000000OUTDIR ?= . ifneq ($(OUTDIR),.) LOUTDIR = $(OUTDIR)/thbook else LOUTDIR = . endif all: $(LOUTDIR)/thbook.pdf $(LOUTDIR)/thbook.pdf: *.tex pdftex thbook.tex pdftex thbook.tex pdftex thbook.tex perl ../makefile.pl rm ./thbook.log ifneq ($(OUTDIR),.) perl ../makefile.pl mv ./thbook.pdf $(LOUTDIR) endif therion-5.4.1/thbook/ch00.tex000066400000000000000000000072751307545355600157630ustar00rootroot00000000000000\vbox to 0pt{\kern-1in\kern-10pt\hbox to 0pt{\kern-1in \pic{thbook.jpg}\hss}\vss} {\footline={} \hbox{} \vskip0pt \font\tit=cmssdc10 at 36pt \font\subtit=cmssdc10 at 24pt \rightline{\tit The Therion Book\hskip0pt} \vskip365pt \rightline{\subtit Stacho Mudr\'ak\hskip0pt} \vskip20pt \rightline{\subtit Martin Budaj\hskip0pt} \vfill \eject Therion is copyrighted software. Distributed under the GNU General Public License. Copyright \copyright\ 1999--2017 Stacho Mudr\'ak, Martin Budaj This book describes Therion \input version \unskip. %Generated on \the\year--\twodigits{\the\month}--\twodigits{\the\day} . \vskip1.2cm Code contributions by {\it Olly Betts}, {\it Marco Corvi}, {\it Vladimir Georgiev}, {\it Georg Pacher} and {\it Dimitrios Zachariadis}. \bigskip \leftline{We owe thanks to} %\leftline{{\it Martin Sluka\/}} % for his support concerning not only Therion,} %\leftline{{\it Martin Heller\/}} % for criticism on first implementation of scrap distortion,} %\leftline{{\it Olly Betts\/}} % for idea of importing processed centreline instead of raw survey data,} %\leftline{{\it Wookey\/}} % for improving the documentation.} \leftline{{\it Martin Sluka}, {\it Ladislav Bla\v zek}, {\it Martin Heller}, {\it Wookey}, {\it Olly Betts}} \leftline{and all users for their feedback, support and suggestions.} \vskip1.2cm \leftline{Translations (\%):} \medskip \leavevmode\kern1em\vbox{\font\rm=cmr10\rm\font\it=cmti10\rm\halign{#\hfil\quad&\hfil#\hfil\quad&\hfil#\hfil\quad&\hfil#\hfil\quad&#\hfil\cr {\it Language}&{\it XTherion}&{\it Map header}&{\it Loch}&{\it Translated by}\cr\noalign{\smallskip\hrule\smallskip} bg & 86 & 87 & 100 & Alexander Yanev, Ivo Tachev, Vladimir Georgiev\cr cz & 81 & 88 & -- & Ladislav Bla\v zek\cr de & 82 & 92 & -- & Roger Schuster, Georg Pacher, Benedikt Hallinger\cr el & 85 & 87 & -- & Stelios Zacharias\cr en[\_GB$\mid$\_US] & 75 & 93 &100 & Stacho Mudr\'ak, Olly Betts\cr es & 75 & 83 & -- & Roman Mu\~noz\cr fr & -- & 87 & -- & Eric Madelaine, Gilbert Fernandes\cr it & 86 & 92 & -- & Marco Corvi\cr mi & -- & 91 & -- & Kyle Davis, Bruce Mutton\cr pl & -- & 90 & -- & Krzysztof Dudzi\'nski\cr pt[\_BR$\mid$\_PT] & -- & 83 & -- & Toni Cavalheiro, Rodrigo Severo\cr ru & 81 & 86 & -- & Vasily V. Suhachev, Andrey Kozhenkov\cr sk & 85 & 93 & 96 & Stacho Mudr\'ak\cr sq & 85 & 87 & -- & Fatos Katallozi\cr zh & 86 & 91 & -- & Zhang Yuan Hai, Duncan Collis\cr }} \vfill The cover picture shows survey sketch of {\it Hrozn\'y kame\v nolom} Chamber in the Cave of Dead Bats in Slovakia and the map of it produced by Therion. \eject \def\write#1#2{} %\vbox to0pt{\line{\hss\pdfximage width 93.2mm {pic/agrippa.jpg}\pdfrefximage\pdflastximage\hskip-2mm}\vss}\kern-2pt %{\let\eject=\relax \eightit\baselineskip16.3pt\leftskip7cm\parindent4.05cm %Only for you, children of doctrine and learning, have we written this work. %Examine this book, ponder the meaning we have dispersed in various places %and gathered again; %what we have concealed in one place we have disclosed in another, %that it may be understood by your wisdom. % %\leftskip0cm %\rightline{\eightrm ---Henricus C. Agrippa ab Nettesheym, \eightmit 1533} %\vskip.5cm \chapter Table of Contents. %} \bgroup \font\bf=cmbx10 \font\rm=cmr10\rm \baselineskip=12.5pt \def\Line#1{\line{\hskip2cm#1\hskip2cm}} \openin0=etc/contents.tex \ifeof0 \message{Warning: re-run to input a newly generated TOC file}% \else \closein0 \input etc/contents \fi \egroup \vfil\eject \ifodd\pageno\else\hbox{}\eject\fi } \immediate\openout1=etc/contents \endinput therion-5.4.1/thbook/ch01.tex000066400000000000000000000246251307545355600157620ustar00rootroot00000000000000\eject \ifodd\pageno\else\hbox{}\eject\fi {\baselineskip=12pt \setbox1=\hbox{\eightit LET NO ONE IGNORANT OF GEOMETRY ENTER HERE} \copy1 \vskip4pt \line{\pic[\wd1]{ageom.pdf}\hss} \hbox to \wd1{\hfil\eightrm ---alleged inscription over the entrance} \hbox to \wd1{\hfil\eightrm of Plato's Academy, {\eightmit 4}th century BC} } \chapter Introduction. Therion is a tool for cave surveying. Its purpose is to help \list * archive survey data on computer in a form as close to the original notes and sketches as possible and retrieve them in a flexible and efficient way; * draw a nice up-to-date plan or elevation map; * create a realistic 3D model of the cave. \endlist It runs on Unix, Linux, MacOS\,X and Win32 operating systems. Source code and Windows installer are available on the Therion web page (\www{https://therion.speleo.sk}). Therion is distributed under the \www[GNU General Public License] {https://www.gnu.org/}. \subchapter Why Therion?. In the 1990s we've done a lot of caving and cave surveying. Some computer programs existed which displayed survey shots and stations after loop closure and error elimination. These were a great help, especially for large and complicated cave systems. We used the output of one of them---TJIKPR---as a background layer with survey stations for hand\discretionary{-}{-}{-}drawn maps. After finishing a huge 166-page Atlas of the Cave of Dead Bats in early 1997, we soon had a problem: we found new passages connecting between known passages and surveyed them. After processing in TJIKPR, the new loops influenced the position of the old surveys; most survey stations now had a slightly different position from before due to the changed error distribution. So we could either draw the whole Atlas again, or accept that the location of some places was not accurate---in the case of loops with a length of approximately 1\,km there were sometimes errors of about 10\,m---and try to distort the new passages to fit to old ones. These problems remained when we tried to draw maps using some CAD programs in 1998 and 1999. It was always hard to add new surveys without adapting the old ones to the newly calculated positions of survey stations in the whole cave. We found no program that was able to draw an up-to-date complex map (i.e.~not just survey shots with LRUD envelope), in which the old parts are modified according to the most recent known coordinates of survey stations. In 1999 we begun to think about creating own program for map drawing. We knew about programs which were perfectly suited for particular sub-tasks. There was \MP, a high level programming language for vector graphics description, Survex for excellent processing of survey shots, and \TeX\ for typesetting the results. We had only to glue them together. By Xmas 1999 we had a minimalistic version of Therion working for the first time. This consisted only of about 32\,kB of Perl scripts and \MP\ macros but served the purpose of showing that our ideas were implementable. During 2000--2001 we searched for the optimal format of the input data, programming language, concept of interactive map editor and internal algorithms with the help of Martin Sluka (Prague) and Martin Heller (Z\"urich). In 2002 we were able to introduce the first really usable version of Therion, which met our requirements. \subchapter Features. Therion is a command-line application. It processes input files, which are---including 2D maps---in text format, and creates files with 2D maps or 3D model as the output. The syntax of input files is described in detail in later chapters. You may create these files in an arbitrary plain text editor like {\it ed} or {\it vi}. They contain instructions for Therion like |point 1303 1004 pillar| where {\tt point} is a keyword for point symbol followed by its coordinates and a symbol type specification. Hand-editing of such files is not easy---especially when you draw maps, you need to think in spatial (Cartesian coordinate) terms. Thus there is a special GUI for Therion called XTherion. XTherion works as an advanced text editor, map editor (where maps are drawn fully interactively) and compiler (which runs Therion on the data). It may look quite complicated, but this approach has a lot of advantages: \list * There is strict separation of data and visualization. The data files specify only what is where, not what it looks like. The visual representation is added by \MP\ in later phases of data processing. (It's very similar concept to XML data representation.) This makes it possible to change map symbols used without changing the input data, or merge more maps created by different persons in different styles into one map with unified map symbols set. 2D maps are adapted for particular output scale (level of abstraction, non-linear scaling of symbols and texts) * All data are relative to survey station positions. If the coordinates of survey stations are changed in the process of loop closure, then all relevant data is moved correspondingly, so the map is always up-to-date. * Therion is not dependent on particular operating system, character encoding or input files editor; input files will remain human readable * It's possible to add new output formats * 3D model is generated from 2D maps to get a realistic 3D model without entering too much data * although the support for WYSIWYG is limited, you get what you want \endlist \subchapter Software requirements. ``A program should do one thing, and do it well.'' (Ken Thompson) Therefore we use some valuable external programs, which are related to the problems of typesetting and data visualization. Therion can then do its task much better than if it was a standalone application in which you could calibrate your printer or scanner and with one click send e-mail with your data. Therion needs: \list * \TeX\ distribution. Necessary only if you want to create 2D maps in PDF or SVG format. * Tcl/Tk with {\it BWidget} and optionally {\it tkImg} extension. It is only required for XTherion. * LCDF Typetools if you want to use easy setup for custom fonts in PDF maps * {\it convert} and {\it identify} utilities from ImageMagick distribution, if you want to use warping of survey sketches. * {\it ghostscript} if you want to create calibrated images from georeferenced PDF maps. \endlist Windows installer includes all required packages with the exception of {ghostscript}. Read the {\it Appendix} if you want to compile Therion yourself. For displaying of maps and models you may use any of the following programs: \list * any PDF or SVG viewer displaying 2D maps; * any GIS supporting DXF or {\it shapefile} formats for analyzing the maps; * appropriate 3D viewer for models exported in other than default format; * any SQL database client to process exported database. \endlist \subchapter Installation. {\bf Installation from sources (therion-5.*.tar.gz package):} The source code is a primary Therion distribution. It needs to be compiled and installed according to instructions in the {\it Appendix}. {\bf Installation on Windows:} Run the setup program and follow instructions. It installs all the required stuff and creates shortcuts to XTherion and Therion Book. \subsubchapter Setting-up environment. Therion reads settings from the initialization file. Default settings should work fine for users using just latin characters\[In the PDF map Therion renders most of the accented characters as a combination of accent and a base character. Some obscure accents might be omitted. Precomposed accented letters are included for Slovak and Czech languages.], standard \TeX\ and \MP. If you want to use own fonts for latin or non-latin characters in PDF maps, edit initialization file. Instructions on how to do this are in the {\it Appendix}. \subchapter How does it work?. So, now it's clear what Therion needs, let's have a look at the way it interacts with all these programs: \par\penalty-200 \midinsert \centerline{\MPpic{schema.1}} \endinsert DON'T PANIC! When your system is set-up right the majority of this is hidden from the user and all necessary programs are run automatically by Therion. For working with Therion it is enough to know that you have to create input data (best done with XTherion), run Therion, and display output files (3D model, map, log file) in the appropriate program. For those who want to understand more about it, here is a brief explanation of the above flowchart. Program names are in roman font, data files in italics. Arrows show data flow between programs. Temporary data files are not shown. Meaning of colors: \list * black---Therion programs and macros (XTherion is written in Tcl/Tk, so it needs this interpreter to run) * red---\TeX\ package * green---input files created by the user and output files created by Therion \endlist Therion itself does the main task. It reads the input files, interprets them, finds closed loops and distributes errors. Next it transforms all other data (e.g.~2D maps) according to new stations position. Therion exports data for 2D maps in \MP\ format. \MP\ gives the actual shape to abstract map symbols according to map symbol definitions; it creates a lot of PostScript files with small fragments of the cave. These are read back and converted to a PDF-like format, which forms input data for pdf\TeX. Pdf\TeX\ does all the typesetting and creates a PDF file of the cave map. Therion also exports 3D model (full or centreline) in various formats. Centreline may be exported for further processing in any SQL database. \subchapter First run. After explaining the basic principles of Therion it's a good idea to try it on the example data. \list * Download the sample data from Therion web page and unpack it somewhere on your computer's hard drive. * Run XTherion (under Unix and MacOS\,X by typing `xtherion' in the command line, under Windows there is a shortcut in the {\it Start} menu). * Open the file `thconfig' from the sample data directory in the `Compiler' window of XTherion * Press `F9' or `compile' in the menu to run Therion on the data---you'll get some messages from Therion, \MP\ and \TeX. * PDF maps and 3D model are created in the data directory. \endlist Additionally, you may open survey data files (*.th) in the `Text editor' window and map data files (*.th2) in the `Map editor' window of XTherion. Although the data format may look confusing for the first time, it will be explained in the following chapters. \endinput therion-5.4.1/thbook/ch02.tex000066400000000000000000002320071307545355600157560ustar00rootroot00000000000000\eject \vbox{\rightline{\pic[100mm]{agrippa.jpg}} \kern-20mm \eightit\baselineskip10pt\rightskip105mm\leftskip0mm\parindent1.05cm Only for you, children of doctrine and learning, have we written this work. Examine this book, ponder the meaning we have dispersed in various places and gathered again; what we have concealed in one place we have disclosed in another, that it may be understood by your wisdom.\par \kern-10pt \rightline{\hfil\eightrm ---Henricus C. Agrippa ab Nettesheym, \eightmit 1533} } \chapter Creating data files. \subchapter Basics. The input files for Therion are in text format. There are a few rules about how such a file should look: \list * There are two kinds of commands. One-line commands and multi-line commands. * A one-line command is terminated by an end of line character. The syntax of these is |command arg1 ... argN [-option1 value1 -option2 value2 ...]| where {\it arg1 ... argN} are obligatory arguments, and pairs {\it -option value} are options, which you may freely omit. Which arguments and options are available depends on the particular command. An example may be |point 643.5 505.0 gradient -orientation 144.7| with three obligatory arguments and one optional option/value pair. Sometimes options have no or multiple values. * Multi-line commands begin similarly to one line commands, but continue on subsequent lines until explicit command termination. These lines may contain either data or options, which are applied to subsequent data. If a data line starts with a word reserved for an option, you have to insert `|!|' in front of it. The syntax is |command arg1 ... argN [-option1 value1 -option2 value2 ...] ... optionX valueX data ... endcommand| Again, for better illustration, a real example follows: |line wall -id walltobereferenced 1174.0 744.5 1194.0 756.5 1192.5 757.5 1176.0 791.0 smooth off 1205.5 788.0 1195.5 832.5 1173.5 879.0 endline| This command |line| has one obligatory argument, a line type (passage wall in this case), followed by one option. The next two lines contain data (coordinates of B\'ezier curves to be drawn). The next line (``|smooth off|'') specifies an option which applies to subsequent data (i.e. not for the whole line, unlike the option |-id| in the first line) and the last line contains some more data. * if the value of an option or argument contains spaces, you should enclose this value in \hbox{|" "|} or \hbox{|[ ]|}. If you want to put a double-quote |"| into text in \hbox{|" "|} you need to insert it twice. Quotes are used for strings; brackets for numerical values and keywords. * each line ending with a backslash (|\|) is considered to continue on the next line, as if there was neither line-break nor backlash. * everything that follows |#|, until the end of line---even inside a command---is considered to be a comment, and is ignored. * \NEW{5.4}multiline comments inside |comment| ... |endcomment| block are allowed in data and configuration files \endlist \subchapter Data types. Therion uses following data types: \list * {\it keyword} = a sequence of |A-Z|, |a-z|, |0-9| and |_-/| characters (not starting with `|-|'). * {\it ext\_keyword} = keyword that can also contain |+*.,'| characters, but not on the first position. * {\it date} = a date (or a time interval) specification in a format\hfil\break |YYYY.MM.DD@HH:MM:SS.SS - YYYY.MM.DD@HH:MM:SS.SS| or `|-|' to leave a date unspecified. * {\it person} = a person's first name and surname separated by whitespace characters. Use `|/|' to separate first name and surname if there are more names. * {\it string} = a sequence of any characters. \NEW{5.3}Strings may contain special tag || to separate translations. In multilingual strings only the text between || (where |XX| is the language selected in initialization or configuration file) and the next || tag is displayed on the output. If no match is found, everything before any occurence of || tag is displayed. * {\it units} = length units supported: meter[s], centimeter[s], inch[es], feet[s], yard[s] (also m, cm, in, ft, yd). Angle units supported: degree[s], minute[s] (also deg, min), grad[s], mil[s], percent[age] (clino only). A degree value may be entered in decimal notation ($x.y$) or in a special notation for degrees, minutes and seconds ($deg[{:}min[{:}sec]]$). \endlist \subchapter Coordinate systems. Therion supports coordinate transformations in geodetic coordinate systems. You can specify |cs| option in |centreline|, |surface|, |import| and |layout| objects and then enter XY data in given system. You can also specify output |cs| in configuration file. If you do not specify any |cs| in your dataset, it is assumed you are working in |local| coordinate system, and no conversions are done. If you specify |cs| anywhere in the data, you have to specify it for all location data (|fix|, |origin| in |layout| etc.). |cs| applies to all subsequent location data until other |cs| is specified or until the end of the current object, whichever comes first. Following coordinate systems are supported: \list * |UTM1| -- |UTM60| = Universal Transverse Mercator in northern hemisphere and given zone, WGS84 datum. * |UTM1N| -- |UTM60N| = same as |UTM1| -- |UTM60| * |UTM1S| -- |UTM60S| = UTM in southern hemisphere, WGS84 datum. * |lat-long|, |long-lat| = latitude (N positive, S negative) and longitude (E positive, W negative) in given order in degrees ($deg[{:}min[{:}sec]]$ allowed), WGS84 datum. By default, not supported on output. * |EPSG:| = Most of EPSG coordinate systems. Almost every coordinate system used worldwide has its own EPSG number. To find number of your system, see |extern/proj4/nad/epsg| file in the therion source distribution. * |ESRI:| = Similar to EPSG, but ESRI standard. %* |EUR79Z30| = UTM zone 30, EUR79 datum. % ad-hoc addition not worth mentioning?? * |JTSK|, |iJTSK| = Czechoslovak S-JTSK system used since 1920s with south and west axis (JTSK) and its modified version with axis pointing east and north and negative numbers (iJTSK). JTSK is not supported on output (iJTSK is). * |JTSK03|, |iJTSK03| = new S-JTSK realisation introduced in Slovakia in 2011. * |OSGB:| = British Ordnance Survey National Grid.\NEW{5.4} * |S-MERC| = the spherical Mercator projection, as used by various online mapping sites. \endlist \subchapter Magnetic declination. Therion contains built-in IGRF\[See \www{https://www.ngdc.noaa.gov/IAGA/vmod/}] Earth geomagnetic field model valid for period 1900--2020\NEW{5.4}. It is automatically used if the cave is located in space using any of supported geodetic coordinate systems and no declination is specified by user. The computed declination is listed in the LOG file for information. \subchapter Data format. The syntax of input files is explained in the description of individual commands. Studying the example files distributed with Therion will help you understand. See also an example in the {\it Appendix}. Each of the following sections describes one Therion command using the following structure: {\it Description:} notes concerning this command. {\it Syntax:} schematic syntax description. {\it Context:} specifies the context in which is this command allowed. The {\it survey} context means that the command must be enclosed by |survey ... endsurvey| pair. The {\it scrap} context means that the command must be enclosed within |scrap ... endscrap| pair. Context {\it all} means that the command may be used anywhere. {\it Arguments:} a list of the obligatory arguments with explanations. {\it Options:} a list of the available options. {\it Command-like options:} options for multi-line commands, which can be specified among the data lines. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `encoding'. \description sets the encoding of input file. This allows the use of non-ASCII characters in input files. \enddescription \syntax |encoding | \endsyntax \context It should be the very first command in the file. \endcontext \arguments * || = to see a list of all the supported encoding names, run Therion with |--print-encodings| option. `UTF-8' (Unicode) and `ASCII' (7\,bit) encodings are always supported. \endarguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `input'. \description inserts the contents of a file in place of the command. Default extension is `.th' and may be omitted. For greatest portability use relative paths and Unix slashes `|/|', not Windows backslashes `|\|', as directory separators. \enddescription \syntax |input | \endsyntax \context all \endcontext \arguments * || \endarguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `survey'. \description Survey is the main data structure. % Each data object must belong to a survey. Surveys may be nested---this allows a hierarchical structure to be built. Usually some level of this hierarchical structure survey represents caves, higher levels karst areas and lower levels e.g.~passages. Each survey has its own namespace specified by its || argument. Objects (like survey stations or scraps; see below) which belong to a subsurvey of the current survey are referenced as |@|, or, if there are more nesting levels |@.|.\[Note: it's not possible to reference any object from the higher-level surveys.] This means, that object identifiers must be unique only in the scope of one survey. For instance, survey stations names can be the same if they are in different surveys. This allows stations to be numbered from 0 in each survey or the joining of two caves into one cave system without renaming survey stations. \enddescription \syntax |survey [OPTIONS] ... other therion objects ... endsurvey []| \endsyntax \context none, survey \endcontext \arguments *|| = survey identifier \endarguments \options * |namespace | = specify whether survey creates namespace (|on| by default) * |declination | = set the default declination for all data objects in this survey (which can be overridden by declination definitions in subsurveys). The || has three forms: 1. |[]| an empty string. This will reset the declination definition. 2. |[ ]| will set a single value (also for undated surveys). 3. |[ [ ... ] ]| will set declination for several dates. Then the declination of each shot will be set according to the date specification of the data object. If you want to explicitly set the declination for undated survey data, use `|-|' instead of date. If no declination is specified and some geodetic coordinate system is defined, the declination is automatically computed using built-in geomagnetic model. N.B.: The declination is positive when the magnetic north is east of true north. * |person-rename | = rename a person whose name has been changed * |title | = description of the object * |entrance | = specifies the main entrance to the cave represented by this survey. If not specified and there is exactly one station marked entrance in this survey, it is considered to represent a cave also. This information is used for |cave-list| export. \endoptions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \subsubchapter `centreline'. \description Survey data (centreline) specification. The syntax is borrowed from Survex with minor modifications; the Survex manual may be useful as an additional reference for the user. A synonym term `centerline' may be used. \enddescription \syntax |centreline [OPTIONS] date team [] explo-date explo-team instrument calibrate [] units [] sd grade declination grid-angle infer mark flags station [] cs fix [ [ ]] equate data \n"); fprintf(out, "\n"); fprintf(out, "\n"); fprintf(out, " https://therion.speleo.sk/downloads/KmlIconModel.png \n"); // VG 250616: TODO change icons above, maybe upload to therion website after testing // Get the main survey, which is at level 2 and is different from the fsurveyptr at level 1 thsurvey * mainsrv = dbp->fsurveyptr; thdataobject * obj; for(obj = mainsrv->foptr; obj != NULL; obj = obj->nsptr) if (obj->get_class_id() == TT_SURVEY_CMD) { mainsrv = (thsurvey *) obj; break; } // Export cave name and description in the selected language std::string cavename = ths2txt((strlen(mainsrv->title) > 0) ? mainsrv->title : mainsrv->name, layout->lang); cavename = replace_all(cavename, "
", "-"); fprintf(out, "\n", cavename.c_str()); double cavedepth = 0; if (mainsrv->stat.station_top != NULL) { cavedepth = mainsrv->stat.station_top->z - mainsrv->stat.station_bottom->z; if (cavedepth > mainsrv->stat.length) cavedepth = mainsrv->stat.length; } layout->units.lang = layout->lang; fprintf(out, "%s %s %s]]>\n", thT("title cave length", layout->lang), layout->units.format_length(mainsrv->stat.length), layout->units.format_i18n_length_units(), thT("title cave depth", layout->lang), layout->units.format_length(cavedepth), layout->units.format_i18n_length_units()); double x, y, z; thdb1ds * station; size_t nstat = db->db1d.station_vec.size(), i; // Export entrances if ((this->items & TT_EXPMODEL_ITEM_ENTRANCES) != 0) { for(i = 0; i < nstat; i++) { station = &(db->db1d.station_vec[i]); if ((station->flags & TT_STATIONFLAG_ENTRANCE) != 0) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, station->x, station->y, station->z, x, y, z); fprintf(out, "\n"); fprintf(out, "#ThEntranceIcon"); fprintf(out, "\n", ths2txt(station->comment, layout->lang).c_str()); fprintf(out, " %.14f,%.14f,%.14f \n", x / THPI * 180.0, y / THPI * 180.0, z); fprintf(out, "\n"); } } } // Export only surface shots in a separate subfolder (placemark)) with distinct color if ((this->items & TT_EXPMODEL_ITEM_SURFACECENTERLINE) != 0) { thdb1dl ** tlegs = dbp->db1d.get_tree_legs(); unsigned long nlegs, last_st, cur_st, numst; nlegs = dbp->db1d.get_tree_size(); nstat = (unsigned long)dbp->db1d.station_vec.size(); last_st = nstat; numst = 0; for(i = 0; i < nlegs; i++, tlegs++) { if (this->is_leg_exported(*tlegs) && (((*tlegs)->leg->flags & TT_LEGFLAG_SURFACE) != 0)) { if (numst == 0) { fprintf(out, "\n"); fprintf(out, "%s\n", thT("surface legs", layout->lang)); fprintf(out, "#ThSurveyLineSurf\n"); fprintf(out, "\n"); } cur_st = dbp->db1d.station_vec[((*tlegs)->reverse ? (*tlegs)->leg->to.id : (*tlegs)->leg->from.id) - 1].uid - 1; if (cur_st != last_st) { if (numst > 0) fprintf(out,"\n"); fprintf(out,"\n"); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, dbp->db1d.station_vec[cur_st].x, dbp->db1d.station_vec[cur_st].y, dbp->db1d.station_vec[cur_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f ", x / THPI * 180.0, y / THPI * 180.0, z); numst = 1; } last_st = dbp->db1d.station_vec[((*tlegs)->reverse ? (*tlegs)->leg->from.id : (*tlegs)->leg->to.id) - 1].uid - 1; thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, dbp->db1d.station_vec[last_st].x, dbp->db1d.station_vec[last_st].y, dbp->db1d.station_vec[last_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f ", x / THPI * 180.0, y / THPI * 180.0, z); numst++; } } if (numst > 0) { fprintf(out,"\n"); fprintf(out,"\n\n"); } } // Export the survey and subsurvey data export_kml_survey_file(out, mainsrv); fprintf(out, "\n\n"); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmodel::export_kml_survey_file(FILE * out, thsurvey * surv) { if ((strlen(surv->name) == 0) || !(surv->is_selected()) || (surv == NULL)) return; thdataobject * obj; for(obj = surv->foptr; obj != NULL; obj = obj->nsptr) { switch (obj->get_class_id()) { case TT_SURVEY_CMD: { thsurvey * subsurv = (thsurvey *) obj; if ((strlen(subsurv->name) == 0) || !(subsurv->is_selected())) break; std::string surveyname = ths2txt((strlen(subsurv->title) > 0) ? subsurv->title : subsurv->name, layout->lang); fprintf(out, "\n"); fprintf(out, "\n", surveyname.c_str()); export_kml_survey_file(out, subsurv); fprintf(out, "\n"); break; } case TT_DATA_CMD: { unsigned long last_st, cur_st, numst = 0; double x, y, z; thdataleg_list::iterator legs; thdata * survdata = (thdata *) obj; if (survdata->leg_list.empty()) // skip empty data blocks break; fprintf(out, "\n"); fprintf(out, "%s\n", survdata->leg_list.front().from.name); fprintf(out, "#ThSurveyLine\n"); fprintf(out, "\n"); // Export underground legs here. Surface ones are already exported in export_kml_file last_st = db->db1d.station_vec[survdata->leg_list.back().to.id - 1].uid - 1; for(legs = survdata->leg_list.begin(); legs != survdata->leg_list.end(); legs++) { bool is_surface = (legs->flags & TT_LEGFLAG_SURFACE) != 0; bool is_splay = (legs->flags & TT_LEGFLAG_SPLAY) != 0; if ((legs->is_valid && !is_surface) && (((this->items & TT_EXPMODEL_ITEM_SPLAYSHOTS) != 0) || !is_splay)) { cur_st = db->db1d.station_vec[legs->from.id - 1].uid - 1; if (cur_st != last_st) { if (numst > 0) fprintf(out, "\n\n"); fprintf(out, "\n"); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, db->db1d.station_vec[cur_st].x, db->db1d.station_vec[cur_st].y, db->db1d.station_vec[cur_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f ", x / THPI * 180.0, y / THPI * 180.0, z); numst = 1; } last_st = db->db1d.station_vec[legs->to.id - 1].uid - 1; thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, db->db1d.station_vec[last_st].x, db->db1d.station_vec[last_st].y, db->db1d.station_vec[last_st].z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f ", x / THPI * 180.0, y / THPI * 180.0, z); numst++; } } // for legs if (numst > 0) fprintf(out, "\n\n"); fprintf(out, "\n\n"); break; } } // switch } // for object list } therion-5.4.1/thexpmodel.h000066400000000000000000000132511307545355600155320ustar00rootroot00000000000000/** * @file thexpmodel.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpmodel_h #define thexpmodel_h #include "thexport.h" #include "thsurvey.h" /** * Model export options. */ enum { TT_EXPMODEL_OPT_UNKNOWN = 0, ///< Unknown option TT_EXPMODEL_OPT_FORMAT, ///< Output option. TT_EXPMODEL_OPT_ENABLE, ///< Output option. TT_EXPMODEL_OPT_DISABLE, ///< Output option. TT_EXPMODEL_OPT_WALLSRC, ///< Output option. TT_EXPMODEL_OPT_ENCODING, ///< Output encoding. }; /** * Options parsing table. */ static const thstok thtt_expmodel_opt[] = { {"-disable", TT_EXPMODEL_OPT_DISABLE}, {"-enable", TT_EXPMODEL_OPT_ENABLE}, {"-enc", TT_EXPMODEL_OPT_ENCODING}, {"-encoding", TT_EXPMODEL_OPT_ENCODING}, {"-fmt", TT_EXPMODEL_OPT_FORMAT}, {"-format", TT_EXPMODEL_OPT_FORMAT}, {"-wall-source", TT_EXPMODEL_OPT_WALLSRC}, {NULL, TT_EXPMODEL_OPT_UNKNOWN} }; /** * Model export item options. */ enum { TT_EXPMODEL_ITEM_UNKNOWN = 0, TT_EXPMODEL_ITEM_WALLS = 1, TT_EXPMODEL_ITEM_CAVECENTERLINE = 2, TT_EXPMODEL_ITEM_SURFACECENTERLINE = 4, TT_EXPMODEL_ITEM_CENTERLINE = 6, TT_EXPMODEL_ITEM_SURFACE = 8, TT_EXPMODEL_ITEM_SPLAYSHOTS = 16, TT_EXPMODEL_ITEM_ENTRANCES = 32, TT_EXPMODEL_ITEM_ALL = 255, }; /** * Options parsing table. */ static const thstok thtt_expmodel_items[] = { {"all", TT_EXPMODEL_ITEM_ALL}, {"cave-centerline", TT_EXPMODEL_ITEM_CAVECENTERLINE}, {"cave-centreline", TT_EXPMODEL_ITEM_CAVECENTERLINE}, {"centerline", TT_EXPMODEL_ITEM_CENTERLINE}, {"centreline", TT_EXPMODEL_ITEM_CENTERLINE}, {"entrances", TT_EXPMODEL_ITEM_ENTRANCES}, {"splay-shots", TT_EXPMODEL_ITEM_SPLAYSHOTS}, {"surface", TT_EXPMODEL_ITEM_SURFACE}, {"surface-centerline", TT_EXPMODEL_ITEM_SURFACECENTERLINE}, {"surface-centreline", TT_EXPMODEL_ITEM_SURFACECENTERLINE}, {"walls", TT_EXPMODEL_ITEM_WALLS}, {NULL, TT_EXPMODEL_ITEM_UNKNOWN} }; /** * Model export formats. */ enum { TT_EXPMODEL_FMT_UNKNOWN = 0, ///< Unknown option TT_EXPMODEL_FMT_SURVEX, ///< survex TT_EXPMODEL_FMT_COMPASS, ///< compass TT_EXPMODEL_FMT_THERION, ///< therion TT_EXPMODEL_FMT_LOCH, ///< loch TT_EXPMODEL_FMT_3DMF, ///< 3dmf TT_EXPMODEL_FMT_VRML, ///< vrml TT_EXPMODEL_FMT_DXF, ///< dxf TT_EXPMODEL_FMT_SHP, ///< esri shapefile TT_EXPMODEL_FMT_KML, ///< google earth format }; /** * Format parsing table. */ static const thstok thtt_expmodel_fmt[] = { {"3d", TT_EXPMODEL_FMT_SURVEX}, {"3dmf", TT_EXPMODEL_FMT_3DMF}, {"compass", TT_EXPMODEL_FMT_COMPASS}, {"dxf", TT_EXPMODEL_FMT_DXF}, {"esri", TT_EXPMODEL_FMT_SHP}, {"kml", TT_EXPMODEL_FMT_KML}, {"loch", TT_EXPMODEL_FMT_LOCH}, {"shapefile", TT_EXPMODEL_FMT_SHP}, {"shapefiles", TT_EXPMODEL_FMT_SHP}, {"shp", TT_EXPMODEL_FMT_SHP}, {"survex", TT_EXPMODEL_FMT_SURVEX}, {"vrml", TT_EXPMODEL_FMT_VRML}, // {"xtherion", TT_EXPMODEL_FMT_THERION}, {NULL, TT_EXPMODEL_FMT_UNKNOWN} }; /** * Model wall sources. */ enum { TT_WSRC_UNKNOWN = 0, TT_WSRC_CENTERLINE = 1, TT_WSRC_MAPS = 2, TT_WSRC_ALL = 3, }; /** * Options parsing table. */ static const thstok thtt_expmodel_wallsrc[] = { {"all", TT_WSRC_ALL}, {"centerline", TT_WSRC_CENTERLINE}, {"centreline", TT_WSRC_CENTERLINE}, {"maps", TT_WSRC_MAPS}, {NULL, TT_WSRC_UNKNOWN} }; /** * Main export class. */ class thexpmodel : public thexport { public: int format, ///< Output format. encoding; ///< Output encoding. unsigned items, wallsrc; bool is_leg_exported(class thdb1dl * l); ///< Whether to export leg. void export_3d_file(class thdatabase * dbp); ///< Export survex 3d file. void export_plt_file(class thdatabase * dbp); ///< Export compass plt file. //void export_thm_file(class thdatabase * dbp); ///< Export therion model file. void export_vrml_file(class thdatabase * dbp); ///< Export vrml file. void export_3dmf_file(class thdatabase * dbp); ///< Export 3dmf file. void export_dxf_file(class thdatabase * dbp); ///< Export compass plt file. void export_lox_file(class thdatabase * dbp); ///< Export lox file. void export_shp_file(class thdatabase * dbp); ///< Export shp file. void export_kml_file(class thdatabase * dbp); ///< Export kml file. void export_kml_survey_file(FILE * out, thsurvey * surv); ///< Helper function to export part of the survey tree public: thexpmodel(); ///< Default constructor. virtual ~thexpmodel(); ///< Default destructor. /** * Parse model export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp); }; #endif therion-5.4.1/thexport.cxx000066400000000000000000000071621307545355600156150ustar00rootroot00000000000000/** * @file thexport.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexport.h" #include "thexception.h" #include "thconfig.h" #include "thdatabase.h" #include "thexporter.h" #include "thcs.h" #include thexport::thexport() { this->layout = new thlayout; this->layout->assigndb(&thdb); this->layout->id = ++thdb.objid; this->outpt = ""; this->outpt_def = false; this->export_mode = 0; this->cs = TTCS_LOCAL; } thexport::~thexport() { delete this->layout; } void thexport::assign_config(class thconfig * cptr) { this->cfgptr = cptr; this->cfgpath = cptr->cfg_file.get_cif_path(); } void thexport::parse(int nargs, char ** args) { int ax = 0, oax; this->parse_arguments(ax, nargs, args); while (ax < nargs) { oax = ax; this->parse_options(ax, nargs, args); if (oax == ax) ththrow(("unknown option -- \"%s\"", args[ax])) } } void thexport::parse_arguments(int & argx, int nargs, char ** args) { } void thexport::parse_options(int & argx, int nargs, char ** args) { int optid = thmatch_token(args[argx], thtt_exp_opt); int optx = argx; switch (optid) { case TT_EXP_OPT_OUTPUT: argx++; if (argx >= nargs) ththrow(("missing output file name -- \"%s\"",args[optx])) if (strlen(args[argx]) > 0) { this->outpt = this->cfgptr->get_db()->strstore(args[argx]); outpt_def = true; } else ththrow(("empty file name not allowed -- \"%s\"",args[optx])) argx++; break; case TT_EXP_OPT_CS: argx++; if (argx >= nargs) ththrow(("missing coordiate system -- \"%s\"",args[optx])) { int id = thcs_parse(args[argx]); if (id == TTCS_UNKNOWN) { ththrow(("unknown coordinate system -- %s", args[argx])); } if ((thcfg.outcs != id) && (id == TTCS_LOCAL)) ththrow(("mixing local and global coordinate system -- %s", args[argx])); this->cs = id; } argx++; break; default: break; } } void thexport::dump(FILE * xf) { this->dump_header(xf); this->dump_body(xf); fprintf(xf,"\n"); } void thexport::dump_header(FILE * xf) { fprintf(xf,"export %s", thmatch_string(this->export_mode, thtt_exporter)); } void thexport::dump_body(FILE * xf) { if (this->outpt_def) { thdecode_arg(&(this->cfgptr->bf1), this->outpt); fprintf(xf," -output %s",this->cfgptr->bf1.get_buffer()); } } const char * thexport::get_output(const char * defname) { static thbuffer outptfname; outptfname = this->cfgpath.get_buffer(); if (this->outpt_def) { if (thpath_is_absolute(this->outpt)) return this->outpt; else outptfname += this->outpt; } else { outptfname += defname; } return outptfname.get_buffer(); } therion-5.4.1/thexport.h000066400000000000000000000063161307545355600152420ustar00rootroot00000000000000/** * @file thexport.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexport_h #define thexport_h #include #ifndef THMSVC #include #endif #include "thparse.h" #include "thobjectsrc.h" #include "thlayout.h" /** * General export options. */ enum { TT_EXP_OPT_UNKNOWN = 0, ///< Unknown option TT_EXP_OPT_OUTPUT, ///< Output option. TT_EXP_OPT_CS, ///< Output coordinate system. }; /** * Options parsing table. */ static const thstok thtt_exp_opt[] = { {"-cs", TT_EXP_OPT_CS}, {"-o", TT_EXP_OPT_OUTPUT}, {"-output", TT_EXP_OPT_OUTPUT}, {NULL, TT_EXP_OPT_UNKNOWN} }; /** * Main export class. */ class thexport { public: class thlayout * layout; ///< Layout pointer. friend class thexporter; class thconfig * cfgptr; ///< Current config pointer. int export_mode; ///< Export mode. thobjectsrc src; ///< Export source. class thdatabase * db; ///< Exported database. const char * outpt; ///< Output file name. thbuffer cfgpath; ///< Config path. bool outpt_def; ///< Whether output file defined. int cs; ///< Output coordinate system. public: thexport(); ///< Default constructor. virtual ~thexport(); void assign_config(class thconfig * cptr); ///< ??? /** * Parse format and options. */ virtual void parse(int nargs, char ** args); /** * Parse export arguments. */ virtual void parse_arguments(int & argx, int nargs, char ** args); /** * Parse export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump(FILE * xf); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp) = 0; /** * Return path to output file. */ virtual const char * get_output(const char * defname); }; #ifdef THMSVC #define strcasecmp _stricmp #endif #define thexp_set_ext_fmt(extension,cformat) { \ if (strlen(this->outpt) > strlen(extension)) { \ if (strcasecmp(&(this->outpt[strlen(this->outpt) - strlen(extension)]), extension) == 0) { \ this->format = cformat; \ } \ } \ } #endif therion-5.4.1/thexporter.cxx000066400000000000000000000100751307545355600161410ustar00rootroot00000000000000/** * @file thexporter.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexporter.h" #include "thexception.h" #include "thconfig.h" #include "thdatabase.h" #include "thexpmodel.h" #include "thexpmap.h" #include "thexpdb.h" #include "thexpsys.h" #include "thexptable.h" #include thexporter::thexporter() { this->cfgptr = NULL; } thexporter::~thexporter() { thexporter_list::iterator ii; for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { delete (*ii); } } void thexporter::assign_config(class thconfig * cptr) { this->cfgptr = cptr; } void thexporter::parse_system(char * system_cmd) { if (strlen(system_cmd) == 0) ththrow(("empty system command not allowed")) thexpsys * xp; xp = new thexpsys; xp->src.name = thdb.strstore(thcfg.get_cfg_file()->get_cif_name(),true); xp->src.line = thcfg.get_cfg_file()->get_cif_line_number(); xp->assign_config(this->cfgptr); xp->cmd = thdb.strstore(system_cmd, false); this->xlist.push_back(xp); } void thexporter::parse_export(int nargs, char ** args) { thexport * xp; int expmode; if (nargs < 1) ththrow(("not enough export arguments")) expmode = thmatch_token(args[0], thtt_exporter); switch (expmode) { case TT_EXP_MODEL: xp = new thexpmodel; xp->export_mode = expmode; break; case TT_EXP_DATABASE: xp = new thexpdb; xp->export_mode = expmode; break; case TT_EXP_CONTLIST: case TT_EXP_SURVEYLIST: case TT_EXP_CAVELIST: xp = new thexptable; xp->export_mode = expmode; break; case TT_EXP_MAP: case TT_EXP_ATLAS: xp = new thexpmap; xp->export_mode = expmode; break; default: ththrow(("unsupported export type -- %s", args[0])) } xp->src.name = thdb.strstore(thcfg.get_cfg_file()->get_cif_name(),true); xp->src.line = thcfg.get_cfg_file()->get_cif_line_number(); // take care of layout revision switch (expmode) { case TT_EXP_MAP: case TT_EXP_ATLAS: thdb.revision_set.insert(threvision(thdb.objid,0,xp->src)); break; } nargs--; args++; xp->assign_config(this->cfgptr); xp->parse(nargs, args); this->xlist.push_back(xp); } void thexporter::dump_export(FILE * xf) { thexporter_list::iterator ii; if ((!this->xlist.empty()) && (!this->cfgptr->get_comments_skip())) fprintf(xf,"# Export settings.\n"); for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { (*ii)->dump(xf); } if (!this->xlist.empty()) fprintf(xf,"\n"); } void thexporter::export_db(class thdatabase * dp) { thexporter_list::iterator ii; // najprv spracujeme projekcie for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { switch ((*ii)->export_mode) { case TT_EXP_MAP: case TT_EXP_ATLAS: ((thexpmap*)(*ii))->parse_projection(dp); } } // exportujeme for(ii = this->xlist.begin(); ii != this->xlist.end(); ii++) { switch ((*ii)->export_mode) { case TT_EXP_MAP: case TT_EXP_ATLAS: thexporter_quick_map_export = false; (*ii)->process_db(dp); break; default: (*ii)->process_db(dp); break; } } } bool thexporter_quick_map_export; therion-5.4.1/thexporter.h000066400000000000000000000051131307545355600155630ustar00rootroot00000000000000/** * @file thexporter.h * Exporter class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexporter_h #define thexporter_h #include "thexport.h" #include "thparse.h" #include #include /** * Export types. */ enum { TT_EXP_UNKNOWN = 0, ///< Not match. TT_EXP_MODEL, ///< 3D model. TT_EXP_MAP, ///< 2D map. TT_EXP_ATLAS, ///< 2D atlas. TT_EXP_DATABASE, ///< Database export. TT_EXP_CONTLIST, ///< Table with specified data. TT_EXP_SURVEYLIST, ///< Table with specified data. TT_EXP_CAVELIST, ///< Export entrance list. }; /** * Export token table. */ static const thstok thtt_exporter[] = { {"atlas", TT_EXP_ATLAS}, {"cave-list", TT_EXP_CAVELIST}, {"continuation-list", TT_EXP_CONTLIST}, {"database", TT_EXP_DATABASE}, {"map", TT_EXP_MAP}, {"model", TT_EXP_MODEL}, {"survey-list", TT_EXP_SURVEYLIST}, {NULL, TT_EXP_UNKNOWN} }; /** * Export list. */ typedef std::list thexporter_list; /** * Data exporter class. */ class thexporter { class thconfig * cfgptr; ///< Current config pointer. thexporter_list xlist; ///< Export list. public: thexporter(); ///< Default constructor. ~thexporter(); ///< Default deconstructor. void assign_config(class thconfig * cptr); ///< ?? /** * Parse export option. */ void parse_export(int nargs, char ** args); /** * Parse export option. */ void parse_system(char * system_cmd); /** * Export database. */ void export_db(class thdatabase * dp); /** * Dump export into file. */ void dump_export(FILE * xf); }; /** * Quick map export indicator. */ extern bool thexporter_quick_map_export; #endif therion-5.4.1/thexpshp.cxx000066400000000000000000000566371307545355600156160ustar00rootroot00000000000000/** * @file thexpshp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpmap.h" #include "thexporter.h" #include "thexception.h" #include "thdatabase.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "thlayout.h" #include "thmap.h" #include "thsketch.h" #include "thconfig.h" #include #include "thtmpdir.h" #ifndef THMSVC #include #include #else #include #define mkdir _mkdir #define getcwd _getcwd #define chdir _chdir #define putenv _putenv #define hypot _hypot #define S_ISDIR(v) (((v) | _S_IFDIR) != 0) #endif #include "thchenc.h" #include "thdb1d.h" #include "thinit.h" #include "thlogfile.h" #include "thcmdline.h" #include "thsurvey.h" #include "thchenc.h" #include #include "thmapstat.h" #include "thsurface.h" #include #include "loch/lxMath.h" #include "extern/shapefil.h" #include "thexpmodel.h" #include "thcsdata.h" #include #include #include #include #include "thcs.h" #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif #include "thexpshp.h" thexpshpf::thexpshpf() { this->m_fnm = "default"; this->m_fpath = NULL; this->m_is_open = false; this->m_xshp = NULL; this->m_type = SHPT_NULL; this->m_object_id = -1; this->m_num_objects = 0; } bool thexpshpf::open() { if (this->m_is_open) return true; // set file path this->m_is_open = false; thbuffer fp; fp = this->m_xshp->m_dirname; fp += "/"; fp += this->m_fnm; this->m_fpath = thdb.strstore(fp); this->m_hndl = SHPCreate(this->m_fpath, this->m_type); if (this->m_hndl == NULL) return false; this->m_is_open = true; return true; } void thexpshpf::close() { if (this->m_is_open) { SHPClose(this->m_hndl); std::string dbfname(this->m_fpath); dbfname += ".dbf"; int enc = TT_UTF_8; if (this->m_xshp != NULL) { if (this->m_xshp->m_expmap != NULL) enc = this->m_xshp->m_expmap->encoding; if (this->m_xshp->m_expmodel != NULL) enc = this->m_xshp->m_expmodel->encoding; } this->m_attributes.export_dbf(dbfname.c_str(), enc); if ((thcfg.outcs != TTCS_LOCAL) && (strlen(thcs_get_data(thcfg.outcs)->prjspec) > 0)) { FILE * prjf; std::string prjname(this->m_fpath); prjname += ".prj"; prjf = fopen(prjname.c_str(), "w"); fprintf(prjf, "%s", thcs_get_data(thcfg.outcs)->prjspec); fclose(prjf); } } } void thexpshpf::init(thexpshp * xshp, const char * fnm, int type) { this->m_fnm = fnm; this->m_fpath = NULL; this->m_xshp = xshp; this->m_type = type; } thexpshp::thexpshp() { this->m_dirname = NULL; this->m_xproj = NULL; this->m_expmap = NULL; this->m_expmodel = NULL; this->m_fscrap.init(this, "outline2d", SHPT_POLYGONZ); this->m_fpoints.init(this, "points2d", SHPT_POINTZ); this->m_flines.init(this, "lines2d", SHPT_ARCZ); this->m_fareas.init(this, "areas2d", SHPT_POLYGONZ); this->m_fstations3D.init(this, "stations3d", SHPT_POINTZ); this->m_fshots3D.init(this, "shots3d", SHPT_ARCZ); this->m_fwalls3D.init(this, "walls3d", SHPT_MULTIPATCH); } bool thexpshp::open(const char * dirname) { // create directory #ifdef THWIN32 if (mkdir(dirname) != 0) { #else if (mkdir(dirname,0046750) != 0) { #endif struct #ifdef THMSVC _stat #else stat #endif buf; #ifdef THMSVC _stat #else stat #endif (dirname,&buf); if ((errno == EEXIST) && (S_ISDIR(buf.st_mode))) { // directory already exists } else { return false; } } // save dir name this->m_dirname = dirname; return true; } void thexpshp::close() { this->m_fscrap.close(); this->m_fstations3D.close(); this->m_fshots3D.close(); this->m_fwalls3D.close(); this->m_fpoints.close(); this->m_flines.close(); this->m_fareas.close(); } void thexpshpf::object_clear() { this->m_point_list.clear(); this->m_part_list.clear(); } void thexpshpf::object_insert() { this->m_object_id = -1; if (!this->open()) return; size_t l = this->m_point_list.size(); if (l == 0) return; size_t lp = this->m_part_list.size(); int * apstart, * aptype; double * ax, * ay, * az, * am; ax = new double [l]; ay = new double [l]; az = new double [l]; am = new double [l]; size_t i; std::list::iterator ipoint; std::list::iterator ipart; for (i = 0, ipoint = this->m_point_list.begin(); ipoint != this->m_point_list.end(); ipoint++, i++) { ax[i] = ipoint->m_x; ay[i] = ipoint->m_y; az[i] = ipoint->m_z; am[i] = ipoint->m_m; } if (lp > 0) { apstart = new int [lp]; aptype = new int [lp]; for (i = 0, ipart = this->m_part_list.begin(); ipart != this->m_part_list.end(); ipart++, i++) { apstart[i] = ipart->m_start; aptype[i] = ipart->m_type; } } else { apstart = NULL; aptype = NULL; } SHPObject * obj; obj = SHPCreateObject( this->m_type, -1, (int) lp, apstart, aptype, (int) l, ax, ay, az, am); this->m_object_id = SHPWriteObject(this->m_hndl, -1, obj); if (this->m_object_id > -1) this->m_attributes.insert_object(NULL, this->m_object_id); SHPDestroyObject(obj); if (lp > 0) { delete [] apstart; delete [] aptype; } delete [] ax; delete [] ay; delete [] az; delete [] am; this->m_num_objects++; this->object_clear(); } void thexpshpf::polygon_start_ring(bool outer) { this->m_ring_list.clear(); this->m_ring_outer = outer; thexpshpf_part p; p.m_start = (int) this->m_point_list.size(); if (outer) p.m_type = SHPP_OUTERRING; else p.m_type = SHPP_INNERRING; this->m_part_list.push_back(p); } void thexpshpf::tristrip_start() { this->m_ring_list.clear(); thexpshpf_part p; p.m_start = (int) this->m_point_list.size(); p.m_type = SHPP_TRISTRIP; this->m_part_list.push_back(p); } // insert points from bezier curve void insert_line_segment(thline * ln, bool reverse, std::list & lst, long startp = 0, long endp = -1) { thdb2dlp * cpt, * prevpt; thdb2dpt * cp1, * cp2; double t, tt, ttt, t_, tt_, ttt_, nx, ny, nz, na, px, py; long pnum; prevpt = NULL; if (reverse) cpt = ln->last_point; else cpt = ln->first_point; pnum = 0; while (cpt != NULL) { // insert bezier curve if (pnum == startp) prevpt = NULL; if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) { if (prevpt != NULL) { px = prevpt->point->xt; py = prevpt->point->yt; if (reverse) { cp1 = prevpt->cp2; cp2 = prevpt->cp1; } else { cp1 = cpt->cp1; cp2 = cpt->cp2; } if ((cp1 != NULL) && (cp2 == NULL)) cp2 = cp1; if ((cp1 == NULL) && (cp2 != NULL)) cp1 = cp2; if ((cp1 != NULL) && (cp2 != NULL)) { for(t = 0.05; t < 1.0; t += 0.05) { tt = t * t; ttt = tt * t; t_ = 1.0 - t; tt_ = t_ * t_; ttt_ = tt_ * t_; nx = ttt_ * prevpt->point->xt + 3.0 * t * tt_ * cp1->xt + 3.0 * tt * t_ * cp2->xt + ttt * cpt->point->xt; ny = ttt_ * prevpt->point->yt + 3.0 * t * tt_ * cp1->yt + 3.0 * tt * t_ * cp2->yt + ttt * cpt->point->yt; nz = t_ * cpt->point->zt + t * prevpt->point->zt; na = t_ * cpt->point->at + t * prevpt->point->at; // resolution 0.1 m if (hypot(nx - px, ny - py) > 0.1) { lst.push_back(thexpshpf_data(nx + ln->fscrapptr->proj->rshift_x, ny + ln->fscrapptr->proj->rshift_y, nz + ln->fscrapptr->proj->rshift_z, na)); px = nx; py = ny; } } } } } // insert point it self if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) lst.push_back(thexpshpf_data(cpt->point->xt + ln->fscrapptr->proj->rshift_x, cpt->point->yt + ln->fscrapptr->proj->rshift_y, cpt->point->zt + ln->fscrapptr->proj->rshift_z, cpt->point->at)); // next point prevpt = cpt; if (reverse) cpt = cpt->prevlp; else cpt = cpt->nextlp; pnum++; } } void thexpshpf::polygon_insert_line(thline * ln, bool reverse) { insert_line_segment(ln, reverse, this->m_ring_list); } void thexpshpf::point_insert(double x, double y, double z, double m) { this->m_point_list.push_back(thexpshpf_data(x,y,z,m)); } void thexpshpf::polygon_close_ring() { // check polygon orientation double area; std::list::iterator i, iprev; if (this->m_ring_list.size() < 2) return; iprev = this->m_ring_list.end(); iprev--; area = 0.0; for (i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { area += iprev->m_x * i->m_y - iprev->m_y * i->m_x; iprev = i; } area *= 0.5; bool reverse = ((area > 0) && m_ring_outer) || ((area < 0) && (!m_ring_outer)); // according to orientation, insert points to point list if (reverse) { for(i = this->m_ring_list.end(); i != this->m_ring_list.begin(); ) { i--; this->m_point_list.push_back(*i); } } else { for(i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { this->m_point_list.push_back(*i); } } } void thexpshp::xscrap2d(thscrap * scrap, thdb2dxm * xmap, thdb2dxs * xbasic) { thbuffer stnbuff; // export scrap outline this->m_fscrap.object_clear(); thscraplo * lo = scrap->get_outline(), * lo2; while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; this->m_fscrap.polygon_start_ring(lo->line->outline == TT_LINE_OUTLINE_OUT); while (lo2 != NULL) { this->m_fscrap.polygon_insert_line(lo2->line, lo2->mode == TT_OUTLINE_REVERSED); lo2 = lo2->next_line; } this->m_fscrap.polygon_close_ring(); } lo = lo->next_outline; } this->m_fscrap.object_insert(); if (this->m_fscrap.m_object_id > -1) { // system attributes this->m_fscrap.m_attributes.insert_attribute("_ID", (long) scrap->id); this->m_fscrap.m_attributes.insert_attribute("_NAME", scrap->name); this->m_fscrap.m_attributes.insert_attribute("_TITLE", scrap->title); this->m_fscrap.m_attributes.insert_attribute("_MAP_ID", (long) xmap->map->id); this->m_fscrap.m_attributes.insert_attribute("_MAP_LEVEL", (long) xmap->output_number); this->m_fscrap.m_attributes.insert_attribute("_MAP_TITLE", xmap->map->title); this->m_fscrap.m_attributes.insert_attribute("_SURVEY", scrap->fsptr->get_full_name()); if (this->m_xproj->type == TT_2DPROJ_PLAN) this->m_fscrap.m_attributes.insert_attribute("_Z", scrap->z + this->m_xproj->shift_z); // user defined attributes this->m_fscrap.m_attributes.copy_attributes(thdb.attr.get_object(scrap->id)); } // export centerline thscraplp * slp; slp = scrap->get_polygon(); while (slp != NULL) { if (slp->lnio) { this->m_flines.point_insert(slp->lnx1 + scrap->proj->rshift_x, slp->lny1 + scrap->proj->rshift_y, slp->lnz1 + scrap->proj->rshift_z); this->m_flines.point_insert(slp->lnx2 + scrap->proj->rshift_x, slp->lny2 + scrap->proj->rshift_y, slp->lnz2 + scrap->proj->rshift_z); this->m_flines.object_insert(); this->m_flines.m_attributes.insert_attribute("_SCRAP_ID",(long) scrap->id); this->m_flines.m_attributes.insert_attribute("_TYPE","centerline"); } else { this->m_fpoints.point_insert(slp->stx + scrap->proj->rshift_x, slp->sty + scrap->proj->rshift_y, slp->stz + scrap->proj->rshift_z); this->m_fpoints.object_insert(); this->m_fpoints.m_attributes.insert_attribute("_SCRAP_ID",(long) scrap->id); this->m_fpoints.m_attributes.insert_attribute("_TYPE","station"); this->m_fpoints.m_attributes.insert_attribute("_NAME",slp->station->name); this->m_fpoints.m_attributes.insert_attribute("_COMMENT",slp->station->comment); } slp = slp->next_item; } // export objects th2ddataobject * obj; thpoint * ppt; thline * pln; tharea * parea; obj = scrap->ls2doptr; long sp, cp, symid; int csubtype; thdb2dlp * lp; char typefc[2]; typefc[1] = 0; std::string tststr, tstr; const char * ststr; while (obj != NULL) { switch (obj->get_class_id()) { case TT_POINT_CMD: ppt = ((thpoint*)obj); this->m_fpoints.point_insert(ppt->point->xt + scrap->proj->rshift_x, ppt->point->yt + scrap->proj->rshift_y, ppt->point->zt + scrap->proj->rshift_z, ppt->point->at); this->m_fpoints.object_insert(); this->m_fpoints.m_attributes.insert_attribute("_SCRAP_ID",(long) ppt->fscrapptr->id); this->m_fpoints.m_attributes.insert_attribute("_TYPE",thmatch_string(ppt->type, thtt_point_types)); this->m_fpoints.m_attributes.insert_attribute("_CLIP", ((obj->tags & TT_2DOBJ_TAG_CLIP_AUTO) ? "auto" : ((obj->tags & TT_2DOBJ_TAG_CLIP_ON) ? "on" : "off"))); tstr = thmatch_string(ppt->type, thtt_point_types); tststr = tstr; ststr = thmatch_string(ppt->subtype, thtt_point_subtypes); if ((ppt->type != TT_POINT_TYPE_U) && (ststr != NULL)) { tststr += ":"; tststr += ststr; } symid = thsymbolset__get_id("point", tststr.c_str()); if (symid < 0) symid = thsymbolset__get_id("point", tstr.c_str()); if (symid < 0) symid = 0; typefc[0] = thsymbolset__fontchar[symid]; this->m_fpoints.m_attributes.insert_attribute("_TYPEFC",(const char *)typefc); this->m_fpoints.m_attributes.insert_attribute("_TYPEFCR", thisnan(ppt->orient) ? 0.0 : 360.0 - ppt->orient); this->m_fpoints.m_attributes.insert_attribute("_SUBTYPE", ppt->type != TT_POINT_TYPE_U ? (thmatch_string(ppt->subtype, thtt_point_subtypes)) : ppt->m_subtype_str); this->m_fpoints.m_attributes.copy_attributes(thdb.attr.get_object(ppt->id)); switch (ppt->type) { case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: if ((ppt->text != NULL) && (strlen(ppt->text) > 0)) this->m_fpoints.m_attributes.insert_attribute("_TEXT",ppt->text); break; case TT_POINT_TYPE_STATION: if (ppt->station_name.id > 0) { thdb1ds * st = &(thdb.db1d.station_vec[ppt->station_name.id - 1]); this->m_fpoints.m_attributes.insert_attribute("_STNAME",st->name); this->m_fpoints.m_attributes.insert_attribute("_STSURVEY",st->survey->get_full_name()); } break; } break; case TT_LINE_CMD: pln = ((thline*)obj); sp = 0; cp = 1; lp = pln->first_point; if (lp == NULL) break; csubtype = lp->subtype; lp = lp->nextlp; while (lp != NULL) { if ((lp->subtype != csubtype) || (lp->nextlp == NULL)) { insert_line_segment(pln, false, this->m_flines.m_point_list, sp, cp); this->m_flines.object_insert(); this->m_flines.m_attributes.insert_attribute("_SCRAP_ID",(long) pln->fscrapptr->id); this->m_flines.m_attributes.insert_attribute("_TYPE",thmatch_string(pln->type, thtt_line_types)); this->m_flines.m_attributes.insert_attribute("_CLIP", ((obj->tags & TT_2DOBJ_TAG_CLIP_AUTO) ? "auto" : ((obj->tags & TT_2DOBJ_TAG_CLIP_ON) ? "on" : "off"))); this->m_flines.m_attributes.insert_attribute("_SUBTYPE", pln->type != TT_LINE_TYPE_U ? (thmatch_string(csubtype, thtt_line_subtypes)) : pln->m_subtype_str); this->m_flines.m_attributes.copy_attributes(thdb.attr.get_object(pln->id)); switch (pln->type) { case TT_LINE_TYPE_LABEL: if ((pln->text != NULL) && (strlen(pln->text) > 0)) this->m_flines.m_attributes.insert_attribute("_TEXT",pln->text); break; } csubtype = lp->subtype; sp = cp; } lp = lp->nextlp; cp++; } break; case TT_AREA_CMD: parea = ((tharea*)obj); if (parea->m_outline_line == NULL) break; this->m_fareas.object_clear(); this->m_fareas.polygon_start_ring(true); this->m_fareas.polygon_insert_line(parea->m_outline_line, false); this->m_fareas.polygon_close_ring(); this->m_fareas.object_insert(); if (this->m_fareas.m_object_id > -1) { // system attributes this->m_fareas.m_attributes.insert_attribute("_SCRAP_ID",(long) parea->fscrapptr->id); this->m_fareas.m_attributes.insert_attribute("_TYPE",thmatch_string(parea->type, thtt_area_types)); this->m_fareas.m_attributes.insert_attribute("_CLIP", ((obj->tags & TT_2DOBJ_TAG_CLIP_AUTO) ? "auto" : ((obj->tags & TT_2DOBJ_TAG_CLIP_ON) ? "on" : "off"))); this->m_fareas.m_attributes.insert_attribute("_SUBTYPE",parea->m_subtype_str); this->m_fareas.m_attributes.copy_attributes(thdb.attr.get_object(parea->id)); } break; } obj = obj->pscrapoptr; } } void thexpmap::export_shp(class thdb2dxm * maps, class thdb2dprj * prj) { if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } thdb.db2d.process_areas_in_projection(prj); const char * fnm = this->get_output("cave.shp"); thexpshp xs; xs.m_xproj = prj; xs.m_expmap = this; if (!xs.open(fnm)) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) xs.xscrap2d((thscrap *) cmi->object, cmap, cbm); cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } xs.close(); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmodel::export_shp_file(class thdatabase * dbp) { const char * fnm = this->get_output("cave.shp"); thexpshp xs; xs.m_expmodel = this; if (!xs.open(fnm)) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif // stations thdb1ds * st; size_t nst = dbp->db1d.station_vec.size(), i; for(i = 0; i < nst; i++) { st = &(dbp->db1d.station_vec[i]); xs.m_fstations3D.point_insert(st->x, st->y, st->z); xs.m_fstations3D.object_insert(); xs.m_fstations3D.m_attributes.insert_attribute("_ID", (long) (i+1)); xs.m_fstations3D.m_attributes.insert_attribute("_UID", (long) st->uid); xs.m_fstations3D.m_attributes.insert_attribute("_NAME", st->name); xs.m_fstations3D.m_attributes.insert_attribute("_SURVEY", st->survey->get_full_name()); xs.m_fstations3D.m_attributes.insert_attribute("_SURFACE", long(((st->flags | TT_STATIONFLAG_UNDERGROUND) == 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_FIXED", long(((st->flags | TT_STATIONFLAG_FIXED) != 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_ENTRANCE", long(((st->flags | TT_STATIONFLAG_ENTRANCE) != 0) ? 1 : 0)); xs.m_fstations3D.m_attributes.insert_attribute("_CONTINUATION", long(((st->flags | TT_STATIONFLAG_CONT) != 0) ? 1 : 0)); if ((st->comment != NULL) && (strlen(st->comment) > 0)) xs.m_fstations3D.m_attributes.insert_attribute("_COMMENT", st->comment); xs.m_fstations3D.m_attributes.copy_attributes(dbp->db1d.m_station_attr.get_object(i+1)); } // shots thdb1dl * lg; thdb1ds * st2; // stations size_t nleg = dbp->db1d.leg_vec.size(); for(i = 0; i < nleg; i++) { lg = &(dbp->db1d.leg_vec[i]); st = &(dbp->db1d.station_vec[lg->leg->from.id - 1]); st2 = &(dbp->db1d.station_vec[lg->leg->to.id - 1]); xs.m_fshots3D.point_insert(st->x, st->y, st->z); xs.m_fshots3D.point_insert(st2->x, st2->y, st2->z); xs.m_fshots3D.object_insert(); xs.m_fshots3D.m_attributes.insert_attribute("_FROM", (long) lg->leg->from.id); xs.m_fshots3D.m_attributes.insert_attribute("_TO", (long) lg->leg->to.id); xs.m_fshots3D.m_attributes.insert_attribute("_SURVEY", lg->leg->psurvey->get_full_name()); xs.m_fshots3D.m_attributes.insert_attribute("_SURFACE", long(((lg->leg->flags | TT_LEGFLAG_SURFACE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_DUPLICATE", long(((lg->leg->flags | TT_LEGFLAG_DUPLICATE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_APPROXIMATE", long(((lg->leg->flags | TT_LEGFLAG_APPROXIMATE) != 0) ? 1 : 0)); xs.m_fshots3D.m_attributes.insert_attribute("_SPLAY", long(((lg->leg->flags | TT_LEGFLAG_SPLAY) != 0) ? 1 : 0)); } // walls if (((this->items & TT_EXPMODEL_ITEM_WALLS) != 0) && ((this->wallsrc & TT_WSRC_MAPS) != 0)) { // 3D DATA thdb2dprjpr prjid = dbp->db2d.parse_projection("plan",false); thscrap * cs; thdb3ddata * d3d; if (!prjid.newprj) { thdb.db2d.process_projection(prjid.prj); cs = prjid.prj->first_scrap; while(cs != NULL) { if (cs->fsptr->is_selected()) { d3d = cs->get_3d_outline(); if ((d3d != NULL) && (d3d->nfaces > 0)) { thdb3dfc * fcp; thdb3dfx * fxp; for(i = 0, fcp = d3d->firstfc; fcp != NULL; fcp = fcp->next, i++) { switch (fcp->type) { case THDB3DFC_TRIANGLE_STRIP: xs.m_fwalls3D.tristrip_start(); for(fxp = fcp->firstfx; fxp->next != NULL; fxp = fxp->next) { xs.m_fwalls3D.point_insert(fxp->vertex->x,fxp->vertex->y,fxp->vertex->z); } break; case THDB3DFC_TRIANGLES: for(fxp = fcp->firstfx; fxp != NULL; fxp = fxp->next->next->next) { xs.m_fwalls3D.tristrip_start(); xs.m_fwalls3D.point_insert(fxp->vertex->x,fxp->vertex->y,fxp->vertex->z); xs.m_fwalls3D.point_insert(fxp->next->vertex->x,fxp->next->vertex->y,fxp->next->vertex->z); xs.m_fwalls3D.point_insert(fxp->next->next->vertex->x,fxp->next->next->vertex->y,fxp->next->next->vertex->z); } break; } } xs.m_fwalls3D.object_insert(); xs.m_fwalls3D.m_attributes.insert_attribute("_ID",(long)cs->id); xs.m_fwalls3D.m_attributes.insert_attribute("_NAME",cs->name); xs.m_fwalls3D.m_attributes.insert_attribute("_SURVEY",cs->fsptr->get_full_name()); } } cs = cs->proj_next_scrap; } } } // WALLS xs.close(); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } therion-5.4.1/thexpshp.h000066400000000000000000000047561307545355600152360ustar00rootroot00000000000000/** * @file thexpshp.h * Shapefile export classes. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpshp_h #define thexpshp_h #include #include "thscrap.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thattr.h" #include "thdb2d.h" struct thexpshpf_data { double m_x, m_y, m_z, m_m; thexpshpf_data(double x, double y, double z, double m) : m_x(x), m_y(y), m_z(z), m_m(m) {} }; struct thexpshpf_part { int m_type, m_start; }; // Shapefile module struct thexpshpf { const char * m_fnm, * m_fpath; struct thexpshp * m_xshp; bool m_is_open; int m_type; size_t m_num_objects; SHPHandle m_hndl; thattr m_attributes; thexpshpf(); void init(struct thexpshp * xshp, const char * fnm, int type); bool open(); void close(); std::list m_point_list; std::list m_part_list; int m_object_id; void object_clear(); void object_insert(); bool m_ring_outer; std::list m_ring_list; void point_insert(double x, double y, double z, double m = 0.0); void polygon_start_ring(bool outer); void polygon_insert_line(thline * ln, bool reverse); void polygon_close_ring(); void tristrip_start(); }; // Shapefile export structure. struct thexpshp { const char * m_dirname; thdb2dprj * m_xproj; thexpshpf m_fscrap, m_fpoints, m_flines, m_fareas; thexpshpf m_fstations3D, m_fshots3D, m_fwalls3D; class thexpmap * m_expmap; class thexpmodel * m_expmodel; thexpshp(); bool open(const char * dirname); void xscrap2d(thscrap * scrap, thdb2dxm * xmap, thdb2dxs * xbasic); void close(); }; #endif therion-5.4.1/thexpsys.cxx000066400000000000000000000024171307545355600156250ustar00rootroot00000000000000/** * @file thexpsys.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpsys.h" #include "thexception.h" #include "thdatabase.h" thexpsys::thexpsys() { this->cmd = ""; } void thexpsys::process_db(class thdatabase * dbp) { thprintf("system: %s\n", this->cmd); int retcode = system(this->cmd); if (retcode != EXIT_SUCCESS) thwarning(("system exit code -- %d", retcode)) } therion-5.4.1/thexpsys.h000066400000000000000000000024031307545355600152450ustar00rootroot00000000000000/** * @file thexpsys.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpsys_h #define thexpsys_h #include "thexport.h" class thexpsys : public thexport { public: const char * cmd; ///< System command. thexpsys(); ///< Default constructor. /** * Make export. */ virtual void process_db(class thdatabase * dbp); }; #endif therion-5.4.1/thexptable.cxx000066400000000000000000000422511307545355600160760ustar00rootroot00000000000000/** * @file thexptable.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexptable.h" #include "thexception.h" #include "thdatabase.h" #include "thdb1d.h" #include "thdata.h" #include "thexporter.h" #include "thinit.h" #include "thsurvey.h" #include "thscrap.h" #include "thdb1d.h" #include "thpoint.h" #include #include "thchenc.h" #include #include "thinfnan.h" #include "thcsdata.h" #include "thproj.h" #include "thconfig.h" #include "thcs.h" #include "thtexfonts.h" #include "thlang.h" thexptable::thexptable() { this->format = TT_EXPTABLE_FMT_UNKNOWN; this->encoding = TT_UTF_8; this->expattr = true; this->exploc = false; this->filter = true; this->surveys = true; } void thexptable::parse_options(int & argx, int nargs, char ** args) { int sv; int optid = thmatch_token(args[argx], thtt_exptable_opt); int optx = argx; switch (optid) { case TT_EXPTABLE_OPT_ATTRIBUTES: argx++; if (argx >= nargs) ththrow(("missing attributes switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid attributes switch -- \"%s\"", args[argx])) this->expattr = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_LOCATION: argx++; if (argx >= nargs) ththrow(("missing location switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid location switch -- \"%s\"", args[argx])) this->exploc = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_FILTER: argx++; if (argx >= nargs) ththrow(("missing filter switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid filter switch -- \"%s\"", args[argx])) this->filter = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_SURVEYS: argx++; if (argx >= nargs) ththrow(("missing surveys switch -- \"%s\"",args[optx])) sv = thmatch_token(args[argx], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid surveys switch -- \"%s\"", args[argx])) this->surveys = (sv == TT_TRUE); argx++; break; case TT_EXPTABLE_OPT_FORMAT: argx++; if (argx >= nargs) ththrow(("missing format -- \"%s\"",args[optx])) this->format = thmatch_token(args[argx], thtt_exptable_fmt); if (this->format == TT_EXPTABLE_FMT_UNKNOWN) ththrow(("unknown format -- \"%s\"", args[argx])) argx++; break; case TT_EXPTABLE_OPT_ENCODING: argx++; if (argx >= nargs) ththrow(("missing encoding -- \"%s\"",args[optx])) this->encoding = thmatch_token(args[argx], thtt_encoding); if (this->encoding == TT_UNKNOWN_ENCODING) ththrow(("unknown encoding -- \"%s\"", args[argx])) argx++; break; default: thexport::parse_options(argx, nargs, args); break; } } void thexptable::dump_header(FILE * xf) { thexport::dump_header(xf); } void thexptable::dump_body(FILE * xf) { thexport::dump_body(xf); if (this->format != TT_EXPTABLE_FMT_UNKNOWN) fprintf(xf," -format %s", thmatch_string(this->format, thtt_exptable_fmt)); if (this->encoding != TT_UNKNOWN_ENCODING) fprintf(xf," -encoding %s", thmatch_string(this->encoding, thtt_encoding)); } void thexptable::export_survey_entraces(thsurvey * survey) { thdataobject * obj; thdb1ds * st; double tmpd; const char * xl = NULL; const char * yl = NULL; if (this->exploc) { xl = ""; yl = ""; } bool is_cave = (survey->entrance.id != 0); if (!survey->is_selected()) return; if (survey->stat.num_entrances == 0) return; // insert survey attributes if ((survey->level > 1) && (this->surveys || is_cave)) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (this->surveys ? (size_t)(survey->level - 2) : 0); this->m_table.get_object()->m_tree_node_id = (this->surveys ? survey->get_reverse_full_name() : ""); this->m_table.insert_attribute("Title", ths2txt((strlen(survey->title) > 0) ? survey->title : survey->name, layout->lang).c_str()); this->m_table.insert_attribute("Length",(long)(survey->stat.length + 0.5)); if (!is_cave) this->m_table.get_attribute()->set_flag(THATTRFLAG_HIDDEN, true); if (survey->stat.station_top != NULL) { tmpd = survey->stat.station_top->z - survey->stat.station_bottom->z; if (tmpd > survey->stat.length) tmpd = survey->stat.length; this->m_table.insert_attribute("Depth",(long)(tmpd + 0.5)); } else { this->m_table.insert_attribute("Depth",""); } if (survey->stat.length_explored > 0.0) { this->m_table.insert_attribute("Explored", (long)(survey->stat.length_explored + 0.5)); if (!is_cave) this->m_table.get_attribute()->set_flag(THATTRFLAG_HIDDEN, true); } else { this->m_table.insert_attribute("Explored", ""); } if (((survey->stat.num_entrances > 0) && ((!exploc) || (survey->stat.num_entrances == 1) || (!this->surveys))) && (survey->entrance.id > 0)) { st = &(this->db->db1d.station_vec[survey->entrance.id - 1]); this->add_coordinates(st->x, st->y, st->z, xl, yl, ""); } else { this->add_coordinates(thnan, thnan, thnan, xl, yl, ""); } if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(survey->id)); } if (!is_cave) { for(obj = survey->foptr; obj != NULL; obj = obj->nsptr) { if (obj->get_class_id() == TT_SURVEY_CMD) { this->export_survey_entraces((thsurvey *) obj); } } } // insert entrances within this survey size_t nstat = this->db->db1d.station_vec.size(), i; if (this->surveys || (!is_cave)) { for(i = 0; i < nstat; i++) { st = &(this->db->db1d.station_vec[i]); if ((st->flags & TT_STATIONFLAG_ENTRANCE) != 0) { if (((exploc) && (survey->entrance.id > 0) && (survey->stat.num_entrances > 1) && (st->survey->is_in_survey(survey))) || ((survey->entrance.id == 0) && (st->survey->id == survey->id))) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (this->surveys ? (size_t)(survey->level - 1) : 0); std::string * tmps = get_tmp_string(); *tmps = survey->get_reverse_full_name(); *tmps += "."; this->m_table.get_object()->m_tree_node_id = (this->surveys ? tmps->c_str() : ""); this->m_table.insert_attribute("Title", ths2txt(st->comment).c_str()); this->m_table.insert_attribute("Length",""); this->m_table.insert_attribute("Depth",""); if (st->explored > 0.0) { this->m_table.insert_attribute("Explored", (long)(st->explored + 0.5)); } else { this->m_table.insert_attribute("Explored", ""); } this->add_coordinates(st->x, st->y, st->z, xl, yl, ""); if (this->expattr) this->m_table.copy_attributes(this->db->db1d.m_station_attr.get_object((long)i+1)); } } } } } void thexptable::process_db(class thdatabase * dbp) { this->db = dbp; if (this->format == TT_EXPTABLE_FMT_UNKNOWN) { this->format = TT_EXPTABLE_FMT_HTML; thexp_set_ext_fmt(".txt", TT_EXPTABLE_FMT_TXT) thexp_set_ext_fmt(".html", TT_EXPTABLE_FMT_HTML) thexp_set_ext_fmt(".htm", TT_EXPTABLE_FMT_HTML) thexp_set_ext_fmt(".dbf", TT_EXPTABLE_FMT_DBF) thexp_set_ext_fmt(".kml", TT_EXPTABLE_FMT_KML) } const char * fname; if ((this->cs == TTCS_LOCAL) && (thcfg.outcs != TTCS_LOCAL)) this->cs = thcfg.outcs; switch (this->format) { case TT_EXPTABLE_FMT_DBF: fname = this->get_output("table.dbf"); break; case TT_EXPTABLE_FMT_HTML: fname = this->get_output("table.html"); break; case TT_EXPTABLE_FMT_KML: this->cs = TTCS_LONG_LAT; this->exploc = true; fname = this->get_output("table.kml"); break; default: fname = this->get_output("table.txt"); } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fname); #else thprintf("writing %s ... ", fname); thtext_inline = true; #endif const char * survey = NULL; thsurvey * srv; thdb1ds * st; thdb_object_list_type::iterator oi; thpoint * pt; double tmpd; switch (this->export_mode) { case TT_EXP_CAVELIST: this->export_survey_entraces(this->db->fsurveyptr); this->m_table.m_tree = true; break; case TT_EXP_CONTLIST: { // check all stations and points unsigned long nstat = (unsigned long)dbp->db1d.station_vec.size(), i; for(oi = this->db->object_list.begin(); oi != this->db->object_list.end(); oi++) { if ((*oi)->get_class_id() == TT_POINT_CMD) { pt = (thpoint*)(*oi); if ((pt->type == TT_POINT_TYPE_CONTINUATION) && ((pt->text != NULL) || (!this->filter)) && (pt->fsptr->is_selected())) { this->db->db2d.process_projection(pt->fscrapptr->proj); this->m_table.insert_object(NULL); this->m_table.insert_attribute("Comment",ths2txt(pt->text, layout->lang).c_str()); if (!thisnan(pt->xsize)) this->m_table.insert_attribute("Explored",pt->xsize); else this->m_table.insert_attribute("Explored",(const char *)NULL); if (pt->station_name.id != 0) { st = &(dbp->db1d.station_vec[pt->station_name.id - 1]); } else { st = pt->fscrapptr->get_nearest_station(pt->point); } if (st != NULL) { srv = st->survey; } else { srv = pt->fsptr; } if (strlen(srv->get_title()) > 0) { survey = st->survey->get_title(); } else { survey = st->survey->get_full_name(); if (strlen(survey) == 0) survey = NULL; } this->m_table.insert_attribute("Survey", ths2txt(survey, layout->lang).c_str()); this->m_table.insert_attribute("Station", st != NULL ? st->name : NULL); if (this->format == TT_EXPTABLE_FMT_KML) { this->add_coordinates(pt->point->xt + pt->fscrapptr->proj->rshift_x, pt->point->yt + pt->fscrapptr->proj->rshift_y, pt->point->at); } if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(pt->id)); } } } for(i = 0; i < nstat; i++) { st = &(dbp->db1d.station_vec[i]); if (((st->flags & TT_STATIONFLAG_CONT) != 0) && ((st->comment != NULL) || (!this->filter)) && (st->survey->is_selected())) { this->m_table.insert_object(NULL); this->m_table.insert_attribute("Comment",ths2txt(st->comment, layout->lang).c_str()); if (!thisnan(st->explored)) this->m_table.insert_attribute("Explored",st->explored); else this->m_table.insert_attribute("Explored",(const char *)NULL); if (strlen(st->survey->get_title()) > 0) { survey = st->survey->get_title(); } else { survey = st->survey->get_full_name(); if (strlen(survey) == 0) survey = NULL; } this->m_table.insert_attribute("Survey", ths2txt(survey, layout->lang).c_str()); this->m_table.insert_attribute("Station", st->name); if (this->format == TT_EXPTABLE_FMT_KML) { this->add_coordinates(st->x, st->y, st->z); } if (this->expattr) this->m_table.copy_attributes(this->db->db1d.m_station_attr.get_object(i+1)); } } } break; case TT_EXP_SURVEYLIST: // todo add survey data //title //explored length //id //approx. //surface //duplicate for(oi = this->db->object_list.begin(); oi != this->db->object_list.end(); oi++) { if (((*oi)->get_class_id() == TT_SURVEY_CMD) && (strlen((*oi)->name) > 0)) { srv = (thsurvey*)(*oi); if (srv->is_selected()) { this->m_table.insert_object(NULL); this->m_table.get_object()->m_tree_level = (size_t)(srv->level - 2); this->m_table.get_object()->m_tree_node_id = srv->get_reverse_full_name(); this->m_table.insert_attribute("Title", ths2txt((strlen(srv->title) > 0) ? srv->title : srv->name, layout->lang).c_str()); this->m_table.insert_attribute("Length",(long)(srv->stat.length + 0.5)); if (srv->stat.station_top != NULL) { tmpd = srv->stat.station_top->z - srv->stat.station_bottom->z; if (tmpd > srv->stat.length) tmpd = srv->stat.length; this->m_table.insert_attribute("Depth",(long)(tmpd + 0.5)); } else { this->m_table.insert_attribute("Depth",0.0); } this->m_table.insert_attribute("Explored", (long)(srv->stat.length_explored + 0.5)); this->m_table.insert_attribute("Approx.", (long)(srv->stat.length_approx + 0.5)); this->m_table.insert_attribute("Duplicate", (long)(srv->stat.length_duplicate + 0.5)); this->m_table.insert_attribute("Surface", (long)(srv->stat.length_surface + 0.5)); this->m_table.insert_attribute("Shots", (long)(srv->stat.num_shots)); this->m_table.insert_attribute("Stations", (long)(srv->stat.num_stations)); //this->m_table.insert_attribute("ID", srv->get_full_name()); if (this->expattr) this->m_table.copy_attributes(this->db->attr.get_object(srv->id)); } } } this->m_table.m_tree = true; break; } #ifdef THLINUX const char * title = basename( this->outpt ); #elif THMACOSX const char * title = "cave"; #else char title[_MAX_FNAME]; _splitpath(this->outpt, NULL, NULL, title, NULL); #endif switch (this->format) { case TT_EXPTABLE_FMT_TXT: this->m_table.export_txt(fname, this->encoding); break; case TT_EXPTABLE_FMT_HTML: this->m_table.export_html(fname, title, this->encoding); break; case TT_EXPTABLE_FMT_DBF: this->m_table.export_dbf(fname, this->encoding); break; case TT_EXPTABLE_FMT_KML: this->m_table.export_kml(fname, (this->export_mode == TT_EXP_CONTLIST) ? "Comment" : "Title", title); break; } #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } std::string * thexptable::get_tmp_string() { return &(* this->m_str_list.insert(this->m_str_list.end(),std::string(""))); } void thexptable::add_coordinates(double x, double y, double z, const char * xlabel, const char * ylabel, const char * zlabel) { double tx(thnan), ty(thnan), tz(thnan); if (!(thisnan(x) || thisnan(y) || thisnan(z))) { if (thcfg.outcs == TTCS_LOCAL) { tx = x; ty = y; tz = z; } else { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(this->cs)->params, x, y, z, tx, ty, tz); if (thcs_get_data(this->cs)->dms) { tx = tx / THPI * 180.0; ty = ty / THPI * 180.0; } } } if (xlabel != NULL) { if (strlen(xlabel) == 0) { xlabel = "X"; if (thcs_get_data(this->cs)->dms) { if (thcs_get_data(this->cs)->swap) xlabel = "Latitude"; else xlabel = "Longitude"; } } if (thisnan(tx)) this->m_table.insert_attribute(xlabel, ""); else { this->m_table.insert_attribute(xlabel, tx); if (thcs_get_data(this->cs)->dms) this->m_table.get_field(xlabel)->m_double_format = "%.8f"; } } if (ylabel != NULL) { if (strlen(ylabel) == 0) { ylabel = "Y"; if (thcs_get_data(this->cs)->dms) { if (thcs_get_data(this->cs)->swap) ylabel = "Longitude"; else ylabel = "Latitude"; } } if (thisnan(ty)) this->m_table.insert_attribute(ylabel, ""); else { this->m_table.insert_attribute(ylabel, ty); if (thcs_get_data(this->cs)->dms) this->m_table.get_field(ylabel)->m_double_format = "%.8f"; } } if (zlabel != NULL) { if (strlen(zlabel) == 0) { zlabel = "Altitude"; } if (thisnan(tz)) this->m_table.insert_attribute(zlabel, ""); else this->m_table.insert_attribute(zlabel, tz); } } therion-5.4.1/thexptable.h000066400000000000000000000066271307545355600155320ustar00rootroot00000000000000/** * @file thexptable.h * Export class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexptable_h #define thexptable_h #include "thexport.h" #include "thattr.h" #include #include /** * Model export options. */ enum { TT_EXPTABLE_OPT_UNKNOWN = 0, ///< Unknown option TT_EXPTABLE_OPT_FORMAT, ///< Output option. TT_EXPTABLE_OPT_ENCODING, ///< Output option. TT_EXPTABLE_OPT_ATTRIBUTES, ///< Output option. TT_EXPTABLE_OPT_LOCATION, TT_EXPTABLE_OPT_FILTER, TT_EXPTABLE_OPT_SURVEYS, }; /** * Options parsing table. */ static const thstok thtt_exptable_opt[] = { {"-attr", TT_EXPTABLE_OPT_ATTRIBUTES}, {"-attributes", TT_EXPTABLE_OPT_ATTRIBUTES}, {"-enc", TT_EXPTABLE_OPT_ENCODING}, {"-encoding", TT_EXPTABLE_OPT_ENCODING}, {"-filter", TT_EXPTABLE_OPT_FILTER}, {"-fmt", TT_EXPTABLE_OPT_FORMAT}, {"-format", TT_EXPTABLE_OPT_FORMAT}, {"-location", TT_EXPTABLE_OPT_LOCATION}, {"-surveys", TT_EXPTABLE_OPT_SURVEYS}, {NULL, TT_EXPTABLE_OPT_UNKNOWN} }; /** * Model export formats. */ enum { TT_EXPTABLE_FMT_UNKNOWN = 0, ///< Unknown option TT_EXPTABLE_FMT_DBF, TT_EXPTABLE_FMT_TXT, TT_EXPTABLE_FMT_HTML, TT_EXPTABLE_FMT_KML, }; /** * Format parsing table. */ static const thstok thtt_exptable_fmt[] = { {"dbf", TT_EXPTABLE_FMT_DBF}, {"html", TT_EXPTABLE_FMT_HTML}, {"kml", TT_EXPTABLE_FMT_KML}, {"text", TT_EXPTABLE_FMT_TXT}, {"txt", TT_EXPTABLE_FMT_TXT}, {NULL, TT_EXPTABLE_FMT_UNKNOWN} }; /** * Main export class. */ class thexptable : public thexport { public: bool expattr, exploc, filter, surveys; ///< Whether to export user defined attributes. int format, ///< Output format. encoding; thattr m_table; std::list m_str_list; thexptable(); ///< Default constructor. /** * Parse model export options. */ virtual void parse_options(int & argx, int nargs, char ** args); /** * Dump object into file. */ virtual void dump_body(FILE * xf); /** * Dump object into file. */ virtual void dump_header(FILE * xf); /** * Make export. */ virtual void process_db(class thdatabase * dbp); /** * Export entraces from survey. */ void export_survey_entraces(class thsurvey * survey); /** * Return string for temporary use. */ std::string * get_tmp_string(); /** * Add coordinates to table. */ void add_coordinates(double x, double y, double z, const char * xlabel = "", const char * ylabel = "", const char * zlabel = ""); }; #endif therion-5.4.1/thexpuni.cxx000066400000000000000000000717111307545355600156050ustar00rootroot00000000000000/** * @file thexpuni.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexpmap.h" #include "thexporter.h" #include "thexception.h" #include "thdatabase.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "thlayout.h" #include "thmap.h" #include "thsketch.h" #include "thconfig.h" #include #include "thtmpdir.h" #include "thcsdata.h" #include "thdb3d.h" #ifdef THMSVC #define hypot _hypot #define snprintf _snprintf #define strcasecmp _stricmp #endif #include "thchenc.h" #include "thdb1d.h" #include "thinit.h" #include "thlogfile.h" #include "thcmdline.h" #include "thsurvey.h" #include "thchenc.h" #include #include "thmapstat.h" #include "thsurface.h" #include #include "loch/lxMath.h" #include "extern/shapefil.h" #include "thexpmodel.h" #include #include #include #include #include "thexpuni.h" #include "thproj.h" #include "thcs.h" #include "thtexfonts.h" #include "thlang.h" static const char * DXFpre = " 0\nSECTION\n 2\nHEADER\n 9\n$ACADVER\n 1\nAC1014\n 9\n$ACADMAINTVER\n" " 70\n 0\n 9\n$DWGCODEPAGE\n 3\nANSI_1252\n 9\n$INSBASE\n" " 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n 10\n%.3f\n 20\n" "%.3f\n 30\n0.0\n 9\n$EXTMAX\n 10\n%.3f\n 20\n%.3f\n" " 30\n0.0\n 9\n$ORTHOMODE\n 70\n 1\n 9\n$REGENMODE\n" " 70\n 1\n 9\n$FILLMODE\n 70\n 1\n 9\n$QTEXTMODE\n 70\n" " 0\n 9\n$MIRRTEXT\n 70\n 1\n 9\n$DRAGMODE\n 70\n 2\n" " 9\n$LTSCALE\n 40\n1.0\n 9\n$OSMODE\n 70\n 0\n 9\n$ATTMODE\n" " 70\n 1\n 9\n$TEXTSIZE\n 40\n2.5\n 9\n$TRACEWID\n 40\n1.0\n" " 9\n$TEXTSTYLE\n 7\nSTANDARD\n 9\n$CLAYER\n 8\n0\n 9\n$CELTYPE\n" " 6\nBYLAYER\n 9\n$CECOLOR\n 62\n 256\n 9\n$CELTSCALE\n 40\n" "1.0\n 9\n$DELOBJ\n 70\n 1\n 9\n$DISPSILH\n 70\n 0\n" " 9\n$DIMSCALE\n 40\n1.0\n 9\n$DIMASZ\n 40\n2.5\n 9\n$DIMEXO\n" " 40\n0.625\n 9\n$DIMDLI\n 40\n3.75\n 9\n$DIMRND\n 40\n0.0\n" " 9\n$DIMDLE\n 40\n0.0\n 9\n$DIMEXE\n 40\n1.25\n 9\n$DIMTP\n" " 40\n0.0\n 9\n$DIMTM\n 40\n0.0\n 9\n$DIMTXT\n 40\n2.5\n 9\n" "$DIMCEN\n 40\n2.5\n 9\n$DIMTSZ\n 40\n0.0\n 9\n$DIMTOL\n 70\n" " 0\n 9\n$DIMLIM\n 70\n 0\n 9\n$DIMTIH\n 70\n 0\n" " 9\n$DIMTOH\n 70\n 0\n 9\n$DIMSE1\n 70\n 0\n 9\n$DIMSE2\n" " 70\n 0\n 9\n$DIMTAD\n 70\n 1\n 9\n$DIMZIN\n 70\n 8\n" " 9\n$DIMBLK\n 1\n\n 9\n$DIMASO\n 70\n 1\n 9\n$DIMSHO\n" " 70\n 1\n 9\n$DIMPOST\n 1\n\n 9\n$DIMAPOST\n 1\n\n 9\n" "$DIMALT\n 70\n 0\n 9\n$DIMALTD\n 70\n 4\n 9\n$DIMALTF\n" " 40\n0.0394\n 9\n$DIMLFAC\n 40\n1.0\n 9\n$DIMTOFL\n 70\n 1\n" " 9\n$DIMTVP\n 40\n0.0\n 9\n$DIMTIX\n 70\n 0\n 9\n$DIMSOXD\n" " 70\n 0\n 9\n$DIMSAH\n 70\n 0\n 9\n$DIMBLK1\n 1\n\n" " 9\n$DIMBLK2\n 1\n\n 9\n$DIMSTYLE\n 2\nSTANDARD\n 9\n$DIMCLRD\n" " 70\n 0\n 9\n$DIMCLRE\n 70\n 0\n 9\n$DIMCLRT\n 70\n" " 0\n 9\n$DIMTFAC\n 40\n1.0\n 9\n$DIMGAP\n 40\n0.625\n 9\n" "$DIMJUST\n 70\n 0\n 9\n$DIMSD1\n 70\n 0\n 9\n$DIMSD2\n" " 70\n 0\n 9\n$DIMTOLJ\n 70\n 1\n 9\n$DIMTZIN\n 70\n" " 0\n 9\n$DIMALTZ\n 70\n 0\n 9\n$DIMALTTZ\n 70\n 0\n" " 9\n$DIMFIT\n 70\n 3\n 9\n$DIMUPT\n 70\n 0\n 9\n$DIMUNIT\n" " 70\n 8\n 9\n$DIMDEC\n 70\n 4\n 9\n$DIMTDEC\n 70\n 4\n" " 9\n$DIMALTU\n 70\n 8\n 9\n$DIMALTTD\n 70\n 4\n 9\n" "$DIMTXSTY\n 7\nSTANDARD\n 9\n$DIMAUNIT\n 70\n 0\n 9\n$LUNITS\n" " 70\n 2\n 9\n$LUPREC\n 70\n 4\n 9\n$SKETCHINC\n 40\n" "1.0\n 9\n$FILLETRAD\n 40\n10.0\n 9\n$AUNITS\n 70\n 0\n 9\n" "$AUPREC\n 70\n 0\n 9\n$MENU\n 1\n.\n 9\n$ELEVATION\n 40\n" "0.0\n 9\n$PELEVATION\n 40\n0.0\n 9\n$THICKNESS\n 40\n0.0\n 9\n" "$LIMCHECK\n 70\n 0\n 9\n$BLIPMODE\n 70\n 0\n 9\n$CHAMFERA\n" " 40\n10.0\n 9\n$CHAMFERB\n 40\n10.0\n 9\n$CHAMFERC\n 40\n20.0\n" " 9\n$CHAMFERD\n 40\n0.0\n 9\n$SKPOLY\n 70\n 0\n 9\n$TDCREATE\n" " 40\n2454180.933710197\n 9\n$TDUPDATE\n 40\n2454180.933710197\n" " 9\n$TDINDWG\n 40\n0.0000000000\n 9\n$TDUSRTIMER\n 40\n0.0000000000\n" " 9\n$USRTIMER\n 70\n 1\n 9\n$ANGBASE\n 50\n0.0\n 9\n$ANGDIR\n" " 70\n 0\n 9\n$PDMODE\n 70\n 0\n 9\n$PDSIZE\n 40\n0.0\n" " 9\n$PLINEWID\n 40\n0.0\n 9\n$COORDS\n 70\n 1\n 9\n$SPLFRAME\n" " 70\n 0\n 9\n$SPLINETYPE\n 70\n 6\n 9\n$SPLINESEGS\n" " 70\n 8\n 9\n$ATTDIA\n 70\n 0\n 9\n$ATTREQ\n 70\n 1\n" " 9\n$HANDLING\n 70\n 1\n 9\n$HANDSEED\n 5\n3A\n 9\n$SURFTAB1\n" " 70\n 6\n 9\n$SURFTAB2\n 70\n 6\n 9\n$SURFTYPE\n 70\n" " 6\n 9\n$SURFU\n 70\n 6\n 9\n$SURFV\n 70\n 6\n 9\n" "$UCSNAME\n 2\n\n 9\n$UCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n" " 9\n$UCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSYDIR\n 10\n" "0.0\n 20\n1.0\n 30\n0.0\n 9\n$PUCSNAME\n 2\n\n 9\n$PUCSORG\n" " 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSXDIR\n 10\n1.0\n 20\n" "0.0\n 30\n0.0\n 9\n$PUCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n" " 9\n$USERI1\n 70\n 0\n 9\n$USERI2\n 70\n 0\n 9\n$USERI3\n" " 70\n 0\n 9\n$USERI4\n 70\n 0\n 9\n$USERI5\n 70\n 0\n" " 9\n$USERR1\n 40\n0.0\n 9\n$USERR2\n 40\n0.0\n 9\n$USERR3\n" " 40\n0.0\n 9\n$USERR4\n 40\n0.0\n 9\n$USERR5\n 40\n0.0\n 9\n" "$WORLDVIEW\n 70\n 1\n 9\n$SHADEDGE\n 70\n 3\n 9\n$SHADEDIF\n" " 70\n 70\n 9\n$TILEMODE\n 70\n 1\n 9\n$MAXACTVP\n 70\n" " 48\n 9\n$PINSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PLIMCHECK\n" " 70\n 0\n 9\n$PEXTMIN\n 10\n1.000000E+20\n 20\n1.000000E+20\n" " 30\n1.000000E+20\n 9\n$PEXTMAX\n 10\n-1.000000E+20\n 20\n-1.000000E+20\n" " 30\n-1.000000E+20\n 9\n$PLIMMIN\n 10\n0.0\n 20\n0.0\n 9\n$PLIMMAX\n" " 10\n420.0\n 20\n297.0\n 9\n$UNITMODE\n 70\n 0\n 9\n$VISRETAIN\n" " 70\n 1\n 9\n$PLINEGEN\n 70\n 0\n 9\n$PSLTSCALE\n 70\n" " 1\n 9\n$TREEDEPTH\n 70\n 3020\n 9\n$PICKSTYLE\n 70\n 1\n" " 9\n$CMLSTYLE\n 2\nSTANDARD\n 9\n$CMLJUST\n 70\n 0\n 9\n" "$CMLSCALE\n 40\n20.0\n 9\n$PROXYGRAPHICS\n 70\n 1\n 9\n" "$MEASUREMENT\n 70\n 1\n 0\nENDSEC\n 0\nSECTION\n 2\nCLASSES\n" " 0\nCLASS\n 1\nLWPOLYLINE\n 2\nAcDbPolyline\n 3\n\"AutoCAD\"\n" " 90\n 0\n280\n 0\n281\n 1\n 0\nCLASS\n 1\nDICTIONARYVAR\n" " 2\nAcDbDictionaryVar\n 3\n\"AutoCAD\"\n 90\n 0\n280\n" " 0\n281\n 0\n 0\nCLASS\n 1\nHATCH\n 2\nAcDbHatch\n" " 3\n\"ACAD_SEDONA\"\n 90\n 0\n280\n 0\n281\n 1\n" " 0\nENDSEC\n 0\nSECTION\n 2\nTABLES\n 0\nTABLE\n 2\nVPORT\n" " 5\n8\n100\nAcDbSymbolTable\n 70\n 5\n 0\nVPORT\n 5\n39\n" "100\nAcDbSymbolTableRecord\n100\nAcDbViewportTableRecord\n 2\n" "*ACTIVE\n 70\n 0\n 10\n0.0\n 20\n0.0\n 11\n1.0\n 21\n1.0\n" " 12\n298.941176\n 22\n148.5\n 13\n0.0\n 23\n0.0\n 14\n10.0\n 24\n" "10.0\n 15\n10.0\n 25\n10.0\n 16\n0.0\n 26\n0.0\n 36\n1.0\n 17\n" "0.0\n 27\n0.0\n 37\n0.0\n 40\n297.0\n 41\n2.013072\n 42\n50.0\n" " 43\n0.0\n 44\n0.0\n 50\n0.0\n 51\n0.0\n 71\n 0\n 72\n 100\n" " 73\n 1\n 74\n 1\n 75\n 0\n 76\n 0\n 77\n 0\n" " 78\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nLTYPE\n 5\n5\n100\n" "AcDbSymbolTable\n 70\n 1\n 0\nLTYPE\n 5\n12\n100\nAcDbSymbolTableRecord\n" "100\nAcDbLinetypeTableRecord\n 2\nBYBLOCK\n 70\n 0\n 3\n" "\n 72\n 65\n 73\n 0\n 40\n0.0\n 0\nLTYPE\n 5\n13\n100\n" "AcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nBYLAYER\n" " 70\n 0\n 3\n\n 72\n 65\n 73\n 0\n 40\n0.0\n 0\n" "LTYPE\n 5\n14\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n" " 2\nCONTINUOUS\n 70\n 0\n 3\nSolid line\n 72\n 65\n 73\n" " 0\n 40\n0.0\n 0\nENDTAB\n 0\nTABLE\n 2\nLAYER\n 5\n2\n" "100\nAcDbSymbolTable\n 70\n 1\n 0\nLAYER\n 5\nE\n100\nAcDbSymbolTableRecord\n" "100\nAcDbLayerTableRecord\n 2\n0\n 70\n 0\n 62\n 7\n" " 6\nCONTINUOUS\n 0\nENDTAB\n 0\nTABLE\n 2\nSTYLE\n 5\n3\n" "100\nAcDbSymbolTable\n 70\n 1\n 0\nSTYLE\n 5\nF\n100\nAcDbSymbolTableRecord\n" "100\nAcDbTextStyleTableRecord\n 2\nSTANDARD\n 70\n 0\n 40\n" "0.0\n 41\n1.0\n 50\n0.0\n 71\n 0\n 42\n2.5\n 3\ntxt\n 4\n" "\n 0\nENDTAB\n 0\nTABLE\n 2\nVIEW\n 5\n6\n100\nAcDbSymbolTable\n" " 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nUCS\n 5\n7\n100\n" "AcDbSymbolTable\n 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nAPPID\n" " 5\n9\n100\nAcDbSymbolTable\n 70\n 1\n 0\nAPPID\n 5\n10\n" "100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\n" "ACAD\n 70\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nDIMSTYLE\n 5\n" "A\n100\nAcDbSymbolTable\n 70\n 1\n 0\nDIMSTYLE\n105\n1D\n" "100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\n" "STANDARD\n 70\n 0\n 3\n\n 4\n\n 5\n\n 6\n\n 7\n\n 40\n" "1.0\n 41\n0.18\n 42\n0.0625\n 43\n0.38\n 44\n0.18\n 45\n0.0\n" " 46\n0.0\n 47\n0.0\n 48\n0.0\n140\n0.18\n141\n0.09\n142\n0.0\n" "143\n25.4\n144\n1.0\n145\n0.0\n146\n1.0\n147\n0.09\n 71\n 0\n" " 72\n 0\n 73\n 1\n 74\n 1\n 75\n 0\n 76\n 0\n" " 77\n 0\n 78\n 0\n170\n 0\n171\n 2\n172\n 0\n" "173\n 0\n174\n 0\n175\n 0\n176\n 0\n177\n 0\n" "178\n 0\n270\n 2\n271\n 4\n272\n 4\n273\n 2\n" "274\n 2\n340\nF\n275\n 0\n280\n 0\n281\n 0\n282\n" " 0\n283\n 1\n284\n 0\n285\n 0\n286\n 0\n287\n" " 3\n288\n 0\n 0\nENDTAB\n 0\nTABLE\n 2\nBLOCK_RECORD\n" " 5\n1\n100\nAcDbSymbolTable\n 70\n 0\n 0\nBLOCK_RECORD\n" " 5\n18\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n" " 2\n*MODEL_SPACE\n 0\nBLOCK_RECORD\n 5\n15\n100\nAcDbSymbolTableRecord\n" "100\nAcDbBlockTableRecord\n 2\n*PAPER_SPACE\n 0\nENDTAB\n 0\n" "ENDSEC\n 0\nSECTION\n 2\nBLOCKS\n 0\nBLOCK\n 5\n19\n100\n" "AcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n*MODEL_SPACE\n 70\n" " 0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*MODEL_SPACE\n 1\n" "\n 0\nENDBLK\n 5\n1A\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n" " 0\nBLOCK\n 5\n16\n100\nAcDbEntity\n 67\n 1\n 8\n0\n100\n" "AcDbBlockBegin\n 2\n*PAPER_SPACE\n 70\n 0\n 10\n0.0\n 20\n" "0.0\n 30\n0.0\n 3\n*PAPER_SPACE\n 1\n\n 0\nENDBLK\n 5\n17\n" "100\nAcDbEntity\n 67\n 1\n 8\n0\n100\nAcDbBlockEnd\n 0\n" "ENDSEC\n 0\nSECTION\n 2\nENTITIES\n"; static const char * DXFpost = " 0\nENDSEC\n 0\nSECTION\n" " 2\nOBJECTS\n 0\nDICTIONARY\n 5\nC\n100\nAcDbDictionary\n 3\n" "ACAD_GROUP\n350\nD\n 3\nACAD_MLINESTYLE\n350\n1B\n 3\nACDBVARIABLEDICTIONARY\n" "350\n32\n 0\nDICTIONARY\n 5\nD\n102\n{ACAD_REACTORS\n330\nC\n" "102\n}\n100\nAcDbDictionary\n 0\nDICTIONARY\n 5\n1B\n102\n{ACAD_REACTORS\n" "330\nC\n102\n}\n100\nAcDbDictionary\n 3\nSTANDARD\n350\n1C\n" " 0\nDICTIONARY\n 5\n32\n102\n{ACAD_REACTORS\n330\nC\n102\n}\n" "100\nAcDbDictionary\n 3\nSORTENTS\n350\n33\n 0\nMLINESTYLE\n" " 5\n1C\n102\n{ACAD_REACTORS\n330\n1B\n102\n}\n100\nAcDbMlineStyle\n" " 2\nSTANDARD\n 70\n 0\n 3\n\n 62\n 256\n 51\n90.0\n 52\n" "90.0\n 71\n 2\n 49\n0.5\n 62\n 256\n 6\nBYLAYER\n 49\n" "-0.5\n 62\n 256\n 6\nBYLAYER\n 0\nDICTIONARYVAR\n 5\n33\n" "102\n{ACAD_REACTORS\n330\n32\n102\n}\n100\nDictionaryVariables\n" "280\n 0\n 1\n96\n 0\nENDSEC\n 0\nEOF\n\n"; thexpuni::thexpuni() { this->resol = 0.304; this->clear(); } void thexpuni::clear() { this->m_cpart = NULL; this->m_part_list.clear(); } void thexpuni::polygon_start_ring(bool outer) { this->m_ring_list.clear(); thexpuni_part p; p.m_outer = outer; this->m_cpart = &(*this->m_part_list.insert(this->m_part_list.end(), p)); } // insert points from bezier curve void insert_line_segment(double resolution, thline * ln, bool reverse, std::list & lst, long startp = 0, long endp = -1) { thdb2dlp * cpt, * prevpt; thdb2dpt * cp1, * cp2; double t, tt, ttt, t_, tt_, ttt_, nx, ny, nz, na, px, py; long pnum; prevpt = NULL; if (reverse) cpt = ln->last_point; else cpt = ln->first_point; pnum = 0; while (cpt != NULL) { // insert bezier curve if (pnum == startp) prevpt = NULL; if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) { if (prevpt != NULL) { px = prevpt->point->xt; py = prevpt->point->yt; if (reverse) { cp1 = prevpt->cp2; cp2 = prevpt->cp1; } else { cp1 = cpt->cp1; cp2 = cpt->cp2; } if ((cp1 != NULL) && (cp2 == NULL)) cp2 = cp1; if ((cp1 == NULL) && (cp2 != NULL)) cp1 = cp2; if ((cp1 != NULL) && (cp2 != NULL)) { for(t = 0.05; t < 1.0; t += 0.05) { tt = t * t; ttt = tt * t; t_ = 1.0 - t; tt_ = t_ * t_; ttt_ = tt_ * t_; nx = ttt_ * prevpt->point->xt + 3.0 * t * tt_ * cp1->xt + 3.0 * tt * t_ * cp2->xt + ttt * cpt->point->xt; ny = ttt_ * prevpt->point->yt + 3.0 * t * tt_ * cp1->yt + 3.0 * tt * t_ * cp2->yt + ttt * cpt->point->yt; nz = t_ * cpt->point->zt + t * prevpt->point->zt; na = t_ * cpt->point->at + t * prevpt->point->at; // resolution 0.1 m if (hypot(nx - px, ny - py) > resolution) { lst.push_back(thexpuni_data(nx + ln->fscrapptr->proj->rshift_x, ny + ln->fscrapptr->proj->rshift_y, nz + ln->fscrapptr->proj->rshift_z, na)); px = nx; py = ny; } } } } } // insert point it self if ((pnum >= startp) && ((endp < 0) || (pnum <= endp))) lst.push_back(thexpuni_data(cpt->point->xt + ln->fscrapptr->proj->rshift_x, cpt->point->yt + ln->fscrapptr->proj->rshift_y, cpt->point->zt + ln->fscrapptr->proj->rshift_z, cpt->point->at)); // next point prevpt = cpt; if (reverse) cpt = cpt->prevlp; else cpt = cpt->nextlp; pnum++; } } void thexpuni::polygon_insert_line(thline * ln, bool reverse) { insert_line_segment(this->resol, ln, reverse, this->m_ring_list); } void thexpuni::polygon_close_ring() { // check polygon orientation double area; std::list::iterator i, iprev; if (this->m_ring_list.size() < 2) return; iprev = this->m_ring_list.end(); iprev--; area = 0.0; for (i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { area += iprev->m_x * i->m_y - iprev->m_y * i->m_x; iprev = i; } area *= 0.5; bool reverse = ((area > 0) && (this->m_cpart->m_outer)) || ((area < 0) && (!this->m_cpart->m_outer)); // according to orientation, insert points to point list if (reverse) { for(i = this->m_ring_list.end(); i != this->m_ring_list.begin(); ) { i--; this->m_cpart->m_point_list.push_back(*i); } } else { for(i = this->m_ring_list.begin(); i != this->m_ring_list.end(); i++) { this->m_cpart->m_point_list.push_back(*i); } } } void thexpuni::parse_scrap(thscrap * scrap) { thbuffer stnbuff; // export scrap outline this->clear(); thscraplo * lo = scrap->get_outline(), * lo2; while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; this->polygon_start_ring(lo->line->outline == TT_LINE_OUTLINE_OUT); this->m_cpart->m_lo = lo; while (lo2 != NULL) { this->polygon_insert_line(lo2->line, lo2->mode == TT_OUTLINE_REVERSED); lo2 = lo2->next_line; } this->polygon_close_ring(); } lo = lo->next_outline; } } void thexpuni::parse_line(thline * line) { long sp = 0, cp = 1; int csubtype; this->clear(); thdb2dlp * lp = line->first_point, * slp; if (lp == NULL) return; csubtype = lp->subtype; slp = lp; lp = lp->nextlp; while (lp != NULL) { if ((lp->subtype != csubtype) || (lp->nextlp == NULL)) { thexpuni_part p; this->m_cpart = &(*this->m_part_list.insert(this->m_part_list.end(), p)); this->m_cpart->m_lp = slp; insert_line_segment(this->resol, line, false, this->m_cpart->m_point_list, sp, cp); csubtype = lp->subtype; sp = cp; slp = lp; } lp = lp->nextlp; cp++; } } void thexpmap::export_kml(class thdb2dxm * maps, class thdb2dprj * prj) { if (prj->type != TT_2DPROJ_PLAN) { thwarning(("unable to export KML from non plan projection")); return; } if (thcfg.outcs == TTCS_LOCAL) { thwarning(("data not georeferenced -- unable to export KML file")); return; } if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.kml"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; thscrap * scrap; thexpuni xu; fprintf(out, "\n\n"); fprintf(out, "\n"); fprintf(out, "\n"); fprintf(out, "\n"); fprintf(out, " https://therion.speleo.sk/downloads/KmlIconMap.png \n"); // VG 250616: TODO change icons above, maybe upload to therion website after testing thsurvey * mainsrv = db->fsurveyptr; thdataobject * obj; for(obj = mainsrv->foptr; obj != NULL; obj = obj->nsptr) if (obj->get_class_id() == TT_SURVEY_CMD) { mainsrv = (thsurvey *) obj; break; } // Export cave name and description in the selected language std::string cavename = ths2txt((strlen(mainsrv->title) > 0) ? mainsrv->title : mainsrv->name, layout->lang); cavename = replace_all(cavename, "
", "-"); fprintf(out,"\n", cavename.c_str()); double cavedepth = 0; if (mainsrv->stat.station_top != NULL) { cavedepth = mainsrv->stat.station_top->z - mainsrv->stat.station_bottom->z; if (cavedepth > mainsrv->stat.length) cavedepth = mainsrv->stat.length; } layout->units.lang = layout->lang; fprintf(out,"%s %s %s
%s]]>
\n", thT("title cave length",layout->lang), layout->units.format_length(mainsrv->stat.length), layout->units.format_i18n_length_units(), thT("title cave depth",layout->lang), layout->units.format_length(cavedepth), layout->units.format_i18n_length_units(), ths2txt(this->layout->doc_comment, this->layout->lang).c_str()); // Export entrances if ((this->items & TT_EXPMODEL_ITEM_ENTRANCES) != 0) { double x, y, z; thdb1ds * station; size_t nstat = db->db1d.station_vec.size(), i; for(i = 0; i < nstat; i++) { station = &(db->db1d.station_vec[i]); if ((station->flags & TT_STATIONFLAG_ENTRANCE) != 0) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, station->x, station->y, station->z, x, y, z); fprintf(out, "\n"); fprintf(out, "#ThEntranceIcon"); fprintf(out, "\n", ths2txt(station->comment, layout->lang).c_str()); fprintf(out, " %.14f,%.14f,%.14f \n", x / THPI * 180.0, y / THPI * 180.0, z); fprintf(out, "\n"); } } } int cA, cR, cG, cB; #define checkc(c) if (c < 0) c = 0; if (c > 255) c = 255; while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { // Export each map as a placemark, with the map name and colour, if defined std::string mapname = ths2txt((strlen(cbm->bm->title) > 0) ? cbm->bm->title : cbm->bm->name, layout->lang); fprintf(out,"\n"); fprintf(out,"#ThMapStyle\n"); fprintf(out,"\n", mapname.c_str()); //if ((layout->color_crit == TT_LAYOUT_CCRIT_MAP) && (cmap->map->colour.defined)) { // cR = int (255.0 * cmap->map->colour.R + 0.5); // cG = int (255.0 * cmap->map->colour.G + 0.5); // cB = int (255.0 * cmap->map->colour.B + 0.5); //} else { cR = int (255.0 * this->layout->color_map_fg.R + 0.5); cG = int (255.0 * this->layout->color_map_fg.G + 0.5); cB = int (255.0 * this->layout->color_map_fg.B + 0.5); //} if (this->layout->transparency) { cA = int (255.0 * this->layout->opacity + 0.5); } else { cA = 255; } checkc(cA); checkc(cR); checkc(cG); checkc(cB); fprintf(out,"\n", cA,cB,cG,cR); fprintf(out,"\n"); while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; xu.parse_scrap(scrap); if (xu.m_part_list.size() > 0) { fprintf(out,"\n"); std::list::iterator it; std::list::iterator ip; double x,y,z; for(it = xu.m_part_list.begin(); it != xu.m_part_list.end(); it++) { if (it->m_outer) fprintf(out,"\n"); else fprintf(out,"\n"); fprintf(out,"\n\n"); for(ip = it->m_point_list.begin(); ip != it->m_point_list.end(); ip++) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, ip->m_x, ip->m_y, scrap->z, x, y, z); fprintf(out, "\t%.14f,%.14f,%.14f ", x / THPI * 180.0, y / THPI * 180.0, 0.0); } fprintf(out,"\n\n"); if (it->m_outer) fprintf(out,"\n"); else fprintf(out,"\n"); } fprintf(out,"\n"); } } cmi = cmi->prev_item; } fprintf(out,"\n\n"); } cbm = cbm->next_item; } cmap = cmap->next_item; } fprintf(out,"
\n"); fprintf(out,"
\n"); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmap::export_bbox(class thdb2dxm * maps, class thdb2dprj * prj) { if (prj->type != TT_2DPROJ_PLAN) { thwarning(("unable to export bounding box of non plan projection")); return; } if (thcfg.outcs == TTCS_LOCAL) { thwarning(("data not georeferenced -- unable to export bounding box file")); return; } if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.bbox"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; double cx, cy, cz; bool has_scrap = false; thscrap * scrap; thexpuni xu; lxVecLimits lim; while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; if (!thisnan(scrap->lxmin)) { thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmin + prj->rshift_x, scrap->lymin + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmin + prj->rshift_x, scrap->lymax + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmax + prj->rshift_x, scrap->lymin + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); thcs2cs(thcs_get_data(thcfg.outcs)->params, thcs_get_data(TTCS_LONG_LAT)->params, scrap->lxmax + prj->rshift_x, scrap->lymax + prj->rshift_y, scrap->z + prj->rshift_z, cx, cy, cz); lim.Add(cx / THPI * 180.0, cy / THPI * 180.0, cz); has_scrap = true; } } cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } if (has_scrap) { fprintf(out,"%.14f\n",lim.min.x); fprintf(out,"%.14f\n",lim.min.y); fprintf(out,"%.14f\n",lim.max.x); fprintf(out,"%.14f\n",lim.max.y); } fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } void thexpmap::export_dxf(class thdb2dxm * maps, class thdb2dprj * prj) { if (maps == NULL) { thwarning(("%s [%d] -- no selected projection data -- %s", this->src.name, this->src.line, this->projstr)) return; } FILE * out; const char * fnm = this->get_output("cave.dxf"); out = fopen(fnm, "w"); if (out == NULL) { thwarning(("can't open %s for output",fnm)) return; } #ifdef THDEBUG thprintf("\n\nwriting %s\n", fnm); #else thprintf("writing %s ... ", fnm); thtext_inline = true; #endif thdb2dxm * cmap = maps; thdb2dxs * cbm; thdb2dmi * cmi; thdb3dlim limits; thscrap * scrap; thexpuni xu; xu.resol = 0.1; fprintf(out,DXFpre,limits.minx, limits.miny, limits.maxx, limits.maxy); while (cmap != NULL) { cbm = cmap->first_bm; while (cbm != NULL) { cmi = cbm->bm->last_item; if (cbm->mode == TT_MAPITEM_NORMAL) { while (cmi != NULL) { if (cmi->type == TT_MAPITEM_NORMAL) { scrap = (thscrap*) cmi->object; xu.parse_scrap(scrap); if (xu.m_part_list.size() > 0) { double x(0.0), y(0.0), z(0.0), px(0.0), py(0.0); bool inside; std::list::iterator it; std::list::iterator ip; fprintf(out, " 0\nHATCH\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbHatch\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 210\n0.0\n 220\n0.0\n 230\n1.0\n 2\nSOLID\n 70\n1\n 71\n0\n"); fprintf(out, " 91\n%ld\n", (long) xu.m_part_list.size()); for(it = xu.m_part_list.begin(); it != xu.m_part_list.end(); it++) { fprintf(out, " 92\n0\n 93\n%ld\n", (long)it->m_point_list.size()); inside = false; for(ip = it->m_point_list.begin(); ip != it->m_point_list.end(); ip++) { x = ip->m_x; y = ip->m_y; z = scrap->z + scrap->proj->rshift_z; limits.update(x,y,z); if (inside) { fprintf(out, " 72\n1\n"); fprintf(out, " 10\n%.3f\n 20\n%.3f\n", px, py); fprintf(out, " 11\n%.3f\n 21\n%.3f\n", x, y); } inside = true; px = x; py = y; } if (inside) { ip = it->m_point_list.begin(); x = ip->m_x; y = ip->m_y; z = scrap->z + scrap->proj->rshift_z; fprintf(out, " 72\n1\n"); fprintf(out, " 10\n%.3f\n 20\n%.3f\n", px, py); fprintf(out, " 11\n%.3f\n 21\n%.3f\n", x, y); } fprintf(out, " 97\n0\n"); } fprintf(out, " 75\n0\n 76\n1\n 98\n1\n 10\n0.0\n 20\n0.0\n"); } } cmi = cmi->prev_item; } } cbm = cbm->next_item; } cmap = cmap->next_item; } fprintf(out,"%s", DXFpost); fclose(out); #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif } therion-5.4.1/thexpuni.h000066400000000000000000000035671307545355600152360ustar00rootroot00000000000000/** * @file thexpuni.h * Shapefile export classes. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thexpuni_h #define thexpuni_h #include #include "thscrap.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thattr.h" #include "thdb2d.h" struct thexpuni_data { double m_x, m_y, m_z, m_a; thexpuni_data(double x, double y, double z, double a) : m_x(x), m_y(y), m_z(z), m_a(a) {} }; struct thexpuni_part { bool m_outer; thdb2dlp * m_lp; thscraplo * m_lo; std::list m_point_list; thexpuni_part() : m_outer(true), m_lp(NULL), m_lo(NULL) {} }; // Universal module struct thexpuni { std::list m_part_list; double resol; thexpuni(); void clear(); thexpuni_part * m_cpart; std::list m_ring_list; void polygon_start_ring(bool outer); void polygon_insert_line(thline * ln, bool reverse); void polygon_close_ring(); void parse_line(thline * line); void parse_scrap(thscrap * scrap); }; #endif therion-5.4.1/thgeomag.cxx000066400000000000000000000133731307545355600155340ustar00rootroot00000000000000/** * @file thgeomag.cxx */ /* Copyright (C) 2006 Martin Budaj * * based on GPL-licensed code by * Copyright (C) 2000 Edward A Williams * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ // #include #include #include "thgeomagdata.h" #define max(a,b) (((a) > (b)) ? (a) : (b)) /*struct magfield_ { double X, Y, Z; }; magfield_ magfield;*/ #define nmax thgeomag_maxdeg #define nmaxl thgeomag_maxdeg #define pi 3.14159265358979 #define a 6378.137 #define b 6356.7523142 #define r_0 6371.2 double thgeomag(double lat, double lon, double h, double dat) { int n,m; static double P[nmax+1][nmax+1]; static double DP[nmax+1][nmax+1]; static double gnm[nmax+1][nmax+1]; static double hnm[nmax+1][nmax+1]; static double sm[nmax+1]; static double cm[nmax+1]; static double root[nmax+1]; static double roots[nmax+1][nmax+1][2]; double yearfrac,sr,r,theta,c,s,psi,fn,fn_0,B_r,B_theta,B_phi,X,Y; // Z double sinpsi, cospsi, inv_s; static int been_here = 0; double sinlat = sin(lat); double coslat = cos(lat); h = h / 1000; /* convert to geocentric */ sr = sqrt(a*a*coslat*coslat + b*b*sinlat*sinlat); /* sr is effective radius */ theta = atan2(coslat * (h*sr + a*a), sinlat * (h*sr + b*b)); /* theta is geocentric co-latitude */ r = h*h + 2.0*h * sr + (a*a*a*a - ( a*a*a*a - b*b*b*b ) * sinlat*sinlat ) / (a*a - (a*a - b*b) * sinlat*sinlat ); r = sqrt(r); /* r is geocentric radial distance */ c = cos(theta); s = sin(theta); /* protect against zero divide at geographic poles */ inv_s = 1.0 / (s + (s == 0.)*1.0e-8); /*zero out arrays */ for ( n = 0; n <= nmax; n++ ) { for ( m = 0; m <= n; m++ ) { P[n][m] = 0; DP[n][m] = 0; } } /* diagonal elements */ P[0][0] = 1; P[1][1] = s; DP[0][0] = 0; DP[1][1] = c; P[1][0] = c ; DP[1][0] = -s; /* these values will not change for subsequent function calls */ if( !been_here ) { for ( n = 2; n <= nmax; n++ ) { root[n] = sqrt((2.0*n-1) / (2.0*n)); } for ( m = 0; m <= nmax; m++ ) { double mm = m*m; for ( n = max(m + 1, 2); n <= nmax; n++ ) { roots[m][n][0] = sqrt((n-1)*(n-1) - mm); roots[m][n][1] = 1.0 / sqrt( n*n - mm); } } been_here = 1; } for ( n=2; n <= nmax; n++ ) { /* double root = sqrt((2.0*n-1) / (2.0*n)); */ P[n][n] = P[n-1][n-1] * s * root[n]; DP[n][n] = (DP[n-1][n-1] * s + P[n-1][n-1] * c) * root[n]; } /* lower triangle */ for ( m = 0; m <= nmax; m++ ) { /* double mm = m*m; */ for ( n = max(m + 1, 2); n <= nmax; n++ ) { /* double root1 = sqrt((n-1)*(n-1) - mm); */ /* double root2 = 1.0 / sqrt( n*n - mm); */ P[n][m] = (P[n-1][m] * c * (2.0*n-1) - P[n-2][m] * roots[m][n][0]) * roots[m][n][1]; DP[n][m] = ((DP[n-1][m] * c - P[n-1][m] * s) * (2.0*n-1) - DP[n-2][m] * roots[m][n][0]) * roots[m][n][1]; } } /* compute gnm, hnm at dat */ int mindex = int((dat - thgeomag_minyear) / thgeomag_step); if (mindex < 0) mindex = 0; if (mindex > thgeomag_maxmindex) mindex = thgeomag_maxmindex; yearfrac = dat - thgeomag_step*mindex - thgeomag_minyear; for (n=1;n<=nmaxl;n++) { for (m = 0;m<=nmaxl;m++) { if (mindex == thgeomag_maxmindex) { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac * thgeomag_GNMD[n][m]; hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac * thgeomag_HNMD[n][m]; } else { gnm[n][m] = thgeomag_GNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_GNM[mindex+1][n][m] - thgeomag_GNM[mindex][n][m]); hnm[n][m] = thgeomag_HNM[mindex][n][m] + yearfrac / thgeomag_step * (thgeomag_HNM[mindex+1][n][m] - thgeomag_HNM[mindex][n][m]); } } } /* compute sm (sin(m lon) and cm (cos(m lon)) */ for (m = 0;m<=nmaxl;m++) { sm[m] = sin(m * lon); cm[m] = cos(m * lon); } /* compute B fields */ B_r = 0.0; B_theta = 0.0; B_phi = 0.0; fn_0 = r_0/r; fn = fn_0 * fn_0; for ( n = 1; n <= nmaxl; n++ ) { double c1_n=0; double c2_n=0; double c3_n=0; for ( m = 0; m <= n; m++ ) { double tmp = (gnm[n][m] * cm[m] + hnm[n][m] * sm[m]); c1_n += tmp * P[n][m]; c2_n += tmp * DP[n][m]; c3_n += m * (gnm[n][m] * sm[m] - hnm[n][m] * cm[m]) * P[n][m]; } /* fn=pow(r_0/r,n+2.0); */ fn *= fn_0; B_r += (n + 1) * c1_n * fn; B_theta -= c2_n * fn; B_phi += c3_n * fn * inv_s; } /* Find geodetic field components: */ psi = theta - (pi / 2.0 - lat); sinpsi = sin(psi); cospsi = cos(psi); X = -B_theta * cospsi - B_r * sinpsi; Y = B_phi; /* Z = B_theta * sinpsi - B_r * cospsi; */ /* field[0]=B_r; field[1]=B_theta; field[2]=B_phi; field[3]=X; field[4]=Y; field[5]=Z;*/ /* output fields */ /* find variation in radians */ /* return zero variation at magnetic pole X=Y=0. */ /* E is positive */ /* magfield.X = X; magfield.Y = Y; magfield.Z = Z; */ return (X != 0. || Y != 0.) ? atan2(Y, X) * 180 / pi : (double) 0.; } therion-5.4.1/thgeomag.h000066400000000000000000000022631307545355600151550ustar00rootroot00000000000000/* * Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thgeomag_h #define thgeomag_h double thgeomag(double lat, double lon, double h, double dat); // lat, long in radians, // h = height above ellipsoid in metres, // dat decimal year // output declination in degrees #endif therion-5.4.1/thgeomagdata.h000066400000000000000000001166301307545355600160130ustar00rootroot00000000000000// generated by geomag/igrf2c.py #ifndef thgeomagdata_h #define thgeomagdata_h static const double thgeomag_GNM[24][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-31543, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-677, 2905, 924, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1022, -1469, 1256, 572, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {876, 628, 660, -361, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-184, 328, 264, 5, -86, -16, 0, 0, 0, 0, 0, 0, 0, 0, }, {63, 61, -11, -217, -58, 59, -90, 0, 0, 0, 0, 0, 0, 0, }, {70, -55, 0, 34, -41, -21, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -9, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, -1, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 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, 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, }, {-31464, -2298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-728, 2928, 1041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1037, -1494, 1239, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {880, 643, 653, -380, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-192, 328, 259, -1, -93, -26, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 60, -11, -221, -57, 57, -92, 0, 0, 0, 0, 0, 0, 0, }, {70, -54, 0, 33, -41, -20, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 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, 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, }, {-31354, -2297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-769, 2948, 1176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1058, -1524, 1223, 705, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {884, 660, 644, -400, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-201, 327, 253, -9, -102, -38, 0, 0, 0, 0, 0, 0, 0, 0, }, {62, 58, -11, -224, -54, 54, -95, 0, 0, 0, 0, 0, 0, 0, }, {71, -54, 1, 32, -40, -19, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 1, 2, -8, 5, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 2, 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, 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, }, {-31212, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-802, 2956, 1309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1084, -1559, 1212, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {887, 678, 631, -416, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-211, 327, 245, -16, -111, -51, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 57, -10, -228, -51, 49, -98, 0, 0, 0, 0, 0, 0, 0, }, {72, -54, 2, 31, -38, -18, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 8, -4, -9, 2, 3, -8, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 2, 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, 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, }, {-31060, -2317, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-839, 2959, 1407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1111, -1600, 1205, 839, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {889, 695, 616, -424, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-221, 326, 236, -23, -119, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 55, -10, -233, -46, 44, -101, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 2, 29, -37, -16, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 6, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 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, 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, }, {-30926, -2318, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-893, 2969, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1140, -1645, 1202, 881, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {891, 711, 601, -426, 217, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-230, 326, 226, -28, -125, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 54, -9, -238, -40, 39, -103, 0, 0, 0, 0, 0, 0, 0, }, {73, -54, 3, 27, -35, -14, 19, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 4, -7, 7, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -11, 12, 1, -2, 2, 0, -1, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 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, 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, }, {-30805, -2316, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-951, 2980, 1517, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1172, -1692, 1205, 907, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {896, 727, 584, -422, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-237, 327, 218, -32, -131, -74, 0, 0, 0, 0, 0, 0, 0, 0, }, {60, 53, -9, -242, -32, 32, -104, 0, 0, 0, 0, 0, 0, 0, }, {74, -54, 4, 25, -34, -12, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 2, 5, -6, 8, 8, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 12, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 1, 3, 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, 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, }, {-30715, -2306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1018, 2984, 1550, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1206, -1740, 1215, 918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {903, 744, 565, -415, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 329, 211, -33, -136, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 53, -8, -246, -25, 25, -106, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 23, -33, -11, 18, 6, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -9, 1, 6, -6, 8, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 0, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 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, 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, }, {-30654, -2292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1106, 2981, 1566, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1240, -1790, 1232, 916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {914, 762, 550, -405, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-241, 334, 208, -33, -141, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {57, 54, -7, -249, -18, 18, -107, 0, 0, 0, 0, 0, 0, 0, }, {74, -53, 4, 20, -31, -9, 17, 5, 0, 0, 0, 0, 0, 0, }, {11, 7, -3, -10, 1, 6, -5, 9, 7, 0, 0, 0, 0, 0, }, {8, 10, 1, -12, 11, 1, -2, 3, 1, -2, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 6, 4, 0, 2, 3, 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, 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, }, {-30594, -2285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1244, 2990, 1578, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1282, -1834, 1255, 913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {944, 776, 544, -421, 304, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-253, 346, 194, -20, -142, -82, 0, 0, 0, 0, 0, 0, 0, 0, }, {59, 57, 6, -246, -25, 21, -104, 0, 0, 0, 0, 0, 0, 0, }, {70, -40, 0, 0, -29, -10, 15, 29, 0, 0, 0, 0, 0, 0, }, {13, 7, -8, -5, 9, 7, -10, 7, 2, 0, 0, 0, 0, 0, }, {5, -21, 1, -11, 3, 16, -3, -4, -3, -4, 0, 0, 0, 0, }, {-3, 11, 1, 2, -5, -1, 8, -1, -3, 5, -2, 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, 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, }, {-30554, -2250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1341, 2998, 1576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -1889, 1274, 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {954, 792, 528, -408, 303, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-240, 349, 211, -20, -147, -76, 0, 0, 0, 0, 0, 0, 0, 0, }, {54, 57, 4, -247, -16, 12, -105, 0, 0, 0, 0, 0, 0, 0, }, {65, -55, 2, 1, -40, -7, 5, 19, 0, 0, 0, 0, 0, 0, }, {22, 15, -4, -1, 11, 15, -13, 5, -1, 0, 0, 0, 0, 0, }, {3, -7, -1, -25, 10, 5, -5, -2, 3, 8, 0, 0, 0, 0, }, {-8, 4, -1, 13, -4, 4, 12, 3, 2, 10, 3, 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, 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, }, {-30500, -2215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1440, 3003, 1581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1944, 1288, 882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {958, 796, 510, -397, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-229, 360, 230, -23, -152, -69, 0, 0, 0, 0, 0, 0, 0, 0, }, {47, 57, 3, -247, -8, 7, -107, 0, 0, 0, 0, 0, 0, 0, }, {65, -56, 2, 10, -32, -11, 9, 18, 0, 0, 0, 0, 0, 0, }, {11, 9, -6, -14, 6, 10, -7, 6, 9, 0, 0, 0, 0, 0, }, {4, 9, -4, -5, 2, 4, 1, 2, 2, 5, 0, 0, 0, 0, }, {-3, -5, -1, 2, -3, 7, 4, -2, 6, -2, 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, 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, }, {-30421, -2169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1555, 3002, 1590, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1302, -1992, 1289, 878, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 800, 504, -394, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-222, 362, 242, -26, -156, -63, 0, 0, 0, 0, 0, 0, 0, 0, }, {46, 58, 1, -237, -1, -2, -113, 0, 0, 0, 0, 0, 0, 0, }, {67, -56, 5, 15, -32, -7, 17, 8, 0, 0, 0, 0, 0, 0, }, {15, 6, -4, -11, 2, 10, -5, 10, 8, 0, 0, 0, 0, 0, }, {4, 6, 0, -9, 1, 4, -1, -2, 3, -1, 0, 0, 0, 0, }, {1, -3, 4, 0, -1, 4, 6, 1, -1, 2, 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, 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, }, {-30334, -2119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1662, 2997, 1594, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1297, -2038, 1292, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {957, 804, 479, -390, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-219, 358, 254, -31, -157, -62, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 61, 8, -228, 4, 1, -111, 0, 0, 0, 0, 0, 0, 0, }, {75, -57, 4, 13, -26, -6, 13, 1, 0, 0, 0, 0, 0, 0, }, {13, 5, -4, -14, 0, 8, -1, 11, 4, 0, 0, 0, 0, 0, }, {8, 10, 2, -13, 10, -1, -1, 5, 1, -2, 0, 0, 0, 0, }, {-2, -3, 2, -5, -2, 4, 4, 0, 2, 2, 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, 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, }, {-30220, -2068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1781, 3000, 1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1287, -2091, 1278, 838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {952, 800, 461, -395, 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-216, 359, 262, -42, -160, -56, 0, 0, 0, 0, 0, 0, 0, 0, }, {43, 64, 15, -212, 2, 3, -112, 0, 0, 0, 0, 0, 0, 0, }, {72, -57, 1, 14, -22, -2, 13, -2, 0, 0, 0, 0, 0, 0, }, {14, 6, -2, -13, -3, 5, 0, 11, 3, 0, 0, 0, 0, 0, }, {8, 10, 2, -12, 10, -1, 0, 3, 1, -1, 0, 0, 0, 0, }, {-3, -3, 2, -5, -1, 6, 4, 1, 0, 3, -1, 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, 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, }, {-30100, -2013, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1902, 3010, 1632, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1276, -2144, 1260, 830, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {946, 791, 438, -405, 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 356, 264, -59, -159, -49, 0, 0, 0, 0, 0, 0, 0, 0, }, {45, 66, 28, -198, 1, 6, -111, 0, 0, 0, 0, 0, 0, 0, }, {71, -56, 1, 16, -14, 0, 12, -5, 0, 0, 0, 0, 0, 0, }, {14, 6, -1, -12, -8, 4, 0, 10, 1, 0, 0, 0, 0, 0, }, {7, 10, 2, -12, 10, -1, -1, 4, 1, -2, 0, 0, 0, 0, }, {-3, -3, 2, -5, -2, 5, 4, 1, 0, 3, -1, 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, 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, }, {-29992, -1956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-1997, 3027, 1663, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1281, -2180, 1251, 833, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {938, 782, 398, -419, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218, 357, 261, -74, -162, -48, 0, 0, 0, 0, 0, 0, 0, 0, }, {48, 66, 42, -192, 4, 14, -108, 0, 0, 0, 0, 0, 0, 0, }, {72, -59, 2, 21, -12, 1, 11, -2, 0, 0, 0, 0, 0, 0, }, {18, 6, 0, -11, -7, 4, 3, 6, -1, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 2, -5, 0, 0, 0, 0, }, {-4, -4, 2, -5, -2, 5, 3, 1, 2, 3, 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, 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, }, {-29873, -1905, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2072, 3044, 1687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1296, -2208, 1247, 829, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {936, 780, 361, -424, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 355, 253, -93, -164, -46, 0, 0, 0, 0, 0, 0, 0, 0, }, {53, 65, 51, -185, 4, 16, -102, 0, 0, 0, 0, 0, 0, 0, }, {74, -62, 3, 24, -6, 4, 10, 0, 0, 0, 0, 0, 0, 0, }, {21, 6, 0, -11, -9, 4, 4, 4, -4, 0, 0, 0, 0, 0, }, {5, 10, 1, -12, 9, -3, -1, 7, 1, -5, 0, 0, 0, 0, }, {-4, -4, 3, -5, -2, 5, 3, 1, 2, 3, 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, 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, }, {-29775, -1848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2131, 3059, 1686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1314, -2239, 1248, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {939, 780, 325, -423, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 353, 245, -109, -165, -36, 0, 0, 0, 0, 0, 0, 0, 0, }, {61, 65, 59, -178, 3, 18, -96, 0, 0, 0, 0, 0, 0, 0, }, {77, -64, 2, 26, -1, 5, 9, 0, 0, 0, 0, 0, 0, 0, }, {23, 5, -1, -10, -12, 3, 4, 2, -6, 0, 0, 0, 0, 0, }, {4, 9, 1, -12, 9, -4, -2, 7, 1, -6, 0, 0, 0, 0, }, {-3, -4, 2, -5, -2, 4, 3, 1, 3, 3, 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, 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, }, {-29692, -1784, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2200, 3070, 1681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1335, -2267, 1249, 759, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {940, 780, 290, -418, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-214, 352, 235, -118, -166, -17, 0, 0, 0, 0, 0, 0, 0, 0, }, {68, 67, 68, -170, -1, 19, -93, 0, 0, 0, 0, 0, 0, 0, }, {77, -72, 1, 28, 5, 4, 8, -2, 0, 0, 0, 0, 0, 0, }, {25, 6, -6, -9, -14, 9, 6, -5, -7, 0, 0, 0, 0, 0, }, {4, 9, 3, -10, 8, -8, -1, 10, -2, -8, 0, 0, 0, 0, }, {-3, -6, 2, -4, -1, 4, 2, 2, 5, 1, 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, 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, }, {-29619.4, -1728.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2267.7, 3068.4, 1670.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.6, -2288, 1252.1, 714.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {932.3, 786.8, 250, -403, 111.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-218.8, 351.4, 222.3, -130.4, -168.6, -12.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.3, 68.2, 74.2, -160.9, -5.9, 16.9, -90.4, 0, 0, 0, 0, 0, 0, 0, }, {79, -74, 0, 33.3, 9.1, 6.9, 7.3, -1.2, 0, 0, 0, 0, 0, 0, }, {24.4, 6.6, -9.2, -7.9, -16.6, 9.1, 7, -7.9, -7, 0, 0, 0, 0, 0, }, {5, 9.4, 3, -8.4, 6.3, -8.9, -1.5, 9.3, -4.3, -8.2, 0, 0, 0, 0, }, {-2.6, -6, 1.7, -3.1, -0.5, 3.7, 1, 2, 4.2, 0.3, -1.1, 0, 0, 0, }, {2.7, -1.7, -1.9, 1.5, -0.1, 0.1, -0.7, 0.7, 1.7, 0.1, 1.2, 4, 0, 0, }, {-2.2, -0.3, 0.2, 0.9, -0.2, 0.9, -0.5, 0.3, -0.3, -0.4, -0.1, -0.2, -0.4, 0, }, {-0.2, -0.9, 0.3, 0.1, -0.4, 1.3, -0.4, 0.7, -0.4, 0.3, -0.1, 0.4, 0, 0.1, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29554.63, -1669.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2337.24, 3047.69, 1657.76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1336.3, -2305.83, 1246.39, 672.51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {920.55, 797.96, 210.65, -379.86, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-227, 354.41, 208.95, -136.54, -168.05, -13.55, 0, 0, 0, 0, 0, 0, 0, 0, }, {73.6, 69.56, 76.74, -151.34, -14.58, 14.58, -86.36, 0, 0, 0, 0, 0, 0, 0, }, {79.88, -74.46, -1.65, 38.73, 12.3, 9.37, 5.42, 1.94, 0, 0, 0, 0, 0, 0, }, {24.8, 7.62, -11.73, -6.88, -18.11, 10.17, 9.36, -11.25, -4.87, 0, 0, 0, 0, 0, }, {5.58, 9.76, 3.58, -6.94, 5.01, -10.76, -1.25, 8.76, -6.66, -9.22, 0, 0, 0, 0, }, {-2.17, -6.12, 1.42, -2.35, -0.15, 3.06, 0.29, 2.06, 3.77, -0.21, -2.09, 0, 0, 0, }, {2.95, -1.6, -1.88, 1.44, -0.31, 0.29, -0.79, 0.53, 1.8, 0.16, 0.96, 3.99, 0, 0, }, {-2.15, -0.29, 0.21, 0.89, -0.38, 0.96, -0.3, 0.46, -0.35, -0.36, 0.08, -0.49, -0.08, 0, }, {-0.16, -0.88, 0.3, 0.28, -0.43, 1.18, -0.37, 0.75, -0.26, 0.35, -0.05, 0.41, -0.1, -0.18, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29496.57, -1586.42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2396.06, 3026.34, 1668.17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1339.85, -2326.54, 1232.1, 633.73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {912.66, 808.97, 166.58, -356.83, 89.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-230.87, 357.29, 200.26, -141.05, -163.17, -8.03, 0, 0, 0, 0, 0, 0, 0, 0, }, {72.78, 68.69, 75.92, -141.4, -22.83, 13.1, -78.09, 0, 0, 0, 0, 0, 0, 0, }, {80.44, -75, -4.55, 45.24, 14, 10.46, 1.64, 4.92, 0, 0, 0, 0, 0, 0, }, {24.41, 8.21, -14.5, -5.59, -19.34, 11.61, 10.85, -14.05, -3.54, 0, 0, 0, 0, 0, }, {5.5, 9.45, 3.45, -5.27, 3.13, -12.38, -0.76, 8.43, -8.42, -10.08, 0, 0, 0, 0, }, {-1.94, -6.24, 0.89, -1.07, -0.16, 2.45, -0.33, 2.13, 3.09, -1.03, -2.8, 0, 0, 0, }, {3.05, -1.48, -2.03, 1.65, -0.51, 0.54, -0.79, 0.37, 1.79, 0.12, 0.75, 3.75, 0, 0, }, {-2.12, -0.21, 0.3, 1.04, -0.63, 0.95, -0.11, 0.52, -0.39, -0.37, 0.21, -0.77, 0.04, 0, }, {-0.09, -0.89, 0.31, 0.42, -0.45, 1.08, -0.31, 0.78, -0.18, 0.38, 0.02, 0.42, -0.26, -0.26, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-29442, -1501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-2445.1, 3012.9, 1676.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {1350.7, -2352.3, 1225.6, 582, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {907.6, 813.7, 120.4, -334.9, 70.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-232.6, 360.1, 192.4, -140.9, -157.5, 4.1, 0, 0, 0, 0, 0, 0, 0, 0, }, {70, 67.7, 72.7, -129.9, -28.9, 13.2, -70.9, 0, 0, 0, 0, 0, 0, 0, }, {81.6, -76.1, -6.8, 51.8, 15, 9.4, -2.8, 6.8, 0, 0, 0, 0, 0, 0, }, {24.2, 8.8, -16.9, -3.2, -20.6, 13.4, 11.7, -15.9, -2, 0, 0, 0, 0, 0, }, {5.4, 8.8, 3.1, -3.3, 0.7, -13.3, -0.1, 8.7, -9.1, -10.5, 0, 0, 0, 0, }, {-1.9, -6.3, 0.1, 0.5, -0.5, 1.8, -0.7, 2.1, 2.4, -1.8, -3.6, 0, 0, 0, }, {3.1, -1.5, -2.3, 2, -0.8, 0.6, -0.7, 0.2, 1.7, -0.2, 0.4, 3.5, 0, 0, }, {-1.9, -0.2, 0.4, 1.2, -0.8, 0.9, 0.1, 0.5, -0.3, -0.4, 0.2, -0.9, 0, 0, }, {0, -0.9, 0.4, 0.5, -0.5, 1, -0.2, 0.8, -0.1, 0.3, 0.1, 0.5, -0.4, -0.3, }, }, }; static const double thgeomag_HNM[24][14][14] = { { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5922, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1061, 1121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -330, 3, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 195, -69, -210, -75, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -210, 53, -33, -124, 3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 83, 2, -35, 36, -69, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -13, -10, -1, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1086, 1065, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -357, 34, 480, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 203, -77, -201, -65, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -193, 56, -32, -125, 11, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -7, 86, 4, -32, 32, -67, 0, 0, 0, 0, 0, 0, 0, }, {0, -46, -14, -11, 0, 28, -12, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 7, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1128, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -389, 62, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 211, -90, -189, -55, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -172, 57, -33, -126, 21, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -5, 89, 5, -29, 28, -65, 0, 0, 0, 0, 0, 0, 0, }, {0, -47, -14, -12, 1, 28, -13, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5875, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1191, 917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -421, 84, 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 218, -109, -173, -51, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -148, 58, -34, -126, 32, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2, 93, 8, -26, 23, -62, 0, 0, 0, 0, 0, 0, 0, }, {0, -48, -14, -12, 2, 28, -15, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -13, 5, 16, -5, -18, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 8, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1259, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -445, 103, 293, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 220, -134, -153, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -122, 58, -38, -125, 43, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, 96, 11, -22, 18, -57, 0, 0, 0, 0, 0, 0, 0, }, {0, -49, -14, -13, 4, 28, -16, -22, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1334, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 119, 229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 216, -163, -130, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -96, 58, -44, -122, 51, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 99, 14, -18, 13, -52, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -14, -14, 5, 29, -17, -21, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 6, -14, 5, 17, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1424, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -480, 133, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 205, -195, -109, -90, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -72, 60, -53, -118, 58, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 102, 19, -16, 8, -46, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, -15, -14, 6, 29, -18, -20, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -14, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 14, 5, -3, -2, 9, 10, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 4, 0, -6, 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, 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, 5812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1520, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -494, 146, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 188, -226, -90, -114, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -51, 64, -64, -115, 64, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 104, 25, -15, 4, -40, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -17, -14, 7, 29, -19, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -15, 5, -15, 5, 18, -5, -19, 0, 0, 0, 0, 0, }, {0, -20, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 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, 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, 5821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1614, 528, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 163, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 169, -252, -72, -141, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -33, 71, -75, -113, 69, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4, 105, 33, -15, 0, -33, 0, 0, 0, 0, 0, 0, 0, }, {0, -52, -18, -14, 7, 29, -20, -19, 0, 0, 0, 0, 0, 0, }, {0, 8, -14, 5, -15, 5, 19, -5, -19, 0, 0, 0, 0, 0, }, {0, -21, 15, 5, -3, -3, 9, 11, -2, 2, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -1, 4, 0, -6, 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, 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, 5810, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1702, 477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -499, 186, -11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 144, -276, -55, -178, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 95, -67, -119, 82, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 6, 100, 16, -9, -16, -39, 0, 0, 0, 0, 0, 0, 0, }, {0, -45, -18, 2, 6, 28, -17, -22, 0, 0, 0, 0, 0, 0, }, {0, 12, -21, -12, -7, 2, 18, 3, -11, 0, 0, 0, 0, 0, }, {0, -27, 17, 29, -9, 4, 9, 6, 1, 8, 0, 0, 0, 0, }, {0, 5, 1, -20, -1, -6, 6, -4, -2, 0, -2, 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, 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, 5815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1810, 381, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -476, 206, -46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 136, -278, -37, -210, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 3, 103, -87, -122, 80, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1, 99, 33, -12, -12, -30, 0, 0, 0, 0, 0, 0, 0, }, {0, -35, -17, 0, 10, 36, -18, -16, 0, 0, 0, 0, 0, 0, }, {0, 5, -22, 0, -21, -8, 17, -4, -17, 0, 0, 0, 0, 0, }, {0, -24, 19, 12, 2, 2, 8, 8, -11, -7, 0, 0, 0, 0, }, {0, 13, -2, -10, 2, -3, 6, -3, 6, 11, 8, 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, 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, 5820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1898, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -462, 216, -83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 133, -274, -23, -230, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 15, 110, -98, -121, 78, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -9, 96, 48, -16, -12, -24, 0, 0, 0, 0, 0, 0, 0, }, {0, -50, -24, -4, 8, 28, -20, -18, 0, 0, 0, 0, 0, 0, }, {0, 10, -15, 5, -23, 3, 23, -4, -13, 0, 0, 0, 0, 0, }, {0, -11, 12, 7, 6, -2, 10, 7, -6, 5, 0, 0, 0, 0, }, {0, -4, 0, -8, -2, -4, 1, -3, 7, -1, -3, 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, 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, 5791, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1967, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -414, 224, -130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 135, -278, 3, -255, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 16, 125, -117, -114, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -10, 99, 60, -20, -11, -17, 0, 0, 0, 0, 0, 0, 0, }, {0, -55, -28, -6, 7, 23, -18, -17, 0, 0, 0, 0, 0, 0, }, {0, 11, -14, 7, -18, 4, 23, 1, -20, 0, 0, 0, 0, 0, }, {0, -18, 12, 2, 0, -3, 9, 8, 0, 5, 0, 0, 0, 0, }, {0, 4, 1, 0, 2, -5, 1, -1, 6, 0, -7, 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, 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, 5776, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2016, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -404, 240, -165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 148, -269, 13, -269, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 19, 128, -126, -97, 81, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -11, 100, 68, -32, -8, -7, 0, 0, 0, 0, 0, 0, 0, }, {0, -61, -27, -2, 6, 26, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 7, -12, 9, -16, 4, 24, -3, -17, 0, 0, 0, 0, 0, }, {0, -22, 15, 7, -4, -5, 10, 10, -4, 1, 0, 0, 0, 0, }, {0, 2, 1, 2, 6, -4, 0, -2, 3, 0, -6, 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, 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, 5737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2047, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -366, 251, -196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 167, -266, 26, -279, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 26, 139, -139, -91, 83, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -12, 100, 72, -37, -6, 1, 0, 0, 0, 0, 0, 0, 0, }, {0, -70, -27, -4, 8, 23, -23, -11, 0, 0, 0, 0, 0, 0, }, {0, 7, -15, 6, -17, 6, 21, -6, -16, 0, 0, 0, 0, 0, }, {0, -21, 16, 6, -4, -5, 10, 11, -2, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, 0, -1, 3, 1, -4, 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, 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, 5675, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2067, -68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -333, 262, -223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 191, -265, 39, -288, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 31, 148, -152, -83, 88, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -13, 99, 75, -41, -4, 11, 0, 0, 0, 0, 0, 0, 0, }, {0, -77, -26, -5, 10, 22, -23, -12, 0, 0, 0, 0, 0, 0, }, {0, 6, -16, 4, -19, 6, 18, -10, -17, 0, 0, 0, 0, 0, }, {0, -21, 16, 7, -4, -5, 10, 11, -3, 1, 0, 0, 0, 0, }, {0, 1, 1, 3, 4, -4, -1, -1, 3, 1, -5, 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, 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, 5604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2129, -200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -336, 271, -252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 212, -257, 53, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 150, -151, -78, 92, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -15, 93, 71, -43, -2, 17, 0, 0, 0, 0, 0, 0, 0, }, {0, -82, -27, -5, 16, 18, -23, -10, 0, 0, 0, 0, 0, 0, }, {0, 7, -18, 4, -22, 9, 16, -13, -15, 0, 0, 0, 0, 0, }, {0, -21, 16, 9, -5, -6, 9, 10, -6, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 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, 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, 5500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2197, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -310, 284, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 232, -249, 69, -297, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 47, 150, -154, -75, 95, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 88, 69, -48, -1, 21, 0, 0, 0, 0, 0, 0, 0, }, {0, -83, -27, -2, 20, 17, -23, -7, 0, 0, 0, 0, 0, 0, }, {0, 8, -19, 5, -23, 11, 14, -15, -11, 0, 0, 0, 0, 0, }, {0, -21, 15, 9, -6, -6, 9, 9, -7, 2, 0, 0, 0, 0, }, {0, 1, 0, 3, 6, -4, 0, -1, 4, 0, -6, 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, 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, 5406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2279, -373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -284, 293, -352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 247, -240, 84, -299, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 154, -153, -69, 97, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -16, 82, 69, -52, 1, 24, 0, 0, 0, 0, 0, 0, 0, }, {0, -80, -26, 0, 21, 17, -23, -4, 0, 0, 0, 0, 0, 0, }, {0, 10, -19, 6, -22, 12, 12, -16, -10, 0, 0, 0, 0, 0, }, {0, -20, 15, 11, -7, -7, 9, 8, -7, 2, 0, 0, 0, 0, }, {0, 2, 1, 3, 6, -4, 0, -2, 3, -1, -6, 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, 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, 5306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2366, -413, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -262, 302, -427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 262, -236, 97, -306, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 46, 165, -143, -55, 107, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17, 72, 67, -58, 1, 36, 0, 0, 0, 0, 0, 0, 0, }, {0, -69, -25, 4, 24, 17, -24, -6, 0, 0, 0, 0, 0, 0, }, {0, 11, -21, 8, -23, 15, 11, -16, -4, 0, 0, 0, 0, 0, }, {0, -20, 15, 12, -6, -8, 8, 5, -8, 3, 0, 0, 0, 0, }, {0, 1, 0, 4, 5, -5, -1, -2, 1, -2, -7, 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, 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, 5186.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2481.6, -458, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -227.6, 293.4, -491.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 272.6, -231.9, 119.8, -303.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 43.8, 171.9, -133.1, -39.3, 106.3, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -17.4, 63.7, 65.1, -61.2, 0.7, 43.8, 0, 0, 0, 0, 0, 0, 0, }, {0, -64.6, -24.2, 6.2, 24, 14.8, -25.4, -5.8, 0, 0, 0, 0, 0, 0, }, {0, 11.9, -21.5, 8.5, -21.5, 15.5, 8.9, -14.9, -2.1, 0, 0, 0, 0, 0, }, {0, -19.7, 13.4, 12.5, -6.2, -8.4, 8.4, 3.8, -8.2, 4.8, 0, 0, 0, 0, }, {0, 1.7, 0, 4, 4.9, -5.9, -1.2, -2.9, 0.2, -2.2, -7.4, 0, 0, 0, }, {0, 0.1, 1.3, -0.9, -2.6, 0.9, -0.7, -2.8, -0.9, -1.2, -1.9, -0.9, 0, 0, }, {0, -0.4, 0.3, 2.5, -2.6, 0.7, 0.3, 0, 0, 0.3, -0.9, -0.4, 0.8, 0, }, {0, -0.9, 0.2, 1.8, -0.4, -1, -0.1, 0.7, 0.3, 0.6, 0.3, -0.2, -0.5, -0.9, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 5077.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2594.5, -515.43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -198.86, 269.72, -524.72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 282.07, -225.23, 145.15, -305.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 42.72, 180.25, -123.45, -19.57, 103.85, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.33, 54.75, 63.63, -63.53, 0.24, 50.94, 0, 0, 0, 0, 0, 0, 0, }, {0, -61.14, -22.57, 6.82, 25.35, 10.93, -26.32, -4.64, 0, 0, 0, 0, 0, 0, }, {0, 11.2, -20.88, 9.83, -19.71, 16.22, 7.61, -12.76, -0.06, 0, 0, 0, 0, 0, }, {0, -20.11, 12.69, 12.67, -6.72, -8.16, 8.1, 2.92, -7.73, 6.01, 0, 0, 0, 0, }, {0, 2.19, 0.1, 4.46, 4.76, -6.58, -1.01, -3.47, -0.86, -2.31, -7.93, 0, 0, 0, }, {0, 0.26, 1.44, -0.77, -2.27, 0.9, -0.58, -2.69, -1.08, -1.58, -1.9, -1.39, 0, 0, }, {0, -0.55, 0.23, 2.38, -2.63, 0.61, 0.4, 0.01, 0.02, 0.28, -0.87, -0.34, 0.88, 0, }, {0, -0.76, 0.33, 1.72, -0.54, -1.07, -0.04, 0.63, 0.21, 0.53, 0.38, -0.22, -0.57, -0.82, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4944.26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2708.54, -575.73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -160.4, 251.75, -537.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 286.48, -211.03, 164.46, -309.72, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 44.58, 189.01, -118.06, -0.01, 101.04, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.9, 44.18, 61.54, -66.26, 3.02, 55.4, 0, 0, 0, 0, 0, 0, 0, }, {0, -57.8, -21.2, 6.54, 24.96, 7.03, -27.61, -3.28, 0, 0, 0, 0, 0, 0, }, {0, 10.84, -20.03, 11.83, -17.41, 16.71, 6.96, -10.74, 1.64, 0, 0, 0, 0, 0, }, {0, -20.54, 11.51, 12.75, -7.14, -7.42, 7.97, 2.14, -6.08, 7.01, 0, 0, 0, 0, }, {0, 2.73, -0.1, 4.71, 4.44, -7.22, -0.96, -3.95, -1.99, -1.97, -8.31, 0, 0, 0, }, {0, 0.13, 1.67, -0.66, -1.76, 0.85, -0.39, -2.51, -1.27, -2.11, -1.94, -1.86, 0, 0, }, {0, -0.87, 0.27, 2.13, -2.49, 0.49, 0.59, 0, 0.13, 0.27, -0.86, -0.23, 0.87, 0, }, {0, -0.87, 0.3, 1.66, -0.59, -1.14, -0.07, 0.54, 0.1, 0.49, 0.44, -0.25, -0.53, -0.79, }, }, { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 4797.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -2845.6, -641.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -115.3, 244.9, -538.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 283.3, -188.7, 180.9, -329.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 47.3, 197, -119.3, 16, 100.2, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -20.8, 33.2, 58.9, -66.7, 7.3, 62.6, 0, 0, 0, 0, 0, 0, 0, }, {0, -54.1, -19.5, 5.7, 24.4, 3.4, -27.4, -2.2, 0, 0, 0, 0, 0, 0, }, {0, 10.1, -18.3, 13.3, -14.6, 16.2, 5.7, -9.1, 2.1, 0, 0, 0, 0, 0, }, {0, -21.6, 10.8, 11.8, -6.8, -6.9, 7.8, 1, -4, 8.4, 0, 0, 0, 0, }, {0, 3.2, -0.4, 4.6, 4.4, -7.9, -0.6, -4.2, -2.8, -1.2, -8.7, 0, 0, 0, }, {0, -0.1, 2, -0.7, -1.1, 0.8, -0.2, -2.2, -1.4, -2.5, -2, -2.4, 0, 0, }, {0, -1.1, 0.4, 1.9, -2.2, 0.3, 0.7, -0.1, 0.3, 0.2, -0.9, -0.1, 0.7, 0, }, {0, -0.9, 0.4, 1.6, -0.5, -1.2, -0.1, 0.4, -0.1, 0.4, 0.5, -0.3, -0.4, -0.8, }, }, }; static const double thgeomag_GNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {10.3, 18.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-8.7, -3.3, 2.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {3.4, -5.5, -0.7, -10.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.7, 0.2, -9.1, 4.1, -4.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.2, 0.5, -1.3, -0.1, 1.4, 3.9, 0, 0, 0, 0, 0, 0, 0, 0, }, {-0.3, -0.1, -0.7, 2.1, -1.2, 0.3, 1.6, 0, 0, 0, 0, 0, 0, 0, }, {0.3, -0.2, -0.5, 1.3, 0.1, -0.6, -0.8, 0.2, 0, 0, 0, 0, 0, 0, }, {0.2, 0, -0.6, 0.5, -0.2, 0.4, 0.1, -0.4, 0.3, 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, 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, 0, 0, 0, 0, 0, 0, 0, }, }; static const double thgeomag_HNMD[14][14] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -26.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -27.4, -14.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 8.2, -0.4, 1.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, -1.3, 5.3, 2.9, -5.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.6, 1.7, -1.2, 3.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, {0, 0, -2.1, -0.7, 0.2, 0.9, 1, 0, 0, 0, 0, 0, 0, 0, }, {0, 0.8, 0.4, -0.2, -0.3, -0.6, 0.1, -0.2, 0, 0, 0, 0, 0, 0, }, {0, -0.3, 0.3, 0.1, 0.5, -0.2, -0.3, 0.3, 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, }, {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, 0, 0, 0, 0, 0, 0, 0, 0, }, }; #define thgeomag_maxmindex 23 #define thgeomag_step 5 #define thgeomag_minyear 1900 #define thgeomag_maxdeg 13 #endif therion-5.4.1/thgrade.cxx000066400000000000000000000143701307545355600153550ustar00rootroot00000000000000/** * @file thgrade.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thgrade.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" thgrade::thgrade() { this->data.reset_data_sd(); this->update_sd_from_data(true); } thgrade::~thgrade() { } int thgrade::get_class_id() { return TT_GRADE_CMD; } bool thgrade::is(int class_id) { if (class_id == TT_GRADE_CMD) return true; else return thdataobject::is(class_id); } int thgrade::get_cmd_nargs() { return 1; } const char * thgrade::get_cmd_end() { return "endgrade"; } const char * thgrade::get_cmd_name() { // insert command name here return "grade"; } thcmd_option_desc thgrade::get_cmd_option_desc(const char * opts) { // no options allowed // int id = thmatch_token(opts, thtt_grade_opt); // if (id == TT_GRADE_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); // else // return thcmd_option_desc(id); } void thgrade::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { case 0: thsplit_args(& this->db->mbuff_tmp, *args); this->set_sd(this->db->mbuff_tmp.get_size(), this->db->mbuff_tmp.get_buffer()); break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); } } void thgrade::self_delete() { delete this; } void thgrade::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thgrade:\n"); fprintf(outf,"\tlength sd: %f metres\n",thinn(this->dls_length)); fprintf(outf,"\tbrearing sd: %f degrees\n",thinn(this->dls_bearing)); fprintf(outf,"\tgradient sd: %f degrees\n",thinn(this->dls_gradient)); fprintf(outf,"\tcounter sd: %f metres\n",thinn(this->dls_counter)); fprintf(outf,"\tdepth sd: %f metres\n",thinn(this->dls_depth)); fprintf(outf,"\tdx sd: %f metres\n",thinn(this->dls_dx)); fprintf(outf,"\tdy sd: %f metres\n",thinn(this->dls_dy)); fprintf(outf,"\tdz sd: %f metres\n",thinn(this->dls_dz)); fprintf(outf,"\tx sd: %f metres\n",thinn(this->dls_x)); fprintf(outf,"\ty sd: %f metres\n",thinn(this->dls_y)); fprintf(outf,"\tz sd: %f metres\n",thinn(this->dls_z)); } void thgrade::set_sd(int nargs, char ** args) { this->data.set_data_sd(nargs, args); } int thgrade::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thgrade::update_sd_from_data(bool alsonan) { if (alsonan) { this->dls_length = this->data.dls_length; this->dls_gradient = this->data.dls_gradient; this->dls_bearing = this->data.dls_bearing; this->dls_counter = this->data.dls_counter; this->dls_depth = this->data.dls_depth; this->dls_dx = this->data.dls_dx; this->dls_dy = this->data.dls_dy; this->dls_dz = this->data.dls_dz; this->dls_x = this->data.dls_x; this->dls_y = this->data.dls_y; this->dls_z = this->data.dls_z; } else { thupdate_double(this->dls_length, this->data.dls_length); thupdate_double(this->dls_gradient, this->data.dls_gradient); thupdate_double(this->dls_bearing, this->data.dls_bearing); thupdate_double(this->dls_counter, this->data.dls_counter); thupdate_double(this->dls_depth, this->data.dls_depth); thupdate_double(this->dls_dx, this->data.dls_dx); thupdate_double(this->dls_dy, this->data.dls_dy); thupdate_double(this->dls_dz, this->data.dls_dz); thupdate_double(this->dls_x, this->data.dls_x); thupdate_double(this->dls_y, this->data.dls_y); thupdate_double(this->dls_z, this->data.dls_z); } } void thgrade::update_data_sd(thdata * dp) { thupdate_double(dp->dls_length, this->dls_length); thupdate_double(dp->dls_gradient, this->dls_gradient); thupdate_double(dp->dls_bearing, this->dls_bearing); thupdate_double(dp->dls_counter, this->dls_counter); thupdate_double(dp->dls_depth, this->dls_depth); thupdate_double(dp->dls_dx, this->dls_dx); thupdate_double(dp->dls_dy, this->dls_dy); thupdate_double(dp->dls_dz, this->dls_dz); thupdate_double(dp->dls_x, this->dls_x); thupdate_double(dp->dls_y, this->dls_y); thupdate_double(dp->dls_z, this->dls_z); } void thgrade::start_insert() { this->update_sd_from_data(); } void thgrade::self_print_library() { thprintf("\toname = \"%s\";\n", this->get_name()); thprintf("\tpgrade->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,0,0);\n"); thdecode_c(&(this->db->buff_enc), this->get_title()); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tpgrade->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0);\n"); thprintf("\tpgrade->dls_length = "); thprintinfnan(this->dls_length); thprintf(";\n\tpgrade->dls_bearing = "); thprintinfnan(this->dls_bearing); thprintf(";\n\tpgrade->dls_gradient = "); thprintinfnan(this->dls_gradient); thprintf(";\n\tpgrade->dls_counter = "); thprintinfnan(this->dls_counter); thprintf(";\n\tpgrade->dls_depth = "); thprintinfnan(this->dls_depth); thprintf(";\n\tpgrade->dls_dx = "); thprintinfnan(this->dls_dx); thprintf(";\n\tpgrade->dls_dy = "); thprintinfnan(this->dls_dy); thprintf(";\n\tpgrade->dls_dz = "); thprintinfnan(this->dls_dz); thprintf(";\n\tpgrade->dls_x = "); thprintinfnan(this->dls_x); thprintf(";\n\tpgrade->dls_y = "); thprintinfnan(this->dls_y); thprintf(";\n\tpgrade->dls_z = "); thprintinfnan(this->dls_z); thprintf(";\n"); } thdata thgrade::data; therion-5.4.1/thgrade.h000066400000000000000000000063721307545355600150050ustar00rootroot00000000000000/** * @file thgrade.h * Survey grade module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thgrade_h #define thgrade_h #include "thdataobject.h" #include "thdata.h" /** * grade command options tokens. */ enum { TT_GRADE_UNKNOWN = 2000, TT_GRADE_OPTION = 2001, }; /** * grade command options parsing table. */ static const thstok thtt_grade_opt[] = { {NULL, TT_GRADE_UNKNOWN}, }; /** * grade class. */ class thgrade : public thdataobject { static thdata data; void update_sd_from_data(bool alsonan = false); ///< Update these data. public: void set_sd(int nargs, char ** args); ///< Set SD. public: double dls_length, dls_gradient, dls_bearing, dls_counter, dls_depth, dls_dx, dls_dy, dls_dz, dls_x, dls_y, dls_z; /** * Standard constructor. */ thgrade(); /** * Standard destructor. */ virtual ~thgrade(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thgrade";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Print object in C++ format. */ void self_print_library(); /** * Get context for object. */ virtual int get_context(); /** * Update data SD. */ void update_data_sd(thdata * dp); /** * Start insertion into database. */ void start_insert(); }; #endif therion-5.4.1/thimport.cxx000066400000000000000000000450031307545355600156020ustar00rootroot00000000000000/** * @file thimport.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thimport.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thsurvey.h" #include "thendsurvey.h" #include "extern/img.h" #include #include #include #include #ifndef THMSVC #include #else #include #define getcwd _getcwd #define strcasecmp _stricmp #endif struct thsst { std::string name, fullname; thsurvey * survey; }; thimport::thimport() { this->format = 0; this->fname = NULL; this->surveys = TT_IMPORT_SURVEYS_CREATE; this->filter = NULL; this->calib_x = 0.0; this->calib_y = 0.0; this->calib_z = 0.0; } thimport::~thimport() { } int thimport::get_class_id() { return TT_IMPORT_CMD; } int thimport::get_context() { return (THCTX_SURVEY | THCTX_NONE); } bool thimport::is(int class_id) { if (class_id == TT_IMPORT_CMD) return true; else return thdataobject::is(class_id); } int thimport::get_cmd_nargs() { // replace by real number of arguments return 1; } const char * thimport::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thimport::get_cmd_name() { // insert command name here return "import"; } thcmd_option_desc thimport::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_import_opt); if (id == TT_IMPORT_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thimport::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case 1: this->set_file_name(*args); break; case TT_IMPORT_FORMAT: this->format = thmatch_token(args[0], thtt_import_fmts); if (this->format == TT_IMPORT_FMT_UNKNOWN) ththrow(("unknown import format -- %s", args[0])) break; case TT_IMPORT_CALIB: this->parse_calib(args[0], argenc); break; case TT_IMPORT_SURVEYS: this->surveys = thmatch_token(args[0], thtt_import_surveys); if (this->surveys == TT_IMPORT_SURVEYS_UNKNOWN) ththrow(("unknown survey structure policy -- %s", args[0])) break; case TT_IMPORT_FILTER: if (strlen(args[0]) > 0) this->filter = this->db->strstore(args[0]); else this->filter = NULL; break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thimport::self_delete() { delete this; } void thimport::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thimport:\n"); // insert intended print of object properties here } void thimport::set_file_name(char * fnm) { thbuffer impf_path; impf_path.guarantee(1024); getcwd(impf_path.get_buffer(),1024); this->mysrc = this->db->csrc; long i; if (strlen(fnm) == 0) ththrow(("file not specified")) impf_path += "/"; impf_path += thdb.csrc.name; char * pp = impf_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) impf_path = "/"; impf_path += fnm; pp = impf_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->fname = this->db->strstore(pp); FILE * tmp; tmp = fopen(this->fname,"r"); if (tmp == NULL) ththrow(("unable to open file for import -- %s", this->fname)) else fclose(tmp); // let's determine input type #define check_ext(str) (strlen(this->fname) > strlen(str)) && \ (strcasecmp(&(this->fname[strlen(this->fname) - strlen(str)]), str) == 0) if (check_ext(".3d")) this->format = TT_IMPORT_FMT_3D; else if (check_ext(".plt")) this->format = TT_IMPORT_FMT_PLT; else if (check_ext(".xyz")) this->format = TT_IMPORT_FMT_XYZ; } void thimport::import_file() { thobjectsrc tmpsrc; thsurvey * tmpsv; thdataobject * tmpobj; tmpsv = this->db->csurveyptr; tmpobj = this->db->lcsobjectptr; this->db->csurveyptr = this->fsptr; if (this->fsptr == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; tmpsrc = this->db->csrc; this->db->csrc = this->mysrc; this->db->csrc.context = this; switch (this->format) { case TT_IMPORT_FMT_3D: case TT_IMPORT_FMT_PLT: case TT_IMPORT_FMT_XYZ: this->import_file_img(); break; default: ththrow(("unknown file format -- %s", this->fname)) } this->db->lcsobjectptr = tmpobj; this->db->csurveyptr = tmpsv; this->db->csrc = tmpsrc; } const char * thimport::station_name(const char * sn, const char separator, struct thsst * sst) { sst->survey = NULL; sst->name = sn; if (separator == 0) return sn; static thbuffer bx, prevsurvey; static thmbuffer psurv, csurv; static long active_survey; static thsurvey * prevpsurvey; long i, l; bx = sn; char * buff = bx.get_buffer(), * rv; switch (this->format) { case TT_IMPORT_FMT_3D: { // splitne current na podstringy thsplit_strings(&csurv, sn, separator); char ** pbf = psurv.get_buffer(), ** cbf = csurv.get_buffer(); long nps = psurv.get_size(), ncs = csurv.get_size(); if (nps == 0) { prevpsurvey = NULL; } if (nps == 0) active_survey = 0; if ((ncs == 1) || (this->surveys == TT_IMPORT_SURVEYS_IGNORE)) return sn; // skusi porovnat s existujucim bool is_ident = true; if (nps != ncs) is_ident = false; for(i = 0; is_ident && (i < (ncs - 1)); i++) { is_ident = is_ident && (strcmp(pbf[i], cbf[i]) == 0); } if (!is_ident) { prevpsurvey = NULL; thsplit_strings(&psurv, sn, separator); prevsurvey = ""; int prevctx; thsurvey * csurvey = this->fsptr, * nsurvey, * prevcsptr = this->db->csurveyptr; // thendsurvey * nendsurvey; for (active_survey = 0; active_survey < (ncs - 1); active_survey++) { nsurvey = NULL; nsurvey = this->db->get_survey_noexc(cbf[active_survey], csurvey); // if nsurvey not found, try if there is no other object // with this name if ((nsurvey == NULL) && (this->surveys == TT_IMPORT_SURVEYS_CREATE) && (this->db->object_map.find(thobjectid(cbf[active_survey],(csurvey == NULL) ? 0 : csurvey->id)) == this->db->object_map.end())) { // if not, create this survey prevcsptr = this->db->csurveyptr; prevctx = this->db->ccontext; this->db->csurveyptr = csurvey; if (csurvey == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; this->db->ccontext = THCTX_SURVEY; nsurvey = (thsurvey*) this->db->create("survey", this->mysrc); // TODO - nastavit mu meno cez set nsurvey->name = this->db->strstore(cbf[active_survey]); this->db->insert(nsurvey); this->db->csrc.context = this; this->db->csurveylevel--; // nendsurvey = (thendsurvey*) this->db->create("endsurvey", this->mysrc); // this->db->insert(nendsurvey); this->db->csurveyptr = prevcsptr; if (prevcsptr == NULL) { this->db->lcsobjectptr = this; while (this->db->lcsobjectptr->nsptr != NULL) this->db->lcsobjectptr = this->db->lcsobjectptr->nsptr; } else this->db->lcsobjectptr = this->db->csurveyptr->loptr; this->db->ccontext = prevctx; nsurvey = this->db->get_survey_noexc(cbf[active_survey], csurvey); } if (nsurvey != NULL) { if (strlen(prevsurvey.get_buffer()) == 0) { prevsurvey = cbf[active_survey]; } else { bx = prevsurvey.get_buffer(); prevsurvey = cbf[active_survey]; prevsurvey += "."; prevsurvey += bx.get_buffer(); } csurvey = nsurvey; prevpsurvey = csurvey; } else break; } // } // poskladame meno bodu bx = ""; for(i = active_survey; i < ncs; i++) { if (i > active_survey) bx += "."; bx += cbf[i]; } sst->survey = prevpsurvey; sst->name = bx.get_buffer(); if (strlen(prevsurvey.get_buffer()) > 0) { bx += "@"; bx += prevsurvey; } return bx.get_buffer(); } break; default: l = (long)strlen(bx); rv = buff; for(i = 0; i < l; i++) { if ((buff[i] == separator) && ((i + 1) < l)) { rv = &(buff[i+1]); } } sst->name = rv; return rv; break; } } struct thimg_shot { double fx, fy, fz, tx, ty, tz; long flags; }; struct thimg_stpos { double x, y, z; }; bool operator < (const thimg_stpos & p1, const thimg_stpos & p2) { if (p1.x < p2.x) return true; if (p1.x > p2.x) return false; if (p1.y < p2.y) return true; if (p1.y > p2.y) return false; if (p1.z < p2.z) return true; return false; } typedef std::map str2strmap; typedef std::map pos2strmap; typedef std::list thimgshotlist; void thimport::import_file_img() { // potrebujeme: // funkciu ktora premeni ass.sss.1 na 1@sds.sds, ale // iba ak survey existuje // hash: ass.ass.1 -> 1@sds.sds // hash: x,y,z -> 1@sds.sds // list: xyz->xyz + flags thimg_stpos tmppos; thimg_shot tmpshot; str2strmap svxs2ths; thsst tmpsst; thdata * tmpdata; thsurvey * tmpsurvey; pos2strmap svxpos2ths; pos2strmap::iterator p2si; thimgshotlist shotlist; thimgshotlist::iterator sli; unsigned long notimpst = 0, notimpsh = 0; // postup - prebehneme subor, vytvorime zoznam shotov, // popridavame fixne body spolu s atributmi ak existuju a vytvarame // oba heshe // nakoniec pridame shots // thprintf("\n\n"); img_point imgpt; img_errcode imgerr; int result; char * args [4], * stnm, a0[32], a1[32], a2[32], a3[32]; args[0] = a0; args[1] = a1; args[2] = a2; args[3] = a3; size_t filterl = 0; if (this->filter != NULL) filterl = strlen(this->filter); thbuffer n1, n2; thbuffer xb, yb, zb; xb.guarantee(128); yb.guarantee(128); zb.guarantee(128); std::string orig_name, new_name; img* pimg = img_open(this->fname); if (pimg == NULL) { imgerr = img_error(); ththrow(("unable to open file %s, error code: %u", this->fname, imgerr)) } do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: tmpshot.fx = imgpt.x; tmpshot.fy = imgpt.y; tmpshot.fz = imgpt.z; break; case img_LINE: tmpshot.tx = imgpt.x; tmpshot.ty = imgpt.y; tmpshot.tz = imgpt.z; tmpshot.flags = pimg->flags; shotlist.insert(shotlist.end(), tmpshot); tmpshot.fx = tmpshot.tx; tmpshot.fy = tmpshot.ty; tmpshot.fz = tmpshot.tz; break; case img_LABEL: // vlozime fix station stnm = pimg->label; if ((filterl > 0) && (strncmp(stnm, this->filter, filterl) == 0)) { stnm = &stnm[filterl]; while ((*stnm != 0) && (*stnm == pimg->separator)) { stnm++; } } orig_name = stnm; if (strlen(stnm) < 1) break; if (svxs2ths.find(orig_name) == svxs2ths.end()) { sprintf(xb.get_buffer(), "%.16g", imgpt.x + this->calib_x); sprintf(yb.get_buffer(), "%.16g", imgpt.y + this->calib_y); sprintf(zb.get_buffer(), "%.16g", imgpt.z + this->calib_z); tmpsurvey = this->db->csurveyptr; new_name = this->station_name(stnm, pimg->separator, &tmpsst); // thprintf("%s -> %s\n", pimg->label, new_name.c_str()); tmpdata = NULL; if (tmpsst.survey != NULL) { n1 = tmpsst.name.c_str(); n2 = tmpsst.name.c_str(); tmpdata = tmpsst.survey->data; this->db->csurveyptr = tmpsst.survey; } else { n1 = new_name.c_str(); n2 = new_name.c_str(); if (this->fsptr != NULL) tmpdata = this->fsptr->data; else { notimpst++; // do not import station break; } } tmppos.x = imgpt.x; tmppos.y = imgpt.y; tmppos.z = imgpt.z; tmpsst.fullname = new_name; svxpos2ths[tmppos] = tmpsst; svxs2ths[orig_name] = new_name; args[1] = xb.get_buffer(); args[2] = yb.get_buffer(); args[3] = zb.get_buffer(); args[0] = n1.get_buffer(); tmpdata->cs = this->cs; tmpdata->set_data_fix(4, args); // ak bude entrance, vlozi aj station if ((pimg->flags & img_SFLAG_ENTRANCE) != 0) { args[0] = n2.get_buffer(); args[1] = strcpy(a1, ""); args[2] = strcpy(a2, "entrance"); tmpdata->set_data_station(3, args, TT_UTF_8); } if ((pimg->flags & img_SFLAG_FIXED) == 0) { args[0] = n2.get_buffer(); args[1] = strcpy(a1, ""); args[2] = strcpy(a2, "not"); args[3] = strcpy(a3, "fixed"); tmpdata->set_data_station(4, args, TT_UTF_8); } this->db->csurveyptr = tmpsurvey; } break; case img_BAD: img_close(pimg); ththrow(("invalid file format")) break; } } while (result != img_STOP); img_close(pimg); if (notimpst > 0) { thwarning(("unable to import %d stations outside survey", notimpst)); } thsurvey * s1survey, * s2survey; long s1slevel, s2slevel, maxlevel, i, j; thsst s1s, s2s; // nakoniec povklada shoty for(sli = shotlist.begin(); sli != shotlist.end(); sli++) { tmppos.x = sli->fx; tmppos.y = sli->fy; tmppos.z = sli->fz; p2si = svxpos2ths.find(tmppos); if (p2si == svxpos2ths.end()) continue; s1s = p2si->second; tmppos.x = sli->tx; tmppos.y = sli->ty; tmppos.z = sli->tz; p2si = svxpos2ths.find(tmppos); if (p2si == svxpos2ths.end()) continue; s2s = p2si->second; tmpsurvey = this->db->csurveyptr; tmpdata = NULL; // find survey levels s1slevel = 0; s1survey = s1s.survey; while (s1survey != NULL) { s1survey = s1survey->fsptr; s1slevel++; } s2slevel = 0; s2survey = s2s.survey; while (s2survey != NULL) { s2survey = s2survey->fsptr; s2slevel++; } maxlevel = s1slevel; if (s2slevel < maxlevel) maxlevel = s2slevel; // try from max to min level for (i = maxlevel; i > 0; i--) { // find survey at i s1survey = s1s.survey; n1 = s1s.name.c_str(); for (j = s1slevel; j > i; j--) { if (j == s1slevel) n1 += "@"; else n1 += "."; n1 += s1survey->name; s1survey = s1survey->fsptr; } s2survey = s2s.survey; n2 = s2s.name.c_str(); for (j = s2slevel; j > i; j--) { if (j == s2slevel) n2 += "@"; else n2 += "."; n2 += s2survey->name; s2survey = s2survey->fsptr; } if (s1survey->id == s2survey->id) { this->db->csurveyptr = s1survey; tmpdata = s1survey->data; break; } } if (tmpdata == NULL) { if (this->fsptr != NULL) tmpdata = this->fsptr->data; else { notimpsh++; // do not import continue; } // tmpdata = this->data; n1 = s1s.fullname.c_str(); n2 = s2s.fullname.c_str(); } // thprintf("%s - %s = %s - %s in %s\n", s1s.fullname.c_str(), s2s.fullname.c_str(), n1.get_buffer(), n2.get_buffer(), tmpdata->fsptr->full_name); args[0] = strcpy(a0, "nosurvey"); args[1] = strcpy(a1, "from"); args[2] = strcpy(a2, "to"); tmpdata->set_data_data(3,args); args[0] = n1.get_buffer(); args[1] = n2.get_buffer(); tmpdata->d_flags = TT_LEGFLAG_NONE; if ((sli->flags & img_FLAG_SURFACE) != 0) { tmpdata->d_flags |= TT_LEGFLAG_SURFACE; } if ((sli->flags & img_FLAG_DUPLICATE) != 0) { tmpdata->d_flags |= TT_LEGFLAG_DUPLICATE; } tmpdata->insert_data_leg(2, args); this->db->csurveyptr = tmpsurvey; } if (notimpsh > 0) { thwarning(("unable to import %d shots outside survey", notimpsh)); } } void thimport::parse_calib(char * spec, int enc) { thmbuffer * mb; char ** args; mb = &this->db->mbuff_tmp; thsplit_args(mb, spec); args = mb->get_buffer(); double v[6]; int sv, i; if (mb->get_size() != 6) ththrow(("invalid import calibration -- \"%s\"", spec)); for(i = 0; i < 6; i++) { thparse_double(sv, v[i], args[i]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", args[i])) } this->calib_x = v[3] - v[0]; this->calib_y = v[4] - v[1]; this->calib_z = v[5] - v[2]; } therion-5.4.1/thimport.h000066400000000000000000000077401307545355600152350ustar00rootroot00000000000000/** * @file thimport.h * import module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thimport_h #define thimport_h #include "thdataobject.h" /** * import command options tokens. */ enum { TT_IMPORT_UNKNOWN = 2000, TT_IMPORT_FORMAT = 2001, TT_IMPORT_FILTER = 2002, TT_IMPORT_SURVEYS = 2003, TT_IMPORT_CALIB = 2004, }; /** * import command options parsing table. */ static const thstok thtt_import_opt[] = { {"calibrate", TT_IMPORT_CALIB}, {"filter", TT_IMPORT_FILTER}, {"fmt", TT_IMPORT_FORMAT}, {"format", TT_IMPORT_FORMAT}, {"surveys", TT_IMPORT_SURVEYS}, {NULL, TT_IMPORT_UNKNOWN}, }; enum { TT_IMPORT_FMT_UNKNOWN, TT_IMPORT_FMT_3D, TT_IMPORT_FMT_PLT, TT_IMPORT_FMT_XYZ, }; /** * import types parsing table. */ static const thstok thtt_import_fmts[] = { {"3d", TT_IMPORT_FMT_3D}, {"plt", TT_IMPORT_FMT_PLT}, {"xyz", TT_IMPORT_FMT_XYZ}, {NULL, TT_IMPORT_FMT_UNKNOWN}, }; enum { TT_IMPORT_SURVEYS_UNKNOWN, TT_IMPORT_SURVEYS_CREATE, TT_IMPORT_SURVEYS_USE, TT_IMPORT_SURVEYS_IGNORE, }; /** * import types parsing table. */ static const thstok thtt_import_surveys[] = { {"create", TT_IMPORT_SURVEYS_CREATE}, {"ignore", TT_IMPORT_SURVEYS_IGNORE}, {"use", TT_IMPORT_SURVEYS_USE}, {NULL, TT_IMPORT_SURVEYS_UNKNOWN}, }; /** * import class. */ class thimport : public thdataobject { public: // insert here real properties int format, surveys; const char * fname, * filter; thobjectsrc mysrc; double calib_x, calib_y, calib_z; /** * Standard constructor. */ thimport(); /** * Standard destructor. */ virtual ~thimport(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thimport";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); void set_file_name(char * fnm); void import_file(); void import_file_img(); void parse_calib(char * spec, int enc); const char * station_name(const char * sn, const char separator, struct thsst * sst); }; #endif therion-5.4.1/thinfnan.cxx000066400000000000000000000020661307545355600155430ustar00rootroot00000000000000/** * @file thinfnan.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinfnan.h" void thnan_update(double & oval, double uval) { if (thisnan(oval)) oval = uval; } therion-5.4.1/thinfnan.h000066400000000000000000000055311307545355600151700ustar00rootroot00000000000000/** * @file thinfnan.h * Therion number constants. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinfnan_h #define thinfnan_h #include // nan handling #ifdef NAN #ifdef THLINUX #define thnan NAN #define thisnan isnan #else #define thnan -9e99 #define thisnan(number) (number == thnan) #endif #else #define thnan -9e99 #define thisnan(number) (number == thnan) #endif // infinity handling #ifdef INFINITY #ifdef THLINUX #define thinf INFINITY // Linux C isinf() returns -1/0/1, but C++11 isinf() returns bool. #define thisinf(number) (isinf(number) ? (number < 0 ? -1 : 1) : 0) #else #define thinf 1e100 #define thisinf(number) (number >= thinf ? 1 : (number <= -thinf ? -1 : 0)) #endif #else #define thinf 1e100 #define thisinf(number) (number >= thinf ? 1 : (number <= -thinf ? -1 : 0)) #endif /** * Update double variable if nan. * * @param oval Original value * @param uval Update value */ void thnan_update(double & oval, double uval); /** * A inf nan printing macro. * * -Inf -> -999.999 * Inf -> 999.999 * NaN -> 1000.0001 */ #define thinn(cislo) (thisnan(cislo) ? 1000.0001 : \ (thisinf(cislo) == 1 ? 999.999 : \ (thisinf(cislo) == -1 ? -999.999 : cislo))) // infnan.h #endif /** * Print number in nan format. */ #define thprintinfnan(cislo) {\ if (thisnan(cislo)) \ thprintf("thnan"); \ else if (thisinf(cislo) == 1) \ thprintf("thinf"); \ else if (thisinf(cislo) == -1) \ thprintf("-thinf"); \ else \ thprintf("%lg",cislo);} #define THPI 3.1415926535898 #define thnanpow2(cislo) ((thisnan(cislo) ? 0.0 : cislo) * (thisnan(cislo) ? 0.0 : cislo)) #define thdxyz2length(dx,dy,dz) (sqrt(thnanpow2(dx) + thnanpow2(dy) + thnanpow2(dz))) #define thdxyz2b(dx,dy,dz) (270 - (atan2(dy,dx) / THPI * 180.0 + 180)) #define thdxyz2bearing(dx,dy,dz) (thdxyz2b(dx,dy,dz) < 0.0 ? thdxyz2b(dx,dy,dz) + 360.0 : thdxyz2b(dx,dy,dz)) #define thdxyz2clino(dx,dy,dz) (atan2(dz,sqrt(thnanpow2(dx) + thnanpow2(dy))) / THPI * 180.0) therion-5.4.1/thinit.cxx000066400000000000000000000477601307545355600152470ustar00rootroot00000000000000/** * @file thinit.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinit.h" #include "thparse.h" #include "thchenc.h" #include "therion.h" #include "thconfig.h" #include "thexception.h" #include "thtexfonts.h" #include "thlang.h" #include "thlocale.h" #include "thtmpdir.h" #include "thcs.h" #ifdef THWIN32 #include #endif #ifdef THMSVC #define snprintf _snprintf #define strcasecmp _stricmp #endif const char * THCCC_INIT_FILE = "### Output character encodings ###\n" "# encoding-default ASCII\n" "# encoding-sql ASCII\n\n" "### Default regional settings ###\n" "# language en_GB\n" "# units metric\n\n" "### Preferred loop closure method\n" "# loop-closure survex\n\n" "### Paths to called executable files ###\n" "# mpost-path \"mpost\"\n" "# mpost-options \"-tex=etex\"\n" "# pdftex-path \"pdfetex\"\n" "# cavern-path \"cavern\"\n" "# convert-path \"convert\"\n" "# identify-path \"identify\"\n\n" "### Search paths for source and configuration files ###\n" "# source-path \"\"\n\n" "### Tex initialization ###\n" "# tex-env off\n" "# tex-fonts \n" "# tex-fonts raw cmr10 cmti10 cmbx10 cmss10 cmssi10\n" "# tex-fonts-optional xl2 csr10 csti10 csbx10 csss10 csssi10\n\n" "# tex-fonts-optional cmcyr cmcyr10 cmcti10 cmcbx10 cmcss10 cmcssi10\n\n" "### PDF fonts initialization\n" "# otf2pfb off\n" "# pdf-fonts \n\n" "### Path to temporary directory ###\n" "# tmp-path \"\"\n\n" "### User defined coordinate system ###\n" "# cs-def [other options]\n\n" "### Command to remove temporary directory ###\n" "# tmp-remove \"\"\n\n"; thinit::thinit() { this->fonts_ok = false; this->tex_env = false; this->lang = THLANG_UNKNOWN; this->loopc = THINIT_LOOPC_UNKNOWN; } thinit::~thinit() { } enum { TTIC_ENCODING_DEFAULT, TTIC_ENCODING_SQL, TTIC_PATH_CAVERN, // TTIC_PATH_3DTOPOS, TTIC_PATH_CONVERT, TTIC_PATH_IDENTIFY, TTIC_PATH_MPOST, TTIC_OPT_MPOST, TTIC_PATH_PDFTEX, TTIC_PATH_SOURCE, TTIC_TMP_PATH, TTIC_TMP_REMOVE_SCRIPT, TTIC_LANG, TTIC_TEX_FONTS, TTIC_TEX_FONTS_OPTIONAL, TTIC_TEX_ENV, TTIC_UNITS, TTIC_LOOPC, TTIC_TEXT, TTIC_PDF_FONTS, TTIC_OTF2PFB, TTIC_CS_DEF, TTIC_UNKNOWN, }; /** * Data types parsing table. */ static const thstok thtt_initcmd[] = { {"cavern-path", TTIC_PATH_CAVERN}, {"convert-path", TTIC_PATH_CONVERT}, {"cs-def", TTIC_CS_DEF}, {"encoding-default", TTIC_ENCODING_DEFAULT}, {"encoding-sql", TTIC_ENCODING_SQL}, // {"encoding_default", TTIC_ENCODING_DEFAULT}, // {"path_3dtopos", TTIC_PATH_3DTOPOS}, {"identify-path", TTIC_PATH_IDENTIFY}, {"language", TTIC_LANG}, {"loop-closure", TTIC_LOOPC}, {"mpost-options", TTIC_OPT_MPOST}, {"mpost-path", TTIC_PATH_MPOST}, {"otf2pfb", TTIC_OTF2PFB}, {"pdf-fonts", TTIC_PDF_FONTS}, {"pdftex-path", TTIC_PATH_PDFTEX}, {"source-path", TTIC_PATH_SOURCE}, {"tex-env",TTIC_TEX_ENV}, {"tex-fonts",TTIC_TEX_FONTS}, {"tex-fonts-optional",TTIC_TEX_FONTS_OPTIONAL}, {"text",TTIC_TEXT}, {"tmp-path",TTIC_TMP_PATH}, {"tmp-remove",TTIC_TMP_REMOVE_SCRIPT}, {"units",TTIC_UNITS}, {NULL, TTIC_UNKNOWN}, }; void thinit__print_open(char * s) { #ifdef THDEBUG thprintf("\ninitialization file: %s\nreading\n", s); #else thprintf("initialization file: %s\n", s); thprintf("reading ..."); thtext_inline = true; #endif } static const thstok thtt_loopc[] = { {"survex", THINIT_LOOPC_SURVEX}, {"therion", THINIT_LOOPC_THERION}, {NULL, THINIT_LOOPC_UNKNOWN}, }; #ifdef THWIN32 thbuffer short_path_buffer; void thinit__make_short_path(thbuffer * bf) { DWORD rv; size_t sl; sl = strlen(bf->get_buffer()); if (sl == 0) return; short_path_buffer.guarantee(2 * sl); rv = GetShortPathName(bf->get_buffer(), short_path_buffer.get_buffer(), (DWORD) short_path_buffer.size); if ((rv > 0) && (rv < (DWORD) short_path_buffer.size)) { bf->strcpy(short_path_buffer.get_buffer()); } } #endif void thinit::copy_fonts() { if (ENC_NEW.NFSS == 0) return; static thbuffer tmpb; int retcode; if (fonts_ok) return; thprintf("copying_fonts ...\n"); for(int index = 0; index < 5; index++) { thprintf("%s\n", font_dst[index].c_str()); // skopiruje font subor #ifdef THWIN32 tmpb = "copy \""; #else tmpb = "cp \""; #endif tmpb += font_src[index].c_str(); tmpb += "\" \""; tmpb += thtmp.get_file_name(font_dst[index].c_str()); tmpb += "\""; #ifdef THWIN32 char * cpcmd; size_t cpch; cpcmd = tmpb.get_buffer(); for(cpch = 0; cpch < strlen(cpcmd); cpch++) { if (cpcmd[cpch] == '/') { cpcmd[cpch] = '\\'; } } #endif #ifdef THDEBUG thprintf("copying font\n"); #endif retcode = system(tmpb.get_buffer()); if (retcode != EXIT_SUCCESS) ththrow(("unable to copy font file -- %s", font_src[index].c_str())) } #ifdef THWIN32 FILE * f = fopen(thtmp.get_file_name("pltotf.bat"),"w"); fprintf(f,"@\"%s\\bin\\win32\\pltotf.exe\" %%1 %%2\n",thcfg.install_path.get_buffer()); fclose(f); f = fopen(thtmp.get_file_name("cfftot1.bat"),"w"); fprintf(f,"@\"%s\\bin\\win32\\cfftot1.exe\" %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9\n",thcfg.install_path.get_buffer()); fclose(f); #endif thprintf("done.\n"); fonts_ok = true; } int thinit::get_lang() { return thlang_getlang(this->lang); } void thinit::check_font_path(const char * fname, int index) { static thbuffer pfull, pshort, tmpb; pshort.strcpy(""); pfull.strcpy(""); long i, l; tmpb = fname; char * buff = tmpb.get_buffer(); l = (long) strlen(buff); bool search_sn = true; if (l == 0) ththrow(("missing font file name")); for(i = (l-1); i >= 0; i--) { if ((buff[i] == '/') || (buff[i] == '\\')) { if (search_sn) { pshort.strcpy(&(buff[i+1])); search_sn = false; } buff[i] = '/'; } } if (strlen(pshort.get_buffer()) == 0) ththrow(("invalid font name -- %s", fname)) if ( #ifdef THWIN32 ((l > 1) && (buff[1] == ':')) || #endif (buff[0] == '/')) { pfull.strcpy(buff); } else { if (strlen(this->ini_file.get_cif_path()) > 0) { pfull.strcpy(this->ini_file.get_cif_path()); pfull += "/"; } else { pfull = ""; } pfull += buff; } // checkne ci TTF if ((l > 3) && (strcasecmp(&(buff[l-4]), ".ttf")) == 0) ENC_NEW.t1_convert = 0; font_src[index] = pfull.get_buffer(); font_dst[index] = pshort.get_buffer(); ENC_NEW.otf_file[index] = pshort.get_buffer(); } void thinit::load() { // set encodings this->encoding_default = TT_ASCII; this->encoding_sql = TT_UNKNOWN_ENCODING; ENC_NEW.NFSS = 0; ENC_NEW.t1_convert = 1; this->opt_mpost = ""; // set programs paths this->path_cavern = "cavern"; #ifdef THWIN32 // set cavern path according to Windows registers this->path_cavern.guarantee(1024); thmbuffer mbf; thbuffer bf; DWORD type(0), length = 1024; HKEY key; bool loaded_ok = true; if (RegOpenKey(HKEY_CLASSES_ROOT,"survex.source\\shell\\Process\\command",&key) != ERROR_SUCCESS) loaded_ok = false; if (!loaded_ok) { // VG120416: search also the HKCU in case an old Survex versions was installed as non-admin if (RegOpenKey(HKEY_CURRENT_USER,"survex.source\\shell\\Process\\command",&key) != ERROR_SUCCESS) loaded_ok = false; } if (!loaded_ok || (RegQueryValueEx(key,NULL,NULL,&type,(BYTE *)this->path_cavern.get_buffer(),&length) != ERROR_SUCCESS)) { loaded_ok = false; RegCloseKey(key); } if (loaded_ok) RegCloseKey(key); if (type != REG_SZ) loaded_ok = false; if (loaded_ok) { thsplit_args(&mbf,this->path_cavern.get_buffer()); this->path_cavern = *(mbf.get_buffer()); // VG 120416: Replace "aven.exe" with "cavern.exe". New Survex versions write up aven, but therion needs cavern // See http://mailman.speleo.sk/pipermail/therion/2015-September/006072.html int pathlen = strlen(this->path_cavern.get_buffer()); int suflen = strlen("aven.exe"); if ((pathlen > suflen) && (strncmp(this->path_cavern.get_buffer() + pathlen - suflen, "aven.exe", suflen ) == 0)) { this->path_cavern.get_buffer()[pathlen - strlen("aven.exe")] = 0; this->path_cavern.strcat("cavern.exe"); } } else { this->path_cavern = "cavern"; } #endif // try running survex if (this->loopc == THINIT_LOOPC_UNKNOWN) { thbuffer svxcom; svxcom = "\""; svxcom += thini.get_path_cavern(); svxcom += "\" --version"; #ifdef THDEBUG thprintf("testing cavern\n"); #endif if (system(svxcom.get_buffer()) == EXIT_SUCCESS) { this->loopc = THINIT_LOOPC_SURVEX; } else { this->loopc = THINIT_LOOPC_THERION; } } // this->path_3dtopos = "3dtopos"; #ifdef THWIN32 if (thcfg.install_tex) { this->path_mpost = thcfg.install_path.get_buffer(); this->path_pdftex = thcfg.install_path.get_buffer(); this->path_otftotfm = thcfg.install_path.get_buffer(); this->path_mpost += "\\bin\\win32\\mpost.exe"; this->path_pdftex += "\\bin\\win32\\pdfetex.exe"; this->path_otftotfm += "\\bin\\win32\\otftotfm.exe"; } else { #endif this->path_mpost = "mpost"; this->path_pdftex = "pdfetex"; this->path_otftotfm = "otftotfm"; #ifdef THWIN32 } #endif #ifdef THWIN32 if (thcfg.install_im) { this->path_convert = thcfg.install_path.get_buffer(); this->path_convert += "\\bin\\convert.exe"; this->path_identify = thcfg.install_path.get_buffer(); this->path_identify += "\\bin\\identify.exe"; } else { #endif this->path_convert = "convert"; this->path_identify = "identify"; #ifdef THWIN32 } #endif this->tmp_path = ""; this->tmp_remove_script = ""; this->lang = THLANG_UNKNOWN; char * cmdln; char ** args; int nargs, argid, sv; //, argid2; fontrecord frec; bool some_tex_fonts = false, started = false; this->ini_file.set_search_path(thcfg.get_initialization_path()); this->ini_file.set_file_name("therion.ini"); this->ini_file.sp_scan_on(); this->ini_file.cmd_sensitivity_off(); this->ini_file.print_if_opened(thinit__print_open, &started); this->ini_file.reset(); try { while((cmdln = this->ini_file.read_line()) != NULL) { thsplit_args(& this->cmb, cmdln); args = this->cmb.get_buffer(); nargs = this->cmb.get_size(); argid = thmatch_token(args[0], thtt_initcmd); // check number of arguments: switch (argid) { case TTIC_ENCODING_DEFAULT: case TTIC_PATH_CAVERN: case TTIC_PATH_CONVERT: case TTIC_PATH_IDENTIFY: case TTIC_LOOPC: case TTIC_TMP_PATH: case TTIC_LANG: case TTIC_UNITS: case TTIC_TMP_REMOVE_SCRIPT: case TTIC_PATH_MPOST: case TTIC_OPT_MPOST: case TTIC_PATH_PDFTEX: case TTIC_PATH_SOURCE: case TTIC_OTF2PFB: case TTIC_TEX_ENV: if (nargs != 2) ththrow(("invalid number of command arguments")); break; case TTIC_TEXT: if (nargs != 4) ththrow(("invalid text syntax -- should be: text ")) break; case TTIC_PDF_FONTS: if (nargs != 6) ththrow(("invalid number of command arguments")); break; case TTIC_TEX_FONTS: case TTIC_TEX_FONTS_OPTIONAL: if (nargs != 7) ththrow(("invalid number of command arguments")); break; case TTIC_CS_DEF: if (nargs < 2) ththrow(("invalid cs-def syntax -- should be: cs-def [other options]")) break; default: ththrow(("invalid initialization command -- %s", args[0])) } switch(argid) { case TTIC_CS_DEF: thcs_add_cs(args[1], args[2], nargs - 2, &(args[3])); break; case TTIC_ENCODING_DEFAULT: this->encoding_default = thparse_encoding(args[1]); break; case TTIC_ENCODING_SQL: this->encoding_sql = thparse_encoding(args[1]); break; case TTIC_PATH_CAVERN: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_cavern.strcpy(args[1]); break; case TTIC_PATH_CONVERT: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_convert.strcpy(args[1]); break; case TTIC_PATH_IDENTIFY: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_identify.strcpy(args[1]); break; case TTIC_TMP_PATH: this->tmp_path.strcpy(args[1]); break; case TTIC_LANG: this->lang = thlang_parse(args[1]); if (this->lang == THLANG_UNKNOWN) ththrow(("language not supported -- %s",args[1])) break; case TTIC_UNITS: thdeflocale.parse_units(args[1]); break; case TTIC_OTF2PFB: sv = thmatch_token(args[1], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid otf2pfb switch -- %s", args[1])) ENC_NEW.t1_convert = (sv == TT_TRUE); break; case TTIC_TEXT: thlang_set_translation(args[1], args[2], args[3]); break; case TTIC_TMP_REMOVE_SCRIPT: this->tmp_remove_script.strcpy(args[1]); break; case TTIC_PATH_MPOST: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_mpost.strcpy(args[1]); break; case TTIC_OPT_MPOST: this->opt_mpost.strcpy(args[1]); break; case TTIC_PATH_PDFTEX: if (strlen(args[1]) < 1) ththrow(("invalid path")) this->path_pdftex.strcpy(args[1]); break; case TTIC_PATH_SOURCE: thcfg.set_search_path(args[1]); break; case TTIC_TEX_FONTS_OPTIONAL: case TTIC_TEX_FONTS: frec.id = get_enc_id(args[1]); if (frec.id < 0) ththrow(("tex encoding not supported -- %s", args[1])) frec.rm = args[2]; frec.it = args[3]; frec.bf = args[4]; frec.ss = args[5]; frec.si = args[6]; frec.opt = (argid == TTIC_TEX_FONTS_OPTIONAL); FONTS.push_back(frec); some_tex_fonts = true; break; case TTIC_PDF_FONTS: // TODO: parsne nazvy suborov, nastavi t1_convert, ENC_NEW.NFSS = 1; check_font_path(args[1], 0); check_font_path(args[2], 1); check_font_path(args[3], 2); check_font_path(args[4], 3); check_font_path(args[5], 4); break; case TTIC_TEX_ENV: sv = thmatch_token(args[1], thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid tex-env switch -- %s", args[1])) this->tex_env = (sv == TT_TRUE); break; case TTIC_LOOPC: sv = thmatch_token(args[1], thtt_loopc); if (sv == THINIT_LOOPC_UNKNOWN) ththrow(("invalid loop-closure switch -- %s", args[1])) this->loopc = sv; break; default: ththrow(("invalid initialization command -- %s", args[0])) } } } catch (...) threthrow(("%s [%d]", this->ini_file.get_cif_name(), this->ini_file.get_cif_line_number())) if (started) { #ifdef THDEBUG thprintf("\n"); #else thprintf(" done\n"); thtext_inline = false; #endif } if (!some_tex_fonts) init_encodings(); #ifdef THWIN32 thinit__make_short_path(&this->path_cavern); thinit__make_short_path(&this->path_convert); thinit__make_short_path(&this->path_identify); thinit__make_short_path(&this->path_mpost); thinit__make_short_path(&this->path_pdftex); #endif // check if optional fonts are in the system, remove them if not #ifdef THWIN32 if (!thini.tex_env) { putenv("TEXMFCNF="); putenv("DVIPSHEADERS="); putenv("GFFONTS="); putenv("GLYPHFONTS="); putenv("MFBASES="); putenv("MFINPUTS="); putenv("MFPOOL="); putenv("MPINPUTS="); putenv("MPMEMS="); putenv("MPPOOL="); putenv("MPSUPPORT="); putenv("PKFONTS="); putenv("PSHEADERS="); putenv("T1FONTS="); putenv("T1INPUTS="); putenv("T42FONTS="); putenv("TEXCONFIG="); putenv("TEXDOCS="); putenv("TEXFONTMAPS="); putenv("TEXFONTS="); putenv("TEXFORMATS="); putenv("TEXINPUTS="); putenv("TEXMFDBS="); putenv("TEXMFINI="); putenv("TEXPICTS="); putenv("TEXPKS="); putenv("TEXPOOL="); putenv("TEXPSHEADERS="); putenv("TEXSOURCES="); putenv("TFMFONTS="); putenv("TTFONTS="); putenv("VFFONTS="); putenv("WEB2C="); #ifdef THMSVC putenv("TEXINPUTS=../tex;../../therion.prj/Setup/texmf/tex;."); putenv("MPINPUTS=../mpost;."); if (ENC_NEW.NFSS == 1) { putenv("TEXFONTS=."); putenv("T1FONTS=."); putenv("TTFFONTS=."); } #endif } #endif list TMPFONTS; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) { if (J->opt) { FILE * ff = fopen(thtmp.get_file_name("fonttest.tex"),"w"); fprintf(ff,"\\nopagenumbers\n\\batchmode\n\\def\\fonttest#1{\\font\\a=#1\\a}\n\\fonttest{%s}\n\\fonttest{%s}\n\\fonttest{%s}\n\\fonttest{%s}\n\\fonttest{%s}\n\\end", J->rm.c_str(), J->it.c_str(), J->bf.c_str(), J->ss.c_str(), J->si.c_str()); fclose(ff); thbuffer com, wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); chdir(thtmp.get_dir_name()); int retcode; com = "\""; com += this->get_path_pdftex(); com += "\""; // com += " --interaction nonstopmode data.tex"; com += " fonttest.tex"; retcode = system(com.get_buffer()); thprintf("checking optional fonts %s %s %s %s %s ...", J->rm.c_str(), J->it.c_str(), J->bf.c_str(), J->ss.c_str(), J->si.c_str()); if (retcode != EXIT_SUCCESS) { thprintf(" NOT INSTALLED\n"); } else { TMPFONTS.push_back(*J); thprintf(" OK\n"); } chdir(wdir.get_buffer()); } else { TMPFONTS.push_back(*J); } } FONTS.clear(); for (list::iterator J = TMPFONTS.begin(); J != TMPFONTS.end(); J++) { FONTS.push_back(*J); } } char * thinit::get_path_cavern() { return this->path_cavern.get_buffer(); } char * thinit::get_path_convert() { return this->path_convert.get_buffer(); } char * thinit::get_path_identify() { return this->path_identify.get_buffer(); } //char * thinit::get_path_3dtopos() //{ // return this->path_3dtopos.get_buffer(); //} char * thinit::get_path_mpost() { return this->path_mpost.get_buffer(); } char * thinit::get_opt_mpost() { return this->opt_mpost.get_buffer(); } char * thinit::get_path_pdftex() { return this->path_pdftex.get_buffer(); } char * thinit::get_path_otftotfm() { return this->path_otftotfm.get_buffer(); } void thprint_init_file() { thprintf(THCCC_INIT_FILE); } int thinit::get_encoding(int type) { int res; switch (type) { case THINIT_ENCODING_SQL: res = this->encoding_sql; break; default: res = this->encoding_default; break; } if (res == TT_UNKNOWN_ENCODING) res = this->encoding_default; return res; } thinit thini; therion-5.4.1/thinit.h000066400000000000000000000056271307545355600146700ustar00rootroot00000000000000/** * @file thinit.h * Initialization class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinit_h #define thinit_h #include #include "thbuffer.h" #include "thmbuffer.h" #include "thinput.h" /** * Therion system dependend properties initializer. */ enum { THINIT_ENCODING_DEFAULT, THINIT_ENCODING_SQL, }; enum { THINIT_LOOPC_UNKNOWN = 0, THINIT_LOOPC_THERION, THINIT_LOOPC_SURVEX, }; class thinit { public: int encoding_default, encoding_sql; ///< Default encoding. thbuffer path_cavern, ///< Survex executable full path. path_pdftex, path_mpost, ///< PDF tex and metapost path opt_mpost, path_otftotfm, path_convert, path_identify, ///< Path to ImageMagick convert and identify executables. tmp_path, tmp_remove_script; //path_3dtopos, std::string font_src[5], font_dst[5]; bool tex_env, fonts_ok; int lang, loopc; thmbuffer cmb; ///< Command parsing mbuffer. thinput ini_file; ///< Initialization file. /** * Standard constructor. */ thinit(); /** * Destructor. */ ~thinit(); /** * Load initialization file. */ void load(); /** * Copy fonts to temporary folder. */ void copy_fonts(); /** * Return cavern executable path. */ char * get_path_cavern(); /** * Return ImageMagick convert executable path. */ char * get_path_convert(); /** * Return ImageMagick identify executable path. */ char * get_path_identify(); /** * Return metapost options. */ char * get_opt_mpost(); /** * Return metapost executable path. */ char * get_path_mpost(); char * get_path_otftotfm(); /** * Return pdftex executable path. */ char * get_path_pdftex(); int get_lang(); void check_font_path(const char * fname, int index); int get_encoding(int type = THINIT_ENCODING_DEFAULT); }; /** * Print initialization file. */ void thprint_init_file(); /** * Initialization module. */ extern thinit thini; #endif therion-5.4.1/thinput.cxx000066400000000000000000000276211307545355600154350ustar00rootroot00000000000000/** * @file thinput.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thinput.h" #include "thparse.h" #include "thchenc.h" #include "therion.h" #include "thexception.h" #define THMAXFREC 64 const long thinput::max_line_size = 8128; enum {TT_UNKNOWN_INPUT, TT_INPUT, TT_ENCODING}; static const thstok thtt_input[] = { {"encoding", TT_ENCODING}, {"input", TT_INPUT}, {NULL, TT_UNKNOWN_INPUT} }; thinput::ifile::ifile(ifile * fp) { this->lnumber = 0; this->encoding = TT_UTF_8; this->prev_ptr = fp; this->next_ptr = NULL; } thinput::ifile::~ifile() { this->close(); delete this->next_ptr; } void thinput::ifile::close() { if (this->sh.is_open()) { this->sh.close(); this->sh.clear(); this->lnumber = 0; } } bool thinput::ifile::is_equal( #ifdef THMSVC struct _stat #else struct stat #endif * buf) { if ((this->st.st_ino == buf->st_ino) && \ (this->st.st_dev == buf->st_dev)) return true; else return false; } thinput::thinput() { this->cmd_sensitivity = true; this->input_sensitivity = true; this->scan_search_path = false; this->first_ptr = new ifile(NULL); this->last_ptr = this->first_ptr; this->lnbuffer = new char [thinput::max_line_size]; this->pifo = false; this->pifoid = NULL; this->pifoproc = NULL; this->report_missing = false; } thinput::~thinput() { delete this->first_ptr; delete this->lnbuffer; } void thinput::set_cmd_sensitivity(bool cs) { this->cmd_sensitivity = cs; if (!cs) { this->cmdbf = ""; this->valuebf = ""; } } void thinput::cmd_sensitivity_on() { this->cmd_sensitivity = true; } void thinput::cmd_sensitivity_off() { this->cmd_sensitivity = false; this->cmdbf = ""; this->valuebf = ""; } bool thinput::get_cmd_sensitivity() { return this->cmd_sensitivity; } void thinput::set_sp_scan(bool spss) { this->scan_search_path = spss; } void thinput::sp_scan_on() { this->scan_search_path = true; } void thinput::sp_scan_off() { this->scan_search_path = false; } bool thinput::get_sp_scan() { return this->scan_search_path; } void thinput::set_file_name(const char * fname) { this->file_name = fname; } char * thinput::get_file_name() { return this->file_name; } void thinput::set_search_path(const char * spath) { this->search_path.clear(); #ifdef THWIN32 thsplit_paths(& this->search_path, spath, ';'); #else thsplit_paths(& this->search_path, spath, ':'); #endif } void thinput::set_file_suffix(const char * fsx) { this->file_suffix.clear(); thsplit_strings(& this->file_suffix, fsx, ':'); } void thinput::open_file(char * fname) { char * srcfile = NULL; if (this->last_ptr->sh.is_open()) srcfile = this->last_ptr->name; // as first, let's find appropriate ifile ifile * ifptr; ifptr = this->last_ptr; while (ifptr->sh.is_open() && (ifptr->next_ptr != NULL)) ifptr = ifptr->next_ptr; if (ifptr->sh.is_open() && (ifptr->next_ptr == NULL)) { ifptr->next_ptr = new ifile(ifptr); ifptr = ifptr->next_ptr; } // now, let's open the file // first let's set the path to source file path if (srcfile != NULL) thsplit_fpath(&ifptr->path, srcfile); else ifptr->path = ""; int ix = -1; long paths = this->search_path.get_size(), sfxid, sfxs = this->file_suffix.get_size(); char ** sfx = this->file_suffix.get_buffer(); char ** pths = this->search_path.get_buffer(); size_t ifptr_psz; char ifptr_plc; while ((!ifptr->sh.is_open()) && (ix < paths)) { // let's try the name without suffixes ifptr_psz = strlen(ifptr->path.get_buffer()); ifptr_plc = (ifptr_psz > 0 ? ifptr->path.get_buffer()[ifptr_psz-1] : 0); if (ifptr_psz > 0) { ifptr->name = ifptr->path; if (ifptr_plc != '/') ifptr->name += "/"; ifptr->name += fname; } else ifptr->name = fname; ifptr->sh.clear(); ifptr->sh.open(ifptr->name); //, ios::in | ios::nocreate // if not successful, try with suffixes sfxid = 0; while ((!ifptr->sh.is_open()) && (sfxid < sfxs)) { if (ifptr_psz > 0) { ifptr->name = ifptr->path; if (ifptr_plc != '/') ifptr->name += "/"; ifptr->name += fname; } else ifptr->name = fname; ifptr->name += sfx[sfxid]; ifptr->sh.clear(); ifptr->sh.open(ifptr->name); //, ios::in | ios::nocreate sfxid++; } // if still no success, try with search path ix++; if (ix < paths) ifptr->path = pths[ix]; } // if file was open, now let's try if not recursive inclusion ifile * tmptr; bool is_rec = false; unsigned int n_rec = 0; if (!ifptr->sh.is_open()) { if ((srcfile != NULL) || (this->report_missing)) { ththrow(("can't open file for input -- %s", \ fname)); } } else { #ifdef THMSVC _stat #else stat #endif (ifptr->name.get_buffer(), &ifptr->st); tmptr = ifptr->prev_ptr; #ifdef THWIN32 while ((tmptr != NULL) && (n_rec < THMAXFREC)) { #else while ((tmptr != NULL) && !is_rec) { #endif is_rec = is_rec || tmptr->is_equal(&ifptr->st); tmptr = tmptr->prev_ptr; n_rec++; } #ifdef THWIN32 if (n_rec == THMAXFREC) { therror(("%s [%d] -- too many file inclusions -- probably input recursion -- %s", \ this->get_cif_name(), this->get_cif_line_number(), fname)); } #else if (is_rec) { therror(("%s [%d] -- recursive file inclusion -- %s", \ this->get_cif_name(), this->get_cif_line_number(), fname)); } #endif else { this->last_ptr = ifptr; if (this->pifo) { if (this->pifoproc != NULL) this->pifoproc(ifptr->name.get_buffer()); if (this->pifoid != NULL) *(this->pifoid) = true; this->pifo = false; this->pifoid = NULL; this->pifoproc = NULL; } #ifdef THDEBUG thprintf("open file -- %s\n", this->last_ptr->name.get_buffer()); #endif } } } void thinput::close_file() { if (this->last_ptr->sh.is_open()) { #ifdef THDEBUG thprintf("close file -- %s\n", this->last_ptr->name.get_buffer()); #endif this->last_ptr->close(); if (this->last_ptr->prev_ptr != NULL) { this->last_ptr = this->last_ptr->prev_ptr; // Is next cmd it really like this ????? this->last_ptr->next_ptr = NULL; } } } void thinput::reset() { // first, let's close all open files ifile * iptr = this->first_ptr; while(iptr != NULL) { iptr->close(); iptr = iptr->next_ptr; } // set pointer to the first ifile this->last_ptr = this->first_ptr; this->open_file(this->file_name); } char * thinput::read_line() { int ln_state = 0; bool mline = false; long lnlen; //, idx; char * idxptr; while (ln_state == 0) { // first, check if any input available if (!this->last_ptr->sh.is_open()) { ln_state = -1; break; } // check eof state of last open file if (this->last_ptr->sh.eof()) { this->close_file(); continue; } // OK, we can read the line this->last_ptr->sh.getline(this->lnbuffer, thinput::max_line_size); this->last_ptr->lnumber++; // Check, if reading was OK. if (this->last_ptr->sh.fail() && (!(this->last_ptr->sh.eof()))) { therror(("%s [%d] -- line too long", \ this->get_cif_name(), this->get_cif_line_number())); } // now let's find last non white character lnlen = (long)strlen(this->lnbuffer); idxptr = this->lnbuffer + lnlen - 1; while ((lnlen > 0) && (*idxptr < 33)) { idxptr--; lnlen--; } // empty line read if ((lnlen == 0) && !mline) continue; // join backslash ended lines together if (*idxptr == '\\') { if (mline) { this->linebf.strncat(this->lnbuffer, lnlen - 1); } else { this->linebf.strncpy(this->lnbuffer, lnlen - 1); mline = true; } continue; } else { if (mline) this->linebf.strncat(this->lnbuffer, lnlen); else this->linebf.strncpy(this->lnbuffer, lnlen); } mline = false; // we've something regular in the linebf // split into cmd & value & interpret commands if (this->cmd_sensitivity) { thsplit_word(&this->cmdbf, &this->valuebf, this->linebf.get_buffer()); thsplit_args(&this->tmpmb, this->valuebf.get_buffer()); // check if comment if (*(this->cmdbf.get_buffer()) == '#') continue; // interpret commands switch (thmatch_token(this->cmdbf.get_buffer(), thtt_input)) { case TT_INPUT: if (this->input_sensitivity) { if (this->tmpmb.get_size() != 1) therror(("%s [%d] -- one input file name expected -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())) else this->open_file(*(this->tmpmb.get_buffer())); } continue; case TT_ENCODING: if (this->tmpmb.get_size() != 1) therror(("%s [%d] -- encoding name expected -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())); this->last_ptr->encoding = \ thmatch_token(*(this->tmpmb.get_buffer()), thtt_encoding); if (this->last_ptr->encoding == TT_UNKNOWN_ENCODING) { therror(("%s [%d] -- unknown encoding -- %s", \ this->get_cif_name(), this->get_cif_line_number(), \ this->valuebf.get_buffer())); this->last_ptr->encoding = TT_UTF_8; } continue; } // interpret commands } // otherwise check if comment else { idxptr = this->linebf.get_buffer(); lnlen = (long)strlen(idxptr); while ((lnlen > 0) && (*idxptr < 33)) { lnlen--; idxptr++; } if (*idxptr == '#') continue; } // no comment, no command ln_state = 1; } if (ln_state == 1) return this->linebf.get_buffer(); else return NULL; } char * thinput::get_cmd() { return this->cmdbf.get_buffer(); } char * thinput::get_line() { return this->linebf.get_buffer(); } char * thinput::get_value() { return this->valuebf.get_buffer(); } char * thinput::get_cif_name() { return this->last_ptr->name.get_buffer(); } char * thinput::get_cif_path() { static thbuffer cifpath; thsplit_fpath(&cifpath, this->last_ptr->name.get_buffer()); return cifpath.get_buffer(); } unsigned long thinput::get_cif_line_number() { return this->last_ptr->lnumber; } int thinput::get_cif_encoding() { return this->last_ptr->encoding; } void thinput::print_if_opened(void (* pifop)(char *), bool * printed) { this->pifo = true; if (printed != NULL) this->pifoid = printed; this->pifoproc = pifop; } void thinput::set_input_sensitivity(bool s) { this->input_sensitivity = s; } bool thinput::get_input_sensitivity() { return this->input_sensitivity; } bool thinput::is_first_file() { return ((this->first_ptr == NULL) || (this->first_ptr->next_ptr == NULL)); } therion-5.4.1/thinput.h000066400000000000000000000134621307545355600150600ustar00rootroot00000000000000/** * @file thinput.h * Input file processing class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thinput_h #define thinput_h #ifndef THMSVC #include #endif #include #include "thbuffer.h" #include "thmbuffer.h" #include "thparse.h" #include /** * Input file processing class. * * This class provides standard functions, that work with therion input * and configuration files. */ class thinput { public: bool cmd_sensitivity, ///< Command sensitivity ID. input_sensitivity, /// < Whether dive into subfiles. scan_search_path, ///< Whether to scan also search path for input files. pifo, ///< Print if open. * pifoid, ///< Identifier. report_missing; thbuffer file_name; ///< Main input file name. thmbuffer search_path, ///< Search paths. file_suffix, ///< File suffixes. tmpmb; ///< Temporary multi buffer. void (* pifoproc)(char *); ///< Function to call if file was opened. thbuffer linebf, ///< Line buffer. cmdbf, ///< Command buffer. valuebf; ///< Value buffer. static const long max_line_size; char * lnbuffer; /** * Therion input file structure. */ class ifile { public: std::ifstream sh; ///< file stream. thbuffer name, ///< Input file name buffer. path; ///< Input file path buffer. unsigned long lnumber; /// Position at the file. int encoding; /// Current file encoding. ifile * prev_ptr, /// Pointer to the upper file. * next_ptr; /// Pointer to the lower file. #ifdef THMSVC struct _stat st; #else struct stat st; #endif /** * Standard constructor. */ ifile(ifile * fp); /** * Standard destructor. * * Also release next files. */ ~ifile(); /** * Close file if it's open. */ void close(); /** * Check if file statistics are equal. */ bool is_equal( #ifdef THMSVC struct _stat #else struct stat #endif * buf); }; ifile * first_ptr, ///< Pointer to the first file. * last_ptr; ///< Pointer to the last file. bool is_first_file(); /** * Open new file for input. */ void open_file(char * fname); /** * Close file open for input. */ void close_file(); public: /** * Standard constructor. */ thinput(); /** * Destructor. */ ~thinput(); /** * Set command sensitivity state. */ void set_cmd_sensitivity(bool cs); /** * Turn on command sensitivity. */ void cmd_sensitivity_on(); /** * Turn off command sensitivity. */ void cmd_sensitivity_off(); /** * Retrieve command sensitivity. */ bool get_cmd_sensitivity(); /** * Set search path scanning state. */ void set_sp_scan(bool spss); /** * Turn on search path scanning for input files. */ void sp_scan_on(); /** * Turn off search path scanning for input files. */ void sp_scan_off(); /** * Retrieve search path scanning state. */ bool get_sp_scan(); /** * Set main input file name. */ void set_file_name(const char * fname); /** * Retrieve main input file name. */ char * get_file_name(); /** * Set search path. */ void set_search_path(const char * spath); /** * Set possible file suffixes. * * Used, when unable to open input file. */ void set_file_suffix(const char * fsx); bool get_input_sensitivity(); void set_input_sensitivity(bool s); /** * Reset input. */ void reset(); /** * Reads line from input and return pointer to it. * * In fact, it does following: * - ignore comment lines (starting with #) * - join lines ended with backslash * - if command sensitivity is on, process also input and * encoding commands. * - if also serach path is enabled, program search input files * also there * - if some suffixes are set, program tries to find files * by adding these suffixes. */ char * read_line(); /** * Return command string. * * Applicable only in when cmd_sensitivity is on. */ char * get_cmd(); /** * Return line string. */ char * get_line(); /** * Return value string. * * Applicable only in when cmd_sensitivity is on. */ char * get_value(); /** * Return full current input file name. */ char * get_cif_name(); /** * Return current input file path. */ char * get_cif_path(); /** * Return current input line number. */ unsigned long get_cif_line_number(); /** * Return current input encoding. */ int get_cif_encoding(); /** * Text to print some file was opened. */ void print_if_opened(void (* pifop)(char *), bool * printed); }; #endif therion-5.4.1/thjoin.cxx000066400000000000000000000072051307545355600152310ustar00rootroot00000000000000/** * @file thjoin.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thjoin.h" #include "thexception.h" #include "thchenc.h" #include "thparse.h" thjoin::thjoin() { this->smooth = TT_TRUE; this->count = 1; this->proj = NULL; this->proj_next_join = NULL; this->proj_prev_join = NULL; this->first_item = NULL; this->last_item = NULL; } thjoin::~thjoin() { } int thjoin::get_class_id() { return TT_JOIN_CMD; } bool thjoin::is(int class_id) { if (class_id == TT_JOIN_CMD) return true; else return thdataobject::is(class_id); } int thjoin::get_cmd_nargs() { return 2; } const char * thjoin::get_cmd_end() { return NULL; } const char * thjoin::get_cmd_name() { return "join"; } thcmd_option_desc thjoin::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_join_opt); if (id == TT_JOIN_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thjoin::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dv; int sv; switch (cod.id) { // replace this by real properties setting case TT_JOIN_SMOOTH: this->smooth = thmatch_token(*args, thtt_bool); if (this->smooth == TT_UNKNOWN_BOOL) ththrow(("invalid switch -- %s",*args)) break; case TT_JOIN_COUNT: thparse_double(sv,dv,*args); if ((sv != TT_SV_NUMBER) || (dv <= 1.0) || (dv != double(int(dv)))) ththrow(("invalid join count -- %s",*args)) this->count = int(dv); break; // if not found, try to set fathers properties default: if (cod.id < 1000) this->parse_item(*args); else thdataobject::set(cod, args, argenc, indataline); } } void thjoin::self_delete() { delete this; } void thjoin::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thjoin:\n"); fprintf(outf,"\tsmooth: %d\n",this->smooth); if (this->first_item != NULL) { fprintf(outf,"\tjoined items:\n"); thdb2dji * cbl = this->first_item; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); if (cbl->mark != NULL) fprintf(outf,":%s",cbl->mark); fprintf(outf,"\n"); cbl = cbl->next_item; } } // insert intended print of object properties here } void thjoin::parse_item(char * istr) { thdb2dji * citem = this->db->db2d.insert_join_item(); citem->parse_item(istr); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } } int thjoin::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } therion-5.4.1/thjoin.h000066400000000000000000000060561307545355600146610ustar00rootroot00000000000000/** * @file thjoin.h * join module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thjoin_h #define thjoin_h #include "thdataobject.h" /** * join command options tokens. */ enum { TT_JOIN_UNKNOWN = 2000, TT_JOIN_SMOOTH = 2001, TT_JOIN_COUNT = 2002, }; /** * join command options parsing table. */ static const thstok thtt_join_opt[] = { {"count", TT_JOIN_COUNT}, {"smooth", TT_JOIN_SMOOTH}, {NULL, TT_JOIN_UNKNOWN}, }; /** * join class. */ class thjoin : public thdataobject { public: friend class thdb2d; class thdb2dji * first_item, * last_item; class thdb2dprj * proj; thjoin * proj_next_join, * proj_prev_join; int smooth, ///< Smooth option. count; ///< Number of joins. void parse_item(char * istr); ///< Parse join item. public: /** * Standard constructor. */ thjoin(); /** * Standard destructor. */ ~thjoin(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thjoin";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Get context for object. */ virtual int get_context(); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); }; #endif therion-5.4.1/thlang.cxx000066400000000000000000000077611307545355600152220ustar00rootroot00000000000000/** * @file thlang.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlang.h" #include "thparse.h" #include "thlangdata.cxx" #include "thinit.h" #include "thconfig.h" #include "thdatabase.h" #include "thexception.h" #include struct thlang_str { int m_lang; const char * m_text; thlang_str(int lang, const char * text) : m_lang(lang), m_text(text) {} }; bool operator < (const struct thlang_str & s1, const struct thlang_str & s2) { if (s1.m_lang < s2.m_lang) return true; if (s1.m_lang > s2.m_lang) return false; if (strcmp(s1.m_text, s2.m_text) < 0) return true; return false; } bool operator == (const struct thlang_str & s1, const struct thlang_str & s2) { if ((s1.m_lang == s2.m_lang) && (strcmp(s1.m_text, s2.m_text) == 0)) return true; return false; } typedef std::map thlang_str_map; thlang_str_map ulang_map; int thlang_parse(const char * str) { // Therion used to use the incorrect code "en_UK" for British English, so // map this to the correct code for backward compatibility. if (strcmp(str, "en_UK") == 0) { str = "en_GB"; } return thmatch_token(str, thtt_lang); } const char * thlang_getid(int id) { if (id < 0) { return "en"; } const char * rv = thmatch_string(thlang_getlang(id), thtt_lang); return rv; } const char * thlang_getcxxid(int id) { if (id < 0) return "THLANG_UNKNOWN"; else return thlang__cxxids[id]; } const thstok * thlang_get_text_table() { return &(thtt__texts[0]); } void thlang_set_translation(char * lang, char * text, char * translation) { int lang_id; lang_id = thlang_parse(lang); if (lang_id == THLANG_UNKNOWN) ththrow(("unknown language -- %s", lang)); int text_id; text_id = thmatch_token(text, thtt__texts); if (text_id == -1) { if ( (strncmp(text,"point u:",8) == 0) || (strncmp(text,"line u:",7) == 0) || (strncmp(text,"area u:",7) == 0)) { ulang_map[thlang_str(lang_id, thdb.strstore(text, true))] = thdb.strstore(translation); } else ththrow(("unknown text -- %s", text)) } else { thlang__translations[text_id][lang_id] = thdb.strstore(translation); } } const char * thT(const char * txt, int lng) { if (lng == THLANG_SYSTEM) return txt; int sv = thmatch_token(txt,thtt__texts); const char * trans; lng = thlang_getlang(lng); // najde ci ho mame v danom jazyku if (sv == -1) { thlang_str_map::iterator it = ulang_map.find(thlang_str(lng, txt)); if ((it == ulang_map.end()) && (thlang__alternatives[lng] != THLANG_UNKNOWN)) it = ulang_map.find(thlang_str(thlang__alternatives[lng], txt)); if (it == ulang_map.end()) return txt; else return it->second; } trans = thlang__translations[sv][lng]; if ((trans == NULL) && (thlang__alternatives[lng] != THLANG_UNKNOWN)) { trans = thlang__translations[sv][thlang__alternatives[lng]]; } if (trans != NULL) return trans; else return txt; } int thlang_getlang(int lng) { if (lng == THLANG_UNKNOWN) lng = thcfg.lang; if (lng == THLANG_UNKNOWN) lng = thini.lang; if (lng == THLANG_UNKNOWN) lng = THLANG_EN; return lng; } therion-5.4.1/thlang.h000066400000000000000000000026071307545355600146410ustar00rootroot00000000000000/** * @file thlang.h * Therion language translation module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlang_h #define thlang_h #include "thlangdata.h" #include "thparse.h" const char * thT(const char * txt, int lng = THLANG_UNKNOWN); int thlang_parse(const char * str); const char * thlang_getid(int id); const char * thlang_getcxxid(int id); int thlang_getlang(int lng); const thstok * thlang_get_text_table(); void thlang_set_translation(char * lang, char * text, char * translation); #endif therion-5.4.1/thlang/000077500000000000000000000000001307545355600144635ustar00rootroot00000000000000therion-5.4.1/thlang/Makefile000066400000000000000000000000711307545355600161210ustar00rootroot00000000000000all: perl process.pl update: perl process.pl update therion-5.4.1/thlang/process.pl000077500000000000000000000213111307545355600164770ustar00rootroot00000000000000#!/usr/bin/perl ## usage: ## ./process.pl - generate .cxx,.h sources from texts.txt ## ./process.pl update - find new strings to translate and load all ## texts_xy.txt into texts.txt ## ./process.pl export[-empty] xy - export texts_xy.txt with texts ## for translation. If export-empty is used, only untranslated strings ## are exported @trans_sources = ( "../thsymbolset.cxx", "../thexpmap.cxx", "../thlocale.cxx", "../thmapstat.cxx", "../thpdf.cxx", ); sub read_lang_file { # nacita subor do hashu a vrati na neho referenciu my $fn = shift; my $lcode = shift; my $src = shift; open(INP,"$fn") || die("error: can't open $fn for input\n"); if (defined($lcode)) { $lcode = check_language($lcode); } else { $lcode = ""; } my %res; if (defined($src)) { %res = %{$src}; } else { %res = (); } my $itm = ""; my $lnum = 0; my $cmnt = ""; while ($ln = ) { $lnum++; # print "LINE: $ln"; if ($ln =~ /^\s*(\#.*)/) { $cmnt .= "$1\n"; # print "COMMENT\n"; next; } elsif ($ln =~ /^\s*therion\:\s*(.*\S)\s*$/) { $itm = $1; $res{$itm}{therion} = $lnum; $res{$itm}{"therion-cmnt"} = $cmnt; $cmnt = ""; # print "THERION: $itm\n"; } elsif (($ln =~ /^\s*(\w+)\:\s*(.*\S)\s*$/) && (length($itm) > 0)) { ($lng, $trn) = ($1, $2); $clng = check_language($lng); if (length($lng) == 0) { warn("warning: invalid language \"$lng\" ($fn:$lnum)\n"); } if ((length($lcode) == 0) || (substr($clng,0,2) eq $lcode)) { $res{$itm}{$clng} = $trn; $res{$itm}{"$clng-cmnt"} = $cmnt; } $cmnt = ""; # print "LANGUAGE: $clng => $trn\n"; } elsif ($ln !~ /^\s*$/) { warn("warning: error parsing $fn:$lnum\n"); } } close(INP); return \%res; } sub check_language { my $lng = shift; if ($lng =~ /^([A-Za-z]{2})([\_\-]{1}([A-Za-z]{2})){0,1}$/) { if (length($3) > 0) { return (lc($1) . "_" . uc($3)) } else { return (lc($1)) } } else { return ""; } } sub write_lang_file { my $fn = shift; my $href = shift; my %hr = %{$href}; open(OUT,">$fn") || die("error: can't open $fn for output\n"); my %sh = (); for $key (keys %hr) { # print "SORTING: $key -> $hr{$key}{therion}\n"; $sh{$hr{$key}{therion}} = $key; } @nkeys = sort {$a <=> $b} (keys %sh); for $key (@nkeys) { print OUT $hr{$sh{$key}}{"therion-cmnt"}; print OUT "therion: $sh{$key}\n"; for $lkey (sort keys %{$hr{$sh{$key}}}) { if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { print OUT $hr{$sh{$key}}{"$lkey-cmnt"}; print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n"; } } print OUT "\n"; } close(OUT); } sub write_sources { my $href = shift; my %hr = %{$href}; # vytvorime si zoznam jazykov a ich alternativ my %lngs = (); my $key; my $lkey; foreach $key (keys %hr) { foreach $lkey (keys %{$hr{$key}}) { if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { $lngs{$lkey} = $lkey; if (length($lkey) > 2) { $nlkey = substr($lkey,0,2); $lngs{$nlkey} = $nlkey; } } } } my @langs = (sort keys %lngs); my $i; my $lcode; $languages = "enum {\n THLANG_SYSTEM = -2,\n THLANG_UNKNOWN = -1,\n"; $langcxxid = "static const thlang_pchar thlang__cxxids [] = {\n"; $langparse = "static const thstok thtt_lang [] = {\n"; for ($i = 0; $i <= $#langs; $i++) { $lcode = "THLANG_" . uc($langs[$i]); $langcxxid .= " \"$lcode\",\n"; $langparse .= " {\"$langs[$i]\", $lcode},\n"; $languages .= " $lcode = $i,\n"; $lngs{$langs[$i]} = $lcode; } $languages .= "};\n"; $langcxxid .= "};\n"; $langparse .= " {NULL, THLANG_UNKNOWN},\n};\n"; my $alternatives = "static const int thlang__alternatives [] = {\n"; for ($i = 0; $i <= $#langs; $i++) { $lkey = $langs[$i]; if ((length($lkey) > 2) && (defined($lngs{substr($lkey,0,2)}))) { $alternatives .= " " . $lngs{substr($lkey,0,2)} . ",\n"; } else { $alternatives .= " THLANG_UNKNOWN,\n"; } } $alternatives .= "};\n"; @texts = sort keys %hr; $textparse = "static const thstok thtt__texts [" . ($#texts + 2) . "] = {\n"; $texttable = "static thlang_pchar thlang__translations [" . ($#texts + 1) . "][" . ($#langs + 1) . "] = {\n"; $i = 0; my $nlkey; foreach $key (@texts) { $textparse .= " {\"$key\",$i},\n"; $texttable .= " {\n"; # priradi ll_LL -> ll ak ll neni definovane foreach $lkey (@langs) { if (length($lkey) > 2) { $nlkey = substr($lkey,0,2); if (!defined($hr{$key}{$nlkey})) { $hr{$key}{$nlkey} = $hr{$key}{$lkey}; } } } foreach $lkey (@langs) { if (defined($hr{$key}{$lkey})) { $texttable .= " \"$hr{$key}{$lkey}\",\n"; } else { $texttable .= " NULL,\n"; } } $texttable .= " },\n"; $i++; } $textparse .= " {NULL, -1},\n};\n"; $texttable .= "};\n"; # exportujeme h subor open(OUT,">../thlangdata.h") || die("error: can't open thlangdata.h for output\n"); print OUT <../thlangdata.cxx") || die("error: can't open thlangdata.cxx for output\n"); print OUT < $maxnm) { $maxnm = $hr{$key}{therion}; } } $maxnm = -1 - $maxnm; foreach $key (keys %hr) { $hr{$key}{therion} += $maxnm; } my $i = 0; foreach $fn (@trans_sources) { print "updating definitions from $fn ..."; open(INP,"$fn") || die("error: can't open $fn for input\n"); my @lines = ; close(INP); my $ln = join('',@lines); $ln =~ s/thT\(/\nthT\(/sg; @lines = split(/\n/,$ln); foreach $ln (@lines) { $i++; if ($ln =~ /^thT\(\"([^"]+)\"/) { $hr{$1}{therion} = $i; } } print " done\n"; } #vypise warningy foreach $key (keys %hr) { if ($hr{$key}{therion} < 0) { warn("warning: expression \"$key\" doesn't need to be translated\n"); } } return \%hr; } sub backup_file { my $fn = shift; open(INP,"$fn") || die("error: can't open $fn for input\n"); my @lines = ; close(INP); open(OUT,">$fn~") || die("error: can't open $fn~ for output\n"); print OUT @lines; close(OUT); } sub export_language { (my $fn, my $lng, my $href, my $onlyempty) = (shift, shift, shift, shift); my %hr = %{$href}; open(OUT,">$fn") || die("error: can't open $fn for output\n"); my %sh = (); for $key (keys %hr) { $sh{$hr{$key}{therion}} = $key; } my @nkeys = sort {$a <=> $b} (keys %sh); for $key (@nkeys) { my $toexp = 1; if ($onlyempty) { for $lkey (sort keys %{$hr{$sh{$key}}}) { if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { $toexp = 0; } } } if ($toexp) { print OUT $hr{$sh{$key}}{"therion-cmnt"}; print OUT "therion: $sh{$key}\n"; my $posc = "$lng:\n"; for $lkey (sort keys %{$hr{$sh{$key}}}) { if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) { print OUT $hr{$sh{$key}}{"$lkey-cmnt"}; print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n"; $posc = ""; } } print OUT $posc; print OUT "\n"; } } close(OUT); } $rf = read_lang_file("texts.txt"); # ak update if ($ARGV[0] =~ /^update$/i) { opendir(CDR,"."); @updfiles = grep /^texts\_[a-z]{2}\.txt$/, readdir(CDR); foreach $ufn (@updfiles) { my $lcode = substr($ufn,6,2); print "updating $lcode translations ..."; $rf = read_lang_file($ufn,$lcode,$rf); backup_file("$ufn"); unlink($ufn) || $quietdel || warn("warning: can't delete $ufn\n"); print " done\n"; } closedir(CDR); backup_file("texts.txt"); $rf = update_todo_list($rf); write_lang_file("texts.txt",$rf); write_sources($rf); } elsif ($ARGV[0] =~ /^export(\-empty)?$/i) { my $onlyempty = $1; my $lng = check_language($ARGV[1]); if (length($lng) != 2) { die("error: invalid language \"$ARGV[1]\"\n"); } export_language("texts_$lng.txt",$lng,$rf,$onlyempty); } else { write_sources($rf); } therion-5.4.1/thlang/texts.txt000066400000000000000000001564041307545355600164050ustar00rootroot00000000000000therion: title model bg: Модел en: Model pt: Modelo ru: Модель sk: Model therion: title map bg: Карта en: Map pt: Mapa ru: Карта sk: Mapa therion: surface legs bg: Повърхностна антена en: Surface legs pt: Visadas na superfície ru: Поверхностная съёмка sk: povrchové zámery therion: point station bg: реперна точка cz: měřičský bod de: Messpunkt el: σημείο χαρτογράφησης en: survey station es: estación fr: station topo it: caposaldo mi: kaimataara pl: punkt pomiarowy pt: base ru: пикет sk: meračský bod sq: stacioni I matjes zh_CN: 测点 therion: point station:temporary bg: временна реперна точка cz: měřičský bod (nestabilizovaný) de: unmarkierter Messpunkt el: προσωρινό σημείο χαρτογράφησης en: temporary survey station es: estación topográfica fr: station topo temporaire it: caposaldo termporaneo mi: kaimataara mo te wā pl: punkt pomiarowy (niezastabilizowany) pt: base temporária ru: временный пикет sk: meračský bod (nestabilizovaný) sq: stacion mates I perkohshem zh_CN: 临时测点 therion: point station:painted bg: реперна точка (боядисана) cz: měřičský bod (zabarvený) de: farbig markierter Messpunkt el: σημείο χαρτογράφησης (βαμμένο) en: painted survey station es: estación (pintada) fr: station topo, peinte it: caposaldo verniciato mi: kaimataara tohi pl: punkt pomiarowy (oznaczony farbą) pt: base pintada ru: нарисованный пикет sk: meračský bod (zafarbený) sq: stacion mates I ngjyrosur zh_CN: 人工测点 therion: point station:natural bg: реперна точка (естествена) cz: měřičský bod (přírodní) de: natürlicher Messpunkt el: σημείο χαρτογράφησης (φυσικό) en: natural survey station es: estación (natural) fr: station topo, naturelle it: caposaldo naturale mi: kaimataara a papa pl: punkt pomiarowy naturalny pt: base natural ru: естественная точка привязки sk: meračský bod (prírodný) sq: stacion mates natyral zh_CN: 天然测点 therion: point station:fixed bg: реперна точка (стабилизирана) cz: měřičský bod (stabilizovaný) de: dauerhafter Messpunkt el: μόνιμο σημείο χαρτογράφησης en: fixed survey station es: estación (fija) fr: station topo, fixe it: caposaldo fisso mi: kaimataara whakakōhatu pl: punkt pomiarowy (zastabilizowany) pt: base fixa ru: репер sk: meračský bod (stabilizovaný) sq: stacion mates I palevizshem zh_CN: 固定测点 therion: point flag:entrance bg: вход cz: vchod de: Eingang el: είσοδος en: entrance es: boca fr: entrée it: ingresso mi: ana ngutu pl: wejście pt: entrada ru: вход sk: vchod sq: hyrja zh_CN: 洞口 therion: point flag:sink bg: понор cz: ponor de: Schluckloch el: καταβόθρα en: sink es: sumidero fr: perte it: perdita mi: tapoko pl: ponor pt: sumidouro ru: понор sk: ponor sq: pus zh_CN: 渗水点 therion: point flag:spring bg: извор cz: vývěr de: Quelle el: πηγή en: spring es: surgencia fr: source it: sorgente mi: waipuna pl: wywierzysko pt: ressurgência ru: источник sk: výver sq: burim zh_CN: 泉点 therion: point flag:doline cz: závrt en: doline pt: dolina ru: воронка sk: závrt therion: point flag:dig bg: изкоп cz: sonda de: Grabung el: διάνοιξη en: dig fr: désobstruction it: disostruzione mi: kari pl: wykop pt: desobstrução ru: раскоп sk: sonda sq: mihje therion: point flag:continuation bg: възможно продължение cz: možné pokračování de: Fortsetzung el: πιθανή συνέχεια en: possible continuation es: continuación fr: suite possible it: possibile prosecuzione mi: roanga taea pl: możliwa kontynuacja pt: possível continuação ru: возможное продолжение sk: možné pokračovanie sq: vazhdim I mundshem zh_CN: 可能延伸洞道 therion: point flag:air-draught bg: въздушно течение cz: průvan de: Luftzug el: ροή αέρα en: air draught es: corriente aire fr: courant d’air it: corrente d'aria mi: tawhiri pl: przewiew pt: corrente de ar ru: ток воздуха sk: prievan sq: rrymim i ajrit zh_CN: 气流 therion: point flag:arch bg: арка cz: skalní oblouk en: arch pt: arco ru: арка sk: skalný oblúk therion: point flag:overhang bg: надвес cz: převis de: Überhang el: προέκταση οροφής en: overhang es: extraplomo fr: surplomb it: sporgenza mi: tauwharenga pl: przewieszka pt_BR: marquise pt_PT: projecção ru: нависание потолка sk: previs sq: varese zh_CN: 倒倾斜 therion: line survey bg: антена cz: polygonový tah de: Messzug el: γραμμή χαρτογράφησης en: survey lines es: poligonal fr: visée topo it: poligonale mi: ruri rārangi pl: ciąg pomiarowy pt: linha de visada ru: нитка хода sk: polygónový ťah sq: vijat matese-vrojtuese zh_CN: 测线 therion: point station-name bg: име на реперна точка cz: číslo měřičského bodu de: Messpunktname el: όνομα σημείου χαρτογράφησης en: survey station name es: nombre estacion fr: station topo, nom it: node del caposaldo mi: kaimatara ingoa pl: numer punktu pomiarowego pt: nome de base ru: номер пикета sk: číslo meračského bodu sq: emri I stacionit-mates zh_CN: 测点名称 therion: point entrance bg: вход cz: vchod de: Eingang el: είσοδος en: entrance es: boca fr: entrée it: ingresso mi: ana ngutu pl: wejście pt: entrada ru: вход sk: vchod sq: hyrja zh_CN: 洞口 therion: line map-connection bg: свързване на карти cz: spojení map de: zusammenhängende Pläne el: ένωση χαρτών en: map connection fr: jonction de carte it: riporto di mappa mi: mahere whenua ki te hui pl: połączenie map pt: conexão entre mapas ru: линия выноса sk: prepojenie máp sq: lidhjet ne harta zh_CN: 图形连接 therion: line wall bg: стена cz: stěna de: Wand el: τοίχος en: wall es: pared fr: mur it: parete mi: tarā pl: ściana pt: parede ru: стена sk: stena sq: muri zh_CN: 洞道边界 therion: line wall:bedrock bg: стена (основна скала) cz: stěna de: Wand zum Deckgebirge el: τοίχος en: wall es: pared fr: mur it: roccia mi: tarā pl: ściana pt: parede (rocha matriz) ru: стена (коренная) sk: stena sq: shkembi-muri zh_CN: 基岩边界 therion: line wall:underlying bg: по-ниско разположена стена cz: stěna nižší úrovně de: Wand unterlagernder Gang el: υποκείμενος τοίχος en: underlying wall es: pared subyacente fr: mur sousjacent it: parete:sottostante mi: tāra ki raro pl: ściana położona niżej pt: parede (conduto inferior) ru: нижерасположенная стена sk: stena nižšej úrovne sq: muri I shtrire zh_CN: 洞底边界 therion: line wall:overlying bg: по-високо разположена стена cz: stěna vyšší úrovně de: überlagerter Wandverlauf en: overlying wall it: parete:sovrastante mi: tāra ki runga pl: ściana położona wyżej pt: parede (conduto superior) ru: вышерасположенная стена sk: stena vyššej úrovne zh_CN: 洞顶边界 therion: line wall:unsurveyed bg: окомерна скица на стените cz: nezaměřená stěna de: Wand unvermessen el: τοίχος (μη χαρτογραφημένος) en: unsurveyed wall es: pared no topografiada fr: mur non topographié it: parete:stimata mi: ka rūri tāra pl: ściana nie pomierzona pt: parede não-topografada ru: глазомерная съемка стен sk: nezameraná stena sq: muri I pamatur zh_CN: 未测量洞道边界 therion: line wall:presumed bg: предполагаема стена cz: předpokládaná stěna de: Wand geschätzt el: τοίχος υποθετικός en: presumed wall es: pared supuesta fr: mur supposé it: parete:presunta mi: tāra whakaaro pl: niewidoczna ściana pt: parede presumida ru: предпологаемая стена sk: predpokladaná stena sq: muri I supozuar zh_CN: 推测洞道边界 therion: line wall:pit bg: отвес cz: vstupní propast de: Eingangsschacht en: entrance pit en_GB: entrance pitch it: parete:pozzo mi: rua pl: studnia wstępna pt: parede (poço) ru: отвес sk: vstupná priepasť zh_CN: 竖井洞口 therion: line wall:blocks bg: стена - блокаж cz: zával de: Wand aus Versturz el: ογκόλιθοι en: blocks, breakdown es: bloques fr: effrondrement it: massi mi: pakaru pl: ściana utworzona przez zawalisko pt: parede de blocos ru: глыбы sk: stena tvorená závalom sq: blloqe zh_CN: 崩塌块石边界 therion: line wall:debris bg: чакъл cz: štěrk de: Wand aus Schutt el: χαλάσματα en: debris es: derrubios fr: débris de roche it: detriti mi: otaota pl: ściana utworzona przez żwir pt: parede de escombros ru: щебень sk: stena tvorená suťou sq: depozitime/mbetje gurresh zh_CN: 碎屑沉积边界 therion: line wall:pebbles bg: камъчета cz: valouny de: Wand aus Kies el: χαλίκια en: pebbles es: cantos rodados fr: cailloux it: ciotoli mi: nga kōhatu iti pl: ściana utworzona przez okręglaki pt: parede de seixos ru: галька sk: stena tvorená okruhliakmi sq: gurralece zh_CN: 卵砾石边界 therion: line wall:sand bg: пясък cz: písek de: Wand aus Sand el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepū pl: ściana utworzona przez piasek pt: parede de areia ru: песок sk: stena tvorená pieskom sq: rane zh_CN: 砂边界 therion: line wall:clay bg: глина cz: bahno de: Wand aus Lehm el: άργιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: ściana z gliny pt: parede de lama/argila ru: глина sk: stena tvorená ílom sq: argjil zh_CN: 粘土边界 therion: line wall:ice bg: лед/фирн cz: led de: Wand aus Eis el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kōpaka pl: ściana z lodu pt: parede de gelo ru: лед, фирн sk: stena tvorená ľadom sq: akull zh_CN: 冰边界 therion: line wall:flowstone bg: натек cz: stěna tvořená sintrem de: Wand aus Sinter en: flowstone wall it: colata mi: tāra a pari kōhatu pl: ściana z nacieków pt: parede de escorrimento ru: натеки sk: stena tvorená sintrom zh_CN: 流石边界 therion: line wall:moonmilk bg: пещерно мляко cz: stěna tvořená měkkým sintrem de: Wand aus Bergmilch en: moonmilk wall it: moonmilk mi: tāra a mirika marama pl: ściana z miękkich nacieków pt: parede de leite de lua ru: лунное молоко sk: stena tvorená mäkkým sintrom zh_CN: 月奶石边界 therion: point wall-altitude bg: височинна отметка на стената cz: nadmořská výška bodu na stěně de: Höhe über Koordinatenursprung el: ύψος τοίχου en: altitude es: altura pared fr: altitude it: altezza mi: teitei, tiketike pl: wysokość punktu pomiarowego npm pt: altura da parede ru: высотная отметка стены sk: nadmorská výška bodu na stene sq: lartesia mbidetare e murit zh_CN: 海拔 therion: point altitude bg: н.м. височина cz: nadmořská výška bodu v chodbě de: Höhe über Koordinatenursprung el: ύψος en: altitude es: altura fr: altitude it: quota mi: teitei, tiketike pl: wysokość punktu pomiarowego npm pt: altura ru: высотная отметка sk: nadmorská výška bodu v chodbe sq: lartesia mbidetare zh_CN: 海拔 therion: point section bg: място на сечение cz: příčný řez de: Schnitt el: τομή en: section es: sección fr: section it: sezione mi: roherohenga pl: przkrój pt_BR: corte pt_PT: secção ru: сечение sk: priečny rez sq: pike-ndarje zh_CN: 断面 therion: line section bg: напречно сечение cz: příčný řez de: Schnittlinie el: τομή en: cross-section es: sección fr: section it: sezione trasversale mi: taha papahanga pl: przekrój pt: corte ru: выносная линия сечения sk: priečny rez sq: kryq-ndarje zh_CN: 横断面 therion: point passage-height bg: височина на галерията cz: výška chodby de: Raumhöhe el: ύψος στοάς en: passage height es: altura galería fr: hauteur du passage it: altezza galleria mi: ara teitei pl: wysokość korytarza pt: altura do conduto ru: высота хода sk: výška chodby sq: lartesia e kalimit zh_CN: 洞道高度 therion: point passage-height:unsigned bg: височина на галерията cz: výška chodby de: Raumhöhe el: ύψος στοάς en: passage height es: altura galería fr: hauteur du passage it: altezza galleria mi: ara teitei pl: wysokość korytarza pt: altura da galeria (valor absoluto) ru: высота хода sk: výška chodby sq: lartesia e kalimit-e pashenuar zh_CN: 洞道高度:无标记的点 therion: point passage-height:positive bg: височина на галерията над водата cz: výška chodby nad hladinou de: Raumhöhe nach oben el: ύψος στοάς πάνω από νερό en: height above water level es: altura sobre nivel del mar fr: hauteur au-dessus de l’eau it: altezza sopra il livello dell'acqua mi: te teitei a karewa ki runga pl: wysokość korytarza nad powierzchnią wody pt: altura acima do nível da água ru: высота над уровнем воды sk: výška nad hladinou sq: lartesia mbi nivelin e ujit zh_CN: 水面洞高 therion: point passage-height:negative bg: дълбочина на галерията под водата cz: výška chodby pod hladinou de: Raumhöhe nach unten el: βάθος στοάς κάτω από νερό en: depth below water level es: profundidad bajo nivel del mar fr: hauteur en dessous de l’eau it: profondità sotto il livello dell'acqua mi: te hōhunu a karewa ki raro pl: wysokość korytarza pod powierzchnią wody pt: profundidade abaixo do nível da água ru: глубина ниже уровня воды sk: hĺbka pod hladinou sq: thellesia nen nivelin e ujit zh_CN: 水体深度 therion: point passage-height:both bg: височина над и дълбочина под водата cz: výška nad i pod hladinou de: Raumhöhe gesamt el: ύψος και βάθος στοάς πάνω και κάτω από νερό en: height above, depth below water es: altura y profundidad respecto nivel del mar fr: hauteur au dessous et au dessus de l’eau it: altezza sopra e sotto il livello dell'acqua mi: karewa ki runga ki raro pl: wysokość korytarza nad powierzchnią wody i głębokość poniżej poziomu wody pt: altura acima mais profundidade abaixo do nível da água ru: высота над и глубина ниже уровня воды sk: výška nad a hĺbka pod hladinou sq: lartesia mbi dhe nen nivelin e ujit zh_CN: 水面洞高和水体深度 therion: point air-draught bg: въздушно течение cz: průvan de: Luftzug el: ροή αέρα en: air draught es: corriente aire fr: courant d’air it: corrente d'aria mi: tawhiri pl: przewiew pt: corrente de ar ru: ток воздуха sk: prievan sq: rrymim i ajrit zh_CN: 气流 therion: point air-draught:winter bg: зимно въздушно течение cz: zimní průvan de: Luftzug im Winter el: χειμερινή ροή αέρα en: winter air draught fr: courant d’air d’hiver it: circolazione invernale mi: tawhiri a takurua pl: przewiew w zimie pt: corrente de ar (inverno) ru: ток воздуха зимний sk: zimný prievan sq: rrymim ajri-dimeror zh_CN: 冷气流 therion: point air-draught:summer bg: лятно въздушно течение cz: letní průvan de: Luftzug im Sommer el: θερινή ροή αέρα en: summer air draught fr: courant d’air d’été it: circolazione estiva mi: tawhiri a raumati pl: przewiew w lecie pt: corrente de ar (verão) ru: ток воздуха летний sk: letný prievan sq: rrymim ajri-veror zh_CN: 暖气流 therion: point date bg: дата на наблюдението cz: datum pozorování de: Datum el: ημερομηνία en: date of observation es: fecha fr: date it: data d'osservazione mi: rā o te titiro pl: data obserwacji pt: data do registro ru: дата наблюдения sk: dátum pozorovania sq: data e vrojtimit zh_CN: 观测日期 therion: point dig bg: изкоп cz: sonda de: Grabung el: διάνοιξη en: dig fr: désobstruction it: disostruzione mi: kari pl: wykop pt: desobstrução ru: раскоп sk: sonda sq: mihje therion: point continuation bg: възможно продължение cz: možné pokračování de: Fortsetzung el: πιθανή συνέχεια en: possible continuation es: continuación fr: suite possible it: possibile prosecuzione mi: roanga taea pl: możliwa kontynuacja pt: possível continuação ru: возможное продолжение sk: možné pokračovanie sq: vazhdim I mundshem zh_CN: 可能延伸洞道 therion: point narrow-end bg: непроходимо верт. стеснение cz: neprůlezné zúžení de: Engstelle, zu schmal el: κλείσιμο στοάς λόγω στενώματος en: passage end, narrow es: final estrecho fr: passage impénétrable it: chiude su strettoia mi: putanga kuiti mutunga pl: zwężenie nie do przejścia pt: passagem (final estreito) ru: вертикальная узость sk: neprielezné zúženie sq: kalim I ngushte-fund zh_CN: 狭窄洞道尽头 therion: point low-end bg: непроходимо снижаване cz: neprůlezné snížení de: Engstelle, zu flach el: κλείσιμο στοάς λόγω χαμηλής οροφής en: passage end, low es: final bajo fr: passage bas it: chiude su laminatoio mi: putanga pāpaku mutunga pl: obniżenie nie do przejścia pt: passagem (final teto baixo_ ru: горизонтальная узость sk: neprielezné zníženie sq: kalim I poshtem-fund zh_CN: 低矮洞道尽头 therion: point flowstone-choke bg: блокирано от натеци cz: zasintrovaný konec de: Fortsetzung zugesintert el: κλείσιμο στοάς λόγο σταλαγμιτικού αποθέματος en: flowstone choke es: colmatado por concreción fr: trémie calcifiée it: chiude su colata mi: nati pari kōhatu pl: koniec zamknięty naciekami pt: obstrução por escorrimento ru: блокировано натеками sk: zasintrený koniec sq: mbyllje me gurre-rrjedhes zh_CN: 流石堵塞 therion: point breakdown-choke bg: затворено от срутище cz: zavalený konec de: Fortsetzung verstürzt el: κλείσιμο στοάς λόγο χαλάσματος en: breakdown choke es: colmatado por derrumbe fr: trémie it: chiude su frana mi: nati pakaru pl: koniec zawalony pt: obstrução por desmoronamento ru: блокировано обвалом sk: zavalený koniec sq: gurre rrjedhes-fund zh_CN: 崩塌堵塞 therion: point clay-choke cz: konec uzavřený jílem de: Fortsetzung verlehmt en: clay choke it: chiude su riempimento mi: uku pari pl: koniec zamknięty gliną pt: obstrução por lama/argila ru: блокировано глиной sk: koniec uzavretý ílom zh_CN: 粘土堵赛 therion: line floor-step bg: праг cz: stupeň de: Bodenstufe el: σκαλοπάτι en: floor step es: resalte fr: marche it: gradino mi: tapuae pl: próg pt: degrau ru: уступ пола sk: stupeň sq: shkalle ne dysheme zh_CN: 梯坎状洞底 therion: line overhang bg: надвес cz: převis de: Überhang el: προέκταση οροφής en: overhang es: extraplomo fr: surplomb it: sporgenza mi: tauwharenga pl: przewieszka pt_BR: marquise pt_PT: projecção ru: нависание потолка sk: previs sq: varese zh_CN: 倒倾斜 therion: line floor-meander bg: меандър, канал в пода cz: meandr ve dně de: Bodenmäander el: μαίανδρος δαπέδου en: floor meander es: meandro fr: méandre au sol it: meandro mi: kopiko pl: meander w dnie pt: meandro no piso ru: меандр, канал в полу sk: meander v dne sq: rrjedhe uji gjarperore zh_CN: 洞底蛇曲 therion: line pit bg: кладенец cz: propast de: Schacht el: πηγάδι en_GB: pitch en_US: pit es: pozo fr: puits it: pozzo mi: tupari pl: studnia pt: poço ru: колодец sk: priepasť sq: ngjitje zh_CN: 竖井 therion: line ceiling-step bg: ниша в тавана cz: změna výšky stropu de: Deckenstufe el: σκαλοπάτι οροφής en: ceiling step es: resalte inverso fr: marche de plafond it: gradino a soffitto mi: tapuae ki te tuanui pl: zmiana wysokości stropu pt_BR: desnível no teto pt_PT: degrau no tecto ru: уступ потолка sk: zmena výšky stropu sq: shkalle ne tavan zh_CN: 梯坎状洞顶 therion: line ceiling-meander bg: меандър, канал в тавана cz: stropní meandr de: Deckenmäander el: μαίανδρος οροφής en: ceiling meander es: meandro inverso fr: méandre de plafond it: canale di volta mi: kopiko tuanui pl: meander w stropie pt_BR: meandro no teto pt_PT: meandro no tecto ru: меандр, канал в потолке sk: stropný meander sq: rrjedhe uji gjarperore ne tavan zh_CN: 天沟 therion: line chimney bg: комин cz: komín de: Schlot el: καμινάδα en: chimney es: chimenea fr: cheminée it: camino mi: tumera pl: komin pt: chaminé ru: камин sk: komín sq: oxhak zh_CN: 烟囱式洞道 therion: line gradient bg: наклон на галерията cz: sklon chodby de: Gefälle el: κλίση στοάς en: passage gradient es: gradiente fr: pente it: scivolo mi: heke pl: nachylenie korytarza pt: declividade da galeria ru: уклон хода sk: sklon chodby sq: pjertesia e kalimit zh_CN: 洞道坡度 therion: point gradient bg: наклон на галерията cz: sklon chodby de: Gefälle el: κλίση στοάς en: passage gradient es: gradiente fr: pente it: scivolo mi: harapaki putanga pl: nachylenie korytarza pt: declividade da galeria ru: уклон хода sk: sklon chodby sq: pjertesia e kalimit zh_CN: 洞道坡度 therion: point height bg: височина на праг/комин/кладенец cz: výška stupně/komínu/hloubka propasti de: Höhe der Stufe oder des Schlotes oder Tiefe des Schachts el: ύψος σκαλοπατιού/καμινάδας ή βάθος πηγαδιού en: pit/chimney/step depth/height en_GB: pitch/chimney/step depth/height es: altura resalte/chimenea/profundidad pozo fr: hauteur d’une marche/d’une cheminée/profondeur it: altezza mi: papa tapuae/tumera/teitei rua/hōhonu pl: wysokość progu/komina/głębokość studni pt: altura do chão para degrau/chaminé/desnível ru: высота уступа/камина/колодца sk: hĺbka/výška priepasti/stupňa/komína sq: lartesia e shkalles ne dysheme/oxhaku/thellesia e leshimit zh_CN: 洞底梯坎高/烟囱洞道高/竖洞深度 therion: point dimensions bg: размери на галерията cz: rozměry de: Ausdehnung el: διαστάσεις en: dimensions es: dimensiones fr: proportions it: dimensione mi: rahinga, meiha pl: rozmiary pt: dimensões ru: размеры хода sk: rozmery sq: dimenzionet zh_CN: 规模 therion: point height:unsigned bg: височина на праг cz: výška stupně de: Höhe der Bodenstufe el: ύψος σκαλοπατιού en: floor step height es: altura resalte fr: hauteur d’une marche it: altezza camino mi: teitei papa tapuae pl: wysokość progu pt: altura do degrau no chão (valor absoluto) ru: высота уступа sk: výška stupňa sq: lartesia e shkalles se dyshemes zh_CN: 洞底梯坎高 therion: point height:positive bg: височина на комин cz: výška komínu de: Höhe des Schlotes el: ύψος καμινάδας en: chimney height es: altura chimenea fr: hauteur d’une cheminée it: altezza camino mi: teitei tumera pl: wysokość komina pt: altura da chaminé ru: высота трубы sk: výška komína sq: lartesia e oxhakut zh_CN: 烟囱式洞道高 therion: point height:negative bg: Дълбочина на кладенец cz: hloubka propasti de: Tiefe des Schachts el: βάθος πηγαδιού en: pit depth en_GB: pitch depth es: profundidad pozo fr: profondeur it: prodondità pozzo mi: rua hōhonu pl: głębokosc studni pt: profundidade do poço ru: глубина колодца sk: hĺbka priepasti sq: thellesia e leshimit zh_CN: 竖直洞道深度 therion: line contour bg: контур cz: vrstevnice de: Höhenlinie el: ισοϋψής en: contour es: contorno fr: contour it: contorno mi: koru pl: poziomica pt: contorno ru: контур sk: vrstevnica sq: kontura zh_CN: 等高线 therion: line slope bg: склон cz: svah de: Hangform el: κλίση en: slope es: pendiente fr: pente it: scivolo mi: tupari pl: pochyła powierzchnia pt: declive ru: склон sk: šikmá plocha sq: breg zh_CN: 斜坡 therion: line rock-border bg: очертание на камък cz: kameny de: Umriss eines Felsens el: περίγραμμα βράχου en: rock border es: contorno bloque fr: bord d’un rocher it: bordo masso mi: rohe kōhatu pl: obrys kamienia pt: contorno da rocha ru: внешняя кромка глыбы sk: obrys kameňa sq: kufij shkembinjsh zh_CN: 块石边界 therion: line rock-edge bg: ръбове на камък cz: hrany kamenů de: Struktur eines Felsens el: άκρη βράχου en: rock edges es: arista bloque fr: arête d’un rocher it: spigolo masso mi: mata kohatu pl: krawędzie kamienia pt: bordas da rocha ru: внутренняя кромка глыбы sk: hrany kameňa sq: skaji I shkembit zh_CN: 块石边缘 therion: point bedrock bg: основна скала cz: pevná skála de: Deckgebirge el: πέτρωμα en: bedrock es: roca madre fr: roche it: roccia mi: koiwi a papa pl: lita skała pt: rocha matriz ru: коренная порода sk: pevná skala sq: shtrat shkembi zh_CN: 基岩 therion: point blocks bg: камъни, блокаж cz: kamenné bloky de: Blöcke el: ογκόλιθοι en: blocks, breakdown es: bloques fr: blocs it: massi mi: pakaru pl: kamienne bloki pt: blocos ru: глыбы, завал sk: kamenné bloky sq: blloqe, shembje zh_CN: 崩塌块石 therion: point debris bg: чакъл cz: štěrk de: Schutt el: χαλάσματα en: debris es: derrubios fr: débris it: detriti mi: otaota pl: żwir pt: escombros ru: щебень sk: sutina sq: mbetje-mbeturina zh_CN: 碎屑堆积 therion: point sand bg: пясък cz: písek de: Sand el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepū pl: piasek pt: areia ru: песок sk: piesok sq: rane zh_CN: 砂 therion: point clay bg: глина cz: bahno de: Lehm el: άργιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: glina pt: lama/argila ru: глина sk: íl sq: argjil zh_CN: 粘土 therion: point water bg: вода cz: voda de: Wasser el: νερό en: water es: agua fr: eau it: acqua mi: wai pl: woda pt: água ru: вода sk: voda sq: uje zh_CN: 水 therion: point ice bg: лед cz: led de: Eis el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kōpaka pl: lód pt: gelo ru: лёд sk: ľad sq: akull zh_CN: 冰 therion: point snow bg: сняг cz: sníh de: Schnee el: χιώνι en: snow es: nieve fr: neige it: neve mi: huka pl: śnieg pt: neve ru: снег sk: sneh sq: bore zh_CN: 雪 therion: point pebbles bg: камъчета cz: valouny de: Kies el: χαλίκια en: pebbles es: cantos rodados fr: galets it: ciotoli mi: nga kōhatu iti pl: okręglaki pt: seixos ru: галька sk: okruhliaky sq: gurralece zh_CN: 卵石 therion: point raft bg: насип cz: náplav de: schwimmendes Kalkhäutchen el: σταλαγμιτικό υλικό που επιπλέει en: calcite raft es: calcita flotante fr: calcite flottante it: calcite flottante mi: mōkihi o kōhatu hōhonu pl: nanios pt: jangada ru: высыпка sk: náplav sq: trap-skele zh_CN: 石筏 therion: point guano bg: гуано cz: guano de: Guano el: γκουανό (περιττώματα νυχτερίδων) en: guano es: guano fr: guano it: guano mi: tutae pl: guano pt: guano ru: гуано sk: guáno sq: jashteqitje e lakuriqeve-guano zh_CN: 粪类堆积 therion: point clay-tree de: Lehmbäumchen en: clay tree it: pini d'argilla mi: rakau oneuku pt: cones de lama/argila ru: глиняное деревце sk: výzdoba z blata zh_CN: 粘土层 therion: line border bg: граница cz: ohraničení de: Begrenzung el: άκρη en: border es: límite fr: bord it: bordo mi: rohe pl: granica pt: borda ru: граница sk: ohraničenie sq: kufiri zh_CN: 边界线 therion: line border:visible bg: видима граница cz: ohraničení de: sichtbare Begrenzung el: άκρη en: border es: límite fr: bord it: bordo mi: rohe pl: granica pt: borda ru: видимая граница sk: ohraničenie sq: vije kufiri-e dukshme zh_CN: 可见边界 therion: line border:temporary bg: временна граница cz: nestálé ohraničení de: vorübergehende Begrenzung el: προσωρινή άκρη en: temporary border es: límite temporal fr: bord, temporaire it: bordo temporaneo mi: rohe mo te wā pl: tymczasowa granica pt: borda temporária ru: временная граница sk: nestále ohraničenie sq: kufij i perkohshem zh_CN: 暂时边界 therion: line border:presumed bg: предполагаема граница cz: předpokládané ohraničení de: geschätzte Begrenzung el: υποθετική άκρη en: presumed border es: límite supuesto fr: bord, supposé it: bordo presunto mi: rohe whakaaringa whakaaro pl: niewidoczna granica pt: borda presumida ru: предполагаемая граница sk: predpokladané ohraničenie sq: kufij I supozuar zh_CN: 推测边界 therion: area water bg: вода cz: vodní plocha de: Wasserfläche el: νερό en: water es: agua fr: eau it: acqua mi: wai pl: powierzchnia wody pt: água ru: вода sk: vodná plocha sq: uje zh_CN: 水体区 therion: area sump bg: сифон cz: sifon de: Siphonfläche el: σιφόνι en: sump es: sifón fr: siphon it: sifone mi: kari a wai pl: syfon pt: sifão ru: сифон sk: zatopená plocha (sifón) sq: sifoni zh_CN: 潜水塘区 therion: area snow bg: сняг cz: sníh de: Schneefläche el: χιόνι en: snow es: nieve fr: neige it: neve mi: huka pl: śnieg pt: neve ru: снег sk: sneh sq: bore zh_CN: 雪区 therion: area ice bg: лед cz: led de: Eisfläche el: πάγος en: ice es: hielo fr: glace it: ghiaccio mi: kōpaka pl: lód pt: gelo ru: лёд sk: ľad sq: akull zh_CN: 冰区 therion: area sand bg: пясък cz: písek de: Sandfläche el: άμμος en: sand es: arena fr: sable it: sabbia mi: onepū pl: piasek pt: areia ru: песок sk: piesok sq: rane zh_CN: 砂区 therion: area clay bg: глина cz: bahno de: Lehmfläche el: άργιλος en: clay es: arcilla fr: argile it: argilla mi: oneuku pl: glina pt: lama/argila ru: глина sk: íl sq: argjil zh_CN: 粘土区 therion: area pebbles bg: камъчета cz: valouny de: Kiesfläche el: χαλίκια en: pebbles es: cantos rodados fr: galets/pierres it: ciotoli mi: nga kōhatu iti pl: okręglaki pt: seixos ru: галька sk: okrúhliaky sq: gurralece zh_CN: 卵石区 therion: area debris bg: чакъл cz: štěrk de: Schuttfläche el: χαλάσματα en: debris es: derrubios fr: débris it: detriti mi: otaota pl: żwir pt: escombros ru: щебень sk: štrk sq: mbetje-gurresh zh_CN: 碎屑沉积区 therion: area flowstone bg: каменен водопад cz: sintrové náteky de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétion it: concrezione pt: escorrimento ru: натечный каскад sk: sintrové náteky sq: gurre-rrjedhes zh_CN: 流石区 therion: area moonmilk bg: пещерно мляко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk fr: mondmilch it: moonmilk pt: leite de lua ru: лунное молоко sk: náteky mäkkého sintra sq: qumesht-hena zh_CN: 月奶石区 therion: area blocks bg: блокаж cz: skalní bloky de: Fläche mit Blöcken el: ογκόλιθοι en: blocks, breakdown es: bloques fr: blocs it: massi mi: pakaru a kōhatunui pl: bloki skalne pt: blocos ru: навал глыб sk: skalné bloky sq: blloqe zh_CN: 块石堆积区 therion: area bedrock bg: основна скала cz: pevná skála de: Deckgebirge el: πέτρωμα en: bedrock es: roca madre fr: roche it: roccia pt: rocha matriz ru: коренная порода sk: pevná skala sq: shtrat shkembi zh_CN: 基岩区 therion: line water-flow bg: водно течение cz: vodní tok de: Gerinne el: υδρορροή en: water flow es: curso agua fr: rivière it: corso d'acqua mi: wairere pl: ciek wodny pt: fluxo de água ru: водоток sk: vodný tok sq: rrjedhe uji zh_CN: 水流 therion: point water-flow bg: водно течение cz: vodní tok de: Gerinne el: υδρορροή en: water flow es: curso agua fr: rivière it: corso d'acqua mi: wairere pl: ciek wodny pt: fluxo de água ru: водоток sk: vodný tok sq: rrjedhe uji zh_CN: 流水点 therion: line water-flow:permanent bg: постоянно водно течение cz: vodní tok de: ständiges Gerinne el: μόνιμη υδρορροή en: water flow es: curso agua fr: rivière, permanente it: corso d'acqua permanente mi: wairere pl: ciek wodny pt: fluxo de água permanente ru: постоянный водоток sk: vodný tok sq: rrjedhe uji e perhershme zh_CN: 常流水 therion: point water-flow:permanent bg: постоянно водно течение cz: vodní tok de: ständiges Gerinne el: μόνιμη υδρορροή en: water flow es: curso agua fr: rivière, permanente it: corso d'acqua permanente mi: wairere pl: ciek wodny pt: fluxo de água permanente ru: постоянный водоток sk: vodný tok sq: rrjedhe uji e perhershme zh_CN: 常流水 therion: line water-flow:intermittent bg: периодично водно течение cz: občasný vodní tok de: zeitweises Gerinne el: διακοπτόμενη υδρορροή en: intermittent water flow es: curso agua intermitente fr: rivière, intermittente it: corso d'acqua temporaneo mi: wairere taumutumutu pl: okresowy ciek wodny pt: fluxo de água intermitente ru: временный водоток sk: občasný vodný tok sq: rrjedhe uji me force zh_CN: 季节性流水 therion: point water-flow:intermittent bg: периодично водно течение cz: občasný vodní tok de: zeitweises Gerinne el: διακοπτόμενη υδρορροή en: intermittent water flow es: curso agua intermitente fr: rivière, intermittente it: corso d'acqua temporaneo mi: wairere taumutumutu pl: okresowy ciek wodny pt: fluxo de água intermitente ru: временный водоток sk: občasný vodný tok sq: rrjedhe uji me force zh_CN: 季节性流水 therion: line water-flow:conjectural bg: предполагаемо водно течение cz: předpokládaný vodní tok de: vermutetes Gerinne el: υποτιθέμενη υδρορροή en: conjectural water flow es: curso agua supuesto fr: rivière, conjoncturelle it: corso d'acqua presunto mi: wairere a pātai pl: przewidywany ciek wodny pt: fluxo de água suposto ru: предполагаемый водоток sk: predpokladaný vodný tok sq: rrjedhe uji e supozuar zh_CN: 推测流水 therion: point water-flow:paleo bg: палео речно легло cz: paleořečiště de: ehemaliges Gerinne el: παλαιουδρορροή en: paleo water flow (scallops) es: paleocurso agua fr: rivière fossile it: paleocorso d'acqua mi: wairere nehera pl: stary ciek wodny pt: paleo-fluxo de água ru: палео-поток sk: paleoriečisko sq: rrjedhe uji e vjeter zh_CN: 古水流 therion: point spring bg: извор cz: vývěr de: Quelle el: πηγή en: spring es: surgencia fr: source it: sorgente mi: waipuna pl: wywierzysko pt: ressurgência ru: источник sk: výver sq: burim zh_CN: 泉点 therion: point sink bg: понор cz: ponor de: Schluckloch el: καταβόθρα en: sink es: sumidero fr: perte it: perdita mi: tapoko pl: ponor pt: sumidouro ru: понор sk: ponor sq: pus zh_CN: 渗水点 therion: point flowstone bg: натек cz: sintr de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétions it: concrezione mi: pari kōhatu pl: nacieki pt: escorrimento ru: натек sk: sinter sq: gurre-rrjedhes zh_CN: 流石 therion: line flowstone bg: каменен водопад cz: sintrové náteky de: flächiger Sinter el: σταλαγμιτικό υλικό δαπέδου en: flowstone es: concreción fr: concrétion it: concrezione mi: pari kōhatu pl: nacieki pt: escorrimento ru: натечный каскад sk: sintrové náteky sq: gurre-rrjedhes zh_CN: 流石 therion: point moonmilk bg: пещерно мляко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk es: mondmilch fr: mondmilch it: moonmilk mi: mirika marama pl: miękkie nacieki pt: leite de lua ru: лунное молоко sk: mäkký sinter sq: qumesht-hena zh_CN: 月奶石 therion: line moonmilk bg: пещерно мляко cz: nickamínek de: Bergmilch el: γάλα σπηλαίου en: moonmilk fr: mondmilch it: moonmilk mi: mirika marama pl: miękkie nacieki pt: leite de lua ru: лунное молоко sk: náteky mäkkého sintra sq: qumesht-hena zh_CN: 月奶石 therion: point stalactite bg: сталактит cz: stalaktit de: Stalaktit el: σταλακτίτης en: stalactite es: estalactita fr: stalactite it: stalattite mi: kōhatu ki te haere ki runga pl: stalaktyt pt: estalactite ru: сталактит sk: stalaktit sq: stalaktit zh_CN: 石钟乳 therion: point stalactites bg: сталактити cz: stalaktity en: stalactites pt: estalactites ru: сталактиты sk: stalaktity therion: point stalagmite bg: сталагмит cz: stalagmit de: Stalagmit el: σταλαγμίτης en: stalagmite es: estalagmita fr: stalagmite it: stalagmite mi: kōhatu ki te haere ki raro pl: stalagmit pt: estalagmite ru: сталагмит sk: stalagmit sq: stalagmit zh_CN: 石笋 therion: point stalagmites bg: сталагмити cz: stalagmity en: stalagmites pt: estalagmites ru: сталагмиты sk: stalagmity therion: point pillar bg: сталактон cz: stalagnát de: Säule el: κολόνα en: pillar es: pilar fr: pillier it: colonna mi: pou pl: stalagnat pt: coluna ru: колонна sk: stalagnát sq: shtylle zh_CN: 石柱 therion: point pillars bg: сталактони cz: stalagnáty de: Säulen en: pillars pt: colunas ru: колонны sk: stalagnáty therion: point ice-stalactite bg: леден сталактит cz: ledový stalaktit de: Eisstalaktit en: ice stalactite it: stalattite di ghiaccio mi: kōpaka ki te haere ki runga pl: lodowy stalaktyt pt: estalactite de gelo ru: ледяной сталактит sk: ľadový stalaktit zh_CN: 冰乳 therion: point ice-stalagmite bg: леден сталагмит cz: ledový stalagmit de: Eisstalagmit en: ice stalagmite it: stalagmite di ghiaccio mi: kōpaka ki te haere ki raro pl: lodowy stalagmit pt: estalagmite de gelo ru: ледяной сталагмит sk: ľadový stalagmit zh_CN: 冰笋 therion: point ice-pillar bg: леден сталактон cz: ledový stalagnát de: Eissäule en: ice pillar it: colonna di ghiaccio mi: pou Kōpaka pl: lodowy stalagnat pt: coluna de gelo ru: ледяная колонна sk: ľadový stalagnát zh_CN: 冰柱 therion: point curtain bg: драперия cz: sintrové záclony de: Sinterfahne el: κουρτίνα en: curtain es: cortina fr: rideau it: cortina mi: araia pl: draperie naciekowe pt: cortina ru: натечный занавес sk: sintrové záclony sq: perde zh_CN: 石幕 therion: point soda-straw bg: цевичен сталактит cz: brčka de: Makkaroni el: μακαρόνια en: soda straw es: fistulosa fr: fistuleuse it: tubolare mi: pū ngote pl: nacieki pt: canudo pt_PT: tubulares ru: сталактиты-соломины sk: brčká sq: shkopinje sode zh_CN: 鹅管 therion: point popcorn bg: коралити cz: pizolity de: Blumenkohlsinter el: μανιτάρια από σταλαγμιτικό υλικό en: popcorn es: coliflor fr: choux-fleur it: cavolfiore mi: kanga pāhuuhuu pl: pizolity pt: couve-flor ru: коралиты sk: pizolity sq: palagaqa-kokorroshka zh_CN: 石珊瑚 therion: point cave-pearl bg: пещерен бисер cz: jeskynní perly de: Höhlenperle el: μαργαριτάρι των σπηλαίων en: cave pearl es: perla de caverna fr: perle des cavernes it: pisolite mi: ana kahurangi pl: perły jaskiniowe pt_BR: pérolas pt_PT: pérolas de Gruta ru: пещерный жемчуг sk: jaskynné perly sq: margaritar te shpelles zh_CN: 穴珠 therion: point disk bg: диск cz: disk de: Diskus el: δίσκος en: disk es: disco fr: disque it: disco mi: kiwhi pl: dysk pt: disco ru: диск sk: disk sq: pllake zh_CN: 石盘 therion: point helictite bg: хеликтити cz: heliktit de: Excentrique el: ελικτίτης en: helictite es: excéntrica fr: excentrique/hélictite it: eccentrica mi: pākeho torotoro pl: heliktyt pt_BR: helictite pt_PT: excêntrica ru: геликтиты sk: heliktit sq: heliktite zh_CN: 卷曲石 therion: point aragonite bg: арагонит cz: aragonit de: Aragonit el: αραγονίτης en: aragonite es: aragonito fr: aragonite it: aragonite mi: pākeho tuarua pl: aragonit pt_BR: aragonita pt_PT: aragonite ru: арагонит sk: aragonit sq: aragonite zh_CN: 文石 therion: point crystal bg: кристал cz: krystal de: Kristall el: κρύσταλλο en: crystal es: cristal fr: cristaux it: cristallo mi: kohatu piata pl: kryształ pt: cristal ru: кристаллы sk: kryštál sq: kristale zh_CN: 晶花 therion: point wall-calcite bg: повлек cz: vápencový povlak de: Wandsinter el: ασβεστίτης τοιχώματος en: wall calcite es: calcita fr: mur, calcite it: calcite mi: tāra a nga roimata a pakeho pl: wapienna powłoka pt_BR: parede de calcita pt_PT: parede de calcite ru: настенный кальцит sk: vápencový povlak sq: kalcit-muri zh_CN: 洞壁石花 therion: point gypsum bg: гипс cz: sádrovec de: Gips el: γύψος en: gypsum es: yeso fr: gypse it: gesso mi: tote pl: gips pt: gipsita ru: гипс sk: sádrovec sq: gjips zh_CN: 石膏 therion: point gypsum-flower bg: гипсово цвете cz: sádrovcový květ de: Gipsblume el: άνθος γύψου en: gypsum flower es: flor yeso fr: fleur de gypse it: fiore di gesso mi: putiputi tote pl: gipsowy kwiat pt: flor de gipsita ru: гипсовые цветы sk: sádrovcový kvet sq: lule gjipsi zh_CN: 石膏花 therion: point rimstone-dam bg: сухо синтрово езеро cz: sintrová hrázka de: Sinterbarriere el: γκουρ (λιθωματικό φράγμα) en: rimstone dam es: gour-presa fr: gours it: gour mi: kōhatu matatara pl: naciekowa przegroda pt: travertino vazio ru: гуры без воды sk: sintrová hrádza sq: penda guri zh_CN: 边石坝 therion: point rimstone-pool bg: синтрово езеро cz: sintrové jezírko de: Sinterbecken el: γκουρ (λιθωματική λεκάνη) en: rimstone pool es: gour-poza fr: gour it: vasca mi: kōhatu kopua wai pl: jeziorko naciekowe pt: travertino cheio ru: гуры с водой sk: sintrové jazierko sq: vaska uji zh_CN: 边石潭 therion: point anastomosis bg: анастомоза cz: anastomóza de: Anastomose el: αναστόμωση en: anastomosis es: anastomosis fr: anastomose it: anastomosi mi: peka hono pl: anastomoza pt: anastomose ru: анастомозис sk: anastomóza sq: anastomosa(kuartz) zh_CN: 溶沟 therion: point karren bg: кари cz: škrapy de: Karren el: κάρρεν - γυμνός καρστικοποιημένος βράχος en: karren es: lapiaz fr: lapiez it: karren mi: awaawa pl: żłobki krasowe pt: lapiás ru: карры sk: škrapy sq: karreni zh_CN: 溶痕 therion: point scallop bg: фасетки cz: erozní útvary de: Fließfacette el: σκάλοπ (κενά διάβρωσης) en: scallop es: cavitaciones fr: vagues d’érosion (coups de gouge) it: scallop mi: anatipa pl: formy erozyjne pt: marcas de fluxo ru: фасетки sk: lastúrovité jamky sq: guacat zh_CN: 贝窝 therion: point flute bg: карни жлебове cz: píšťaly de: Kolk el: αυλάκι διάβρωσης en: flute es: canaleta fr: marmites it: scanalatura mi: koauau pl: marmity pt: marmita ru: канавки sk: píšťaly sq: flauta zh_CN: 溶槽 therion: point raft-cone bg: насипен конус cz: náplavový kužel de: schwimmendes Kalkhäutchen el: σταλαγμιτικός κώνος που επιπλέει en: raft cone es: conos fr: cone it: calcite flottante mi: korere a mōkihi kōhatu hōhonu pl: nanios pt: cone de jangadas ru: высыпной конус sk: náplavový kužeľ sq: rrjedhe uji konike zh_CN: 钙膜晶锥 therion: point archeo-material bg: археологическа находка cz: archeologické nálezy de: archäologischer Fund el: αρχαιολογικό εύρημα en: archaeological material es: yacimiento (arq) fr: matériel archéo it: materiale archeologico mi: taonga o nehe pl: znaleziska archeologiczne pt: material arqueológico ru: археологическая находка sk: archeologické nálezy sq: material arkeologjik zh_CN: 考古遗物 therion: point paleo-material bg: палеонтологична находка cz: paleontologické nálezy de: paläontologischer Fund el: παλαιοντολογικό εύρημα en: paleo material es: yacimiento (pal) fr: matériel paléo it: materiale paleologico mi: taiao taonga o nehe pl: znaleziska paleontologiczne pt: material paleontológico ru: палео-находка sk: paleontologické nálezy sq: paleo-material zh_CN: 原始堆积 therion: point vegetable-debris bg: останки от растителност cz: zbytky rostlin de: Pflanzenreste el: φυτικά κατάλοιπα en: vegetable debris es: detritus vegetales fr: débris végétaux it: detriti vegetali mi: otaota a hua whenua pl: szczątki roślinne pt: restos vegetais ru: останки растительности sk: zvyšky rastlín sq: mbetje perimesh zh_CN: 生物碎屑堆积 therion: point root bg: корени cz: kořeny de: Holzreste el: ρίζες en: root es: raíz fr: racine it: radice mi: pakiaka pl: korzenie pt: raiz ru: корни растений sk: korene sq: rrenje zh_CN: 树根 therion: point no-equipment bg: липсва екипировка! cz: nevystrojené místo de: keine Ausrüstung el: χωρίς υλικά en: no equipment! es: sin equipar fr: pas d’équipement it: senza armo mi: wahi a taonga mahi kore pl: miejsce bez punktu asekuracyjnego pt: sem equipamento ru: снаряжение отутствует! sk: nevystrojené miesto sq: vend pa pajisje zh_CN: 无需装备点 therion: point anchor bg: закрепване cz: kotvení de: Seilbefestigung el: αγκύρωση en: anchor es: anclaje fr: ancrage it: ancoraggio mi: punga pl: punkt asekuracyjny pt: ancoragem ru: ИТО sk: kotvenie sq: pike-sigurimi zh_CN: 锚点 therion: point rope bg: въже cz: lano de: Seil el: σχοινί en: rope es: cuerda fr: corde it: corda mi: taura pl: lina pt: corda ru: верёвка sk: lano sq: litar zh_CN: 绳子 therion: point rope-ladder bg: пещерна стълба cz: lanový žebřík de: Drahtseilleiter el: ανεμόσκαλα en: rope ladder es: escala fr: échelle de corde it: scala di corda mi: arawhata taura pl: drabinka linowa pt: escada de corda ru: гибкая лестница sk: lanový rebrík sq: shkalle litari zh_CN: 绳梯 therion: line rope-ladder bg: пещерна стълба cz: lanový žebřík de: Drahtseilleiter el: ανεμόσκαλα en: rope ladder es: escala fr: échelle de corde it: scala di corda mi: arawhata taura pl: drabinka linowa pt: escada de corda ru: гибкая лестница sk: lanový rebrík sq: shkalle litari zh_CN: 绳梯 therion: point fixed-ladder bg: стационарна стълба cz: pevný žebřík de: feste Leiter el: μόνιμη σκάλα en: fixed ladder es: escala fija fr: échelle fixe it: scala fissa mi: arawhata pl: sztywna drabinka pt: escada fixa ru: жесткая лестница sk: fixný rebrík sq: shkalle fikse zh_CN: 固定梯子 therion: line fixed-ladder bg: стационарна стълба cz: pevný žebřík de: feste Leiter el: μόνιμη σκάλα en: fixed ladder es: escala fija fr: échelle fixe it: scala fissa mi: arawhata pl: sztywna drabinka pt: escada fixa ru: жесткая лестница sk: fixný rebrík sq: shkalle fikse zh_CN: 固定梯子 therion: point steps bg: стъпала cz: schody de: Stufen el: σκαλοπάτια en: steps es: escalones fr: marches it: scalini mi: nga tapuae pl: schody pt: degraus ru: ступени sk: schody sq: shkalle zh_CN: 梯坎 therion: line rope bg: въже cz: lano de: Seil el: σχοινί en: rope es: cuerda fr: corde it: corda mi: taura pl: lina pt: corda ru: верёвка sk: lano sq: litar zh_CN: 绳子 therion: line steps bg: стъпала cz: schody de: Stufen el: σκαλοπάτια en: steps es: escalones fr: marches it: scalini mi: nga tapuae pl: schody pt: degraus ru: ступени sk: schody sq: shkalle zh_CN: 梯坎 therion: point via-ferrata bg: виа-ферата de: Klettersteig en: via-ferrata pt: via ferrata ru: виа-ферата sk: via ferrata therion: line via-ferrata bg: виа-ферата de: Klettersteig en: via-ferrata pt: via ferrata ru: виа-ферата sk: via ferrata therion: point traverse bg: траверс cz: traverz de: Querung el: τραβέρσα en: traverse es: pasamanos fr: traversée it: traverso mi: hikoi a tupari pl: trawers pt: travessia ru: троллей sk: traverz sq: kalim anesore zh_CN: 横越 therion: point bridge bg: мост cz: most de: Brücke el: γέφυρα en: bridge es: puente roca fr: pont it: ponte di roccia mi: piriti pl: most pt: ponte ru: мост sk: most sq: ure zh_CN: 桥 therion: point handrail bg: перила cz: zábradlí de: Geländer en: handrail pt: corrimão ru: перила sk: zábradlie therion: line handrail bg: перила cz: zábradlí de: Geländer en: handrail pt: corrimão ru: перила sk: zábradlie therion: point camp bg: лагер cz: bivak de: Biwak el: κατασκήνωση en: camp es: campamento fr: camp it: campo mi: topuni pl: biwak pt: acampamento ru: ПБЛ sk: bivak sq: vend-pushim zh_CN: 营地 therion: point remark bg: забележка cz: poznámka de: Bemerkung el: σχόλιο en: remark es: nota fr: remarque it: nota mi: korero pl: uwaga pt: observação ru: заметка sk: poznámka sq: shenim zh_CN: 备注 therion: point label bg: етикет cz: pojmenování de: Beschriftung el: περιγραφή en: label es: etiqueta fr: libellé it: etichetta mi: ingoa pl: nazwa pt: rótulo ru: подпись sk: pomenovanie sq: mbishkrim-etiket zh_CN: 标记 therion: line label bg: етикет cz: pojmenování de: Beschriftung el: περιγραφή en: label es: etiqueta fr: libellé it: etichetta mi: ingoa pl: nazwa pt: rótulo ru: текстовая метка sk: pomenovanie sq: mbishkrim zh_CN: 标记 therion: title legend bg: Легенда cz: Legenda de: Legende el: Τίτλος en: Legend es: Leyenda fr: Légende it: Legenda mi: Kaiwhakaatu pl: legenda pt: Legenda ru: Условные обозначения sk: Legenda sq: permbajtja zh_CN: 图例 therion: title color-legend-altitude bg: Височинна скала cz: Nadmořské výšky de: Höhe el: Υψομετρικά en: Altitudes es: color (altitud) fr: Altitudes it: Profondità mi: Teitei, Tiketike pl: wysokości npm pt: Altitudes ru: Высотная шкала sk: Nadmorské výšky sq: titulli ngjyra-permbajtja-lartesia mbidetare zh_CN: 海拔 therion: title color-legend-map bg: Карти cz: Mapy de: Karten el: Χάρτες en: Maps es: color (mapa) fr: Cartes it: Mappa mi: Mahere whenua pl: mapy pt: Mapas ru: Карты sk: Mapy sq: hartat zh_CN: 地图 therion: units ft bg: футове cz: ft de: ft el: πόδια en: ft es: ft fr: ft it: ft mi: whīti pl: ft (stopy) pt: pés ru: футов sk: ft sq: njesia matese-kembe zh_CN: 英尺 therion: title cave length bg: Дължина cz: Délka de: Gesamtlänge el: Μήκος en: Length es: Desarrollo fr: Longueur it: Sviluppo mi: Roa a ana pl: długość pt: Extensão ru: Длина sk: Dĺžka sq: gjatesia zh_CN: 洞道长度 therion: units m bg: м cz: m de: m el: μ en: m es: m fr: m it: m mi: mehua pl: m (metry) pt: m ru: м sk: m sq: njesia matese-metri zh_CN: 米 therion: title cave depth bg: Денивелация cz: Převýšení de: Niveaudifferenz el: Βάθος en: Depth es: Desnivel fr: Profondeur it: Profondità mi: Hōhonu a ana, Rētōtanga pl: przewyższenie pt: Profundidade ru: Глубина sk: Prevýšenie sq: thellesia zh_CN: 洞道深度 therion: title explo (plural) bg: Изследвали cz: Objevili de: Entdeckung el: Εξερευνητές en: Explored by es: Exploración fr: Explorateurs it: Esplorazione mi: Kaipokai whenua pl: odkryli pt: Explorada por ru: Исследование sk: Objavili sq: hulumtuar nga zh_CN: 探测 therion: title explo bg: Изследвал cz: Objevil de: Entdeckung el: Εξερευνητής en: Explored by es: Exploración fr: Explorateur it: Esplorazione mi: Kaipokai whenua pl: odkrył pt: Explorada por ru: Исследование sk: Objavil sq: hulumtuar nga zh_CN: 探测 therion: title topo (plural) bg: Картирали cz: Měřili de: Vermessung el: Χαρτογραφήθηκε από τους en: Surveyed by es: Espeleometría fr: Topographes it: Topografia mi: Kairūri pl: pomierzyli pt: Topografada por ru: Съемка sk: Zamerali sq: matur nga zh_CN: 测量 therion: title topo bg: Картирал cz: Měřil de: Vermessung el: Χαρτογραφήθηκε από τον en: Surveyed by es: Topografía fr: Topographe it: Topografia mi: Kairūri pl: mierzył pt: Topografada por ru: Съемка sk: Zameral sq: matur nga zh_CN: 测量 therion: title carto (plural) bg: Комп. обработка cz: Kreslili de: Zeichnung el: Σκαρίφημα en: Drawn by es: Cartografía fr: Dessinateurs it: Cartografia mi: Kaituhi pl: rysowali pt: Desenhada por ru: Камеральная обработка sk: Kreslili sq: vizatuar nga zh_CN: 绘图 therion: title carto bg: Комп. обработка cz: Kreslil de: Zeichnung el: Σκαρίφημα en: Drawn by es: Cartografía fr: Dessinateur it: Cartografia mi: Kaituhi pl: rysował pt: Desenhada por ru: Камеральная обработка sk: Kreslil sq: vizatuar nga zh_CN: 绘图 therion: title preview above bg: Изглед от горе cz: [Náhled horních vrstev] de: Vorschau oben el: [προεπισκόπηση πάνω] en: [Preview above] es: Vista previa superior fr: [Prévisualisation au-dessus] it: Anteprima sopra mi: Tuhi a ana ki runga pl: widok z góry pt: [Visualização acima] ru: [Вид выше] sk: [Náhľad horných vrstiev] sq: parashiqimi lart zh_CN: 往上预览 therion: title preview below bg: Изглед от долу cz: [Náhled dolních vrstev] de: Vorschau unten el: [προεπισκόπηση κάτω] en: [Preview below] es: Vista previa inferior fr: [Prévisualisation au-dessous] it: Anteprima sotto mi: Tuhi a ana ki raro pl: widok z dołu pt: [Visualização abaixo] ru: [Вид ниже] sk: [Náhľad spodných vrstiev] sq: parashiqimi perfundi zh_CN: 往下预览 therion: title surface bitmap bg: Карта на повърхността cz: [Povrchová mapa] de: Erdoberfläche el: [χάρτης επιφάνειας] en: [Surface Image] es: Mapa superficie fr: [Carte extérieure] it: Mappa superficie mi: Konohi o te whenua pl: mapa powierzchni pt: [Imagem da superfície] ru: [Карта поверхности] sk: [Povrchová mapa] sq: harta e siperfaqes zh_CN: 外观图 therion-5.4.1/thlang/thlang_stats.pl000077500000000000000000000006221307545355600175160ustar00rootroot00000000000000#!/usr/bin/perl -w open (IN, $ARGV[0]) or die; while () { chomp; if (/^\W*therion:/) { foreach $l (keys %LOC) { $GLOB{$l} += 1; } $GLOB{"therion"} += 1; %LOC = (); } elsif (/^\W*([a-z]{2})(_[A-Z]{2})?:/) { $LOC{$1} = 1; } } foreach $l (keys %LOC) { $GLOB{$l} += 1; } foreach $l (keys %GLOB) { print "$l: " . int(100*$GLOB{$l}/$GLOB{"therion"}) . "\n"; } therion-5.4.1/thlayout.cxx000066400000000000000000002066601307545355600156150ustar00rootroot00000000000000/** * @file thlayout.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayout.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" #include "thinfnan.h" #include "thpdfdata.h" #include "thsymbolset.h" #include "thtflength.h" #include "thlang.h" #include "thcsdata.h" #include "thconfig.h" #include "th2ddataobject.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TTLDBG_JOINS = 1, TTLDBG_STATIONS = 2, TTLDBG_SCRAPNAMES = 4, TTLDBG_STATIONNAMES = 8, }; thlayout::thlayout() { this->ccode = TT_LAYOUT_CODE_UNKNOWN; this->m_pconfig = NULL; this->def_scale = 0; this->scale = 0.005; this->def_base_scale = 0; this->base_scale = 0.005; this->def_rotate = 0; this->rotate = 0.0; this->def_origin = 0; this->ox = thnan; this->oy = thnan; this->oz = thnan; this->def_size = 0; this->hsize = 0.18; this->vsize = 0.222; this->def_page_setup = 0; this->paphs = 0.21; this->papvs = 0.297; this->paghs = 0.20; this->pagvs = 0.287; this->marls = 0.005; this->marts = 0.005; this->def_overlap = 0; this->overlap = 0.01; this->def_grid_origin = 0; this->gox = thnan; this->goy = thnan; this->goz = thnan; this->def_grid_size = 0; this->gxs = thnan; this->gys = thnan; this->gzs = thnan; this->def_min_symbol_scale = 0; this->min_symbol_scale = 0.0; this->def_font_setup = 0; this->font_setup[0] = thnan; this->def_origin_label = 0; this->olx = "0"; this->oly = "0"; this->def_nav_factor = 0; this->navf = 30.0; this->def_nav_size = 0; this->navsx = 2; this->navsy = 2; this->def_own_pages = 0; this->ownp = 0; this->def_title_pages = 0; this->titlep = false; this->def_doc_title = 0; this->doc_title = ""; this->def_doc_comment = 0; this->doc_comment = ""; this->def_doc_author = 0; this->doc_author = ""; this->def_doc_keywords = 0; this->doc_keywords = ""; this->def_doc_subject = 0; this->doc_subject = ""; this->def_excl_pages = 0; this->excl_pages = false; this->excl_list = NULL; this->def_opacity = 0; this->opacity = 0.75; this->def_map_header_bg = 0; this->map_header_bg = false; this->def_grid_coords = 0; this->grid_coords = TT_LAYOUT_GRIDCOORDS_OFF; this->def_surface = 0; this->surface = TT_LAYOUT_SURFACE_OFF; this->def_surface_opacity = 0; this->surface_opacity = 0.75; this->def_north = 0; this->north = TT_LAYOUT_NORTH_TRUE; this->def_transparency = 0; this->transparency = true; this->def_sketches = 0; this->sketches = false; this->def_legend = 0; this->legend = TT_LAYOUT_LEGEND_OFF; this->def_legend_width = 0; this->legend_width = 0.14; this->def_legend_columns = 0; this->legend_columns = 2; this->def_color_legend = 0; this->color_legend = TT_TRUE; this->def_scale_bar = 0; this->scale_bar = -1.0; this->def_map_header = 0; this->map_header = TT_LAYOUT_MAP_HEADER_NE; this->map_header_x = 100.0; this->map_header_y = 0.0; this->def_debug = 0; this->debug = 0; this->def_survey_level = 0; this->survey_level = 0; this->def_max_explos = 0; this->max_explos = -1; this->def_max_topos = 0; this->max_topos = -1; this->def_max_cartos = 0; this->max_cartos = -1; this->def_max_copys = 0; this->max_copys = -1; this->def_explo_lens = 0; this->explo_lens = TT_LAYOUT_LENSTAT_HIDE; this->def_topo_lens = 0; this->topo_lens = TT_LAYOUT_LENSTAT_HIDE; this->def_lang = 0; this->lang = thcfg.get_lang(); this->def_units = 0; this->units = thdeflocale; this->def_layers = 0; this->layers = true; this->def_grid = 0; this->grid = TT_LAYOUT_GRID_OFF; this->def_page_grid = 0; this->page_grid = false; this->def_page_numbers = 0; this->pgsnum = true; this->def_color_labels = 0; this->color_labels = false; this->def_tex_lines = 0; this->first_line = NULL; this->last_line = NULL; this->lock = false; this->first_copy_src = NULL; this->last_copy_src = NULL; this->color_preview_below.R = 0.5; this->color_preview_below.G = 0.5; this->color_preview_below.B = 0.5; this->color_preview_above.R = 0; this->color_preview_above.G = 0; this->color_preview_above.B = 0; this->color_crit = TT_LAYOUT_CCRIT_UNKNOWN; this->color_mode = TT_LAYOUT_CMODE_AUTO; this->color_table = TT_LAYOUT_CTABLE_HSV; } thlayout::~thlayout() { } int thlayout::get_class_id() { return TT_LAYOUT_CMD; } bool thlayout::is(int class_id) { if (class_id == TT_LAYOUT_CMD) return true; else return thdataobject::is(class_id); } int thlayout::get_cmd_nargs() { return 1; } const char * thlayout::get_cmd_end() { return "endlayout"; } const char * thlayout::get_cmd_name() { // insert command name here return "layout"; } thcmd_option_desc thlayout::get_default_cod(int id) { switch (id) { case TT_LAYOUT_ENDCODE: return thcmd_option_desc(id,0); case TT_LAYOUT_NAV_SIZE: case TT_LAYOUT_OVERLAP: case TT_LAYOUT_SCALE: case TT_LAYOUT_SCALE_BAR: case TT_LAYOUT_BASE_SCALE: case TT_LAYOUT_EXCLUDE_PAGES: case TT_LAYOUT_ORIGIN_LABEL: case TT_LAYOUT_SYMBOL_HIDE: case TT_LAYOUT_SYMBOL_SHOW: case TT_LAYOUT_MAP_ITEM: case TT_LAYOUT_COLOR: case TT_LAYOUT_LEGEND_WIDTH: return thcmd_option_desc(id,2); case TT_LAYOUT_SYMBOL_ASSIGN: case TT_LAYOUT_SIZE: case TT_LAYOUT_MAP_HEADER: case TT_LAYOUT_SYMBOL_COLOR: return thcmd_option_desc(id,3); case TT_LAYOUT_ORIGIN: case TT_LAYOUT_MAP_IMAGE: case TT_LAYOUT_GRID_SIZE: case TT_LAYOUT_GRID_ORIGIN: return thcmd_option_desc(id,4); case TT_LAYOUT_FONT_SETUP: return thcmd_option_desc(id,5); case TT_LAYOUT_PAGE_SETUP: return thcmd_option_desc(id,7); default: return thcmd_option_desc(id); } } thcmd_option_desc thlayout::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_layout_opt); if (id == TT_LAYOUT_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return this->get_default_cod(id); } void thlayout_parse_scale(double * scale,char ** args) { double dv; int sv; thparse_double(sv,dv,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if (dv <= 0.0) ththrow(("positive number expected -- %s",args[0])) *scale = dv; thparse_double(sv,dv,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if (dv <= 0.0) ththrow(("positive number expected -- %s",args[1])) *scale /= dv; if ((*scale > 1.000001e-1) || (*scale < 9.99999e-6)) ththrow(("scale out of range -- %s %s",args[0], args[1])) } void thlayout_parse_rotate(double & rotate, char * rotstr) { thsplit_words(&(thdb.mbuff_tmp), rotstr); int nargs = thdb.mbuff_tmp.get_size(), sv; char ** args = thdb.mbuff_tmp.get_buffer(); thtfangle atf; switch (nargs) { case 2: atf.parse_units(args[1]); case 1: thparse_double(sv, rotate, args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid rotate specification -- %s", rotstr)) rotate = atf.transform(rotate); break; default: ththrow(("invalid rotate specification -- %s", rotstr)) } } enum { TTL_MAPITEM_CARTO, TTL_MAPITEM_COPYRIGHT, TTL_MAPITEM_EXPLO, TTL_MAPITEM_TOPO, TTL_MAPITEM_EXPLO_LENS, TTL_MAPITEM_TOPO_LENS, TTL_MAPITEM_SORT, TTL_MAPITEM_UNKNOWN, }; static const thstok thlayout__mapitems[] = { {"carto", TTL_MAPITEM_CARTO}, {"copyright", TTL_MAPITEM_COPYRIGHT}, {"explo", TTL_MAPITEM_EXPLO}, {"explo-length", TTL_MAPITEM_EXPLO_LENS}, {"topo", TTL_MAPITEM_TOPO}, {"topo-length", TTL_MAPITEM_TOPO_LENS}, {NULL, TTL_MAPITEM_UNKNOWN}, }; void thlayout::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dum; thlayout_copy_src dumm; int sv, sv2, dum_int; //bool parsed; thlayout_copy_src * lcp; thcmd_option_desc defcod = this->get_default_cod(cod.id); switch (cod.id) { case TT_DATAOBJECT_AUTHOR: case TT_DATAOBJECT_COPYRIGHT: defcod.nargs = 2; default: if (cod.nargs > defcod.nargs) ththrow(("too many arguments -- %s", args[defcod.nargs])) } switch (cod.id) { case 0: case TT_LAYOUT_SYMBOL_DEFAULTS: case TT_LAYOUT_SYMBOL_ASSIGN: case TT_LAYOUT_SYMBOL_HIDE: case TT_LAYOUT_SYMBOL_SHOW: case TT_LAYOUT_SYMBOL_COLOR: if (this->def_tex_lines < 2) { this->first_line = this->db->db2d.insert_layoutln(); this->last_line = this->first_line; this->def_tex_lines = 2; } else { this->last_line->next_line = this->db->db2d.insert_layoutln(); this->last_line = this->last_line->next_line; } switch(cod.id) { case 0: if (this->ccode == TT_LAYOUT_CODE_UNKNOWN) { ththrow(("unknown option -- %s", *args)); } thencode(&(this->db->buff_enc), *args, argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); this->last_line->code = this->ccode; break; case TT_LAYOUT_SYMBOL_DEFAULTS: if (args != NULL) { if (!th_is_keyword(*args)) ththrow(("invalid keyword -- %s", args[0])) thencode(&(this->db->buff_enc), *args, argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); } this->last_line->code = TT_LAYOUT_CODE_SYMBOL_DEFAULTS; break; case TT_LAYOUT_SYMBOL_ASSIGN: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) if (!thsymbolset__assign[this->last_line->smid]) ththrow(("symbol can not be assigned -- %s %s", args[0], args[1])) if (!th_is_keyword(args[2])) ththrow(("invalid keyword -- %s", args[2])) thencode(&(this->db->buff_enc), args[2], argenc); this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); this->last_line->code = TT_LAYOUT_CODE_SYMBOL_ASSIGN; break; // case TT_LAYOUT_MAP_ITEM: // this->last_line->smid = thmatch_token(args[0],thtt_layout_mapitem); // if (this->last_line->smid == SYMS_ZZZ) // ththrow(("unknown map-item specification -- %s", args[0])) // if (!th_is_keyword(args[1])) // ththrow(("invalid keyword -- %s", args[1])) // thencode(&(this->db->buff_enc), args[1], argenc); // this->last_line->line = this->db->strstore(this->db->buff_enc.get_buffer()); // this->last_line->code = TT_LAYOUT_CODE_MAP_ITEM; // break; case TT_LAYOUT_SYMBOL_HIDE: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->code = TT_LAYOUT_CODE_SYMBOL_HIDE; break; case TT_LAYOUT_SYMBOL_SHOW: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->code = TT_LAYOUT_CODE_SYMBOL_SHOW; break; case TT_LAYOUT_SYMBOL_COLOR: this->last_line->smid = thsymbolset__get_id(args[0],args[1]); if (this->last_line->smid == -1) ththrow(("unknown symbol specification -- %s %s", args[0], args[1])) this->last_line->sclr.parse(args[2]); this->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR; break; } break; case TT_LAYOUT_SURVEY_LEVEL: thparse_double(sv,dum,args[0]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not an integer -- %s", args[1])) break; case TT_SV_ALL: dum_int = -1; break; case TT_SV_OFF: dum_int = 0; break; default: ththrow(("invalid number or switch -- %s", args[1])) } this->survey_level = dum_int; this->def_survey_level = 2; break; case TT_LAYOUT_MAP_ITEM: sv2 = thmatch_token(args[0],thlayout__mapitems); switch (sv2) { case TTL_MAPITEM_EXPLO_LENS: sv = thmatch_token(args[1],thtt_layout_lenstat); if (sv == TT_LAYOUT_LENSTAT_UNKNOWN) ththrow(("invalid map-item explo-length switch -- %s",args[1])) this->explo_lens = sv; this->def_explo_lens = 2; break; case TTL_MAPITEM_TOPO_LENS: sv = thmatch_token(args[1],thtt_layout_lenstat); if (sv == TT_LAYOUT_LENSTAT_UNKNOWN) ththrow(("invalid map-item topo-length switch -- %s",args[1])) this->topo_lens = sv; this->def_topo_lens = 2; break; case TTL_MAPITEM_EXPLO: case TTL_MAPITEM_TOPO: case TTL_MAPITEM_CARTO: case TTL_MAPITEM_COPYRIGHT: thparse_double(sv,dum,args[1]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not a non-negative integer -- %s", args[1])) break; case TT_SV_ALL: dum_int = -1; break; case TT_SV_OFF: dum_int = 0; break; default: ththrow(("invalid number or switch -- %s", args[1])) } switch (sv2) { case TTL_MAPITEM_EXPLO: this->max_explos = dum_int; this->def_max_explos = 2; break; case TTL_MAPITEM_TOPO: this->max_topos = dum_int; this->def_max_topos = 2; break; case TTL_MAPITEM_CARTO: this->max_cartos = dum_int; this->def_max_cartos = 2; break; case TTL_MAPITEM_COPYRIGHT: this->max_copys = dum_int; this->def_max_copys = 2; break; } break; default: ththrow(("unknown statistics -- %s", args[0])) } break; case TT_LAYOUT_SCALE: thlayout_parse_scale(&(this->scale),args); this->def_scale = 2; break; case TT_LAYOUT_ROTATE: thlayout_parse_rotate(this->rotate,args[0]); this->def_rotate = 2; break; case TT_LAYOUT_BASE_SCALE: thlayout_parse_scale(&(this->base_scale),args); this->def_base_scale = 2; break; case TT_LAYOUT_OVERLAP: this->parse_len(this->overlap, dum, dum, 1, args, 0); this->def_overlap = 2; break; case TT_LAYOUT_LEGEND_WIDTH: this->parse_len(this->legend_width, dum, dum, 1, args, 0); this->def_legend_width = 2; break; case TT_LAYOUT_LEGEND_COLUMNS: thparse_double(sv,dum,args[0]); switch (sv) { case TT_SV_NUMBER: dum_int = int(dum); if ((double(dum_int) != dum) || (dum_int < 0)) ththrow(("not a non-negative integer -- %s", args[0])) break; default: ththrow(("invalid number -- %s", args[0])) } this->legend_columns = (unsigned) dum_int; this->def_legend_columns = 2; break; case TT_LAYOUT_SIZE: this->parse_len(this->hsize, this->vsize, dum, 2, args, 1); this->def_size = 2; break; case TT_LAYOUT_PAGE_SETUP: this->parse_len6(this->paphs, this->papvs, this->paghs, this->pagvs, this->marls, this->marts, 6, args, 1); this->def_page_setup = 2; break; case TT_LAYOUT_ORIGIN: //this->parse_len(this->ox, this->oy, this->oz, 3, args, -1); this->convert_cs(args[0], args[1], this->ox, this->oy); if (this->cs == TTCS_LOCAL) { this->parse_len(this->ox, this->oy, this->oz, 3, args, -1); } else { this->parse_len(this->oz, dum, dum, 1, &(args[2]), -1); } this->def_origin = 2; break; case TT_LAYOUT_GRID_SIZE: this->parse_len(this->gxs, this->gys, this->gzs, 3, args, 1); this->def_grid_size = 2; break; case TT_LAYOUT_FONT_SETUP: for(sv2 = 0; sv2 < 5; sv2++) { thparse_double(sv,dum,args[sv2]); if ((sv != TT_SV_NUMBER) || (dum <= 0.0)) { ththrow(("invalid font size -- %s", args[sv2])) } else { if ((sv2 > 0) && (dum < this->font_setup[sv2-1])) { ththrow(("font size should be increasing by scale -- %s", args[sv2])) } this->font_setup[sv2] = dum; } } this->def_font_setup = 2; break; case TT_LAYOUT_MIN_SYMBOL_SCALE: th2dparse_scale(args[0], sv, this->min_symbol_scale); this->def_min_symbol_scale = 2; break; case TT_LAYOUT_COLOR: sv = thmatch_token(args[0],thtt_layout_color); switch (sv) { case TT_LAYOUT_COLOR_LABELS: sv2 = thmatch_token(args[1], thtt_bool); if (sv2 == TT_UNKNOWN_BOOL) ththrow(("invalid color labels switch (on|off expected) -- %s",args[1])) else { this->color_labels = (sv2 == TT_TRUE); this->def_color_labels = 2; } break; case TT_LAYOUT_COLOR_MAP_FG: this->color_crit = thmatch_token(args[1], thtt_layout_ccrit); if (this->color_crit == TT_LAYOUT_CCRIT_UNKNOWN) this->color_map_fg.parse(args[1]); else this->color_map_fg.defined = 2; break; case TT_LAYOUT_COLOR_MAP_BG: this->color_map_bg.parse(args[1], true); break; case TT_LAYOUT_COLOR_PREVIEW_BELOW: this->color_preview_below.parse(args[1]); break; case TT_LAYOUT_COLOR_PREVIEW_ABOVE: this->color_preview_above.parse(args[1]); break; default: ththrow(("unknown color -- %s",args[0])) } break; case TT_LAYOUT_GRID_ORIGIN: this->convert_cs(args[0], args[1], this->gox, this->goy); if (this->cs == TTCS_LOCAL) { this->parse_len(this->gox, this->goy, this->goz, 3, args, -1); } else { this->parse_len(this->goz, dum, dum, 1, &(args[2]), -1); } this->def_grid_origin = 2; break; case TT_LAYOUT_TRANSPARENCY: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid transparency switch -- %s",args[0])) this->transparency = (sv == TT_TRUE); this->def_transparency = 2; break; case TT_LAYOUT_SKETCHES: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid sketches switch -- %s",args[0])) this->sketches = (sv == TT_TRUE); this->def_sketches = 2; break; case TT_LAYOUT_LEGEND: sv = thmatch_token(args[0],thtt_layout_legend); if (sv == TT_LAYOUT_LEGEND_UNKNOWN) ththrow(("invalid legend switch -- %s",args[0])) this->legend = sv; this->def_legend = 2; break; case TT_LAYOUT_COLOR_LEGEND: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid color-legend switch -- %s",args[0])) this->color_legend = sv; this->def_color_legend = 2; break; case TT_LAYOUT_SCALE_BAR: this->parse_len(this->scale_bar, dum, dum, 1, args, 1); this->def_scale_bar = 2; break; case TT_LAYOUT_MAP_HEADER: thparse_double(sv,this->map_header_x,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if ((this->map_header_x < -100.0) || (this->map_header_x > 200.0)) ththrow(("number between 0.0 - 100.0 expected -- %s",args[0])) thparse_double(sv,this->map_header_y,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if ((this->map_header_y < -100.0) || (this->map_header_y > 200.0)) ththrow(("number between 0.0 - 100.0 expected -- %s",args[1])) sv = thmatch_token(args[2],thtt_layout_map_header); if (sv == TT_LAYOUT_MAP_HEADER_UNKNOWN) ththrow(("invalid map-header switch -- %s",args[2])) this->map_header = sv; this->def_map_header = 2; break; case TT_LAYOUT_MAP_IMAGE: { thlayout_map_image tmpi; tmpi.parse(args, (this->m_pconfig == NULL) ? "" : this->m_pconfig->cfg_file.get_cif_path()); this->map_image_list.push_back(tmpi); } break; case TT_LAYOUT_DEBUG: sv = thmatch_token(args[0],thtt_layout_debug); if (sv == TT_LAYOUT_DEBUG_UNKNOWN) ththrow(("invalid debug switch -- %s",args[0])) switch (sv) { case TT_LAYOUT_DEBUG_ALL: this->debug = TTLDBG_JOINS | TTLDBG_STATIONS | TTLDBG_SCRAPNAMES | TTLDBG_STATIONNAMES; break; case TT_LAYOUT_DEBUG_OFF: this->debug = 0; break; case TT_LAYOUT_DEBUG_STATIONS: this->debug |= TTLDBG_STATIONS; break; case TT_LAYOUT_DEBUG_JOINS: this->debug |= TTLDBG_JOINS; break; case TT_LAYOUT_DEBUG_SCRAPNAMES: this->debug |= TTLDBG_SCRAPNAMES; break; case TT_LAYOUT_DEBUG_STATIONNAMES: this->debug |= TTLDBG_STATIONNAMES; break; } this->def_debug = 2; break; case TT_LAYOUT_LANG: sv = thlang_parse(args[0]); if (sv == THLANG_UNKNOWN) ththrow(("language not supported -- %s",args[0])) this->lang = sv; this->def_lang = 2; break; case TT_LAYOUT_UNITS: this->units.parse_units(args[0]); this->def_units = 2; break; case TT_LAYOUT_LAYERS: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid layers switch -- %s",args[0])) this->layers = (sv == TT_TRUE); this->def_layers = 2; break; case TT_LAYOUT_MAP_HEADER_BG: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid map-header-bg switch -- %s",args[0])) this->map_header_bg = (sv == TT_TRUE); this->def_map_header_bg = 2; break; case TT_LAYOUT_OPACITY: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum < 0.0) || (dum > 100.0)) ththrow(("invalid opacity value -- %s", args[0])) this->opacity = dum / 100.0; this->def_opacity = 2; break; case TT_LAYOUT_SURFACE_OPACITY: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum < 0.0) || (dum > 100.0)) ththrow(("invalid opacity value -- %s", args[0])) this->surface_opacity = dum / 100.0; this->def_surface_opacity = 2; break; case TT_LAYOUT_SURFACE: sv = thmatch_token(args[0],thtt_layout_surface); if (sv == TT_LAYOUT_SURFACE_UNKNOWN) ththrow(("invalid surface switch -- %s",args[0])) this->surface = sv; this->def_surface = 2; break; case TT_LAYOUT_GRID_COORDS: sv = thmatch_token(args[0],thtt_layout_gridcoords); if (sv == TT_LAYOUT_GRIDCOORDS_UNKNOWN) ththrow(("invalid grid-coords switch -- %s",args[0])) this->grid_coords = sv; this->def_grid_coords = 2; break; case TT_LAYOUT_NORTH: sv = thmatch_token(args[0],thtt_layout_north); if (sv == TT_LAYOUT_NORTH_UNKNOWN) ththrow(("invalid north switch -- %s",args[0])) this->north = sv; this->def_north = 2; break; case TT_LAYOUT_GRID: sv = thmatch_token(args[0],thtt_layout_grid); if (sv == TT_LAYOUT_GRID_UNKNOWN) ththrow(("invalid grid switch -- %s",args[0])) this->grid = (char) sv; this->def_grid = 2; break; case TT_LAYOUT_ENDCODE: this->ccode = TT_LAYOUT_CODE_UNKNOWN; break; case TT_LAYOUT_CODE: sv = thmatch_token(args[0],thtt_layout_code); if (sv == TT_LAYOUT_CODE_UNKNOWN) ththrow(("invalid code switch -- %s",args[0])) this->ccode = (char) sv; break; case TT_LAYOUT_PAGE_GRID: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid page-grid switch -- %s",args[0])) this->page_grid = (sv == TT_TRUE); this->def_page_grid = 2; break; case TT_LAYOUT_EXCLUDE_PAGES: sv = thmatch_token(args[0],thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid pages exclusion switch -- %s",args[0])) this->excl_pages = (sv == TT_TRUE); if (strlen(args[1]) > 0) this->excl_list = this->db->strstore(args[1]); else if (this->excl_pages) ththrow(("invalid pages exclusion list -- %s",args[1])); this->def_excl_pages = 2; break; case TT_LAYOUT_PAGE_NUMBERS: sv = thmatch_token(*args,thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid page numbers switch -- %s",*args)) this->pgsnum = (sv == TT_TRUE); this->def_page_numbers = 2; break; case TT_LAYOUT_TITLE_PAGES: sv = thmatch_token(*args,thtt_bool); if (sv == TT_UNKNOWN_BOOL) ththrow(("invalid title-pages switch -- %s",*args)) this->titlep = (sv == TT_TRUE); this->def_title_pages = 2; break; case TT_LAYOUT_DOC_TITLE: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_title = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_title = ""; this->def_doc_title = 2; break; case TT_LAYOUT_DOC_COMMENT: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_comment = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_comment = ""; this->def_doc_comment = 2; break; case TT_LAYOUT_DOC_AUTHOR: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_author = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_author = ""; this->def_doc_author = 2; break; case TT_LAYOUT_DOC_SUBJECT: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_subject = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_subject = ""; this->def_doc_subject = 2; break; case TT_LAYOUT_DOC_KEYWORDS: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->doc_keywords = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->doc_keywords = ""; this->def_doc_keywords = 2; break; case TT_LAYOUT_ORIGIN_LABEL: if (strlen(args[0]) > 0) { //thencode(&(this->db->buff_enc), args[0], argenc); this->olx = this->db->strstore(args[0]); } else ththrow(("invalid label -- %s",args[0])); if (strlen(args[1]) > 0) { //thencode(&(this->db->buff_enc), args[1], argenc); this->oly = this->db->strstore(args[1]); } else ththrow(("invalid label -- %s",args[1])); this->def_origin_label = 2; break; case TT_LAYOUT_NAV_SIZE: thparse_double(sv,dum,args[0]); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid navigator size -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid navigator size -- %s", *args)) this->navsx = unsigned(dum); thparse_double(sv,dum,args[1]); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid navigator size -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid navigator size -- %s", *args)) this->navsy = unsigned(dum); this->def_nav_size = 2; break; case TT_LAYOUT_COPY: if (th_is_extkeyword(*args)) { lcp = & ( * thlayout_copy_src_list.insert(thlayout_copy_src_list.end(),dumm)); if (this->first_copy_src == NULL) { this->first_copy_src = lcp; this->last_copy_src = lcp; } else { this->last_copy_src->next_src = lcp; this->last_copy_src = lcp; } lcp->srcn = this->db->strstore(*args); } else ththrow(("invalid keyword -- %s", *args)); break; case TT_LAYOUT_NAV_FACTOR: thparse_double(sv,this->navf,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid factor -- %s", *args)) if (this->navf <= 0.0) ththrow(("negative factor not allowed -- %s", *args)) this->def_nav_factor = 2; break; case TT_LAYOUT_OWN_PAGES: thparse_double(sv,dum,*args); if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid number of own pages -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid number of own pages -- %s", *args)) this->ownp = unsigned(dum); this->def_own_pages = 2; break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); break; } } void thlayout::self_delete() { delete this; } void thlayout::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thlayout:\n"); fprintf(outf,"\tscale: %f\n",this->scale); fprintf(outf,"\trotate: %f\n",this->rotate); } int thlayout::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thlayout::self_print_library() { thprintf("\toname = \"%s\";\n", this->get_name()); thprintf("\tplayout->set(thcmd_option_desc(TT_DATAOBJECT_NAME,1),oname,TT_UTF_8,0);\n"); // decode title thdecode_c(&(this->db->buff_enc), this->get_title()); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->set(thcmd_option_desc(TT_DATAOBJECT_TITLE,1),oname,TT_UTF_8,0);\n"); thprintf("\tplayout->def_scale = %d;\n", this->def_scale); thprintf("\tplayout->scale = %lg;\n",this->scale); thprintf("\tplayout->def_base_scale = %d;\n", this->def_base_scale); thprintf("\tplayout->base_scale = %lg;\n",this->base_scale); thprintf("\tplayout->def_rotate = %d;\n", this->def_rotate); thprintf("\tplayout->rotate = %lg;\n",this->rotate); thprintf("\tplayout->def_page_setup = %d;\n", this->def_page_setup); thprintf("\tplayout->hsize = %lg;\n",this->hsize); thprintf("\tplayout->vsize = %lg;\n",this->vsize); thprintf("\tplayout->paphs = %lg;\n",this->paphs); thprintf("\tplayout->papvs = %lg;\n",this->papvs); thprintf("\tplayout->paghs = %lg;\n",this->paghs); thprintf("\tplayout->pagvs = %lg;\n",this->pagvs); thprintf("\tplayout->marts = %lg;\n",this->marts); thprintf("\tplayout->marls = %lg;\n",this->marls); thprintf("\tplayout->color_map_bg.defined = %d;\n", this->color_map_bg.defined); thprintf("\tplayout->color_map_bg.R = %lg;\n",this->color_map_bg.R); thprintf("\tplayout->color_map_bg.G = %lg;\n",this->color_map_bg.G); thprintf("\tplayout->color_map_bg.B = %lg;\n",this->color_map_bg.B); thprintf("\tplayout->color_map_bg.A = %lg;\n",this->color_map_bg.A); thprintf("\tplayout->color_map_fg.defined = %d;\n", this->color_map_fg.defined); thprintf("\tplayout->color_crit = %d;\n", this->color_crit); thprintf("\tplayout->color_map_fg.R = %lg;\n",this->color_map_fg.R); thprintf("\tplayout->color_map_fg.G = %lg;\n",this->color_map_fg.G); thprintf("\tplayout->color_map_fg.B = %lg;\n",this->color_map_fg.B); thprintf("\tplayout->color_map_fg.A = %lg;\n",this->color_map_fg.A); thprintf("\tplayout->color_preview_below.defined = %d;\n", this->color_preview_below.defined); thprintf("\tplayout->color_preview_below.R = %lg;\n",this->color_preview_below.R); thprintf("\tplayout->color_preview_below.G = %lg;\n",this->color_preview_below.G); thprintf("\tplayout->color_preview_below.B = %lg;\n",this->color_preview_below.B); thprintf("\tplayout->color_preview_below.A = %lg;\n",this->color_preview_below.A); thprintf("\tplayout->color_preview_above.defined = %d;\n", this->color_preview_above.defined); thprintf("\tplayout->color_preview_above.R = %lg;\n",this->color_preview_above.R); thprintf("\tplayout->color_preview_above.G = %lg;\n",this->color_preview_above.G); thprintf("\tplayout->color_preview_above.B = %lg;\n",this->color_preview_above.B); thprintf("\tplayout->color_preview_above.A = %lg;\n",this->color_preview_above.A); thprintf("\tplayout->def_overlap = %d;\n", this->def_overlap); thprintf("\tplayout->overlap = %lg;\n",this->overlap); thprintf("\tplayout->def_scale_bar = %d;\n", this->def_scale_bar); thprintf("\tplayout->scale_bar = %lg;\n",this->scale_bar); thprintf("\tplayout->def_transparency = %d;\n", this->def_transparency); thprintf("\tplayout->transparency = %s;\n",(this->transparency ? "true" : "false")); thprintf("\tplayout->def_sketches = %d;\n", this->def_sketches); thprintf("\tplayout->sketches = %s;\n",(this->sketches ? "true" : "false")); thprintf("\tplayout->def_legend = %d;\n", this->def_legend); thprintf("\tplayout->legend = %s;\n",( this->legend == TT_LAYOUT_LEGEND_OFF ? "TT_LAYOUT_LEGEND_OFF" : ( this->legend == TT_LAYOUT_LEGEND_ON ? "TT_LAYOUT_LEGEND_ON" : "TT_LAYOUT_LEGEND_ALL" ))); thprintf("\tplayout->def_survey_level = %d;\n", this->def_survey_level); thprintf("\tplayout->survey_level = %d;\n", this->survey_level); thprintf("\tplayout->def_color_legend = %d;\n", this->def_color_legend); thprintf("\tplayout->legend = %d;\n", this->color_legend); thprintf("\tplayout->def_legend_width = %d;\n", this->def_legend_width); thprintf("\tplayout->legend_width = %lg;\n",this->legend_width); thprintf("\tplayout->def_legend_columns = %d;\n", this->def_legend_columns); thprintf("\tplayout->legend_columns = %d;\n",this->legend_columns); thprintf("\tplayout->def_map_header = %d;\n", this->def_map_header); thprintf("\tplayout->map_header = %d;\n",this->map_header); thprintf("\tplayout->map_header_x = %lg;\n",this->map_header_x); thprintf("\tplayout->map_header_y = %lg;\n",this->map_header_y); thprintf("\tplayout->def_debug = %d;\n", this->def_debug); thprintf("\tplayout->debug = %d;\n",this->debug); thprintf("\tplayout->def_max_explos = %d;\n", this->def_max_explos); thprintf("\tplayout->max_explos = %d;\n",this->max_explos); thprintf("\tplayout->def_max_topos = %d;\n", this->def_max_topos); thprintf("\tplayout->max_topos = %d;\n",this->max_topos); thprintf("\tplayout->def_max_cartos = %d;\n", this->def_max_cartos); thprintf("\tplayout->max_cartos = %d;\n",this->max_cartos); thprintf("\tplayout->def_max_copys = %d;\n", this->def_max_copys); thprintf("\tplayout->max_copys = %d;\n",this->max_copys); thprintf("\tplayout->def_explo_lens = %d;\n",this->def_explo_lens); thprintf("\tplayout->explo_lens = %d;\n",this->explo_lens); thprintf("\tplayout->def_topo_lens = %d;\n",this->def_topo_lens); thprintf("\tplayout->topo_lens = %d;\n",this->topo_lens); thprintf("\tplayout->def_lang = %d;\n", this->def_lang); thprintf("\tplayout->lang = %s;\n",thlang_getcxxid(this->lang)); thprintf("\tplayout->def_units = %d;\n", this->def_units); thprintf("\tplayout->units.units = %d;\n",this->units.units); thprintf("\tplayout->def_layers = %d;\n", this->def_layers); thprintf("\tplayout->layers = %s;\n",(this->layers ? "true" : "false")); thprintf("\tplayout->def_map_header_bg = %d;\n", this->def_map_header_bg); thprintf("\tplayout->map_header_bg = %s;\n",(this->map_header_bg ? "true" : "false")); thprintf("\tplayout->def_opacity = %d;\n", this->def_opacity); thprintf("\tplayout->opacity = %lg;\n",this->opacity); thprintf("\tplayout->def_surface_opacity = %d;\n", this->def_surface_opacity); thprintf("\tplayout->surface_opacity = %lg;\n", this->surface_opacity); thprintf("\tplayout->def_surface= %d;\n", this->def_surface); thprintf("\tplayout->surface = %d;\n", this->surface); thprintf("\tplayout->def_color_labels= %d;\n", this->def_color_labels); thprintf("\tplayout->color_labels = %s;\n", (this->color_labels ? "true" : "false")); thprintf("\tplayout->def_grid_coords = %d;\n", this->def_grid_coords); thprintf("\tplayout->grid_coords = %d;\n", this->grid_coords); thprintf("\tplayout->def_north= %d;\n", this->def_north); thprintf("\tplayout->north = %d;\n", this->north); thprintf("\tplayout->def_grid = %d;\n", this->def_grid); thprintf("\tplayout->grid = %d;\n",this->grid); thprintf("\tplayout->def_page_grid = %d;\n", this->def_page_grid); thprintf("\tplayout->page_grid = %s;\n",(this->page_grid ? "true" : "false")); thprintf("\tplayout->def_origin = %d;\n", this->def_origin); if (!thisnan(this->ox)) thprintf("\tplayout->ox = %lg;\n",this->ox); if (!thisnan(this->oy)) thprintf("\tplayout->oy = %lg;\n",this->oy); if (!thisnan(this->oz)) thprintf("\tplayout->oz = %lg;\n",this->oz); thprintf("\tplayout->def_origin_label = %d;\n", this->def_origin_label); thdecode_c(&(this->db->buff_enc), this->olx); thprintf("\tplayout->olx = \"%s\";\n", this->db->buff_enc.get_buffer()); thdecode_c(&(this->db->buff_enc), this->oly); thprintf("\tplayout->oly = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_title = %d;\n", this->def_doc_title); thdecode_c(&(this->db->buff_enc), this->doc_title); thprintf("\tplayout->doc_title = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_comment = %d;\n", this->def_doc_comment); thdecode_c(&(this->db->buff_enc), this->doc_comment); thprintf("\tplayout->doc_comment = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_author = %d;\n", this->def_doc_author); thdecode_c(&(this->db->buff_enc), this->doc_author); thprintf("\tplayout->doc_author = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_subject = %d;\n", this->def_doc_author); thdecode_c(&(this->db->buff_enc), this->doc_subject); thprintf("\tplayout->doc_subject = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_doc_keywords = %d;\n", this->def_doc_keywords); thdecode_c(&(this->db->buff_enc), this->doc_keywords); thprintf("\tplayout->doc_keywords = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->def_excl_pages = %d;\n", this->def_excl_pages); thprintf("\tplayout->excl_pages = %s;\n",(this->excl_pages ? "true" : "false")); if (this->excl_list == NULL) { thprintf("\tplayout->excl_list = NULL;\n"); } else { thdecode_c(&(this->db->buff_enc), this->excl_list); thprintf("\tplayout->excl_list = \"%s\";\n", this->db->buff_enc.get_buffer()); } thprintf("\tplayout->def_font_setup = %d;\n", this->def_font_setup); if (!thisnan(this->font_setup[0])) { thprintf("\tplayout->font_setup[0] = %lg;\n",this->font_setup[0]); thprintf("\tplayout->font_setup[1] = %lg;\n",this->font_setup[1]); thprintf("\tplayout->font_setup[2] = %lg;\n",this->font_setup[2]); thprintf("\tplayout->font_setup[3] = %lg;\n",this->font_setup[3]); thprintf("\tplayout->font_setup[4] = %lg;\n",this->font_setup[4]); } thprintf("\tplayout->def_min_symbol_scale = %d;\n", this->def_min_symbol_scale); if (this->min_symbol_scale > 0.0) { thprintf("\tplayout->min_symbol_scale = %lg;\n",this->min_symbol_scale); } thprintf("\tplayout->def_grid_size = %d;\n", this->def_grid_size); if (!thisnan(this->gxs)) { thprintf("\tplayout->gxs = %lg;\n",this->gxs); thprintf("\tplayout->gys = %lg;\n",this->gys); thprintf("\tplayout->gzs = %lg;\n",this->gzs); } thprintf("\tplayout->def_grid_origin = %d;\n", this->def_grid_origin); if (!thisnan(this->gox)) thprintf("\tplayout->gox = %lg;\n",this->gox); if (!thisnan(this->goy)) thprintf("\tplayout->goy = %lg;\n",this->goy); if (!thisnan(this->goz)) thprintf("\tplayout->goz = %lg;\n",this->goz); thprintf("\tplayout->def_nav_factor = %d;\n", this->def_nav_factor); thprintf("\tplayout->navf = %lg;\n",this->navf); thprintf("\tplayout->def_nav_size = %d;\n", this->def_nav_size); thprintf("\tplayout->navsx = %d;\n",this->navsx); thprintf("\tplayout->navsy = %d;\n",this->navsy); thprintf("\tplayout->def_own_pages = %d;\n", this->def_own_pages); thprintf("\tplayout->ownp = %d;\n",this->ownp); thprintf("\tplayout->def_title_pages = %d;\n", this->def_title_pages); thprintf("\tplayout->titlep = %s;\n",(this->titlep ? "true" : "false")); thprintf("\tplayout->def_page_numbers = %d;\n", this->def_page_numbers); thprintf("\tplayout->pgsnum = %s;\n",(this->pgsnum ? "true" : "false")); thlayoutln * ln = this->first_line; char last_code = TT_LAYOUT_CODE_UNKNOWN; while(ln != NULL) { switch (ln->code) { case TT_LAYOUT_CODE_METAPOST: case TT_LAYOUT_CODE_TEX_MAP: case TT_LAYOUT_CODE_TEX_ATLAS: thdecode_c(&(this->db->buff_enc), ln->line); if (ln->code != last_code) { thprintf("\tplayout->ccode = "); switch (ln->code) { case TT_LAYOUT_CODE_METAPOST: thprintf("TT_LAYOUT_CODE_METAPOST"); break; case TT_LAYOUT_CODE_TEX_MAP: thprintf("TT_LAYOUT_CODE_TEX_MAP"); break; default: thprintf("TT_LAYOUT_CODE_TEX_ATLAS"); break; } thprintf(";\n"); } thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); thprintf("\tplayout->set(thcmd_option_desc(0,1),oname,TT_UTF_8,0);\n"); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: case TT_LAYOUT_CODE_MAP_ITEM: case TT_LAYOUT_CODE_SYMBOL_DEFAULTS: case TT_LAYOUT_CODE_SYMBOL_HIDE: case TT_LAYOUT_CODE_SYMBOL_SHOW: case TT_LAYOUT_CODE_SYMBOL_COLOR: if (ln->line != NULL) { thdecode_c(&(this->db->buff_enc), ln->line); thprintf("\toname = \"%s\";\n", this->db->buff_enc.get_buffer()); } if (ln->code != TT_LAYOUT_CODE_SYMBOL_DEFAULTS) thprintf("\tplayout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,0),NULL,TT_UTF_8,0);\n"); else thprintf("\tplayout->set(thcmd_option_desc(TT_LAYOUT_SYMBOL_DEFAULTS,1),oname,TT_UTF_8,0);\n"); if (ln->code != TT_LAYOUT_CODE_SYMBOL_DEFAULTS) { switch (ln->code) { case TT_LAYOUT_CODE_SYMBOL_HIDE: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_HIDE;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_SHOW: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_SHOW;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_MAP_ITEM: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_MAP_ITEM;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_ASSIGN;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); break; case TT_LAYOUT_CODE_SYMBOL_COLOR: thprintf("\tplayout->last_line->code = TT_LAYOUT_CODE_SYMBOL_COLOR;\n"); thprintf("\tplayout->last_line->smid = %s;\n", thsymbolset__src[ln->smid]); thprintf("\tplayout->last_line->sclr = thlayout_color(%.6f,%.6f,%.6f);\n", ln->sclr.R, ln->sclr.G, ln->sclr.B); break; } } break; } ln = ln->next_line; } thprintf("\tplayout->def_tex_lines = %d;\n", this->def_tex_lines); } void check_num(double num, int nonneg) { if (nonneg == 0) { if (num < 0) { ththrow(("not a non-negative number -- %g", num)); } } else if (nonneg > 0) { if (num <= 0) { ththrow(("not a positive number -- %g", num)); } } } void thlayout::parse_len(double & d1, double & d2, double & d3, int nargs, char ** args, int nonneg) { int sv; thtflength lentf; lentf.parse_units(args[nargs]); switch (nargs) { case 3: thparse_double(sv,d3,args[2]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[2])); d3 = lentf.transform(d3); check_num(d3,nonneg); case 2: thparse_double(sv,d2,args[1]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[1])); d2 = lentf.transform(d2); check_num(d2,nonneg); case 1: thparse_double(sv,d1,args[0]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[0])); d1 = lentf.transform(d1); check_num(d1,nonneg); } } void thlayout::parse_len6(double & d1, double & d2, double & d3, double & d4, double & d5, double & d6, int nargs, char ** args, int nonneg) { int sv; thtflength lentf; lentf.parse_units(args[nargs]); switch (nargs) { case 6: thparse_double(sv,d6,args[5]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[5])); d6 = lentf.transform(d6); check_num(d6,nonneg); case 5: thparse_double(sv,d5,args[4]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[4])); d5 = lentf.transform(d5); check_num(d5,nonneg); case 4: thparse_double(sv,d4,args[3]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[3])); d4 = lentf.transform(d4); check_num(d4,nonneg); case 3: thparse_double(sv,d3,args[2]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[2])); d3 = lentf.transform(d3); check_num(d3,nonneg); case 2: thparse_double(sv,d2,args[1]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[1])); d2 = lentf.transform(d2); check_num(d2,nonneg); case 1: thparse_double(sv,d1,args[0]); if ((sv != TT_SV_NUMBER)) ththrow(("invalid number -- %s", args[0])); d1 = lentf.transform(d1); check_num(d1,nonneg); } } #define THM2PT 2834.64566929 void thlayout::export_config(FILE * o, thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy) { double pgox, pgoy; double ghs, gvs; fprintf(o,"Configuration file\n"); fprintf(o,"hsize: %.2fmm\nvsize: %.2fmm\n",this->hsize * 1000.0,this->vsize * 1000.0); fprintf(o,"Overlap: %.2fmm\n",this->overlap * 1000.0); //fprintf(o,"Hoffset: %.2fmm\nVoffset: %.2fmm\n",this->hsize * 500.0,this->vsize * 500.0); switch (prj->type) { case TT_2DPROJ_EXTEND: case TT_2DPROJ_ELEV: pgox = (this->gox - prj->shift_x) * x_scale + x_origin_shx; pgoy = (this->goz - prj->shift_z) * x_scale + x_origin_shy; ghs = this->gxs; gvs = this->gzs; break; default: pgox = (this->gox - prj->shift_x) * x_scale + x_origin_shx; pgoy = (this->goy - prj->shift_y) * x_scale + x_origin_shy; ghs = this->gxs; gvs = this->gys; break; } fprintf(o,"HGrid: %.2fmm\nVGrid: %.2fmm\n",ghs * this->scale * 1000.0, gvs * this->scale * 1000.0); pgox = pgox - (THM2PT * ghs * (double)(long)(pgox / ghs / THM2PT)); pgoy = pgoy - (THM2PT * gvs * (double)(long)(pgoy / gvs / THM2PT)); fprintf(o,"HGridOffset: %.2fmm\nVGridOffset: %.2fmm\n",pgox / THM2PT * 1000.0,pgoy / THM2PT * 1000.0); fprintf(o,"Background: 0\n"); fprintf(o,"StartX: %s\nStartY: %s\nStartZ: 0\n", this->olx, this->oly); fprintf(o,"NavRight: %d\nNavUp: %d\n", this->navsx, this->navsy); fprintf(o,"NavFactor: %.2f\n", this->navf); fprintf(o,"OwnPages: %d\n", this->ownp); fprintf(o,"TitlePages: %d\n", (this->titlep ? 1 : 0)); fprintf(o,"PageNumbering: %d\n", (this->pgsnum ? 1 : 0)); fprintf(o,"Transparency: %d\n", (this->transparency ? 1 : 0)); fprintf(o,"ExclPages: %d\n", (this->excl_pages ? 1 : 0)); if (this->excl_pages) { fprintf(o,"ExclList: %s\n", this->excl_list); } fprintf(o,"MapGrid: %d\n", (this->page_grid ? 1 : 0)); } void thlayout_print_header_align(FILE * o, int a) { switch (a) { case TT_LAYOUT_MAP_HEADER_CENTER: fprintf(o,"C"); break; case TT_LAYOUT_MAP_HEADER_N: fprintf(o,"N"); break; case TT_LAYOUT_MAP_HEADER_NE: fprintf(o,"NE"); break; case TT_LAYOUT_MAP_HEADER_E: fprintf(o,"E"); break; case TT_LAYOUT_MAP_HEADER_W: fprintf(o,"W"); break; case TT_LAYOUT_MAP_HEADER_S: fprintf(o,"S"); break; case TT_LAYOUT_MAP_HEADER_SW: fprintf(o,"SW"); break; case TT_LAYOUT_MAP_HEADER_SE: fprintf(o,"SE"); break; default: fprintf(o,"NW"); } } void thlayout::export_pdftex(FILE * o, thdb2dprj * prj, char mode) { fprintf(o,"\\opacity{%.2f}\n",this->opacity); fprintf(o,"\\def\\scale{%lu}\n",(unsigned long)(1.0 / this->scale + 0.5)); fprintf(o,"\\pagesetup{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}{%.4fcm}\n", this->paphs*100.0, this->papvs*100.0, this->paghs*100.0, this->pagvs*100.0, this->marls*100.0, this->marts*100.0); fprintf(o,"\\def\\maplayout{"); thlayout_map_image_list::iterator mit; size_t nami = 0; for(mit = this->map_image_list.begin(); mit != this->map_image_list.end(); mit++) { if (mit->defined() && (mit->m_align != TT_LAYOUT_MAP_HEADER_OFF)) nami++; } thbuffer pict_path, pn; size_t pl; char * pp; long i; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); pp = pict_path.get_buffer(); pl = strlen(pp); if ((pl > 0) && ((pp[pl-1] == '/') || (pp[pl-1] == '\\'))) { pp[pl-1] = 0; } if (this->map_header != TT_LAYOUT_MAP_HEADER_OFF) { fprintf(o,"\\legendbox{%.0f}{%.0f}{", this->map_header_x, this->map_header_y); thlayout_print_header_align(o, this->map_header); fprintf(o,"}"); fprintf(o,"{\\the\\legendcontent}"); } if (nami > 0) { for(mit = this->map_image_list.begin(); mit != this->map_image_list.end(); mit++) { if (mit->defined() && (mit->m_align != TT_LAYOUT_MAP_HEADER_OFF)) { pn = pict_path; pn += "/"; pn += mit->m_fn; pp = pn.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } fprintf(o,"\\legendbox{%.0f}{%.0f}{", mit->m_x, mit->m_y); thlayout_print_header_align(o, mit->m_align); fprintf(o,"}{\\loadpicture{%s}}",pp); } } } fprintf(o,"}\n"); bool anyline = false; bool anylegend = false; if (this->first_line != NULL) { thlayoutln * ln = this->first_line; while(ln != NULL) { if (ln->code == mode) { // ak najde \\formattedlegend v \\insertmaps tak anyline bude // true if ((!anyline) && (strstr(ln->line, "\\insertmaps") != NULL)) anyline = true; if ((!anylegend) && (strstr(ln->line, "\\formattedlegend") != NULL)) anylegend = true; thdecode_utf2tex(&(this->db->buff_enc), ln->line); fprintf(o, "%s\n", this->db->buff_enc.get_buffer()); } ln = ln->next_line; } } if (!anyline) { fprintf(o,"\\insertmaps\n"); if (mode == TT_LAYOUT_CODE_TEX_ATLAS) { if ((!anylegend) && (this->legend != TT_LAYOUT_LEGEND_OFF)) { fprintf(o,"\\formattedlegend\n"); } } } } void thlayout::export_mpost(FILE * o) { bool anyline = false; if (this->first_line != NULL) { thlayoutln * ln = this->first_line; while(ln != NULL) { if (ln->code == TT_LAYOUT_CODE_METAPOST) { anyline = true; thdecode(&(this->db->buff_enc), TT_ISO8859_2, ln->line); fprintf(o, "%s\n", this->db->buff_enc.get_buffer()); } ln = ln->next_line; } } if (!anyline) { } } void thlayout::export_mpost_symbols(FILE * o, thsymbolset * symset) { thlayoutln * ln = this->first_line; while(ln != NULL) { switch (ln->code) { case TT_LAYOUT_CODE_SYMBOL_DEFAULTS: symset->export_symbol_defaults(o,ln->line); break; case TT_LAYOUT_CODE_SYMBOL_ASSIGN: symset->export_symbol_assign(o,ln->smid,ln->line); break; case TT_LAYOUT_CODE_SYMBOL_HIDE: symset->export_symbol_hide(o,ln->smid); break; case TT_LAYOUT_CODE_SYMBOL_SHOW: symset->export_symbol_show(o,ln->smid); break; case TT_LAYOUT_CODE_SYMBOL_COLOR: symset->export_symbol_color(o,ln->smid,&(ln->sclr)); break; case TT_LAYOUT_CODE_MAP_ITEM: symset->export_symbol_assign(o,ln->smid,ln->line); break; } ln = ln->next_line; } } void thlayout::process_copy() { thlayout_copy_src * csp; thlayout * srcl; // ak je locknuty -> tak warning a koniec if (this->lock) { this->throw_source(); threwarning2(("recursive layout copying")) return; } this->lock = true; this->last_copy_src = this->first_copy_src; while (this->first_copy_src != NULL) { csp = this->first_copy_src; // najdeme si layout podla mena csp->srcptr = this->db->get_layout(csp->srcn); if (csp->srcptr == NULL) { this->throw_source(); threwarning2(("source layout not found -- %s", csp->srcn)) } else { srcl = csp->srcptr; // ak ma este nevyriesene zavislosti if (srcl->first_copy_src != NULL) srcl->process_copy(); // teraz skopirujme co nemame a on ma #define begcopy(whatx) if ((this->whatx < 2) && (srcl->whatx > 0)) { \ this->whatx = 1; #define endcopy } begcopy(def_scale) this->scale = srcl->scale; endcopy begcopy(def_rotate) this->rotate = srcl->rotate; endcopy begcopy(def_base_scale) this->base_scale = srcl->base_scale; endcopy begcopy(def_origin) this->ox = srcl->ox; this->oy = srcl->oy; this->oz = srcl->oz; endcopy begcopy(def_size) this->hsize = srcl->hsize; this->vsize = srcl->vsize; endcopy begcopy(def_page_setup) this->paphs = srcl->paphs; this->papvs = srcl->papvs; this->paghs = srcl->paghs; this->pagvs = srcl->pagvs; this->marls = srcl->marls; this->marts = srcl->marts; endcopy begcopy(def_overlap) this->overlap = srcl->overlap; endcopy begcopy(def_scale_bar) this->scale_bar = srcl->scale_bar; endcopy begcopy(def_grid_origin) this->gox = srcl->gox; this->goy = srcl->goy; this->goz = srcl->goz; endcopy begcopy(def_excl_pages) this->excl_pages = srcl->excl_pages; this->excl_list = srcl->excl_list; endcopy begcopy(color_map_fg.defined) this->color_crit = srcl->color_crit; this->color_map_fg.R = srcl->color_map_fg.R; this->color_map_fg.G = srcl->color_map_fg.G; this->color_map_fg.B = srcl->color_map_fg.B; this->color_map_fg.A = srcl->color_map_fg.A; endcopy begcopy(color_preview_below.defined) this->color_preview_below.R = srcl->color_preview_below.R; this->color_preview_below.G = srcl->color_preview_below.G; this->color_preview_below.B = srcl->color_preview_below.B; this->color_preview_below.A = srcl->color_preview_below.A; endcopy begcopy(color_preview_above.defined) this->color_preview_above.R = srcl->color_preview_above.R; this->color_preview_above.G = srcl->color_preview_above.G; this->color_preview_above.B = srcl->color_preview_above.B; this->color_preview_above.A = srcl->color_preview_above.A; endcopy begcopy(color_map_bg.defined) this->color_map_bg.R = srcl->color_map_bg.R; this->color_map_bg.G = srcl->color_map_bg.G; this->color_map_bg.B = srcl->color_map_bg.B; this->color_map_bg.A = srcl->color_map_bg.A; endcopy begcopy(def_doc_title) this->doc_title = srcl->doc_title; endcopy if ((this->def_doc_comment > 0) && (strlen(this->doc_comment) > 0) && (srcl->def_doc_comment > 0)) { std::string tmpstr(this->doc_comment); tmpstr += "
"; tmpstr += srcl->doc_comment; this->doc_comment = this->db->strstore(tmpstr.c_str()); } else { begcopy(def_doc_comment) this->doc_comment = srcl->doc_comment; endcopy } begcopy(def_doc_author) this->doc_author = srcl->doc_author; endcopy begcopy(def_doc_subject) this->doc_subject = srcl->doc_subject; endcopy begcopy(def_doc_keywords) this->doc_keywords = srcl->doc_keywords; endcopy begcopy(def_grid_size) this->gxs = srcl->gxs; this->gys = srcl->gys; this->gzs = srcl->gzs; endcopy begcopy(def_font_setup) this->font_setup[0] = srcl->font_setup[0]; this->font_setup[1] = srcl->font_setup[1]; this->font_setup[2] = srcl->font_setup[2]; this->font_setup[3] = srcl->font_setup[3]; this->font_setup[4] = srcl->font_setup[4]; endcopy begcopy(def_min_symbol_scale) this->min_symbol_scale = srcl->min_symbol_scale; endcopy begcopy(def_origin_label) this->olx = srcl->olx; this->oly = srcl->oly; endcopy begcopy(def_nav_factor) this->navf = srcl->navf; endcopy begcopy(def_nav_size) this->navsx = srcl->navsx; this->navsy = srcl->navsy; endcopy begcopy(def_own_pages) this->ownp = srcl->ownp; endcopy begcopy(def_title_pages) this->titlep = srcl->titlep; endcopy begcopy(def_opacity) this->opacity = srcl->opacity; endcopy begcopy(def_surface) this->surface = srcl->surface; endcopy begcopy(def_color_labels) this->color_labels = srcl->color_labels; endcopy begcopy(def_grid_coords) this->grid_coords = srcl->grid_coords; endcopy begcopy(def_north) this->north = srcl->north; endcopy begcopy(def_surface_opacity) this->surface_opacity = srcl->surface_opacity; endcopy begcopy(def_transparency) this->transparency = srcl->transparency; endcopy begcopy(def_sketches) this->sketches = srcl->sketches; endcopy begcopy(def_legend) this->legend = srcl->legend; endcopy begcopy(def_survey_level) this->survey_level = srcl->survey_level; endcopy begcopy(def_color_legend) this->color_legend = srcl->color_legend; endcopy begcopy(def_legend_width) this->legend_width = srcl->legend_width; endcopy begcopy(def_legend_columns) this->legend_columns = srcl->legend_columns; endcopy begcopy(def_map_header) this->map_header = srcl->map_header; this->map_header_x = srcl->map_header_x; this->map_header_y = srcl->map_header_y; endcopy begcopy(def_debug) this->debug = srcl->debug; endcopy begcopy(def_max_explos) this->max_explos = srcl->max_explos; endcopy begcopy(def_max_topos) this->max_topos = srcl->max_topos; endcopy begcopy(def_max_cartos) this->max_cartos = srcl->max_cartos; endcopy begcopy(def_max_copys) this->max_copys = srcl->max_copys; endcopy begcopy(def_explo_lens) this->explo_lens = srcl->explo_lens; endcopy begcopy(def_topo_lens) this->topo_lens = srcl->topo_lens; endcopy begcopy(def_lang) this->lang = srcl->lang; endcopy begcopy(def_units) this->units = srcl->units; endcopy begcopy(def_layers) this->layers = srcl->layers; endcopy begcopy(def_map_header_bg) this->map_header_bg = srcl->map_header_bg; endcopy begcopy(def_grid) this->grid = srcl->grid; endcopy begcopy(def_page_grid) this->page_grid = srcl->page_grid; endcopy begcopy(def_page_numbers) this->pgsnum = srcl->pgsnum; endcopy if (srcl->first_line != NULL) { // musime ich nakopirovat pred nase thlayoutln * cl, * nl, * newfl = NULL, * newll = NULL; cl = srcl->first_line; while (cl != NULL) { nl = this->db->db2d.insert_layoutln(); *nl = *cl; if (newll == NULL) { newfl = nl; newll = nl; newll->next_line = NULL; } else { newll->next_line = nl; newll = nl; } cl = cl->next_line; } if (this->last_line == NULL) { this->last_line = newll; newll->next_line = NULL; } else { newll->next_line = this->first_line; } this->first_line = newfl; } // copy map images thlayout_map_image_list::iterator mit, mits; mits = this->map_image_list.begin(); for (mit = srcl->map_image_list.begin(); mit != srcl->map_image_list.end(); mit++) { this->map_image_list.insert(mits, *mit); } } // pokracujeme v cykle this->first_copy_src = this->first_copy_src->next_src; } this->lock = false; } void thlayout::set_thpdf_layout(thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy) { //string excl_list,labelx,labely; //bool excl_pages,background,title_pages,page_numbering, // transparency,map_grid; //float hsize,vsize,overlap, // hgrid,vgrid,hgridoffset,vgridoffset, //nav_factor; //int nav_right,nav_up,own_pages; LAYOUT.excl_list = (this->excl_list != NULL ? this->excl_list : ""); LAYOUT.labelx = this->olx; LAYOUT.labely = this->oly; LAYOUT.excl_pages = this->excl_pages; LAYOUT.title_pages = this->titlep; LAYOUT.page_numbering = this->pgsnum; LAYOUT.transparency = this->transparency; LAYOUT.OCG = this->layers; LAYOUT.map_header_bg = this->map_header_bg; LAYOUT.transparent_map_bg = (this->color_map_bg.A < 1.0); //TODO LAYOUT.map_grid = this->page_grid; LAYOUT.hsize = this->hsize * THM2PT; LAYOUT.vsize = this->vsize * THM2PT; LAYOUT.legend_width = this->legend_width * THM2PT; LAYOUT.legend_columns = (int) this->legend_columns; LAYOUT.overlap = this->overlap * THM2PT; switch (this->grid_coords) { case TT_LAYOUT_GRIDCOORDS_OFF: LAYOUT.grid_coord_freq = 0; break; case TT_LAYOUT_GRIDCOORDS_ALL: LAYOUT.grid_coord_freq = 2; break; default: LAYOUT.grid_coord_freq = 1; break; } switch (this->surface) { case TT_LAYOUT_SURFACE_OFF: LAYOUT.surface = 0; break; case TT_LAYOUT_SURFACE_TOP: LAYOUT.surface = 2; break; default: LAYOUT.surface = 1; break; } // TODO: sketches into layer if (this->sketches) { LAYOUT.surface = 1; } LAYOUT.surface_opacity = this->surface_opacity; LAYOUT.nav_factor = this->navf; LAYOUT.nav_right = this->navsx; LAYOUT.nav_up = this->navsy; LAYOUT.own_pages = this->ownp; if (strlen(this->doc_title) > 0) LAYOUT.doc_title = this->doc_title; if (strlen(this->doc_comment) > 0) LAYOUT.doc_comment = this->doc_comment; if (strlen(this->doc_author) > 0) LAYOUT.doc_author = this->doc_author; if (strlen(this->doc_subject) > 0) LAYOUT.doc_subject = this->doc_subject; if (strlen(this->doc_keywords) > 0) LAYOUT.doc_keywords = this->doc_keywords; LAYOUT.opacity = this->opacity; LAYOUT.colored_text = this->color_labels; LAYOUT.background_r = this->color_map_bg.R; LAYOUT.background_g = this->color_map_bg.G; LAYOUT.background_b = this->color_map_bg.B; LAYOUT.foreground_r = this->color_map_fg.R; LAYOUT.foreground_g = this->color_map_fg.G; LAYOUT.foreground_b = this->color_map_fg.B; LAYOUT.preview_above_r = this->color_preview_above.R; LAYOUT.preview_above_g = this->color_preview_above.G; LAYOUT.preview_above_b = this->color_preview_above.B; LAYOUT.preview_below_r = this->color_preview_below.R; LAYOUT.preview_below_g = this->color_preview_below.G; LAYOUT.preview_below_b = this->color_preview_below.B; LAYOUT.lang = this->lang; LAYOUT.langstr = thlang_getid(this->lang); } bool thlayout::is_debug_stations() { return ((this->debug & TTLDBG_STATIONS) != 0); } bool thlayout::is_debug_joins() { return ((this->debug & TTLDBG_JOINS) != 0); } bool thlayout::is_debug_scrapnames() { return ((this->debug & TTLDBG_SCRAPNAMES) != 0); } bool thlayout::is_debug_stationnames() { return ((this->debug & TTLDBG_STATIONNAMES) != 0); } std::list thlayout_copy_src_list; bool thlayout_map_image::defined() { return (strlen(this->m_fn) > 0); } void thlayout_map_image::parse(char ** args, const char * cpath) { int sv; thparse_double(sv,this->m_x,args[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[0])) if ((this->m_x < -100.0) || (this->m_x > 200.0)) ththrow(("number between -100.0 - 200.0 expected -- %s",args[0])) thparse_double(sv,this->m_y,args[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",args[1])) if ((this->m_y < -100.0) || (this->m_y > 200.0)) ththrow(("number between -100.0 - 200.0 expected -- %s",args[1])) sv = thmatch_token(args[2],thtt_layout_map_header); if (sv == TT_LAYOUT_MAP_HEADER_UNKNOWN) ththrow(("invalid map-image align switch -- %s",args[2])) this->m_align = sv; if (strlen(args[3]) == 0) ththrow(("empty image file name not allowed")) std::string fpath; fpath = cpath; if (thpath_is_absolute(args[3])) fpath = args[3]; else fpath += args[3]; this->m_fn = thdb.strstore(fpath.c_str()); } void thlayout::export_mptex_font_size(FILE * o, th2ddataobject * obj, bool print_default_scale) { switch (obj->scale) { case TT_2DOBJ_SCALE_XL: fprintf(o,"\\thhugesize "); break; case TT_2DOBJ_SCALE_L: fprintf(o,"\\thlargesize "); break; case TT_2DOBJ_SCALE_S: fprintf(o,"\\thsmallsize "); break; case TT_2DOBJ_SCALE_XS: fprintf(o,"\\thtinysize "); break; case TT_2DOBJ_SCALE_NUMBERIC: { double optical_zoom = this->scale / this->base_scale; if (obj->scale_numeric <= 0.5) fprintf(o,"\\size[%.1f] ", optical_zoom * obj->scale_numeric / 0.5 * this->font_setup[0]); else if (obj->scale_numeric <= 0.707) fprintf(o,"\\size[%.1f] ", optical_zoom * obj->scale_numeric / 0.707 * this->font_setup[1]); else if (obj->scale_numeric >= 2.0) fprintf(o,"\\size[%.1f] ", optical_zoom * obj->scale_numeric / 2.0 * this->font_setup[4]); else if (obj->scale_numeric >= 1.414) fprintf(o,"\\size[%.1f] ", optical_zoom * obj->scale_numeric / 1.414 * this->font_setup[3]); else fprintf(o,"\\size[%.1f] ", optical_zoom * obj->scale_numeric * this->font_setup[2]); } break; default: if (print_default_scale) fprintf(o,"\\thnormalsize "); break; } } therion-5.4.1/thlayout.h000066400000000000000000000405321307545355600152340ustar00rootroot00000000000000/** * @file thlayout.h * Map layout module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayout_h #define thlayout_h #include "thdataobject.h" #include "thlayoutln.h" #include "thsymbolset.h" #include "thlocale.h" #include "thlayoutclr.h" #include /** * layout command options tokens. */ enum { TT_LAYOUT_UNKNOWN = 2000, TT_LAYOUT_SCALE = 2001, TT_LAYOUT_ORIGIN = 2002, TT_LAYOUT_SIZE = 2003, TT_LAYOUT_GRID_SIZE = 2004, TT_LAYOUT_GRID_ORIGIN = 2005, TT_LAYOUT_ORIGIN_LABEL = 2006, TT_LAYOUT_NAV_SIZE = 2007, TT_LAYOUT_NAV_FACTOR = 2008, TT_LAYOUT_OWN_PAGES = 2009, TT_LAYOUT_TITLE_PAGES = 2010, TT_LAYOUT_OPACITY = 2011, TT_LAYOUT_OVERLAP = 2012, TT_LAYOUT_PAGE_NUMBERS = 2013, TT_LAYOUT_PAGE_SETUP = 2014, TT_LAYOUT_COPY = 2015, TT_LAYOUT_DOC_TITLE = 2016, TT_LAYOUT_DOC_AUTHOR = 2017, TT_LAYOUT_DOC_SUBJECT = 2018, TT_LAYOUT_DOC_KEYWORDS = 2019, TT_LAYOUT_EXCLUDE_PAGES = 2020, TT_LAYOUT_GRID = 2021, TT_LAYOUT_PAGE_GRID = 2022, TT_LAYOUT_TRANSPARENCY = 2023, TT_LAYOUT_LAYERS = 2024, TT_LAYOUT_CODE = 2025, TT_LAYOUT_BASE_SCALE = 2026, TT_LAYOUT_SYMBOL_DEFAULTS = 2027, TT_LAYOUT_SYMBOL_ASSIGN = 2028, TT_LAYOUT_SYMBOL_HIDE = 2029, TT_LAYOUT_COLOR = 2030, TT_LAYOUT_SYMBOL_SHOW = 2031, TT_LAYOUT_LEGEND = 2032, TT_LAYOUT_DOC_COMMENT = 2033, TT_LAYOUT_MAP_HEADER = 2034, TT_LAYOUT_LANG = 2035, TT_LAYOUT_MAP_ITEM = 2036, TT_LAYOUT_SCALE_BAR = 2037, TT_LAYOUT_DEBUG = 2038, TT_LAYOUT_LEGEND_WIDTH = 2039, TT_LAYOUT_LEGEND_COLUMNS = 2040, TT_LAYOUT_SURFACE = 2041, TT_LAYOUT_SURFACE_OPACITY = 2042, TT_LAYOUT_ROTATE = 2043, TT_LAYOUT_ENDCODE = 2044, TT_LAYOUT_COLOR_LEGEND = 2045, TT_LAYOUT_MAP_HEADER_BG = 2046, TT_LAYOUT_UNITS = 2047, TT_LAYOUT_SURVEY_LEVEL = 2048, TT_LAYOUT_SKETCHES = 2049, TT_LAYOUT_NORTH = 2050, TT_LAYOUT_MAP_IMAGE = 2051, TT_LAYOUT_GRID_COORDS = 2052, TT_LAYOUT_SYMBOL_COLOR = 2053, TT_LAYOUT_FONT_SETUP = 2054, TT_LAYOUT_MIN_SYMBOL_SCALE = 2055, }; /** * Layout grid tokens. */ enum { TT_LAYOUT_GRID_UNKNOWN = 0, TT_LAYOUT_GRID_OFF, TT_LAYOUT_GRID_TOP, TT_LAYOUT_GRID_BOTTOM, }; /** * Layout grid token table. */ static const thstok thtt_layout_grid[] = { {"bottom", TT_LAYOUT_GRID_BOTTOM}, {"off", TT_LAYOUT_GRID_OFF}, {"top", TT_LAYOUT_GRID_TOP}, {NULL, TT_LAYOUT_GRID_UNKNOWN} }; /** * Layout grid tokens. */ enum { TT_LAYOUT_GRIDCOORDS_UNKNOWN = 0, TT_LAYOUT_GRIDCOORDS_OFF, TT_LAYOUT_GRIDCOORDS_BORDER, TT_LAYOUT_GRIDCOORDS_ALL, }; /** * Layout grid token table. */ static const thstok thtt_layout_gridcoords[] = { {"all", TT_LAYOUT_GRIDCOORDS_ALL}, {"border", TT_LAYOUT_GRIDCOORDS_BORDER}, {"off", TT_LAYOUT_GRIDCOORDS_OFF}, {NULL, TT_LAYOUT_GRIDCOORDS_UNKNOWN} }; /** * Layout map-item token table. */ //static const thstok thtt_layout_mapitem[] = { // {"north-arrow", SYMS_NORTHARROW}, // {"scale-bar", SYMS_SCALEBAR}, // {NULL, SYMS_ZZZ} //}; /** * Layout legend tokens. */ enum { TT_LAYOUT_LEGEND_UNKNOWN = 0, TT_LAYOUT_LEGEND_OFF, TT_LAYOUT_LEGEND_ON, TT_LAYOUT_LEGEND_ALL, }; /** * Layout legend token table. */ static const thstok thtt_layout_legend[] = { {"all", TT_LAYOUT_LEGEND_ALL}, {"off", TT_LAYOUT_LEGEND_OFF}, {"on", TT_LAYOUT_LEGEND_ON}, {NULL, TT_LAYOUT_LEGEND_UNKNOWN}, }; /** * Layout debug tokens. */ enum { TT_LAYOUT_DEBUG_OFF, TT_LAYOUT_DEBUG_STATIONS, TT_LAYOUT_DEBUG_JOINS, TT_LAYOUT_DEBUG_SCRAPNAMES, TT_LAYOUT_DEBUG_STATIONNAMES, TT_LAYOUT_DEBUG_ALL, TT_LAYOUT_DEBUG_UNKNOWN, }; /** * Layout legend token table. */ static const thstok thtt_layout_debug[] = { {"all", TT_LAYOUT_DEBUG_ALL}, {"first", TT_LAYOUT_DEBUG_STATIONS}, {"off", TT_LAYOUT_DEBUG_OFF}, {"on", TT_LAYOUT_DEBUG_ALL}, {"scrap-names", TT_LAYOUT_DEBUG_SCRAPNAMES}, {"second", TT_LAYOUT_DEBUG_JOINS}, {"station-names", TT_LAYOUT_DEBUG_STATIONNAMES}, {NULL, TT_LAYOUT_DEBUG_UNKNOWN}, }; /** * Layout surface tokens. */ enum { TT_LAYOUT_SURFACE_OFF, TT_LAYOUT_SURFACE_TOP, TT_LAYOUT_SURFACE_BOTTOM, TT_LAYOUT_SURFACE_UNKNOWN, }; /** * Layout legend token table. */ static const thstok thtt_layout_surface[] = { {"bottom", TT_LAYOUT_SURFACE_BOTTOM}, {"off", TT_LAYOUT_SURFACE_OFF}, {"top", TT_LAYOUT_SURFACE_TOP}, {NULL, TT_LAYOUT_SURFACE_UNKNOWN}, }; /** * Layout legend tokens. */ enum { TT_LAYOUT_MAP_HEADER_UNKNOWN = 0, TT_LAYOUT_MAP_HEADER_N, TT_LAYOUT_MAP_HEADER_NW, TT_LAYOUT_MAP_HEADER_NE, TT_LAYOUT_MAP_HEADER_E, TT_LAYOUT_MAP_HEADER_W, TT_LAYOUT_MAP_HEADER_S, TT_LAYOUT_MAP_HEADER_SW, TT_LAYOUT_MAP_HEADER_SE, TT_LAYOUT_MAP_HEADER_OFF, TT_LAYOUT_MAP_HEADER_CENTER, }; /** * Layout legend token table. */ static const thstok thtt_layout_map_header[] = { {"c", TT_LAYOUT_MAP_HEADER_CENTER}, {"center", TT_LAYOUT_MAP_HEADER_CENTER}, {"e", TT_LAYOUT_MAP_HEADER_E}, {"n", TT_LAYOUT_MAP_HEADER_N}, {"ne", TT_LAYOUT_MAP_HEADER_NE}, {"nw", TT_LAYOUT_MAP_HEADER_NW}, {"off", TT_LAYOUT_MAP_HEADER_OFF}, {"s", TT_LAYOUT_MAP_HEADER_S}, {"se", TT_LAYOUT_MAP_HEADER_SE}, {"sw", TT_LAYOUT_MAP_HEADER_SW}, {"w", TT_LAYOUT_MAP_HEADER_W}, {NULL, TT_LAYOUT_MAP_HEADER_UNKNOWN}, }; /** * Layout code tokens. */ enum { TT_LAYOUT_CODE_UNKNOWN = 0, TT_LAYOUT_CODE_TEX_ATLAS, TT_LAYOUT_CODE_TEX_MAP, TT_LAYOUT_CODE_METAPOST, TT_LAYOUT_CODE_SYMBOL_DEFAULTS, TT_LAYOUT_CODE_SYMBOL_ASSIGN, TT_LAYOUT_CODE_SYMBOL_HIDE, TT_LAYOUT_CODE_SYMBOL_SHOW, TT_LAYOUT_CODE_SYMBOL_COLOR, TT_LAYOUT_CODE_MAP_ITEM, }; /** * Layout grid token table. */ static const thstok thtt_layout_code[] = { {"metapost", TT_LAYOUT_CODE_METAPOST}, {"mpost", TT_LAYOUT_CODE_METAPOST}, {"tex-atlas", TT_LAYOUT_CODE_TEX_ATLAS}, {"tex-map", TT_LAYOUT_CODE_TEX_MAP}, {NULL, TT_LAYOUT_CODE_UNKNOWN} }; /** * Layout north tokens. */ enum { TT_LAYOUT_NORTH_UNKNOWN = 0, TT_LAYOUT_NORTH_TRUE, TT_LAYOUT_NORTH_GRID, }; /** * Layout color token table. */ static const thstok thtt_layout_north[] = { {"grid", TT_LAYOUT_NORTH_GRID}, {"true", TT_LAYOUT_NORTH_TRUE}, {NULL, TT_LAYOUT_NORTH_UNKNOWN} }; /** * Layout length statistics tokens. */ enum { TT_LAYOUT_LENSTAT_UNKNOWN = 0, TT_LAYOUT_LENSTAT_OFF, TT_LAYOUT_LENSTAT_HIDE, TT_LAYOUT_LENSTAT_ON, }; /** * Layout color token table. */ static const thstok thtt_layout_lenstat[] = { {"hide", TT_LAYOUT_LENSTAT_HIDE}, {"off", TT_LAYOUT_LENSTAT_OFF}, {"on", TT_LAYOUT_LENSTAT_ON}, {NULL, TT_LAYOUT_LENSTAT_UNKNOWN} }; /** * Layout color tokens. */ enum { TT_LAYOUT_COLOR_UNKNOWN = 0, TT_LAYOUT_COLOR_MAP_BG, TT_LAYOUT_COLOR_MAP_FG, TT_LAYOUT_COLOR_PREVIEW_BELOW, TT_LAYOUT_COLOR_PREVIEW_ABOVE, TT_LAYOUT_COLOR_LABELS, }; /** * Layout color token table. */ static const thstok thtt_layout_color[] = { {"labels", TT_LAYOUT_COLOR_LABELS}, {"map-bg", TT_LAYOUT_COLOR_MAP_BG}, {"map-fg", TT_LAYOUT_COLOR_MAP_FG}, {"preview-above", TT_LAYOUT_COLOR_PREVIEW_ABOVE}, {"preview-below", TT_LAYOUT_COLOR_PREVIEW_BELOW}, {NULL, TT_LAYOUT_COLOR_UNKNOWN} }; /** * Layout color criterion tokens. */ enum { TT_LAYOUT_CCRIT_UNKNOWN = 0, TT_LAYOUT_CCRIT_ALTITUDE, TT_LAYOUT_CCRIT_DEPTH, TT_LAYOUT_CCRIT_TOPODATE, TT_LAYOUT_CCRIT_EXPLODATE, TT_LAYOUT_CCRIT_MAP, TT_LAYOUT_CCRIT_SCRAP, }; static const thstok thtt_layout_ccrit[] = { {"altitude", TT_LAYOUT_CCRIT_ALTITUDE}, {"altitudes", TT_LAYOUT_CCRIT_ALTITUDE}, {"depth", TT_LAYOUT_CCRIT_DEPTH}, {"topo-date", TT_LAYOUT_CCRIT_TOPODATE}, {"explo-date", TT_LAYOUT_CCRIT_EXPLODATE}, {"map", TT_LAYOUT_CCRIT_MAP}, {"maps", TT_LAYOUT_CCRIT_MAP}, {"scrap", TT_LAYOUT_CCRIT_SCRAP}, {"scraps", TT_LAYOUT_CCRIT_SCRAP}, {NULL, TT_LAYOUT_CCRIT_UNKNOWN} }; /** * Layout color tables. */ enum { TT_LAYOUT_CTABLE_UNKNOWN = 0, TT_LAYOUT_CTABLE_HSV, }; static const thstok thtt_layout_ctable[] = { {"hsv", TT_LAYOUT_CTABLE_HSV}, {NULL, TT_LAYOUT_CTABLE_UNKNOWN} }; enum { TT_LAYOUT_CMODE_AUTO, TT_LAYOUT_CMODE_TABLE, TT_LAYOUT_CMODE_MANUAL, }; class thlayout_copy_src { public: const char * srcn; thlayout * srcptr; class thlayout_copy_src * next_src; thlayout_copy_src () : srcn(NULL), srcptr(NULL), next_src(NULL) {}; }; /** * layout command options parsing table. */ static const thstok thtt_layout_opt[] = { {"base-scale",TT_LAYOUT_BASE_SCALE}, {"code",TT_LAYOUT_CODE}, {"color",TT_LAYOUT_COLOR}, {"color-legend",TT_LAYOUT_COLOR_LEGEND}, {"colour",TT_LAYOUT_COLOR}, {"colour-legend",TT_LAYOUT_COLOR_LEGEND}, {"copy",TT_LAYOUT_COPY}, {"debug",TT_LAYOUT_DEBUG}, {"doc-author",TT_LAYOUT_DOC_AUTHOR}, {"doc-keywords",TT_LAYOUT_DOC_KEYWORDS}, {"doc-subject",TT_LAYOUT_DOC_SUBJECT}, {"doc-title",TT_LAYOUT_DOC_TITLE}, {"endcode",TT_LAYOUT_ENDCODE}, {"exclude-pages",TT_LAYOUT_EXCLUDE_PAGES}, {"fonts-setup", TT_LAYOUT_FONT_SETUP}, {"grid",TT_LAYOUT_GRID}, {"grid-coords",TT_LAYOUT_GRID_COORDS}, {"grid-origin",TT_LAYOUT_GRID_ORIGIN}, {"grid-size",TT_LAYOUT_GRID_SIZE}, {"language",TT_LAYOUT_LANG}, {"layers",TT_LAYOUT_LAYERS}, {"legend",TT_LAYOUT_LEGEND}, {"legend-columns",TT_LAYOUT_LEGEND_COLUMNS}, {"legend-width",TT_LAYOUT_LEGEND_WIDTH}, {"map-comment",TT_LAYOUT_DOC_COMMENT}, {"map-header",TT_LAYOUT_MAP_HEADER}, {"map-header-bg",TT_LAYOUT_MAP_HEADER_BG}, {"map-image",TT_LAYOUT_MAP_IMAGE}, {"min-symbol-scale", TT_LAYOUT_MIN_SYMBOL_SCALE}, {"nav-factor",TT_LAYOUT_NAV_FACTOR}, {"nav-size",TT_LAYOUT_NAV_SIZE}, {"north",TT_LAYOUT_NORTH}, {"opacity",TT_LAYOUT_OPACITY}, {"origin",TT_LAYOUT_ORIGIN}, {"origin-label",TT_LAYOUT_ORIGIN_LABEL}, {"overlap",TT_LAYOUT_OVERLAP}, {"own-pages",TT_LAYOUT_OWN_PAGES}, {"page-grid",TT_LAYOUT_PAGE_GRID}, {"page-numbers",TT_LAYOUT_PAGE_NUMBERS}, {"page-setup",TT_LAYOUT_PAGE_SETUP}, {"rotate",TT_LAYOUT_ROTATE}, {"scale", TT_LAYOUT_SCALE}, {"scale-bar", TT_LAYOUT_SCALE_BAR}, {"size", TT_LAYOUT_SIZE}, {"sketches", TT_LAYOUT_SKETCHES}, {"statistics",TT_LAYOUT_MAP_ITEM}, {"surface",TT_LAYOUT_SURFACE}, {"surface-opacity",TT_LAYOUT_SURFACE_OPACITY}, {"survey-level",TT_LAYOUT_SURVEY_LEVEL}, {"symbol-assign", TT_LAYOUT_SYMBOL_ASSIGN}, {"symbol-color", TT_LAYOUT_SYMBOL_COLOR}, {"symbol-colour", TT_LAYOUT_SYMBOL_COLOR}, {"symbol-hide", TT_LAYOUT_SYMBOL_HIDE}, {"symbol-set", TT_LAYOUT_SYMBOL_DEFAULTS}, {"symbol-show", TT_LAYOUT_SYMBOL_SHOW}, {"title-pages",TT_LAYOUT_TITLE_PAGES}, {"transparency",TT_LAYOUT_TRANSPARENCY}, {"units",TT_LAYOUT_UNITS}, {NULL, TT_LAYOUT_UNKNOWN}, }; struct thlayout_map_image { double m_x, m_y; const char * m_fn; int m_align; thlayout_map_image() : m_x(0.0), m_y(0.0), m_fn(""), m_align(TT_LAYOUT_MAP_HEADER_OFF) {} bool defined(); void parse(char ** args, const char * cpath); }; typedef std::list thlayout_map_image_list; /** * layout class. */ class thlayout : public thdataobject { public: class thconfig * m_pconfig; double scale, scale_bar, base_scale, ox, oy, oz, hsize, vsize, paphs, papvs, paghs, pagvs, marls, marts, gxs, gys, gzs, gox, goy, goz, navf, overlap, opacity, map_header_x, map_header_y, legend_width, surface_opacity, rotate; const char * olx, * oly, * doc_title, * doc_comment, * doc_author, * doc_subject, * doc_keywords, * excl_list; unsigned navsx, navsy, ownp, legend_columns; char grid, ccode; int legend, color_legend, map_header, lang, north, max_explos, max_topos, max_cartos, max_copys, debug, survey_level, surface, grid_coords; thlayout_color color_map_bg, color_map_fg, color_preview_below, color_preview_above; int color_crit, // none, altitude, ... color_mode, // auto - values and colors, table - colors, manual color_table; // hsv, cool, hot ... double min_symbol_scale, font_setup[5]; thlayoutln * first_line, * last_line; bool titlep, transparency, layers, pgsnum, lock, excl_pages, page_grid, map_header_bg, sketches, color_labels; int explo_lens, topo_lens; thlocale units; thlayout_map_image_list map_image_list; int def_grid_size, def_grid_origin, def_nav_factor, def_nav_size, def_opacity, def_transparency, def_layers, def_base_scale, def_rotate, def_sketches, def_north, def_origin, def_origin_label, def_overlap, def_own_pages, def_page_numbers, def_page_setup, def_scale, def_size, def_title_pages, def_tex_lines, def_doc_title, def_doc_comment, def_doc_author, def_doc_subject, def_doc_keywords, def_excl_pages, def_grid, def_page_grid, def_legend, def_color_legend, def_legend_width, def_legend_columns, def_map_header, def_lang, def_scale_bar, def_map_header_bg, def_max_explos, def_max_topos, def_max_cartos, def_max_copys, def_explo_lens, def_topo_lens, def_debug, def_survey_level, def_surface, def_surface_opacity, def_units, def_grid_coords, def_color_labels, def_font_setup, def_min_symbol_scale; thlayout_copy_src * first_copy_src, * last_copy_src; /** * Standard constructor. */ thlayout(); /** * Standard destructor. */ ~thlayout(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thlayout";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); thcmd_option_desc get_default_cod(int id); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Print object in C++ format. */ void self_print_library(); /** * Get context for object. */ virtual int get_context(); /** * Parse option with 3 or 2 or 1 numbers and units. */ void parse_len(double & d1, double & d2, double & d3, int nargs, char ** args, int nonneg = -1); void parse_len6(double & d1, double & d2, double & d3, double & d4, double & d5, double & d6, int nargs, char ** args, int nonneg = -1); /** * Export configuration file. */ void export_config(FILE * o, thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy); /** * Export font size. */ void export_mptex_font_size(FILE * o, class th2ddataobject * obj, bool print_default_scale); /** * Export main tex file. */ void export_pdftex(FILE * o, thdb2dprj * prj, char mode); void export_mpost(FILE * o); void export_mpost_symbols(FILE * o, struct thsymbolset * symset); /** * Process copy. */ void process_copy(); bool is_debug_stations(); bool is_debug_joins(); bool is_debug_scrapnames(); bool is_debug_stationnames(); /** * set LAYOUT variable. */ void set_thpdf_layout(thdb2dprj * prj, double x_scale, double x_origin_shx, double x_origin_shy); }; /** * Copy src list. */ extern std::list thlayout_copy_src_list; #endif therion-5.4.1/thlayoutclr.cxx000066400000000000000000000042271307545355600163110ustar00rootroot00000000000000/** * @file thlayoutclr.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayoutclr.h" #include "thparse.h" #include "thdatabase.h" #include "thexception.h" void thlayout_color::parse(char * str, bool aalpha) { thsplit_words(&(thdb.mbuff_tmp), str); int nargs = thdb.mbuff_tmp.get_size(), sv; char ** args = thdb.mbuff_tmp.get_buffer(); #define invalid_color_spec ththrow(("invalid color specification -- %s", str)) switch (nargs) { case 3: thparse_double(sv,this->B,args[2]); if ((sv != TT_SV_NUMBER) || (this->B < 0.0) || (this->B > 100.0)) invalid_color_spec; this->B /= 100.0; thparse_double(sv,this->G,args[1]); if ((sv != TT_SV_NUMBER) || (this->G < 0.0) || (this->G > 100.0)) invalid_color_spec; this->G /= 100.0; case 1: if (aalpha && (strcmp(args[0],"transparent") == 0)) { this->A = 0.0; this->defined = 2; break; } thparse_double(sv,this->R,args[0]); if ((sv != TT_SV_NUMBER) || (this->R < 0.0) || (this->R > 100.0)) invalid_color_spec; this->R /= 100.0; if (nargs == 1) { this->B = this->R; this->G = this->R; } this->defined = 2; break; default: invalid_color_spec; } } therion-5.4.1/thlayoutclr.h000066400000000000000000000026141307545355600157340ustar00rootroot00000000000000/** * @file thlayoutclr.h * Scrap outline line class. */ /* Copyright (C) 2009 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayoutclr_h #define thlayoutclr_h /** * layout color class. */ struct thlayout_color { double R, G, B, A; int defined; void parse(char * str, bool aalpha = false); thlayout_color() : R(1.0), G(1.0), B(1.0), A(1.0), defined(0) {} thlayout_color(double v) : R(v), G(v), B(v), A(1.0), defined(0) {} thlayout_color(double r, double g, double b) : R(r), G(g), B(b), A(1.0), defined(0) {} }; #endif therion-5.4.1/thlayoutln.cxx000066400000000000000000000022021307545355600161310ustar00rootroot00000000000000/** * @file thlayoutln.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlayoutln.h" #include "thlayout.h" thlayoutln::thlayoutln() { this->next_line = NULL; this->line = NULL; this->smid = 0; this->code = TT_LAYOUT_CODE_TEX_ATLAS; } therion-5.4.1/thlayoutln.h000066400000000000000000000026131307545355600155640ustar00rootroot00000000000000/** * @file thlayoutln.h * Scrap outline line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlayoutln_h #define thlayoutln_h #include #include "thlayoutclr.h" /** * Layout line class. */ class thlayoutln { public: char code; thlayoutln * next_line; const char * line; thlayout_color sclr; ///< Symbol color. int smid; ///< Symbol macro ID thlayoutln(); ///< Default constructor }; typedef std::list thlayoutln_list; ///< Points list. #endif therion-5.4.1/thlegenddata.cxx000066400000000000000000000032261307545355600163610ustar00rootroot00000000000000/** * @file thpdfdata.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include "thlegenddata.h" using namespace std; legenddata::legenddata() { legendtitle = "Legenda"; colorlegendtitle = "Legenda hlbok"; cavename = "Jaskyna MN"; comment = "komentar"; copyrights = "(c) ja"; cavelengthtitle = "Dlzka"; cavelength = "124324"; cavedepthtitle = "Hlbka"; cavedepth = "3243"; explotitle = "Objavili"; explodate = "2004"; exploteam = "A B C"; topotitle = "Zamerali"; topodate = "2005"; topoteam = "D E F"; cartotitle = "Kreslil"; cartodate = "2006"; cartoteam = "G"; northarrow = true; scalebar = true; } //void legenddata::print_tex() { //} //void legenddata::print_svg() { //} therion-5.4.1/thlegenddata.h000066400000000000000000000025501307545355600160050ustar00rootroot00000000000000/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlegenddata_h #define thlegenddata_h #include struct legenddata { std::string legendtitle, colorlegendtitle, cavename, comment, copyrights, cavelengthtitle, cavelength, cavedepthtitle, cavedepth, explotitle, explodate, exploteam, topotitle, topodate, topoteam, cartotitle, cartodate, cartoteam; bool northarrow, scalebar; legenddata(); }; #endif therion-5.4.1/thlibrary.cxx000066400000000000000000000021211307545355600157260ustar00rootroot00000000000000/** * @file thlibrary.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlibrary.h" #include "thlibrarydata.cxx" void thlibrary_init() { thlibrary_init_grades(); thlibrary_init_layouts(); } therion-5.4.1/thlibrary.h000066400000000000000000000020631307545355600153600ustar00rootroot00000000000000/** * @file thlibrary.h * Therion library initialization. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlibrary_h #define thlibrary_h void thlibrary_init(); #endif therion-5.4.1/thlibrarydata.src000066400000000000000000000020201307545355600165430ustar00rootroot00000000000000/** * @file thlibrarydata.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ void thlibrary_init_grades() { } void thlibrary_init_layouts() { } therion-5.4.1/thlibrarydata.thcfg000066400000000000000000000000571307545355600170570ustar00rootroot00000000000000input lib/layouts.thcfg source lib/therion.th therion-5.4.1/thline.cxx000066400000000000000000001253421307545355600152240ustar00rootroot00000000000000/** * @file thline.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thline.h" #include "thexception.h" #include "thparse.h" #include "thchenc.h" #include "thdb2dlp.h" #include "thexpmap.h" #include "thtflength.h" #include "thtexfonts.h" #include "thscrap.h" #ifdef THMSVC #define hypot _hypot #endif thline::thline() { this->type = TT_LINE_TYPE_UNKNOWN; this->outline = TT_LINE_OUTLINE_NONE; this->closed = TT_AUTO; this->reverse = false; this->is_closed = false; this->csubtype = TT_LINE_SUBTYPE_UNKNOWN; this->first_point = NULL; this->last_point = NULL; this->text = NULL; this->m_height = thnan; } thline::~thline() { } int thline::get_class_id() { return TT_LINE_CMD; } bool thline::is(int class_id) { if (class_id == TT_LINE_CMD) return true; else return th2ddataobject::is(class_id); } int thline::get_cmd_nargs() { return 1; } const char * thline::get_cmd_end() { return "endline"; } const char * thline::get_cmd_name() { return "line"; } thcmd_option_desc thline::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_line_opt); if (id == TT_LINE_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thline::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { int reversion, csmooth, sv; char * type, * subtype; if (cod.id == 1) cod.id = TT_LINE_TYPE; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->insert_line_point(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_LINE_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; case TT_LINE_OUTLINE: this->outline = thmatch_token(*args,thtt_line_outlines); if (this->outline == TT_LINE_OUTLINE_UNKNOWN) ththrow(("unknown line outline -- %s",*args)) break; case TT_LINE_CLOSED: this->closed = thmatch_token(*args,thtt_onoffauto); if (this->closed == TT_UNKNOWN_BOOL) ththrow(("invalid closure switch -- %s",*args)) break; case TT_LINE_REVERSE: reversion = thmatch_token(*args,thtt_bool); if (reversion == TT_UNKNOWN_BOOL) ththrow(("invalid reversion switch -- %s",*args)) this->reverse = (reversion == TT_TRUE); break; case TT_LINE_SUBTYPE: this->parse_subtype(*args); break; case TT_LINE_HEIGHT: this->parse_height(*args); break; case TT_LINE_BORDER: this->parse_border(*args); break; case TT_LINE_GRADIENT: this->parse_gradient(*args); break; case TT_LINE_DIRECTION: this->parse_direction(*args); break; case TT_LINE_HEAD: this->parse_head(*args); break; case TT_LINE_ADJUST: this->parse_adjust(*args); break; case TT_LINE_ALTITUDE: this->parse_altitude(*args); break; case TT_LINE_TEXT: thencode(&(this->db->buff_enc), *args, argenc); this->parse_text(this->db->buff_enc.get_buffer()); break; case TT_LINE_SMOOTH: csmooth = thmatch_token(*args,thtt_onoffauto); if (csmooth == TT_UNKNOWN_BOOL) ththrow(("invalid smooth switch -- %s",*args)) if (this->last_point != NULL) { this->last_point->smooth = csmooth; this->last_point->smooth_orig = csmooth; } else ththrow(("no line point specified")) break; case TT_LINE_ORIENT: if (this->last_point != NULL) { if (this->type != TT_LINE_TYPE_SLOPE) ththrow(("orientation not valid with type %s", thmatch_string(this->type,thtt_line_types))) thparse_double(sv,this->last_point->orient,*args); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s",*args)) if ((this->last_point->orient < 0.0) || (this->last_point->orient >= 360.0)) ththrow(("orientation out of range -- %s",*args)) this->last_point->tags |= TT_LINEPT_TAG_ORIENT; } else ththrow(("no line point specified")) break; case TT_LINE_SIZE: case TT_LINE_RSIZE: case TT_LINE_LSIZE: this->parse_size(cod.id,*args); break; case TT_LINE_MARK: this->insert_point_mark(*args); break; case TT_LINE_ANCHORS: case TT_LINE_REBELAYS: if (this->type != TT_LINE_TYPE_ROPE) ththrow(("-anchors and -rebelays not valid with type %s", thmatch_string(this->type,thtt_line_types))) int flag, tagtype; flag = thmatch_token(*args,thtt_bool); if (flag == TT_UNKNOWN_BOOL) ththrow(("logical value expected -- %s",*args)) tagtype = (cod.id == TT_LINE_ANCHORS) ? TT_LINE_TAG_ROPE_ANCHORS : TT_LINE_TAG_ROPE_REBELAYS; if (flag == TT_TRUE) this->tags |= tagtype; else this->tags &= ~tagtype; break; // if not found, try to set fathers properties default: th2ddataobject::set(cod, args, argenc, indataline); } } void thline::self_delete() { delete this; } void thline::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"thline:\n"); fprintf(outf,"\ttype: %d\n", this->type); fprintf(outf,"\toutline: %d\n", this->outline); fprintf(outf,"\tclosed: %d\n", this->closed); fprintf(outf,"\treverse: %d\n", this->reverse); if (this->last_point != NULL) { fprintf(outf,"\tpoints:\n"); thdb2dlp * cpt = this->first_point; while(cpt != NULL) { fprintf(outf,"\t"); if (cpt->cp1 != NULL) fprintf(outf,"\t -- %f,%f (%f,%f,%f,%f)\n\t",cpt->cp1->x, cpt->cp1->y, cpt->cp1->xt, cpt->cp1->yt, cpt->cp1->zt, cpt->cp1->at); if (cpt->cp2 != NULL) fprintf(outf,"\t -- %f,%f (%f,%f,%f,%f)\n\t",cpt->cp2->x, cpt->cp2->y, cpt->cp2->xt, cpt->cp2->yt, cpt->cp2->zt, cpt->cp2->at); fprintf(outf,"\t%f,%f (%f,%f,%f,%f)",cpt->point->x, cpt->point->y, cpt->point->xt, cpt->point->yt, cpt->point->zt, cpt->point->at); fprintf(outf,"\t(subtype:%d smooth:%d orient:%f r-size:%f l-size:%f)\n",cpt->subtype,cpt->smooth, cpt->orient, cpt->rsize, cpt->lsize); cpt = cpt->nextlp; } } // insert intended print of object properties here } void thline::parse_type(char * ss) { this->type = thmatch_token(ss,thtt_line_types); switch (this->type) { case TT_LINE_TYPE_UNKNOWN: ththrow(("unknown line type -- %s",ss)) break; case TT_LINE_TYPE_WALL: this->csubtype = TT_LINE_SUBTYPE_BEDROCK; this->outline = TT_LINE_OUTLINE_OUT; break; case TT_LINE_TYPE_BORDER: this->csubtype = TT_LINE_SUBTYPE_VISIBLE; break; case TT_LINE_TYPE_WATER_FLOW: this->csubtype = TT_LINE_SUBTYPE_PERMANENT; break; case TT_LINE_TYPE_SURVEY: this->csubtype = TT_LINE_SUBTYPE_CAVE; break; case TT_LINE_TYPE_ARROW: this->tags |= TT_LINE_TAG_HEAD_END; break; case TT_LINE_TYPE_CHIMNEY: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; case TT_LINE_TYPE_CEILING_STEP: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; case TT_LINE_TYPE_CEILING_MEANDER: this->place = TT_2DOBJ_PLACE_DEFAULT_TOP; break; case TT_LINE_TYPE_ROPE: // show anchors and rebelays on line rope by default this->tags |= TT_LINE_TAG_ROPE_ANCHORS; this->tags |= TT_LINE_TAG_ROPE_REBELAYS; break; } } void thline::parse_subtype(char * ss) { // int prevcsubtype = this->csubtype; if (this->type == TT_LINE_TYPE_U) { if (this->last_point != NULL) ththrow(("subtype specification not allowed here")) this->parse_u_subtype(ss); return; } this->csubtype = thmatch_token(ss,thtt_line_subtypes); if (this->csubtype == TT_LINE_SUBTYPE_UNKNOWN) ththrow(("invalid line subtype -- %s",ss)) // if ((this->last_point != NULL) && (prevcsubtype != TT_LINE_SUBTYPE_UNKNOWN) // && (this->csubtype != prevcsubtype)) { // this->throw_source(); // threwarning2(("multiple subtypes per line are deprecated")) // } bool tsok = false; switch (this->type) { case TT_LINE_TYPE_WALL: switch (this->csubtype) { case TT_LINE_SUBTYPE_INVISIBLE: case TT_LINE_SUBTYPE_BEDROCK: case TT_LINE_SUBTYPE_SAND: case TT_LINE_SUBTYPE_CLAY: case TT_LINE_SUBTYPE_PEBBLES: case TT_LINE_SUBTYPE_DEBRIS: case TT_LINE_SUBTYPE_BLOCKS: case TT_LINE_SUBTYPE_ICE: case TT_LINE_SUBTYPE_UNDERLYING: case TT_LINE_SUBTYPE_UNSURVEYED: case TT_LINE_SUBTYPE_PRESUMED: case TT_LINE_SUBTYPE_OVERLYING: case TT_LINE_SUBTYPE_PIT: case TT_LINE_SUBTYPE_MOONMILK: case TT_LINE_SUBTYPE_FLOWSTONE: tsok = true; } break; case TT_LINE_TYPE_BORDER: switch (this->csubtype) { case TT_LINE_SUBTYPE_INVISIBLE: case TT_LINE_SUBTYPE_TEMPORARY: case TT_LINE_SUBTYPE_VISIBLE: case TT_LINE_SUBTYPE_PRESUMED: tsok = true; } break; case TT_LINE_TYPE_SURVEY: switch (this->csubtype) { case TT_LINE_SUBTYPE_CAVE: case TT_LINE_SUBTYPE_SURFACE: tsok = true; } break; case TT_LINE_TYPE_WATER_FLOW: switch (this->csubtype) { case TT_LINE_SUBTYPE_PERMANENT: case TT_LINE_SUBTYPE_INTERMITTENT: case TT_LINE_SUBTYPE_CONJECTURAL: tsok = true; } break; } if (!tsok) ththrow(("invalid line type - subtype combination")) if (this->last_point != NULL) this->last_point->subtype = this->csubtype; } void thline::insert_line_point(int nargs, char ** args, double * nums) { // check number of parameters if ((nargs != 6) && (nargs != 2)) ththrow(("invalid number of coordinates -- %d", nargs)) double cp1x, cp1y, cp2x, cp2y, x, y; int pidx = 0, sv; char * invs = NULL; bool invnum = false; if (nargs == 6) { pidx = 4; if (args != NULL) { thparse_double(sv, cp1x, args[0]); if (sv != TT_SV_NUMBER) { invs = args[0]; invnum = true; } thparse_double(sv, cp1y, args[1]); if (sv != TT_SV_NUMBER) { invs = args[1]; invnum = true; } thparse_double(sv, cp2x, args[2]); if (sv != TT_SV_NUMBER) { invs = args[2]; invnum = true; } thparse_double(sv, cp2y, args[3]); if (sv != TT_SV_NUMBER) { invs = args[3]; invnum = true; } } else { cp1x = nums[0]; cp1y = nums[1]; cp2x = nums[2]; cp2y = nums[3]; } } if (args != NULL) { thparse_double(sv, x, args[pidx]); if (sv != TT_SV_NUMBER) { invs = args[pidx]; invnum = true; } thparse_double(sv, y, args[pidx+1]); if (sv != TT_SV_NUMBER) { invs = args[pidx+1]; invnum = true; } } else { x = nums[pidx]; y = nums[pidx+1]; } if (invnum) ththrow(("invalid number -- %s",invs)) // let's insert point into database thdb2dlp * plp = this->db->db2d.insert_line_point(); plp->subtype = this->csubtype; plp->smooth = TT_AUTO; plp->smooth_orig = TT_AUTO; if (this->last_point == NULL) { this->last_point = plp; this->first_point = plp; plp->nextlp = NULL; plp->prevlp = NULL; } else { this->last_point->nextlp = plp; plp->prevlp = this->last_point; plp->nextlp = NULL; this->last_point = plp; } thdb2dpt * cp1, * cp2, * pt; pt = this->db->db2d.insert_point(); pt->x = x; pt->y = y; pt->pscrap = this->db->get_current_scrap(); plp->point = pt; if (nargs == 6) { cp1 = this->db->db2d.insert_point(); cp1->x = cp1x; cp1->y = cp1y; cp1->pscrap = this->db->get_current_scrap(); cp2 = this->db->db2d.insert_point(); cp2->x = cp2x; cp2->y = cp2y; cp2->pscrap = this->db->get_current_scrap(); plp->cp1 = cp1; plp->cp2 = cp2; } else { plp->cp1 = NULL; plp->cp2 = NULL; } } void thline::insert_point_mark(char * ss) { if (!th_is_keyword(ss)) ththrow(("mark not a key word -- %s",ss)) if (this->last_point == NULL) ththrow(("no line point specified")) this->last_point->mark = this->db->strstore(ss,true); } thdb2dlp * thline::get_marked_station(const char * mark) { if (strcmp(mark,"end") == 0) { if (this->reverse) return this->first_point; else return this->last_point; } thdb2dlp * cpt = (this->reverse ? this->last_point : this->first_point); if (th_is_index(mark)) { int index = -1, cidx; sscanf(mark,"%d",&index); cidx = 0; while(cpt != NULL) { if (cidx == index) return cpt; cidx++; cpt = (this->reverse ? cpt->prevlp : cpt->nextlp); } } cpt = (this->reverse ? this->last_point : this->first_point); while (cpt != NULL) { if (cpt->mark != NULL) if (strcmp(mark,cpt->mark) == 0) return cpt; cpt = (this->reverse ? cpt->prevlp : cpt->nextlp); } return NULL; } void thline::preprocess() { if (this->first_point == NULL) return; // check closure this->is_closed = ((this->closed == TT_TRUE) || ((this->closed == TT_AUTO) && (this->first_point->point->x == this->last_point->point->x) && (this->first_point->point->y == this->last_point->point->y))); if (this->is_closed) { this->last_point->point->x = this->first_point->point->x; this->last_point->point->y = this->first_point->point->y; } // check reversion thdb2dlp * c_item, * n_item, * t_item; thdb2dpt * t_point; int t_tags, t_subtype, t_smooth, t_smooth_orig; double t_rsize, t_lsize, t_orient; bool tmpreverse = this->reverse; if (this->fscrapptr->flip != TT_SCRAP_FLIP_NONE) tmpreverse = !tmpreverse; if (tmpreverse && (this->first_point->nextlp != NULL)) { // najprv prehodi podtypy c_item = this->first_point; while (c_item != NULL) { n_item = c_item->nextlp; // switch next - prev t_item = c_item->nextlp; c_item->nextlp = c_item->prevlp; c_item->prevlp = t_item; // switch control points t_point = c_item->cp1; c_item->cp1 = c_item->cp2; c_item->cp2 = t_point; c_item = n_item; } t_item = this->first_point; this->first_point = this->last_point; this->last_point = t_item; t_point = this->first_point->point; t_tags = this->first_point->tags; t_rsize = this->first_point->rsize; t_lsize = this->first_point->lsize; t_orient = this->first_point->orient; t_smooth = this->first_point->smooth; t_smooth_orig = this->first_point->smooth_orig; t_subtype = this->last_point->subtype; c_item = this->first_point; while (c_item != NULL) { if (c_item->nextlp != NULL) { c_item->point = c_item->nextlp->point; c_item->tags = c_item->nextlp->tags; c_item->lsize = c_item->nextlp->lsize; c_item->rsize = c_item->nextlp->rsize; c_item->orient = c_item->nextlp->orient; c_item->smooth = c_item->nextlp->smooth; c_item->smooth_orig = c_item->nextlp->smooth_orig; c_item->subtype = c_item->nextlp->subtype; } else { c_item->point = t_point; c_item->tags = t_tags; c_item->lsize = t_lsize; c_item->rsize = t_rsize; c_item->orient = t_orient; c_item->smooth = t_smooth; c_item->smooth_orig = t_smooth_orig; c_item->subtype = t_subtype; } c_item = c_item->nextlp; } t_item = this->last_point; this->last_point = t_item->prevlp; this->last_point->nextlp = NULL; t_item->prevlp = NULL; t_item->nextlp = this->first_point; this->first_point->prevlp = t_item; this->first_point = t_item; t_subtype = this->first_point->subtype; c_item = this->first_point; while (c_item != NULL) { if (c_item->nextlp != NULL) { c_item->subtype = c_item->nextlp->subtype; } else { c_item->subtype = t_subtype; } c_item = c_item->nextlp; } } // check smoothness c_item = this->first_point; double d1, d2, a1, a2; while (c_item != NULL) { if (c_item->smooth == TT_AUTO) { c_item->smooth = TT_TRUE; if ((c_item->nextlp != NULL) && (c_item->cp2 != NULL) && (c_item->nextlp->cp1 != NULL)) { d1 = hypot(c_item->cp2->x - c_item->point->x, c_item->cp2->y - c_item->point->y); d2 = hypot(c_item->nextlp->cp1->x - c_item->point->x, c_item->nextlp->cp1->y - c_item->point->y); if ((d2 > 0) && (d1 > 0)) { a1 = atan2(c_item->cp2->y - c_item->point->y, c_item->cp2->x - c_item->point->x) / 3.14159265358979323338 * 180.0; a2 = atan2(c_item->point->y - c_item->nextlp->cp1->y, c_item->point->x - c_item->nextlp->cp1->x) / 3.14159265358979323338 * 180.0; if (a2 - a1 > 180.0) a2 -= 360; if (a2 - a1 < -180.0) a2 += 360; if ((a2 > a1 + 5.0) || (a2 < a1 - 5.0)) c_item->smooth = TT_FALSE; } } } c_item = c_item->nextlp; } } #define thline_type_export_mp(type,mid) case type: \ macroid = mid; \ break; bool thline::export_mp(class thexpmapmpxs * out) { if (this->first_point == NULL) return(false); bool postprocess = true, todraw, fsize, frot, anypt; //, first int from, to, cs, macroid = -1, omacroid = -1; double s1, r1; thdb2dlp * lp; th2ddataobject::export_mp(out); if (out->file != NULL) { if (thisnan(this->m_height)) { fprintf(out->file,"ATTR__height := -1;\n"); } else { fprintf(out->file,"ATTR__height := %.2f;\n", this->m_height); } } if (this->scale_numeric < out->layout->min_symbol_scale) return(false); switch (this->type) { case TT_LINE_TYPE_WALL: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_UNDEFINED; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_INVISIBLE, SYML_WALL_INVISIBLE) thline_type_export_mp(TT_LINE_SUBTYPE_BEDROCK, SYML_WALL_BEDROCK) thline_type_export_mp(TT_LINE_SUBTYPE_SAND, SYML_WALL_SAND) thline_type_export_mp(TT_LINE_SUBTYPE_CLAY, SYML_WALL_CLAY) thline_type_export_mp(TT_LINE_SUBTYPE_PEBBLES, SYML_WALL_PEBBLES) thline_type_export_mp(TT_LINE_SUBTYPE_DEBRIS, SYML_WALL_DEBRIS) thline_type_export_mp(TT_LINE_SUBTYPE_BLOCKS, SYML_WALL_BLOCKS) thline_type_export_mp(TT_LINE_SUBTYPE_ICE, SYML_WALL_ICE) thline_type_export_mp(TT_LINE_SUBTYPE_FLOWSTONE, SYML_WALL_FLOWSTONE) thline_type_export_mp(TT_LINE_SUBTYPE_MOONMILK, SYML_WALL_MOONMILK) thline_type_export_mp(TT_LINE_SUBTYPE_UNDERLYING, SYML_WALL_UNDERLYING) thline_type_export_mp(TT_LINE_SUBTYPE_OVERLYING, SYML_WALL_OVERLYING) thline_type_export_mp(TT_LINE_SUBTYPE_UNSURVEYED, SYML_WALL_UNSURVEYED) thline_type_export_mp(TT_LINE_SUBTYPE_PRESUMED, SYML_WALL_PRESUMED) thline_type_export_mp(TT_LINE_SUBTYPE_PIT, SYML_WALL_PIT) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,1,"); this->export_path_mp(out,from,to,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,1,"); this->export_path_mp(out,from,to,0); fprintf(out->file,");\n"); } } } from = to; } postprocess = false; break; case TT_LINE_TYPE_LABEL: macroid = SYML_LABEL; omacroid = macroid; if (this->context >= 0) macroid = this->context; if ((this->text == NULL) || (!out->symset->is_assigned(macroid))) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"l_label(btex "); out->layout->export_mptex_font_size(out->file, this, true); //thdecode(&(this->db->buff_enc),TT_ISO8859_2,this->text); fprintf(out->file,"%s etex,",ths2tex(this->text, out->layout->lang, true).c_str()); this->export_path_mp(out); fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_CONTOUR: macroid = SYML_CONTOUR; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_CONTOUR); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_CONTOUR)); this->export_path_mp(out); from = 0; if ((this->tags & TT_LINE_TAG_GRADIENT_NONE) > 0) { fprintf(out->file,",-3"); } else if ((this->tags & TT_LINE_TAG_GRADIENT_CENTER) > 0) { fprintf(out->file,",-2"); } else if ((this->tags & TT_LINE_TAG_GRADIENT_POINT) > 0) { lp = this->first_point; while (lp != NULL) { if ((lp->tags & TT_LINEPT_TAG_GRADIENT) > 0) fprintf(out->file,",%d",from); lp = lp->nextlp; from++; } } else { fprintf(out->file,",-1"); } fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_SLOPE: macroid = SYML_SLOPE; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } s1 = 0.0; r1 = -1.0; // najde prvu rotaciu a velkost lp = this->first_point; fsize = true; frot = true; while ((lp != NULL) && (fsize || frot)) { if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) if (fsize) { s1 = lp->lsize; fsize = false; } if ((lp->tags & TT_LINEPT_TAG_ORIENT) > 0) if (frot) { r1 = lp->orient + out->rr; frot = false; } lp = lp->nextlp; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_SLOPE); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_SLOPE)); this->export_path_mp(out); fprintf(out->file,",%d", ((this->tags & TT_LINE_TAG_BORDER) > 0 ? 1 : 0)); // vypise prvy bod fprintf(out->file,",(0,%g,%g)",(r1 < 0.0 ? -1 : r1),s1 * out->ms); // vypise ostatne body lp = this->first_point->nextlp; from = 1; while (lp != NULL) { if ((lp->tags & (TT_LINEPT_TAG_SIZE | TT_LINEPT_TAG_ORIENT)) > 0) { // cislo bodu fprintf(out->file,",(%d,",from); // orientacia if ((lp->tags & TT_LINEPT_TAG_ORIENT) > 0) { r1 = lp->orient + out->rr; fprintf(out->file,"%g,",lp->orient + out->rr); } else { if (lp->nextlp != NULL) fprintf(out->file,"-1,"); else fprintf(out->file,"%g,",(r1 < 0.0 ? -1.0 : r1)); } // velkost if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) { s1 = lp->lsize; fprintf(out->file,"%g)",lp->lsize * out->ms); } else { if (lp->nextlp != NULL) fprintf(out->file,"-1)"); else fprintf(out->file,"%g)",s1 * out->ms); } } else if (lp->nextlp == NULL) { // vypise posledny bod fprintf(out->file,",(%d,%g,%g)",from,(r1 < 0.0 ? -1.0 : r1),s1 * out->ms); } lp = lp->nextlp; from++; } // vypise prvy bod fprintf(out->file,");\n"); postprocess = false; break; thline_type_export_mp(TT_LINE_TYPE_PIT, SYML_PIT) thline_type_export_mp(TT_LINE_TYPE_MAP_CONNECTION, SYML_MAPCONNECTION) thline_type_export_mp(TT_LINE_TYPE_CEILING_STEP, SYML_CEILINGSTEP) thline_type_export_mp(TT_LINE_TYPE_CEILING_MEANDER, SYML_CEILINGMEANDER) thline_type_export_mp(TT_LINE_TYPE_FLOOR_STEP, SYML_FLOORSTEP) thline_type_export_mp(TT_LINE_TYPE_FLOOR_MEANDER, SYML_FLOORMEANDER) thline_type_export_mp(TT_LINE_TYPE_OVERHANG, SYML_OVERHANG) thline_type_export_mp(TT_LINE_TYPE_CHIMNEY, SYML_CHIMNEY) thline_type_export_mp(TT_LINE_TYPE_FLOWSTONE, SYML_FLOWSTONE) thline_type_export_mp(TT_LINE_TYPE_MOONMILK, SYML_MOONMILK) thline_type_export_mp(TT_LINE_TYPE_ROCK_BORDER, SYML_ROCKBORDER) thline_type_export_mp(TT_LINE_TYPE_ROCK_EDGE, SYML_ROCKEDGE) thline_type_export_mp(TT_LINE_TYPE_GRADIENT, SYML_GRADIENT) thline_type_export_mp(TT_LINE_TYPE_U, SYML_U) thline_type_export_mp(TT_LINE_TYPE_HANDRAIL, SYML_HANDRAIL) thline_type_export_mp(TT_LINE_TYPE_ROPE_LADDER, SYML_ROPELADDER) thline_type_export_mp(TT_LINE_TYPE_FIXED_LADDER, SYML_FIXEDLADDER) thline_type_export_mp(TT_LINE_TYPE_STEPS, SYML_STEPS) thline_type_export_mp(TT_LINE_TYPE_VIA_FERRATA, SYML_VIAFERRATA) case TT_LINE_TYPE_ROPE: macroid = SYML_ROPE; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_ROPE); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_ROPE)); this->export_path_mp(out); fprintf(out->file,",%s,%s);\n", ((this->tags & TT_LINE_TAG_ROPE_ANCHORS) > 0 ? "true" : "false"), ((this->tags & TT_LINE_TAG_ROPE_REBELAYS) > 0 ? "true" : "false")); postprocess = false; break; case TT_LINE_TYPE_ARROW: macroid = SYML_ARROW; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_ARROW); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_ARROW)); this->export_path_mp(out); from = 0; if ((this->tags & TT_LINE_TAG_HEAD_BEGIN) > 0) from += 1; if ((this->tags & TT_LINE_TAG_HEAD_END) > 0) from += 2; fprintf(out->file,",%d);\n",from); postprocess = false; break; case TT_LINE_TYPE_SECTION: macroid = SYML_SECTION; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) { postprocess = false; break; } if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, SYML_SECTION); fprintf(out->file,"%s(",out->symset->get_mp_macro(SYML_SECTION)); this->export_path_mp(out); anypt = false; if ((this->tags & TT_LINE_TAG_DIRECTION_BEGIN) > 0) { fprintf(out->file,",0"); anypt = true; }; from = 0; lp = this->first_point; while (lp != NULL) { if (((lp->tags & TT_LINEPT_TAG_DIRECTION) > 0) && ((this->tags & TT_LINE_TAG_DIRECTION_POINT) > 0)) { fprintf(out->file,",%d",from); anypt = true; } lp = lp->nextlp; from++; } if ((this->tags & TT_LINE_TAG_DIRECTION_END) > 0) { fprintf(out->file,",%d",(from - 1)); anypt = true; }; if (!anypt) fprintf(out->file,","); fprintf(out->file,");\n"); postprocess = false; break; case TT_LINE_TYPE_BORDER: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_BORDER_VISIBLE; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_TEMPORARY, SYML_BORDER_TEMPORARY) thline_type_export_mp(TT_LINE_SUBTYPE_PRESUMED, SYML_BORDER_PRESUMED) thline_type_export_mp(TT_LINE_SUBTYPE_INVISIBLE, SYML_BORDER_INVISIBLE) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,0,"); this->export_path_mp(out,from,to,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,0,"); this->export_path_mp(out,from,to,0); fprintf(out->file,");\n"); } } } from = to; } postprocess = false; break; case TT_LINE_TYPE_WATER_FLOW: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_WATERFLOW_PERMANENT; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_INTERMITTENT, SYML_WATERFLOW_INTERMITTENT) thline_type_export_mp(TT_LINE_SUBTYPE_CONJECTURAL, SYML_WATERFLOW_CONJECTURAL) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); } } from = to; } postprocess = false; break; case TT_LINE_TYPE_SURVEY: from = 0; to = 0; lp = this->first_point; while (lp != NULL) { cs = lp->subtype; todraw = (lp->nextlp != NULL); while ((lp != NULL) && (lp->subtype == cs)) { to++; lp = lp->nextlp; } if (todraw) { macroid = SYML_SURVEY_CAVE; switch (cs) { thline_type_export_mp(TT_LINE_SUBTYPE_SURFACE, SYML_SURVEY_SURFACE) } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); this->export_path_mp(out,from,to); fprintf(out->file,");\n"); } } from = to; } postprocess = false; break; default: macroid = SYML_UNDEFINED; break; } if (postprocess) { if (macroid < 0) { this->export_path_mp(out); fprintf(out->file,");\n"); } else { omacroid = macroid; if (this->context >= 0) macroid = this->context; if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); if (this->type == TT_LINE_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"l_u_%s(", this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); } this->export_path_mp(out); fprintf(out->file,");\n"); if (out->layout->is_debug_joins()) { fprintf(out->file,"l_debug(1,0,"); this->export_path_mp(out,0,-1,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"l_debug(0,0,"); this->export_path_mp(out,0,-1,0); fprintf(out->file,");\n"); } } } } th2ddataobject::export_mp_end(out); return(false); } unsigned thline::export_path_mp(class thexpmapmpxs * out, int from, int to, int dbglevel) { thdb2dlp * lp = this->first_point; // double xt, yt, d; unsigned last = 0; bool dnu = false; while ((lp != NULL) && ((long(last) <= long(to)) || (to < 0))) { if (long(last) == long(from)) { dnu = true; fprintf(out->file,"("); lp->point->export_mp(out,dbglevel); fprintf(out->file,"\n"); if (long(last) == long(to)) { fprintf(out->file," -- "); lp->point->export_mp(out,dbglevel); } } else if (dnu) { if ((lp->cp1 != NULL) && (lp->cp2 != NULL)) { fprintf(out->file," .. controls "); lp->cp1->export_mp(out,dbglevel); fprintf(out->file," and "); lp->cp2->export_mp(out,dbglevel); fprintf(out->file," .. "); } else { fprintf(out->file," -- "); } if ((from == 0) && (lp->nextlp == NULL) && (this->is_closed)) fprintf(out->file,"cycle"); else lp->point->export_mp(out,dbglevel); fprintf(out->file,"\n"); } lp = lp->nextlp; last++; } if (long(last) > long(from)) { fprintf(out->file,")"); return (last - from); } else { return 0; } } void thline::parse_border(char * ss) { int bd; if (this->type != TT_LINE_TYPE_SLOPE) ththrow(("-border not valid with type %s", thmatch_string(this->type,thtt_line_types))) bd = thmatch_token(ss,thtt_bool); if (bd == TT_UNKNOWN_BOOL) ththrow(("logical value expected -- %s",ss)) if (bd == TT_TRUE) this->tags |= TT_LINE_TAG_BORDER; else this->tags &= ~TT_LINE_TAG_BORDER; } enum { TT_LINE_GRADIENT_UNKNOWN, TT_LINE_GRADIENT_BEGIN, TT_LINE_GRADIENT_END, TT_LINE_GRADIENT_NONE, TT_LINE_GRADIENT_CENTER, TT_LINE_GRADIENT_POINT, TT_LINE_GRADIENT_BOTH, }; static const thstok thtt_line_gradient[] = { {"begin", TT_LINE_GRADIENT_BEGIN}, {"both", TT_LINE_GRADIENT_BOTH}, {"center", TT_LINE_GRADIENT_CENTER}, {"end", TT_LINE_GRADIENT_END}, {"none", TT_LINE_GRADIENT_NONE}, {"point", TT_LINE_GRADIENT_POINT}, {NULL, TT_LINE_GRADIENT_UNKNOWN} }; void thline::parse_gradient(char * ss) { int gd; if (this->type != TT_LINE_TYPE_CONTOUR) ththrow(("-gradient not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); switch (gd) { case TT_LINE_GRADIENT_NONE: this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_NONE; break; case TT_LINE_GRADIENT_CENTER: this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_CENTER; break; case TT_LINE_GRADIENT_POINT: if (this->last_point == NULL) ththrow(("no line point specified")) this->tags &= ~(TT_LINE_TAG_GRADIENT_NONE | TT_LINE_TAG_GRADIENT_CENTER | TT_LINE_TAG_GRADIENT_POINT); this->tags |= TT_LINE_TAG_GRADIENT_POINT; this->last_point->tags |= TT_LINEPT_TAG_GRADIENT; break; default: ththrow(("invalid gradient specification -- %s",ss)) break; } } void thline::parse_direction(char * ss) { int gd; if (this->type != TT_LINE_TYPE_SECTION) ththrow(("-direction not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); switch (gd) { case TT_LINE_GRADIENT_NONE: this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_POINT); break; case TT_LINE_GRADIENT_BEGIN: this->tags &= ~(TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_POINT); this->tags |= TT_LINE_TAG_DIRECTION_BEGIN; break; case TT_LINE_GRADIENT_END: this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_POINT); this->tags |= TT_LINE_TAG_DIRECTION_END; break; case TT_LINE_GRADIENT_BOTH: this->tags &= ~TT_LINE_TAG_DIRECTION_POINT; this->tags |= TT_LINE_TAG_DIRECTION_END | TT_LINE_TAG_DIRECTION_BEGIN; break; case TT_LINE_GRADIENT_POINT: if (this->last_point == NULL) ththrow(("no line point specified")) this->tags &= ~(TT_LINE_TAG_DIRECTION_BEGIN | TT_LINE_TAG_DIRECTION_END); this->tags |= TT_LINE_TAG_DIRECTION_POINT; this->last_point->tags |= TT_LINEPT_TAG_DIRECTION; break; default: ththrow(("invalid direction specification -- %s",ss)) break; } } void thline::parse_head(char * ss) { int gd; if (this->type != TT_LINE_TYPE_ARROW) ththrow(("-direction not valid with type %s", thmatch_string(this->type,thtt_line_types))) gd = thmatch_token(ss,thtt_line_gradient); this->tags &= ~(TT_LINE_TAG_HEAD_BEGIN | TT_LINE_TAG_HEAD_END); switch (gd) { case TT_LINE_GRADIENT_NONE: break; case TT_LINE_GRADIENT_BEGIN: this->tags |= TT_LINE_TAG_HEAD_BEGIN; break; case TT_LINE_GRADIENT_END: this->tags |= TT_LINE_TAG_HEAD_END; break; case TT_LINE_GRADIENT_BOTH: this->tags |= TT_LINE_TAG_HEAD_END | TT_LINE_TAG_HEAD_BEGIN; break; default: ththrow(("invalid head specification -- %s",ss)) break; } } void thline::parse_adjust(char * ss) { if (this->last_point != NULL) this->last_point->adjust = thmatch_token(ss,thtt_line_adjusts); else ththrow(("no line point specified")) if (this->last_point->adjust == TT_LINE_ADJUST_UNKNOWN) ththrow(("invalid adjust specification -- %s",ss)) if ((thdb.cscrapptr->proj->type == TT_2DPROJ_PLAN) && (this->last_point->adjust != TT_LINE_ADJUST_NONE)) ththrow(("adjustment and projection not compatible -- %s",ss)) } void thline::parse_size(int w, char * ss) { int sv; double sz; if (this->last_point == NULL) ththrow(("no line point specified")) const char * sizestr = NULL; switch (w) { case TT_LINE_SIZE: sizestr = "size"; break; case TT_LINE_LSIZE: sizestr = "l-size"; break; case TT_LINE_RSIZE: sizestr = "r-size"; break; } bool ok = false; switch (this->type) { case TT_LINE_TYPE_SLOPE: if ((w == TT_LINE_SIZE) || (w == TT_LINE_LSIZE)) ok = true; break; } if (!ok) ththrow(("%s not valid with type %s", sizestr, thmatch_string(this->type,thtt_line_types))) thparse_double(sv,sz,ss); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",ss)) if (sz < 0.0) ththrow(("negative size -- %s",ss)) switch (this->type) { case TT_LINE_TYPE_SLOPE: this->last_point->lsize = sz; this->last_point->tags |= TT_LINEPT_TAG_SIZE; break; } } void thline::parse_altitude(char * ss) { if (this->type != TT_LINE_TYPE_WALL) ththrow(("-altitude not valid with type %s", thmatch_string(this->type,thtt_line_types))) if (this->last_point == NULL) ththrow(("no line point specified")) thparse_altitude(ss, this->last_point->rsize, this->last_point->lsize); this->last_point->tags |= TT_LINEPT_TAG_ALTITUDE; } void thline::parse_text(char * ss) { if (this->type != TT_LINE_TYPE_LABEL) ththrow(("-text not valid with type %s", thmatch_string(this->type,thtt_line_types))) if (strlen(ss) > 0) this->text = this->db->strstore(ss); } void thline::start_insert() { thdb2dlp * lp; bool fsize; switch (this->type) { case TT_LINE_TYPE_U: if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for line of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); break; case TT_LINE_TYPE_SLOPE: lp = this->first_point; fsize = true; while ((lp != NULL) && fsize) { if ((lp->tags & TT_LINEPT_TAG_SIZE) > 0) if (fsize) { fsize = false; } lp = lp->nextlp; } if (fsize) ththrow(("no slope size specification at any line point")) break; } } void thline::parse_height(char * ss) { switch (this->type) { case TT_LINE_TYPE_PIT: break; case TT_LINE_TYPE_WALL: if (this->csubtype == TT_LINE_SUBTYPE_PIT) break; default: ththrow(("-height not valid with type %s", thmatch_string(this->type,thtt_line_types))) break; } thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); int sv, ux; double dv; thtflength lentf; ux = 0; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid distance -- %s",ss)) } this->m_height = thnan; thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", pars[0])) if (dv <= 0.0) ththrow(("nor a positivie number -- %s", pars[0])) if (ux > 0) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } this->m_height = dv; } therion-5.4.1/thline.h000066400000000000000000000244511307545355600146500ustar00rootroot00000000000000/** * @file thline.h * line module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thline_h #define thline_h #include "th2ddataobject.h" /** * line command options tokens. */ enum { TT_LINE_UNKNOWN = 3000, TT_LINE_TYPE = 3001, TT_LINE_SUBTYPE = 3002, TT_LINE_REVERSE = 3003, TT_LINE_CLOSED = 3004, TT_LINE_SMOOTH = 3005, TT_LINE_OUTLINE = 3006, TT_LINE_MARK = 3007, TT_LINE_RSIZE = 3008, TT_LINE_LSIZE = 3009, TT_LINE_ORIENT = 3010, TT_LINE_SIZE = 3011, TT_LINE_GRADIENT = 3012, TT_LINE_BORDER = 3013, TT_LINE_ALTITUDE = 3014, TT_LINE_DIRECTION = 3015, TT_LINE_HEAD = 3016, TT_LINE_TEXT = 3017, TT_LINE_ADJUST = 3018, TT_LINE_HEIGHT = 3019, TT_LINE_ANCHORS = 3020, TT_LINE_REBELAYS = 3021, }; enum { // tags pre slope TT_LINE_TAG_BORDER = 1, // tags pre contour TT_LINE_TAG_GRADIENT_CENTER = 1, TT_LINE_TAG_GRADIENT_POINT = 2, TT_LINE_TAG_GRADIENT_NONE = 4, // tags pre section TT_LINE_TAG_DIRECTION_BEGIN = 1, TT_LINE_TAG_DIRECTION_END = 2, TT_LINE_TAG_DIRECTION_POINT = 4, // tags pre arrow TT_LINE_TAG_HEAD_BEGIN = 1, TT_LINE_TAG_HEAD_END = 2, // tags for type rope, indicating to show rebelays and anchors TT_LINE_TAG_ROPE_ANCHORS = 1, TT_LINE_TAG_ROPE_REBELAYS = 2, }; /** * line command options parsing table. */ static const thstok thtt_line_opt[] = { {"adjust", TT_LINE_ADJUST}, {"altitude", TT_LINE_ALTITUDE}, {"anchors", TT_LINE_ANCHORS}, {"border", TT_LINE_BORDER}, {"close", TT_LINE_CLOSED}, {"direction", TT_LINE_DIRECTION}, {"gradient", TT_LINE_GRADIENT}, {"head", TT_LINE_HEAD}, {"height", TT_LINE_HEIGHT}, {"l-size",TT_LINE_LSIZE}, {"mark", TT_LINE_MARK}, {"orient", TT_LINE_ORIENT}, {"orientation", TT_LINE_ORIENT}, {"outline", TT_LINE_OUTLINE}, {"r-size",TT_LINE_RSIZE}, {"rebelays", TT_LINE_REBELAYS}, {"reverse", TT_LINE_REVERSE}, {"size",TT_LINE_SIZE}, {"smooth",TT_LINE_SMOOTH}, {"subtype", TT_LINE_SUBTYPE}, {"text",TT_LINE_TEXT}, {NULL, TT_LINE_UNKNOWN}, }; /** * Line outlines. */ enum { TT_LINE_OUTLINE_UNKNOWN, TT_LINE_OUTLINE_IN, TT_LINE_OUTLINE_OUT, TT_LINE_OUTLINE_NONE, }; /** * line outlines parsing table. */ static const thstok thtt_line_outlines[] = { {"in", TT_LINE_OUTLINE_IN}, {"none", TT_LINE_OUTLINE_NONE}, {"out", TT_LINE_OUTLINE_OUT}, {NULL, TT_LINE_OUTLINE_UNKNOWN}, }; /** * Line point adjustments. */ enum { TT_LINE_ADJUST_UNKNOWN, TT_LINE_ADJUST_HORIZONTAL, TT_LINE_ADJUST_VERTICAL, TT_LINE_ADJUST_NONE, }; /** * line adjusts parsing table. */ static const thstok thtt_line_adjusts[] = { {"horizontal", TT_LINE_ADJUST_HORIZONTAL}, {"none", TT_LINE_ADJUST_NONE}, {"vertical", TT_LINE_ADJUST_VERTICAL}, {NULL, TT_LINE_ADJUST_UNKNOWN}, }; /** * Line types. */ enum { TT_LINE_TYPE_UNKNOWN, TT_LINE_TYPE_U, TT_LINE_TYPE_WALL, TT_LINE_TYPE_PIT, TT_LINE_TYPE_CHIMNEY, TT_LINE_TYPE_ROCK_BORDER, TT_LINE_TYPE_SURVEY, TT_LINE_TYPE_ROCK_EDGE, TT_LINE_TYPE_FLOWSTONE, TT_LINE_TYPE_MOONMILK, TT_LINE_TYPE_BORDER, TT_LINE_TYPE_SLOPE, TT_LINE_TYPE_CONTOUR, TT_LINE_TYPE_OVERHANG, TT_LINE_TYPE_SECTION, TT_LINE_TYPE_ARROW, TT_LINE_TYPE_LABEL, TT_LINE_TYPE_CEILING_STEP, TT_LINE_TYPE_FLOOR_STEP, TT_LINE_TYPE_WATER_FLOW, TT_LINE_TYPE_GRADIENT, TT_LINE_TYPE_CEILING_MEANDER, TT_LINE_TYPE_FLOOR_MEANDER, TT_LINE_TYPE_MAP_CONNECTION, TT_LINE_TYPE_HANDRAIL, TT_LINE_TYPE_FIXED_LADDER, TT_LINE_TYPE_ROPE_LADDER, TT_LINE_TYPE_VIA_FERRATA, TT_LINE_TYPE_ROPE, TT_LINE_TYPE_STEPS, }; /** * Line types parsing table. */ static const thstok thtt_line_types[] = { {"arrow", TT_LINE_TYPE_ARROW}, {"border", TT_LINE_TYPE_BORDER}, {"ceiling-meander", TT_LINE_TYPE_CEILING_MEANDER}, {"ceiling-step", TT_LINE_TYPE_CEILING_STEP}, {"chimney", TT_LINE_TYPE_CHIMNEY}, {"contour", TT_LINE_TYPE_CONTOUR}, {"fixed-ladder", TT_LINE_TYPE_FIXED_LADDER}, {"floor-meander", TT_LINE_TYPE_FLOOR_MEANDER}, {"floor-step", TT_LINE_TYPE_FLOOR_STEP}, {"flowstone", TT_LINE_TYPE_FLOWSTONE}, {"gradient", TT_LINE_TYPE_GRADIENT}, {"handrail", TT_LINE_TYPE_HANDRAIL}, {"label", TT_LINE_TYPE_LABEL}, {"map-connection", TT_LINE_TYPE_MAP_CONNECTION}, {"moonmilk", TT_LINE_TYPE_MOONMILK}, {"overhang", TT_LINE_TYPE_OVERHANG}, {"pit", TT_LINE_TYPE_PIT}, {"pitch", TT_LINE_TYPE_PIT}, {"rock-border", TT_LINE_TYPE_ROCK_BORDER}, {"rock-edge", TT_LINE_TYPE_ROCK_EDGE}, {"rope", TT_LINE_TYPE_ROPE}, {"rope-ladder", TT_LINE_TYPE_ROPE_LADDER}, {"section", TT_LINE_TYPE_SECTION}, {"slope", TT_LINE_TYPE_SLOPE}, {"steps", TT_LINE_TYPE_STEPS}, {"survey", TT_LINE_TYPE_SURVEY}, {"u",TT_LINE_TYPE_U}, {"via-ferrata",TT_LINE_TYPE_VIA_FERRATA}, {"wall", TT_LINE_TYPE_WALL}, {"water-flow", TT_LINE_TYPE_WATER_FLOW}, {NULL, TT_LINE_TYPE_UNKNOWN}, }; /** * Line subtypes. */ enum { TT_LINE_SUBTYPE_UNKNOWN, TT_LINE_SUBTYPE_TEMPORARY, TT_LINE_SUBTYPE_INVISIBLE, TT_LINE_SUBTYPE_VISIBLE, TT_LINE_SUBTYPE_BEDROCK, TT_LINE_SUBTYPE_SAND, TT_LINE_SUBTYPE_CLAY, TT_LINE_SUBTYPE_PEBBLES, TT_LINE_SUBTYPE_DEBRIS, TT_LINE_SUBTYPE_BLOCKS, TT_LINE_SUBTYPE_ICE, TT_LINE_SUBTYPE_UNDERLYING, TT_LINE_SUBTYPE_UNSURVEYED, TT_LINE_SUBTYPE_PRESUMED, TT_LINE_SUBTYPE_PERMANENT, TT_LINE_SUBTYPE_INTERMITTENT, TT_LINE_SUBTYPE_CONJECTURAL, TT_LINE_SUBTYPE_CAVE, TT_LINE_SUBTYPE_SURFACE, TT_LINE_SUBTYPE_OVERLYING, TT_LINE_SUBTYPE_PIT, TT_LINE_SUBTYPE_MOONMILK, TT_LINE_SUBTYPE_FLOWSTONE, }; /** * Line subtypes parsing table. */ static const thstok thtt_line_subtypes[] = { {"bedrock", TT_LINE_SUBTYPE_BEDROCK}, {"blocks",TT_LINE_SUBTYPE_BLOCKS}, {"cave",TT_LINE_SUBTYPE_CAVE}, {"clay",TT_LINE_SUBTYPE_CLAY}, {"conjectural",TT_LINE_SUBTYPE_CONJECTURAL}, {"debris",TT_LINE_SUBTYPE_DEBRIS}, {"flowstone",TT_LINE_SUBTYPE_FLOWSTONE}, {"ice",TT_LINE_SUBTYPE_ICE}, {"intermittent",TT_LINE_SUBTYPE_INTERMITTENT}, {"invisible", TT_LINE_SUBTYPE_INVISIBLE}, {"moonmilk",TT_LINE_SUBTYPE_MOONMILK}, {"overlying",TT_LINE_SUBTYPE_OVERLYING}, {"pebbles",TT_LINE_SUBTYPE_PEBBLES}, {"permanent",TT_LINE_SUBTYPE_PERMANENT}, {"pit",TT_LINE_SUBTYPE_PIT}, {"presumed",TT_LINE_SUBTYPE_PRESUMED}, {"sand",TT_LINE_SUBTYPE_SAND}, {"surface",TT_LINE_SUBTYPE_SURFACE}, {"temporary",TT_LINE_SUBTYPE_TEMPORARY}, {"underlying",TT_LINE_SUBTYPE_UNDERLYING}, {"unsurveyed",TT_LINE_SUBTYPE_UNSURVEYED}, {"visible", TT_LINE_SUBTYPE_VISIBLE}, {NULL, TT_LINE_SUBTYPE_UNKNOWN}, }; /** * line class. */ class thline : public th2ddataobject { public: friend class thdb2d; int type, ///< Line type. outline, ///< Line outline. closed, ///< How line is closed. csubtype; ///< Current subtype. const char * text; ///< Label text. bool reverse; ///< Whether line should be reversed. bool is_closed; ///< Whether line is closed. double m_height; ///< Height of a pit. class thdb2dlp * first_point, ///< First line point. * last_point; ///< Last line point. void parse_type(char * ss); ///< Parse line type. void parse_subtype(char * ss); ///< Parse line subtype. void parse_border(char * ss); ///< Parse line type. void parse_size(int w, char * ss); ///< Parse line size. void parse_gradient(char * ss); ///< Parse line subtype. void parse_direction(char * ss); ///< Parse line direction. void parse_altitude(char * ss); ///< Parse wall altitude void parse_head(char * ss); ///< Parse line head. void parse_adjust(char * ss); ///< Parse line head. void parse_height(char * ss); ///< Parse pit/chimney height. void parse_text(char * ss); ///< Parse line text. void insert_line_point(int nargs, char ** args, double * nums = NULL); ///< Insert line point. void insert_point_mark(char * ss); ///< Insert line point mark. void preprocess(); ///< Reverse if necessary and close. /** * Standard constructor. */ thline(); /** * Standard destructor. */ ~thline(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thline";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Return marked line station. */ class thdb2dlp * get_marked_station(const char * mark); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); /** * Export only path to metapost file. */ virtual unsigned export_path_mp(class thexpmapmpxs * out, int from = 0, int to = -1, int dbglevel = -1); virtual void start_insert(); }; #endif therion-5.4.1/thlocale.cxx000066400000000000000000000045351307545355600155340ustar00rootroot00000000000000#include "thlocale.h" #include "thparse.h" #include "thbuffer.h" #include "thexception.h" #include "thlang.h" #include "thinit.h" #ifdef THMSVC #define snprintf _snprintf #endif #define LCBUFFNUM 10 #define LCBUFFLEN 1024 char lcbuffmain [LCBUFFNUM * LCBUFFLEN]; size_t lcbuffcurr = 0; char * lcbuff; char lcfmt1 [] = {37, 49, 46, 49, 102, 0}; // "%1.1f"; char lcfmt2 [] = {37, 49, 48, 46, 49, 102, 0}; // "%10.1f"; void init_lcbuff() { lcbuffcurr++; lcbuffcurr = lcbuffcurr % LCBUFFNUM; lcbuff = &(lcbuffmain[LCBUFFLEN * lcbuffcurr]); } thlocale::thlocale() { this->units = TTLC_UNITS_METRIC; this->lang = thini.get_lang(); } static const thstok thtt_locale_units[] = { {"imperial", TTLC_UNITS_IMPERIAL}, {"metric", TTLC_UNITS_METRIC}, {NULL, TTLC_UNKNOWN} }; void thlocale::parse_units(char * cc) { this->units = thmatch_token(cc, thtt_locale_units); if (this->units == TTLC_UNKNOWN) ththrow(("unknown units -- %s", cc)) } char * thlocale::format_length(double length, int prec, int total) { init_lcbuff(); switch (this->units) { case TTLC_UNITS_IMPERIAL: length /= 0.3048; break; } if (total < 10) { lcfmt1[1] = total + 48; lcfmt1[3] = prec + 48; snprintf(lcbuff, LCBUFFLEN, lcfmt1, length); } else { lcfmt2[1] = total % 10 + 48; lcfmt2[2] = total / 10 + 48; lcfmt2[4] = prec + 48; snprintf(lcbuff, LCBUFFLEN, lcfmt2, length); } lcbuff[LCBUFFLEN - 1] = 0; return lcbuff; } char * thlocale::format_human_length(double length) { int prec = 0; double clength = length; switch (this->units) { case TTLC_UNITS_IMPERIAL: clength = length / 0.3048; break; default: if (length <= 5.0) prec = 1; else prec = 0; break; }; if ((prec == 1) && ((double)(int)clength == clength)) prec = 0; return this->format_length(length, prec); } const char * thlocale::format_length_units() { switch (this->units) { case TTLC_UNITS_IMPERIAL: return "ft"; default: return "m"; } } const char * thlocale::format_i18n_length_units() { switch (this->units) { case TTLC_UNITS_IMPERIAL: return thT("units ft", this->lang); default: return thT("units m", this->lang); } } double thlocale::convert_length(double length) { switch (this->units) { case TTLC_UNITS_IMPERIAL: length /= 0.3048; break; } return length; } thlocale thdeflocale; therion-5.4.1/thlocale.h000066400000000000000000000007261307545355600151570ustar00rootroot00000000000000#ifndef thlocale_h #define thlocale_h enum { TTLC_UNKNOWN = 0, TTLC_UNITS_METRIC, TTLC_UNITS_IMPERIAL, }; struct thlocale { int units, lang; thlocale(); void parse_units(char * cc); double convert_length(double); char * format_length(double length, int prec = 0, int total = 1); char * format_human_length(double length); const char * format_length_units(); const char * format_i18n_length_units(); }; extern thlocale thdeflocale; #endif therion-5.4.1/thlogfile.cxx000066400000000000000000000060231307545355600157100ustar00rootroot00000000000000/** * @file thfiles.cxx * File processing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlogfile.h" #include "therion.h" #include thlogfile::thlogfile() { this->file_name = "therion.log"; this->fileh = NULL; this->is_open = false; this->is_warned = false; this->is_logging = true; } thlogfile::~thlogfile() { this->close_file(); } void thlogfile::open_file() { bool should_warn = false; if ((!this->is_open) && (!this->is_warned)) { this->fileh = fopen(this->get_file_name(),"w"); if (this->fileh == NULL) { if (!this->is_warned) { should_warn = true; this->is_warned = true; } } else { this->is_open = true; this->is_warned = false; } } if (should_warn) thwarning(("can't open log file for output -- %s",this->get_file_name())); } void thlogfile::close_file() { if (this->is_open) { fclose(this->fileh); this->is_open = false; this->is_warned = false; } } void thlogfile::vprintf(const char *format, va_list *args) { if (this->is_logging) { if (!this->is_open) this->open_file(); if (this->is_open) { if (vfprintf(this->fileh, format, *args) < 0) this->log_error(); } } } void thlogfile::set_file_name(char *fname) { size_t fnl = strlen(fname); if ((!this->is_open) && (fnl > 0)) this->file_name = fname; } const char* thlogfile::get_file_name() { return this->file_name; } void thlogfile::set_logging(bool log_io) { this->is_logging = log_io; } bool thlogfile::get_logging() { return(this->is_logging); } void thlogfile::logging_on() { this->is_logging = true; } void thlogfile::logging_off() { this->is_logging = false; } FILE * thlogfile::get_fileh() { if (!this->is_open) this->open_file(); return this->fileh; } void thlogfile::printf(const char * format, ...) { va_list args; va_start(args, format); this->vprintf(format, &args); va_end(args); } void thlogfile::log_error() { this->close_file(); this->open_file(); this->logging_off(); fprintf(this->fileh,"error -- unable to write to log file (disk full?, insuficient permisions?)"); } thlogfile thlog; therion-5.4.1/thlogfile.h000066400000000000000000000047451307545355600153460ustar00rootroot00000000000000/** * @file thlogfile.h * Log file module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlogfile_h #define thlogfile_h #include "thbuffer.h" #include #include /** * Log file module. * * Provides work with log file. */ class thlogfile { thbuffer file_name; ///< Name of log file. FILE* fileh; ///< File handler. bool is_open; ///< File is open ID. bool is_warned; ///< File couldn't be opened ID. bool is_logging; ///< Loggind ID. /** * Open log file for output. */ void open_file(); /** * Close log file. */ void close_file(); public: /** * Standard constructor. */ thlogfile(); /** * Standard destructor. */ ~thlogfile(); /** * Print formatted into log file. */ void vprintf(const char *format, va_list *args); /** * Print formatted into log file. */ void printf(const char * format, ...); /** * Set log file name. * * @param fname File name. */ void set_file_name(char *fname); /** * Retrieve log file name. */ const char* get_file_name(); /** * Set logging state. */ void set_logging(bool log_io); /** * Retrieve logging state. */ bool get_logging(); /** * Turn on logging. */ void logging_on(); /** * Turn off logging. */ void logging_off(); /** * Logging error. */ void log_error(); /** * Return log file handler. */ FILE * get_fileh(); }; /** * Log file module. */ extern thlogfile thlog; #endif therion-5.4.1/thlookup.cxx000066400000000000000000000072171307545355600156060ustar00rootroot00000000000000/** * @file thlookup.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thlookup.h" #include "thexception.h" #include "thchenc.h" #include "thdata.h" #include "thparse.h" #include "thinfnan.h" #include "thpdfdata.h" #include "thsymbolset.h" #include "thtflength.h" #include "thlang.h" #include "thcsdata.h" #include "thconfig.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TTLDBG_JOINS = 1, TTLDBG_STATIONS = 2, TTLDBG_SCRAPNAMES = 4, TTLDBG_STATIONNAMES = 8, }; thlookup::thlookup() { this->m_type = TT_LOOKUP_TYPE_UNKNOWN; this->m_scale = TT_LOOKUP_SCALE_UNKNOWN; this->m_colorscheme = TT_LOOKUP_COLORSCHEME_UNKNOWN; this->m_title = ""; } thlookup::~thlookup() { } int thlookup::get_class_id() { return TT_LOOKUP_CMD; } bool thlookup::is(int class_id) { if (class_id == TT_LOOKUP_CMD) return true; else return thdataobject::is(class_id); } int thlookup::get_cmd_nargs() { return 1; } const char * thlookup::get_cmd_end() { return "endlookup"; } const char * thlookup::get_cmd_name() { // insert command name here return "lookup"; } thcmd_option_desc thlookup::get_default_cod(int id) { return thcmd_option_desc(id); } thcmd_option_desc thlookup::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_lookup_opt); if (id == TT_LOOKUP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else return this->get_default_cod(id); } void thlookup::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dum; int sv, sv2, dum_int; thcmd_option_desc defcod = this->get_default_cod(cod.id); switch (cod.id) { case TT_DATAOBJECT_AUTHOR: case TT_DATAOBJECT_COPYRIGHT: defcod.nargs = 2; default: if (cod.nargs > defcod.nargs) ththrow(("too many arguments -- %s", args[defcod.nargs])) } switch (cod.id) { case 0: // add table row break; case TT_LOOKUP_TITLE: if (strlen(args[0]) > 0) { thencode(&(this->db->buff_enc), args[0], argenc); this->m_title = this->db->strstore(this->db->buff_enc.get_buffer()); } else this->m_title = ""; break; case 1: cod.id = TT_DATAOBJECT_NAME; default: thdataobject::set(cod, args, argenc, indataline); break; } } void thlookup::self_delete() { delete this; } int thlookup::get_context() { return (THCTX_SURVEY | THCTX_NONE | THCTX_SCRAP); } void thlookup_table_row::parse(char ** args) { } void thlookup::auto_set(double from, double to) { } void thlookup::auto_set(class thdate fromto) { } thlayout_color thlookup::get_color(thdate d) { thlayout_color rv; return rv; } thlayout_color thlookup::get_color(double d) { thlayout_color rv; return rv; } therion-5.4.1/thlookup.h000066400000000000000000000106371307545355600152330ustar00rootroot00000000000000/** * @file thlookup.h * Map / model color lookup module. */ /* Copyright (C) 2012 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thlookup_h #define thlookup_h #include "thdataobject.h" #include "thlocale.h" #include /** * lookup command options tokens. */ enum { TT_LOOKUP_UNKNOWN = 2000, TT_LOOKUP_TYPE = 2001, TT_LOOKUP_SCALE = 2001, TT_LOOKUP_TITLE = 2002, }; /** * Lookup command options parsing table. */ static const thstok thtt_lookup_opt[] = { {"scale", TT_LOOKUP_SCALE}, {"title", TT_LOOKUP_TITLE}, {"type", TT_LOOKUP_TYPE}, {NULL, TT_LOOKUP_UNKNOWN}, }; /** * lookup scale tokens. */ enum { TT_LOOKUP_SCALE_UNKNOWN = 0, TT_LOOKUP_SCALE_CONTINUOUS, TT_LOOKUP_SCALE_DISCRETE, }; /** * lookup scale token table. */ static const thstok thtt_lookup_scale[] = { {"continuous", TT_LOOKUP_SCALE_CONTINUOUS}, {"discrete", TT_LOOKUP_SCALE_DISCRETE}, {NULL, TT_LOOKUP_SCALE_UNKNOWN} }; /** * lookup type tokens. */ enum { TT_LOOKUP_TYPE_UNKNOWN = 0, TT_LOOKUP_TYPE_DATE, TT_LOOKUP_TYPE_NUMERIC, TT_LOOKUP_TYPE_STRING, }; /** * lookup grid token table. */ static const thstok thtt_lookup_types[] = { {"date", TT_LOOKUP_TYPE_DATE}, {"numeric", TT_LOOKUP_TYPE_NUMERIC}, {"string", TT_LOOKUP_TYPE_STRING}, {NULL, TT_LOOKUP_TYPE_UNKNOWN} }; /** * Supported color lookup schemes. */ enum { TT_LOOKUP_COLORSCHEME_UNKNOWN = 0, TT_LOOKUP_COLORSCHEME_HSV, }; /** * Lookup table row. */ struct thlookup_table_row { double m_valueDbl, m_valueDblFrom; thdate m_valueDate; const char * m_valueString; const char * m_label; thlayout_color m_color; thlookup_table_row() : m_valueDbl(thnan), m_valueDblFrom(thnan), m_valueString(""), m_label("") {} void parse(char ** args); }; typedef std::list thlookup_table_list; /** * lookup class. */ class thlookup : public thdataobject { public: int m_type, m_scale, m_colorscheme; thlookup_table_list m_table; const char * m_title; /** * Standard constructor. */ thlookup(); /** * Standard destructor. */ ~thlookup(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thlookup";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); thcmd_option_desc get_default_cod(int id); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); /** * Automatically lookup range. */ virtual void auto_set(double from, double to); virtual void auto_set(class thdate fromto); /** * Get color from the scale. */ virtual thlayout_color get_color(thdate d); virtual thlayout_color get_color(double d); }; #endif therion-5.4.1/thmap.cxx000066400000000000000000000154231307545355600150500ustar00rootroot00000000000000/** * @file thmap.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmap.h" #include "thexception.h" #include "thdb2dmi.h" #include "thchenc.h" #include "thscrap.h" #include "thobjectname.h" #include "thdb2dmi.h" #include "thtflength.h" thmap::thmap() { this->first_item = NULL; this->last_item = NULL; this->expl_projection = NULL; this->projection_id = 0; this->last_level = 1; this->is_basic = true; this->selection_mode = TT_MAPITEM_UNKNOWN; this->selection_xs = NULL; this->z = thnan; this->nz = -1; } thmap::~thmap() { } int thmap::get_class_id() { return TT_MAP_CMD; } bool thmap::is(int class_id) { if (class_id == TT_MAP_CMD) return true; else return thdataobject::is(class_id); } int thmap::get_cmd_nargs() { return 1; } const char * thmap::get_cmd_end() { return "endmap"; } const char * thmap::get_cmd_name() { return "map"; } thcmd_option_desc thmap::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_map_opt); if (id == TT_MAP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else { switch (id) { case TT_MAP_PREVIEW: return thcmd_option_desc(id,2); case TT_MAP_BREAK: return thcmd_option_desc(id,0); default: return thcmd_option_desc(id); } } } void thmap::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thdb2dprjpr projection; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { case 0: thsplit_args(& this->db->db2d.mbf, *args); this->parse_item(this->db->db2d.mbf.get_size(), this->db->db2d.mbf.get_buffer()); break; case TT_MAP_PROJECTION: projection = this->db->db2d.parse_projection(*args); if (!projection.parok) ththrow(("invalid parameters of projection")); this->expl_projection = projection.prj; break; case TT_MAP_BREAK: this->last_level++; break; // case TT_MAP_COLOUR: // this->colour.parse(args[0]); // break; case TT_MAP_SURVEY: thparse_objectname(this->asoc_survey, &(this->db->buff_stations), args[0], this); break; case TT_MAP_PREVIEW: this->parse_preview(args); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thmap::self_delete() { delete this; } void thmap::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thmap:\n"); fprintf(outf,"\tz: %f\n",this->z); fprintf(outf,"\tprojection id: %d\n",this->projection_id); if (this->first_item != NULL) { fprintf(outf,"\tmap items:\n"); thdb2dmi * cbl = this->first_item; while (cbl != NULL) { fprintf(outf,"\t\t"); fprintf(outf,cbl->name); fprintf(outf," type:%d\n",cbl->type); cbl = cbl->next_item; } } } thmbuffer mapitmmb; void thmap::parse_item(int npar, char ** pars) { if ((npar != 1) && (npar != 3)) ththrow(("invalid map item")) thdb2dmi * citem = this->db->db2d.insert_map_item(); citem->itm_level = this->last_level; citem->source = this->db->csrc; citem->psurvey = this->db->get_current_survey(); citem->type = TT_MAPITEM_NORMAL; thparse_objectname(citem->name,& this->db->buff_stations, *pars); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } if (npar == 3) { thsplit_words(&mapitmmb, pars[1]); char ** ss; size_t nw; int sv; nw = mapitmmb.get_size(); ss = mapitmmb.get_buffer(); if ((nw < 2) || (nw > 3)) ththrow(("invalid map shift specification -- %s", pars[1])) thtflength l; thparse_double(sv, citem->m_shift.m_x, ss[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", ss[0])); thparse_double(sv, citem->m_shift.m_y, ss[1]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", ss[1])); if (nw > 2) l.parse_units(ss[2]); citem->m_shift.m_x = l.transform(citem->m_shift.m_x); citem->m_shift.m_y = l.transform(citem->m_shift.m_y); citem->m_shift.m_preview = thmatch_token(pars[2],thtt_2dmi); if ((citem->m_shift.m_preview == TT_MAPITEM_UNKNOWN) || (citem->m_shift.m_preview == TT_MAPITEM_NORMAL)) ththrow(("unsupported preview type -- %s", pars[2])) } } void thmap::parse_preview(char ** pars) { thdb2dmi * citem = this->db->db2d.insert_map_item(); citem->source = this->db->csrc; citem->psurvey = this->db->get_current_survey(); citem->type = thmatch_token(*pars,thtt_2dmi); switch (citem->type) { case TT_MAPITEM_ABOVE: case TT_MAPITEM_BELOW: break; default: ththrow(("unsupported preview type -- %s", *pars)) } thparse_objectname(citem->name,& this->db->buff_stations, pars[1]); if (this->last_item == NULL) { this->first_item = citem; this->last_item = citem; } else { this->last_item->next_item = citem; citem->prev_item = this->last_item; this->last_item = citem; } } void thmap::calc_z() { thdb2dmi * mi; if (this->nz > -1) return; this->z = 0.0; this->nz = 0; mi = this->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { switch (mi->object->get_class_id()) { case TT_MAP_CMD: ((thmap*)mi->object)->calc_z(); if (((thmap*)mi->object)->nz > 0) { this->z += ((thmap*)mi->object)->z; this->nz++; } break; case TT_SCRAP_CMD: if (!thisnan(((thscrap*)mi->object)->z)) { this->z += ((thscrap*)mi->object)->z; this->nz++; } break; } } mi = mi->next_item; } if (this->nz > 0) { this->z /= double(this->nz); } else { this->z = thnan; } } int thmap::get_context() { return (THCTX_SURVEY); } therion-5.4.1/thmap.h000066400000000000000000000072241307545355600144750ustar00rootroot00000000000000/** * @file thmap.h * 2D map module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmap_h #define thmap_h #include "thdataobject.h" #include "thlayoutclr.h" #include "thmapstat.h" /** * map command options tokens. */ enum { TT_MAP_UNKNOWN = 2000, TT_MAP_PREVIEW = 2001, TT_MAP_BREAK = 2002, TT_MAP_PROJECTION = 2003, TT_MAP_SURVEY = 2004, // TT_MAP_COLOUR = 2005, }; /** * map command options parsing table. */ static const thstok thtt_map_opt[] = { {"break", TT_MAP_BREAK}, // {"color", TT_MAP_COLOUR}, // {"colour", TT_MAP_COLOUR}, {"preview", TT_MAP_PREVIEW}, {"proj", TT_MAP_PROJECTION}, {"projection", TT_MAP_PROJECTION}, {"survey", TT_MAP_SURVEY}, {NULL, TT_MAP_UNKNOWN}, }; /** * map class. */ class thmap : public thdataobject { public: class thdb2dmi * first_item, ///< First map item. * last_item; ///< Last map item. class thdb2dprj * expl_projection; int projection_id; ///< ID of map projection. bool is_basic; ///< Whether map is basic. int selection_mode; ///< How map is maximally selected. class thdb2dxs * selection_xs; ///< Maximal .... thobjectname asoc_survey; ///< Associated survey. void parse_item(int npar, char ** pars); ///< Parse map item. void parse_preview(char ** pars); ///< Parse preview. void calc_z(); double z; long nz; unsigned last_level; thmapstat stat; // thlayout_color colour; /** * Standard constructor. */ thmap(); /** * Standard destructor. */ virtual ~thmap(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thmap";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Get context for object. */ virtual int get_context(); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); }; #endif therion-5.4.1/thmapstat.cxx000066400000000000000000000364111307545355600157440ustar00rootroot00000000000000/** * @file thmapstat.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmapstat.h" #include "thscrap.h" #include "thdata.h" #include "thmap.h" #include "thdataobject.h" #include "thlayout.h" #include "thlang.h" #include "thversion.h" #include "thtexfonts.h" #include "thsurvey.h" #include "thdb1d.h" #include "thconfig.h" #include "thcs.h" #include bool operator < (const thmapstat_data & c1, const thmapstat_data & c2) { return (c1.crit < c2.crit); } bool operator < (const thmapstat_copyright & c1, const thmapstat_copyright & c2) { return (strcmp(c1.str,c2.str) < 0); } bool operator < (const thmapstat_dataptr & c1, const thmapstat_dataptr & c2) { return (c1.ptr->id < c2.ptr->id); } thmapstat_data::thmapstat_data() { this->crit = 0.0; } thmapstat_dataptr::thmapstat_dataptr() { this->ptr = NULL; } thmapstat::thmapstat() { scanned = false; } void thmapstat::resetdata() { this->data.clear(); this->surveyed_by.clear(); this->discovered_by.clear(); this->surveyed_date.reset(); this->discovered_date.reset(); } void thmapstat::adddata(thmapstat_datamap * dm) { // prejde vsetky data, prida si ich a ak ich nema, prida // si z nich meracov a objavitelov thmapstat_datamap::iterator ii; #ifdef THDEBUG double sumsum = 0.0; thprintf("\nBEFORE:\n"); for(ii = this->data.begin(); ii != this->data.end(); ii++) { sumsum += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; thprintf(" %d (+ %.0f = %.0f) [%s]\n",ii->first.ptr->id, ii->first.ptr->stat_length + ii->first.ptr->stat_dlength, sumsum, ii->first.ptr->fsptr->full_name); } thprintf("\n"); #endif ii = dm->begin(); while (ii != dm->end()) { if (this->data.find(ii->first) == this->data.end()) { this->data[ii->first] = 2; #ifdef THDEBUG sumsum += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; thprintf(" + %d (+ %.0f = %.0f) [%s]\n",ii->first.ptr->id, ii->first.ptr->stat_length + ii->first.ptr->stat_dlength, sumsum, ii->first.ptr->fsptr->full_name); #endif thdata_team_set_type::iterator ti; for(ti = ii->first.ptr->team_set.begin(); ti != ii->first.ptr->team_set.end(); ti++) { this->surveyed_by[*ti].crit += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; this->surveyed_by[*ti].date.join(ii->first.ptr->date); } this->surveyed_date.join(ii->first.ptr->date); for(ti = ii->first.ptr->discovery_team_set.begin(); ti != ii->first.ptr->discovery_team_set.end(); ti++) { this->discovered_by[*ti].crit += ii->first.ptr->stat_length + ii->first.ptr->stat_dlength; this->discovered_by[*ti].date.join(ii->first.ptr->discovery_date); } this->discovered_date.join(ii->first.ptr->discovery_date); } ii++; } } void thmapstat::addstat(thmapstat * source) { // prejde vsetkych zdrojovych autorov a copyrighty a prida // si ich thmapstat_personmap::iterator aii; for (aii = source->drawn_by.begin(); aii != source->drawn_by.end(); aii++) { this->drawn_by[aii->first].crit += aii->second.crit; this->drawn_by[aii->first].date.join(aii->second.date); } this->drawn_date.join(source->drawn_date); thmapstat_copyrightmap::iterator cii; for (cii = source->copyright.begin(); cii != source->copyright.end(); cii++) { this->copyright[cii->first].crit += cii->second.crit; this->copyright[cii->first].date.join(cii->second.date); } this->adddata(&(source->data)); } void thmapstat::addobj(thdataobject * obj) { // prejde vsetkych zdrojovych autorov a copyrighty a prida // si ich thdo_author_map_type::iterator aii; for (aii = obj->author_map.begin(); aii != obj->author_map.end(); aii++) { this->drawn_by[aii->first.name].crit += 1.0; this->drawn_by[aii->first.name].date.join(aii->second); this->drawn_date.join(aii->second); } thdo_copyright_map_type::iterator cii; thmapstat_copyright tmpc; for (cii = obj->copyright_map.begin(); cii != obj->copyright_map.end(); cii++) { tmpc.str = cii->first.name; this->copyright[tmpc].crit += 1.0; this->copyright[tmpc].date.join(cii->second); } } void thmapstat::scanmap(class thmap * map) { // upravi mape mapstat (rekurzivne), ak nebola scanovana if (map->stat.scanned) return; // prejde najprv podmapy - // ak mapy - tak zavola scanmap z ich statu a prida ich do map->statu // ak scrapy - tak prida do map->statu manualne autorov, copyrighty a // data, ktore maju viac ako 2 body thdb2dmi * mi = map->first_item; thmap * mapp; thscrap * scrapp; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { switch (mi->object->get_class_id()) { case TT_MAP_CMD: mapp = (thmap *) mi->object; mapp->stat.scanmap(mapp); map->stat.addstat(&(mapp->stat)); break; case TT_SCRAP_CMD: scrapp = (thscrap *) mi->object; scrapp->get_polygon(); map->stat.addobj(scrapp); map->stat.adddata(&(scrapp->adata)); break; } } mi = mi->next_item; } if (map->asoc_survey.psurvey != NULL) { map->stat.resetdata(); thmapstat_datamap dm; thmapstat_dataptr dp; thdataobject * obj; for(thdb_object_list_type::iterator it = thdb.object_list.begin(); it != thdb.object_list.end(); it++) { obj = *it; if ((obj->get_class_id() == TT_DATA_CMD) && (obj->is_in_survey(map->asoc_survey.psurvey))) { dp.ptr = (thdata*)obj; dm[dp] = 1; } } map->stat.adddata(&dm); } // potom prida do map->statu autorov a copyrighty z map // map->stat.addobj(map); // nakoniec nastavi ze uz bola scanovana map->stat.scanned = true; } struct thmapstat_person_data { thperson person; double crit; }; int thmapstat_person_data_compar(const void * d1, const void * d2) { thmapstat_person_data * p1 = (thmapstat_person_data *) d1, * p2 = (thmapstat_person_data *) d2; if (p1->crit < p2->crit) return 1; else if (p1->crit > p2->crit) return -1; else if (p1->person < p2->person) return -1; else if (p1->person == p2->person) return 0; else return 1; } #define thmapstat_print_team(team_map, team_name, max_items, alphasort, teamstr) \ fprintf(f,"\\" team_name "={"); \ pd = new thmapstat_person_data [team_map.size()]; \ i = 0; \ for (pi = team_map.begin(); \ pi != team_map.end(); pi++) { \ pd[i].person = pi->first; \ if (alphasort) \ pd[i].crit = 0.0; \ else \ pd[i].crit = pi->second.crit; \ i++; \ } \ qsort(pd,cnt,sizeof(thmapstat_person_data),thmapstat_person_data_compar); \ if (max_items >= 0) \ tcnt = (unsigned long)(max_items); \ else \ tcnt = cnt; \ for (i = 0; i < tcnt; i++) { \ b = pd[i].person.get_n1(); \ b += " "; \ b += pd[i].person.get_n2(); \ if (show_lengths) { \ b += " ("; \ b += layout->units.format_length(pd[i].crit); \ b += ""; \ b += layout->units.format_i18n_length_units(); \ b += ")"; \ } \ if (i < (tcnt-1)) \ b += ","; \ fprintf(f,"%s%s",utf2tex(b.get_buffer()),(i < (tcnt-1) ? "\n" : "")); \ teamstr += thutf82xhtml(b.get_buffer()); \ } \ fprintf(f,"}\n"); // snprintf(c.get_buffer(),127,"%.0f",pd[i].crit); // b += c.get_buffer(); // b += thT("units m",layout->lang); double thmapstat::get_length() { double clen = 0.0; thmapstat_datamap::iterator ii; for(ii = this->data.begin(); ii != this->data.end(); ii++) { clen += ii->first.ptr->stat_length; } return clen; } #define check_z(st) { \ if (st != NULL) { \ if (!z_any) { \ z_top = st->z; \ z_bot = st->z; \ z_any = true; \ } else { \ if (z_top < st->z) z_top = st->z; \ if (z_bot > st->z) z_bot = st->z; \ } \ } \ } double thmapstat::get_depth() { double z_top = 0.0, z_bot = 0.0; bool z_any = false; thmapstat_datamap::iterator ii; for(ii = this->data.begin(); ii != this->data.end(); ii++) { check_z(ii->first.ptr->stat_st_top); check_z(ii->first.ptr->stat_st_bottom); } return (z_top - z_bot); } void thmapstat::export_pdftex(FILE * f, class thlayout * layout, legenddata * ldata) { thbuffer b,c; unsigned long i, cnt, tcnt; thmapstat_personmap::iterator pi; thmapstat_copyrightmap::iterator ci; thmapstat_datamap::iterator ii; thmapstat_person_data * pd; bool show_lengths, z_any = false; double clen = 0.0, z_top = 0.0, z_bot = 0.0; c.guarantee(256); b.guarantee(256); fprintf(f,"\\thversion={%s}\n",THVERSION); thdate dt; dt.reset_current(); double cy = dt.get_start_year(); dt.shour = -1; fprintf(f,"\\currentdate={%s}\n",utf2tex(dt.get_str(TT_DATE_FMT_LOCALE))); fprintf(f,"\\northdir={%s}\n",layout->north == TT_LAYOUT_NORTH_GRID ? "grid" : "true"); if (thcfg.outcs == TTCS_LOCAL) { fprintf(f,"\\outcscode={local}\n"); fprintf(f,"\\outcsname={Local coordinate system}\n"); fprintf(f,"\\magdecl={N/A}\n"); fprintf(f,"\\gridconv={N/A}\n"); } else { fprintf(f,"\\outcscode={%s}\n",utf2tex(thcs_get_name(thcfg.outcs))); fprintf(f,"\\outcsname={%s}\n",utf2tex(thcs_get_data(thcfg.outcs)->prjname)); double md; thcfg.get_outcs_mag_decl(cy, md); fprintf(f,"\\magdecl={%.2f}\n", md); fprintf(f,"\\gridconv={%.2f}\n", thcfg.get_outcs_convergence()); } for(ii = this->data.begin(); ii != this->data.end(); ii++) { check_z(ii->first.ptr->stat_st_top); check_z(ii->first.ptr->stat_st_bottom); clen += ii->first.ptr->stat_length; } ldata->cavelength = ""; ldata->cavelengthtitle = ""; if (clen > 0) { //b = ""; //snprintf(b.get_buffer(),255,"%.0f",clen); b = layout->units.format_length(clen); b += ""; //b += thT("units m",layout->lang); b += layout->units.format_i18n_length_units(); fprintf(f,"\\cavelengthtitle={%s}\n",utf2tex(thT("title cave length",layout->lang))); fprintf(f,"\\cavelength={%s}\n",utf2tex(b.get_buffer())); ldata->cavelength = thutf82xhtml(b.get_buffer()); ldata->cavelengthtitle = thT("title cave length",layout->lang); } ldata->cavedepth = ""; ldata->cavedepthtitle = ""; if (z_top > z_bot) { //b = ""; //snprintf(b.get_buffer(),255,"%.0f",z_top-z_bot); b = layout->units.format_length(z_top-z_bot); b += ""; //b += thT("units m",layout->lang); b += layout->units.format_i18n_length_units(); fprintf(f,"\\cavedepthtitle={%s}\n",utf2tex(thT("title cave depth",layout->lang))); fprintf(f,"\\cavedepth={%s}\n",utf2tex(b.get_buffer())); ldata->cavedepth = thutf82xhtml(b.get_buffer()); ldata->cavedepthtitle = thT("title cave depth",layout->lang); b = layout->units.format_length(z_top); //b += ""; //b += layout->units.format_i18n_length_units(); fprintf(f,"\\cavemaxz={%s}\n",utf2tex(b.get_buffer())); b = layout->units.format_length(z_bot); //b += ""; //b += layout->units.format_i18n_length_units(); fprintf(f,"\\caveminz={%s}\n",utf2tex(b.get_buffer())); } show_lengths = (layout->explo_lens == TT_LAYOUT_LENSTAT_ON); ldata->explodate = ""; ldata->exploteam = ""; ldata->explotitle = ""; if ((this->discovered_by.size() > 0) && (layout->max_explos != 0)) { cnt = this->discovered_by.size(); if (cnt > 1) { fprintf(f,"\\explotitle={%s}\n", utf2tex(thT("title explo (plural)",layout->lang))); ldata->explotitle = thT("title explo (plural)",layout->lang); } else { fprintf(f,"\\explotitle={%s}\n", utf2tex(thT("title explo",layout->lang))); ldata->explotitle = thT("title explo",layout->lang); } if (discovered_date.is_defined()) { fprintf(f,"\\explodate={%s}\n", utf2tex(discovered_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->explodate = discovered_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->discovered_by,"exploteam", layout->max_explos, (layout->explo_lens == TT_LAYOUT_LENSTAT_OFF) ,ldata->exploteam); } ldata->topodate = ""; ldata->topoteam = ""; ldata->topotitle = ""; show_lengths = (layout->topo_lens == TT_LAYOUT_LENSTAT_ON); if ((this->surveyed_by.size() > 0) && (layout->max_topos != 0)) { cnt = this->surveyed_by.size(); if (cnt > 1) { fprintf(f,"\\topotitle={%s}\n", utf2tex(thT("title topo (plural)",layout->lang))); ldata->topotitle = thT("title topo (plural)",layout->lang); } else { fprintf(f,"\\topotitle={%s}\n", utf2tex(thT("title topo",layout->lang))); ldata->topotitle = thT("title topo",layout->lang); } if (surveyed_date.is_defined()) { fprintf(f,"\\topodate={%s}\n", utf2tex(surveyed_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->topodate = surveyed_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->surveyed_by,"topoteam", layout->max_topos, (layout->topo_lens == TT_LAYOUT_LENSTAT_OFF), ldata->topoteam); } ldata->cartodate = ""; ldata->cartoteam = ""; ldata->cartotitle = ""; show_lengths = false; if ((this->drawn_by.size() > 0) && (layout->max_cartos != 0)) { cnt = this->drawn_by.size(); if (cnt > 1) { fprintf(f,"\\cartotitle={%s}\n", utf2tex(thT("title carto (plural)",layout->lang))); ldata->cartotitle = thT("title carto (plural)",layout->lang); } else { fprintf(f,"\\cartotitle={%s}\n", utf2tex(thT("title carto",layout->lang))); ldata->cartotitle = thT("title carto",layout->lang); } if (drawn_date.is_defined()) { fprintf(f,"\\cartodate={%s}\n", utf2tex(drawn_date.get_str(TT_DATE_FMT_UTF8_Y))); ldata->cartodate = drawn_date.get_str(TT_DATE_FMT_UTF8_Y); } thmapstat_print_team(this->drawn_by,"cartoteam", layout->max_cartos, true, ldata->cartoteam); } ldata->copyrights = ""; if ((this->copyright.size() > 0) && (layout->max_copys != 0)) { cnt = this->copyright.size(); fprintf(f,"\\copyrights={%s",utf2tex("(c) ")); ldata->copyrights = "(c) "; i = 0; for (ci = this->copyright.begin(); (ci != this->copyright.end()) && ((layout->max_copys < 0) || (i < ((unsigned long)layout->max_copys))); ci++) { i++; b = ci->first.str; b += " "; b += ci->second.date.get_str(TT_DATE_FMT_UTF8_Y); if (i < cnt) b += ", "; ldata->copyrights += thutf82xhtml(b.get_buffer()); fprintf(f,"%s%s",utf2tex(b.get_buffer()),(i < cnt ? "\n" : "")); } fprintf(f,"}\n"); } } therion-5.4.1/thmapstat.h000066400000000000000000000053401307545355600153660ustar00rootroot00000000000000/** * @file thmapstat.h * Multiple string buffer class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmapstat_h #define thmapstat_h #include #include #include #include "thdate.h" #include "thperson.h" #include "thlegenddata.h" class thmapstat_data { public: friend bool operator < (const thmapstat_data & c1, const thmapstat_data & c2); thdate date; double crit; thmapstat_data(); }; class thmapstat_copyright { public: friend bool operator < (const thmapstat_copyright & c1, const thmapstat_copyright & c2); const char * str; }; class thmapstat_dataptr { public: friend bool operator < (const thmapstat_dataptr & c1, const thmapstat_dataptr & c2); class thdata * ptr; thmapstat_dataptr(); }; // person map type /person, datum, kriterium/ // copyright map type /copyright, datum, kriterium/ // data map type /dataid/ typedef std::map thmapstat_personmap; typedef std::map thmapstat_copyrightmap; typedef std::map thmapstat_datamap; class thmapstat { public: bool scanned; thmapstat_personmap discovered_by, surveyed_by, drawn_by; thdate drawn_date, surveyed_date, discovered_date; thmapstat_copyrightmap copyright; thmapstat_datamap data; /** * Standard constructor. */ thmapstat(); /** * Scan authors and copyrights and data. */ void scanmap(class thmap * map); /** * Add data from another objects. */ void addobj(class thdataobject * obj); void addstat(thmapstat * source); void adddata(thmapstat_datamap * dm); void resetdata(); void export_pdftex(FILE * f, class thlayout * layout, legenddata * ldata); double get_length(); double get_depth(); }; #endif therion-5.4.1/thmbuffer.cxx000066400000000000000000000054571307545355600157270ustar00rootroot00000000000000/** * @file thmbuffer.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thmbuffer.h" thmbuffer::mblock::mblock(size_t min_size, size_t last_size) { this->next_ptr = NULL; this->size = 4 * last_size; while (this->size <= min_size) this->size *= 4; this->data = new char [this->size]; } thmbuffer::mblock::~mblock() { delete [] this->data; delete this->next_ptr; } thmbuffer::thmbuffer() { this->max_size = 4; this->size = 0; this->buf = new char* [this->max_size]; this->first_ptr = new mblock(1000, 256); this->last_ptr = this->first_ptr; this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; } thmbuffer::~thmbuffer() { delete [] this->buf; delete this->first_ptr; } char * thmbuffer::appendn(const char * src, size_t n) { char * dest; while (this->free_size <= long(n)) { if (this->last_ptr->next_ptr != NULL) this->last_ptr = this->last_ptr->next_ptr; else { this->last_ptr->next_ptr = new mblock(n, this->last_ptr->size); this->last_ptr = this->last_ptr->next_ptr; } this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; } dest = strncpy(this->free_ptr, src, n); dest[n] = 0; this->free_ptr += n + 1; this->free_size -= n + 1; if (this->size == this->max_size) { char ** new_buf; this->max_size *= 4; new_buf = new char* [this->max_size]; memcpy(new_buf, this->buf, this->size * sizeof(char*)); delete [] this->buf; this->buf = new_buf; } this->buf[this->size] = dest; this->size++; return dest; } char * thmbuffer::append(const char * src) { return this->appendn(src, strlen(src)); } void thmbuffer::clear() { this->last_ptr = this->first_ptr; this->free_size = this->last_ptr->size; this->free_ptr = this->last_ptr->data; this->size = 0; } long thmbuffer::get_size() { return this->size; } char ** thmbuffer::get_buffer() { return this->buf; } therion-5.4.1/thmbuffer.h000066400000000000000000000051451307545355600153460ustar00rootroot00000000000000/** * @file thmbuffer.h * Multiple string buffer class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thmbuffer_h #define thmbuffer_h #include /** * Multiple string buffer class. */ class thmbuffer { long size, ///< Number of items in buffer. max_size, ///< Maximal number of items in buffer. free_size; char * free_ptr; ///< Pointer to the free string position. char ** buf; ///< Access array. /** * Memory allocation class. */ class mblock { public: char * data; ///< Pointer to the memory block. size_t size; ///< Size of the block. mblock * next_ptr; ///< Pointer to the next block. /** * Constructor. * * Allocates also necessary memory. */ mblock(size_t min_size, size_t last_size); /** * Destructor. * * Dealocates data memory. */ ~mblock(); }; mblock * first_ptr, ///< Pointer to the first memory block. * last_ptr; ///< Pointer to the last memory block. public: /** * Standard constructor. */ thmbuffer(); /** * Destructor. */ ~thmbuffer(); /** * Clear the buffer contents. */ void clear(); /** * Append new string to the buffer. * * @param src Source string. */ char * append(const char * src); /** * Append n characters from string as a new string to the buffer. * * @param src Source string. * @param n Source size. */ char * appendn(const char * src, size_t n); /** * Return number of items in buffer. */ long get_size(); /** * Return pointer to the array of items. */ char ** get_buffer(); }; #endif therion-5.4.1/thobjectid.cxx000066400000000000000000000023201307545355600160460ustar00rootroot00000000000000/** * @file thobjectid.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thobjectid.h" #include bool operator < (const thobjectid & o1, const thobjectid & o2) { if (o1.sid < o2.sid) return true; else if ((o1.sid == o2.sid) && (strcmp(o1.name,o2.name) < 0)) return true; else return false; } therion-5.4.1/thobjectid.h000066400000000000000000000030661307545355600155030ustar00rootroot00000000000000/** * @file thobjectid.h * Object identifier. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectid_h #define thobjectid_h /** * Therion object identifier. */ class thobjectid { public: const char * name; ///< Object name. unsigned long sid; ///< Survey id. thobjectid() : name(""), sid(0) {}; ///< Standard constructor. /** * Default contructor. * * @param n Object name. * @param svid Survey identifier. */ thobjectid(const char * n, unsigned long svid) : name(n), sid(svid) {}; /** * Comparison operator. */ friend bool operator < (const class thobjectid & o1, const class thobjectid &o2); }; #endif therion-5.4.1/thobjectname.cxx000066400000000000000000000101171307545355600163750ustar00rootroot00000000000000/** * @file thobjectname.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thobjectname.h" #include "thexception.h" #include "thparse.h" #include "thdatabase.h" #include "thdataobject.h" #include "thsurvey.h" thobjectname::thobjectname() { this->clear(); } void thobjectname::clear() { this->name = NULL; this->survey = NULL; this->psurvey = NULL; this->id = 0; } bool thobjectname::is_empty() { return (this->name == NULL); } void thparse_objectname(thobjectname & ds, thmbuffer * sstore, char * src, thdataobject * psobj) { if ((psobj != NULL) && ((psobj->stnsuff != NULL) || (psobj->stnpref != NULL))) { if (psobj->stnpref != NULL) thdb.buff_tmp = psobj->stnpref; else thdb.buff_tmp = ""; thdb.buff_tmp += src; if (psobj->stnsuff != NULL) thdb.buff_tmp += psobj->stnsuff; src = thdb.buff_tmp.get_buffer(); } ds.name = src; size_t snl = strlen(src), sni; for(sni = 0; sni < snl; sni++, src++) if (*src == '@') { *src = 0; ds.survey = src + 1; break; } if (!th_is_extkeyword(ds.name)) ththrow(("invalid object name -- %s", ds.name)) if (ds.survey != NULL) if (!th_is_keyword_list(ds.survey, '.')) ththrow(("invalid survey name -- %s", ds.survey)); ds.name = sstore->append(ds.name); if (ds.survey != NULL) ds.survey = sstore->append(ds.survey); ds.psurvey = thdb.get_current_survey(); } void fprintf(FILE * fh, thobjectname & ds) { if (ds.name != NULL) fprintf(fh, "%s", ds.name); else fprintf(fh, "-"); if (ds.survey != NULL) fprintf(fh, "@%s", ds.survey); if (ds.id > 0) fprintf(fh, ":%ld", ds.id); } char * thobjectname::print_name() { static thbuffer pname; size_t plen, slen; char * rv; plen = (this->name != NULL ? strlen(this->name) : 0); slen = (this->survey != NULL ? strlen(this->survey) : 0); pname.guarantee(plen + slen + 1); rv = pname.get_buffer(); rv[0] = 0; if ((plen > 0) && (slen > 0)) { sprintf(rv, "%s@%s", this->name, this->survey); } else if (plen > 0) { sprintf(rv, "%s", this->name); } else if (slen > 0) { sprintf(rv, "%s", this->survey); } return rv; } char * thobjectname__print_full_name(const char * oname, thsurvey * psrv, int slevel) { static thbuffer pname; size_t plen, slen, start, cx, tx; int clevel; char * rv; const char * sname; sname = NULL; if (psrv != NULL) sname = psrv->get_full_name(); plen = (oname != NULL ? strlen(oname) : 0); slen = (sname != NULL ? strlen(sname) : 0); pname.guarantee(plen + slen + 1); rv = pname.get_buffer(); rv[0] = 0; if ((plen > 0) && (slen > 0) && (slevel != 0)) { sprintf(rv, "%s@%s", oname, sname); } else if (plen > 0) { sprintf(rv, "%s", oname); } else if ((slen > 0) && (slevel != 0)) { sprintf(rv, "%s", sname); } if ((slen > 0) && (slevel > 0)) { start = (plen > 0 ? plen + 1 : 0); clevel = 0; tx = strlen(rv); for(cx = start; cx < tx; cx++) { if (rv[cx] == '.') { clevel++; if (clevel == slevel) { rv[cx] = 0; break; } } } } return rv; } char * thobjectname::print_full_name(int slevel) { return thobjectname__print_full_name(this->name, this->psurvey, slevel); } therion-5.4.1/thobjectname.h000066400000000000000000000041041307545355600160210ustar00rootroot00000000000000/** * @file thobjectname.h * Object name class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectname_h #define thobjectname_h #include "thmbuffer.h" #include "therion.h" /** * Survey station class. */ class thobjectname { public: const char * name, ///< Object name. * survey; ///< Survey name. class thsurvey * psurvey; ///< Parent survey. unsigned long id; ///< Object identifier. /** * Standard constructor. */ thobjectname(); /** * Two argument contructor. */ thobjectname(char * n, char * s) : name(n), survey(s), id(0) {} /** * Clear station. */ void clear(); /** * Return true if empty. */ bool is_empty(); /** * Print object name with survey into str. */ char * print_name(); /** * Print object name with survey up to given level into str. */ char * print_full_name(int slevel = -1); }; void thparse_objectname(thobjectname & ds, thmbuffer * sstore, char * src, class thdataobject * psobj = NULL); char * thobjectname__print_full_name(const char * oname, class thsurvey * psrv, int slevel = -1); void fprintf(FILE * fh, thobjectname & ds); #endif therion-5.4.1/thobjectsrc.cxx000066400000000000000000000020761307545355600162510ustar00rootroot00000000000000/** * @file thobjectsrc.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include "thobjectsrc.h" bool thobjectsrc::is_valid() { return (strlen(this->name) > 0); } therion-5.4.1/thobjectsrc.h000066400000000000000000000027711307545355600157000ustar00rootroot00000000000000/** * @file thobjectsrc.h * Object source class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thobjectsrc_h #define thobjectsrc_h #include /** * Object source class. */ class thobjectsrc { public: const char * name; ///< File name. unsigned long line; ///< File line. class thdataobject * context; ///< Source context. /** * Standard constructor. */ thobjectsrc() : name(""), line(0), context(NULL) {} /** * Parametric constructor. */ thobjectsrc(const char * n, unsigned long ln) : name(n), line(ln), context(NULL) {} bool is_valid(); }; #endif therion-5.4.1/thparse.cxx000066400000000000000000000707731307545355600154160ustar00rootroot00000000000000/** * @file thparse.cxx * Parsing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thparse.h" #include "therion.h" #include "thlang.h" #include "thtexfonts.h" #include #include "thinfnan.h" #include "thdatabase.h" #include "thtflength.h" #include "thexception.h" #include "thtexfonts.h" #include #include #include #ifdef THMSVC #define strcasecmp _stricmp #endif #ifdef HAVE_ROUND extern double round(double); /* prototype is often missing... */ # define thround round #else static double thround(double x) { if (x >= 0.0) return floor(x + 0.5); return ceil(x - 0.5); } #endif thmbuffer thparse_mbuff; int thmatch_stok(const char *buffer, const thstok *tab, int tab_size) { int a = 0, b = tab_size - 1, c, r; while (a <= b) { c = unsigned((a + b) / 2); r = strcmp(tab[c].s, buffer); if (r == 0) return tab[c].tok; if (r < 0) a = c + 1; else b = c - 1; } return tab[tab_size].tok; /* no match */ } int thcasematch_stok(const char *buffer, const thstok *tab, int tab_size) { int a = 0, b = tab_size - 1, c, r; while (a <= b) { c = unsigned((a + b) / 2); r = strcasecmp(tab[c].s, buffer); if (r == 0) return tab[c].tok; if (r < 0) a = c + 1; else b = c - 1; } return tab[tab_size].tok; /* no match */ } const char * thmatch_tstring(int token, const thstok *tab, int tab_size) { int i = 0; while ((i < tab_size) && (tab[i].tok != token)) i++; if (tab[i].tok == token) return tab[i].s; else return ""; /* no match */ } void thsplit_word(thbuffer * dword, thbuffer * drest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; short state = -1; // -1 before, 0 in, 1 out, 2 on the rest, 3 out unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while ((state < 2) && (idx < srcl)) { switch (state) { case -1: if (*s2 > 32) { state = 0; s1 = s2; idx0 = idx; } break; case 0: if (*s2 < 33) { state = 1; dword->strncpy((char *)s1, idx - idx0); } break; case 1: if (*s2 > 32) { state = 2; s1 = s2; idx0 = idx; } } idx++; s2++; } switch (state) { case -1: dword->strcpy(""); drest->strcpy(""); break; case 0: dword->strcpy((char *)s1); drest->strcpy(""); break; case 1: drest->strcpy(""); break; default: idx = srcl; s2 = (unsigned char *) src + idx; while ((idx >= idx0) && (*s2 < 33)) { s2--; idx--; } drest->strncpy((char *) s1, idx - idx0 + 1); } } void thsplit_words(thmbuffer * dest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 > 32) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 < 33) { state = 0; dest->appendn((char *) s1, idx - idx0); } } idx++; s2++; } if (state == 1) { dest->append((char *) s1); } } void thsplit_strings(thmbuffer * dest, const char * src, const char separator) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 != separator) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 == separator) { state = 0; dest->appendn((char *)s1, idx - idx0); } } idx++; s2++; } if (state == 1) dest->append((char *)s1); } void thsplit_paths(thmbuffer * dest, const char * src, char separator) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0; // 0 before, 1 in unsigned char * s1 = NULL, * s2 = (unsigned char *) src; while (idx < srcl) { switch (state) { case 0: if (*s2 != separator) { state = 1; s1 = s2; idx0 = idx; } break; case 1: if (*s2 == separator) { #ifdef THWIN32 if ((idx - idx0 == 1) && (((src[idx0] >= 'A') && (src[idx0] <= 'Z')) || ((src[idx0] >= 'a') && (src[idx0] <= 'z')))) break; #endif state = 0; dest->appendn((char *)s1, idx - idx0); } } idx++; s2++; } if (state == 1) dest->append((char *)s1); } void thsplit_args_postp_quotes(char * buf) { long bl = strlen(buf), idx = 0; while (idx < bl) { if (*buf == '"') { strcpy(buf, buf+1); bl--; } buf++; idx++; } } void thsplit_args(thmbuffer * dest, const char * src) { long srcl = strlen(src), idx = 0, idx0 = 0; dest->clear(); short state = 0, qlevel = 0; // 0 before, 1 in word, 2 in "", 3 in [] unsigned char * s1 = NULL, * s2 = (unsigned char *) src; bool postp_quotes = false; char * postp_ptr = NULL; while (idx < srcl) { switch (state) { case 0: if (*s2 > 32) { switch (*s2) { case '#': idx = srcl; break; case '"': state = 2; postp_quotes = false; break; case '[': state = 3; qlevel = 1; break; default: state = 1; } s1 = s2; idx0 = idx; } break; case 1: if (*s2 < 33) { state = 0; dest->appendn((char *) s1, idx - idx0); } break; case 3: switch (*s2) { case ']': qlevel--; if (qlevel <= 0) { state = 0; if (idx > (idx0 + 1)) dest->appendn((char *) s1 + 1, idx - idx0 - 1); else dest->appendn("",0); } break; case '[': qlevel++; break; } break; case 2: if (*s2 == '"') { if ((idx + 1 < srcl) && (s2[1] == '"')) { postp_quotes = true; idx++; s2++; break; } else { state = 0; if (idx > (idx0 + 1)) { postp_ptr = dest->appendn((char *) s1 + 1, idx - idx0 - 1); if (postp_quotes) thsplit_args_postp_quotes(postp_ptr); } else dest->appendn("",0); } } } idx++; s2++; } switch (state) { case 1: dest->append((char *) s1); break; case 2: if (idx > (idx0 + 1)) dest->appendn((char *) s1 + 1, idx - idx0 - 1); else dest->appendn("",0); break; case 3: if (idx > (idx0 + 1)) postp_ptr = dest->appendn((char *) s1 + 1, idx - idx0 - 1); if (postp_quotes) thsplit_args_postp_quotes(postp_ptr); else dest->appendn("",0); break; } } void thsplit_fpath(thbuffer * dest, const char * src) { long len = strlen(src); const char * s = src + len++; while ((len > 0) && (*s != '/')) { s--; len--; } dest->strncpy(src, len); } bool th_is_keyword(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if (*s == 95) continue; if ((*s == 45) && (i > 0)) continue; return false; } return true; } bool th_is_attr_name(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 47) && (*s < 58)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 96) && (*s < 123)) continue; if ((*s == 95) && (i > 0)) continue; return false; } return true; } bool th_is_index(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 47) && (*s < 58)) continue; return false; } return true; } bool th_is_keyword_list(const char * str, char sep) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if ((*s == 95) || (*s == 45)) continue; if (*s == sep) continue; return false; } return true; } bool th_is_extkeyword(const char * str) { size_t sl = strlen(str), i; unsigned char * s = (unsigned char *) str; if (sl == 0) return false; else for(i = 0; i < sl; i++, s++) { if ((*s > 96) && (*s < 123)) continue; if ((*s > 64) && (*s < 91)) continue; if ((*s > 46) && (*s < 58)) continue; if ((*s == 95) || (*s == 45)) continue; if (i > 0) { if (*s == 39) continue; if ((*s > 41) && (*s < 48)) continue; } return false; } return true; } void thparse_double(int & sv, double & dv, const char * src) { char * endptr; sv = thmatch_token(src, thtt_special_val); switch (sv) { case TT_SV_NAN: dv = thnan; break; case TT_SV_UP: case TT_SV_PINF: dv = thinf; break; case TT_SV_DOWN: case TT_SV_NINF: dv = - thinf; break; default: errno = 0; dv = strtod(src,&endptr); if ((*endptr == 0) && (errno == 0)) sv = TT_SV_NUMBER; else dv = 0.0; } } void thparse_double_dms(int & sv, double & dv, const char * src) { int ssv; double dms; thsplit_strings(&thparse_mbuff,src,':'); if (thparse_mbuff.get_size() > 0) { thparse_double(sv, dv, thparse_mbuff.get_buffer()[0]); // thprintf("DEG:%lf\n", dv); if (sv == TT_SV_NUMBER) { // ok, mame stupne if (thparse_mbuff.get_size() > 1) { thparse_double(ssv, dms, thparse_mbuff.get_buffer()[1]); // thprintf("MIN:%lf\n", dms); if ((ssv == TT_SV_NUMBER) && (dms >= 0.0) && (dv == double(int(dv)))) { // ok, mame minuty if (dv > 0.0) { dv += dms / 60.0; } else { dv -= dms / 60.0; } if ((dms == double(int(dms))) && (thparse_mbuff.get_size() == 3)) { thparse_double(ssv, dms, thparse_mbuff.get_buffer()[2]); // thprintf("SEC:%lf\n", dms); if ((ssv == TT_SV_NUMBER) && (dms >= 0.0)) { if (dv > 0.0) { dv += dms / 3600.0; } else { dv -= dms / 3600.0; } } else { // error sv = TT_SV_UNKNOWN; } } else if (thparse_mbuff.get_size() >= 3) { // error sv = TT_SV_UNKNOWN; } } else { // nemame nic sv = TT_SV_UNKNOWN; } } } } else { sv = TT_SV_UNKNOWN; dv = 0.0; } // thprintf("\n%s -> %lf\n", src, dv); } void thdecode_c(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if ((*srcp < 32) || (*srcp > 127)) { *dstp = '"'; dstp++; *dstp = '"'; dstp++; *dstp = '\\'; dstp++; *dstp = 'x'; dstp++; num = *srcp / 16; if (num < 10) *dstp = '0' + num; else *dstp = 'A' + (num - 10); dstp++; num = *srcp % 16; if (num < 10) *dstp = '0' + num; else *dstp = 'A' + (num - 10); dstp++; *dstp = '"'; dstp++; *dstp = '"'; } else { if ((*srcp == '\\') || (*srcp == '"')) { *dstp = '\\'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_tcl(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if ((*srcp < 32) || (*srcp > 127) || (*srcp == '[') || (*srcp == '[') || (*srcp == '"')) { *dstp = '\\'; dstp++; num = *srcp / 64; *dstp = '0' + num; dstp++; num = *srcp % 64; *dstp = '0' + (num/8); dstp++; *dstp = '0' + (num % 8); } else { if ((*srcp == '\\') || (*srcp == '"')) { *dstp = '\\'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_mp(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { if (*srcp < 32) { *dstp = ' '; } else { if (*srcp == '"') { *dstp = '"'; dstp++; *dstp = '&'; dstp++; *dstp = 'd'; dstp++; *dstp = 't'; dstp++; *dstp = 't'; dstp++; *dstp = 'o'; dstp++; *dstp = '&'; dstp++; } *dstp = *srcp; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_tex(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; // unsigned num; dest->guarantee(srcln * 8 + 1); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); while (srcx < srcln) { switch (*srcp) { case '%': case '_': case '&': case '$': case '#': case '@': case '~': case '`': case '^': case '*': case '\\': case '{': case '}': case '|': case '"': *dstp = '\\'; dstp++; *dstp = *srcp; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = 0; } void thdecode_utf2tex(thbuffer * dest, const char * src) { static thbuffer tmpb; tmpb = src; size_t srcln = strlen(src), srcx = 0, tmpl; unsigned char * srcp, * dstp, * wsrcp, *tmpp; dest->strcpy(""); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) tmpb.get_buffer(); while (srcx < srcln) { switch (*srcp) { case '%': case '_': case '(': case ')': case '[': case ']': case '&': case '$': case '#': case '@': case '~': case '`': case '^': case '*': case '\\': case '{': case '}': case '|': case '"': case ' ': case 9: case 12: *dstp = 0; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 srcx = 0; srcp = (unsigned char*) src; wsrcp = (unsigned char*) tmpb.get_buffer(); unsigned char single[2]; bool isutf8; dstp = &(single[0]); single[1] = 0; // copy word by word while(srcx < srcln) { if (*wsrcp == 0) { single[0] = *srcp; dest->strcat((char*) dstp); srcx++; srcp++; wsrcp++; } else { isutf8 = false; tmpl = 0; // check if there is some character > 127 for(tmpp = wsrcp; *tmpp != 0; tmpp++) { tmpl++; isutf8 = isutf8 || (*tmpp > 127); } if (isutf8) { dest->strcat(utf2tex((char*) wsrcp)); } else { dest->strcat((char*) wsrcp); } srcx+=tmpl; srcp+=tmpl; wsrcp+=tmpl; } } } void thdecode_sql(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx = 0; unsigned char * srcp, * dstp; // unsigned num; if ((src == NULL) || (srcln == 0)) { *dest = "NULL"; return; } dest->guarantee(srcln * 8 + 3); // check buffer size srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); *dstp = '\''; dstp++; while (srcx < srcln) { switch (*srcp) { case '\'': *dstp = '\''; dstp++; *dstp = *srcp; break; default: *dstp = *srcp; break; } srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = '\''; dstp++; *dstp = 0; } void thdecode_arg(thbuffer * dest, const char * src) { size_t srcln = strlen(src), srcx; unsigned char * srcp, * dstp; // unsigned num; srcx = 0; srcp = (unsigned char*) src; // rychlo prescanuje, an nenajde whitespace, tak len skopiruje bool quickcpy = true; while (srcx < srcln) { if (*srcp <= 32) { quickcpy = false; break; } srcp++; srcx++; } if (quickcpy) { dest->strcpy(src); return; } // zaciatocna uvodzovka dest->guarantee(srcln * 8 + 3); // check buffer size srcx = 0; srcp = (unsigned char*) src; dstp = (unsigned char*) dest->get_buffer(); *dstp = '"'; dstp++; while (srcx < srcln) { if (*srcp == '"') { *dstp = '"'; dstp++; } *dstp = *srcp; srcx++; srcp++; dstp++; } // end destination string with 0 *dstp = '"'; dstp++; *dstp = 0; } void thparse_altitude(const char * src, double & altv, double & fixv) { thsplit_args(& thdb.db2d.mbf, src); int npar = thdb.db2d.mbf.get_size(); char ** pars = thdb.db2d.mbf.get_buffer(); int sv, ux = 0; bool parsev = true; thtflength lentf; altv = 0.0; fixv = 1.0; if ((npar > 1) && (strcmp(pars[0],"fix") == 0)) { fixv = 0.0; npar--; pars++; } switch (npar) { case 0: parsev = false; break; case 1: break; case 2: ux = 1; break; default: ththrow(("invalid altitude specification -- %s",src)) } if (parsev) { thparse_double(sv,altv,pars[0]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid altitude value -- %s", pars[0])); if (sv == TT_SV_NAN) altv = 0.0; } if ((ux > 0) && (sv != TT_SV_NAN)) { lentf.parse_units(pars[ux]); altv = lentf.transform(altv); } } void thparse_image(const char * fname, double & width, double & height, double & dpi, int & type) { type = TT_IMG_TYPE_UNKNOWN; FILE * pictf = fopen(fname, "rb"); #define picths 2048 size_t phsize; double xdpi, ydpi; unsigned char picth [picths], * scan; size_t sx; width = 0.0; height = 0.0; dpi = 300.0; if (pictf != NULL) { phsize = fread(&(picth[0]), 1, picths, pictf); fclose(pictf); // najde si format a vytiahne informacie if ((picth[0] == 0xFF) && (picth[1] == 0xD8) && (picth[2] == 0xFF) && (picth[3] == 0xE0)) { // JPEG type = TT_IMG_TYPE_JPEG; xdpi = 300.0; ydpi = 300.0; switch (picth[13]) { case 1: xdpi = thround(double(picth[14] * 256.0 + picth[15])); ydpi = thround(double(picth[16] * 256.0 + picth[17])); break; case 2: xdpi = thround(double(picth[14] * 256 + picth[15]) * 2.54); ydpi = thround(double(picth[16] * 256 + picth[17]) * 2.54); break; } if (xdpi != ydpi) { ththrow(("X and Y image resolution not equal -- %s", fname)); } dpi = xdpi; if (dpi < 1.0) { dpi = 300.0; } //for(sx = 0, scan = &(picth[0]); sx < (phsize - 10); sx++, scan++) { // if ((scan[0] == 0xFF) && ((scan[1] == 0xC0) || (scan[1] == 0xC1))) { // height = thround(double(scan[5]) * 256.0 + double(scan[6])); // width = thround(double(scan[7]) * 256.0 + double(scan[8])); // } //} sx = 0; int marker; size_t len; pictf = fopen(fname, "rb"); fread(&(picth[0]), 1, 2, pictf); height = -1.0; width = -1.0; while(getc(pictf) == 255) { marker = getc(pictf); len = 256 * (size_t) getc(pictf) + (size_t) getc(pictf); if ((marker == 0xC0) || (marker == 0xC1)) { getc(pictf); height = thround(double(getc(pictf)) * 256.0 + double(getc(pictf))); width = thround(double(getc(pictf)) * 256.0 + double(getc(pictf))); break; } fseek(pictf, len - 2, SEEK_CUR); } fclose(pictf); if ((height < 0.0) || (width < 0.0)) ththrow(("unable to determine image size -- %s", fname)); } else if ( (picth[0] == 0x89) && (picth[1] == 0x50) && (picth[2] == 0x4E) && (picth[3] == 0x47) && (picth[4] == 0x0D) && (picth[5] == 0x0A) && (picth[6] == 0x1A) && (picth[7] == 0x0A)) { // PNG type = TT_IMG_TYPE_PNG; // najde pHYs za nim 4(x), 4(y), 1(units) = 01-meters, 00-unspec for(sx = 0, scan = &(picth[0]); sx < (phsize - 12); sx++, scan++) { if (strncmp((char *) scan,"pHYs",4) == 0) { xdpi = double(scan[4] * 0x1000000 + scan[5] * 0x10000 + scan[6] * 0x100 + scan[7]); ydpi = double(scan[8] * 0x1000000 + scan[9] * 0x10000 + scan[10] * 0x100 + scan[11]); if (xdpi != ydpi) { ththrow(("X and Y image resolution not equal -- %s", fname)); } switch (scan[12]) { case 1: xdpi = thround(xdpi * 0.0254); break; default: xdpi = 300.0; break; } dpi = xdpi; break; } } width = thround(double(picth[16] * 0x1000000 + picth[17] * 0x10000 + picth[18] * 0x100 + picth[19])); height = thround(double(picth[20] * 0x1000000 + picth[21] * 0x10000 + picth[22] * 0x100 + picth[23])); } else { ththrow(("file format not supported -- %s", fname)) } } else { ththrow(("file not found -- %s", fname)) } #ifdef THDEBUG thprintf("\nIMAGE FILE:%s\n", fname); thprintf( " DPI:%.0f\n", dpi); thprintf( " SIZE:%.0f x %.0f\n\n", width, height); #endif } void thHSV2RGB(double H, double S, double V, double & R, double & G, double & B) { if (S == 0.0) { R = V; G = V; B = V; } else { double var_h = H * 6; int var_i = (int) floor( var_h ); double var_1 = V * ( 1 - S ); double var_2 = V * ( 1 - S * ( var_h - var_i ) ); double var_3 = V * ( 1 - S * ( 1 - ( var_h - var_i ) ) ); switch (var_i) { case 0: R = V ; G = var_3 ; B = var_1 ; break; case 1: R = var_2 ; G = V ; B = var_1 ; break; case 2: R = var_1 ; G = V ; B = var_3 ; break; case 3: R = var_1 ; G = var_2 ; B = V ; break; case 4: R = var_3 ; G = var_1 ; B = V ; break; default: R = V ; G = var_1 ; B = var_2 ; break; } } } void thset_color(int color_map, double index, double total, double & R, double & G, double & B) { switch (color_map) { default: if (total > 0) thHSV2RGB(index / total * 0.833333, 1.0, 1.0, R, G, B); else { R = 1.0; G = 1.0; B = 1.0; } } R = double(int(100 * R)) / 100.0; G = double(int(100 * G)) / 100.0; B = double(int(100 * B)) / 100.0; } void thset_grid( double gorigin, double gsize, double min, double max, double & qstart, long & nquads) { // treba nam najst origin start a quads aby if (min < gorigin) qstart = gorigin - gsize * ceil((gorigin - min) / gsize); else qstart = gorigin + gsize * floor((min - gorigin) / gsize); nquads = long(ceil(max - qstart) / gsize); } const char * thutf82xhtml(const char * src) { static thbuffer tmp; if (src == NULL) return ""; size_t sx, dx, sl = strlen(src); bool inspec; char * res; tmp.guarantee(sl); res = tmp.get_buffer(); inspec = false; for(sx = 0, dx = 0; sx < sl; sx++) { if ((!inspec) && (src[sx] == '<')) { inspec = true; } else if ((inspec) && (src[sx] == '>')) { inspec = false; } else if (!inspec) { res[dx] = src[sx]; dx++; } } res[dx] = 0; return res; } static const char base64_tab[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; void thbase64_encode(const char * fname, FILE * fout) { int llength = 0; char in_buffer[3]; unsigned char out_buffer[5]; out_buffer[4] = 0; FILE * fin; fin = fopen(fname, "rb"); size_t count; do { for (int i = 0; i < 3; i++) in_buffer[i] = '\x0'; for (int i = 0; i < 4; i++) out_buffer[i] = '='; if (fin != NULL) count = fread(in_buffer, 1, 3, fin); else count = 0; unsigned long value = ((unsigned char)in_buffer[0]) << 16 | ((unsigned char)in_buffer[1]) << 8 | ((unsigned char)in_buffer[2]) << 0; out_buffer[0] = base64_tab[(value >> 18) & 0x3F]; out_buffer[1] = base64_tab[(value >> 12) & 0x3F]; if (count > 1) out_buffer[2] = base64_tab[(value >> 6) & 0x3F]; if (count > 2) out_buffer[3] = base64_tab[(value >> 0) & 0x3F]; if (llength >= 76) { fprintf(fout,"\n"); llength = 0; } fprintf(fout,"%s",out_buffer); llength += 4; } while ((fin != NULL) && (!feof(fin))); if (fin != NULL) fclose(fin); } bool thpath_is_absolute(const char * fname) { #ifdef THWIN32 return ((strlen(fname) > 3) && (fname[1] == ':')); #else return ((strlen(fname) > 2) && (fname[0] == '/')); #endif } void thparse_length(int & sv, double & dv, const char * src) { sv = thmatch_token(src, thtt_special_val); if (sv == TT_SV_NAN) { dv = thnan; return; } else { sv = TT_SV_UNKNOWN; } char * units; size_t strl, cx; strl = strlen(src); thtflength lt; static thbuffer plb; char * srcb; plb.strcpy(src); srcb = plb.get_buffer(); // first let's find units index bool has_units = false; units = NULL; for(cx = strl - 1; cx > 0; cx--) { if (has_units) { if (srcb[cx] < 33) srcb[cx] = 0; else break; } else { if ((cx < strl - 1) && (!( ((srcb[cx] >= 'a') && (srcb[cx] <= 'z')) || ((srcb[cx] >= 'A') && (srcb[cx] <= 'Z')) )) ) { units = &(srcb[cx+1]); if (((*units >= 'a') && (*units <= 'z')) || ((*units >= 'A') && (*units <= 'Z'))) { has_units = true; } else { units = NULL; } } if (srcb[cx] < 33) srcb[cx] = 0; } } // parse units if applicable if (units != NULL) { lt.parse_units(units); *units = 0; } // parse double value errno = 0; char * endptr; dv = strtod(srcb,&endptr); if ((*endptr == 0) && (errno == 0)) sv = TT_SV_NUMBER; else dv = thnan; dv = lt.transform(dv); } std::string ths2tex(std::string original, int lang, bool remove_kerning) { return utf2tex(select_lang(original, thlang_getid(lang)), remove_kerning); } std::string ths2txt(const char * original, int lang, int encoding) { return ths2txt(std::string(original == NULL ? "" : original), lang, encoding); } std::string ths2txt(std::string original, int lang, int encoding) { // TODO: encoding conversion & al. return select_lang(original, thlang_getid(lang)); } therion-5.4.1/thparse.h000066400000000000000000000175311307545355600150340ustar00rootroot00000000000000/** * @file thparse.h * Parsing module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thparse_h #define thparse_h #include #include #include "thbuffer.h" #include "thmbuffer.h" enum { TT_IMG_TYPE_UNKNOWN, TT_IMG_TYPE_JPEG, TT_IMG_TYPE_PNG, }; /** * Token definition structure. */ typedef struct { const char * s; ///< String. int tok; ///< Token. } thstok; /** * Match string token. * * Scan array of token definitions (stok) for given string. If not found, * last element of array is returned. This array should allways be * alphabetically sorted and last element should be set to * like TT_UNKNOWN. * * @param buffer String buffer. * @param tab Array of token definitions. * @param tab_size Size of token array (ID of last element). * * @sa thmatch_token */ int thmatch_stok(const char *buffer, const thstok *tab, int tab_size); int thcasematch_stok(const char *buffer, const thstok *tab, int tab_size); /** * Match string token macro. */ #define thmatch_token(buffer, table) thmatch_stok(buffer, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) #define thcasematch_token(buffer, table) thcasematch_stok(buffer, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) /** * Match token string. * * Inverse function to thmatch_stok(). */ const char * thmatch_tstring(int token, const thstok *tab, int tab_size); /** * Match token string macro. */ #define thmatch_string(token, table) thmatch_tstring(token, table,\ ((sizeof(table)/sizeof(thstok)) - 1)) /** * Boolean tokens. */ enum { TT_UNKNOWN_BOOL = 0, ///< Not match. TT_TRUE, ///< yes, on, 1, true. TT_FALSE, ///< no, off, 0, false. TT_AUTO, ///< automatical setting }; /** * Boolean token table. * * Defines following: * - 1, on, yes, true = TT_TRUE * - 0, off, no, false = TT_FALSE * - TT_UNKNOWN_BOOL otherwise */ static const thstok thtt_bool[] = { // {"0", TT_FALSE}, // {"1", TT_TRUE}, // {"false", TT_FALSE}, // {"no", TT_FALSE}, {"off", TT_FALSE}, {"on", TT_TRUE}, // {"true", TT_TRUE}, // {"yes", TT_TRUE}, {NULL, TT_UNKNOWN_BOOL} }; /** * ON/OFF/AUTO token table. */ static const thstok thtt_onoffauto[] = { {"auto", TT_AUTO}, {"off", TT_FALSE}, {"on", TT_TRUE}, {NULL, TT_UNKNOWN_BOOL} }; /** * Special values tokens. */ enum { TT_SV_UNKNOWN, ///< Unknown special value TT_SV_NUMBER, ///< A real number. TT_SV_NAN, ///< Not a number. TT_SV_PINF, ///< Positive infinity. TT_SV_NINF, ///< Negative infinity. TT_SV_UP, ///< Up direction. TT_SV_DOWN, ///< Down direction. TT_SV_ALL, ///< All TT_SV_OFF, ///< Off }; /** * Special values token table. * * Defines following: * - "-", ".", "nan", "NAN", "NaN" = TT_SV_NAN * - "Inf", "inf", "INF" = TT_SV_PINF * - "-Inf", "-inf", "-INF" = TT_SV_NINF * - "up", "Up", "UP" = TT_SV_UP * - "down", "Down", "DOWN" = TT_SV_DOWN * - TT_SV_UNKNOWN otherwise */ static const thstok thtt_special_val[] = { {"-", TT_SV_NAN}, {"-INF", TT_SV_NINF}, {"-Inf", TT_SV_NINF}, {"-inf", TT_SV_NINF}, {".", TT_SV_NAN}, {"DOWN", TT_SV_DOWN}, {"Down", TT_SV_DOWN}, {"INF", TT_SV_PINF}, {"Inf", TT_SV_PINF}, {"NAN", TT_SV_NAN}, {"NaN", TT_SV_NAN}, {"UP", TT_SV_UP}, {"Up", TT_SV_UP}, {"all", TT_SV_ALL}, {"down", TT_SV_DOWN}, {"inf", TT_SV_PINF}, {"nan", TT_SV_NAN}, {"off", TT_SV_OFF}, {"up", TT_SV_UP}, {NULL, TT_SV_UNKNOWN} }; /** * Parse double value (with check for special values). */ void thparse_double(int & sv, double & dv, const char * src); /** * Parse length value. */ void thparse_length(int & sv, double & dv, const char * src); /** * Parse double value given in DMS (with check for special values). */ void thparse_double_dms(int & sv, double & dv, const char * src); /** * Update double value (with check for special values). */ #define thupdate_double(ov, uv) if (!(thisnan(uv))) ov = uv /** * Split given string into first word and the rest. */ void thsplit_word(thbuffer * dword, thbuffer * drest, const char * src); /** * Split given string into words (separated by white spaces). */ void thsplit_words(thmbuffer * dest, const char * src); /** * Split given string into substrings. * * In the source, they're separated by given character separator. */ void thsplit_strings(thmbuffer * dest, const char * src, const char separator); /** * Split given string into paths. * * Take care of C:\.... */ void thsplit_paths(thmbuffer * dest, const char * src, char separator); /** * Separate given argument string. * * Arguments are separated by white spaces. Strings could be quoted * ("" = ") or given in [] brackets. */ void thsplit_args(thmbuffer * dest, const char * src); /** * Separate path part from full file name. */ void thsplit_fpath(thbuffer * dest, const char * src); /** * Check if given string is keyword. * * Valid keyword characters are A-Z, a-z, 0-9,'_' and '-'. */ bool th_is_keyword(const char * str); /** * Check if given string is index (positive integer). */ bool th_is_index(const char * str); /** * Check if given string is keyword list. * * Valid keyword characters are A-Z, a-z, 0-9,'_' and '-'. * * @param str Input string. * @param sep Keyword separator. */ bool th_is_keyword_list(const char * str, char sep); /** * Check if given string is extended keyword. * * A-Z, a-z, 0-9 and [_.,-/+*'] */ bool th_is_extkeyword(const char * str); /** * Decode string into C format. */ void thdecode_c(thbuffer * dest, const char * src); void thdecode_tcl(thbuffer * dest, const char * src); /** * Decode string into TeX format. */ void thdecode_tex(thbuffer * dest, const char * src); void thdecode_utf2tex(thbuffer * dest, const char * src); void thdecode_sql(thbuffer * dest, const char * src); void thdecode_mp(thbuffer * dest, const char * src); /** * Decode into argument string. */ void thdecode_arg(thbuffer * dest, const char * src); /** * Parse altitude value */ void thparse_altitude(const char * src, double & altv, double & fixv); /** * Check image. */ void thparse_image(const char * fname, double & width, double & height, double & dpi, int & type); /** * Set color according to color map (TODO). */ void thset_color(int color_map, double index, double total, double & R, double & G, double & B); /** * Set grid origin and size. */ void thset_grid(double gorigin, double gsize, double min, double max, double & qstart, long & nquads); /** * Convert therion string to xhtml. */ const char * thutf82xhtml(const char * src); /** * Base 64 file encoder. */ void thbase64_encode(const char * fname, FILE * fout); /** * Check if path is absolute. */ bool thpath_is_absolute(const char * fname); /** * Check on attribute name. */ bool th_is_attr_name(const char * str); std::string ths2tex(std::string original, int lang = -1, bool remove_kerning = false); std::string ths2txt(const char * original, int lang = -1, int encoding = -1); std::string ths2txt(std::string original, int lang = -1, int encoding = -1); #endif therion-5.4.1/thpdf.cxx000066400000000000000000002042341307545355600150440ustar00rootroot00000000000000/** * @file thpdf.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include #include // #include #include #include #include // #ifdef NOTHERION // #include // I don't know why // #endif #include "thpdfdbg.h" #include "thpdfdata.h" #include "thtexfonts.h" #include "thlang.h" #include "thversion.h" #ifdef THMSVC #define round(x) floor((x) + 0.5) #endif #ifndef NOTHERION #include "thchenc.h" #include "thbuffer.h" #endif using namespace std; #define IOerr(F) ((string)"Can't open file "+F+"!\n").c_str() /////////// // extern list SCRAPLIST; // extern map LAYERHASH; // extern set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; /////////// typedef struct { int id; int namex,namey,layer; bool dest,bookmark,title_before; map< int,set > scraps; int jumpE,jumpW,jumpN,jumpS; set jumpU,jumpD; // map< int,set > preview; // set preview; } sheetrecord; map > preview; map::iterator> SHEET_JMP; bool operator < (sheetrecord a, sheetrecord b) { return a.id < b.id; } bool operator == (sheetrecord a, sheetrecord b) { return a.id == b.id; } list SHEET; ////////// int mode; const int ATLAS = 0, MAP = 1; double MINX, MINY, MAXX, MAXY; double HS,VS; ////////// string tex_Sname(string s) {return("THS"+s);} string tex_Nname(string s) {return("THN"+s);} string tex_BMPname(string s) {return("THBMP"+s);} // bitmap void read_settings() { ifstream F("scraps.dat"); if(!F) therror(("Can't open file `scraps.dat'!")); char buf[101],ctok[100]; string tok; int context = 0; // 0=scrap, 1=layer, 2=map preview, 3=legend int i; double llx,lly,urx,ury; scraprecord SCR; layerrecord LH; list::iterator I; map::iterator J; while(F.getline(buf,100,'\n')) { // istrstream S(buf); istringstream S(buf); S >> ctok; tok = ctok; if (tok == "[SCRAP]") context = 0; else if (tok == "[LAYER]") context = 1; else if (tok == "[MAP]") context = 2; else if (tok == "[LEGEND]") context = 3; else if (tok == "N") { switch (context) { case 0: S >> ctok; SCRAPLIST.push_front(SCR); I = SCRAPLIST.begin(); I->name = ctok; break; case 1: S >> ctok; ((*J).second).N = ctok; while(S >> ctok) { ((*J).second).N = ((*J).second).N + " " + string(ctok); } break; } } else if (tok == "F") { S >> llx >> lly >> urx >> ury; I->F = " "; I->F1 = llx; I->F2 = lly; I->F3 = urx; I->F4 = ury; } else if (tok == "G") { S >> llx >> lly >> urx >> ury; I->G = " "; I->G1 = llx; I->G2 = lly; I->G3 = urx; I->G4 = ury; } else if (tok == "B") { S >> llx >> lly >> urx >> ury; I->B = " "; I->B1 = llx; I->B2 = lly; I->B3 = urx; I->B4 = ury; } else if (tok == "I") { S >> llx >> lly >> urx >> ury; I->I = " "; I->I1 = llx; I->I2 = lly; I->I3 = urx; I->I4 = ury; } else if (tok == "E") { S >> llx >> lly >> urx >> ury; I->E = " "; I->E1 = llx; I->E2 = lly; I->E3 = urx; I->E4 = ury; } else if (tok == "X") { S >> llx >> lly >> urx >> ury; I->X = " "; I->X1 = llx; I->X2 = lly; I->X3 = urx; I->X4 = ury; } else if (tok == "P") { S >> ctok; I->P = ctok; S >> llx >> lly; I->S1 = llx; I->S2 = lly; } else if (tok == "Y") { S >> i; I->layer = i; } else if (tok == "V") { S >> i; I->level = i; } else if (tok == "R") { S >> i; LAYERHASH.insert(make_pair(i,LH)); J = LAYERHASH.find(i); ((*J).second).Z = 0; } else if (tok == "U") { switch (context) { case 1: while(S >> i) { (((*J).second).U).insert(i); } break; case 2: while(S >> i) { MAP_PREVIEW_UP.insert(i); } break; } } else if (tok == "D") { switch (context) { case 1: while(S >> i) { (((*J).second).D).insert(i); } break; case 2: while(S >> i) { MAP_PREVIEW_DOWN.insert(i); } break; } } else if (tok == "T") { S >> ctok; ((*J).second).T = ctok; while(S >> ctok) { ((*J).second).T = ((*J).second).T + " " + string(ctok); } } else if (tok == "Z") { switch (context) { case 0: S >> i; I->sect = i; break; case 1: ((*J).second).Z = 1; break; } } } F.close(); SCRAPLIST.reverse(); } string xyz2str(int x, int y, int z) { char buf[50]; sprintf(buf,"%d.%d.%d",x,y,z); return (string) buf; } list::iterator find_sheet(int x, int y, int z) { // list::iterator I; // for (I = SHEET.begin(); I != SHEET.end(); I++) { // if (I->layer == x && I->namex == y && I->namey == z) break; // } // return (I); if (SHEET_JMP.count(xyz2str(x,y,z)) > 0) return SHEET_JMP.find(xyz2str(x,y,z))->second; else return SHEET.end(); } void make_sheets() { double llx = 0, lly = 0, urx = 0, ury = 0; double a,b,w,h; sheetrecord SHREC; if (mode == ATLAS) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { I->second.minx = INT_MAX; I->second.miny = INT_MAX; I->second.maxx = INT_MIN; I->second.maxy = INT_MIN; } } for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { llx = DBL_MAX; lly = DBL_MAX; urx = -DBL_MAX; ury = -DBL_MAX; if (I->F != "" && I->E == "" && I->G == "" && I->B == "" && I->X == "") { // clipped symbols shouldn't affect map size if (I->F1 < llx) llx = I->F1; if (I->F2 < lly) lly = I->F2; if (I->F3 > urx) urx = I->F3; if (I->F4 > ury) ury = I->F4; } if (I->E != "") { if (I->E1 < llx) llx = I->E1; if (I->E2 < lly) lly = I->E2; if (I->E3 > urx) urx = I->E3; if (I->E4 > ury) ury = I->E4; } if (I->G != "") { if (I->G1 < llx) llx = I->G1; if (I->G2 < lly) lly = I->G2; if (I->G3 > urx) urx = I->G3; if (I->G4 > ury) ury = I->G4; } if (I->B != "") { if (I->B1 < llx) llx = I->B1; if (I->B2 < lly) lly = I->B2; if (I->B3 > urx) urx = I->B3; if (I->B4 > ury) ury = I->B4; } if (I->I != "") { if (I->I1 < llx) llx = I->I1; if (I->I2 < lly) lly = I->I2; if (I->I3 > urx) urx = I->I3; if (I->I4 > ury) ury = I->I4; } if (I->X != "") { if (I->X1 < llx) llx = I->X1; if (I->X2 < lly) lly = I->X2; if (I->X3 > urx) urx = I->X3; if (I->X4 > ury) ury = I->X4; } for (list::iterator I_sk = I->SKETCHLIST.begin(); I_sk != I->SKETCHLIST.end(); I_sk++) { for (int i = 0; i<=1; i++) { for (int j = 0; j<=1; j++) { w = i * I_sk->width; h = j * I_sk->height; a = I_sk->xx*w + I_sk->xy*h + I_sk->dx; b = I_sk->yx*w + I_sk->yy*h + I_sk->dy; if (a < llx) llx = a; if (b < lly) lly = b; if (a > urx) urx = a; if (b > ury) ury = b; } } }; if (llx == DBL_MAX || lly == DBL_MAX || urx == -DBL_MAX || ury == -DBL_MAX) therror(("This can't happen -- no data for a scrap!")); map::iterator J = LAYERHASH.find(I->layer); if (J == LAYERHASH.end()) therror (("This can't happen!")); if (mode == ATLAS) { int Llx = (int) floor((llx-LAYOUT.overlap-LAYOUT.hoffset) / LAYOUT.hsize); int Lly = (int) floor((lly-LAYOUT.overlap-LAYOUT.voffset) / LAYOUT.vsize); int Urx = (int) floor((urx+LAYOUT.overlap-LAYOUT.hoffset) / LAYOUT.hsize); int Ury = (int) floor((ury+LAYOUT.overlap-LAYOUT.voffset) / LAYOUT.vsize); for (int i = Llx; i <= Urx; i++) { for (int j = Lly; j <= Ury; j++) { if (J->second.Z == 0) { // Z layers don't create new sheets list::iterator sheet_it = find_sheet(I->layer,i,j); if (sheet_it == SHEET.end()) { sheet_it = SHEET.insert(SHEET.end(),SHREC); SHEET_JMP.insert(make_pair(xyz2str(I->layer,i,j),sheet_it)); } sheet_it->layer = I->layer; sheet_it->namex = i; sheet_it->namey = j; map >::iterator K = sheet_it->scraps.find(I->level); if (K == sheet_it->scraps.end()) { set SCRP; sheet_it->scraps.insert(make_pair(I->level,SCRP)); K = sheet_it->scraps.find(I->level); } ((*K).second).insert(I->name); if (J->second.minx > Llx) J->second.minx = Llx; if (J->second.miny > Lly) J->second.miny = Lly; if (J->second.maxx < Urx) J->second.maxx = Urx; if (J->second.maxy < Ury) J->second.maxy = Ury; } // we add scrap to preview set tmpset; string tmpstr; tmpstr = xyz2str(I->layer,i,j); map >::iterator pr_it = preview.find(tmpstr); if (pr_it == preview.end()) { preview.insert(make_pair(tmpstr,tmpset)); pr_it = preview.find(tmpstr); } pr_it->second.insert(I->name); } } } else { map >::iterator K = (((*J).second).scraps).find(I->level); if (K == (((*J).second).scraps).end()) { set SCRP; (((*J).second).scraps).insert(make_pair(I->level,SCRP)); K = (((*J).second).scraps).find(I->level); } ((*K).second).insert(I->name); (((*J).second).allscraps).insert(I->name); if (((*J).second).Z == 0) { if (MINX > llx) MINX = llx; if (MINY > lly) MINY = lly; if (MAXX < urx) MAXX = urx; if (MAXY < ury) MAXY = ury; } } } // cout << "MINMAX " << MINX << " " << MINY << " " << MAXX << " " << MAXY << endl; } void find_jumps() { for (list::iterator sheet_it = SHEET.begin(); sheet_it != SHEET.end(); sheet_it++) { sheet_it->jumpW = 0; sheet_it->jumpE = 0; sheet_it->jumpN = 0; sheet_it->jumpS = 0; list::iterator I; int jump; string W = xyz2str(sheet_it->layer,sheet_it->namex-1,sheet_it->namey); string E = xyz2str(sheet_it->layer,sheet_it->namex+1,sheet_it->namey); string N = xyz2str(sheet_it->layer,sheet_it->namex,sheet_it->namey+1); string S = xyz2str(sheet_it->layer,sheet_it->namex,sheet_it->namey-1); if (SHEET_JMP.count(W) > 0) { I = SHEET_JMP.find(W)->second; sheet_it->jumpW = I->id; I->dest = true; } if (SHEET_JMP.count(E) > 0) { I = SHEET_JMP.find(E)->second; sheet_it->jumpE = I->id; I->dest = true; } if (SHEET_JMP.count(N) > 0) { I = SHEET_JMP.find(N)->second; sheet_it->jumpN = I->id; I->dest = true; } if (SHEET_JMP.count(S) > 0) { I = SHEET_JMP.find(S)->second; sheet_it->jumpS = I->id; I->dest = true; } map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); if (!lay_it->second.U.empty()) { for (set::iterator l_it = lay_it->second.U.begin(); l_it != lay_it->second.U.end(); l_it++) { map::iterator alt_lay_it = LAYERHASH.find(*l_it); if (alt_lay_it == LAYERHASH.end()) therror(("This can't happen!")); jump = (alt_lay_it->second.Z == 0) ? *l_it : alt_lay_it->second.AltJump; string U = xyz2str(jump,sheet_it->namex,sheet_it->namey); if (SHEET_JMP.count(U) > 0) { I = SHEET_JMP.find(U)->second; sheet_it->jumpU.insert(jump); I->dest = true; } } } if (!lay_it->second.D.empty()) { for (set::iterator l_it = lay_it->second.D.begin(); l_it != lay_it->second.D.end(); l_it++) { map::iterator alt_lay_it = LAYERHASH.find(*l_it); if (alt_lay_it == LAYERHASH.end()) therror(("This can't happen!")); jump = (alt_lay_it->second.Z == 0) ? *l_it : alt_lay_it->second.AltJump; string D = xyz2str(jump,sheet_it->namex,sheet_it->namey); if (SHEET_JMP.count(D) > 0) { I = SHEET_JMP.find(D)->second; sheet_it->jumpD.insert(jump); I->dest = true; } } } } } string grid_name(string s, int offset) { unsigned char c; bool is_num = true; for (unsigned i=0; i= 65 && c <= 90 && (c+offset) >= 65 && (c+offset) <= 90) || (c >= 97 && c <=122 && (c+offset) >= 97 && (c+offset) <=122)) { char buf[10]; sprintf(buf,"%c",c+offset); return (string) buf; } else return "?"; } else return "?"; } set find_excluded_pages(string s) { set excl; int i,j; char c; // istrstream S(s.c_str()); istringstream S(s); c = ','; while (S >> i) { S >> c; if (c == ',') excl.insert(i); else if (c == '-') { S >> j; for (int k=i; k<=j; k++) excl.insert(k); S >> c; // punctuation character } else therror(("Invalid character in the exclusion list!")); } //cout << endl; //cout << "Excl.list: " << s << endl; //cout << "Excl. set: "; //for (set::iterator I = excl.begin(); I != excl.end(); I++) // cout << *I << " "; //cout << endl; return excl; } void sort_sheets() { int pageid = 1 + LAYOUT.own_pages, tmppagenum = 1; set excluded; bool wait_for_title; if (LAYOUT.excl_pages) excluded = find_excluded_pages(LAYOUT.excl_list); for (map::reverse_iterator I = LAYERHASH.rbegin(); I != LAYERHASH.rend(); I++) { // I->second.minid = pageid; I->second.bookmark = false; wait_for_title = (I->second.T !="" && LAYOUT.title_pages) ? true : false; for (int j = I->second.maxy; j >= I->second.miny; j--) { for (int i = I->second.minx; i <= I->second.maxx; i++) { list::iterator sheet_it = find_sheet(I->first,i,j); if (sheet_it != SHEET.end()) { // if (wait_for_title && excluded.count(tmppagenum) > 0) { // wait_for_title = false; // } if (excluded.count(tmppagenum) == 0) { sheet_it->dest = false; sheet_it->title_before = false; sheet_it->bookmark = false; if (!I->second.bookmark) { sheet_it->bookmark = true; sheet_it->dest = true; I->second.bookmark = true; } if (wait_for_title) { sheet_it->title_before = true; pageid++; wait_for_title = false; } sheet_it->id = pageid; pageid++; } else { SHEET.erase(sheet_it); SHEET_JMP.erase(xyz2str(sheet_it->layer, sheet_it->namex,sheet_it->namey)); //cout << "Should erase sheet " << tmppagenum << endl; } tmppagenum++; } } } // I->second.maxid = pageid - 1; } SHEET.sort(); //cout << "sheets: " << SHEET.size() << endl; } void print_preview(int up,ofstream& PAGEDEF,double HSHIFT,double VSHIFT, list::iterator sheet_it = list::iterator()) { set used_layers; set used_scraps; double xc = 0, yc = 0; if (LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\setbox\\xxx=\\hbox to \\adjustedHS{%" << endl; else PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; } // PAGEDEF << (up ? "\\PL{q .1 w}%" : "\\PL{q .8 g}%") << endl; if (up) { PAGEDEF << "\\PL{q .1 w " << LAYOUT.preview_above_r << " " << LAYOUT.preview_above_g << " " << LAYOUT.preview_above_b << " " << " RG}%" << endl; } else { PAGEDEF << "\\PL{q " << LAYOUT.preview_below_r << " " << LAYOUT.preview_below_g << " " << LAYOUT.preview_below_b << " " << " rg}%" << endl; } if (mode == ATLAS) { map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror(("This can't happen!")); used_layers = (up ? lay_it->second.U : lay_it->second.D); } else { used_layers = (up ? MAP_PREVIEW_UP : MAP_PREVIEW_DOWN); } for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { if (mode == ATLAS) { map >::iterator pr_it = preview.find(xyz2str(*I,sheet_it->namex,sheet_it->namey)); if (pr_it != preview.end()) used_scraps = pr_it->second; } else { map::iterator J = LAYERHASH.find(*I); if (J == LAYERHASH.end()) therror(("This can't happen!")); used_scraps = J->second.allscraps; } if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { if (up) { if (K->B != "" && K->sect == 0) { xc = K->B1; yc = K->B2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << (mode == MAP && LAYOUT.OCG ? "\\PBcorr{" : "\\PB{") << xc << "}{" << yc << "}{\\" << tex_Xname("B"+(K->name)) << "}%" << endl; } } else { if (K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << (mode == MAP && LAYOUT.OCG ? "\\PBcorr{" : "\\PB{") << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; } } } } } } PAGEDEF << "\\PL{Q}%" << endl; if (LAYOUT.OCG) { if (mode==MAP) PAGEDEF << "\\hfill}\\ht\\xxx=\\adjustedVS\\dp\\xxx=0bp" << endl; else PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{/OC \\the\\" << (up ? "ocU" : "ocD") << "\\space 0 R} "; if (mode == MAP) PAGEDEF << "\\xxx\\PB{-\\adjustedX}{-\\adjustedY}{\\pdflastxform}%" << endl; else PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } void compose_page(list::iterator sheet_it, ofstream& PAGE) { map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); if (sheet_it->title_before) { PAGE << "\\TITLE{" << utf2tex(lay_it->second.T) << "}\n"; } PAGE << "%\n% Page: " << u2str(sheet_it->id) << endl << "%\n"; if (sheet_it->dest) PAGE << "\\pdfdest name {" << u2str(sheet_it->id) << "} xyz" << endl; if (sheet_it->bookmark) { PAGE << "\\pdfoutline goto name {" << u2str(sheet_it->id) << "} count 0 {\\ne\\376\\ne\\377" << utf2texoctal(lay_it->second.N) << "}%" << endl; } PAGE.precision(6); PAGE << "\\setbox\\mapbox=\\hbox to " << HS << "bp{%" << endl; PAGE.precision(2); PAGE << "\\rlap{\\pdfrefxform\\" << tex_Sname(u2str(sheet_it->id)) << "}%" << endl; // map hyperlinks int lw = 25; double lhy = VS - 2*lw; double lhx = HS - 2*lw; if (sheet_it->jumpW) PAGE << "\\flatlink{0}{" << lw << "}{" << lw << "}{" << lhy << "}{" << u2str(sheet_it->jumpW) << "}%\n"; if (sheet_it->jumpE) PAGE << "\\flatlink{" << HS-lw << "}{" << lw << "}{" << lw << "}{" << lhy << "}{" << u2str(sheet_it->jumpE) << "}%\n"; if (sheet_it->jumpN) PAGE << "\\flatlink{" << lw << "}{" << VS-lw << "}{" << lhx << "}{" << lw << "}{" << u2str(sheet_it->jumpN)<< "}%\n"; if (sheet_it->jumpS) PAGE << "\\flatlink{" << lw << "}{0}{" << lhx << "}{" << lw << "}{" << u2str(sheet_it->jumpS) << "}%\n"; PAGE.precision(6); PAGE << "\\hfil}\\ht\\mapbox=" << VS << "bp%" << endl; PAGE.precision(2); PAGE << "\\pagelabel={" << grid_name(LAYOUT.labely,-sheet_it->namey) << " " << grid_name(LAYOUT.labelx,sheet_it->namex) << "}%" << endl; if (LAYOUT.page_numbering) PAGE << "\\pagenum=" << sheet_it->id << "%" << endl; // up and down links if (!sheet_it->jumpU.empty()) { PAGE << "\\pointerU={%\n"; for (set::reverse_iterator l_it = sheet_it->jumpU.rbegin(); l_it != sheet_it->jumpU.rend(); l_it++) { list::iterator s_it = find_sheet(*l_it,sheet_it->namex,sheet_it->namey); if (s_it == SHEET.end()) therror (("This can't happen!")); PAGE << utf2tex(LAYERHASH.find(*l_it)->second.N) << "|" << s_it->id << "|" << u2str(s_it->id) << "||%" << endl; } PAGE << "}%\n"; } else PAGE << "\\pointerU={notdef}%" << endl; if (!sheet_it->jumpD.empty()) { PAGE << "\\pointerD={%\n"; for (set::reverse_iterator l_it = sheet_it->jumpD.rbegin(); l_it != sheet_it->jumpD.rend(); l_it++) { list::iterator s_it = find_sheet(*l_it,sheet_it->namex,sheet_it->namey); if (s_it == SHEET.end()) therror (("This can't happen!")); PAGE << utf2tex(LAYERHASH.find(*l_it)->second.N) << "|" << s_it->id << "|" << u2str(s_it->id) << "||%" << endl; } PAGE << "}%\n"; } else PAGE << "\\pointerD={notdef}%" << endl; PAGE << "\\pagename={" << utf2tex(lay_it->second.N) << "}%" << endl; // pointers to neighbouring pages if (LAYOUT.page_numbering) { if (sheet_it->jumpW) PAGE << "\\pointerW=" << sheet_it->jumpW << "%\n"; else PAGE << "\\pointerW=0%\n"; if (sheet_it->jumpE) PAGE << "\\pointerE=" << sheet_it->jumpE << "%\n"; else PAGE << "\\pointerE=0%\n"; if (sheet_it->jumpN) PAGE << "\\pointerN=" << sheet_it->jumpN << "%\n"; else PAGE << "\\pointerN=0%\n"; if (sheet_it->jumpS) PAGE << "\\pointerS=" << sheet_it->jumpS << "%\n"; else PAGE << "\\pointerS=0%\n"; } PAGE << "\\setbox\\navbox=\\hbox{%" << endl; // navigator hyperlinks int nav_x = 2*LAYOUT.nav_right+1; int nav_y = 2*LAYOUT.nav_up+1; double HSN = LAYOUT.hsize / LAYOUT.nav_factor * nav_x; double VSN = LAYOUT.vsize / LAYOUT.nav_factor * nav_y; for (int i=-LAYOUT.nav_right; i <= LAYOUT.nav_right; i++) { for (int j=-LAYOUT.nav_up; j <= LAYOUT.nav_up; j++) { if (i!=0 || j!=0) { string tmp = xyz2str(sheet_it->layer, sheet_it->namex+i,sheet_it->namey+j); if (SHEET_JMP.count(tmp) > 0) { PAGE << "\\flatlink{" << HSN*(i+LAYOUT.nav_right)/nav_x << "}{" << VSN*(j+LAYOUT.nav_up)/nav_y << "}{" << HSN/nav_x << "}{" << VSN/nav_y << "}{" << u2str(SHEET_JMP.find(tmp)->second->id) << "}%\n"; } } } } PAGE << "\\pdfrefxform\\" << tex_Nname(u2str(sheet_it->id)) << "}%" << endl; PAGE << "\\dopage\\eject" << endl; } void print_page_bg(ofstream& PAGEDEF) { /* if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { */ if (! LAYOUT.transparent_map_bg) { // bg rectangle PAGEDEF << "\\PL{q " << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << " rg 0 0 " << HS << " " << VS << " re f Q}%" << endl; } } void print_page_bg_scraps(int layer, ofstream& PAGEDEF, list::iterator sheet_it = list::iterator()) { // if transparency is used, all scraps should be filled white // on the coloured background, just before preview_down is displayed // and transparency is turned on /* if (LAYOUT.transparency && ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1))) { */ // even if bg is white, pdf might // be included in other pdf with // non-white bg; we should avoid // overoptimization if (LAYOUT.transparency ) { double HSHIFT=0, VSHIFT=0, xc = 0, yc = 0; map < int,set > LEVEL; set used_scraps; if (mode == ATLAS) { HSHIFT = LAYOUT.hsize * sheet_it->namex + LAYOUT.hoffset - LAYOUT.overlap; VSHIFT = LAYOUT.vsize * sheet_it->namey + LAYOUT.voffset - LAYOUT.overlap; LEVEL = sheet_it->scraps; } else { HSHIFT = MINX; VSHIFT = MINY; LEVEL = ((*(LAYERHASH.find(layer))).second).scraps; } PAGEDEF << "\\PL{q 1 g}%" << endl; // white background of the scrap for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; // scrap backgrounds for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->I != "") { xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; } } } PAGEDEF << "\\PL{Q}%" << endl; // end of white color for filled bg } } void print_surface_bitmaps (ofstream &PAGEDEF, double shiftx, double shifty) { if (LAYOUT.transparency || LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\setbox\\xxx=\\hbox to\\adjustedHS{%" << endl; else PAGEDEF << "\\setbox\\xxx=\\hbox to" << HS << "bp{%" << endl; PAGEDEF << "\\PL{/GS2 gs}%" << endl; } int i = 1; PAGEDEF.precision(6); for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { if (mode == MAP && (LAYOUT.transparency || LAYOUT.OCG)) { PAGEDEF << "\\bitmapcorr{"; } else { PAGEDEF << "\\bitmap{"; } PAGEDEF << I->xx << "}{" << I->yx << "}{" << I->xy << "}{" << I->yy << "}{" << I->dx - shiftx << "}{" << I->dy - shifty << "}{\\" << tex_BMPname(u2str(i)) << "}%" << endl; i++; }; PAGEDEF.precision(2); if (LAYOUT.transparency || LAYOUT.OCG) { if (mode == MAP) PAGEDEF << "\\hfill}\\ht\\xxx=\\adjustedVS\\dp\\xxx=0bp" << endl; else PAGEDEF << "\\hfill}\\ht\\xxx="<< VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{"; if (LAYOUT.transparency) PAGEDEF << "/Group \\the\\attrid\\space 0 R "; if (LAYOUT.OCG) PAGEDEF << "/OC \\the\\ocSUR\\space 0 R "; PAGEDEF << "} "; PAGEDEF << "resources{/ExtGState \\the\\resid\\space 0 R}"; if (mode == MAP) PAGEDEF << "\\xxx\\PB{-\\adjustedX}{-\\adjustedY}{\\pdflastxform}%" << endl; else PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } paired rotatedaround(paired x,paired o, double th) { double theta = -th * 3.14159265358979 / 180; paired z, tmp; tmp.x = x.x - o.x; tmp.y = x.y - o.y; z.x = tmp.x * cos(theta) - tmp.y * sin(theta) + o.x; z.y = tmp.x * sin(theta) + tmp.y * cos(theta) + o.y; return z; } void print_grid_pdf(ofstream& PAGEDEF, double LLX, double LLY, double origMINX,double origMINY,double origMAXX, double origMAXY) { if (LAYOUT.grid == 0) return; PAGEDEF << "\\PL{q}"; paired ll, ur, lr, ul, llrot, urrot, ulrot, lrrot, llnew, urnew, origin; /* ll.x = LLX; ll.y = LLY; ur.x = LLX + HS; ur.y = LLY + VS; */ ll.x = origMINX; ll.y = origMINY; ur.x = origMAXX; ur.y = origMAXY; lr.x = ur.x; lr.y = ll.y; ul.x = ll.x; ul.y = ur.y; origin.x = LAYOUT.hgridorigin; origin.y = LAYOUT.vgridorigin; llrot = rotatedaround(ll,origin,-LAYOUT.gridrot); urrot = rotatedaround(ur,origin,-LAYOUT.gridrot); lrrot = rotatedaround(lr,origin,-LAYOUT.gridrot); ulrot = rotatedaround(ul,origin,-LAYOUT.gridrot); llnew.x = min(min(llrot.x, urrot.x), min(lrrot.x, ulrot.x)); llnew.y = min(min(llrot.y, urrot.y), min(lrrot.y, ulrot.y)); urnew.x = max(max(llrot.x, urrot.x), max(lrrot.x, ulrot.x)); urnew.y = max(max(llrot.y, urrot.y), max(lrrot.y, ulrot.y)); /* na odladenie PAGEDEF << "\\PL{ " << llrot.x-LLX << " " << llrot.y-LLY << " m " << lrrot.x-LLX << " " << lrrot.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << ulrot.x-LLX << " " << ulrot.y-LLY << " m " << urrot.x-LLX << " " << urrot.y-LLY << " l S}"; PAGEDEF << "\\PL{2 w " << ll.x-LLX << " " << ll.y-LLY << " m " << lr.x-LLX << " " << lr.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << ul.x-LLX << " " << ul.y-LLY << " m " << ur.x-LLX << " " << ur.y-LLY << " l S}"; PAGEDEF << "\\PL{10 w 1 J " << llnew.x-LLX << " " << llnew.y-LLY << " m " << llnew.x-LLX << " " << llnew.y-LLY << " l S}"; PAGEDEF << "\\PL{ " << urnew.x-LLX << " " << urnew.y-LLY << " m " << urnew.x-LLX << " " << urnew.y-LLY << " l S}"; PAGEDEF << "\\PL{20 w 1 J " << origin.x-LLX << " " << origin.y-LLY << " m " << origin.x-LLX << " " << origin.y-LLY << " l S}"; PAGEDEF << "\\PL{15 w 1 J " << rotatedaround(llnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(llnew,origin,LAYOUT.gridrot).y-LLY << " m " << rotatedaround(llnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(llnew,origin,LAYOUT.gridrot).y-LLY << " l S}"; PAGEDEF << "\\PL{ " << rotatedaround(urnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(urnew,origin,LAYOUT.gridrot).y-LLY << " m " << rotatedaround(urnew,origin,LAYOUT.gridrot).x-LLX << " " << rotatedaround(urnew,origin,LAYOUT.gridrot).y-LLY << " l S}"; */ //cout << "***" << LAYOUT.hgridsize << endl; double grid_init_x = LAYOUT.hgridsize * floor ((llnew.x-origin.x)/LAYOUT.hgridsize) + origin.x; double grid_init_y = LAYOUT.vgridsize * floor ((llnew.y-origin.y)/LAYOUT.vgridsize) + origin.y; double G_real_init_x = LAYOUT.XO + LAYOUT.XS * floor ((llnew.x-origin.x)/LAYOUT.hgridsize); double G_real_init_y = LAYOUT.YO + LAYOUT.YS * floor ((llnew.y-origin.y)/LAYOUT.vgridsize); double cosr = cos(-LAYOUT.gridrot * 3.14159265 / 180); double sinr = sin(-LAYOUT.gridrot * 3.14159265 / 180); int row, col, elem; if (LAYOUT.proj == 0) { paired out,tmp; int ii,jj; double i, j; for (i = grid_init_x, ii=0; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize, ii++) { for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; /* tmp.x = i; tmp.y = j; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q 5 w 1 J 0 0 1 RG " << out.x << " " << out.y << " m " << out.x << " " << out.y << " l S Q}"; */ tmp.x = i+LAYOUT.gridcell[elem].x; tmp.y = j+LAYOUT.gridcell[elem].y; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{" << cosr << " " << sinr << " " << -sinr << " " << cosr << " " << out.x << " " << out.y << " cm}"; PAGEDEF << "\\PB{0}{0}{\\" << tex_Wname("grid") << u2str(elem+1) << "}"; PAGEDEF << "\\PL{Q}%" << endl; if (LAYOUT.grid_coord_freq==2 || (LAYOUT.grid_coord_freq==1 && elem!=4)) { tmp.x = i; tmp.y = j; out = rotatedaround(tmp,origin,LAYOUT.gridrot); out.x -= LLX; out.y -= LLY; PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{" << cosr << " " << sinr << " " << -sinr << " " << cosr << " " << out.x << " " << out.y << " cm}"; PAGEDEF << "\\gridcoord{" << (row == 2 ? (col == 2 ? 1 : 3) : (col == 2 ? 7 : 9)) << "}{$(" << setprecision(0) << G_real_init_x+ii*LAYOUT.XS << "," << G_real_init_y+jj*LAYOUT.YS << setprecision(2) << ")$}%" << endl; PAGEDEF << "\\PL{Q}"; } } } } else { grid_init_x = LLX; int jj; double j; for (j = grid_init_y,jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize,jj++) { // PAGEDEF << "\\PL{q 3 w 0 0 1 RG 0 " << j-LLY << " m " << HS << " " << j-LLY << " l S Q}"; for (double i = grid_init_x; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; PAGEDEF << "\\PB{" << i-LLX+LAYOUT.gridcell[elem].x << "}{" << j-LLY+LAYOUT.gridcell[elem].y << "}{\\" << tex_Wname("grid") << u2str(elem+1) << "}%" << endl; if (col == 0 && LAYOUT.grid_coord_freq > 0) { PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{1 0 0 1 " << i-LLX << " " << j-LLY << " cm}"; PAGEDEF << "\\gridcoord{" << (row==2?3:9) << "}{$" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << setprecision(2)<< "$}"; PAGEDEF << "\\PL{Q}%" << endl; } if (col == 2 && LAYOUT.grid_coord_freq == 2) { PAGEDEF << "\\PL{q}"; PAGEDEF << "\\PL{1 0 0 1 " << i-LLX << " " << j-LLY << " cm}"; PAGEDEF << "\\gridcoord{" << (row==2?1:7) << "}{$" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << setprecision(2)<< "$}"; PAGEDEF << "\\PL{Q}%" << endl; } } } } PAGEDEF << "\\PL{Q}%" << endl; } void print_map(int layer, ofstream& PAGEDEF, list::iterator sheet_it = list::iterator()){ double HSHIFT=0, VSHIFT=0, xc = 0, yc = 0; map < int,set > LEVEL; set page_text_scraps,used_scraps; string buffer; deque thstack; if (mode == ATLAS) { HSHIFT = LAYOUT.hsize * sheet_it->namex + LAYOUT.hoffset - LAYOUT.overlap; VSHIFT = LAYOUT.vsize * sheet_it->namey + LAYOUT.voffset - LAYOUT.overlap; LEVEL = sheet_it->scraps; } else { HSHIFT = MINX; VSHIFT = MINY; LEVEL = ((*(LAYERHASH.find(layer))).second).scraps; } for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->P != "") page_text_scraps.insert(K->name); } } if (mode == ATLAS) { print_page_bg(PAGEDEF); if (LAYOUT.surface == 1) print_surface_bitmaps(PAGEDEF,HSHIFT,VSHIFT); print_page_bg_scraps(layer, PAGEDEF, sheet_it); if (LAYOUT.grid == 1) print_grid_pdf(PAGEDEF,HSHIFT,VSHIFT,HSHIFT,VSHIFT,HSHIFT+HS,VSHIFT+VS); } if (mode == ATLAS && !LAYERHASH.find(layer)->second.D.empty()) { print_preview(0,PAGEDEF,HSHIFT,VSHIFT,sheet_it); } for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = (*I).second; if (LAYOUT.transparency) { // transparency group beginning PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; PAGEDEF << "\\PL{/GS1 gs}%" << endl; // beginning of transparency } // PAGEDEF << "\\PL{q 1 g}%" << endl; // white background of the scrap for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->I != "") { PAGEDEF << "\\PL{q "; if (K->r < 0 || K->g < 0 || K->b < 0) { PAGEDEF << LAYOUT.foreground_r << " " << // background of the scrap LAYOUT.foreground_g << " " << LAYOUT.foreground_b << " rg}%" << endl; } else { PAGEDEF << K->r << " " << // background of the scrap K->g << " " << K->b << " rg}%" << endl; } xc = K->I1; yc = K->I2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; PAGEDEF << "\\PL{Q}%" << endl; // end of white color for filled bg } } // sketches PAGEDEF.precision(6); for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { for (list::iterator I_sk = K->SKETCHLIST.begin(); I_sk != K->SKETCHLIST.end(); I_sk++) { PAGEDEF << "\\pdfximage{" << (string) I_sk->filename << "}%" << endl; PAGEDEF << "\\bitmap{" << I_sk->xx << "}{" << I_sk->yx << "}{" << I_sk->xy << "}{" << I_sk->yy << "}{" << I_sk->dx - HSHIFT << "}{" << I_sk->dy - VSHIFT << "}{\\pdflastximage}%" << endl; }; }; } PAGEDEF.precision(2); // end of sketches for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->G != "") { xc = K->G1; yc = K->G2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("G"+(K->name)) << "}%" << endl; }; } if (LAYOUT.transparency) { PAGEDEF << "\\PL{/GS0 gs}%" << endl; // end of default transparency } PAGEDEF << "\\PL{q 0 0 m " << HS << " 0 l " << HS << " " << VS << " l 0 " << VS << " l 0 0 l}"; // beginning of the text clipping path definition for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (page_text_scraps.count(K->name) > 0 && K->P != "" && K->level >= (I->first)) { xc = HSHIFT - K->S1; yc = VSHIFT - K->S2; ifstream G((K->P).c_str()); if(!G) therror((IOerr(K->P))); while(G >> buffer) { if ((buffer == "m") || (buffer == "l") || (buffer == "c")) { PAGEDEF << "\\PL{"; for(unsigned i=0; i::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->F != "") { xc = K->F1; yc = K->F2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname(K->name) << "}%" << endl; }; } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->E != "") { xc = K->E1; yc = K->E2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("E"+(K->name)) << "}%" << endl; }; } PAGEDEF << "\\PL{Q}"; // end of clipping by text for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->X != "") { xc = K->X1; yc = K->X2; xc -= HSHIFT; yc -= VSHIFT; PAGEDEF << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("X"+(K->name)) << "}%" << endl; }; } if (LAYOUT.transparency) { PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; PAGEDEF << "attr{/Group \\the\\attrid\\space 0 R} "; PAGEDEF << "resources{/ExtGState \\the\\resid\\space 0 R}"; PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } if (mode == ATLAS && !LAYERHASH.find(layer)->second.U.empty()) { print_preview(1,PAGEDEF,HSHIFT,VSHIFT,sheet_it); } if (mode == ATLAS) { if (LAYOUT.surface == 2) print_surface_bitmaps(PAGEDEF,HSHIFT,VSHIFT); if (LAYOUT.grid == 2) print_grid_pdf(PAGEDEF,HSHIFT,VSHIFT,HSHIFT,VSHIFT,HSHIFT+HS,VSHIFT+VS); } } void print_navigator(ofstream& P, list::iterator sheet_it) { set NAV_SCRAPS; set used_layers; set used_scraps; int nav_x = 2*LAYOUT.nav_right+1; int nav_y = 2*LAYOUT.nav_up+1; double HSN = LAYOUT.hsize / LAYOUT.nav_factor * nav_x; double VSN = LAYOUT.vsize / LAYOUT.nav_factor * nav_y; double xc = 0, yc = 0; P << "%\n\\setbox\\xxx=\\hbox to " << HSN << "bp{%\n\\PL{q "; P.precision(6); P << 1/LAYOUT.nav_factor << " 0 0 " << 1/LAYOUT.nav_factor << " 0 0 cm}%\n"; P.precision(2); map::iterator lay_it = LAYERHASH.find(sheet_it->layer); if (lay_it == LAYERHASH.end()) therror (("This can't happen!")); NAV_SCRAPS.clear(); if (!lay_it->second.D.empty()) { P << "\\PL{.8 g}%\n"; used_layers = lay_it->second.D; for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(*I,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } } } NAV_SCRAPS.clear(); P << "\\PL{0 g}%\n"; for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(sheet_it->layer,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->I != "" && K->sect == 0) { xc = K->I1; yc = K->I2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("I"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } NAV_SCRAPS.clear(); if (!lay_it->second.U.empty()) { P << "\\PL{0.2 w}%\n"; used_layers = lay_it->second.U; for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { for (int i = sheet_it->namex-LAYOUT.nav_right; i <= sheet_it->namex+LAYOUT.nav_right; i++) { for (int j = sheet_it->namey-LAYOUT.nav_up; j <= sheet_it->namey+LAYOUT.nav_up; j++) { used_scraps.clear(); map >::iterator pr_it = preview.find(xyz2str(*I,i,j)); if (pr_it != preview.end()) used_scraps = pr_it->second; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && NAV_SCRAPS.count(K->name) == 0 && K->B != "" && K->sect == 0) { xc = K->B1; yc = K->B2; xc -= LAYOUT.hsize * (sheet_it->namex - LAYOUT.nav_right) + LAYOUT.hoffset; yc -= LAYOUT.vsize * (sheet_it->namey - LAYOUT.nav_up) + LAYOUT.voffset; P << "\\PB{" << xc << "}{" << yc << "}{\\" << tex_Xname("B"+(K->name)) << "}%" << endl; NAV_SCRAPS.insert(K->name); } } } } } } } // navigator grid P << "\\PL{Q}" << "\\PL{0 0 " << HSN << " " << VSN << " re S 0.1 w}"; for (int i = 1; i < nav_x; i++) P << "\\PL{" << HSN*i/nav_x << " 0 m " << HSN*i/nav_x << " " << VSN << " l S}%\n"; for (int i = 1; i < nav_y; i++) P << "\\PL{0 " << VSN*i/nav_y << " m " << HSN << " " << VSN*i/nav_y << " l S}%\n"; P << "\\PL{0.4 w " << HSN*LAYOUT.nav_right/nav_x << " " << VSN*LAYOUT.nav_up/nav_y << " " << HSN/nav_x << " " << VSN/nav_y << " " << " re S}"; // XObject definition P << "\\hfill}\\ht\\xxx=" << VSN << "bp\\dp\\xxx=0bp\n"; P << "\\immediate\\pdfxform\\xxx\\newcount\\" << tex_Nname(u2str(sheet_it->id)) << " \\" << tex_Nname(u2str(sheet_it->id)) << "=\\pdflastxform" << endl; } void print_margins(ofstream& PAGEDEF) { PAGEDEF << "\\PL{q}"; // PAGEDEF << "\\PL{3 w 0 0 " << HS << " " << VS << " re S}"; if (LAYOUT.overlap > 0) { double i = LAYOUT.hsize + LAYOUT.overlap; double j = LAYOUT.vsize + LAYOUT.overlap; PAGEDEF << "\\PL{0.5 w}"; PAGEDEF << "\\PL{0 " << LAYOUT.overlap << " m " << HS << " " << LAYOUT.overlap << " l S}"; PAGEDEF << "\\PL{0 " << j << " m " << HS << " " << j << " l S}"; PAGEDEF << "\\PL{" << LAYOUT.overlap << " 0 m " << LAYOUT.overlap << " " << VS << " l S}"; PAGEDEF << "\\PL{" << i << " 0 m " << i << " " << VS << " l S}"; } PAGEDEF << "\\PL{Q}%" << endl; } void build_pages() { ofstream PAGEDEF("th_pagedef.tex"); if(!PAGEDEF) therror(("Can't write file th_pagedef.tex")); PAGEDEF.setf(ios::fixed, ios::floatfield); PAGEDEF.precision(2); ofstream PAGE("th_pages.tex"); if(!PAGE) therror(("Can't write file th_pages.tex")); PAGE.setf(ios::fixed, ios::floatfield); PAGE.precision(2); ofstream PDFRES("th_resources.tex"); if(!PDFRES) therror(("Can't write file th_resources.tex")); if (LAYOUT.transparency || LAYOUT.OCG) { PDFRES << "\\ifnum\\pdftexversion<110\\pdfcatalog{ /Version /" << (LAYOUT.OCG ? "1.5" : "1.4") << " }" << (LAYOUT.OCG ? "\\else\\pdfoptionpdfminorversion=5" : "") << "\\fi" << endl; } PDFRES << "\\pdfinfo{/Creator (Therion " << THVERSION << ", MetaPost, TeX)}%" << endl; PDFRES << "\\pdfcatalog{ /ViewerPreferences << /DisplayDocTitle true /PrintScaling /None >> }" << endl; if(ENC_NEW.NFSS != 0) PDFRES << "\\input thfonts.map" << endl; PDFRES << "\\ifnum\\pdftexversion>139" << endl; PDFRES << " \\newread\\testin" << endl; PDFRES << " \\openin\\testin=glyphtounicode.tex" << endl; PDFRES << " \\ifeof\\testin\\message{No glyph to unicode mapping found!}\\else\\closein\\testin\\input glyphtounicode.tex\\pdfgentounicode=1\\fi" << endl; PDFRES << "\\fi" << endl; if (LAYOUT.transparency) { PDFRES << "\\opacity{" << LAYOUT.opacity << "}%" << endl; PDFRES << "\\surfaceopacity{" << LAYOUT.surface_opacity << "}%" << endl; PDFRES << "\\immediate\\pdfobj{ << /GS0 " << "<< /Type /ExtGState /ca 1 /BM /Normal >> " << " /GS1 << /Type /ExtGState /ca \\the\\opacity\\space /BM /Normal >> " << " /GS2 << /Type /ExtGState /ca \\the\\surfaceopacity\\space /BM /Normal >> >> }" << endl; PDFRES << "\\newcount\\resid\\resid=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /S /Transparency /K true >> }" << endl; PDFRES << "\\newcount\\attrid\\attrid=\\pdflastobj" << endl; } else { PDFRES << "\\immediate\\pdfobj{ << /GS0 " << "<< /Type /ExtGState >> " << " /GS1 << /Type /ExtGState >> " << " /GS2 << /Type /ExtGState >> >> }" << endl; PDFRES << "\\newcount\\resid\\resid=\\pdflastobj" << endl; } if (LAYOUT.OCG) { PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocU\\ocU=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocD\\ocD=\\pdflastobj" << endl; PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name >> }" << endl; PDFRES << "\\newcount\\ocSUR\\ocSUR=\\pdflastobj" << endl; if (mode == MAP) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { PDFRES << "\\immediate\\pdfobj{ << /Type /OCG /Name second.N) << "> >> }" << endl; PDFRES << "\\newcount\\oc" << u2str(I->first) << "\\oc" << u2str(I->first) << "=\\pdflastobj" << endl; } } } PDFRES << "\\pdfcatalog{ /OCProperties <<" << endl << " /OCGs ["; if (LAYOUT.surface == 2) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "\\the\\ocU\\space0 R "; if (mode == MAP) { for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) PDFRES << "\\the\\oc" << u2str(I->first) << "\\space 0 R "; } } PDFRES << "\\the\\ocD\\space0 R "; if (LAYOUT.surface == 1) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "]" << endl << " /D << /Name (Map layers) /ListMode /VisiblePages" << " /Order ["; if (LAYOUT.surface == 2) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "\\the\\ocU\\space0 R "; if (mode == MAP) { for (map::reverse_iterator I = LAYERHASH.rbegin(); I != LAYERHASH.rend(); I++) { if (I->second.Z == 0) PDFRES << "\\the\\oc" << u2str(I->first) << "\\space 0 R "; } } PDFRES << "\\the\\ocD\\space0 R "; if (LAYOUT.surface == 1) PDFRES << "\\the\\ocSUR\\space0 R "; PDFRES << "] >>" << endl << ">> }" << endl; } if (LAYOUT.doc_author != "") PDFRES << "\\pdfinfo{ /Author }" << endl; if (LAYOUT.doc_subject != "") PDFRES << "\\pdfinfo{ /Subject }" << endl; if (LAYOUT.doc_keywords != "") PDFRES << "\\pdfinfo{ /Keywords }" << endl; if (LAYOUT.doc_title != "") { PDFRES << "\\pdfinfo{ /Title }" << endl; // PDFRES << "\\legendcavename={" << utf2tex(LAYOUT.doc_title) << "}" << endl; } // if (LAYOUT.doc_comment != "") { // PDFRES << "\\legendcomment={" << utf2tex(LAYOUT.doc_comment) << "}" << endl; // } if (!LEGENDLIST.empty()) { // zmenit test na LAYOUT.legend??? PDFRES << "\\legendtrue" << endl; } else { PDFRES << "\\legendfalse" << endl; } if (!COLORLEGENDLIST.empty()) { PDFRES << "\\colorlegendtrue" << endl; } else { PDFRES << "\\colorlegendfalse" << endl; } PDFRES << "\\legendwidth=" << LAYOUT.legend_width << "bp" << endl; if (LAYOUT.map_header_bg) { PDFRES << "\\bgcolor={" << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << "}" << endl; PDFRES << "\\legendbgfilltrue" << endl; } else PDFRES << "\\legendbgfillfalse" << endl; PDFRES.close(); // jednorazove vlozenie povrchovych obrazkov int i = 1; for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { PAGEDEF << "\\pdfximage{" << (string) I->filename << "}%" << endl; PAGEDEF << "\\newcount\\" << tex_BMPname(u2str(i)) << "\\" << tex_BMPname(u2str(i)) << "=\\pdflastximage%" << endl; i++; } double origMINX=0, origMINY=0, origMAXX=0, origMAXY=0; if (mode == ATLAS) { HS = LAYOUT.hsize + 2*LAYOUT.overlap; VS = LAYOUT.vsize + 2*LAYOUT.overlap; if (LAYOUT.page_numbering) { PAGE << "\\pagenumberingtrue" << endl; } } else { if (LAYOUT.proj > 0 && LAYOUT.grid > 0) { // natiahnutie vysky aby sa zobrazil grid pod aj nad jaskynou MINY = LAYOUT.vgridsize * floor ((MINY-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; MAXY = LAYOUT.vgridsize * ceil ((MAXY-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; } origMINX = MINX; origMINY = MINY; origMAXX = MAXX; origMAXY = MAXY; if (LAYOUT.map_grid) { // origMINX = MINX; origMINY = MINY; origMAXX = MAXX; origMAXY = MAXY; MINX = LAYOUT.hsize * floor (MINX/LAYOUT.hsize); MINY = LAYOUT.vsize * floor (MINY/LAYOUT.vsize); MAXX = LAYOUT.hsize * ceil (MAXX/LAYOUT.hsize); MAXY = LAYOUT.vsize * ceil (MAXY/LAYOUT.vsize); } HS = MAXX - MINX; VS = MAXY - MINY; if (HS>14000 || VS>14000) therror(("Map is too large for PDF format. Try smaller scale!")); PAGEDEF << "\\eject" << endl; PAGEDEF << "\\hsize=" << HS << "bp" << endl; PAGEDEF << "\\vsize=" << VS << "bp" << endl; PAGEDEF << "\\pdfpagewidth=\\hsize\\advance\\pdfpagewidth by " << 2*LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\pdfpageheight=\\vsize\\advance\\pdfpageheight by " << 2*LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\hoffset=0cm" << endl; PAGEDEF << "\\voffset=0cm" << endl; PAGEDEF << "\\pdfhorigin=" << LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\pdfvorigin=" << LAYOUT.overlap << "bp" << endl; } if (mode == ATLAS) { PAGEDEF << "\\newdimen\\overlap\\overlap=" << LAYOUT.overlap << "bp" << endl; for (list::iterator I = SHEET.begin(); I != SHEET.end(); I++) { // cout << "ID: " << I->id << " Layer: " << I->layer << " X: " << // I->namex << " Y: " << I->namey << endl; // cout << "*" << flush; PAGEDEF << "\\setbox\\xxx=\\hbox to "<< HS << "bp{%" << endl; print_map(I->layer, PAGEDEF, I); print_margins(PAGEDEF); PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform"; PAGEDEF << "\\xxx\\newcount\\" << tex_Sname(u2str(I->id)) << " \\" << tex_Sname(u2str(I->id)) << "=\\pdflastxform" << endl; print_navigator(PAGEDEF,I); compose_page(I, PAGE); } } else { PAGEDEF << "\\newdimen\\x \\x=" << HS << "bp" << endl; PAGEDEF << "\\newdimen\\y \\y=" << VS << "bp" << endl; PAGEDEF << "\\setbox\\xxx=\\hbox to \\x{\\maplayout\\hfill}%\\dp\\xxx=0bp" << endl; PAGEDEF << "\\advance\\x by \\extraE" << endl; PAGEDEF << "\\advance\\x by \\extraW" << endl; PAGEDEF << "\\advance\\y by \\extraN" << endl; PAGEDEF << "\\advance\\y by \\extraS" << endl; PAGEDEF << "\\newbox\\xxxx\\setbox\\xxxx=\\hbox to \\x{\\kern\\extraW\\raise\\extraS\\box\\xxx\\hss}%\\dp\\xxx=0bp" << endl; PAGEDEF << "\\wd\\xxxx=\\x" << endl; PAGEDEF << "\\ht\\xxxx=\\y" << endl; PAGEDEF << "\\immediate\\pdfxform\\xxxx" << endl; PAGEDEF << "\\newcount\\THmaplegend\\THmaplegend=\\pdflastxform" << endl; PAGEDEF << "\\advance\\pdfhorigin by \\extraW" << endl; PAGEDEF << "\\advance\\pdfvorigin by \\extraN" << endl; PAGEDEF << "\\advance\\pdfpagewidth by \\extraW" << endl; PAGEDEF << "\\advance\\pdfpagewidth by \\extraE" << endl; PAGEDEF << "\\advance\\pdfpageheight by \\extraN" << endl; PAGEDEF << "\\advance\\pdfpageheight by \\extraS" << endl; PAGEDEF << "\\newdimen\\overlap\\overlap=" << LAYOUT.overlap << "bp" << endl; PAGEDEF << "\\dimtobp{\\the\\pdfpagewidth}\\edef\\xsize{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\the\\pdfpageheight}\\edef\\ysize{\\tmpdef}%" << endl; PAGEDEF << "\\advance\\y by -\\extraN\\advance\\y by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\the\\y}\\edef\\nsize{\\tmpdef}%" << endl; PAGEDEF << "\\x=\\extraW\\advance\\x by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\the\\x}\\edef\\wsize{\\tmpdef}%" << endl; PAGEDEF << "\\newdimen\\overlaphalf\\overlaphalf=\\overlap\\divide\\overlaphalf by 2%" << endl; PAGEDEF << "\\newdimen\\framew\\framew=\\pdfpagewidth\\advance\\framew by -\\overlap" << endl; PAGEDEF << "\\newdimen\\frameh\\frameh=\\pdfpageheight\\advance\\frameh by -\\overlap" << endl; PAGEDEF << "\\newdimen\\framex\\framex=\\extraW\\advance\\framex by \\overlaphalf" << endl; PAGEDEF << "\\newdimen\\framey\\framey=\\extraN\\advance\\framey by \\overlaphalf" << endl; PAGEDEF << "\\dimtobp{\\framew}\\edef\\Framew{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\frameh}\\edef\\Frameh{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\framex}\\edef\\Framex{\\tmpdef}%" << endl; PAGEDEF << "\\dimtobp{\\framey}\\edef\\Framey{\\tmpdef}%" << endl; PAGEDEF << "\\adjustedHS=" << HS << "bp" << "\\advance\\adjustedHS by \\extraE" << "\\advance\\adjustedHS by \\extraW" << "\\advance\\adjustedHS by \\overlap" << "\\advance\\adjustedHS by \\overlap" << endl; PAGEDEF << "\\adjustedVS=" << VS << "bp" << "\\advance\\adjustedVS by \\extraN" << "\\advance\\adjustedVS by \\extraS" << "\\advance\\adjustedVS by \\overlap" << "\\advance\\adjustedVS by \\overlap" << endl; //calibration PAGEDEF.precision(10); for (int i=0; i<9; i++) { PAGEDEF << "\\calibrX{" << LAYOUT.calibration_local[i].x - MINX << "bp}\\tmpdimenX=\\tmpdimen" << endl; PAGEDEF << "\\calibrY{" << LAYOUT.calibration_local[i].y - MINY << "bp}\\tmpdimenY=\\tmpdimen" << endl; PAGEDEF << "\\pdfcatalog { /thCalibrate" << i << " (X=\\the\\tmpdimenX, Y=\\the\\tmpdimenY, L=" << LAYOUT.calibration_latlong[i].x << ", F=" << LAYOUT.calibration_latlong[i].y << ")}" << endl; } PAGEDEF << "\\pdfcatalog { /thCalibrate (HS=\\the\\adjustedHS, VS=\\the\\adjustedVS, HD=" << LAYOUT.calibration_hdist << ")}"; PAGEDEF.precision(2); PAGEDEF << "\\tmpdimen=\\extraW\\advance\\tmpdimen by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\tmpdimen}\\edef\\adjustedX{\\tmpdef}%" << endl; PAGEDEF << "\\tmpdimen=\\extraS\\advance\\tmpdimen by \\overlap" << endl; PAGEDEF << "\\dimtobp{\\tmpdimen}\\edef\\adjustedY{\\tmpdef}%" << endl; /* if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { */ if (! LAYOUT.transparent_map_bg) { PAGEDEF << "\\PL{q " << LAYOUT.background_r << " " << LAYOUT.background_g << " " << LAYOUT.background_b << " rg -" << "\\wsize\\space" << "-" << "\\nsize\\space" << "\\xsize\\space" << "\\ysize\\space" << " re f Q}%" << endl; } PAGEDEF << "\\ifdim\\framethickness>0mm\\dimtobp{\\framethickness}\\edef\\Framethickness{\\tmpdef}" << "\\PL{q 0 0 0 RG 1 J 1 j \\Framethickness\\space w " << "-\\Framex\\space\\Framey\\space\\Framew\\space-\\Frameh\\space" << " re s Q}\\fi" << endl; // PAGEDEF << "\\leavevmode\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; PAGEDEF << "\\leavevmode\\setbox\\xxx=\\hbox to 0bp{%" << endl; if (LAYOUT.surface == 1) print_surface_bitmaps(PAGEDEF,MINX,MINY); // print_page_bg(PAGEDEF); for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { if (LAYOUT.OCG && LAYOUT.transparency) { PAGEDEF << "\\PL{/OC /oc\\the\\oc" << u2str(I->first) << "\\space BDC}%" << endl; } print_page_bg_scraps(I->first,PAGEDEF); if (LAYOUT.OCG && LAYOUT.transparency) { PAGEDEF << "\\PL{EMC}%" << endl; } } } if (LAYOUT.grid == 1) print_grid_pdf(PAGEDEF,MINX,MINY,origMINX,origMINY,origMAXX,origMAXY); if (!MAP_PREVIEW_DOWN.empty()) print_preview(0,PAGEDEF,MINX,MINY); for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) { PAGEDEF << "\\setbox\\xxx=\\hbox to " << HS << "bp{%" << endl; // we need flush layer data using XObject // (the text clipping path may become too large) print_map((*I).first,PAGEDEF); PAGEDEF << "\\hfill}\\ht\\xxx=" << VS << "bp\\dp\\xxx=0bp" << endl; PAGEDEF << "\\immediate\\pdfxform "; if (LAYOUT.OCG) { PAGEDEF << "attr{/OC \\the\\oc" << u2str(I->first) << "\\space 0 R} "; } PAGEDEF << "\\xxx\\PB{0}{0}{\\pdflastxform}%" << endl; } } if (!MAP_PREVIEW_UP.empty()) print_preview(1,PAGEDEF,MINX,MINY); if (LAYOUT.surface == 2) print_surface_bitmaps(PAGEDEF,MINX,MINY); if (LAYOUT.grid == 2) print_grid_pdf(PAGEDEF,MINX,MINY,origMINX,origMINY,origMAXX,origMAXY); if (LAYOUT.map_grid) { PAGEDEF << "\\PL{q .4 w 0.6 g 0.6 G }%" << endl; PAGEDEF << "\\PL{0 0 " << HS << " " << VS << " re S}%" << endl; for (double i=0; i <= HS; i += LAYOUT.hsize) { PAGEDEF << "\\PL{" << i << " 0 m " << i << " " << VS << " l S}%" << endl; if (i::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { if (I->second.Z == 0) PAGEDEF << "/oc\\the\\oc" << u2str(I->first) << "\\space\\the\\oc" << u2str(I->first) << "\\space0 R "; } PAGEDEF << " >> }\\pdfpageresources\\expandafter{\\thpdfpageres}" << endl; } } PAGEDEF.close(); PAGE.close(); } int thpdf(int m) { mode = m; #ifdef NOTHERION init_encodings(); print_fonts_setup(); cout << "making " << ((mode == ATLAS) ? "atlas" : "map") << " ... " << flush; #else thprintf("making %s ... ", (mode == ATLAS) ? "atlas" : "map"); #endif SHEET.clear(); SHEET_JMP.clear(); MINX=DBL_MAX, MINY=DBL_MAX, MAXX=-DBL_MAX, MAXY=-DBL_MAX; #ifdef NOTHERION read_settings(); // change to the quick mode only #endif make_sheets(); if (mode == ATLAS) { sort_sheets(); find_jumps(); } build_pages(); #ifdef NOTHERION cout << "done" << endl; #else thprintf("done\n"); #endif return(0); } #ifdef NOTHERION int main() { thpdf(0); } #endif therion-5.4.1/thpdf.h000066400000000000000000000017741307545355600144750ustar00rootroot00000000000000/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdf_h #define thpdf_h int thpdf(int mode); // 0=atlas, 1=mapa #endif therion-5.4.1/thpdfdata.cxx000066400000000000000000000051001307545355600156650ustar00rootroot00000000000000/** * @file thpdfdata.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include "thpdfdata.h" #include "thlang.h" using namespace std; list SCRAPLIST; list LEGENDLIST; list COLORLEGENDLIST; map LAYERHASH; set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; layout LAYOUT; list SURFPICTLIST; scraprecord::scraprecord() { S1=0.0; S2=0.0; layer=0; level=0; sect=0; F1=0.0; F2=0.0; F3=0.0; F4=0.0; G1=0.0; G2=0.0; G3=0.0; G4=0.0; B1=0.0; B2=0.0; B3=0.0; B4=0.0; I1=0.0; I2=0.0; I3=0.0; I4=0.0; E1=0.0; E2=0.0; E3=0.0; E4=0.0; X1=0.0; X2=0.0; X3=0.0; X4=0.0; r=-1; g=-1; b=-1; } layerrecord::layerrecord() { Z=0; AltJump = 0; minx=0; maxx=0; miny=0; maxy=0; bookmark = false; } layout::layout() { transparency = true; overlap = 20; hsize = 400; vsize = 600; map_grid = false; hoffset = 0; voffset = 0; excl_pages = false; labelx = "0"; labely = "0"; page_numbering = true; nav_right = 2; nav_up = 2; nav_factor = 30; title_pages = false; background_r = 1; background_g = 1; background_b = 1; foreground_r = 1; foreground_g = 1; foreground_b = 1; preview_below_r = .8; preview_below_g = .8; preview_below_b = .8; preview_above_r = 0; preview_above_g = 0; preview_above_b = 0; own_pages = 0; OCG = true; lang = THLANG_UNKNOWN; legend_width = 200; legend_columns = 2; surface = 0; surface_opacity = 0.7; hgridorigin = 0; vgridorigin = 0; map_header_bg = false; transparent_map_bg = false; colored_text = true; grid_coord_freq = 2; } paired::paired() { x = 0; y = 0; } therion-5.4.1/thpdfdata.h000066400000000000000000000070271307545355600153240ustar00rootroot00000000000000/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdfdata_h #define thpdfdata_h #include #include #include #include #include "thepsparse.h" using namespace std; struct surfpictrecord { const char * filename, * type; double dx, dy, xx, xy, yx, yy, width, height; }; struct scraprecord { string name,F,B,I,E,X,G,C,P; // name + files converted_data Fc, Bc, Ic, Ec, Xc, Gc; double S1,S2; // shift int layer,level,sect; // Y, V, Z double F1,F2,F3,F4, // bounding boxes G1,G2,G3,G4, B1,B2,B3,B4, I1,I2,I3,I4, E1,E2,E3,E4, X1,X2,X3,X4; double r,g,b; list SKETCHLIST; scraprecord(); }; struct layerrecord { set U,D; string N,T; int Z; int AltJump; int minx, maxx, miny, maxy; bool bookmark; map< int,set > scraps; set allscraps; layerrecord(); }; struct legendrecord { string name, fname, descr; converted_data ldata; unsigned idsym, idfig, idnum; }; struct colorlegendrecord { double R, G, B; string texname, name; }; struct paired { double x,y; paired(); }; paired rotatedaround(paired x,paired o, double th); struct layout { string excl_list,labelx,labely, doc_author,doc_keywords,doc_subject,doc_title,doc_comment, northarrow, scalebar,langstr; bool excl_pages,title_pages,page_numbering, transparency,map_grid,OCG,map_header_bg,colored_text,transparent_map_bg; double hsize,vsize,overlap, hgridsize, vgridsize, hgridorigin, vgridorigin, gridrot, nav_factor, XS,YS,XO,YO; int nav_right,nav_up,own_pages,lang,legend_columns; double hoffset, voffset, opacity, legend_width; double background_r, background_g, background_b; double foreground_r, foreground_g, foreground_b; double preview_below_r, preview_below_g, preview_below_b; double preview_above_r, preview_above_g, preview_above_b; int surface, grid, proj, grid_coord_freq; // freq 0 no, 1 border, 2 all string gridAA, gridAB, gridAC, gridBA, gridBB, gridBC, gridCA, gridCB, gridCC; paired gridcell[9]; double surface_opacity; paired calibration_local[9], calibration_latlong[9]; double calibration_hdist; layout(); }; extern map LAYERHASH; extern set MAP_PREVIEW_UP, MAP_PREVIEW_DOWN; extern list SCRAPLIST; extern list LEGENDLIST; extern list COLORLEGENDLIST; extern layout LAYOUT; extern list PATTERNLIST; extern list GRIDLIST; extern converted_data NArrow, ScBar; extern list SURFPICTLIST; #endif therion-5.4.1/thpdfdbg.cxx000066400000000000000000000105131307545355600155140ustar00rootroot00000000000000/** * @file thpdfdbg.cxx */ /* Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include #include #include #include #include #include "thpdfdbg.h" #include "thpdfdata.h" #ifndef NOTHERION #include "thexception.h" #endif using namespace std; string tex_Xname(string s) {return("THX"+s);} string tex_Wname(string s) {return("THW"+s);} // special = northarrow &c. string u2str(unsigned u) { unsigned i=u; char c; string s=""; while (i>0) { c = 'a' + ((i-1) % 26); s = c + s; i = (i-1) / 26; }; return (s); } string rgb2svg(double r, double g, double b) { char ch[8]; sprintf(ch,"#%02x%02x%02x",int(255*r) % 256, int(255*g) % 256, int(255*b) % 256); return (string) ch; } void print_hash(){ ofstream F("scraps.dat"); if(!F) therror(("Can't open file `scraps.dat'")); F << "[SCRAP]" << endl; for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { F << "N " << I->name << endl; if (I->F != "") { F << "F " << I->F1 << " " << I->F2 << " " << I->F3 << " " << I->F4 << endl; } if (I->G != "") { F << "G " << I->G1 << " " << I->G2 << " " << I->G3 << " " << I->G4 << endl; } if (I->B != "") { F << "B " << I->B1 << " " << I->B2 << " " << I->B3 << " " << I->B4 << endl; } if (I->I != "") { F << "I " << I->I1 << " " << I->I2 << " " << I->I3 << " " << I->I4 << endl; } if (I->E != "") { F << "E " << I->E1 << " " << I->E2 << " " << I->E3 << " " << I->E4 << endl; } if (I->X != "") { F << "X " << I->X1 << " " << I->X2 << " " << I->X3 << " " << I->X4 << endl; } if (I->P != "") { F << "P " << I->P << " " << I->S1 << " " << I->S2 << endl; } F << "Y " << I->layer << endl; F << "V " << I->level << endl; if (I->sect != 0) { F << "Z 1" << endl; } } F << "[LAYER]" << endl; for (map::iterator I = LAYERHASH.begin(); I != LAYERHASH.end(); I++) { F << "R " << (*I).first << endl; if (!(((*I).second).U).empty()) { F << "U"; for (set::iterator J = (((*I).second).U).begin(); J != (((*I).second).U).end(); J++) { F << " " << *J; } F << endl; } if (!(((*I).second).D).empty()) { F << "D"; for (set::iterator J = (((*I).second).D).begin(); J != (((*I).second).D).end(); J++) { F << " " << *J; } F << endl; } if (((*I).second).N != "") { F << "N " << ((*I).second).N << endl; } if (((*I).second).T != "") { F << "T " << ((*I).second).T << endl; } if (I->second.Z != 0) { F << "Z 1" << endl; } } F << "[MAP]" << endl; if (!MAP_PREVIEW_UP.empty()) { F << "U"; for (set::iterator J = MAP_PREVIEW_UP.begin(); J != MAP_PREVIEW_UP.end(); J++) { F << " " << *J; } F << endl; } if (!MAP_PREVIEW_DOWN.empty()) { F << "D"; for (set::iterator J = MAP_PREVIEW_DOWN.begin(); J != MAP_PREVIEW_DOWN.end(); J++) { F << " " << *J; } F << endl; } F.close(); } void thpdfdbg() { print_hash(); } therion-5.4.1/thpdfdbg.h000066400000000000000000000025441307545355600151460ustar00rootroot00000000000000/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpdfdbg_h #define thpdfdbg_h #include #include #ifndef NOTHERION #include "thexception.h" #endif using namespace std; #ifdef NOTHERION #define therror(P) {\ cerr << P << endl;\ exit(0);\ } #endif void thpdfdbg(); // volat len v debugovacom mode string u2str(unsigned u); string tex_Xname(string s); string tex_Wname(string s); string pdf_info(void); string rgb2svg(double r, double g, double b); #endif therion-5.4.1/thperson.cxx000066400000000000000000000057361307545355600156070ustar00rootroot00000000000000/** * @file thperson.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thperson.h" #include "thdatabase.h" #include "thparse.h" #include "thexception.h" #include void thperson::reset() { this->n1 = ""; this->n2 = ""; this->nn = "/"; } void thperson::identify(thdatabase * dbp) { dbp->buff_tmp = this->n2; dbp->buff_tmp += "/"; dbp->buff_tmp += this->n1; this->nn = dbp->strstore(dbp->buff_tmp.get_buffer(), true); } thperson::thperson() { this->reset(); } #ifdef THWIN32 char * index(char * str, char znk) { size_t sln = strlen(str), idx; for(idx = 0; idx < sln; idx++, str++) if(*str == znk) return str; return NULL; } #endif void thperson::parse(thdatabase * dbp, char * src) { this->reset(); bool has_sep = (index(src,'/') != NULL); thsplit_strings(&(dbp->mbuff_tmp), src, '/'); if (has_sep) { if (dbp->mbuff_tmp.get_size() == 1) { this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); } else if (dbp->mbuff_tmp.get_size() == 2) { this->n1 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[1], true); } else ththrow(("invalid name format -- \"%s\"", src)) } else { thsplit_args(&(dbp->mbuff_tmp), src); if (dbp->mbuff_tmp.get_size() == 1) { this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); } else if (dbp->mbuff_tmp.get_size() == 2) { this->n1 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[0], true); this->n2 = dbp->strstore((dbp->mbuff_tmp.get_buffer())[1], true); } else ththrow(("invalid name format -- \"%s\"", src)) } this->identify(dbp); } bool operator < (const class thperson & p1, const class thperson & p2) { if (strcmp(p1.nn, p2.nn) < 0) return true; else return false; } bool operator == (const class thperson & p1, const class thperson & p2) { if (strcmp(p1.nn, p2.nn) == 0) return true; else return false; } const char * thperson::get_n1() const { return this->n1; } const char * thperson::get_n2() const { return this->n2; } therion-5.4.1/thperson.h000066400000000000000000000033731307545355600152270ustar00rootroot00000000000000/** * @file thperson.h * Person class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thperson_h #define thperson_h /** * Person class. */ class thperson { const char * n1, ///< First name. * n2, ///< Second name. * nn; ///< Identification string. void reset(); ///< Reset person names. void identify(class thdatabase * dbp); ///< Make identification string. friend bool operator < (const class thperson &, const class thperson &); friend bool operator == (const class thperson &, const class thperson &); public: /** * Standard constructor. */ thperson(); /** * Parse the person name. */ void parse(thdatabase * dbp, char * src); /** * Return first name. */ const char * get_n1() const; /** * Return second name. */ const char * get_n2() const; }; #endif therion-5.4.1/thpic.cxx000066400000000000000000000236671307545355600150570ustar00rootroot00000000000000/** * @file thpic.cxx * Picture manipulation structure. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thpic.h" #include "thbuffer.h" #include "thdatabase.h" #include "thinit.h" #include "thtmpdir.h" #include "thexception.h" #include #ifdef THMSVC #include #define getcwd _getcwd #endif long thpic__convert_number(1); const char * thpic__tmp(NULL); thpic::thpic() { this->fname = NULL; this->texfname = NULL; this->rgba = NULL; this->rgbafn = NULL; this->width = -1; this->height = -1; this->x = 0.0; this->y = 0.0; this->scale = 1.0; if (thpic__tmp == NULL) { thdb.buff_tmp = thtmp.get_file_name("pic0000.txt"); thpic__tmp = thdb.strstore(thdb.buff_tmp); } } bool thpic::exists() { return ((this->width > 0) && (this->height > 0)); } void thpic::init(const char * pfname, const char * incfnm) { long i; thbuffer pict_path; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); if (strlen(pfname) == 0) ththrow(("picture file name not specified")); pict_path += "/"; if (incfnm != NULL) pict_path += incfnm; char * pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) pict_path = "/"; pict_path += pfname; pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->fname = thdb.strstore(pp); // thprintf("\npict name: %s\n", this->fname); thbuffer ccom; int retcode; bool isspc; // program path isspc = (strcspn(thini.get_path_identify()," \t") < strlen(thini.get_path_identify())); ccom = ""; if (isspc) ccom += "\""; ccom += thini.get_path_identify(); if (isspc) ccom += "\""; // format ccom += " -format \"%w\\n%h\\n\" "; // filename isspc = (strcspn(this->fname," \t") < strlen(this->fname)); if (isspc) ccom += "\""; ccom += this->fname; if (isspc) ccom += "\""; // write into ccom += " > "; isspc = (strcspn(thpic__tmp," \t") < strlen(thpic__tmp)); if (isspc) ccom += "\""; ccom += thpic__tmp; if (isspc) ccom += "\""; #ifdef THDEBUG thprintf("running convert\n"); #endif retcode = system(ccom.get_buffer()); if (retcode == EXIT_SUCCESS) { FILE * tmp; tmp = fopen(thpic__tmp,"r"); if (tmp == NULL) retcode = EXIT_FAILURE; else { if (fscanf(tmp,"%ld",&this->width) != 1) retcode = EXIT_FAILURE; if (fscanf(tmp,"%ld",&this->height) != 1) retcode = EXIT_FAILURE; fclose(tmp); } } if ((retcode != EXIT_SUCCESS) || (!this->exists())) { thwarning(("unable to read \"%s\"", this->fname)) this->height = -1; this->width = -1; } } const char * thpic::convert(const char * type, const char * ext, const char * optfmt, ...) { if (!this->exists()) return NULL; thbuffer ccom; int retcode; bool isspc; char tmpfn[255]; const char * tmpf; char options[1024]; va_list args; va_start(args, optfmt); vsprintf(options, optfmt, args); va_end(args); sprintf(tmpfn, "pic%04ld.%s", thpic__convert_number++, ext); isspc = (strcspn(thini.get_path_convert()," \t") < strlen(thini.get_path_convert())); ccom = ""; if (isspc) ccom += "\""; ccom += thini.get_path_convert(); if (isspc) ccom += "\""; ccom += " "; ccom += options; ccom += " "; isspc = (strcspn(this->fname," \t") < strlen(this->fname)); if (isspc) ccom += "\""; ccom += this->fname; if (isspc) ccom += "\""; ccom += " "; tmpf = thtmp.get_file_name(tmpfn); isspc = (strcspn(tmpf," \t") < strlen(tmpf)); if (isspc) ccom += "\""; ccom += type; ccom += ":"; ccom += tmpf; if (isspc) ccom += "\""; retcode = system(ccom.get_buffer()); if (retcode == EXIT_SUCCESS) { ccom = thtmp.get_file_name(tmpfn); size_t x, l; l = strlen(ccom); for (x = 0; x < l; x++) if (ccom.get_buffer()[x] == '\\') ccom.get_buffer()[x] = '/'; return (thdb.strstore(ccom)); } else { return NULL; } } void thpic::rgba_load() { if (!this->exists()) return; if (this->rgbafn == NULL) { this->rgbafn = this->convert("RGBA","rgba","-depth 8"); } if (this->rgbafn == NULL) return; FILE * f; f = fopen(this->rgbafn,"rb"); if (f != NULL) { size_t rawsize, readsize; rawsize = (size_t)(this->width * this->height * 4); this->rgba = new char [rawsize]; readsize = fread(this->rgba, 1, rawsize, f); if (readsize < rawsize) { this->rgba_free(); } fclose(f); } } void thpic::rgba_free() { delete [] this->rgba; this->rgba = NULL; } void thpic::rgba_init(long w, long h) { this->width = w; this->height = h; long i, s; s = 4 * w * h; this->rgba = new char [s]; for(i = 0; i < s; i++) this->rgba[i] = 0; } void thpic::rgba_save(const char * type, const char * ext, int colors) { if (this->rgba == NULL) { this->width = -1; this->height = -1; this->fname = NULL; return; } thpic tmp; tmp.width = this->width; tmp.height = this->height; char tmpfn[255]; sprintf(tmpfn, "pic%04ld.rgba", thpic__convert_number++); tmp.fname = thdb.strstore(thtmp.get_file_name(tmpfn)); this->rgbafn = tmp.fname; FILE * f; f = fopen(tmp.fname,"wb"); fwrite(this->rgba,1,4 * this->width * this->height,f); fclose(f); if (colors > 1) this->fname = tmp.convert(type, ext, "-depth 8 -size %dx%d -density 300 +dither -colors %d", this->width, this->height, colors); else this->fname = tmp.convert(type, ext, "-depth 8 -size %dx%d -density 300", this->width, this->height); sprintf(tmpfn, "pic%04ld.%s", thpic__convert_number - 1, ext); this->texfname = thdb.strstore(tmpfn); } void thpic::rgba_set_pixel(long x, long y, char * data) { char * dst; if ((this->rgba == NULL) || (x < 0) || (x >= this->width) || (y < 0) || (y >= this->height)) return; dst = &(this->rgba[4 * ((this->height - y - 1) * this->width + x)]); dst[0] = data[0]; dst[1] = data[1]; dst[2] = data[2]; dst[3] = data[3]; } char * thpic::rgba_get_pixel(long x, long y) { static unsigned char data[4], * src; if (this->rgba == NULL) return NULL; if ((x < 0) || (x >= this->width) || (y < 0) || (y >= this->height)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; } else { src = (unsigned char *) &(this->rgba[4 * ((this->height - y - 1) * this->width + x)]); data[0] = src[0]; data[1] = src[1]; data[2] = src[2]; data[3] = src[3]; } return (char *) data; } double R(double x) { double P2, P1, P0, P_1; #define P(c) (x > -c ? x + c : 0.0); #define P_(c) (x > c ? x - c : 0.0); P2 = P(2.0); P1 = P(1.0); P0 = P(0.0); P_1 = P_(1.0); return (0.16666666666666666666666666666667 * (P2*P2*P2 - 4.0 * P1*P1*P1 + 6.0 * P0*P0*P0 - 4 * P_1*P_1*P_1)); } char * thpic::rgba_interpolate_pixel(double x, double y) { // nearest #define PIC_INT_BSPLINE #ifdef PIC_INT_NEAREST return this->rgba_get_pixel(long(x + 0.5), long(y + 0.5)); #endif #ifdef PIC_INT_BILINEAR static unsigned char data[4]; unsigned char * src00, * src10, * src01, * src11; int m, i, j; double dx, dy, w00, w10, w01, w11, d; i = int(x); j = int(y); if ((i < -2) || (i > this->width + 2) || (j < -2) || (j > this->height + 2)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; return (char *) data; } dx = x - double(i); dy = y - double(j); w00 = (1 - dx) * (1 - dy); w10 = dx * (1 - dy); w01 = (1 - dx) * dy; w11 = dx * dy; src00 = (unsigned char *) this->rgba_get_pixel(i,j); src10 = (unsigned char *) this->rgba_get_pixel(i+1,j); src01 = (unsigned char *) this->rgba_get_pixel(i,j+1); src11 = (unsigned char *) this->rgba_get_pixel(i+1,j+1); for (m = 0; m < 4; m++) { d = w00 * double(src00[m]) + w10 * double(src10[m]) + w01 * double(src01[m]) + w11 * double(src11[m]); i = int(d + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[m] = (unsigned char) i; } return (char *) data; #endif #ifdef PIC_INT_BSPLINE static unsigned char data[4]; unsigned char * src; int m, n, i, j; double dx, dy, w, ddata[4]; i = int(x); j = int(y); if ((i < -2) || (i > this->width + 2) || (j < -2) || (j > this->height + 2)) { data[0] = 255; data[1] = 255; data[2] = 255; data[3] = 0; return (char *) data; } dx = x - double(i); dy = y - double(j); ddata[0] = 0.0; ddata[1] = 0.0; ddata[2] = 0.0; ddata[3] = 0.0; for (m = -1; m < 3; m++) { for (n = -1; n < 3; n++) { src = (unsigned char *) this->rgba_get_pixel(i + m, j + n); w = R(double(m) - dx) * R(dy - double(n)); ddata[0] += w * double(src[0]); ddata[1] += w * double(src[1]); ddata[2] += w * double(src[2]); ddata[3] += w * double(src[3]); } } i = int(ddata[0] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[0] = (unsigned char) i; i = int(ddata[1] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[1] = (unsigned char) i; i = int(ddata[2] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[2] = (unsigned char) i; i = int(ddata[3] + 0.5); if (i < 0) i = 0; if (i > 255) i = 255; data[3] = (unsigned char) i; return (char *) data; #endif } therion-5.4.1/thpic.h000066400000000000000000000032571307545355600144750ustar00rootroot00000000000000/** * @file thpic.h * Picture manipulation structure. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpic_h #define thpic_h struct thpic { const char * fname, * texfname, * rgbafn; char * rgba; long width, height; double x, y, ///< Coordinates of upper left corner scale; ///< Image scale. thpic(); bool exists(); void init(const char * fname, const char * incfnm); const char * convert(const char * type, const char * ext, const char * optfmt, ...); void rgba_load(); void rgba_free(); void rgba_init(long width, long height); void rgba_save(const char * type, const char * ext, int colors = -1); char * rgba_get_pixel(long x, long y); char * rgba_interpolate_pixel(double x, double y); void rgba_set_pixel(long x, long y, char * data); }; #endif therion-5.4.1/thpoint.cxx000066400000000000000000001231551307545355600154260ustar00rootroot00000000000000/** * @file thpoint.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thpoint.h" #include "thexception.h" #include "thchenc.h" #include "thdatabase.h" #include "thinfnan.h" #include "thexpmap.h" #include "thtflength.h" #include "thtexfonts.h" #include "thdate.h" #include "thscrap.h" #include thpoint::thpoint() { // replace this by setting real properties initialization this->type = TT_POINT_TYPE_UNKNOWN; this->subtype = TT_POINT_SUBTYPE_UNKNOWN; this->point = thdb.db2d.insert_point(); this->cpoint = NULL; this->point->pscrap = thdb.get_current_scrap(); this->station_name.clear(); this->from_name.clear(); this->orient = thnan; this->xsize = thnan; this->ysize = thnan; this->align = TT_POINT_ALIGN_C; this->text = NULL; } thpoint::~thpoint() { if (this->type == TT_POINT_TYPE_DATE) { thdate * dp = (thdate *) this->text; delete dp; this->text = NULL; } } int thpoint::get_class_id() { return TT_POINT_CMD; } bool thpoint::is(int class_id) { if (class_id == TT_POINT_CMD) return true; else return th2ddataobject::is(class_id); } int thpoint::get_cmd_nargs() { // replace by real number of arguments return 3; } const char * thpoint::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thpoint::get_cmd_name() { // insert command name here return "point"; } thcmd_option_desc thpoint::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_point_opt); if (id == TT_POINT_UNKNOWN) return th2ddataobject::get_cmd_option_desc(opts); else return thcmd_option_desc(id); } void thpoint::start_insert() { if (this->type == TT_POINT_TYPE_U) { if (this->m_subtype_str == NULL) ththrow(("missing subtype specification for point of user defined type")) this->db->db2d.register_u_symbol(this->get_class_id(), this->m_subtype_str); } } void thpoint::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { double dv; int sv; char * type, * subtype; if (cod.id == 3) cod.id = TT_POINT_TYPE; switch (cod.id) { case 1: case 2: thparse_double(sv,dv,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (cod.id == 1) this->point->x = dv; else this->point->y = dv; break; case TT_POINT_TYPE: th2dsplitTT(*args, &type, &subtype); this->parse_type(type); if (strlen(subtype) > 0) this->parse_subtype(subtype); break; case TT_POINT_VALUE: this->parse_value(*args); break; case TT_POINT_DIST: this->parse_value(*args); break; case TT_POINT_TEXT: thencode(&(this->db->buff_enc), *args, argenc); this->parse_text(this->db->buff_enc.get_buffer()); break; case TT_POINT_EXPLORED: this->parse_explored(*args); break; case TT_POINT_ALIGN: this->parse_align(*args); break; case TT_POINT_SCRAP: if (this->type != TT_POINT_TYPE_SECTION) ththrow(("point not section -- -scrap")) thparse_objectname(this->station_name, & this->db->buff_stations, *args); break; case TT_POINT_XSIZE: ththrow(("-x-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->xsize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->xsize <= 0.0) ththrow(("size not positive -- %s",*args)) break; case TT_POINT_SIZE: ththrow(("-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->xsize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->xsize <= 0.0) ththrow(("size not positive -- %s",*args)) this->ysize = this->xsize; break; case TT_POINT_YSIZE: ththrow(("-y-size not valid with type %s", thmatch_string(this->type,thtt_point_types))) thparse_double(sv,this->ysize,*args); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s",*args)) if (this->ysize <= 0.0) ththrow(("size not positive -- %s",*args)) break; case TT_POINT_ORIENT: switch (this->type) { case TT_POINT_TYPE_STATION: ththrow(("-orientation not valid with type %s", thmatch_string(this->type,thtt_point_types))) } thparse_double(sv,this->orient,*args); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s",*args)) if ((this->orient < 0.0) || (this->orient >= 360.0)) ththrow(("orientation out of range -- %s",*args)) break; case TT_POINT_SUBTYPE: this->parse_subtype(*args); break; case TT_POINT_STATION: switch (this->type) { case TT_POINT_TYPE_STATION: case TT_POINT_TYPE_CONTINUATION: thparse_objectname(this->station_name, & this->db->buff_stations, *args, thdb.cscrapptr); break; default: ththrow(("station reference not allowed with this point type")) } break; case TT_POINT_FROM: this->parse_from(*args); break; // if not found, try to set fathers properties default: if (cod.id == TT_2DOBJ_CLIP) { switch (this->type) { case TT_POINT_TYPE_STATION_NAME: case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_DATE: case TT_POINT_TYPE_ALTITUDE: case TT_POINT_TYPE_HEIGHT: case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_MAP_CONNECTION: case TT_POINT_TYPE_PASSAGE_HEIGHT: ththrow(("-clip not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } } th2ddataobject::set(cod, args, argenc, indataline); } } void thpoint::self_delete() { delete this; } void thpoint::self_print_properties(FILE * outf) { th2ddataobject::self_print_properties(outf); fprintf(outf,"thpoint:\n"); fprintf(outf,"\ttype: %d\n",this->type); fprintf(outf,"\tsubtype: %d\n",this->subtype); fprintf(outf,"\talign: %d\n",this->align); fprintf(outf,"\tpoint: %f,%f (%f,%f,%f,%f)\n",this->point->x, this->point->y, this->point->xt,this->point->yt,this->point->zt,this->point->at); fprintf(outf,"\torientation: %f\n", this->orient); fprintf(outf,"\tx-size: %f\n", this->xsize); fprintf(outf,"\ty-size: %f\n", this->ysize); if (this->type == TT_POINT_TYPE_STATION) { fprintf(outf,"\tstation: "); fprintf(outf,this->station_name); fprintf(outf,"\n\tfrom station: "); fprintf(outf,this->from_name); } // insert intended print of object properties here } void thpoint::parse_type(char * tstr) { this->type = thmatch_token(tstr, thtt_point_types); if (this->type == TT_POINT_TYPE_UNKNOWN) ththrow(("unknown point type -- %s", tstr)) this->xsize = thnan; this->ysize = thnan; switch (this->type) { case TT_POINT_TYPE_DATE: if (this->type == TT_POINT_TYPE_DATE) this->text = (char *) new thdate; break; case TT_POINT_TYPE_ALTITUDE: this->xsize = 0.0; this->ysize = 1.0; break; } } void thpoint::parse_subtype(char * ststr) { if (this->type == TT_POINT_TYPE_UNKNOWN) ththrow(("point type must be specified before subtype")) if (this->type == TT_POINT_TYPE_U) { this->parse_u_subtype(ststr); return; } this->subtype = thmatch_token(ststr, thtt_point_subtypes); if (this->subtype == TT_POINT_SUBTYPE_UNKNOWN) ththrow(("unknown point subtype -- %s", ststr)) // let's check type - subtype bool combok = false; switch (this->type) { case TT_POINT_TYPE_STATION: switch (this->subtype) { case TT_POINT_SUBTYPE_TEMP: case TT_POINT_SUBTYPE_FIXED: case TT_POINT_SUBTYPE_PAINTED: case TT_POINT_SUBTYPE_NATURAL: combok = true; break; } break; case TT_POINT_TYPE_AIR_DRAUGHT: switch (this->subtype) { case TT_POINT_SUBTYPE_UNDEF: case TT_POINT_SUBTYPE_WINTER: case TT_POINT_SUBTYPE_SUMMER: combok = true; break; } break; case TT_POINT_TYPE_WATER_FLOW: switch (this->subtype) { case TT_POINT_SUBTYPE_PERMANENT: case TT_POINT_SUBTYPE_INTERMITTENT: case TT_POINT_SUBTYPE_PALEO: combok = true; break; } break; } if (!combok) ththrow(("invalid point type - subtype combination")) } void thpoint::parse_from(char * estr) { thsplit_words(& this->db->db2d.mbf, estr); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); if (npar != 1) ththrow(("invalid from station reference -- %s", estr)) thparse_objectname(this->from_name,& this->db->buff_stations,pars[0],this->fscrapptr); } const char * thpoint_export_mp_align2mp(int a) { switch (a) { case TT_POINT_ALIGN_R: return ".rt"; case TT_POINT_ALIGN_L: return ".lft"; case TT_POINT_ALIGN_T: return ".top"; case TT_POINT_ALIGN_B: return ".bot"; case TT_POINT_ALIGN_BR: return ".lrt"; case TT_POINT_ALIGN_BL: return ".llft"; case TT_POINT_ALIGN_TR: return ".urt"; case TT_POINT_ALIGN_TL: return ".ulft"; default: return ""; } } bool thpoint::export_mp(class thexpmapmpxs * out) { th2ddataobject::export_mp(out); thattr * station_attr = NULL; long station_attr_id = 0; bool postprocess = true, expsym = false; std::string attr_text; int macroid = -1, omacroid = -1, cmark; int postprocess_label = -1; this->db->buff_enc.guarantee(8128); // char * buff = this->db->buff_enc.get_buffer(); double xrr = (thisnan(this->orient) ? out->rr : 0.0); if (this->scale_numeric < out->layout->min_symbol_scale) return(false); switch(this->type) { case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_EXTRA: case TT_POINT_TYPE_MAP_CONNECTION: postprocess = false; break; case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_STATION_NAME: if (this->text != NULL) { switch (this->type) { case TT_POINT_TYPE_LABEL: macroid = SYMP_LABEL; break; case TT_POINT_TYPE_REMARK: macroid = SYMP_REMARK; break; default: macroid = SYMP_STATIONNAME; break; } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->type) { case TT_POINT_TYPE_STATION_NAME: fprintf(out->file,"\\thstationname "); break; case TT_POINT_TYPE_LABEL: fprintf(out->file,"\\thlabel"); break; case TT_POINT_TYPE_REMARK: fprintf(out->file,"\\thremark "); break; } out->layout->export_mptex_font_size(out->file, this, true); fprintf(out->file,"%s etex,", ((this->type == TT_POINT_TYPE_STATION_NAME) && (!this->station_name.is_empty())) ? (const char *) utf2tex(thobjectname__print_full_name(this->station_name.name, this->station_name.psurvey, out->layout->survey_level)) : ths2tex(this->text, out->layout->lang).c_str()); if (this->type == TT_POINT_TYPE_STATION_NAME) postprocess_label = 7; else postprocess_label = 0; } postprocess = false; break; case TT_POINT_TYPE_STATION: switch (this->subtype) { case TT_POINT_SUBTYPE_FIXED: macroid = SYMP_STATION_FIXED; cmark = TT_DATAMARK_FIXED; break; case TT_POINT_SUBTYPE_NATURAL: macroid = SYMP_STATION_NATURAL; cmark = TT_DATAMARK_NATURAL; break; case TT_POINT_SUBTYPE_PAINTED: macroid = SYMP_STATION_PAINTED; cmark = TT_DATAMARK_PAINTED; break; default: macroid = SYMP_STATION_TEMPORARY; cmark = TT_DATAMARK_TEMP; } omacroid = macroid; if (this->context >= 0) macroid = this->context; expsym = out->symset->is_assigned(macroid); if (expsym) out->symset->get_mp_macro(omacroid); { thdb1ds * pst = NULL; std::string commentstr("0"); if (this->station_name.id != 0) { pst = &(this->db->db1d.station_vec[this->station_name.id - 1]); station_attr_id = this->station_name.id; station_attr = &(thdb.db1d.m_station_attr); station_attr->export_mp_object_begin(out->file, station_attr_id); } if (pst != NULL) { #define thexpmatselected_stationflag(flag,mid) if (((pst->flags & flag) == flag) && out->symset->is_assigned(mid)) expsym = true; thexpmatselected_stationflag(TT_STATIONFLAG_ENTRANCE, SYMP_FLAG_ENTRANCE) thexpmatselected_stationflag(TT_STATIONFLAG_SINK, SYMP_FLAG_SINK) thexpmatselected_stationflag(TT_STATIONFLAG_SPRING, SYMP_FLAG_SPRING) thexpmatselected_stationflag(TT_STATIONFLAG_DOLINE, SYMP_FLAG_DOLINE) thexpmatselected_stationflag(TT_STATIONFLAG_DIG, SYMP_FLAG_DIG) thexpmatselected_stationflag(TT_STATIONFLAG_ARCH, SYMP_FLAG_ARCH) thexpmatselected_stationflag(TT_STATIONFLAG_OVERHANG, SYMP_FLAG_OVERHANG) thexpmatselected_stationflag(TT_STATIONFLAG_CONT, SYMP_FLAG_CONTINUATION) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT, SYMP_FLAG_AIRDRAUGHT) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT_SUMMER, SYMP_FLAG_AIRDRAUGHT) thexpmatselected_stationflag(TT_STATIONFLAG_AIRDRAUGHT_WINTER, SYMP_FLAG_AIRDRAUGHT) } if (out->file == NULL) return(expsym); if ((pst != NULL) && (pst->comment != NULL) && (strlen(pst->comment) > 0)) { commentstr = "btex \\thcomment "; commentstr += ths2tex(pst->comment, out->layout->lang); commentstr += " etex"; } if (out->symset->is_assigned(macroid)) out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_station("); this->point->export_mp(out); fprintf(out->file,",%d,%s,\"\"", out->symset->is_assigned(macroid) ? cmark : 0, commentstr.c_str() ); #define thexpmat_stationflag(flag,mid,str) if (((pst->flags & flag) == flag) && out->symset->is_assigned(mid)) fprintf(out->file,",\"%s\"", str); if (pst != NULL) { thexpmat_stationflag(TT_STATIONFLAG_ENTRANCE, SYMP_FLAG_ENTRANCE, "entrance") thexpmat_stationflag(TT_STATIONFLAG_SINK, SYMP_FLAG_SINK, "sink") thexpmat_stationflag(TT_STATIONFLAG_SPRING, SYMP_FLAG_SPRING, "spring") thexpmat_stationflag(TT_STATIONFLAG_DOLINE, SYMP_FLAG_DOLINE, "doline") thexpmat_stationflag(TT_STATIONFLAG_DIG, SYMP_FLAG_DIG, "dig") thexpmat_stationflag(TT_STATIONFLAG_ARCH, SYMP_FLAG_ARCH, "arch") thexpmat_stationflag(TT_STATIONFLAG_OVERHANG, SYMP_FLAG_OVERHANG, "overhang") thexpmat_stationflag(TT_STATIONFLAG_CONT, SYMP_FLAG_CONTINUATION, "continuation") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT, SYMP_FLAG_AIRDRAUGHT, "air-draught") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT_SUMMER, SYMP_FLAG_AIRDRAUGHT, "air-draught:summer") thexpmat_stationflag(TT_STATIONFLAG_AIRDRAUGHT_WINTER, SYMP_FLAG_AIRDRAUGHT, "air-draught:winter") } fprintf(out->file,");\n"); } if (out->symset->is_assigned(macroid) && out->layout->is_debug_stations()) { fprintf(out->file,"p_debug(0,1,"); this->point->export_mp(out,0); fprintf(out->file,");\n"); } postprocess = false; break; case TT_POINT_TYPE_ALTITUDE: macroid = SYMP_ALTITUDE; if (this->context >= 0) macroid = this->context; if ((!thisnan(this->xsize)) && (out->symset->is_assigned(macroid))) { //sprintf(buff,"%.0f",this->xsize - out->layout->goz); if (out->file == NULL) return(true); out->symset->get_mp_macro(SYMP_ALTITUDE); out->symset->export_mp_symbol_options(out->file, SYMP_ALTITUDE); fprintf(out->file,"p_label%s(btex \\thaltitude ", thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); out->layout->export_mptex_font_size(out->file, this, false); fprintf(out->file,"%s etex,", utf2tex(out->layout->units.format_length(this->xsize - out->layout->goz))); postprocess_label = 1; } postprocess = false; break; case TT_POINT_TYPE_HEIGHT: if ((this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) != 0) { switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case TT_POINT_TAG_HEIGHT_P: macroid = SYMP_HEIGHT_POSITIVE; break; case TT_POINT_TAG_HEIGHT_N: macroid = SYMP_HEIGHT_NEGATIVE; break; case TT_POINT_TAG_HEIGHT_U: macroid = SYMP_HEIGHT_UNSIGNED; break; default: return(false); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex \\thheight ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); out->layout->export_mptex_font_size(out->file, this, false); if ((this->tags & TT_POINT_TAG_HEIGHT_P) != 0) fprintf(out->file,"\\thheightpos "); else if ((this->tags & TT_POINT_TAG_HEIGHT_N) != 0) fprintf(out->file,"\\thheightneg "); if (!thisnan(this->xsize)) { //if (double(int(this->xsize)) != this->xsize) // sprintf(buff,"%.1f",this->xsize); //else // sprintf(buff,"%.0f",this->xsize); fprintf(out->file,"%s",utf2tex(out->layout->units.format_human_length(this->xsize))); } this->db->buff_enc.strcpy((this->tags & (TT_POINT_TAG_HEIGHT_PQ | TT_POINT_TAG_HEIGHT_NQ | TT_POINT_TAG_HEIGHT_UQ)) != 0 ? "?" : "" ); fprintf(out->file,"%s etex,",utf2tex(this->db->buff_enc.get_buffer())); postprocess_label = 7; } postprocess = false; break; case TT_POINT_TYPE_DATE: macroid = SYMP_DATE; if (this->context >= 0) macroid = this->context; if ((out->symset->is_assigned(macroid)) && ((this->tags & TT_POINT_TAG_DATE) > 0)) { // ((thdate *)this->text)->print_export_str(); // fprintf(out->file,"Datelabel%s(\"%s\",", // thpoint_export_mp_align2mp(this->align), // ((thdate *)this->text)->get_str()); if (out->file == NULL) return(true); out->symset->get_mp_macro(SYMP_DATE); out->symset->export_mp_symbol_options(out->file, SYMP_DATE); fprintf(out->file,"p_label%s(btex \\thdate ", thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); out->layout->export_mptex_font_size(out->file, this, false); fprintf(out->file,"%s etex,", utf2tex(((thdate *)this->text)->get_str(TT_DATE_FMT_LOCALE))); postprocess_label = 0; } postprocess = false; break; case TT_POINT_TYPE_PASSAGE_HEIGHT: if ((this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) != 0) { switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N): macroid = SYMP_PASSAGEHEIGHT_BOTH; break; case TT_POINT_TAG_HEIGHT_P: macroid = SYMP_PASSAGEHEIGHT_POSITIVE; break; case TT_POINT_TAG_HEIGHT_N: macroid = SYMP_PASSAGEHEIGHT_NEGATIVE; break; case TT_POINT_TAG_HEIGHT_U: macroid = SYMP_PASSAGEHEIGHT_UNSIGNED; break; default: return(false); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if (!out->symset->is_assigned(macroid)) return(false); if (out->file == NULL) return(true); out->symset->get_mp_macro(omacroid); out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"p_label%s(btex ",thpoint_export_mp_align2mp(thdb2d_rotate_align(this->align, xrr))); switch (this->tags & (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_U)) { case (TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N): fprintf(out->file,"\\thframed \\updown"); postprocess_label = 4; break; case TT_POINT_TAG_HEIGHT_P: fprintf(out->file,"\\thframed "); postprocess_label = 2; break; case TT_POINT_TAG_HEIGHT_N: fprintf(out->file,"\\thframed "); postprocess_label = 3; break; default: fprintf(out->file,"\\thframed "); postprocess_label = 5; break; } if (!thisnan(this->xsize)) { fprintf(out->file,"{"); out->layout->export_mptex_font_size(out->file, this, false); fprintf(out->file,"%s}", utf2tex(out->layout->units.format_human_length(this->xsize))); } if (!thisnan(this->ysize)) { fprintf(out->file,"{"); out->layout->export_mptex_font_size(out->file, this, false); fprintf(out->file,"%s}", utf2tex(out->layout->units.format_human_length(this->ysize))); } fprintf(out->file," etex,"); } postprocess = false; break; case TT_POINT_TYPE_SECTION: postprocess = false; break; #define thpoint_type_export_mp(type,mid) case type: \ macroid = mid; \ break; // ostatne typy case TT_POINT_TYPE_WATER_FLOW: switch (this->subtype) { thpoint_type_export_mp(TT_POINT_SUBTYPE_PALEO,SYMP_WATERFLOW_PALEO); thpoint_type_export_mp(TT_POINT_SUBTYPE_INTERMITTENT,SYMP_WATERFLOW_INTERMITTENT); default: macroid = SYMP_WATERFLOW_PERMANENT; } break; case TT_POINT_TYPE_AIR_DRAUGHT: switch (this->subtype) { thpoint_type_export_mp(TT_POINT_SUBTYPE_WINTER,SYMP_AIRDRAUGHT_WINTER); thpoint_type_export_mp(TT_POINT_SUBTYPE_SUMMER,SYMP_AIRDRAUGHT_SUMMER); default: macroid = SYMP_AIRDRAUGHT; } break; case TT_POINT_TYPE_CONTINUATION: macroid = SYMP_CONTINUATION; { std::string tmp; if ((this->text != NULL) && (strlen(this->text) > 0)) { if (tmp.length() > 0) tmp += " -- "; tmp += this->text; } if (tmp.length() > 0) { attr_text = "btex \\thcomment "; attr_text += ths2tex(tmp, out->layout->lang); attr_text += "etex"; } } break; // specialne symboly thpoint_type_export_mp(TT_POINT_TYPE_SPRING,SYMP_SPRING) thpoint_type_export_mp(TT_POINT_TYPE_SINK,SYMP_SINK) thpoint_type_export_mp(TT_POINT_TYPE_ENTRANCE,SYMP_ENTRANCE) thpoint_type_export_mp(TT_POINT_TYPE_GRADIENT,SYMP_GRADIENT) // vystroj thpoint_type_export_mp(TT_POINT_TYPE_ROPE,SYMP_ROPE) thpoint_type_export_mp(TT_POINT_TYPE_FIXED_LADDER,SYMP_FIXEDLADDER) thpoint_type_export_mp(TT_POINT_TYPE_ROPE_LADDER,SYMP_ROPELADDER) thpoint_type_export_mp(TT_POINT_TYPE_STEPS,SYMP_STEPS) thpoint_type_export_mp(TT_POINT_TYPE_BRIDGE,SYMP_BRIDGE) thpoint_type_export_mp(TT_POINT_TYPE_TRAVERSE,SYMP_TRAVERSE) thpoint_type_export_mp(TT_POINT_TYPE_NO_EQUIPMENT,SYMP_NOEQUIPMENT) thpoint_type_export_mp(TT_POINT_TYPE_ANCHOR,SYMP_ANCHOR) thpoint_type_export_mp(TT_POINT_TYPE_CAMP,SYMP_CAMP) thpoint_type_export_mp(TT_POINT_TYPE_DIG,SYMP_DIG) thpoint_type_export_mp(TT_POINT_TYPE_HANDRAIL,SYMP_HANDRAIL) thpoint_type_export_mp(TT_POINT_TYPE_VIA_FERRATA,SYMP_VIAFERRATA) // ukoncenia chodby thpoint_type_export_mp(TT_POINT_TYPE_NARROW_END,SYMP_NARROWEND) thpoint_type_export_mp(TT_POINT_TYPE_LOW_END,SYMP_LOWEND) thpoint_type_export_mp(TT_POINT_TYPE_FLOWSTONE_CHOKE,SYMP_FLOWSTONECHOKE) thpoint_type_export_mp(TT_POINT_TYPE_BREAKDOWN_CHOKE,SYMP_BREAKDOWNCHOKE) thpoint_type_export_mp(TT_POINT_TYPE_CLAY_CHOKE,SYMP_CLAYCHOKE) // vypln thpoint_type_export_mp(TT_POINT_TYPE_FLOWSTONE,SYMP_FLOWSTONE) thpoint_type_export_mp(TT_POINT_TYPE_MOONMILK,SYMP_MOONMILK) thpoint_type_export_mp(TT_POINT_TYPE_STALACTITE,SYMP_STALACTITE) thpoint_type_export_mp(TT_POINT_TYPE_STALAGMITE,SYMP_STALAGMITE) thpoint_type_export_mp(TT_POINT_TYPE_PILLAR,SYMP_PILLAR) thpoint_type_export_mp(TT_POINT_TYPE_STALACTITES,SYMP_STALACTITES) thpoint_type_export_mp(TT_POINT_TYPE_STALAGMITES,SYMP_STALAGMITES) thpoint_type_export_mp(TT_POINT_TYPE_PILLARS,SYMP_PILLARS) thpoint_type_export_mp(TT_POINT_TYPE_ICE_STALACTITE,SYMP_ICESTALACTITE) thpoint_type_export_mp(TT_POINT_TYPE_ICE_STALAGMITE,SYMP_ICESTALAGMITE) thpoint_type_export_mp(TT_POINT_TYPE_ICE_PILLAR,SYMP_ICEPILLAR) thpoint_type_export_mp(TT_POINT_TYPE_CURTAIN,SYMP_CURTAIN) thpoint_type_export_mp(TT_POINT_TYPE_HELICTITE,SYMP_HELICTITE) thpoint_type_export_mp(TT_POINT_TYPE_SODA_STRAW,SYMP_SODASTRAW) thpoint_type_export_mp(TT_POINT_TYPE_CRYSTAL,SYMP_CRYSTAL) thpoint_type_export_mp(TT_POINT_TYPE_WALL_CALCITE,SYMP_WALLCALCITE) thpoint_type_export_mp(TT_POINT_TYPE_POPCORN,SYMP_POPCORN) thpoint_type_export_mp(TT_POINT_TYPE_DISK,SYMP_DISK) thpoint_type_export_mp(TT_POINT_TYPE_GYPSUM,SYMP_GYPSUM) thpoint_type_export_mp(TT_POINT_TYPE_GYPSUM_FLOWER,SYMP_GYPSUMFLOWER) thpoint_type_export_mp(TT_POINT_TYPE_ARAGONITE,SYMP_ARAGONITE) thpoint_type_export_mp(TT_POINT_TYPE_CAVE_PEARL,SYMP_CAVEPEARL) thpoint_type_export_mp(TT_POINT_TYPE_RIMSTONE_POOL,SYMP_RIMSTONEPOOL) thpoint_type_export_mp(TT_POINT_TYPE_RIMSTONE_DAM,SYMP_RIMSTONEDAM) thpoint_type_export_mp(TT_POINT_TYPE_ANASTOMOSIS,SYMP_ANASTOMOSIS) thpoint_type_export_mp(TT_POINT_TYPE_KARREN,SYMP_KARREN) thpoint_type_export_mp(TT_POINT_TYPE_SCALLOP,SYMP_SCALLOP) thpoint_type_export_mp(TT_POINT_TYPE_FLUTE,SYMP_FLUTE) thpoint_type_export_mp(TT_POINT_TYPE_RAFT_CONE,SYMP_RAFTCONE) thpoint_type_export_mp(TT_POINT_TYPE_CLAY_TREE,SYMP_CLAYTREE) // plosne vyplne thpoint_type_export_mp(TT_POINT_TYPE_BEDROCK,SYMP_BEDROCK) thpoint_type_export_mp(TT_POINT_TYPE_SAND,SYMP_SAND) thpoint_type_export_mp(TT_POINT_TYPE_RAFT,SYMP_RAFT) thpoint_type_export_mp(TT_POINT_TYPE_CLAY,SYMP_CLAY) thpoint_type_export_mp(TT_POINT_TYPE_PEBBLES,SYMP_PEBBLES) thpoint_type_export_mp(TT_POINT_TYPE_DEBRIS,SYMP_DEBRIS) thpoint_type_export_mp(TT_POINT_TYPE_BLOCKS,SYMP_BLOCKS) thpoint_type_export_mp(TT_POINT_TYPE_WATER,SYMP_WATER) thpoint_type_export_mp(TT_POINT_TYPE_ICE,SYMP_ICE) thpoint_type_export_mp(TT_POINT_TYPE_SNOW,SYMP_SNOW) thpoint_type_export_mp(TT_POINT_TYPE_GUANO,SYMP_GUANO) // ina vypln thpoint_type_export_mp(TT_POINT_TYPE_ARCHEO_MATERIAL,SYMP_ARCHEOMATERIAL) thpoint_type_export_mp(TT_POINT_TYPE_PALEO_MATERIAL,SYMP_PALEOMATERIAL) thpoint_type_export_mp(TT_POINT_TYPE_VEGETABLE_DEBRIS,SYMP_VEGETABLEDEBRIS) thpoint_type_export_mp(TT_POINT_TYPE_ROOT,SYMP_ROOT) thpoint_type_export_mp(TT_POINT_TYPE_U,SYMP_U) default: macroid = SYMP_UNDEFINED; break; } if (postprocess_label >= 0) { this->point->export_mp(out); fprintf(out->file,",%.1f,%d);\n",(thisnan(this->orient) ? 0 : 360.0 - this->orient - out->rr), postprocess_label); } omacroid = macroid; if (this->context >= 0) macroid = this->context; if ((macroid > 0) && postprocess) { if (out->symset->is_assigned(macroid)) { if (out->file == NULL) return(true); if (attr_text.length() > 0) { fprintf(out->file, "picture ATTR__text;\nATTR__text := %s;\n", attr_text.c_str()); } if (this->type == TT_POINT_TYPE_U) { out->symset->export_mp_symbol_options(out->file, -1); fprintf(out->file,"p_u_%s(",this->m_subtype_str); this->db->db2d.use_u_symbol(this->get_class_id(), this->m_subtype_str); } else { out->symset->export_mp_symbol_options(out->file, omacroid); fprintf(out->file,"%s(",out->symset->get_mp_macro(omacroid)); } } else postprocess = false; } if (postprocess) { this->point->export_mp(out); double scl = this->scale_numeric; const char * al = "(0,0)"; switch (thdb2d_rotate_align(this->align, xrr)) { case TT_POINT_ALIGN_B: al = "(0,-1)"; break; case TT_POINT_ALIGN_T: al = "(0,1)"; break; case TT_POINT_ALIGN_L: al = "(-1,0)"; break; case TT_POINT_ALIGN_R: al = "(1,0)"; break; case TT_POINT_ALIGN_BL: al = "(-1,-1)"; break; case TT_POINT_ALIGN_TL: al = "(-1,1)"; break; case TT_POINT_ALIGN_BR: al = "(1,-1)"; break; case TT_POINT_ALIGN_TR: al = "(1,1)"; break; } fprintf(out->file,",%.1f,%.2f,%s", (thisnan(this->orient) ? 0 : 360 - this->orient - out->rr),scl,al); fprintf(out->file, ");\n"); if (out->layout->is_debug_stations() || out->layout->is_debug_joins()) { fprintf(out->file,"p_debug(-1,0,"); this->point->export_mp(out); fprintf(out->file,");\n"); } if (out->layout->is_debug_joins()) { fprintf(out->file,"p_debug(1,0,"); this->point->export_mp(out,1); fprintf(out->file,");\n"); } if (out->layout->is_debug_stations()) { fprintf(out->file,"p_debug(0,0,"); this->point->export_mp(out,0); fprintf(out->file,");\n"); } if (attr_text.length() > 0) { fprintf(out->file, "save ATTR__text;\n"); } } if (station_attr != NULL) { station_attr->export_mp_object_end(out->file, station_attr_id); } th2ddataobject::export_mp_end(out); return(false); } void thpoint::parse_align(char * tstr) { switch (this->type) { case TT_POINT_TYPE_STATION: ththrow(("-align not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } this->align = thmatch_token(tstr, thtt_point_aligns); if (this->align == TT_POINT_ALIGN_UNKNOWN) ththrow(("unknown alignment -- %s", tstr)) } void thpoint::parse_text(char * ss) { switch (this->type) { case TT_POINT_TYPE_LABEL: case TT_POINT_TYPE_REMARK: case TT_POINT_TYPE_STATION_NAME: case TT_POINT_TYPE_CONTINUATION: break; default: ththrow(("-text not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } if (strlen(ss) > 0) this->text = this->db->strstore(ss); else this->text = NULL; } void thpoint::parse_explored(char * ss) { switch (this->type) { case TT_POINT_TYPE_CONTINUATION: break; default: ththrow(("-explored not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } int sv; thparse_length(sv, this->xsize, ss); if (sv == TT_SV_UNKNOWN) ththrow(("ivalid explored length -- %s", ss)); } void thpoint_parse_value(int & sv, double & dv, bool & qw, int & sign, char * str) { // odstrani znamienka a nastavi sign sign = 0; qw = false; bool error = false; sv = TT_SV_NAN; dv = thnan; if (strlen(str) > 0) { switch (str[0]) { case '+': sign = 1; str++; break; case '-': sign = -1; str++; break; } } else error = true; // skusi odstranit otaznik size_t strl = strlen(str); if ((strl > 0) && (!error)) { if (str[strl-1] == '?') { str[strl-1] = 0; qw = true; } } // parsne cislo if (strlen(str)) { thparse_double(sv,dv,str); if ((sv != TT_SV_NAN) && (sv != TT_SV_NUMBER)) error = true; else if ((sv != TT_SV_NAN) && (dv < 0.0)) error = true; } if ((sv == TT_SV_NAN) && (sign == 0)) error = true; if (error) ththrow(("invalid value -- %s",str)) } void thpoint::parse_value(char * ss) { switch (this->type) { case TT_POINT_TYPE_ALTITUDE: case TT_POINT_TYPE_HEIGHT: case TT_POINT_TYPE_PASSAGE_HEIGHT: case TT_POINT_TYPE_DIMENSIONS: case TT_POINT_TYPE_DATE: case TT_POINT_TYPE_EXTRA: break; default: ththrow(("-value not valid with type %s", thmatch_string(this->type,thtt_point_types))) break; } thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); int sv, ux, vx, sv2; bool quest, quest2; double dv, dv2; int sign, sign2; thtflength lentf; thdate * dp; switch (this->type) { case TT_POINT_TYPE_EXTRA: ux = 0; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid distance -- %s",ss)) } this->xsize = thnan; thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("not a number -- %s", pars[0])) if (ux > 0) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } this->xsize = dv; break; // let's parse altitude case TT_POINT_TYPE_ALTITUDE: thparse_altitude(ss, this->xsize, this->ysize); break; case TT_POINT_TYPE_HEIGHT: ux = 0; switch (npar) { case 1: break; case 2: ux = 1; break; default: ththrow(("invalid value -- %s",ss)) } this->xsize = thnan; this->tags &= ~(TT_POINT_TAG_HEIGHT_ALL); thpoint_parse_value(sv,dv,quest,sign,pars[0]); if ((ux > 0) && (!thisnan(dv))) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); } if (sign < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } else { this->tags |= TT_POINT_TAG_HEIGHT_U; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_UQ; } this->xsize = dv; break; case TT_POINT_TYPE_DIMENSIONS: this->xsize = thnan; this->ysize = thnan; switch (npar) { case 3: // parse units lentf.parse_units(pars[2]); case 2: thparse_double(sv,dv,pars[0]); if (sv != TT_SV_NUMBER) { ththrow(("invalid above dimension -- %s",pars[0])) } this->xsize = lentf.transform(dv); if (this->xsize < 0.0) ththrow(("negative above dimension -- %s",pars[0])) thparse_double(sv,dv,pars[1]); if (sv != TT_SV_NUMBER) { ththrow(("invalid below dimension -- %s",pars[1])) } this->ysize = lentf.transform(dv); if (this->ysize < 0.0) ththrow(("negative below dimension -- %s",pars[1])) break; default: ththrow(("invalid value -- %s",ss)) } break; case TT_POINT_TYPE_PASSAGE_HEIGHT: ux = 0; vx = 0; switch (npar) { case 1: break; case 2: ux = 1; try { lentf.parse_units(pars[ux]); } catch (...) { ux = 0; vx = 1; } break; case 3: ux = 2; vx = 1; break; default: ththrow(("invalid value -- %s",ss)) } this->xsize = thnan; this->ysize = thnan; this->tags &= ~(TT_POINT_TAG_HEIGHT_ALL); thpoint_parse_value(sv,dv,quest,sign,pars[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid value -- %s",pars[0])) if (vx > 0) { thpoint_parse_value(sv2,dv2,quest2,sign2,pars[vx]); if (sv2 != TT_SV_NUMBER) ththrow(("invalid value -- %s",pars[vx])) if ((sign == 0) || (sign2 == 0) || (sign == sign2)) ththrow(("invalid combination of values -- %s",ss)) } if ((ux > 0) && (!thisnan(dv))) { lentf.parse_units(pars[ux]); dv = lentf.transform(dv); if (vx > 0) dv2 = lentf.transform(dv2); } if (sign < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; this->ysize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; this->xsize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } else { this->tags |= TT_POINT_TAG_HEIGHT_U; this->xsize = dv; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_UQ; } if (vx > 0) { if (sign2 < 0) { this->tags |= TT_POINT_TAG_HEIGHT_N; this->ysize = dv2; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_NQ; } else if (sign2 > 0) { this->tags |= TT_POINT_TAG_HEIGHT_P; this->xsize = dv2; if (quest) this->tags |= TT_POINT_TAG_HEIGHT_PQ; } } break; case TT_POINT_TYPE_DATE: if (npar != 1) ththrow(("invalid date -- %s",ss)) dp = (thdate *) this->text; dp->parse(pars[0]); this->tags |= TT_POINT_TAG_DATE; break; } } void thpoint::check_extra() { thdb2dcp * cp; if (this->from_name.id == 0) { double mind = -1.0, cd; cp = this->fscrapptr->fcpp; while (cp != NULL) { if (cp->st != NULL) { cd = thvec2(this->point->x - cp->pt->x, this->point->y - cp->pt->y).length(); if (mind < 0.0) { this->from_name.id = cp->st->uid; mind = cd; } else if (cd < mind) { this->from_name.id = cp->st->uid; mind = cd; } } cp = cp->nextcp; } } if (thisnan(this->xsize) && (this->from_name.id > 0)) { size_t myuid; thdb2dcp * mycp; myuid = thdb.db1d.station_vec[this->from_name.id - 1].uid; cp = this->fscrapptr->fcpp; mycp = NULL; double cdist(0.0); size_t ccount(0); while (cp != NULL) { if ((cp->st != NULL) && (cp->st->uid == myuid)) { mycp = cp; break; } cp = cp->nextcp; } if (mycp == NULL) return; thdb1d_tree_node * nodes = thdb.db1d.get_tree_nodes(); thdb1d_tree_arrow * carrow; cp = this->fscrapptr->fcpp; while (cp != NULL) { if ((cp->st != NULL) && (cp->st->uid != myuid)) { carrow = nodes[myuid - 1].first_arrow; while (carrow != NULL) { if (carrow->end_node->uid == cp->st->uid) { bool reverse = false; if (carrow->is_reversed) reverse = !reverse; if (carrow->leg->reverse) reverse = !reverse; thdataleg * cl = carrow->leg->leg; thline2 xl; if (reverse) { xl = thline2( thvec2(mycp->pt->x, mycp->pt->y), thvec2(cp->pt->x, cp->pt->y)); } else { xl = thline2( thvec2(cp->pt->x, cp->pt->y), thvec2(mycp->pt->x, mycp->pt->y)); } ccount++; switch (this->fscrapptr->proj->type) { case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: if (this->point->y > mycp->pt->y) { if (!reverse) cdist += cl->from_up; else cdist += cl->to_up; } else { if (!reverse) cdist += cl->from_down; else cdist += cl->to_down; } break; default: if (xl.eval(thvec2(this->point->x, this->point->y)) < 0.0) { if (!reverse) cdist += cl->from_left; else cdist += cl->to_left; } else { if (!reverse) cdist += cl->from_right; else cdist += cl->to_right; } } } carrow = carrow->next_arrow; } } cp = cp->nextcp; } if (ccount > 0) this->xsize = cdist / double(ccount); } } therion-5.4.1/thpoint.h000066400000000000000000000307611307545355600150530ustar00rootroot00000000000000/** * @file thpoint.h * point module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thpoint_h #define thpoint_h #include "th2ddataobject.h" #include "thparse.h" #include "thdb2dpt.h" /** * point command options tokens. */ enum { TT_POINT_UNKNOWN = 3000, TT_POINT_TYPE = 3001, TT_POINT_SUBTYPE = 3002, TT_POINT_STATION = 3003, TT_POINT_FROM = 3004, TT_POINT_ORIENT = 3005, TT_POINT_XSIZE = 3006, TT_POINT_YSIZE = 3007, TT_POINT_SIZE = 3008, TT_POINT_ALIGN = 3009, TT_POINT_VALUE = 3010, TT_POINT_TEXT = 3011, TT_POINT_SCRAP = 3012, TT_POINT_DIST = 3013, TT_POINT_EXPLORED = 3014, }; /** * point command options parsing table. */ static const thstok thtt_point_opt[] = { {"align", TT_POINT_ALIGN}, {"dist", TT_POINT_DIST}, {"explored", TT_POINT_EXPLORED}, {"from", TT_POINT_FROM}, {"name", TT_POINT_STATION}, {"orient", TT_POINT_ORIENT}, {"orientation", TT_POINT_ORIENT}, {"scrap", TT_POINT_SCRAP}, {"size", TT_POINT_SIZE}, {"station", TT_POINT_STATION}, {"subtype", TT_POINT_SUBTYPE}, {"text", TT_POINT_TEXT}, {"value", TT_POINT_VALUE}, {"x-size", TT_POINT_XSIZE}, {"y-size", TT_POINT_YSIZE}, {NULL, TT_POINT_UNKNOWN}, }; /** * Special point tags. */ enum { // height (passage) tags TT_POINT_TAG_HEIGHT_U = 1, TT_POINT_TAG_HEIGHT_P = 2, TT_POINT_TAG_HEIGHT_N = 4, TT_POINT_TAG_HEIGHT_UQ = 8, TT_POINT_TAG_HEIGHT_PQ = 16, TT_POINT_TAG_HEIGHT_NQ = 32, TT_POINT_TAG_HEIGHT_ALL = TT_POINT_TAG_HEIGHT_U | TT_POINT_TAG_HEIGHT_P | TT_POINT_TAG_HEIGHT_N | TT_POINT_TAG_HEIGHT_UQ | TT_POINT_TAG_HEIGHT_PQ | TT_POINT_TAG_HEIGHT_NQ, // date TT_POINT_TAG_DATE = 1, }; /** * Point types tokens. */ enum { TT_POINT_TYPE_UNKNOWN, // specialne typy TT_POINT_TYPE_U, TT_POINT_TYPE_STATION, TT_POINT_TYPE_SECTION, TT_POINT_TYPE_WATER_FLOW, TT_POINT_TYPE_SPRING, TT_POINT_TYPE_SINK, TT_POINT_TYPE_LABEL, TT_POINT_TYPE_REMARK, TT_POINT_TYPE_ALTITUDE, TT_POINT_TYPE_HEIGHT, TT_POINT_TYPE_PASSAGE_HEIGHT, TT_POINT_TYPE_STATION_NAME, TT_POINT_TYPE_DATE, TT_POINT_TYPE_AIR_DRAUGHT, TT_POINT_TYPE_ENTRANCE, TT_POINT_TYPE_GRADIENT, TT_POINT_TYPE_DIMENSIONS, TT_POINT_TYPE_MAP_CONNECTION, TT_POINT_TYPE_EXTRA, // vystroj TT_POINT_TYPE_NO_EQUIPMENT, TT_POINT_TYPE_ANCHOR, TT_POINT_TYPE_ROPE, TT_POINT_TYPE_FIXED_LADDER, TT_POINT_TYPE_ROPE_LADDER, TT_POINT_TYPE_STEPS, TT_POINT_TYPE_BRIDGE, TT_POINT_TYPE_TRAVERSE, TT_POINT_TYPE_VIA_FERRATA, TT_POINT_TYPE_CAMP, TT_POINT_TYPE_DIG, TT_POINT_TYPE_HANDRAIL, // ukoncenia chodby TT_POINT_TYPE_CONTINUATION, TT_POINT_TYPE_NARROW_END, TT_POINT_TYPE_LOW_END, TT_POINT_TYPE_FLOWSTONE_CHOKE, TT_POINT_TYPE_BREAKDOWN_CHOKE, TT_POINT_TYPE_CLAY_CHOKE, // vypln TT_POINT_TYPE_FLOWSTONE, TT_POINT_TYPE_MOONMILK, TT_POINT_TYPE_STALACTITE, TT_POINT_TYPE_STALAGMITE, TT_POINT_TYPE_PILLAR, TT_POINT_TYPE_CURTAIN, TT_POINT_TYPE_HELICTITE, TT_POINT_TYPE_SODA_STRAW, TT_POINT_TYPE_CRYSTAL, TT_POINT_TYPE_WALL_CALCITE, TT_POINT_TYPE_POPCORN, TT_POINT_TYPE_DISK, TT_POINT_TYPE_GYPSUM, TT_POINT_TYPE_GYPSUM_FLOWER, TT_POINT_TYPE_ARAGONITE, TT_POINT_TYPE_CAVE_PEARL, TT_POINT_TYPE_RIMSTONE_POOL, TT_POINT_TYPE_RIMSTONE_DAM, TT_POINT_TYPE_ANASTOMOSIS, TT_POINT_TYPE_KARREN, TT_POINT_TYPE_SCALLOP, TT_POINT_TYPE_FLUTE, TT_POINT_TYPE_RAFT_CONE, TT_POINT_TYPE_ICE_STALACTITE, TT_POINT_TYPE_ICE_STALAGMITE, TT_POINT_TYPE_ICE_PILLAR, TT_POINT_TYPE_STALACTITES, TT_POINT_TYPE_STALAGMITES, TT_POINT_TYPE_PILLARS, // plosne vyplne TT_POINT_TYPE_BEDROCK, TT_POINT_TYPE_SAND, TT_POINT_TYPE_RAFT, TT_POINT_TYPE_CLAY, TT_POINT_TYPE_PEBBLES, TT_POINT_TYPE_DEBRIS, TT_POINT_TYPE_BLOCKS, TT_POINT_TYPE_WATER, TT_POINT_TYPE_ICE, TT_POINT_TYPE_SNOW, TT_POINT_TYPE_GUANO, TT_POINT_TYPE_CLAY_TREE, // ina vypln TT_POINT_TYPE_ARCHEO_MATERIAL, TT_POINT_TYPE_PALEO_MATERIAL, TT_POINT_TYPE_VEGETABLE_DEBRIS, TT_POINT_TYPE_ROOT, }; /** * Point types parsing table. */ static const thstok thtt_point_types[] = { {"air-draught",TT_POINT_TYPE_AIR_DRAUGHT}, {"altitude",TT_POINT_TYPE_ALTITUDE}, {"anastomosis",TT_POINT_TYPE_ANASTOMOSIS}, {"anchor",TT_POINT_TYPE_ANCHOR}, {"aragonite",TT_POINT_TYPE_ARAGONITE}, {"archeo-material",TT_POINT_TYPE_ARCHEO_MATERIAL}, {"bedrock",TT_POINT_TYPE_BEDROCK}, {"blocks",TT_POINT_TYPE_BLOCKS}, {"breakdown-choke",TT_POINT_TYPE_BREAKDOWN_CHOKE}, {"bridge",TT_POINT_TYPE_BRIDGE}, {"camp",TT_POINT_TYPE_CAMP}, {"cave-pearl",TT_POINT_TYPE_CAVE_PEARL}, {"clay",TT_POINT_TYPE_CLAY}, {"clay-choke",TT_POINT_TYPE_CLAY_CHOKE}, {"clay-tree",TT_POINT_TYPE_CLAY_TREE}, {"continuation",TT_POINT_TYPE_CONTINUATION}, {"crystal",TT_POINT_TYPE_CRYSTAL}, {"curtain",TT_POINT_TYPE_CURTAIN}, {"date",TT_POINT_TYPE_DATE}, {"debris",TT_POINT_TYPE_DEBRIS}, {"dig",TT_POINT_TYPE_DIG}, {"dimensions",TT_POINT_TYPE_DIMENSIONS}, {"disk",TT_POINT_TYPE_DISK}, {"entrance",TT_POINT_TYPE_ENTRANCE}, {"extra",TT_POINT_TYPE_EXTRA}, {"fixed-ladder",TT_POINT_TYPE_FIXED_LADDER}, {"flowstone",TT_POINT_TYPE_FLOWSTONE}, {"flowstone-choke",TT_POINT_TYPE_FLOWSTONE_CHOKE}, {"flute",TT_POINT_TYPE_FLUTE}, {"gradient",TT_POINT_TYPE_GRADIENT}, {"guano",TT_POINT_TYPE_GUANO}, {"gypsum",TT_POINT_TYPE_GYPSUM}, {"gypsum-flower",TT_POINT_TYPE_GYPSUM_FLOWER}, {"handrail",TT_POINT_TYPE_HANDRAIL}, {"height",TT_POINT_TYPE_HEIGHT}, {"helictite",TT_POINT_TYPE_HELICTITE}, {"ice",TT_POINT_TYPE_ICE}, {"ice-pillar",TT_POINT_TYPE_ICE_PILLAR}, {"ice-stalactite",TT_POINT_TYPE_ICE_STALACTITE}, {"ice-stalagmite",TT_POINT_TYPE_ICE_STALAGMITE}, {"karren",TT_POINT_TYPE_KARREN}, {"label",TT_POINT_TYPE_LABEL}, {"low-end",TT_POINT_TYPE_LOW_END}, {"map-connection",TT_POINT_TYPE_MAP_CONNECTION}, {"moonmilk",TT_POINT_TYPE_MOONMILK}, {"narrow-end",TT_POINT_TYPE_NARROW_END}, {"no-equipment",TT_POINT_TYPE_NO_EQUIPMENT}, {"paleo-material",TT_POINT_TYPE_PALEO_MATERIAL}, {"passage-height",TT_POINT_TYPE_PASSAGE_HEIGHT}, {"pebbles",TT_POINT_TYPE_PEBBLES}, {"pillar",TT_POINT_TYPE_PILLAR}, {"pillars",TT_POINT_TYPE_PILLARS}, {"popcorn",TT_POINT_TYPE_POPCORN}, {"raft",TT_POINT_TYPE_RAFT}, {"raft-cone",TT_POINT_TYPE_RAFT_CONE}, {"remark",TT_POINT_TYPE_REMARK}, {"rimstone-dam",TT_POINT_TYPE_RIMSTONE_DAM}, {"rimstone-pool",TT_POINT_TYPE_RIMSTONE_POOL}, {"root",TT_POINT_TYPE_ROOT}, {"rope",TT_POINT_TYPE_ROPE}, {"rope-ladder",TT_POINT_TYPE_ROPE_LADDER}, {"sand",TT_POINT_TYPE_SAND}, {"scallop",TT_POINT_TYPE_SCALLOP}, {"section",TT_POINT_TYPE_SECTION}, {"sink",TT_POINT_TYPE_SINK}, {"snow",TT_POINT_TYPE_SNOW}, {"soda-straw",TT_POINT_TYPE_SODA_STRAW}, {"spring",TT_POINT_TYPE_SPRING}, {"stalactite",TT_POINT_TYPE_STALACTITE}, {"stalactites",TT_POINT_TYPE_STALACTITES}, {"stalagmite",TT_POINT_TYPE_STALAGMITE}, {"stalagmites",TT_POINT_TYPE_STALAGMITES}, {"station", TT_POINT_TYPE_STATION}, {"station-name", TT_POINT_TYPE_STATION_NAME}, {"steps",TT_POINT_TYPE_STEPS}, {"traverse",TT_POINT_TYPE_TRAVERSE}, {"u",TT_POINT_TYPE_U}, {"vegetable-debris",TT_POINT_TYPE_VEGETABLE_DEBRIS}, {"via-ferrata",TT_POINT_TYPE_VIA_FERRATA}, {"wall-calcite",TT_POINT_TYPE_WALL_CALCITE}, {"water",TT_POINT_TYPE_WATER}, {"water-flow",TT_POINT_TYPE_WATER_FLOW}, {NULL, TT_POINT_TYPE_UNKNOWN}, }; /** * Point align tokens. */ enum { TT_POINT_ALIGN_UNKNOWN, TT_POINT_ALIGN_T, TT_POINT_ALIGN_B, TT_POINT_ALIGN_L, TT_POINT_ALIGN_R, TT_POINT_ALIGN_TL, TT_POINT_ALIGN_BL, TT_POINT_ALIGN_TR, TT_POINT_ALIGN_BR, TT_POINT_ALIGN_C, }; /** * Point align parsing table. */ static const thstok thtt_point_aligns[] = { {"b", TT_POINT_ALIGN_B}, {"bl", TT_POINT_ALIGN_BL}, {"bottom", TT_POINT_ALIGN_B}, {"bottom-left", TT_POINT_ALIGN_BL}, {"bottom-right", TT_POINT_ALIGN_BR}, {"br", TT_POINT_ALIGN_BR}, {"c", TT_POINT_ALIGN_C}, {"center", TT_POINT_ALIGN_C}, {"l", TT_POINT_ALIGN_L}, {"left", TT_POINT_ALIGN_L}, {"r", TT_POINT_ALIGN_R}, {"right", TT_POINT_ALIGN_R}, {"t", TT_POINT_ALIGN_T}, {"tl", TT_POINT_ALIGN_TL}, {"top", TT_POINT_ALIGN_T}, {"top-left", TT_POINT_ALIGN_TL}, {"top-right", TT_POINT_ALIGN_TR}, {"tr", TT_POINT_ALIGN_TR}, {NULL, TT_POINT_ALIGN_UNKNOWN}, }; /** * Point subtypes tokens. */ enum { TT_POINT_SUBTYPE_UNKNOWN, TT_POINT_SUBTYPE_TEMP, TT_POINT_SUBTYPE_PAINTED, TT_POINT_SUBTYPE_FIXED, TT_POINT_SUBTYPE_NATURAL, TT_POINT_SUBTYPE_PALEO, TT_POINT_SUBTYPE_PERMANENT, TT_POINT_SUBTYPE_INTERMITTENT, TT_POINT_SUBTYPE_POSITIVE, TT_POINT_SUBTYPE_NEGATIVE, TT_POINT_SUBTYPE_BOTH, TT_POINT_SUBTYPE_UNSIGNED, TT_POINT_SUBTYPE_WINTER, TT_POINT_SUBTYPE_SUMMER, TT_POINT_SUBTYPE_UNDEF, }; /** * Point types parsing table. */ static const thstok thtt_point_subtypes[] = { {"both", TT_POINT_SUBTYPE_BOTH}, {"fixed", TT_POINT_SUBTYPE_FIXED}, {"intermittent", TT_POINT_SUBTYPE_INTERMITTENT}, {"natural", TT_POINT_SUBTYPE_NATURAL}, {"negative", TT_POINT_SUBTYPE_NEGATIVE}, {"painted", TT_POINT_SUBTYPE_PAINTED}, {"paleo", TT_POINT_SUBTYPE_PALEO}, {"permanent", TT_POINT_SUBTYPE_PERMANENT}, {"positive", TT_POINT_SUBTYPE_POSITIVE}, {"summer", TT_POINT_SUBTYPE_SUMMER}, {"temporary", TT_POINT_SUBTYPE_TEMP}, {"undefined", TT_POINT_SUBTYPE_UNDEF}, {"unsigned", TT_POINT_SUBTYPE_UNSIGNED}, {"winter", TT_POINT_SUBTYPE_WINTER}, {NULL, TT_POINT_SUBTYPE_UNKNOWN}, }; /** * point class. */ class thpoint : public th2ddataobject { public: friend class thdb2d; int type, ///< Point type. subtype, ///< Point subtype. align; ///< Point align. double orient, xsize, ysize; ///<... const char * text; ///< Point text. thdb2dpt * point; ///< Point coordinates. class thdb2dcp * cpoint; ///< Control point. thobjectname station_name, ///< Station name. from_name; ///< Extend name. char extend_opts; ///< Extend options. virtual void start_insert(); void parse_type(char * tstr); ///< Parse point type. void parse_align(char * tstr); ///< Parse point align. void parse_subtype(char * ststr); ///< Parse point subtype. void parse_from(char * estr); ///< Parse station extend. void parse_text(char * ss); ///< Parse point text. void parse_explored(char * ss); ///< Parse explored length. void parse_value(char * ss); ///< Parse point value. void check_extra(); /** * Standard constructor. */ thpoint(); /** * Standard destructor. */ ~thpoint(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thpoint";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Export to metapost file. */ virtual bool export_mp(class thexpmapmpxs * out); }; #endif therion-5.4.1/thproj.cxx000066400000000000000000000067301307545355600152460ustar00rootroot00000000000000/** * @file proj.cxx */ /* Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thexception.h" #include "extern/proj4/proj_api.h" #include #include using namespace std; void thcs2utm(string s, signed int zone, double a, double b, double c, double &x, double &y, double &z) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); char ch[50]; sprintf(ch, "+proj=utm +datum=WGS84 +zone=%d", zone); if ((P2 = pj_init_plus(ch))==NULL) therror(("Can't initialize default projection!")); // if (s.find("+proj=latlong") != s.npos) { // // prepocet na radiany tu alebo skoor? // } if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); x = a; y = b; z = c; pj_free(P1); pj_free(P2); } void thcs2cs(string s, string t, double a, double b, double c, double &x, double &y, double &z) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus(t.c_str()))==NULL) therror(("Can't initialize output projection!")); // if (s.find("+proj=latlong") != s.npos) { // // prepocet na radiany tu alebo skoor? // } // assert (t.find("+proj=latlong") == t.npos); if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); x = a; y = b; z = c; pj_free(P1); pj_free(P2); } signed int thcs2zone(string s, double a, double b, double c) { projPJ P1, P2; if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus("+proj=latlong +datum=WGS84"))==NULL) therror(("Can't initialize default projection!")); if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); pj_free(P1); pj_free(P2); return (int) (a*180/3.1415926536+180)/6 + 1; } double thcsconverg(string s, double a, double b) { projPJ P1, P2; double c = 0; double x = a, y = b; assert (s.find("+proj=latlong") == s.npos); if ((P1 = pj_init_plus(s.c_str()))==NULL) therror(("Can't initialize input projection!")); if ((P2 = pj_init_plus("+proj=latlong +datum=WGS84"))==NULL) therror(("Can't initialize default projection!")); //cout << a << " " << b << endl; if (pj_transform(P1,P2,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); b += 1e-6; if (pj_transform(P2,P1,1,0,&a,&b,&c) != 0) therror(("Can't transform projections!")); //cout << a << " " << b << endl; pj_free(P1); pj_free(P2); return atan2(a-x,b-y)/3.1415926536*180; } therion-5.4.1/thproj.h000066400000000000000000000024171307545355600146710ustar00rootroot00000000000000/* * Copyright (C) 2006 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thproj_h #define thproj_h #include void thcs2utm(std::string, signed int, double, double, double, double &, double &, double &); void thcs2cs(std::string, std::string, double, double, double, double &, double &, double &); signed int thcs2zone(std::string, double, double, double); double thcsconverg(std::string, double, double); #endif therion-5.4.1/threpair-files000077500000000000000000000010551307545355600160530ustar00rootroot00000000000000#!/usr/bin/tclsh proc repair_file {fnm} { puts "repairing file $fnm" set fid [open $fnm r] set fdt [read $fid] close $fid set fid [open $fnm w] fconfigure $fid -translation {auto lf} puts -nonewline $fid $fdt close $fid } proc scan_directory {dnm} { puts "scanning directory $dnm" set files [glob -nocomplain -directory $dnm *.th *.th2 *.th3 *.thcfg thconfig*] set dirs [glob -nocomplain -directory $dnm -type d *] foreach sfl $files { repair_file $sfl } foreach sdr $dirs { scan_directory $sdr } } scan_directory . therion-5.4.1/thscrap.cxx000066400000000000000000001315671307545355600154130ustar00rootroot00000000000000/** * @file thscrap.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrap.h" #include "thexception.h" #include "thchenc.h" #include "thtflength.h" #include "thinfnan.h" #include "thdb1d.h" #include "thdb2d.h" #include "thdb2dmi.h" #include "th2ddataobject.h" #include "thline.h" #include "thpoint.h" #include "thscrapis.h" #include "thsurvey.h" #include "thsymbolset.h" #include "thsketch.h" #include "thcsdata.h" #ifdef THMSVC #define hypot _hypot #endif #define EXPORT3D_INVISIBLE true thscrap::thscrap() { this->fs2doptr = NULL; this->ls2doptr = NULL; this->fcpp = NULL; this->lcpp = NULL; this->ncp = 0; this->proj = thdb.db2d.get_default_projection(); this->proj_next_scrap = NULL; this->proj_prev_scrap = NULL; this->xscrap = NULL; this->R = 1.0; this->G = 1.0; this->B = 1.0; this->z = thnan; this->a = thnan; this->flip = TT_SCRAP_FLIP_NONE; this->scale = 1.0; this->scale_r1x = 0.0; this->scale_r1y = 0.0; this->scale_r2x = 1.0; this->scale_r2y = 0.0; this->scale_p1x = 0.0; this->scale_p1y = 0.0; this->scale_p2x = 1.0; this->scale_p2y = 0.0; this->scale_p9 = false; this->reset_limits(); this->reset_transformation(); this->outline_parsed = false; this->outline_first = NULL; this->ends_parsed = false; this->exported = false; this->ends_first = NULL; this->polygon_parsed = false; this->polygon_first = NULL; this->polygon_last = NULL; this->d3 = TT_AUTO; this->d3_parsed = false; this->maxdist = 0.0; this->avdist = 0.0; this->maxdistp1 = NULL; this->maxdistp2 = NULL; this->centerline_survey = NULL; this->centerline_io = false; } thscrap::~thscrap() { } int thscrap::get_class_id() { return TT_SCRAP_CMD; } bool thscrap::is(int class_id) { if (class_id == TT_SCRAP_CMD) return true; else return thdataobject::is(class_id); } int thscrap::get_cmd_nargs() { return 1; } const char * thscrap::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thscrap::get_cmd_name() { // insert command name here return "scrap"; } thcmd_option_desc thscrap::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_scrap_opt); if (id == TT_SCRAP_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch (id) { case TT_SCRAP_SKETCH: return thcmd_option_desc(id,3); default: return thcmd_option_desc(id); } } static const thstok thtt_scrap_flips[] = { {"horiz", TT_SCRAP_FLIP_HORIZ}, {"horizontal", TT_SCRAP_FLIP_HORIZ}, {"none", TT_SCRAP_FLIP_NONE}, {"vert", TT_SCRAP_FLIP_VERT}, {"vertical", TT_SCRAP_FLIP_VERT}, {NULL, TT_SCRAP_FLIP_UNKNOWN}, }; void thscrap::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thdb2dprjpr projection; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { // case TT_DATAOBJECT_NAME: // if (th_is_keyword(*args)) // this->name = this->db->strstore(*args); // else // ththrow(("invalid keyword -- %s", *args)); // break; case TT_SCRAP_PROJECTION: projection = this->db->db2d.parse_projection(*args); if (!projection.parok) ththrow(("invalid parameters of projection")); this->proj = projection.prj; break; case TT_SCRAP_SCALE: this->parse_scale(*args); break; case TT_SCRAP_STATIONS: this->parse_stations(*args); break; case TT_SCRAP_3D: this->d3 = thmatch_token(*args, thtt_onoffauto); if (this->d3 == TT_UNKNOWN_BOOL) ththrow(("invalid -3d switch -- %s", *args)); break; case TT_SCRAP_FLIP: this->flip = thmatch_token(*args, thtt_scrap_flips); if (this->flip == TT_SCRAP_FLIP_UNKNOWN) ththrow(("invalid -flip switch -- %s", *args)); break; case TT_SCRAP_SKETCH: this->parse_sketch(args, argenc); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thscrap::self_delete() { delete this; } void thscrap::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thscrap:\n"); fprintf(outf,"\tprojection: %d\n",this->proj->id); fprintf(outf,"\tscale: %f\n",this->scale); fprintf(outf,"\tz: %f\n",this->z); fprintf(outf,"\ta: %f\n",this->a); // insert intended print of object properties here } void thscrap::parse_scale(char * ss) { thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(); char ** pars = this->db->db2d.mbf.get_buffer(); if ((npar < 1) || ((npar > 3) && (npar != 8) && (npar != 9))) ththrow(("invalid number of scale arguments -- %d",npar)) double n1 = 1.0, n2 = 1.0; bool p9 = false; int sv, ux = 0, n2x = 0; thtflength lentf; switch (npar) { case 2: ux = 1; break; case 3: ux = 2; n2x = 1; break; case 9: ux = 8; case 8: p9 = true; break; } this->scale_p9 = p9; #define parse_scalep9(var,parn) \ thparse_double(sv,var,pars[parn]); \ if (sv != TT_SV_NUMBER) \ ththrow(("real number required -- %s", pars[parn])); if (ux > 0) { lentf.parse_units(pars[ux]); } if (p9) { // thparse_double(sv,this->scale_r1x,pars[0]); // if ((sv != TT_SV_NUMBER) || (n1 <= 0.0)) // ththrow(("real positive number required -- %s", pars[0])); parse_scalep9(this->scale_p1x,0) parse_scalep9(this->scale_p1y,1) parse_scalep9(this->scale_p2x,2) parse_scalep9(this->scale_p2y,3) if (this->cs == TTCS_LOCAL) { parse_scalep9(this->scale_r1x,4) parse_scalep9(this->scale_r1y,5) parse_scalep9(this->scale_r2x,6) parse_scalep9(this->scale_r2y,7) if (ux > 0) { this->scale_r1x = lentf.transform(this->scale_r1x); this->scale_r1y = lentf.transform(this->scale_r1y); this->scale_r2x = lentf.transform(this->scale_r2x); this->scale_r2y = lentf.transform(this->scale_r2y); } } else { this->convert_cs(pars[4], pars[5], this->scale_r1x, this->scale_r1y); this->convert_cs(pars[6], pars[7], this->scale_r2x, this->scale_r2y); } if (hypot(this->scale_r1x - this->scale_r2x, this->scale_r1y - this->scale_r2y) == 0.0) ththrow(("zero scale real length")); if (hypot(this->scale_p1x - this->scale_p2x, this->scale_p1y - this->scale_p2y) == 0.0) ththrow(("zero scale picture length")); } else { // let's parse first number thparse_double(sv,n1,pars[0]); if ((sv != TT_SV_NUMBER) || (n1 <= 0.0)) ththrow(("real positive number required -- %s", pars[0])); // let's parse second number if (n2x > 0) { thparse_double(sv,n2,pars[n2x]); if ((sv != TT_SV_NUMBER) || (n2 <= 0.0)) ththrow(("real positive number required -- %s", pars[0])); n1 = n2 / n1; if (ux > 0) n1 = lentf.transform(n1); } this->scale = n1; } } thdb2dcp * thscrap::insert_control_point() { thdb2dcp * cp = this->db->db2d.insert_control_point(); if (this->fcpp == NULL) { this->fcpp = cp; this->lcpp = cp; this->ncp = 1; } else { cp->prevcp = this->lcpp; this->lcpp->nextcp = cp; this->lcpp = cp; this->ncp++; } return cp; } void thscrap::reset_limits() { this->lxmin = thnan; this->lxmax = thnan; this->lymin = thnan; this->lymax = thnan; } void thscrap::reset_transformation() { this->mx = 0.0; this->my = 0.0; this->mxx = 1.0; this->mxy = 0.0; this->myx = 0.0; this->myy = 1.0; this->mr = 0.0; this->ms = 1.0; } thscraplo * thscrap::get_outline() { if (this->outline_parsed) return this->outline_first; //if (!this->proj->processed) // this->db->db2d.process_projection(this->proj); this->outline_parsed = true; #ifdef THDEBUG thprintf("\n\nscanning outline: scrap %s\n",this->name); #endif th2ddataobject * obj = this->fs2doptr; // thline * pln; thscraplo * co, * co2, * co3, * co3last, * lo = NULL, ** pco3; double cdist, mindist; while (obj != NULL) { #ifdef THDEBUG if (obj->get_class_id() == TT_LINE_CMD) thprintf("%d [%s]\n", obj->id, obj->name); #endif if ((obj->get_class_id() == TT_LINE_CMD) && (((thline *)obj)->first_point != NULL) && ((((thline *)obj)->outline == TT_LINE_OUTLINE_IN) || (((thline *)obj)->outline == TT_LINE_OUTLINE_OUT))) { #ifdef THDEBUG thprintf("inserting line - %d [%s]\n", obj->id, obj->name); #endif co = this->db->db2d.insert_scraplo(); co->line = (thline *) obj; if (this->outline_first == NULL) { this->outline_first = co; lo = co; } else { // vzdialenost moojho konca od zaciatku mindist = hypot(co->line->last_point->point->x - co->line->first_point->point->x, co->line->last_point->point->y - co->line->first_point->point->y); if ((this->outline_first->line->outline == TT_LINE_OUTLINE_IN) && (((thline *)obj)->outline == TT_LINE_OUTLINE_OUT)) { co->next_scrap_line = this->outline_first; this->outline_first = co; } else { // poojdeme odpredu co3 = this->outline_first; pco3 = &(this->outline_first); while (co3 != NULL) { if ((co3->line->outline == co->line->outline) && (hypot(co3->line->last_point->point->x - co3->line->first_point->point->x, co3->line->last_point->point->y - co3->line->first_point->point->y) < mindist)) { co->next_scrap_line = co3; *pco3 = co; break; } pco3 = &(co3->next_scrap_line); co3 = co3->next_scrap_line; if (co3 == NULL) { lo->next_scrap_line = co; lo = co; } } } } } obj = obj->nscrapoptr; } co = this->outline_first; while (co != NULL) { if (co->line->is_closed) { co->lfreefirst = false; co->lfreelast = false; } co2 = co->next_scrap_line; while (co2 != NULL && (co->lfreefirst || co->lfreelast)) { if ((co2->line->outline == co->line->outline) && (co2->lfreefirst || co2->lfreelast)) { if (co->lfreefirst && co2->lfreefirst && (co->line->first_point->point->x == co2->line->first_point->point->x) && (co->line->first_point->point->y == co2->line->first_point->point->y)) { co->lfreefirst = false; co2->lfreefirst = false; #ifdef THDEBUG thprintf("\tJOIN F-F: %.2f,%.2f\n", co->line->first_point->point->x, co->line->first_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreefirst && co2->lfreelast && (co->line->first_point->point->x == co2->line->last_point->point->x) && (co->line->first_point->point->y == co2->line->last_point->point->y)) { co->lfreefirst = false; co2->lfreelast = false; #ifdef THDEBUG thprintf("\tJOIN F-L: %.2f,%.2f\n", co->line->first_point->point->x, co->line->first_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreelast && co2->lfreefirst && (co->line->last_point->point->x == co2->line->first_point->point->x) && (co->line->last_point->point->y == co2->line->first_point->point->y)) { co->lfreelast = false; co2->lfreefirst = false; #ifdef THDEBUG thprintf("\tJOIN L-F: %.2f,%.2f\n", co->line->last_point->point->x, co->line->last_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } if (co->lfreelast && co2->lfreelast && (co->line->last_point->point->x == co2->line->last_point->point->x) && (co->line->last_point->point->y == co2->line->last_point->point->y)) { co->lfreelast = false; co2->lfreelast = false; #ifdef THDEBUG thprintf("\tJOIN L-L: %.2f,%.2f\n", co->line->last_point->point->x, co->line->last_point->point->y); thprintf("\t%d -- %d\n", co->line->id, co2->line->id); #endif } } co2 = co2->next_scrap_line; } co = co->next_scrap_line; } bool still_in_line, co3_normal = false; thdb2dpt * first_pt, * last_pt; if (this->outline_first != NULL) { co = this->outline_first; while (co != NULL) { first_pt = co->line->first_point->point; last_pt = co->line->last_point->point; co->mode = TT_OUTLINE_NORMAL; #ifdef THDEBUG thprintf("\tfirst line: %d [%s] - mode %d\n",co->line->id, co->line->name, co->line->outline); #endif still_in_line = !(co->line->is_closed); co3 = co; bool search_all; while (still_in_line) { mindist = hypot(last_pt->x - first_pt->x, last_pt->y - first_pt->y); co2 = co->next_scrap_line; search_all = false; co3last = co3; co3 = NULL; while (co2 != NULL) { if ((co2->mode == TT_OUTLINE_NO) && (co2->line->outline == co->line->outline)) { if ((co2->line->last_point->point->x == last_pt->x) && (co2->line->last_point->point->y == last_pt->y)) { co3_normal = false; co3 = co2; mindist = 0.0; } if (search_all || co2->lfreelast) { cdist = hypot(co2->line->last_point->point->x - last_pt->x, co2->line->last_point->point->y - last_pt->y); if (cdist <= mindist) { co3_normal = false; co3 = co2; mindist = cdist; } } if ((co2->line->first_point->point->x == last_pt->x) && (co2->line->first_point->point->y == last_pt->y)) { co3_normal = true; co3 = co2; mindist = 0.0; } if (search_all || co2->lfreefirst) { cdist = hypot(co2->line->first_point->point->x - last_pt->x, co2->line->first_point->point->y - last_pt->y); if (cdist <= mindist) { co3_normal = true; co3 = co2; mindist = cdist; } } } co2 = co2->next_scrap_line; if ((co2 == NULL) && (!search_all) && (co3 == NULL)) { co2 = co->next_scrap_line; search_all = true; #ifdef THDEBUG thprintf("\tsearch all\n"); #endif } } if (co3 == NULL) still_in_line = false; else { co3last->next_line = co3; #ifdef THDEBUG thprintf("\tnext line: %d [%s] %s\n", co3->line->id, co3->line->name, (co3_normal ? "normal" : "reversed")); #endif if (co3_normal) { co3->mode = TT_OUTLINE_NORMAL; last_pt = co3->line->last_point->point; } else { co3->mode = TT_OUTLINE_REVERSED; last_pt = co3->line->first_point->point; } } } // podme na dalsi co2 = co->next_scrap_line; while ((co2 != NULL) && (co2->mode != TT_OUTLINE_NO)) co2 = co2->next_scrap_line; co->next_outline = co2; co = co2; } } return this->outline_first; } // get_outline thscraplp * thscrap::polygon_insert(thscraplp * before) { thscraplp * rv = this->db->db2d.insert_scraplp(); if (before == NULL) { if (this->polygon_last == NULL) { this->polygon_first = rv; this->polygon_last = rv; } else { this->polygon_last->next_item = rv; rv->prev_item = this->polygon_last; this->polygon_last = rv; } } else { if (before->prev_item == NULL) this->polygon_first = rv; else before->prev_item->next_item = rv; rv->prev_item = before->prev_item; before->prev_item = rv; rv->next_item = before; } return rv; } void thscrap::parse_stations(char * ss) { thsplit_words(& this->db->db2d.mbf,ss); int npar = this->db->db2d.mbf.get_size(), ipar = 0; char ** pars = this->db->db2d.mbf.get_buffer(); thscraplp * lp; while (ipar < npar) { lp = this->polygon_insert(); thparse_objectname(lp->station_name,&(this->db->buff_stations),*pars); pars++; ipar++; } } thscraplp * thscrap::get_polygon() { if (this->polygon_parsed) return this->polygon_first; if (!this->proj->processed) this->db->db2d.process_projection(this->proj); double sina = 0.0, cosa = 0.0; switch (this->proj->type) { case TT_2DPROJ_ELEV: sina = sin(this->proj->pp1 / 180.0 * 3.14159265358); cosa = cos(this->proj->pp1 / 180.0 * 3.14159265358); break; } bool incp; thdb2dcp * cp; thscraplp * lp, * nlp; thdb1ds * st, * st1, * st2; size_t i, ni = this->db->db1d.station_vec.size(), nlegs = this->db->db1d.leg_vec.size(); thdataleg * cl; bool ffselect, ttselect; thdb1ds * ffst, * ttst; thdb1d_tree_arrow * arrow; double newx; thdb1d_tree_node * nodes = this->db->db1d.get_tree_nodes(), * cnode; for(i = 0; i < ni; i++) { this->db->db1d.station_vec[i].tmpselect = false; } if (this->centerline_io) { // povkladame vsetky meracske body if (this->proj->type == TT_2DPROJ_EXTEND) { // scan all shots and add stations for each shot for (i = 0; i < nlegs; i++) { cl = this->db->db1d.leg_vec[i].leg; #define set_ffst_ttst { \ ffst = &(this->db->db1d.station_vec[cl->from.id - 1]); \ ttst = &(this->db->db1d.station_vec[cl->to.id - 1]); \ } set_ffst_ttst; ffselect = ((this->centerline_survey == NULL) && (ffst->survey->selected)); ttselect = ((this->centerline_survey == NULL) && (ttst->survey->selected)); ffselect = ffselect || ((this->centerline_survey != NULL) && (ffst->survey->is_in_survey(this->centerline_survey))); ttselect = ttselect || ((this->centerline_survey != NULL) && (ttst->survey->is_in_survey(this->centerline_survey))); if ((cl->extend & TT_EXTENDFLAG_HIDE) == 0) { if ((ffselect && ttselect) || (cl->psurvey->is_in_survey(this->centerline_survey))) { ffst->tmpselect = true; ttst->tmpselect = true; } } } } else { for(i = 0; i < ni; i++) { st = &(this->db->db1d.station_vec[i]); if (((this->centerline_survey != NULL) && (st->survey->is_in_survey(this->centerline_survey))) || ((this->centerline_survey == NULL) && (st->survey->selected))) { st->tmpselect = true; } } for (i = 0; i < nlegs; i++) { cl = this->db->db1d.leg_vec[i].leg; //if (((cl->extend & TT_EXTENDFLAG_HIDE) == 0) && (cl->psurvey->is_in_survey(this->centerline_survey))) { if ((cl->psurvey->is_in_survey(this->centerline_survey))) { this->db->db1d.station_vec[cl->from.id - 1].tmpselect = true; this->db->db1d.station_vec[cl->to.id - 1].tmpselect = true; } } } // other projections // enter selected stations for(i = 0; i < ni; i++) { st = &(this->db->db1d.station_vec[i]); if (st->tmpselect && !st->is_temporary()) { lp = this->polygon_insert(); lp->station = st; lp->ustation = st; lp->station_name.id = (unsigned long)i+1; lp->station_name.name = st->name; lp->station_name.psurvey = st->survey; this->insert_adata(st); } } } switch (this->proj->type) { case TT_2DPROJ_PLAN: case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: incp = true; lp = NULL; cp = this->fcpp; while (incp || (lp != NULL)) { if (incp && (cp == NULL)) { incp = false; lp = this->polygon_first; } if ((cp != NULL) || (lp != NULL)) { if (lp != NULL) { st = lp->ustation; if (st != NULL) { switch (this->proj->type) { case TT_2DPROJ_EXTEND: cnode = &(nodes[st->uid - 1]); lp->stx = cnode->extendx - this->proj->shift_x; lp->sty = st->z - this->proj->shift_z; lp->stz = 0.0; arrow = cnode->first_arrow; while (arrow != NULL) { newx = (arrow->is_reversed ? arrow->leg->leg->txx : arrow->leg->leg->fxx) - this->proj->shift_x; if (((arrow->leg->leg->extend & TT_EXTENDFLAG_HIDE) == 0) && (newx != lp->stx)) { nlp = this->polygon_insert(lp); nlp->station = st; nlp->ustation = st; nlp->station_name.id = st->uid; nlp->station_name.name = st->name; nlp->station_name.psurvey = st->survey; nlp->stx = newx - this->proj->shift_x; nlp->sty = st->z - this->proj->shift_z; nlp->stz = 0.0; thscraplp * olp; olp = nlp; nlp = this->polygon_insert(lp); nlp->lnio = true; nlp->type = SYML_MAPCONNECTION; nlp->lnx1 = lp->stx; nlp->lny1 = lp->sty; nlp->lnz1 = lp->stz; nlp->lnx2 = olp->stx; nlp->lny2 = olp->sty; nlp->lnz2 = olp->stz; } arrow = arrow->next_arrow; } break; case TT_2DPROJ_PLAN: lp->stx = st->x - this->proj->shift_x; lp->sty = st->y - this->proj->shift_y; lp->stz = st->z - this->proj->shift_z; break; case TT_2DPROJ_ELEV: lp->stx = cosa * (st->x - this->proj->shift_x) - sina * (st->y - this->proj->shift_y); lp->sty = st->z - this->proj->shift_z; lp->stz = sina * (st->x - this->proj->shift_x) + cosa * (st->y - this->proj->shift_y); break; } lp->station_name.name = st->name; this->update_limits(lp->stx, lp->sty); } } else st = cp->st; if ((st != NULL) && (nodes != NULL)) { // let's process each arrow from this point arrow = nodes[st->uid - 1].first_arrow; while (arrow != NULL) { // if ((((this->centerline_survey != NULL) && (arrow->leg->survey->is_in_survey(this->centerline_survey))) || // ((this->centerline_survey == NULL) && (arrow->leg->survey->selected))) && // ((this->proj->type != TT_2DPROJ_EXTEND) || ((arrow->leg->leg->extend & TT_EXTENDFLAG_IGNORE) == 0))) { if (((((this->centerline_survey != NULL) && (arrow->leg->survey->is_in_survey(this->centerline_survey))) || ((this->centerline_survey == NULL) && (arrow->leg->survey->selected)))) && ((this->proj->type != TT_2DPROJ_EXTEND) || ((arrow->leg->leg->extend & TT_EXTENDFLAG_HIDE) == 0))) { // process arrow here nlp = this->polygon_insert(); nlp->lnio = true; nlp->arrow = arrow; nlp->type = (((arrow->leg->leg->flags & TT_LEGFLAG_SURFACE) != 0) ? SYML_SURVEY_SURFACE : SYML_SURVEY_CAVE); st1 = &(this->db->db1d.station_vec[arrow->start_node->uid - 1]); st2 = &(this->db->db1d.station_vec[arrow->end_node->uid - 1]); switch (this->proj->type) { case TT_2DPROJ_EXTEND: nlp->lnx1 = (arrow->is_reversed ? arrow->leg->leg->txx : arrow->leg->leg->fxx) - this->proj->shift_x; nlp->lny1 = st1->z - this->proj->shift_z; nlp->lnz1 = 0.0; nlp->lnx2 = (arrow->is_reversed ? arrow->leg->leg->fxx : arrow->leg->leg->txx) - this->proj->shift_x; nlp->lny2 = st2->z - this->proj->shift_z; nlp->lnz2 = 0.0; break; case TT_2DPROJ_PLAN: nlp->lnx1 = st1->x - this->proj->shift_x; nlp->lny1 = st1->y - this->proj->shift_y; nlp->lnz1 = st1->z - this->proj->shift_z; nlp->lnx2 = st2->x - this->proj->shift_x; nlp->lny2 = st2->y - this->proj->shift_y; nlp->lnz2 = st2->z - this->proj->shift_z; break; case TT_2DPROJ_ELEV: nlp->lnx1 = cosa * (st1->x - this->proj->shift_x) - sina * (st1->y - this->proj->shift_y); nlp->lny1 = st1->z - this->proj->shift_z; nlp->lnz1 = sina * (st1->x - this->proj->shift_x) + cosa * (st1->y - this->proj->shift_y); nlp->lnx2 = cosa * (st2->x - this->proj->shift_x) - sina * (st2->y - this->proj->shift_y); nlp->lny2 = st2->z - this->proj->shift_z; nlp->lnz2 = sina * (st2->x - this->proj->shift_x) + cosa * (st2->y - this->proj->shift_y); break; } } arrow = arrow->next_arrow; } } } if (cp != NULL) { cp = cp->nextcp; } if (lp != NULL) { lp = lp->next_item; } } break; // case TT_2DPROJ_EXTEND: // cp = this->fcpp; // while (cp != NULL) { // if (cp->used_in_attachement) { // nlp = this->polygon_insert(); // nlp->lnio = true; // nlp->lnx1 = cp->tx; // nlp->lny1 = cp->ty; // nlp->lnz1 = 0.0; // nlp->lnx2 = cp->point->extend_point->cpoint->tx; // nlp->lny2 = cp->point->extend_point->cpoint->ty; // nlp->lnz2 = 0.0; // } // cp = cp->nextcp; // } // break; } this->polygon_parsed = true; return this->polygon_first; } void thscrap::calc_z() { thdb2dcp * cp = this->fcpp; this->z = 0.0; this->a = 0.0; unsigned long numcp = 0; while(cp != NULL) { if (cp->st != NULL) { this->z += cp->tz; this->a += cp->ta; numcp++; } cp = cp->nextcp; } if (numcp > 0) { this->z /= double(numcp); this->a /= double(numcp); } else { this->z = thnan; this->a = thnan; } } thdb1ds * thscrap::get_nearest_station(thdb2dpt * pt) { double mindist, cdist; thdb1ds * res = NULL; mindist = -1.0; // skusi kontrolne body thdb2dcp * cp = this->fcpp; while(cp != NULL) { if (cp->st != NULL) { cdist = hypot(cp->pt->xt - pt->xt,cp->pt->yt - pt->yt); if ((cdist < mindist) || (mindist < 0.0)) { res = cp->st; mindist = cdist; } } cp = cp->nextcp; } // skusi pridany polygon thscraplp * lp = this->polygon_first; while(lp != NULL) { if (lp->station != NULL) { cdist = hypot(lp->stx - pt->xt,lp->sty - pt->yt); if ((cdist < mindist) || (mindist < 0.0)) { res = lp->station; mindist = cdist; } } lp = lp->next_item; } return res; } thscrapen * thscrap::get_ends() { if (this->ends_parsed) return this->ends_first; bool search_inv, cont, rev, lastvis, cvis = false, try_next_line; thdb2dlp * first_point, * clp; thscrapen * res = NULL, * cres; thscraplo * lo = this->get_outline(), * lo2, * nextlo; #ifdef THDEBUG thprintf("\nscaning ends: %s\n", this->name); #endif while (lo != NULL) { if (lo->line->outline != TT_LINE_OUTLINE_NONE) { lo2 = lo; #ifdef THDEBUG thprintf("\toutline from: %d -- mode %d\n", lo->line->id, lo->line->outline); #endif search_inv = true; cont = true; first_point = NULL; lastvis = (lo->mode == TT_OUTLINE_REVERSED ? ((lo->line->last_point->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo->line->type == TT_LINE_TYPE_WALL)) : ((lo->line->first_point->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo->line->type == TT_LINE_TYPE_WALL))); while (cont) { if ((lo2 == NULL) && (first_point != NULL)) lo2 = lo; if (lo2 == NULL) break; // teraz podme po bodoch krivky rev = (lo2->mode == TT_OUTLINE_REVERSED); if (rev) clp = lo2->line->last_point; else clp = lo2->line->first_point; while (cont && (clp != NULL)) { // urcime sucanu viditelnost try_next_line = false; if (rev) { if (clp->prevlp != NULL) cvis = ((clp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo2->line->type == TT_LINE_TYPE_WALL)); else try_next_line = true; } else { if (clp->nextlp != NULL) cvis = ((clp->subtype != TT_LINE_SUBTYPE_INVISIBLE) && (lo2->line->type == TT_LINE_TYPE_WALL)); else try_next_line = true; } // skusi nasledovnu ciaru if (try_next_line) { cvis = true; if (lo2->next_line != NULL) nextlo = lo2->next_line; else nextlo = lo; // ak je dalsia normalne natocena if (nextlo->mode == TT_OUTLINE_REVERSED) { if ((nextlo->line->last_point->point->x != clp->point->x) || (nextlo->line->last_point->point->y != clp->point->y)) cvis = false; else if ((nextlo->line->last_point->prevlp != NULL) && ((nextlo->line->last_point->prevlp->subtype == TT_LINE_SUBTYPE_INVISIBLE) || (nextlo->line->type != TT_LINE_TYPE_WALL))) cvis = false; } else { if ((nextlo->line->first_point->point->x != clp->point->x) || (nextlo->line->first_point->point->y != clp->point->y)) cvis = false; else if ((nextlo->line->first_point->subtype == TT_LINE_SUBTYPE_INVISIBLE) || (nextlo->line->type != TT_LINE_TYPE_WALL)) cvis = false; } } // zistime ci mame bod if ((cvis != lastvis) && (search_inv != cvis)) { // mame bod, teraz ho priradime if (search_inv) { cres = this->db->db2d.insert_scrapen(); if (first_point != clp) { if (res == NULL) res = cres; else { cres->next_end = res; res = cres; } res->l1 = lo2->line; res->lp1 = clp; } else cont = false; if (first_point == NULL) first_point = clp; } else { res->l2 = lo2->line; res->lp2 = clp; } search_inv = !search_inv; } // podme na dalsi bod if (rev) clp = clp->prevlp; else clp = clp->nextlp; lastvis = cvis; } lo2 = lo2->next_line; } } lo = lo->next_outline; } this->ends_parsed = true; this->ends_first = res; return res; } void thscrap::insert_adata(class thdb1ds * as) { // najde ci dane data uz mame if (as->data.empty()) return; thmapstat_dataptr temp; for(std::list::iterator it = as->data.begin(); it != as->data.end(); it++) { temp.ptr = *it; thmapstat_datamap::iterator di = this->adata.find(temp); if (di == adata.end()) { this->adata[temp] = 1; } else { di->second++; } } } void thscrap::process_3d() { if (this->d3_parsed) return; this->d3_parsed = true; thprintf("."); thscrapis is(this); #ifndef THSCRAPIS_NEW3D thscraplp * slp; th2ddataobject * o2; thpoint * pp; // vlozi vsetky meracske body (body + body z polygonu) slp = this->get_polygon(); while (slp != NULL) { if (!slp->lnio) { is.insert_bp(slp->stx, slp->sty, slp->stz); } slp = slp->next_item; } o2 = this->fs2doptr; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if (pp->station_name.id != 0) { is.insert_bp(pp->point->xt, pp->point->yt, pp->point->zt); } } o2 = o2->nscrapoptr; } // koniec vkladania is.end_bp(); // vlozi vsetky smerniky na zaklade shotov slp = this->get_polygon(); while (slp != NULL) { if (slp->lnio) { is.insert_bp_direction(slp->lnx1, slp->lny1, slp->lnz1, slp->lnx2, slp->lny2, slp->lnz2, slp); } slp = slp->next_item; } // koniec vkladania is.end_bp_direction(); // povklada medzibody na shotoch slp = this->get_polygon(); while (slp != NULL) { if (slp->lnio) { is.insert_bp_shot(slp->lnx1, slp->lny1, slp->lnz1, slp->lnx2, slp->lny2, slp->lnz2); } slp = slp->next_item; } #endif is.outline_scan(this->get_outline()); #ifndef THSCRAPIS_NEW3D // prejde vsetky objekty a nasackuje passage-heights o2 = this->fs2doptr; double cup, cdown; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if ((pp->type == TT_POINT_TYPE_PASSAGE_HEIGHT) && ((pp->tags & TT_POINT_TAG_HEIGHT_U) != 0) && (!thisnan(pp->xsize))) { cdown = pp->xsize / 1.618; if (cdown > 1.618) cdown = 1.618; cup = pp->xsize - cdown; is.insert_dim(pp->point->xt, pp->point->yt, cup, cdown); } else if ((pp->type == TT_POINT_TYPE_DIMENSIONS) && (!thisnan(pp->xsize)) && (!thisnan(pp->ysize))) { is.insert_dim(pp->point->xt, pp->point->yt, pp->xsize, pp->ysize); } } o2 = o2->nscrapoptr; } is.insert_bp_dim(); is.outline_interpolate_dims(); #endif thscrapisolpt * oline, * olineln, * prevolineln = NULL; bool started = false; #ifndef THSCRAPIS_NEW3D double normx, normy, norml; // povkladame vsetky body na outlineoch for(oline = is.firstolseg; oline != NULL; oline = oline->next_segment) { for(olineln = oline; olineln != NULL; olineln = olineln->next) { olineln->vx3dup = this->d3_outline.insert_vertex( olineln->x + this->proj->shift_x, olineln->y + this->proj->shift_y, olineln->zu + this->proj->shift_z); olineln->vx3ddn = this->d3_outline.insert_vertex( olineln->x + this->proj->shift_x, olineln->y + this->proj->shift_y, olineln->zd + this->proj->shift_z); } } oline = is.firstolseg; thdb3dfc * cfc = NULL; thdb3dfx * cfx, * cfx2; while (oline != NULL) { started = false; olineln = oline->next; while (olineln != NULL) { if (EXPORT3D_INVISIBLE || olineln->visible) { normx = olineln->y - olineln->prev->y; normy = olineln->prev->x - olineln->x; norml = hypot(normx, normy); if (!started) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); cfx = cfc->insert_vertex(olineln->prev->vx3dup); cfx2 = cfc->insert_vertex(olineln->prev->vx3ddn); if (norml > 0.0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } started = true; } cfx = cfc->insert_vertex(olineln->vx3dup); cfx2 = cfc->insert_vertex(olineln->vx3ddn); if (norml > 0.0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } } else { if (started) { started = false; } } prevolineln = olineln; olineln = olineln->next; } if ((oline->next != NULL) && (EXPORT3D_INVISIBLE || oline->visible)) { if (!started && (prevolineln != NULL)) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); } if (prevolineln != NULL) { normx = oline->y - prevolineln->y; normy = prevolineln->x - oline->x; norml = hypot(normx, normy); } else { normx = 1.0; normy = 1.0; norml = sqrt(2.0); } if (!started && (prevolineln != NULL)) { cfx = cfc->insert_vertex(prevolineln->vx3dup); cfx2 = cfc->insert_vertex(prevolineln->vx3ddn); if (norml > 0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } started = true; } cfx = cfc->insert_vertex(oline->vx3dup); cfx2 = cfc->insert_vertex(oline->vx3ddn); if (norml > 0) { cfx->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); cfx2->vertex->insert_normal(normx / norml, normy / norml, 0.0); } } oline = oline->next_segment; } int i, j; double vx, vy, vz, wx, wy, wz, nx, ny, nz, nl; if (is.tri_num > 0) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLES); for(i = 0; i < is.tri_num; i++) { oline = is.tri_triangles[i][0]; olineln = is.tri_triangles[i][1]; vx = olineln->x - oline->x; vy = olineln->y - oline->y; vz = olineln->zd - oline->zd; oline = is.tri_triangles[i][1]; olineln = is.tri_triangles[i][2]; wx = olineln->x - oline->x; wy = olineln->y - oline->y; wz = olineln->zd - oline->zd; nx = - (vy * wz - wy * vz); ny = - (wx * vz - vx * wz); nz = - (vx * wy - wx * vy); nl = hypot(hypot(nx, ny), nz); for(j = 2; j >= 0; j--) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3ddn); if (nl > 0.0) { if (j == 2) cfx->insert_normal(nx / nl, ny / nl, nz / nl); cfx->vertex->insert_normal(nx / nl, ny / nl, nz / nl); } } oline = is.tri_triangles[i][0]; olineln = is.tri_triangles[i][1]; vx = olineln->x - oline->x; vy = olineln->y - oline->y; vz = olineln->zu - oline->zu; oline = is.tri_triangles[i][1]; olineln = is.tri_triangles[i][2]; wx = olineln->x - oline->x; wy = olineln->y - oline->y; wz = olineln->zu - oline->zu; nx = (vy * wz - wy * vz); ny = (wx * vz - vx * wz); nz = (vx * wy - wx * vy); nl = hypot(hypot(nx, ny), nz); for(j = 0; j < 3; j++) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3dup); if (nl > 0.0) { if (j == 0) cfx->insert_normal(nx / nl, ny / nl, nz / nl); cfx->vertex->insert_normal(nx / nl, ny / nl, nz / nl); } } } } #endif #ifdef THSCRAPIS_NEW3D lxVec norm; double norml; // povkladame horne a spodne body for(oline = is.firstolseg; oline != NULL; oline = oline->next_segment) { for(olineln = oline; olineln != NULL; olineln = olineln->next) { olineln->vx3dup = this->d3_outline.insert_vertex(olineln->pt + olineln->d_up * olineln->dir); olineln->vx3ddn = this->d3_outline.insert_vertex(olineln->pt - olineln->d_dn * olineln->dir); } } // vlozime triangle strip dookola oline = is.firstolseg; thdb3dfc * cfc = NULL; thdb3dfx * cfx, * cfx2; while (oline != NULL) { started = false; // najdeme posledny bod prevolineln = NULL; olineln = oline->next; while (olineln != NULL) { prevolineln = olineln; olineln = olineln->next; } // nemame ani 2 body - nerobime outline if (prevolineln == NULL) break; olineln = oline; while (olineln != NULL) { if (EXPORT3D_INVISIBLE || olineln->visible) { norm = (olineln->pt - prevolineln->pt) ^ (olineln->dir); norml = norm.Length(); if (!started) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLE_STRIP); cfx = cfc->insert_vertex(prevolineln->vx3dup); cfx2 = cfc->insert_vertex(prevolineln->vx3ddn); if (norml > 0.0) { norm /= norml; cfx->insert_normal(norm); cfx->vertex->insert_normal(2.0 * norm); cfx2->vertex->insert_normal(2.0 * norm); } started = true; } cfx = cfc->insert_vertex(olineln->vx3dup); cfx2 = cfc->insert_vertex(olineln->vx3ddn); if (norml > 0.0) { cfx->insert_normal(norm); cfx->vertex->insert_normal(2.0 * norm); cfx2->vertex->insert_normal(2.0 * norm); } } else { if (started) { started = false; } } prevolineln = olineln; olineln = olineln->next; } // prejdeme dalsi segment oline = oline->next_segment; } int i, j; lxVec v, w; if (is.tri_num > 0) { cfc = this->d3_outline.insert_face(THDB3DFC_TRIANGLES); for(i = 0; i < is.tri_num; i++) { // spodne trojuholniky v = is.tri_triangles[i][1]->vx3ddn->get_vector() - is.tri_triangles[i][0]->vx3ddn->get_vector(); w = is.tri_triangles[i][2]->vx3ddn->get_vector() - is.tri_triangles[i][1]->vx3ddn->get_vector(); norm = -1.0 * (v ^ w); norml = norm.Length(); if (norml > 0.0) norm /= norml; for(j = 2; j >= 0; j--) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3ddn); if (norml > 0.0) { if (j == 2) cfx->insert_normal(norm); cfx->vertex->insert_normal(norm); } } // horne trojuholniky v = is.tri_triangles[i][1]->vx3dup->get_vector() - is.tri_triangles[i][0]->vx3dup->get_vector(); w = is.tri_triangles[i][2]->vx3dup->get_vector() - is.tri_triangles[i][1]->vx3dup->get_vector(); norm = (v ^ w); norml = norm.Length(); if (norml > 0.0) norm /= norml; for(j = 0; j < 3; j++) { oline = is.tri_triangles[i][j]; cfx = cfc->insert_vertex(oline->vx3dup); if (norml > 0.0) { if (j == 0) cfx->insert_normal(norm); cfx->vertex->insert_normal(norm); } } } } #endif this->d3_outline.postprocess(); } thdb3ddata * thscrap::get_3d_outline() { this->process_3d(); return &(this->d3_outline); } void thscrap::update_limits(double x, double y) { if (thisnan(this->lxmin)) { this->lxmin = x; this->lxmax = x; } else { if (x < this->lxmin) this->lxmin = x; if (x > this->lxmax) this->lxmax = x; } if (thisnan(this->lymin)) { this->lymin = y; this->lymax = y; } else { if (y < this->lymin) this->lymin = y; if (y > this->lymax) this->lymax = y; } } void thscrap::parse_sketch(char ** args, int argenc) { int sv; thsketch sk; sk.m_scrap = this; sk.m_pic.init(args[0], thdb.csrc.name); // X thparse_double(sv,sk.m_x,args[1]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s", args[1])) // Y thparse_double(sv,sk.m_y,args[2]); if ((sv != TT_SV_NUMBER) && (sv != TT_SV_NAN)) ththrow(("invalid number -- %s", args[2])) this->sketch_list.push_back(sk); } void thscrap::start_insert() { if (this->cs != TTCS_LOCAL) { if (this->proj->type != TT_2DPROJ_PLAN) ththrow(("coordinate system specification valid only for plan projection")) if (!this->scale_p9) ththrow(("scrap scaling not valid in this coordinate system")) } } therion-5.4.1/thscrap.h000066400000000000000000000133571307545355600150340ustar00rootroot00000000000000/** * @file thscrap.h * Basic unit of 2D map. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrap_h #define thscrap_h #include "thdataobject.h" #include "thdb2dpt.h" #include "thdb2dcp.h" #include "thscraplo.h" #include "thscraplp.h" #include "thscrapen.h" #include "thmapstat.h" #include "thdb3d.h" #include "thsketch.h" #include "thtrans.h" /** * scrap command options tokens. */ enum { TT_SCRAP_UNKNOWN = 2000, TT_SCRAP_PROJECTION = 2001, TT_SCRAP_SCALE = 2002, TT_SCRAP_STATIONS = 2003, TT_SCRAP_3D = 2004, TT_SCRAP_FLIP = 2005, TT_SCRAP_SKETCH = 2006, }; enum { TT_SCRAP_FLIP_UNKNOWN, TT_SCRAP_FLIP_NONE, TT_SCRAP_FLIP_HORIZ, TT_SCRAP_FLIP_VERT, }; /** * scrap command options parsing table. */ static const thstok thtt_scrap_opt[] = { {"flip", TT_SCRAP_FLIP}, {"proj", TT_SCRAP_PROJECTION}, {"projection", TT_SCRAP_PROJECTION}, {"scale", TT_SCRAP_SCALE}, {"sketch", TT_SCRAP_SKETCH}, {"stations", TT_SCRAP_STATIONS}, {"walls", TT_SCRAP_3D}, {NULL, TT_SCRAP_UNKNOWN}, }; /** * scrap class. */ class thscrap : public thdataobject { public: friend class thdatabase; friend class thdb2d; class th2ddataobject * fs2doptr, ///< First scrap 2D object. * ls2doptr; ///< Last scrap 2D object. double lxmin, lxmax, lymin, lymax, ///< Coordinate limits. R, G, B; ///< Scrap color. thdb2dcp * fcpp, * lcpp; ///< Scrap control points. unsigned int ncp; ///< Number of control points. class thsurvey * centerline_survey; bool centerline_io; thdb2dprj * proj; ///< Scrap projection. class thprjx_scrap * xscrap; ///< Extended scrap link. thscrap * proj_next_scrap, ///< Next scrap in projection. * proj_prev_scrap; ///< Prev next projection. double scale, scale_r1x, scale_r1y, scale_p1x, scale_p1y, scale_r2x, scale_r2y, scale_p2x, scale_p2y; ///< Scrap scale. bool scale_p9; ///< 9 parameters scaling double mx, my, mxx, mxy, myx, myy, mr, ms; ///< Calibration coeficients. double maxdist, avdist; thdb2dpt * maxdistp1, * maxdistp2; thscraplo * outline_first; bool outline_parsed, polygon_parsed, ends_parsed, d3_parsed, exported; thscraplp * polygon_first, * polygon_last; thscrapen * ends_first; thmapstat_datamap adata; thmorph2trans morph; int d3, flip; thdb3ddata d3_outline; void parse_scale(char * ss); void parse_stations(char * ss); void process_3d(); thscraplp * polygon_insert(thscraplp * before = NULL); thdb1ds * get_nearest_station(thdb2dpt * pt); thsketch_list sketch_list; double z, a; public: /** * Standard constructor. */ thscrap(); /** * Standard destructor. */ ~thscrap(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thscrap";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Parse sketch option. */ void parse_sketch(char ** args, int argenc); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Create a sketch linked to current scrap. */ void insert_sketch(char ** args); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * Insert control point to scrap. */ thdb2dcp * insert_control_point(); /** * Reset coordinates limits. */ void reset_limits(); /** * Reset transformation. */ void reset_transformation(); /** * Return outline. Process if necessary. */ thscraplo * get_outline(); /** * Return polygon. Process if necessary. */ thscraplp * get_polygon(); /** * Return polygon. Process if necessary. */ thscrapen * get_ends(); /** * Calculate scrap z. */ void calc_z(); /** * Insert associated data from given station. */ void insert_adata(class thdb1ds * as); /** * Return 3D data. Process if necessary. */ thdb3ddata * get_3d_outline(); void update_limits(double x, double y); virtual void start_insert(); }; #endif therion-5.4.1/thscrapen.cxx000066400000000000000000000021711307545355600157220ustar00rootroot00000000000000/** * @file thscrapen.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrapen.h" thscrapen::thscrapen() { this->next_end = NULL; this->l1 = NULL; this->lp1 = NULL; this->l2 = NULL; this->lp2 = NULL; } therion-5.4.1/thscrapen.h000066400000000000000000000025751307545355600153570ustar00rootroot00000000000000/** * @file thscrapen.h * Scrap end class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrapen_h #define thscrapen_h #include #include /** * Scrap end class. */ class thscrapen { public: thscrapen * next_end; class thline * l1; class thdb2dlp * lp1; class thline * l2; class thdb2dlp * lp2; double cxt, cyt; bool active; thscrapen(); ///< Default constructor }; typedef std::list thscrapen_list; ///< Points list. #endif therion-5.4.1/thscrapis.cxx000066400000000000000000001305271307545355600157420ustar00rootroot00000000000000/** * @file thscrapis.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscrapis.h" #include "thscrap.h" #include "thpoint.h" #include "therion.h" #include "thdb2dlp.h" #include "thdb1d.h" #include "thscraplo.h" #include "thline.h" #include "thconfig.h" #include "thtrans.h" #include "thscraplp.h" #include "extern/poly2tri/poly2tri.h" #include "thscrap.h" #include "thsurvey.h" #include #ifdef THMSVC #define hypot _hypot #endif struct pt2d { double x, y; pt2d(double x_, double y_) : x(x_), y(y_) {} }; bool operator < (const struct pt2d & p1, const struct pt2d & p2) { if (p1.x < p2.x) return true; else if (p1.x == p2.x) return (p1.y < p2.y); return false; } typedef std::map pt2d2olptmap; #define ONLY_INVISIBLE_LINE 1 #define THSCRAPISSMP thcfg.tmp3dSMP #define THSCRAPISWALLSMP 0.1 //thcfg.tmp3dWALLSMP #define THSCRAPISMAXDIMD thcfg.tmp3dMAXDIMD thscrapis::thscrapis(class thscrap * scrap) { #ifndef THSCRAPIS_NEW3D this->firstbp = NULL; this->firstbbp = NULL; this->firstdim = NULL; #endif this->m_scrap = scrap; this->firstolseg = NULL; this->lastolseg = NULL; this->tri_triangles = NULL; this->tri_num = 0; } thscrapis::~thscrapis() { delete [] this->tri_triangles; } struct thscrapislns { double x, y; thscrapislns(double xx, double yy) : x(xx), y(yy) {} }; void thscrapis::insert_outline_lnsegment(bool newsegment, thline * line, bool outer, bool reverse, bool visible, long from, long to) { if (from == to) return; thdb2dlp * lp = line->first_point; thdb2dpt * prev_pt = NULL; std::list tmplist; tmplist.clear(); double t,t2,t3,t_,t_2,t_3,x1,y1,c1x,c1y,c2x,c2y,x2,y2; long last = 0,i,nb = 20; bool dnu = false; while ((lp != NULL) && ((long(last) <= long(to)) || (to < 0))) { if (last == from) { dnu = true; tmplist.push_back(thscrapislns(lp->point->xt, lp->point->yt)); prev_pt = lp->point; } else if (dnu) { if ((lp->cp1 != NULL) && (lp->cp2 != NULL)) { x1 = prev_pt->xt; y1 = prev_pt->yt; c1x = lp->cp1->xt; c1y = lp->cp1->yt; c2x = lp->cp2->xt; c2y = lp->cp2->yt; x2 = lp->point->xt; y2 = lp->point->yt; for(i = 1; i < nb; i++) { t = double(i) / double(nb); t2 = t * t; t3 = t * t * t; t_ = 1.0 - t; t_2 = t_ * t_; t_3 = t_ * t_ * t_; tmplist.push_back(thscrapislns( t_3 * x1 + 3.0 * t * t_2 * c1x + 3 * t2 * t_ * c2x + t3 * x2 , t_3 * y1 + 3.0 * t * t_2 * c1y + 3 * t2 * t_ * c2y + t3 * y2 )); } } tmplist.push_back(thscrapislns(lp->point->xt, lp->point->yt)); } prev_pt = lp->point; lp = lp->nextlp; last++; } // vlozi tmplist do zoznamu bool first_point = true; std::list :: iterator it; thscrapisolpt * cpt; if (tmplist.size() == 0) return; if (reverse) { it = tmplist.end(); it--; } else { it = tmplist.begin(); } while (it != tmplist.end()) { // vlozime bod - osobitne prvy cpt = &(*(this->ol_list.insert(this->ol_list.end(),thscrapisolpt()))); if (newsegment && first_point) { if (this->firstolseg == NULL) { this->firstolseg = cpt; this->lastolseg = cpt; } else { if (outer) { cpt->next_segment = this->firstolseg; this->firstolseg = cpt; } else { this->lastolseg->next_segment = cpt; this->lastolseg = cpt; } } } else { // pokracovanie segmentu this->lastolcseg->next = cpt; } if (first_point) { cpt->visible = false; } else { cpt->visible = visible; } cpt->x = it->x; cpt->y = it->y; cpt->outer = outer; this->lastolcseg = cpt; first_point = false; if (reverse) { if (it == tmplist.begin()) it = tmplist.end(); else it--; } else { it++; } } } void simplify_outline(thscrapisolpt * start, thscrapisolpt * end) { if (start == end) return; if (start->next == end) return; thscrapisolpt * pt, * maxpt; double dx, dy, dd, maxw; dx = end->x - start->x, dy = end->y - start->y; dd = sqrt(dx*dx + dy*dy); pt = start->next; maxpt = NULL; maxw = 0; // prejde vsetky body, najde ten s najvacsou vzdialenostou od start/end //printf("\n\n\nA %6.2f %6.2f B %6.2f %6.2f\n", start->x, start->y, end->x, end->y); while (pt != end) { if (dd > 0.0) { pt->w = fabs(dx * (start->y - pt->y) - (start->x - pt->x) * dy)/dd; } else { pt->w = sqrt((pt->x - start->x) * (pt->x - start->x) + (pt->y - start->y) * (pt->y - start->y)); } //printf("%.2f ->X %6.2f %6.2f\n", pt->w, pt->x, pt->y); if (pt->w >= maxw) { maxw = pt->w; maxpt = pt; } pt = pt->next; } if (maxw > THSCRAPISWALLSMP) { // ak vzdialenost > limit -> spusti este raz od zaciatku po ten bod a od toho po koniec simplify_outline(start, maxpt); simplify_outline(maxpt, end); } else { // ak mensia ako limit -> vsetky body medzi start/end vymaze start->next = end; end->prev = start; } } #ifdef THSCRAPIS_NEW3D struct int3df { bool m_single, m_dim, m_pos, m_dir, m_setdim; thvec2 m_pf, m_pt; thline2 m_lf, m_lt, m_ln; double m_lnl; lxVec m_posf, m_post, m_direction; double m_upf, m_upt, m_dnf, m_dnt; int3df() : m_single(true), m_dim(false), m_pos(false), m_dir(false), m_setdim(false) {} void init_ln(thvec2 f, thvec2 t); void init_pt(thvec2 p); void interp(thvec2 src, double & w, double & p, thvec2 & pos); }; void int3df::init_ln(thvec2 f, thvec2 t) { m_single = false; m_pf = f; m_pt = t; m_ln = thline2(f, t); m_lf = thline2(f, f + thvec2(-m_ln.m_a, -m_ln.m_b)); m_lt = thline2(t, t + thvec2(m_ln.m_a, m_ln.m_b)); m_lnl = (m_pt - m_pf).length(); } void int3df::init_pt(thvec2 p) { m_single = true; m_pf = p; } void int3df::interp(thvec2 src, double & w, double & p, thvec2 & pos) { if (m_single) { p = 0.0; pos = m_pf; w = (src - m_pf).length2(); } else { double lnfd, lntd; lnfd = m_lf.eval(src); lntd = m_lt.eval(src); if (lnfd < 0) { w = (src - m_pf).length2(); p = 0.0; pos = m_pf; } else if (lntd < 0) { w = (src - m_pt).length2(); p = 1.0; pos = m_pt; } else { w = m_ln.eval(src); w *= w; pos = thvec2(src.m_x - (m_ln.m_a * src.m_x + m_ln.m_b * src.m_y + m_ln.m_c) / (m_ln.m_a * m_ln.m_a + m_ln.m_b * m_ln.m_b) * m_ln.m_a, src.m_y - (m_ln.m_a * src.m_x + m_ln.m_b * src.m_y + m_ln.m_c)/(m_ln.m_a * m_ln.m_a + m_ln.m_b * m_ln.m_b) * m_ln.m_b); p = (pos - m_pf).length() / m_lnl; } } } typedef std::list int3dl; bool operator < (const struct thvec2 & l1, const struct thvec2 & l2) { if (l1.m_x < l2.m_x) return true; if (l1.m_x > l2.m_x) return false; if (l1.m_y < l2.m_y) return true; return false; } bool operator > (const struct thvec2 & l1, const struct thvec2 & l2) { return (l2 < l1); } bool operator == (const struct thvec2 & l1, const struct thvec2 & l2) { return ((l1.m_x == l2.m_x) && (l1.m_y == l2.m_y)); } struct int3dshot { thvec2 m_f, m_t; int3dshot(thvec2 f, thvec2 t) : m_f(f), m_t(t) {} }; bool operator < (const struct int3dshot & f1, const struct int3dshot & f2) { if (f1.m_f < f2.m_f) return true; if (f1.m_f > f2.m_f) return false; if (f1.m_t < f2.m_t) return true; return false; } typedef std::map int3dpoint_map; typedef std::map int3dshot_map; struct int3di { thscrap * m_scrap; int3dpoint_map m_map_points; int3dshot_map m_map_shots; int3dl m_features; int3di(thscrap * scrap) {m_scrap = scrap;} void post_process(); void insert_slp(thscraplp * slp); void insert_point(thvec2 p2, long id); void insert_dim(thvec2 p2, double up, double dn); void interpolate(thscrapisolpt * oline); }; void setudlr(double asl, double & udlr, int index) { if (!thisnan(udlr)) return; if (!thisnan(asl)) { udlr = asl * 0.38; switch (index) { case 0: udlr *= 0.75; break; case 1: udlr *= 0.25; if (udlr > 1.618) udlr = 1.618; break; default: udlr *= .5; } } else { switch (index) { case 0: udlr = 1.618; break; case 1: udlr = 0.618; break; default: udlr = (1.618 + 0.618) / 2.0; } } } void int3di::insert_slp(thscraplp *slp) { thvec2 p1, p2; int3df f; int3dpoint_map::iterator pmi; int3dl::iterator fi; // ak pridavame bod if (!slp->lnio) { // skontroluje ci dany bod mame, ak ano, tak odideme p1 = thvec2(slp->stx, slp->sty); if (m_map_points.find(p1) != m_map_points.end()) return; // ak nemame, tak pridame f.init_pt(p1); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = lxVec(slp->station->x, slp->station->y, slp->station->z); m_map_points[p1] = m_features.insert(m_features.end(), f); } else { p1 = thvec2(slp->lnx1, slp->lny1); p2 = thvec2(slp->lnx2, slp->lny2); lxVec pos1, pos2; thdb1ds * s1, * s2, * stmp; double udlr1[4], udlr2[4], udlrt; int i; s1 = &(thdb.db1d.station_vec[slp->arrow->leg->leg->from.id - 1]); s1 = &(thdb.db1d.station_vec[s1->uid - 1]); s2 = &(thdb.db1d.station_vec[slp->arrow->leg->leg->to.id - 1]); s2 = &(thdb.db1d.station_vec[s2->uid - 1]); udlr1[0] = slp->arrow->leg->leg->from_up; udlr1[1] = slp->arrow->leg->leg->from_down; udlr1[2] = slp->arrow->leg->leg->from_left; udlr1[3] = slp->arrow->leg->leg->from_right; udlr2[0] = slp->arrow->leg->leg->to_up; udlr2[1] = slp->arrow->leg->leg->to_down; udlr2[2] = slp->arrow->leg->leg->to_left; udlr2[3] = slp->arrow->leg->leg->to_right; if (slp->arrow->is_reversed) { stmp = s1; s1 = s2; s2 = stmp; for(i = 0; i < 4; i++) { udlrt = udlr1[i]; udlr1[i] = udlr2[i]; udlr2[i] = udlrt; } } pos1 = lxVec(s1->x, s1->y, s1->z); pos2 = lxVec(s2->x, s2->y, s2->z); // skontroluje, ci dany shot mame, ak ano, tak odideme if (m_map_shots.find(int3dshot(p1,p2)) != m_map_shots.end()) return; // ak mame nejake body tam, kde je shot, tak ich odstranime pmi = m_map_points.find(p1); if (pmi != m_map_points.end()) { if (pmi->second->m_single) { m_features.erase(pmi->second); m_map_points.erase(pmi); pmi = m_map_points.end(); } } pmi = m_map_points.find(p2); if (pmi != m_map_points.end()) { if (pmi->second->m_single) { m_features.erase(pmi->second); m_map_points.erase(pmi); pmi = m_map_points.end(); } } if (p1 == p2) { if (pmi == m_map_points.end()) { // vlozime ako bod f.init_pt(p1); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = 0.5 * pos1 + 0.5 * pos2; m_map_points[p1] = m_features.insert(m_features.end(), f); } } else { // ak nemame, vytvorime shot f.init_ln(p1, p2); f.m_pos = true; f.m_posf = pos1; f.m_post = pos2; // dimensions podla lrud double coef, pa; coef = 1.0; f.m_dim = true; switch (this->m_scrap->proj->type) { case TT_2DPROJ_PLAN: for(i = 0; i < 2; i++) { f.m_dim = f.m_dim && ((!thisnan(udlr1[i])) && (!thisnan(udlr2[i]))); setudlr(s1->asl, udlr1[i], i); setudlr(s2->asl, udlr2[i], i); } if (fabs(slp->arrow->leg->leg->total_gradient) > slp->arrow->leg->leg->vtresh) { coef = fabs(slp->arrow->leg->leg->total_gradient); if (coef > 60) coef = 60; coef = 1 / cos(coef / 180.0 * THPI); } f.m_upf = coef * udlr1[0]; f.m_dnf = coef * udlr1[1]; f.m_upt = coef * udlr2[0]; f.m_dnt = coef * udlr2[1]; break; case TT_2DPROJ_ELEV: coef = slp->arrow->leg->leg->total_bearing; if (coef < 0.0) coef += 180.0; if (coef > 180.0) coef -= 180.0; pa = this->m_scrap->proj->pp1; if (pa < 0.0) pa += 180.0; if (pa > 180.0) pa -= 180.0; coef = fabs(coef - pa); if (coef > 90.0) coef = 90 - (coef - 90); coef = 90 - coef; if (coef > 60) coef = 60; coef = 1 / cos(coef / 180.0 * THPI); case TT_2DPROJ_EXTEND: for(i = 2; i < 4; i++) { f.m_dim = f.m_dim && ((!thisnan(udlr1[i])) && (!thisnan(udlr2[i]))); setudlr(s1->asl, udlr1[i], i); setudlr(s2->asl, udlr2[i], i); } if (p2.m_x > p1.m_x) { f.m_upf = coef * udlr1[3]; f.m_dnf = coef * udlr1[2]; f.m_upt = coef * udlr2[3]; f.m_dnt = coef * udlr2[2]; } else { f.m_upf = coef * udlr1[2]; f.m_dnf = coef * udlr1[3]; f.m_upt = coef * udlr2[2]; f.m_dnt = coef * udlr2[3]; } break; } // direction podla projekcie if ((this->m_scrap->proj->type == TT_2DPROJ_EXTEND) && (p1.m_x != p2.m_x)) { f.m_dir = true; f.m_direction = lxVec(pos1.y - pos2.y, pos2.x - pos1.x, 0.0); f.m_direction.Normalize(); if (p1.m_x > p2.m_x) f.m_direction = -1.0 * f.m_direction; } else { f.m_dir = false; } fi = m_features.insert(m_features.end(), f); m_map_points[p1] = fi; m_map_points[p2] = fi; m_map_shots[int3dshot(p1,p2)] = fi; m_map_shots[int3dshot(p2,p1)] = fi; } } } void int3di::insert_point(thvec2 p2, long id) { // skontroluje ci dany bod mame, ak ano, tak odideme if (m_map_points.find(p2) != m_map_points.end()) return; // ak nemame, tak pridame int3df f; thdb1ds * s = &(thdb.db1d.station_vec[id - 1]); f.init_pt(p2); f.m_dim = false; f.m_pos = true; f.m_dir = false; f.m_posf = lxVec(s->x, s->y, s->z); m_map_points[p2] = m_features.insert(m_features.end(), f); } void int3di::insert_dim(thvec2 p2, double up, double dn) { int3dpoint_map::iterator mi; mi = m_map_points.find(p2); // skontroluje ci dany bod mame, ak ano, tak prepiseme ud if (mi != m_map_points.end()) { mi->second->m_dim = true; if (mi->second->m_single || (mi->second->m_pf == p2)) { mi->second->m_upf = up; mi->second->m_dnf = dn; } else { mi->second->m_upt = up; mi->second->m_dnt = dn; } return; } // ak nemame, tak pridame int3df f; f.init_pt(p2); f.m_dim = true; f.m_pos = false; f.m_dir = false; f.m_dnf = dn; f.m_upf = up; m_map_points[p2] = m_features.insert(m_features.end(), f); } void int3di::post_process() { int3dl::iterator i, ii; // if no dimension interpolator - use asl lxVecLimits vl; for(i = this->m_features.begin(); i != this->m_features.end(); i++) { i->m_setdim = false; vl.Add(i->m_pf.m_x, i->m_pf.m_y, 0.0); if (!i->m_single) vl.Add(i->m_pt.m_x, i->m_pt.m_y, 0.0); } if (vl.valid) { double diam = (vl.max - vl.min).Length() * 0.25; for(i = this->m_features.begin(); i != this->m_features.end(); i++) { if ((!i->m_dim) && (!i->m_single)) { bool nsetdim = true; for(ii = this->m_features.begin(); ii != this->m_features.end(); ii++) { if (ii->m_dim) { thvec2 dp = ii->m_pf, tmpv; double w, p; if (!ii->m_single) dp = 0.5 * dp + 0.5 * ii->m_pt; i->interp(dp, w, p, tmpv); w = sqrt(w); if (w < diam) nsetdim = false; } } i->m_setdim = nsetdim; } } for(i = this->m_features.begin(); i != this->m_features.end(); i++) { if (i->m_setdim) i->m_dim = true; } } } void thscrapis::int3d() { // inicializuje 3d interpolovacie struktury thscraplp * slp; th2ddataobject * o2; thpoint * pp; int3di i3(this->m_scrap); bool xelev = (this->m_scrap->proj->type == TT_2DPROJ_EXTEND); // vlozi vsetky meracske body zo scrapu o2 = this->m_scrap->fs2doptr; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if (pp->station_name.id != 0) { i3.insert_point(thvec2(pp->point->xt, pp->point->yt), pp->station_name.id); } } o2 = o2->nscrapoptr; } // vlozi vsetok polygon zo scrapu (ciary vklada len tie, co maju oba body v scrape!) slp = this->m_scrap->get_polygon(); while (slp != NULL) { i3.insert_slp(slp); slp = slp->next_item; } // prejde vsetky objekty a nasackuje passage-heights o2 = this->m_scrap->fs2doptr; double cup, cdown; while (o2 != NULL) { if (o2->get_class_id() == TT_POINT_CMD) { pp = (thpoint *) o2; if ((pp->type == TT_POINT_TYPE_PASSAGE_HEIGHT) && ((pp->tags & TT_POINT_TAG_HEIGHT_U) != 0) && (!thisnan(pp->xsize))) { cdown = pp->xsize / 1.618; if (cdown > 1.618) cdown = 1.618; cup = pp->xsize - cdown; i3.insert_dim(thvec2(pp->point->xt, pp->point->yt), cup, cdown); } else if ((pp->type == TT_POINT_TYPE_DIMENSIONS) && (!thisnan(pp->xsize)) && (!thisnan(pp->ysize))) { i3.insert_dim(thvec2(pp->point->xt, pp->point->yt), pp->xsize, pp->ysize); } } o2 = o2->nscrapoptr; } i3.post_process(); // interpoluje lxVec ddir, udir, rdir; switch (this->m_scrap->proj->type) { case TT_2DPROJ_PLAN: ddir = lxVec(0.0, 0.0, 1.0); udir = lxVec(0.0, 1.0, 0.0); rdir = lxVec(1.0, 0.0, 0.0); break; case TT_2DPROJ_ELEV: ddir = lxVec(-sin(this->m_scrap->proj->pp1 / 180.0 * THPI), -cos(this->m_scrap->proj->pp1 / 180.0 * THPI), 0.0); udir = lxVec(0.0, 0.0, 1.0); rdir = lxVec(-ddir.y, ddir.x, 0.0); break; case TT_2DPROJ_EXTEND: ddir = lxVec(0.0, -1.0, 0.0); udir = lxVec(0.0, 0.0, 1.0); rdir = lxVec(-ddir.y, ddir.x, 0.0); break; } thscrapisolpt * oline, * olineln; int3dl::iterator ii, iii; lxVec sumv, pos, sumupv, sumdnv; thvec2 v2, pt; double sumw, sumdw, w, p, cw, sup, sdn; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { pt = thvec2(olineln->x, olineln->y); // interpolate direction if neeeded if (xelev) { ii = i3.m_features.begin(); sumw = 0.0; sumv = lxVec(0.0, 0.0, 0.0); while (ii != i3.m_features.end()) { if (ii->m_dir) { ii->interp(pt, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1 / (w * w); sumv += cw * ii->m_direction; sumw += cw; } ii++; } if (sumv.Norm() > 0.0) { sumv.Normalize(); olineln->dir = sumv; } else { olineln->dir = ddir; } } else { olineln->dir = ddir; } // interpolujeme position & direction pre dimension points iii = i3.m_features.begin(); while (iii != i3.m_features.end()) { if (!iii->m_dir) iii->m_direction = ddir; if ((!iii->m_pos) && (iii->m_dim)) { sumw = 0.0; ii = i3.m_features.begin(); sumv = lxVec(0.0, 0.0, 0.0); sumdw = 0.0; sumupv = lxVec(0.0, 0.0, 0.0); while (ii != i3.m_features.end()) { if (ii->m_pos) { ii->interp(iii->m_pf, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1.0 / (w * w); if (ii->m_pos) { sumw += cw; pos = ((1.0 - p) * ii->m_posf + p * ii->m_post); if (xelev) rdir = lxVec(-olineln->dir.y, olineln->dir.x, 0.0); v2 = pt - v2; pos = pos + v2.m_x * rdir + v2.m_y * udir; sumv += cw * pos; } if (ii->m_dir) { sumupv += cw * ii->m_direction; sumdw += cw; } } ii++; } iii->m_posf = (1 / sumw) * sumv; if (!iii->m_dir) { if (sumupv.Norm() > 0.0) { iii->m_direction = (1 / sumdw) * sumupv; } else { iii->m_direction = ddir; } } } iii++; } // interpolujeme position & dimensions sumdw = 0.0; sumw = 0.0; ii = i3.m_features.begin(); sumv = lxVec(0.0, 0.0, 0.0); sumupv = sumv; sumdnv = sumv; sup = 0.0; sdn = 0.0; while (ii != i3.m_features.end()) { if (ii->m_pos || ii->m_dim) { if (this->m_scrap->proj->type == TT_2DPROJ_EXTEND) rdir = lxVec(-olineln->dir.y, olineln->dir.x, 0.0); ii->interp(pt, w, p, v2); if (w < 1e-6) w = 1e-6; cw = 1.0 / (w * w); if (ii->m_dim) { sumdw += cw; // interpolate up dimension sup += cw * ((1.0 - p) * ii->m_upf + p * ii->m_upt); // interpolate dn dimension sdn += cw * ((1.0 - p) * ii->m_dnf + p * ii->m_dnt); } if (ii->m_pos) { sumw += cw; v2 = pt - v2; pos = (1.0 - p) * ii->m_posf + p * ii->m_post; pos = pos + v2.m_x * rdir + v2.m_y * udir; sumv += cw * pos; } } ii++; } sumv = (1 / sumw) * sumv; if (sumdw == 0.0) { sup = 1.618; sdn = 0.618; } else { sup /= sumdw; sdn /= sumdw; } olineln->pt = sumv; olineln->d_up = sup; olineln->d_dn = sdn; olineln = olineln->next; } oline = oline->next_segment; } } #endif void thscrapis::outline_scan(class thscraplo * outln) { // nacita bool first, outer, vis; long from, to; thdb2dlp * lp; thscraplo * lo = outln, * lo2; while (lo != NULL) { outer = (lo->line->outline == TT_LINE_OUTLINE_OUT); // prejde celu krivku a rozlozi ju na viditelne a neviditelne casti first = true; lo2 = lo; while (lo2 != NULL) { if (lo2->mode == TT_OUTLINE_REVERSED) { lp = lo2->line->first_point; from = 0; while (lp != NULL) { lp = lp->nextlp; from++; } from = from - 1; lp = lo2->line->last_point; to = from; } else { lp = lo2->line->first_point; from = 0; to = from; } bool cvis = false; while (lp != NULL) { // najde viditelnost prveho bodu if (lo2->mode == TT_OUTLINE_REVERSED) { if (lp->prevlp != NULL) { #ifdef ONLY_INVISIBLE_LINE vis = (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } else vis = cvis; } else { #ifdef ONLY_INVISIBLE_LINE vis = (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } cvis = vis; // pokracuje pokial nemame bod z inou viditelnostou while (lp != NULL) { if (lo2->mode == TT_OUTLINE_REVERSED) { if (lp->prevlp != NULL) { #ifdef ONLY_INVISIBLE_LINE vis = (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->prevlp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } else vis = cvis; } else { #ifdef ONLY_INVISIBLE_LINE vis = (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #else vis = (lo2->line->type == TT_LINE_TYPE_WALL) && (lp->subtype != TT_LINE_SUBTYPE_INVISIBLE); #endif } if (vis != cvis) break; if (lo2->mode == TT_OUTLINE_REVERSED) { lp = lp->prevlp; if (lp != NULL) from--; } else { lp = lp->nextlp; if (lp != NULL) to++; } } this->insert_outline_lnsegment(first, lo2->line, outer, (lo2->mode == TT_OUTLINE_REVERSED), cvis, from, to); first = false; if (lo2->mode == TT_OUTLINE_REVERSED) to = from; else from = to; } lo2 = lo2->next_line; } lo = lo->next_outline; } // ZJEDNODUSENIE #define print_outline(ARG) \ oline = this->firstolseg; \ thprintf("\n" ARG ":\n"); \ while (oline != NULL) { \ thprintf("------------------\n"); \ olineln = oline; \ while (olineln != NULL) { \ thprintf("%s %6.2f %6.2f\n", olineln->visible ? "SHOW" : "HIDE", olineln->x, olineln->y); \ olineln = olineln->next; \ } \ oline = oline->next_segment; \ } // vyplni prev thscrapisolpt * oline, * olineln, * prevolln, * rlnode, * lastolln; // print_outline("BEFORE ALL"); oline = this->firstolseg; while (oline != NULL) { oline->deletable = false; prevolln = oline; olineln = prevolln->next; while (olineln != NULL) { olineln->prev = prevolln; prevolln = olineln; olineln = olineln->next; } oline = oline->next_segment; } // odstrani duplikaty oline = this->firstolseg; while (oline != NULL) { olineln = oline->next; prevolln = NULL; while (olineln != NULL) { if (hypot(olineln->x - olineln->prev->x, olineln->y - olineln->prev->y) < THSCRAPISRES) { olineln->prev->next = olineln->next; if (olineln->next != NULL) { olineln->next->prev = olineln->prev; } } else { prevolln = olineln; } olineln = olineln->next; } // odstrani duplikat z konca if ((prevolln != NULL) && (hypot(oline->x - prevolln->x, oline->y - prevolln->y) < THSCRAPISRES)) { if (prevolln->prev != NULL) { prevolln->prev->next = NULL; oline->visible = prevolln->visible; } } oline = oline->next_segment; } // print_outline("AFTER DUPLICATES REMOVAL"); // nastavi tie co sa nebudu mazat oline = this->firstolseg; while (oline != NULL) { olineln = oline->next; while (olineln != NULL) { if ((olineln->prev != NULL) && (olineln->visible != olineln->prev->visible)) { olineln->prev->deletable = false; } if (olineln->next == NULL) olineln->deletable = false; olineln = olineln->next; } oline = oline->next_segment; } // zjednodusi thscrapisolpt * simplstart; oline = this->firstolseg; while (oline != NULL) { simplstart = oline; olineln = oline->next; while (olineln != NULL) { if (!olineln->deletable) { simplify_outline(simplstart, olineln); simplstart = olineln; } olineln = olineln->next; } oline = oline->next_segment; } // print_outline("BEFORE REORIENT"); #define orient_number(v1,v2,v3) ((v2->x - v1->x)*(v3->y - v1->y) \ - (v3->x - v1->x)*(v2->y - v1->y)) // preorientuje bool reorient = false, tmpvis, tmptmpvis; double orientnum, tmpx, tmpy; #ifndef THSCRAPIS_NEW3D double tmpz; #endif long nnodes, inode; long numpts = 0; oline = this->firstolseg; while (oline != NULL) { lastolln = oline; rlnode = oline; nnodes = 1; olineln = oline->next; numpts++; while (olineln != NULL) { if ((olineln->y < rlnode->y) || ((olineln->y == rlnode->y) && (olineln->x > rlnode->x))) { rlnode = olineln; } lastolln = olineln; nnodes++; numpts++; olineln = olineln->next; } // usporiadame vrcholy - prevolln, rlnode, olineln if (rlnode->prev != NULL) prevolln = rlnode->prev; else prevolln = lastolln; if (rlnode->next != NULL) olineln = rlnode->next; else olineln = oline; // zistime ci je orientacia OK if ((prevolln != NULL) && (olineln != NULL)) { orientnum = orient_number(prevolln, rlnode, olineln); // orientnum = (rlnode->x - prevolln->x) * (olineln->y - prevolln->y) - // (olineln->x - prevolln->x) * (rlnode->y - prevolln->y); reorient = (oline->outer != (orientnum > 0)); // outer == anti-clockwise } if (reorient) { // finta FEE - pointre nechame tak a vymenime data olineln = oline; prevolln = lastolln; nnodes = nnodes/2; inode = 0; while ((olineln != NULL) && (inode < nnodes)) { inode++; tmpx = olineln->x; tmpy = olineln->y; #ifndef THSCRAPIS_NEW3D tmpz = olineln->z; #endif tmpvis = olineln->visible; olineln->x = prevolln->x; olineln->y = prevolln->y; #ifndef THSCRAPIS_NEW3D olineln->z = prevolln->z; #endif olineln->visible = prevolln->visible; prevolln->x = tmpx; prevolln->y = tmpy; #ifndef THSCRAPIS_NEW3D prevolln->z = tmpz; #endif prevolln->visible = tmpvis; olineln = olineln->next; prevolln = prevolln->prev; } tmpvis = lastolln->visible; olineln = oline; while (olineln != NULL) { tmptmpvis = tmpvis; tmpvis = olineln->visible; olineln->visible = tmptmpvis; olineln = olineln->next; } } oline = oline->next_segment; } // print_outline("AFTER ALL"); // TRIANGULACIA PO NOVOM if (numpts > 2) { p2t::CDT * cdt = NULL; std::vector polyline; pt2d2olptmap ptmap; bool mult_outer = false; //FILE * f = fopen("data.dat","w"); double xx, yy; bool duplpts = false; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { xx = olineln->x; yy = olineln->y; while (ptmap.find(pt2d(xx, yy)) != ptmap.end()) { xx = xx + 0.0001; duplpts = true; } ptmap[pt2d(xx, yy)] = olineln; //fprintf(f,"%.6f\t%.6f\n", xx, yy); polyline.push_back(new p2t::Point(xx, yy)); olineln = olineln->next; numpts++; } if (cdt == NULL) { cdt = new p2t::CDT(polyline); polyline.clear(); } else { if (oline->outer) { mult_outer = true; break; } cdt->AddHole(polyline); polyline.clear(); } oline = oline->next_segment; } //fclose(f); std::vector triangles; try { cdt->Triangulate(); // set triangulation output triangles = cdt->GetTriangles(); this->tri_num = (long)triangles.size(); } catch (...) { const char * errscrap = this->m_scrap->name; const char * errdot = ""; const char * errsurv = ""; if (strlen(this->m_scrap->fsptr->full_name) > 0) { errdot = "@"; errsurv = this->m_scrap->fsptr->full_name; } thwarning(("%s%s%s -- scrap 3D reconstruction failed", errscrap, errdot, errsurv)); thtext_inline = false; this->tri_num = 0; } long trix, newnum; if (this->tri_num > 0) { this->tri_triangles = new pthscrapisolpt[this->tri_num][3]; for (trix = 0, newnum = 0; trix < this->tri_num; trix++) { p2t::Triangle& t = *triangles[trix]; p2t::Point& b = *t.GetPoint(1); p2t::Point& a = *t.PointCCW(b); p2t::Point& c = *t.PointCW(b); pt2d2olptmap::iterator i = ptmap.find(pt2d(a.x, a.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][0] = i->second; i = ptmap.find(pt2d(b.x, b.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][1] = i->second; i = ptmap.find(pt2d(c.x, c.y)); if (i == ptmap.end()) continue; else this->tri_triangles[newnum][2] = i->second; newnum++; } bool old_thtext_inline = thtext_inline; if (mult_outer || (this->tri_num > newnum) || duplpts) { const char * errscrap = this->m_scrap->name; const char * errdot = ""; const char * errsurv = ""; if (strlen(this->m_scrap->fsptr->full_name) > 0) { errdot = "@"; errsurv = this->m_scrap->fsptr->full_name; } if (mult_outer) { thwarning(("%s%s%s -- multiple scrap outer outlines not supported yet", errscrap, errdot, errsurv)); thtext_inline = false; } if ((this->tri_num > newnum) || duplpts) { thwarning(("%s%s%s -- invalid scrap outline", errscrap, errdot, errsurv)); thtext_inline = false; } } thtext_inline = old_thtext_inline; this->tri_num = newnum; } else { this->tri_triangles = NULL; } delete cdt; } #ifdef THSCRAPIS_NEW3D this->int3d(); #endif #ifndef THSCRAPIS_NEW3D // interpoluje Z double dum; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { this->bp_interpolate(olineln->x, olineln->y, olineln->z, dum, dum, dum); olineln->zu = olineln->z + 1.618 * 1.618; olineln->zd = olineln->z - 1.618; olineln = olineln->next; } oline = oline->next_segment; } #endif } /* Input: * shoty s LRUD * meracske body bez LRUD * point dimenstions s UD Ako na to: * zoberieme outline - HOTOVO * zjednodusime - HOTOVO * triangulacia - HOTOVO * potrebujeme interpolovat -> x/y/z outlajnu direction vector up/down * mame fixne: PLAN - x/y + direction fixed ELEV - z + direction fixed XELEV - z * mame v shotoch: PLAN - z + up/down (treba spocitat) ELEV - x/y + up/down (treba spocitat) XELEV - x/y + direction (treba spocitat) + up/down (treba spocitat) * pre kazdy bod outlajnu mame ciary, ktore z neho idu interpolacia prebieha nasledovne: 1. pripravime si zoznam features (shoty, body, dimensions) 2. spocitame co treba pre features spocitat (up/down/direction) 3. v1: + pre kazdy bod spocitame 1/d^4 k features a vyvazime, separatne up/down a separatne x/y/z/dir + v2 - selektovat features sa budu iba podla triangulacie a zvysok sa interpoluje po outlajne */ // DELETE FROM HERE ON #ifndef THSCRAPIS_NEW3D bool operator < (const struct thscrapisloc & l1, const struct thscrapisloc & l2) { if (l1.x + THSCRAPISRES < l2.x) return true; else if (l2.x + THSCRAPISRES < l1.x) return false; else if (l1.y + THSCRAPISRES < l2.y) return true; else return false; } void thscrapis::insert_bp(double x, double y, double z) { thscrapisbp * mi = &(this->bp_map[thscrapisloc(x,y)]); if (mi->sums < 0) { mi->x = x; mi->y = y; mi->z = z; mi->sums = 0.0; } else { if (z < mi->z) { mi->z = z; } } } void thscrapis::end_bp() { // vytvori odkazy std::map ::iterator it = this->bp_map.begin(); this->firstbp = NULL; if (it == this->bp_map.end()) return; thscrapisbp * cbp = &(it->second); this->firstbp = cbp; it++; while (it != this->bp_map.end()) { // thprintf("BP: %.2f %.2f %.2f\n", cbp->x, cbp->y, cbp->z); cbp->next = &(it->second); cbp = cbp->next; it++; } } void thscrapis::insert_bp_direction(double x, double y, double z, double tx, double ty, double tz, thscraplp * slp) { // ak najde (x,y), tak prida direction std::map ::iterator it = this->bp_map.find(thscrapisloc(x,y)); if (it == this->bp_map.end()) return; double dx = tx - x, dy = ty - y, dz = tz - z, dl = hypot(dx, dy), d, tmpup, tmpdown; it->second.suml += hypot(dl,dz); it->second.sumsl += 1.0; if (dl < THSCRAPISRES) { if ((dz > 1.618) && (dz > it->second.up)) it->second.up = dz; if ((dz < -1.618) && (dz < -(it->second.down))) it->second.down = -dz; return; } if (slp->arrow != NULL) { tmpup = (slp->arrow->is_reversed ? slp->arrow->leg->leg->to_up : slp->arrow->leg->leg->from_up); tmpdown = (slp->arrow->is_reversed ? slp->arrow->leg->leg->to_down : slp->arrow->leg->leg->from_down); if (fabs(slp->arrow->leg->leg->total_gradient) >= slp->arrow->leg->leg->vtresh) { d = cos(slp->arrow->leg->leg->total_gradient / 180.0 * THPI); } else { d = 1.0; } if (!thisnan(tmpup)) { tmpup *= d; if (tmpup > it->second.up) it->second.up = tmpup; } if (!thisnan(tmpdown)) { tmpdown *= d; if (tmpdown > it->second.down) it->second.down = tmpdown; } } if (dy < 0) { dx *= -1.0; dy *= -1.0; } d = atan2(dx, dy); it->second.sumd += d; it->second.sums += 1.0; } void thscrapis::end_bp_direction() { // predeli directions this->firstbbp = this->firstbp; thscrapisbp * cbp = this->firstbp; while (cbp != NULL) { if (cbp->sums > 0.0) { cbp->sumd /= cbp->sums; cbp->dx = sin(cbp->sumd); cbp->dy = cos(cbp->sumd); cbp->dd = true; } else { cbp->dx = 0.0; cbp->dy = 0.0; } if (cbp->sumsl > 0.0) { cbp->suml /= cbp->sumsl; cbp->suml *= 0.618; if ((cbp->up < 0.0) && (cbp->down < 0.0)) { cbp->down = cbp->suml / 1.618; if (cbp->down > 0.618) cbp->down = 0.618; cbp->up = cbp->suml - cbp->down; if (cbp->up > 1.618) cbp->up = 1.618; } else if (cbp->up < 0.0) { cbp->up = 1.618; } else if (cbp->down < 0.0) { cbp->down = 1.618; } } if (cbp->up < 0.0) { cbp->up *= -1.0; if (cbp->up > 1.618) cbp->up = 1.618; } if (cbp->down < 0.0) { cbp->down *= -1.0; if (cbp->down > 0.618) cbp->down = 0.618; } cbp = cbp->next; } } void thscrapis::bp_interpolate(double x, double y, double & iz, double & id, double & idx, double & idy) { // prejde vsetky body a spocita interpolovane z a direction double sumw = 0.0, sumdw = 0.0, cw, dx, dy, dd; bool anyd = false; iz = 0.0; id = 0.0; thscrapisbp * cbp = this->firstbp; // thprintf("interpolation %.2f %.2f\n", x, y); while (cbp != NULL) { dx = x - cbp->x; dy = y - cbp->y; cw = hypot(dx, dy); if (cw < THSCRAPISRES) { iz = cbp->z; id = cbp->sumd; idx = cbp->dx; idy = cbp->dy; return; } //cw = pow(cw,-2.0) * exp(-2.0 * pow(dx * cbp->dx + dy * cbp->dy, 2.0)); dd = dx * cbp->dx + dy * cbp->dy; cw = 1 / (cw * cw) * exp(-2.0 * dd * dd); if (cbp->dd) { id += cw * cbp->sumd; sumdw += cw; anyd = true; } // thprintf("inserting z: %.2f %.2f -> %.2f x %.2f\n", cbp->x, cbp->y, cw, cbp->z); iz += cw * cbp->z; sumw += cw; cbp = cbp->next; } if (sumw == 0.0) return; iz /= sumw; if (anyd) { id /= sumdw; idx = sin(id); idy = cos(id); } else { id = 0.0; idx = 0.0; idy = 0.0; } } void thscrapis::insert_bp_shot(double fx, double fy, double fz, double tx, double ty, double tz) { // spocita dlzku double dx = tx - fx, dy = ty - fy, dz = tz - fz, dl = hypot(dx, ty), ddx, ddy, dirf, dirt, smp, frc, cx, cy; long i, n; if (dl < THSCRAPISRES) return; if (dy < 0.0) { ddx = -1.0 * dx / dl; ddy = -1.0 * dy / dl; } else { ddx = dx / dl; ddy = dy / dl; } // skusi najst from shot a to shot a ich smery std::map ::iterator fit = this->bp_map.find(thscrapisloc(fx,fy)), tit = this->bp_map.find(thscrapisloc(tx,ty)); thscrapisbp * cbp; if ((fit == this->bp_map.end()) && (tit == this->bp_map.end())) { dirf = atan2(ddx, ddy); dirt = dirf; } else if (fit == this->bp_map.end()) { dirt = tit->second.sumd; dirf = dirt; } else if (tit == this->bp_map.end()) { dirf = fit->second.sumd; dirt = dirf; } else { dirf = fit->second.sumd; dirt = tit->second.sumd; } // zacne vkladat body (na zaciatok), ale iba ak ich nemame n = long(dl / THSCRAPISSMP); smp = dl / (n + 1); for (i = 1; i <= n; i++) { frc = double(i) * smp / dl; cx = fx + frc * dx; cy = fy + frc * dy; cbp = &(this->bp_map[thscrapisloc(cx, cy)]); if (cbp->sums < 0.0) { cbp->x = cx; cbp->y = cy; cbp->z = fz + frc * dz; cbp->sumd = dirf + (dirt - dirf) * frc; cbp->dx = sin(cbp->sumd); cbp->dy = cos(cbp->sumd); cbp->sums = 0.0; cbp->next = this->firstbp; this->firstbp = cbp; } } } void thscrapis::insert_dim(double x, double y, double up, double down) { thscrapisdim * cd = &(*(this->dim_list.insert(this->dim_list.end(),thscrapisdim()))); this->bp_interpolate(x, y, cd->z, cd->dd, cd->dx, cd->dy); cd->x = x; cd->y = y; cd->up = up; cd->down = down; cd->zup = cd->z + up; cd->zdown = cd->z - down; if (this->firstdim == NULL) { this->firstdim = cd; } else { cd->next = this->firstdim; this->firstdim = cd; } } void thscrapis::insert_bp_dim() { // prejde vsetky existujuce, // ak je minimum vzdialenosti > THSCRAPISMAXDIMD // prida ho do listu // prejde list este raz a nastavi nexty thscrapisbp * bp = this->firstbbp; thscrapisdim * cd; double mindist, cdist; bool toinsert; while (bp != NULL) { cd = this->firstdim; toinsert = true; if (cd != NULL) { mindist = hypot(cd->x - bp->x, cd->y - bp->y); toinsert = false; cd = cd->next; while (cd != NULL) { cdist = hypot(cd->x - bp->x, cd->y - bp->y); if (cdist < mindist) mindist = cdist; cd = cd->next; } if (mindist > THSCRAPISMAXDIMD) toinsert = true; } if (toinsert) { cd = &(*(this->dim_list.insert(this->dim_list.end(),thscrapisdim()))); cd->x = bp->x; cd->y = bp->y; cd->z = bp->z; cd->dd = bp->sumd; cd->dx = bp->dx; cd->dy = bp->dy; cd->up = bp->up; cd->down = bp->down; cd->zup = cd->z + cd->up; cd->zdown = cd->z - cd->down; } bp = bp->next; } std::list :: iterator it = this->dim_list.begin(); if (it != this->dim_list.end()) { this->firstdim = &(*it); this->firstdim->next = NULL; it++; while (it != this->dim_list.end()) { cd = &(*it); cd->next = this->firstdim; this->firstdim = cd; it++; } } } void thscrapis::outline_interpolate_dims() { // poojde bod za bodom a spravi interpolaciu thscrapisolpt * oline, * olineln; oline = this->firstolseg; while (oline != NULL) { olineln = oline; while (olineln != NULL) { this->dim_interpolate(olineln->x, olineln->y, olineln->z, olineln->zu, olineln->zd); olineln = olineln->next; } oline = oline->next_segment; } } void thscrapis::dim_interpolate(double x, double y, double z, double & zu, double & zd) { thscrapisdim * cd = this->firstdim; if (cd == NULL) return; // prejde vsetky body a spocita interpolovane up, down, zup, zdown double sumw = 0.0, up = 0.0, down = 0.0, zup = 0.0, zdown = 0.0, dx, dy, cw; while (cd != NULL) { dx = x - cd->x; dy = y - cd->y; cw = hypot(dx, dy); if (cw < THSCRAPISRES) { zup = cd->zup; zdown = cd->zdown; up = cd->up; down = cd->down; sumw = 1.0; break; } cw = 1.0 / (cw * cw); //pow(cw,-2.0); // * exp(-2.0 * pow(dx * cd->dx + dy * cd->dy, 2.0)); zup += cw * cd->zup; zdown += cw * cd->zdown; up += cw * cd->up; down += cw * cd->down; sumw += cw; cd = cd->next; } if (sumw == 0.0) { zu = z + 1.0; zd = z - 1.0; return; } if (sumw > 0) { zup /= sumw; zdown /= sumw; up /= sumw; down /= sumw; } if (zup < z + up) zu = z + up; else zu = zup; if (zdown > z - down) zd = z - down; else zd = zdown; } #endif therion-5.4.1/thscrapis.h000066400000000000000000000103221307545355600153550ustar00rootroot00000000000000/** * @file thscrapis.h * Scrap interpolation structure. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscrapis_h #define thscrapis_h #include #include #include #include "thdb3d.h" #include "loch/lxMath.h" #define THSCRAPISRES 0.001 //#define THSCRAPIS_NEW3D 1 #ifndef THSCRAPIS_NEW3D struct thscrapisloc { double x, y; thscrapisloc(double xx, double yy) : x(xx), y(yy) {} }; bool operator < (const struct thscrapisloc & l1, const struct thscrapisloc & l2); struct thscrapisbp { double x, y, z, ///< 3D coordinates dd, dx, dy, ///< direction unit vector sumd, ///< sum of directions sums, ///< sum of direction weights. suml, sumsl, up, down; thscrapisbp * next; thscrapisbp() : x(0.0), y(0.0), z(0.0), dd(false), dx(0.0), dy(0.0), sumd(0.0), sums(-1.0), suml(0.0), sumsl(0.0), up(-1.6), down(-1.0), next(NULL) {}; }; struct thscrapisdim { double x, y, z, up, down, zup, zdown, dd, dx, dy; thscrapisdim * next; thscrapisdim() : x(0.0), y(0.0), z(0.0), up(0.0), down(0.0), zup(0.0), zdown(0.0), dd(0.0), dx(0.0), dy(0.0), next(NULL) {} }; #endif struct thscrapisolpt { double x, y, w; #ifndef THSCRAPIS_NEW3D double z, zd, zu; #else lxVec pt, dir; double d_up, d_dn; #endif bool visible, deletable, outer; thscrapisolpt * next, * prev, * next_segment; thdb3dvx * vx3dup, * vx3ddn; thscrapisolpt() : x(0.0), y(0.0), w(0.0), #ifndef THSCRAPIS_NEW3D z(0.0), zd(0.0), zu(0.0), #else d_up(0.0), d_dn(0.0), #endif visible(true), deletable(true), outer(true), next(NULL), prev(NULL), next_segment(NULL), vx3dup(NULL), vx3ddn(NULL) {} }; typedef thscrapisolpt * pthscrapisolpt; #ifdef THSCRAPIS_NEW3D struct thscrapis3line { pthscrapisolpt m_pA, m_pD; lxVec m_ptB, m_ptC, m_dirB, m_dirC; double m_dBup, m_dBdn, m_dCup, dCdn; thdb3dvx *m_A, * m_Aup, * m_Adn, * m_Bup, * m_Bdn, * m_Cup, * m_Cdn, * m_D, * m_Dup, * m_Ddn; }; #endif /** * Scrap polygon outline class. */ struct thscrapis { #ifndef THSCRAPIS_NEW3D thscrapisbp * firstbp, * firstbbp; std::map bp_map; thscrapisdim * firstdim; std::list dim_list; void insert_bp(double x, double y, double z); void end_bp(); void insert_bp_direction(double x, double y, double z, double tx, double ty, double tz, class thscraplp * slp); void end_bp_direction(); void insert_bp_shot(double fx, double fy, double fz, double tx, double ty, double tz); void bp_interpolate(double x, double y, double & iz, double & id, double & idx, double & idy); void insert_dim(double x, double y, double up, double down); void insert_bp_dim(); void outline_interpolate_dims(); void dim_interpolate(double x, double y, double z, double & zu, double & zd); #endif pthscrapisolpt (*tri_triangles) [3]; int tri_num; class thscrap * m_scrap; thscrapisolpt * firstolseg, * lastolseg, * lastolcseg; std::list ol_list; thscrapis(class thscrap * scrap); ///< Default constructor ~thscrapis(); ///< Default destructor #ifdef THSCRAPIS_NEW3D void int3d(); #endif void insert_outline_lnsegment(bool newsegment, class thline * line, bool outer, bool reverse, bool visible, long from, long to); void outline_scan(class thscraplo * outln); }; #endif therion-5.4.1/thscraplo.cxx000066400000000000000000000023031307545355600157270ustar00rootroot00000000000000/** * @file thscraplo.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscraplo.h" thscraplo::thscraplo() { this->next_line = NULL; this->next_outline = NULL; this->next_scrap_line = NULL; this->line = NULL; this->mode = TT_OUTLINE_NO; this->lfreefirst = true; this->lfreelast = true; } therion-5.4.1/thscraplo.h000066400000000000000000000027111307545355600153570ustar00rootroot00000000000000/** * @file thscraplo.h * Scrap outline line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscraplo_h #define thscraplo_h #include #include enum { TT_OUTLINE_NO, TT_OUTLINE_NORMAL, TT_OUTLINE_REVERSED, }; /** * Scrap outline line class. */ class thscraplo { public: bool lfreefirst, lfreelast; thscraplo * next_line, * next_outline, * next_scrap_line; class thline * line; int mode; thscraplo(); ///< Default constructor }; typedef std::list thscraplo_list; ///< Points list. #endif therion-5.4.1/thscraplp.cxx000066400000000000000000000113371307545355600157370ustar00rootroot00000000000000/** * @file thscraplp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thscraplp.h" #include "thscrap.h" #include "thexpmap.h" #include "loch/lxMath.h" thscraplp::thscraplp() { this->next_item = NULL; this->prev_item = NULL; this->station_name.clear(); this->station = NULL; this->ustation = NULL; this->arrow = NULL; this->lnio = false; this->type = 0; } void thscraplp::export_mp(thexpmapmpxs * out, thscrap * scrap, bool background) { if ((this->arrow != NULL) && (scrap->get_outline() == NULL) && (out->symset->is_assigned(SYMA_DIMENSIONS)) && background) { lxVec vff, vf1, vf2, vtt, vt1, vt2, rvec; double fl, fr, tl, tr; bool vertical; lxVecLimits vlim; bool reverse = (thdb.db1d.station_vec[this->arrow->leg->leg->from.id - 1].uid != arrow->start_node->uid); //bool reverse = false; //if (this->arrow->is_reversed) reverse = !reverse; //if (this->arrow->leg->reverse) reverse = !reverse; thdataleg * cl = this->arrow->leg->leg; if (reverse) { vff = lxVec(this->lnx2, this->lny2, this->lnz2); vtt = lxVec(this->lnx1, this->lny1, this->lnz1); } else { vff = lxVec(this->lnx1, this->lny1, this->lnz1); vtt = lxVec(this->lnx2, this->lny2, this->lnz2); } if (cl->walls != TT_FALSE) { if ((vff.x == vtt.x) && (vff.y == vtt.y)) { vlim.valid = false; vlim.Add(-cl->from_left,-cl->from_down,0.0); vlim.Add(cl->from_right,cl->from_up ,0.0); vlim.Add(-cl->to_left,-cl->to_down,0.0); vlim.Add(cl->to_right,cl->to_up ,0.0); vf1 = vff + vlim.min; vf2 = vff + lxVec(vlim.min.x, vlim.max.y, 0.0); vt2 = vff + vlim.max; vt1 = vff + lxVec(vlim.max.x, vlim.min.y, 0.0); } else { vertical = false; switch (out->proj->type) { case TT_2DPROJ_ELEV: case TT_2DPROJ_EXTEND: if (fabs(cl->total_gradient) < cl->vtresh) vertical = true; if ((vertical) || (vff.x < vtt.x) || ((vff.x == vtt.x) && (vff.y < vtt.y))) { fl = cl->from_up; fr = cl->from_down; tl = cl->to_up; tr = cl->to_down; } else { fl = cl->from_down; fr = cl->from_up; tl = cl->to_down; tr = cl->to_up; } break; default: fl = cl->from_left; fr = cl->from_right; tl = cl->to_left; tr = cl->to_right; } if (vertical) { rvec = lxVec(0.0, 1.0, 0.0); } else { rvec = lxVec(vtt.x - vff.x, vtt.y - vff.y, 0.0); rvec = rvec.Rotated(90.0,0.0); rvec.Normalize(); } vf1 = vff + (fl * rvec); vf2 = vff - (fr * rvec); vt1 = vtt + (tl * rvec); vt2 = vtt - (tr * rvec); } out->symset->export_mp_symbol_options(out->file, SYMA_DIMENSIONS); fprintf(out->file,"%s(((%.2f,%.2f) -- (%.2f,%.2f) -- (%.2f,%.2f) -- (%.2f,%.2f) -- cycle));\n", out->symset->get_mp_macro(SYMA_DIMENSIONS), thxmmxst(out, vf1.x, vf1.y), thxmmxst(out, vt1.x, vt1.y), thxmmxst(out, vt2.x, vt2.y), thxmmxst(out, vf2.x, vf2.y)); } } // export line if (!background) { bool export_shot = true; if (this->arrow != NULL) { thdataleg * cl = this->arrow->leg->leg; export_shot = ((cl->flags & TT_LEGFLAG_SPLAY) == 0) || scrap->centerline_io; } if (export_shot) { if (this->arrow != NULL) this->arrow->leg->leg->export_mp_flags(out->file); out->symset->export_mp_symbol_options(out->file, this->type); fprintf(out->file,"%s(((%.2f,%.2f) -- (%.2f,%.2f)));\n", out->symset->get_mp_macro(this->type), thxmmxst(out, this->lnx1, this->lny1), thxmmxst(out, this->lnx2, this->lny2)); } } } therion-5.4.1/thscraplp.h000066400000000000000000000031071307545355600153600ustar00rootroot00000000000000/** * @file thscraplp.h * Scrap polygon line class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thscraplp_h #define thscraplp_h #include #include "thdb1d.h" #include /** * Scrap polygon line class. */ class thscraplp { public: thscraplp * next_item, * prev_item; thobjectname station_name; thdb1ds * station, * ustation; class thdb1d_tree_arrow * arrow; thscraplp(); ///< Default constructor double stx, sty, stz, lnx1, lnx2, lny1, lny2, lnz1, lnz2; bool lnio; int type; void export_mp(class thexpmapmpxs * out, class thscrap * scrap, bool background); }; typedef std::list thscraplp_list; ///< Points list. #endif therion-5.4.1/thselector.cxx000066400000000000000000000400131307545355600161040ustar00rootroot00000000000000/** * @file thselector.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thselector.h" #include "thexception.h" #include "thconfig.h" #include #include #include "thparse.h" #include "thdatabase.h" #include "thdataobject.h" #include "thsurvey.h" #include "th2ddataobject.h" #include "thscrap.h" #include #include "thchenc.h" #include #include "thmap.h" thselector::thselector() { this->number = 0; this->cfgptr = NULL; } void thselector::assign_config(class thconfig * cptr) { this->cfgptr = cptr; } enum { TT_SELECTOR_RECURSIVE, TT_SELECTOR_MAP_LEVEL, TT_SELECTOR_CHAPTER_LEVEL, TT_SELECTOR_UNKNOWN, }; static const thstok thtt_selector_opts[] = { {"-chapter-level", TT_SELECTOR_CHAPTER_LEVEL}, {"-map-level", TT_SELECTOR_MAP_LEVEL}, {"-recursive", TT_SELECTOR_RECURSIVE}, {NULL, TT_SELECTOR_UNKNOWN} }; void thselector::parse_selection (bool usid, int nargs, char ** args) { double dum; int sv; thselector_item itm; itm.unselect = usid; if (nargs < 1) ththrow(("not enough command arguments")) // set object name if (strlen(*args) == 0) ththrow(("empty object name not allowed")) itm.name = this->cfgptr->get_str_buff()->append(*args); itm.src_name = this->cfgptr->get_db()->strstore(this->cfgptr->get_cfg_file()->get_cif_name(), true); itm.src_ln = this->cfgptr->get_cfg_file()->get_cif_line_number(); itm.number = ++this->number; // set recursive option int aid; for(aid = 1; aid < nargs; aid++) { switch (thmatch_token(args[aid],thtt_selector_opts)) { case TT_SELECTOR_RECURSIVE: aid++; switch (thmatch_token(args[aid],thtt_bool)) { case TT_FALSE: itm.recursive = false; break; case TT_TRUE: itm.recursive = true; break; case TT_UNKNOWN_BOOL: ththrow(("logical value expected -- %s", args[aid])) } break; case TT_SELECTOR_MAP_LEVEL: aid++; thparse_double(sv,dum,args[aid]); if ((sv != TT_SV_NUMBER) && (strcmp(args[aid],"basic") == 0)) { itm.map_level = -1; break; } if ((sv != TT_SV_NUMBER) || (dum < 0)) ththrow(("invalid map level -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid map level -- %s", *args)) itm.map_level = long(dum); break; case TT_SELECTOR_CHAPTER_LEVEL: aid++; thparse_double(sv,dum,args[aid]); if (sv == TT_SV_NAN) { itm.chapter_level = -1; break; } if ((sv != TT_SV_NUMBER) || (dum <= 0)) ththrow(("invalid chapter level -- %s", *args)) if (double(int(dum)) != dum) ththrow(("invalid chapter level -- %s", *args)) itm.chapter_level = long(dum); break; default: ththrow(("unknown option -- %s", args[aid])) } } this->data.push_back(itm); } class thselector_select_item { public: thdataobject * objp; const char * n1, * n2, * n3; void clear(); thselector_select_item() {this->clear();} void parse (thdataobject * op); bool operator < (const thselector_select_item & ii) const; }; void thselector_select_item::clear() { this->n1 = ""; this->n2 = this->n1; this->n3 = this->n1; this->objp = NULL; } bool thselector_select_item::operator < (const thselector_select_item & ii) const { int cmp1 = strcmp(this->n2, ii.n2); if (cmp1 < 0) return true; else if (cmp1 == 0) { size_t l1 = strlen(this->n1); size_t l2 = strlen(ii.n1); if ((l1 == 0) && (l2 > 0)) return true; if ((l1 > 0) && (l2 == 0)) return false; int cmp2 = strcmp(this->n1, ii.n1); if (cmp2 < 0) return true; else return false; } else return false; } void thselector_select_item::parse (thdataobject * op) { this->clear(); thsurvey * sp; switch (op->get_class_id()) { case TT_GRADE_CMD: case TT_LAYOUT_CMD: return; case TT_SURVEY_CMD: sp = (thsurvey *) op; this->n1 = ""; this->n2 = sp->get_reverse_full_name(); this->n3 = sp->get_full_name(); break; default: this->n1 = op->get_name(); this->n2 = op->get_father_survey()->get_reverse_full_name(); this->n3 = op->get_father_survey()->get_full_name(); } this->objp = op; } typedef std::vector thselector_siv; void thselector__export_survey_tree_node (FILE * cf, unsigned long level, thdataobject * optr) { thsurvey * ss; while (optr != NULL) { if (optr->get_class_id() == TT_SURVEY_CMD) { ss = (thsurvey *) optr; fprintf(cf,"xth_cp_data_tree_insert %lu", ss->id); if (ss->fsptr != NULL) fprintf(cf," %lu %lu", ss->fsptr->id, level); else fprintf(cf," {} %lu",level); fprintf(cf," %s %s",ss->get_name(),ss->full_name); if (strlen(ss->get_title()) > 0) { thdecode_tex(&(thdb.buff_enc), ss->get_title()); fprintf(cf," \"%s\"",thdb.buff_enc.get_buffer()); thdecode(&(thdb.buff_enc),TT_ASCII,ss->get_title()); thdecode_tex(&(thdb.buff_tmp), thdb.buff_enc.get_buffer()); fprintf(cf," \"%s\"",thdb.buff_tmp.get_buffer()); } else fprintf(cf," \"\" \"\""); // nakoniec statistika fprintf(cf, " \"length: %.2fm (surface %.2fm, duplicated %.2fm)" ,ss->stat.length,ss->stat.length_surface,ss->stat.length_duplicate); if (ss->stat.station_top != NULL) { fprintf(cf,"\\n" "vertical range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "north-south range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "east-west range: %.2fm (from %s@%s at %.2fm to %s@%s at %.2fm)\\n" "number of shots: %lu\\n" "number of stations: %lu" "\"\n", ss->stat.station_top->z - ss->stat.station_bottom->z, ss->stat.station_top->name, ss->stat.station_top->survey->full_name, ss->stat.station_top->z, ss->stat.station_bottom->name, ss->stat.station_bottom->survey->full_name, ss->stat.station_bottom->z, ss->stat.station_north->y - ss->stat.station_south->y, ss->stat.station_north->name, ss->stat.station_north->survey->full_name, ss->stat.station_north->y, ss->stat.station_south->name, ss->stat.station_south->survey->full_name, ss->stat.station_south->y, ss->stat.station_east->x - ss->stat.station_west->x, ss->stat.station_east->name, ss->stat.station_east->survey->full_name, ss->stat.station_east->x, ss->stat.station_west->name, ss->stat.station_west->survey->full_name, ss->stat.station_west->x, ss->stat.num_shots, ss->stat.num_stations ); } else { fprintf(cf,"\"\n"); } if (ss->foptr != NULL) thselector__export_survey_tree_node(cf,level+1,ss->foptr); } optr = optr->nsptr; } } void thselector__prepare_map_tree_export (thdatabase * db) { // prejde vsetky mapy a surveye a nastavi tmp_bool na true a tmp_ulong na 0 thdb_object_list_type::iterator obi = db->object_list.begin(); while (obi != db->object_list.end()) { (*obi)->tmp_bool = true; (*obi)->tmp_ulong = 0; obi++; } // prejde vsetky mapy a objektom v nich nastavi (tmp_bool) na false thdb2dmi * mi; obi = db->object_list.begin(); while (obi != db->object_list.end()) { if (((*obi)->fsptr != NULL) && ((*obi)->get_class_id() == TT_MAP_CMD)) { mi = ((thmap*)(*obi))->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { mi->object->tmp_bool = false; } mi = mi->next_item; } } obi++; } } void thselector__export_map_tree_node (FILE * cf, unsigned long level, unsigned long pass, thdataobject * optr, thmap * fmap) { if (optr->tmp_ulong == pass) return; if (optr->fsptr == NULL) return; optr->tmp_ulong = pass; thmap * mptr = NULL; int subtype = 0; const char * types = NULL; switch (optr->get_class_id()) { case TT_MAP_CMD: mptr = (thmap*) optr; //id fid level types = "map"; if (mptr->is_basic) subtype = 1; break; default: //case TT_SCRAP_CMD: //types = "scrap"; //do not export scraps return; break; //default: // break; } ((thmap*)optr)->nz++; fprintf(cf,"xth_cp_map_tree_insert %s %d %luX%lu",types,subtype,optr->id,((thmap*)optr)->nz); if (fmap == NULL) fprintf(cf," p%d %lu",((thmap*)optr)->projection_id,level); else fprintf(cf," %luX%lu %lu",fmap->id,fmap->nz,level); fprintf(cf," %s %s%s%s",optr->get_name(),optr->get_name(), (strlen(optr->fsptr->full_name) > 0 ? "@" : ""), optr->fsptr->full_name); if (strlen(optr->get_title()) > 0) { thdecode_tex(&(thdb.buff_enc), optr->get_title()); fprintf(cf," \"%s\"",thdb.buff_enc.get_buffer()); thdecode(&(thdb.buff_enc),TT_ASCII,optr->get_title()); thdecode_tex(&(thdb.buff_tmp), thdb.buff_enc.get_buffer()); fprintf(cf," \"%s\"\n",thdb.buff_tmp.get_buffer()); } else fprintf(cf," \"\" \"\"\n"); thdb2dmi * mi; if (mptr != NULL) { mi = mptr->first_item; while (mi != NULL) { if (mi->type == TT_MAPITEM_NORMAL) { thselector__export_map_tree_node(cf, level+1, pass, mi->object, mptr); } mi = mi->next_item; } } } void thselector::dump_selection_db (FILE * cf, thdatabase * db) { // exportuje strom surveyov fprintf(cf,"set xth(ctrl,cp,datlist) {}\n"); if (db->fsurveyptr != NULL) thselector__export_survey_tree_node(cf,0,db->fsurveyptr); fprintf(cf,"xth_cp_data_tree_create\n"); // exportuje strom map po vsetkych projekciach fprintf(cf,"set xth(ctrl,cp,maplist) {}\n"); // exportuje vsetky projekcie thdb2dprj_list::iterator prjli = db->db2d.prj_list.begin(); thbuffer projdir; projdir.guarantee(32); while (prjli != db->db2d.prj_list.end()) { projdir.strcpy(""); if ((prjli->type == TT_2DPROJ_ELEV) && (prjli->pp1 != 0.0)) { sprintf(projdir.get_buffer(), "\\[%.1f\\]", prjli->pp1); } fprintf(cf,"xth_cp_map_tree_insert projection 0 p%d {} 0",prjli->id); if (strlen(prjli->index) > 0) fprintf(cf," %s%s:%s",thmatch_string(prjli->type,thtt_2dproj), projdir.get_buffer(), prjli->index); else fprintf(cf," %s%s",thmatch_string(prjli->type,thtt_2dproj), projdir.get_buffer()); fprintf(cf," {} {} {}\n"); prjli++; } // exportuje vsetky mapy a scrapy thselector__prepare_map_tree_export(db); thdb_object_list_type::iterator obi = db->object_list.begin(); while (obi != db->object_list.end()) { if ((*obi)->get_class_id() == TT_MAP_CMD) ((thmap*)(*obi))->nz = 0; obi++; } obi = db->object_list.begin(); while (obi != db->object_list.end()) { if (((*obi)->fsptr != NULL) && ((*obi)->get_class_id() == TT_MAP_CMD) && (((thmap*)(*obi))->tmp_bool)) thselector__export_map_tree_node(cf,1,(*obi)->id,(*obi),NULL); obi++; } fprintf(cf,"xth_cp_map_tree_create\n"); } void thselector::dump_selection (FILE * cf) { thselector_list::iterator ii = this->data.begin(); if ((ii != this->data.end()) && (!this->cfgptr->get_comments_skip())) fprintf(cf,"# Objects selected for output.\n"); while (ii != this->data.end()) { if (ii->unselect) fprintf(cf,"unselect"); else fprintf(cf,"select"); fprintf(cf," %s", ii->name); if (ii->recursive == false) fprintf(cf," -recursive off"); if (ii->map_level != 0) { if (ii->map_level < 0) fprintf(cf," -map-level basic"); else fprintf(cf," -map-level %ld", ii->map_level); } if (ii->chapter_level != 0) { if (ii->chapter_level < 0) fprintf(cf," -chapter-level -"); else fprintf(cf," -chapter-level %ld", ii->chapter_level); } fprintf(cf,"\n"); ii++; } ii = this->data.begin(); if (ii != this->data.end()) fprintf(cf,"\n"); } void thselector::select_db(class thdatabase * db) { thmbuffer mbf; char ** nms, * nobj = NULL, * nsrv = NULL; int nn = 0; //thsurvey * objsrv; thdataobject * objptr = NULL; bool to_cont = false, select_all = false, has_selected_survey = false; thselector_list::iterator ii = this->data.begin(); if (this->data.empty()) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); return; } while (ii != this->data.end()) { if (ii->unselect && (ii == this->data.begin())) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); has_selected_survey = true; } // let's separate name & survey to_cont = true; select_all = false; thsplit_strings(& mbf, ii->name, '@'); nms = mbf.get_buffer(); nn = mbf.get_size(); switch (nn) { case 1: nobj = *nms; nsrv = NULL; break; case 2: nobj = nms[0]; nsrv = nms[1]; break; default: thwarning(("%s [%d] -- invalid object specification", ii->src_name, ii->src_ln)) to_cont = false; } if (!to_cont) { ii++; continue; } if ((nsrv == NULL) && ((strlen(nobj) == 0) || (strcmp(nobj,"*") == 0))) { select_all = true; } if ((!select_all)) { try { objptr = db->get_object(thobjectname(nobj,nsrv),NULL); } catch(...) { objptr = NULL; } if (objptr == NULL) { thwarning(("%s [%d] -- object not found -- \"%s\"", ii->src_name, ii->src_ln, nobj)) to_cont = false; } } if (!to_cont) { ii++; continue; } if (select_all) { this->select_all(&(*ii), db); has_selected_survey = true; } else { ii->optr = objptr; switch (objptr->get_class_id()) { case TT_SURVEY_CMD: this->select_survey(&(*ii), (thsurvey *) objptr); has_selected_survey = true; break; default: this->select_object(&(*ii), objptr); break; } } ii++; } // cycle of select and unselect options if (!has_selected_survey) { thselector_item xitm; xitm.unselect = false; this->select_all(&xitm, db); } } void thselector::select_object(thselector_item * pitm, class thdataobject * optr) { if (pitm->unselect) { optr->selected = false; optr->selected_number = pitm->number; } else { optr->selected = true; optr->selected_number = pitm->number; } } void thselector::select_all(thselector_item * pitm, class thdatabase * db) { thdb_object_list_type::iterator ii = db->object_list.begin(); while (ii != db->object_list.end()) { switch((*ii)->get_class_id()) { case TT_SURVEY_CMD: this->select_object(pitm,*ii); default: break; } ii++; } } void thselector::select_survey(thselector_item * pitm, class thsurvey * srv) { // oznaci vsety pod nim thdataobject * cptr = srv->get_first_survey_object(); while (cptr != NULL) { if ((cptr->get_class_id() == TT_SURVEY_CMD) && pitm->recursive) this->select_survey(pitm, (thsurvey *) cptr); //else { // this->select_object(pitm, cptr); //} cptr = cptr->nsptr; } // oznaci samotne survey this->select_object(pitm, (thdataobject *) srv); } therion-5.4.1/thselector.h000066400000000000000000000050241307545355600155340ustar00rootroot00000000000000/** * @file thselector.h * Database selector class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thselector_h #define thselector_h #include #include /** * Selection. */ class thselector_item { public: const char * name, *src_name; unsigned long src_ln; unsigned long number; bool unselect, recursive; long map_level, chapter_level; class thdataobject * optr; thselector_item () : name(""), src_name(""), src_ln(0), unselect(false), recursive(true), map_level(0), chapter_level(0), optr(NULL) {} }; typedef std::list thselector_list; /** * Selector class. */ class thselector { public: thselector(); ///< Default constructor. class thconfig * cfgptr; ///< Current config pointer. thselector_list data; ///< Selection data. void select_object(thselector_item * pitm, class thdataobject * optr); ///< Select object. void select_all(thselector_item * pitm, class thdatabase * db); ///< Select all objects in db. void select_survey(thselector_item * pitm, class thsurvey * srv); ///< Select survey. unsigned long number; void assign_config(class thconfig * cptr); ///< Assign configuration object. /** * Parse select option from config file. */ void parse_selection (bool usid, int nargs, char ** args); /** * Dump selection into file. */ void dump_selection (FILE * cf); /** * Dump database selection options into file. */ void dump_selection_db (FILE * cf, class thdatabase * db); /** * Select objects in database. */ void select_db(class thdatabase * db); }; #endif therion-5.4.1/thsketch.cxx000066400000000000000000000033351307545355600155530ustar00rootroot00000000000000/** * @file thsketch.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "therion.h" #include "thsketch.h" #include "thscrap.h" #include "thwarpp.h" #include "thconfig.h" thsketch::thsketch() { this->m_x = 0.0; this->m_y = 0.0; this->m_warp = NULL; } thsketch::~thsketch() { if (this->m_warp != NULL) this->m_warp->self_delete(); } thpic * thsketch::morph(double scale) { if (this->m_warp == NULL) { switch (thcfg.sketch_warp) { case THSKETCH_WARP_LINEAR: this->m_warp = new thwarplin; break; case THSKETCH_WARP_IDPOINT: this->m_warp = new thwarpinvdist; break; case THSKETCH_WARP_IDLINE: //this->m_warp = new thwarpinvdistln; this->m_warp = new thwarpfastinvdistln; break; default: this->m_warp = new thwarpp; } } return this->m_warp->morph(this, scale); } therion-5.4.1/thsketch.h000066400000000000000000000030661307545355600152010ustar00rootroot00000000000000/** * @file thsketch.h * sketch module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsketch_h #define thsketch_h #include #include #include "thpic.h" enum { THSKETCH_WARP_UNKNOWN, THSKETCH_WARP_LINEAR, THSKETCH_WARP_IDPOINT, THSKETCH_WARP_IDLINE, THSKETCH_WARP_PLAQUETTE, }; /** * Sketch class. */ struct thsketch { thpic m_pic; ///< Picture. double m_x; //!< sketch points X offset double m_y; //!< sketch points Y offset class thwarp * m_warp; ///< Warping class. class thscrap * m_scrap; ///< Sketch scrap. thsketch(); ~thsketch(); thpic * morph(double scale); }; typedef std::list thsketch_list; #endif therion-5.4.1/thsurface.cxx000066400000000000000000000363341307545355600157270ustar00rootroot00000000000000/** * @file thsurface.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsurface.h" #include "thexception.h" #include "thchenc.h" #include "thmbuffer.h" #include "thtflength.h" #include "thdatabase.h" #include "thcsdata.h" #include #ifdef THMSVC #define hypot _hypot #endif #include "thdatareader.h" #include "thparse.h" #include "thdb1d.h" #include "thinfnan.h" #ifdef THMSVC #include #define getcwd _getcwd #endif enum { TT_SURFACE_GFLIP_UNKNOWN, TT_SURFACE_GFLIP_VERTICAL, TT_SURFACE_GFLIP_HORIZONTAL, TT_SURFACE_GFLIP_NONE, }; static const thstok thtt_surface_gflip[] = { {"horiz", TT_SURFACE_GFLIP_HORIZONTAL}, {"horizontal", TT_SURFACE_GFLIP_HORIZONTAL}, {"none", TT_SURFACE_GFLIP_NONE}, {"vert", TT_SURFACE_GFLIP_VERTICAL}, {"vertical", TT_SURFACE_GFLIP_VERTICAL}, {NULL, TT_SURFACE_GFLIP_UNKNOWN}, }; thsurface::thsurface() { // replace this by setting real properties initialization this->pict_name = NULL; this->pict_type = TT_IMG_TYPE_UNKNOWN; this->pict_stations = false; this->pict_X1 = thnan; this->pict_Y1 = thnan; this->pict_X2 = thnan; this->pict_Y2 = thnan; this->pict_x1 = thnan; this->pict_y1 = thnan; this->pict_x2 = thnan; this->pict_y2 = thnan; this->grid_ox = thnan; this->grid_oy = thnan; this->grid_dx = thnan; this->grid_dy = thnan; this->grid_nx = 0; this->grid_ny = 0; this->grid_size = 0; this->grid_counter = 0; this->calib_x = thnan; this->calib_y = thnan; this->calib_xx = thnan; this->calib_xy = thnan; this->calib_yx = thnan; this->calib_yy = thnan; this->calib_r = thnan; this->calib_s = thnan; this->grid = NULL; this->grid_flip = TT_SURFACE_GFLIP_NONE; this->s1.clear(); this->s2.clear(); this->d3dok = false; } thsurface::~thsurface() { delete [] this->grid; } int thsurface::get_class_id() { return TT_SURFACE_CMD; } bool thsurface::is(int class_id) { if (class_id == TT_SURFACE_CMD) return true; else return thdataobject::is(class_id); } int thsurface::get_cmd_nargs() { // replace by real number of arguments return 0; } const char * thsurface::get_cmd_end() { // insert endcommand if multiline command return "endsurface"; } const char * thsurface::get_cmd_name() { // insert command name here return "surface"; } thcmd_option_desc thsurface::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_surface_opt); if (id == TT_SURFACE_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch(id) { case TT_SURFACE_PICTURE: return thcmd_option_desc(id,2); break; case TT_SURFACE_GRID: return thcmd_option_desc(id,6); break; default: return thcmd_option_desc(id); } } void thsurface::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { switch (cod.id) { // replace this by real properties setting case 0: this->parse_grid(args[0]); break; case TT_SURFACE_GRID: this->parse_grid_setup(args); break; case TT_SURFACE_GRID_UNITS: this->grid_units.parse_units(args[0]); break; case TT_SURFACE_GRID_FLIP: if (this->grid != NULL) ththrow(("grid-flip specification after grid data not allowed")); this->grid_flip = thmatch_token(args[0], thtt_surface_gflip); if (this->grid_flip == TT_SURFACE_GFLIP_UNKNOWN) ththrow(("unknown surface flip mode -- %s", args[0])) break; case TT_SURFACE_PICTURE: this->parse_picture(args); break; // if not found, try to set fathers properties default: thdataobject::set(cod, args, argenc, indataline); } } void thsurface::self_delete() { delete this; } void thsurface::self_print_properties(FILE * outf) { thdataobject::self_print_properties(outf); fprintf(outf,"thsurface:\n"); if (this->pict_name != NULL) { fprintf(outf,"\tpict_name:\t%s\n", this->pict_name); } } void thsurface::parse_picture(char ** args) { thbuffer pict_path; pict_path.guarantee(1024); getcwd(pict_path.get_buffer(),1024); long i; if (strlen(args[0]) == 0) ththrow(("picture name not specified")) pict_path += "/"; pict_path += thdb.csrc.name; char * pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if ((pp[i] == '/') || (pp[i] == '\\')) { break; } else pp[i] = 0; } if (strlen(pp) == 0) pict_path = "/"; pict_path += args[0]; pp = pict_path.get_buffer(); for(i = (long)strlen(pp); i >= 0; i--) { if (pp[i] == '\\') pp[i] = '/'; } this->pict_name = thdb.strstore(pp); // thprintf("\npict name: %s\n", this->pict_name); this->pict_dpi = 300.0; this->pict_width = 1000; this->pict_height = 1000; // potom obrazok skontroluje, vytiahne jeho rozmery a DPI try { thparse_image(this->pict_name, this->pict_width, this->pict_height, this->pict_dpi, this->pict_type); } catch (...) { this->pict_name = NULL; threwarning(("%s [%d] -- error reading bitmap", thdbreader.get_cinf()->get_cif_name(), thdbreader.get_cinf()->get_cif_line_number())); } // potom parsne kalibraciu thmbuffer calib; thsplit_words(&calib, args[1]); thtflength ltr; int sv; long ncals = calib.get_size(); char ** cals = calib.get_buffer(); switch (ncals) { case 9: ltr.parse_units(cals[8]); ncals--; case 8: // parsne jednotlive cisla #define surfpiccaldbl(XXX,YYY) \ thparse_double(sv, this->XXX, cals[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", cals[YYY])) surfpiccaldbl(pict_X1,0); surfpiccaldbl(pict_Y1,1); this->convert_cs(cals[2], cals[3], this->pict_x1, this->pict_y1); if (this->cs == TTCS_LOCAL) { this->pict_x1 = ltr.transform(this->pict_x1); this->pict_y1 = ltr.transform(this->pict_y1); } surfpiccaldbl(pict_X2,4); surfpiccaldbl(pict_Y2,5); this->convert_cs(cals[6], cals[7], this->pict_x2, this->pict_y2); if (this->cs == TTCS_LOCAL) { this->pict_x2 = ltr.transform(this->pict_x2); this->pict_y2 = ltr.transform(this->pict_y2); } if (((this->pict_X1 == this->pict_X2) && (this->pict_Y1 == this->pict_Y2)) || ((this->pict_x1 == this->pict_x2) && (this->pict_y1 == this->pict_y2))) { ththrow(("duplicate points in picture calibration")); } break; case 6: surfpiccaldbl(pict_X1,0); surfpiccaldbl(pict_Y1,1); surfpiccaldbl(pict_X2,3); surfpiccaldbl(pict_Y2,4); thparse_objectname(this->s1, &(thdb.buff_stations), cals[2]); thparse_objectname(this->s2, &(thdb.buff_stations), cals[5]); this->ssurvey = thdb.get_current_survey(); if ((this->pict_X1 == this->pict_X2) && (this->pict_Y1 == this->pict_Y2)) { ththrow(("duplicate points in picture calibration")); } break; default: ththrow(("invalid number of picture calibration arguments -- %d", ncals)) } } void thsurface::calibrate() { // spocita origin, scale (pri 300 dpi) a rotaciu double olen, nlen, scale, ang, tang; olen = hypot(this->pict_X2 - this->pict_X1, this->pict_Y2 - this->pict_Y1); nlen = hypot(this->pict_x2 - this->pict_x1, this->pict_y2 - this->pict_y1); ang = atan2(this->pict_Y2 - this->pict_Y1, this->pict_X2 - this->pict_X1); tang = atan2(this->pict_y2 - this->pict_y1, this->pict_x2 - this->pict_x1); tang -= ang; this->calib_xx = cos(tang); this->calib_xy = -sin(tang); this->calib_yx = sin(tang); this->calib_yy = cos(tang); scale = nlen / olen; this->calib_s = scale; this->calib_r = - tang / 3.14159265358 * 180.0; this->calib_xx *= scale; this->calib_yy *= scale; this->calib_xy *= scale; this->calib_yx *= scale; this->calib_x = this->pict_x1 - this->calib_xx * pict_X1 - this->calib_xy * pict_Y1; this->calib_y = this->pict_y1 - this->calib_yx * pict_X1 - this->calib_yy * pict_Y1; } void thsurface::check_stations() { if (!this->s1.is_empty()) { thdb1ds * ds1, * ds2; // najde stations, error ak nie this->s1.id = thdb.db1d.get_station_id(this->s1, this->ssurvey); if (this->s1.id == 0) { this->throw_source(); if (this->s1.survey == NULL) threthrow2(("station doesn't exist -- %s", this->s1.name)) else threthrow2(("station doesn't exist -- %s@%s", this->s1.name, this->s1.survey)) } this->s2.id = thdb.db1d.get_station_id(this->s2, this->ssurvey); if (this->s2.id == 0) { this->throw_source(); if (this->s2.survey == NULL) threthrow2(("station doesn't exist -- %s", this->s2.name)) else threthrow2(("station doesn't exist -- %s@%s", this->s2.name, this->s2.survey)) } // priradi si x a y a skontroluje ci su roozne ds1 = &(thdb.db1d.station_vec[this->s1.id - 1]); ds2 = &(thdb.db1d.station_vec[this->s2.id - 1]); this->pict_x1 = ds1->x; this->pict_y1 = ds1->y; this->pict_x2 = ds2->x; this->pict_y2 = ds2->y; if ((this->pict_x1 == this->pict_x2) && (this->pict_y1 == this->pict_y2)) { this->throw_source(); threthrow2(("duplicate points in picture calibration")); } } } void thsurface::parse_grid_setup(char ** args) { if (this->grid != NULL) ththrow(("grid specification after grid data not allowed")); // nacitame vsetky premenne ktore treba double dblv; int sv; #define parsedbl(XXX,YYY) \ thparse_double(sv, dblv, args[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", args[YYY])) \ XXX = this->grid_units.transform(dblv); #define parsenum(XXX,YYY) \ thparse_double(sv, dblv, args[YYY]); \ if (sv != TT_SV_NUMBER) \ ththrow(("number expected -- %s", args[YYY])) \ if (dblv <= 0) \ ththrow(("positive number expected -- %s", args[YYY])) \ if (dblv != double(long(dblv))) \ ththrow(("integer expected -- %s", args[YYY])) \ XXX = long(dblv); this->convert_cs(args[0], args[1], this->grid_ox, this->grid_oy); if (this->cs == TTCS_LOCAL) { this->grid_ox = this->grid_units.transform(this->grid_ox); this->grid_oy = this->grid_units.transform(this->grid_oy); } parsedbl(this->grid_dx,2); if (this->grid_dx == 0.0) ththrow(("non-zero number expected -- %s", args[2])); parsedbl(this->grid_dy,3); if (this->grid_dy == 0.0) ththrow(("non-zero number expected -- %s", args[3])); parsenum(this->grid_nx,4); if (this->grid_nx < 2) ththrow(("number > 1 expected -- %s", args[4])); parsenum(this->grid_ny,5); if (this->grid_ny < 2) ththrow(("number > 1 expected -- %s", args[5])); } void thsurface::parse_grid(char * spec) { if (this->grid_nx == 0) ththrow(("grid dimensions not specified")); if (this->grid == NULL) { this->grid_counter = 0; this->grid_size = this->grid_nx * this->grid_ny; this->grid = new double [this->grid_size]; } // rozdelime na argumenty thsplit_args(&thdb.mbuff_tmp, spec); // kazdy parsneme ako cislo a zapiseme do pola long i, ni = thdb.mbuff_tmp.get_size(); long x, y; int sv; double alt; char ** heights = thdb.mbuff_tmp.get_buffer(); for(i = 0; i < ni; i++) { thparse_double(sv, alt, heights[i]); if (sv != TT_SV_NUMBER) ththrow(("number expected -- %s", heights[i])) if (this->grid_counter == this->grid_size) ththrow(("too many grid data")) x = this->grid_counter % this->grid_nx; y = this->grid_ny - (this->grid_counter / this->grid_nx) - 1; switch (this->grid_flip) { case TT_SURFACE_GFLIP_VERTICAL: y = this->grid_ny - y - 1; break; case TT_SURFACE_GFLIP_HORIZONTAL: x = this->grid_nx - x - 1; break; } this->grid[y * this->grid_nx + x] = this->grid_units.transform(alt); this->grid_counter++; } } void thsurface::start_insert() { if (this->grid_counter < this->grid_size) ththrow(("missing grid data")) } thdb3ddata * thsurface::get_3d() { if (this->grid_size == 0) return NULL; if (this->d3dok) return &(this->d3d); // vytvorime 3d data long i, j; double nx, ny, nz, nl, nt; thdb3dvx ** surfvx = new thdb3dvx* [this->grid_size], * pvx, * cvx; #define grd(I, J) (this->grid_nx * (J) + (I)) for(i = 0; i < this->grid_nx; i++) for(j = 0; j < this->grid_ny; j++) surfvx[grd(i,j)] = this->d3d.insert_vertex( this->grid_ox + i * this->grid_dx, this->grid_oy + j * this->grid_dy, this->grid[grd(i,j)] ); // zratame normaly for(i = 0; i < this->grid_nx; i++) for(j = 0; j < this->grid_ny; j++) { // TODO - vlozit vsetky prilahle if (i > 0) { pvx = surfvx[grd(i-1,j)]; cvx = surfvx[grd(i,j)]; nx = pvx->x - cvx->x; ny = pvx->y - cvx->y; nz = pvx->z - cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = nx; nx = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (i < (this->grid_nx - 1)) { pvx = surfvx[grd(i+1,j)]; cvx = surfvx[grd(i,j)]; nx = - pvx->x + cvx->x; ny = - pvx->y + cvx->y; nz = - pvx->z + cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = nx; nx = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (j > 0) { pvx = surfvx[grd(i,j-1)]; cvx = surfvx[grd(i,j)]; nx = pvx->x - cvx->x; ny = pvx->y - cvx->y; nz = pvx->z - cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = ny; ny = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } if (j < (this->grid_ny - 1)) { pvx = surfvx[grd(i,j+1)]; cvx = surfvx[grd(i,j)]; nx = - pvx->x + cvx->x; ny = - pvx->y + cvx->y; nz = - pvx->z + cvx->z; nl = hypot(nz, hypot(nx, ny)); nx /= nl; ny /= nl; nz /= nl; nt = ny; ny = nz; nz = -nt; cvx->insert_normal(nx, ny, nz); } } // povklada trojuholniky thdb3dfc * fc; for(i = 0; i < (this->grid_nx - 1); i++) { fc = this->d3d.insert_face(THDB3DFC_TRIANGLE_STRIP); for(j = 0; j < this->grid_ny; j++) { fc->insert_vertex(surfvx[grd(i,j)]); fc->insert_vertex(surfvx[grd(i+1,j)]); } } delete [] surfvx; this->d3dok = true; this->d3d.postprocess(); return &(this->d3d); } therion-5.4.1/thsurface.h000066400000000000000000000073271307545355600153540ustar00rootroot00000000000000/** * @file thsurface.h * surface module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsurface_h #define thsurface_h #include "thdb3d.h" #include "thdataobject.h" #include "thobjectname.h" #include "thtflength.h" /** * surface command options tokens. */ enum { TT_SURFACE_UNKNOWN = 2000, TT_SURFACE_PICTURE = 2001, TT_SURFACE_GRID = 2002, TT_SURFACE_GRID_UNITS = 2003, TT_SURFACE_GRID_FLIP = 2004, }; /** * surface command options parsing table. */ static const thstok thtt_surface_opt[] = { {"bitmap", TT_SURFACE_PICTURE}, {"grid", TT_SURFACE_GRID}, {"grid-flip", TT_SURFACE_GRID_FLIP}, {"grid-units", TT_SURFACE_GRID_UNITS}, {NULL, TT_SURFACE_UNKNOWN}, }; /** * surface class. */ class thsurface : public thdataobject { public: // insert here real properties const char * pict_name; bool pict_stations; thobjectname s1, s2; class thsurvey * ssurvey; double pict_X1, pict_Y1, pict_X2, pict_Y2, pict_x1, pict_y1, pict_x2, pict_y2, grid_ox, grid_oy, grid_dx, grid_dy, calib_x, calib_y, calib_s, calib_r, calib_xx, calib_yy, calib_xy, calib_yx, pict_dpi, pict_height, pict_width; long grid_nx, grid_ny, grid_counter, grid_size; int grid_flip, pict_type; thtflength grid_units; double * grid; thdb3ddata d3d; bool d3dok; void parse_grid(char * spec); void parse_grid_setup(char ** args); void parse_picture(char ** args); void calibrate(); /** * Standard constructor. */ thsurface(); /** * Standard destructor. */ virtual ~thsurface(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return class name. */ virtual const char * get_class_name() {return "thsurface";}; /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Print object properties. */ virtual void self_print_properties(FILE * outf); /** * check stations. */ void check_stations(); virtual void start_insert(); thdb3ddata * get_3d(); }; #endif therion-5.4.1/thsurvey.cxx000066400000000000000000000172651307545355600156360ustar00rootroot00000000000000/** * @file thsurvey.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsurvey.h" #include "thexception.h" #include "thchenc.h" #include "thdate.h" #include "thtfangle.h" #include "thinfnan.h" #include "thdata.h" thsurvey::thsurvey() { this->full_name = ""; this->reverse_full_name = this->full_name; this->foptr = NULL; this->loptr = NULL; this->decdef = false; this->decuds = thnan; this->num1 = 0; this->level = 0; this->person_renames.clear(); this->entrance.clear(); this->data = NULL; this->privatens = true; this->surveyns = NULL; } thsurvey * thsurvey::get_nss() { if (this->surveyns == NULL) { this->surveyns = this; if (!this->privatens) { while ((!this->surveyns->privatens) && (this->surveyns->fsptr != NULL)) { this->surveyns = this->surveyns->fsptr; } } } return this->surveyns; } thsurvey::~thsurvey() { } int thsurvey::get_class_id() { return TT_SURVEY_CMD; } bool thsurvey::is(int class_id) { if (class_id == TT_SURVEY_CMD) return true; else return thdataobject::is(class_id); } int thsurvey::get_cmd_nargs() { return 1; } const char * thsurvey::get_cmd_end() { // insert endcommand if multiline command return NULL; } const char * thsurvey::get_cmd_name() { // insert endcommand if multiline command return "survey"; } thcmd_option_desc thsurvey::get_cmd_option_desc(const char * opts) { int id = thmatch_token(opts, thtt_survey_opt); if (id == TT_SURVEY_UNKNOWN) return thdataobject::get_cmd_option_desc(opts); else switch (id) { case TT_SURVEY_PERSON_RENAME: return thcmd_option_desc(id,2); default: return thcmd_option_desc(id); } } enum { TT_SNS_EXPORT, TT_SNS_PRIVATE, TT_SNS_UNKNOWN, }; static const thstok thtt_sns[] = { {"off",TT_SNS_EXPORT}, {"on",TT_SNS_PRIVATE}, {NULL, TT_SNS_UNKNOWN}, }; void thsurvey::set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline) { thperson tmpp1, tmpp2; if (cod.id == 1) cod.id = TT_DATAOBJECT_NAME; switch (cod.id) { case TT_SURVEY_NAMESPACE: switch (thmatch_token(*args, thtt_sns)) { case TT_SNS_PRIVATE: this->privatens = false; break; case TT_SNS_EXPORT: this->privatens = false; break; default: ththrow(("invalid -namespace switch -- %s", *args)) } break; case TT_SURVEY_DECLINATION: this->parse_declination(*args); break; case TT_SURVEY_PERSON_RENAME: thencode(&(this->db->buff_enc), args[0], argenc); tmpp1.parse(this->db, this->db->buff_enc.get_buffer()); thencode(&(this->db->buff_enc), args[1], argenc); tmpp2.parse(this->db, this->db->buff_enc.get_buffer()); this->person_renames[tmpp1] = tmpp2; break; case TT_SURVEY_ENTRANCE: thparse_objectname(this->entrance, & this->db->buff_stations, *args); break; case TT_DATAOBJECT_NAME: if (th_is_keyword(*args)) this->name = this->db->strstore(*args); else ththrow(("invalid keyword -- %s", *args)); break; default: thdataobject::set(cod, args, argenc, indataline); } } void thsurvey::self_delete() { delete this; } void thsurvey::self_print_properties(FILE * outf) { size_t nval, idx; thtfpwfxy * vals; thdataobject::self_print_properties(outf); fprintf(outf,"thsurvey:\n"); fprintf(outf,"\tfull name: \"%s\" (\"%s\")\n", this->full_name, this->reverse_full_name.get_buffer()); if (this->decdef) { fprintf(outf,"\tdeclination:\n"); nval = this->declin.get_size(); vals = this->declin.get_values(); for(idx = 0; idx < nval; idx++) { fprintf(outf,"\t\t%0.2f -> %8.5f deg\n",vals[idx].x,vals[idx].y); } } else fprintf(outf,"\tdeclination: none\n"); fprintf(outf,"\tlength: %g\n",this->stat.length); } int thsurvey::get_context() { return (THCTX_SURVEY | THCTX_NONE); } const char * thsurvey::get_full_name() { return this->full_name; } void thsurvey::parse_declination(char * str) { // splitne input string thtfangle du; thdate dd; double decl, //year, dumdt; double * all_data = NULL; double data2 [2]; int nid, idx, dateidx, typedt; thsplit_args(& this->db->mbuff_tmp, str); long nargs = this->db->mbuff_tmp.get_size(); char ** args = this->db->mbuff_tmp.get_buffer(); // ak 1 4 6 ... error if ((nargs == 1) || (((nargs % 2) == 0) && (nargs > 3))) ththrow(("invalid declination specification -- \"%s\"",str)) // ak 0 tak resetuje a nastavi na 0 if (nargs == 0) { this->decdef = false; return; } // ak nie, tak parsne jednotky nargs--; du.parse_units(args[nargs]); // ak 2 tak nastavi pausalne s rokom 0 if (nargs == 1) { thparse_double(nid, decl, args[0]); if (nid != TT_SV_NUMBER) ththrow(("invalid declination -- %s", args[0])) decl = du.transform(decl); data2[0] = 0.0; data2[1] = decl; this->decuds = decl; this->declin.set(1,data2); this->decdef = true; return; } all_data = new double [nargs]; nargs = nargs/2; dateidx = 0; for(idx = 0; idx < nargs; idx++) { // let's try if undated declination specification thparse_double(typedt, dumdt, args[2 * idx]); if (typedt == TT_SV_NAN) { thparse_double(nid, decl, args[2 * idx + 1]); if (nid != TT_SV_NUMBER) { delete [] all_data; ththrow(("invalid declination -- %s", args[2 * idx + 1])) } this->decuds = decl; } // if not, try dated declination specification else { try { dd.parse(args[2 * idx]); } catch (...) { delete [] all_data; threthrow(("invalid declination specification")) } all_data[2 * dateidx] = dd.get_start_year(); // parse declination thparse_double(nid, decl, args[2 * idx + 1]); if (nid != TT_SV_NUMBER) { delete [] all_data; ththrow(("invalid declination -- %s", args[2 * idx + 1])) } all_data[2 * dateidx + 1] = du.transform(decl); dateidx++; } } // set declination if (dateidx == 0) { data2[0] = 0.0; data2[1] = this->decuds; this->declin.set(1,data2); } else this->declin.set(dateidx,all_data); this->decdef = true; delete [] all_data; } void thsurvey::full_name_reverse() { size_t fnln = strlen(this->full_name), i1, i2, si; //, ei; const char * c1, *c3; char * c2; c1 = this->full_name; si = 0; bool has_dot = false; for(i1 = 0; i1 <= fnln; i1++, c1++) { if ((*c1 == '.') || ((i1 == fnln) && has_dot)) { has_dot = true; c3 = this->full_name + si; c2 = this->reverse_full_name.get_buffer() + fnln - i1; if (i1 < fnln) { c2--; *c2 = '.'; c2++; } for(i2 = si; i2 < i1; i2++, c2++, c3++) *c2 = *c3; si = i1 + 1; } } } therion-5.4.1/thsurvey.h000066400000000000000000000131101307545355600152440ustar00rootroot00000000000000/** * @file thsurvey.h * Survey module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsurvey_h #define thsurvey_h #include "thdataobject.h" #include "thtfpwf.h" #include "thperson.h" #include /** * survey command options tokens. */ enum { TT_SURVEY_UNKNOWN = 2000, TT_SURVEY_DECLINATION = 2001, TT_SURVEY_PERSON_RENAME = 2002, TT_SURVEY_NAMESPACE = 2003, TT_SURVEY_ENTRANCE = 2004, }; /** * survey command options parsing table. */ static const thstok thtt_survey_opt[] = { {"declination", TT_SURVEY_DECLINATION}, {"entrance", TT_SURVEY_ENTRANCE}, {"namespace", TT_SURVEY_NAMESPACE}, {"person-rename", TT_SURVEY_PERSON_RENAME}, {NULL, TT_SURVEY_UNKNOWN}, }; typedef std::map thsurveyp2pmap; /** * Survey statistics class. */ class thsurveystat { public: double length, length_duplicate, length_splay, length_surface, length_approx, length_explored; class thdb1ds * station_top, * station_bottom, * station_east, * station_west, * station_north, * station_south; int station_state; ///< 0 - undefined, 1 - surface, 2 - underground unsigned long num_stations, num_shots, num_entrances; thsurveystat() : length(0.0), length_duplicate(0.0), length_splay(0.0), length_surface(0.0), length_approx(0.0), length_explored(0.0), station_top(NULL), station_bottom(NULL), station_east(NULL), station_west(NULL), station_north(NULL), station_south(NULL), station_state(0), num_stations(0), num_shots(0), num_entrances(0) {} }; /** * Survey class. * * Main data structure object. */ class thsurvey : public thdataobject { public: friend class thdatabase; friend class thdataobject; friend class thdb1d; const char * full_name; ///< Full survey name. thbuffer reverse_full_name; ///< Reverse full name - for sorting. thdataobject * foptr, ///< First object in survey. * loptr; ///< Last object in survey. unsigned level; class thdata * data; void parse_declination(char * str); void full_name_reverse(); bool decdef; ///< Check whether declination is defined. thtfpwf declin; ///< Return the declination pwf function. double decuds; ///< Declination for undated surveys. long num1; ///< Number of something. thsurveystat stat; ///< Survey statistics. thsurveyp2pmap person_renames; thobjectname entrance; ///< Entrance station name. bool privatens; thsurvey * surveyns; public: /** * Standard constructor. */ thsurvey(); /** * Standard destructor. */ virtual ~thsurvey(); /** * Return class identifier. */ virtual int get_class_id(); /** * Return true, if son of given class. */ virtual bool is(int class_id); /** * Return number of command arguments. */ virtual int get_cmd_nargs(); /** * Return command end option. */ virtual const char * get_cmd_end(); /** * Return command name. */ virtual const char * get_cmd_name(); /** * Return option description. */ virtual thcmd_option_desc get_cmd_option_desc(const char * opts); /** * Set command option. * * @param cod Command option description. * @param args Option arguments array. * @param argenc Arguments encoding. */ virtual void set(thcmd_option_desc cod, char ** args, int argenc, unsigned long indataline); /** * Delete this object. * * @warn Always use this methos instead of delete function. */ virtual void self_delete(); /** * Get context for object. */ virtual int get_context(); /** * Return class name. */ virtual const char * get_class_name() {return "thsurvey";}; /** * Return full survey name. */ virtual const char * get_full_name(); /** * Return reverse full survey name. */ virtual const char * get_reverse_full_name() {return this->reverse_full_name;} /** * Print object contents into file. */ virtual void self_print_properties(FILE * outf); /** * Return true, if declination was specified. */ bool get_decdef() { return this->decdef; } /** * Return the declination pwf function. */ thtfpwf * get_declin() { return &(this->declin); } /** * Return true, if declination was specified. */ double get_decuds() { return this->decuds; } /** * Get first object in survey. */ thdataobject * get_first_survey_object() {return this->foptr;} /** * Get last object in survey. */ thdataobject * get_last_survey_object() {return this->loptr;} /** * Return namespace survey. */ thsurvey * get_nss(); }; #endif therion-5.4.1/thsvg.cxx000066400000000000000000000665251307545355600151030ustar00rootroot00000000000000/** * @file thconvert.cxx */ /* Copyright (C) 2005 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include //#include #include #include //#include #include #include #include #include #include #include #include "thepsparse.h" #include "thpdfdbg.h" #include "thpdfdata.h" //#include "thtexfonts.h" #include "therion.h" #include "thversion.h" #include "thlegenddata.h" #include "thtexfonts.h" using namespace std; //////////////////////////////////////////////////////////////////////////////// string escape_html(string s) { s = replace_all(s,"
",""); // could be implemented using left-aligned table s = replace_all(s,"",""); s = replace_all(s,"",""); s = replace_all(s,"",""); s = replace_all(s,"
","\x1B\x1"); s = replace_all(s,"","\x1B\x2"); s = replace_all(s,"","\x1B\x3"); s = replace_all(s,"","\x1B\x4"); s = replace_all(s,"","\x1B\x5"); s = replace_all(s,"","\x1B\x6"); // which font should we choose? s = replace_all(s,"","\x1B\x7"); s = replace_all(s,"",""); // has no effect s = replace_all(s,"",""); // in firefox or chrome s = replace_all(s,"&","\x1B\x8"); s = replace_all(s,"<","<"); s = replace_all(s,">",">"); s = replace_all(s,"'","'"); s = replace_all(s,"\"","""); string t = ""; string close_font = ""; size_t i,j; for (i=0; i> 18) & 0x3F]; out_buffer[1] = base64_tab[(value >> 12) & 0x3F]; if (fin.gcount() > 1) out_buffer[2] = base64_tab[(value >> 6) & 0x3F]; if (fin.gcount() > 2) out_buffer[3] = base64_tab[(value >> 0) & 0x3F]; if (llength >= 76) { fout << endl; llength = 0; } fout << out_buffer[0] << out_buffer[1] << out_buffer[2] << out_buffer[3]; llength += 4; } while (fin); fin.close(); } void find_dimensions(double & MINX,double & MINY,double & MAXX,double & MAXY) { double llx = 0, lly = 0, urx = 0, ury = 0; double a,b,w,h; MINX=DBL_MAX, MINY=DBL_MAX, MAXX=-DBL_MAX, MAXY=-DBL_MAX; for (list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { llx = DBL_MAX; lly = DBL_MAX; urx = -DBL_MAX; ury = -DBL_MAX; if (I->F != "" && I->E == "" && I->G == "" && I->B == "" && I->X == "") { // clipped symbols shouldn't affect map size if (I->F1 < llx) llx = I->F1; if (I->F2 < lly) lly = I->F2; if (I->F3 > urx) urx = I->F3; if (I->F4 > ury) ury = I->F4; } if (I->E != "") { if (I->E1 < llx) llx = I->E1; if (I->E2 < lly) lly = I->E2; if (I->E3 > urx) urx = I->E3; if (I->E4 > ury) ury = I->E4; } if (I->G != "") { if (I->G1 < llx) llx = I->G1; if (I->G2 < lly) lly = I->G2; if (I->G3 > urx) urx = I->G3; if (I->G4 > ury) ury = I->G4; } if (I->B != "") { if (I->B1 < llx) llx = I->B1; if (I->B2 < lly) lly = I->B2; if (I->B3 > urx) urx = I->B3; if (I->B4 > ury) ury = I->B4; } if (I->I != "") { if (I->I1 < llx) llx = I->I1; if (I->I2 < lly) lly = I->I2; if (I->I3 > urx) urx = I->I3; if (I->I4 > ury) ury = I->I4; } if (I->X != "") { if (I->X1 < llx) llx = I->X1; if (I->X2 < lly) lly = I->X2; if (I->X3 > urx) urx = I->X3; if (I->X4 > ury) ury = I->X4; } for (list::iterator I_sk = I->SKETCHLIST.begin(); I_sk != I->SKETCHLIST.end(); I_sk++) { for (int i = 0; i<=1; i++) { for (int j = 0; j<=1; j++) { w = i * I_sk->width; h = j * I_sk->height; a = I_sk->xx*w + I_sk->xy*h + I_sk->dx; b = I_sk->yx*w + I_sk->yy*h + I_sk->dy; if (a < llx) llx = a; if (b < lly) lly = b; if (a > urx) urx = a; if (b > ury) ury = b; } } }; if (llx == DBL_MAX || lly == DBL_MAX || urx == -DBL_MAX || ury == -DBL_MAX) therror(("This can't happen -- no data for a scrap!")); map::iterator J = LAYERHASH.find(I->layer); assert(J != LAYERHASH.end()); map >::iterator K = (((*J).second).scraps).find(I->level); if (K == (((*J).second).scraps).end()) { set SCRP; (((*J).second).scraps).insert(make_pair(I->level,SCRP)); K = (((*J).second).scraps).find(I->level); } ((*K).second).insert(I->name); (((*J).second).allscraps).insert(I->name); if (((*J).second).Z == 0) { if (MINX > llx) MINX = llx; if (MINY > lly) MINY = lly; if (MAXX < urx) MAXX = urx; if (MAXY < ury) MAXY = ury; } } } void print_preview(int up,ofstream& F, string unique_prefix) { set used_layers; set used_scraps; if (up) { F << "" << endl; } else { F << "" << endl; } used_layers = (up ? MAP_PREVIEW_UP : MAP_PREVIEW_DOWN); for (set::iterator I=used_layers.begin(); I != used_layers.end(); I++) { map::iterator J = LAYERHASH.find(*I); assert (J != LAYERHASH.end()); used_scraps = J->second.allscraps; if (!used_scraps.empty()) { for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0) { if (up) { if (K->B != "" && K->sect == 0) { F << "B1 << "\" y=\"" << K->B2 << "\" xlink:href=\"#B_" << K->name << "_" << unique_prefix << "\" />" << endl; } } else { if (K->I != "" && K->sect == 0) { F << "I1 << "\" y=\"" << K->I2 << "\" xlink:href=\"#I_" << K->name << "_" << unique_prefix << "\" />" << endl; } } } } } } F << "" << endl; } void print_grid(ofstream& PAGEDEF, double LLX,double LLY,double URX,double URY, string unique_prefix) { if (LAYOUT.grid == 0) return; PAGEDEF << "" << endl; paired ll, ur, lr, ul, llrot, urrot, ulrot, lrrot, llnew, urnew, origin; ll.x = LLX; ll.y = LLY; ur.x = URX; ur.y = URY; lr.x = ur.x; lr.y = ll.y; ul.x = ll.x; ul.y = ur.y; origin.x = LAYOUT.hgridorigin; origin.y = LAYOUT.vgridorigin; //cout << endl << origin.x << " " << origin.y << endl; llrot = rotatedaround(ll,origin,-LAYOUT.gridrot); urrot = rotatedaround(ur,origin,-LAYOUT.gridrot); lrrot = rotatedaround(lr,origin,-LAYOUT.gridrot); ulrot = rotatedaround(ul,origin,-LAYOUT.gridrot); llnew.x = min(min(llrot.x, urrot.x), min(lrrot.x, ulrot.x)); llnew.y = min(min(llrot.y, urrot.y), min(lrrot.y, ulrot.y)); urnew.x = max(max(llrot.x, urrot.x), max(lrrot.x, ulrot.x)); urnew.y = max(max(llrot.y, urrot.y), max(lrrot.y, ulrot.y)); double grid_init_x = LAYOUT.hgridsize * floor ((llnew.x-origin.x)/LAYOUT.hgridsize) + origin.x; double grid_init_y = LAYOUT.vgridsize * floor ((llnew.y-origin.y)/LAYOUT.vgridsize) + origin.y; double G_real_init_x = LAYOUT.XO + LAYOUT.XS * floor ((llnew.x-origin.x)/LAYOUT.hgridsize); double G_real_init_y = LAYOUT.YO + LAYOUT.YS * floor ((llnew.y-origin.y)/LAYOUT.vgridsize); double cosr = cos(-LAYOUT.gridrot * 3.14159265 / 180); double sinr = sin(-LAYOUT.gridrot * 3.14159265 / 180); int row, col, elem; if (LAYOUT.proj == 0) { paired out,tmp; int ii,jj; double i, j; for (i = grid_init_x, ii=0; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize, ii++) { for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; tmp.x = i+LAYOUT.gridcell[elem].x; tmp.y = j+LAYOUT.gridcell[elem].y; out = rotatedaround(tmp,origin,LAYOUT.gridrot); // out.x -= LLX; // out.y -= LLY; PAGEDEF << ""; PAGEDEF << ""; PAGEDEF << "" << endl; if (LAYOUT.grid_coord_freq==2 || (LAYOUT.grid_coord_freq==1 && elem!=4)) { tmp.x = i+ (col==2 ? -2 : 2); tmp.y = j+ (row==2 ? -9 : 2); out = rotatedaround(tmp,origin,LAYOUT.gridrot); PAGEDEF << "(" << setprecision(0) << G_real_init_x+ii*LAYOUT.XS << "," << G_real_init_y+jj*LAYOUT.YS << setprecision(3) << ")" << endl; } /* PAGEDEF << ""; PAGEDEF << i/72*2.54/100*200 << " " << j/72*2.54/100*200; PAGEDEF << "" << endl;*/ } } } else { grid_init_x = LLX; int jj; double i, j; for (j = grid_init_y, jj=0; j < urnew.y + LAYOUT.vgridsize - 0.05; j += LAYOUT.vgridsize, jj++) { for (i = grid_init_x; i < urnew.x + LAYOUT.hgridsize - 0.05; i += LAYOUT.hgridsize) { col = (i == grid_init_x ? 0 : (i >= urnew.x ? 2 : 1)); row = (j == grid_init_y ? 0 : (j >= urnew.y ? 2 : 1)); elem = col + 3*row; PAGEDEF << "" << endl; if (col == 0 && LAYOUT.grid_coord_freq > 0) { PAGEDEF << "" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << "" << endl; } if (col == 2 && LAYOUT.grid_coord_freq == 2) { PAGEDEF << "" << setprecision(0) << G_real_init_y+jj*LAYOUT.YS << "" << endl; } } } } PAGEDEF << "" << endl; } void print_surface_bitmaps (ofstream &F) { if (LAYOUT.transparency) F << "" << endl; F.precision(8); for (list::iterator I = SURFPICTLIST.begin(); I != SURFPICTLIST.end(); I++) { F << "xx << " " << I->yx << " " << -I->xy << " " << -I->yy << " " << I->dx << " " << I->dy << ")\">"; F << "height << "\" width=\"" << I->width << "\" height=\"" << I->height << "\" xlink:href=\"data:image/" << I->type << ";base64," << endl; base64_encode(I->filename, F); F << "\" />"; F << "" << endl; }; F.precision(3); if (LAYOUT.transparency) F << "" << endl; } #define ginit(ID) F << "" << endl; #define gend F << "" << endl; void thsvg(const char * fname, int fmt, legenddata ldata) { if (fmt == 0) thprintf("making svg map ... "); else thprintf("making svg (xhtml) map ... "); string bgcol; string unique_prefix = fname; ofstream F(fname); F.setf(ios::fixed, ios::floatfield); // dolezite pre velke suradnice F.precision(3); double llx=0, lly=0, urx=0, ury=0; find_dimensions(llx, lly, urx, ury); if (LAYOUT.proj > 0 && LAYOUT.grid > 0) { // natiahnutie vysky aby sa zobrazil grid pod aj nad jaskynou lly = LAYOUT.vgridsize * floor ((lly-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; ury = LAYOUT.vgridsize * ceil ((ury-LAYOUT.vgridorigin)/LAYOUT.vgridsize) + LAYOUT.vgridorigin; } if (LAYOUT.map_grid) { llx = LAYOUT.hsize * floor (llx/LAYOUT.hsize); lly = LAYOUT.vsize * floor (lly/LAYOUT.vsize); urx = LAYOUT.hsize * ceil (urx/LAYOUT.hsize); ury = LAYOUT.vsize * ceil (ury/LAYOUT.vsize); } double llxo(llx), llyo(lly), urxo(urx), uryo(ury); // rozmery mapy bez overlapu llx -= LAYOUT.overlap; urx += LAYOUT.overlap; lly -= LAYOUT.overlap; ury += LAYOUT.overlap; F << "" << endl; F << "" << endl; if (LAYOUT.doc_author != "") F << "" << endl; if (LAYOUT.doc_title != "") F << "" << endl; if (LAYOUT.doc_subject != "") F << "" << endl; if (LAYOUT.doc_keywords != "") F << "" << endl; if (fmt == 0) F << "" << endl; else { F << "" << endl; F << "" << endl; F << "" << endl; // title if (!ldata.cavename.empty()) F << "

" << escape_html(ldata.cavename) << "

" << endl; if (!ldata.comment.empty()) F << "

" << escape_html(ldata.comment) << "

" << endl; // north, scale // ... if (!ldata.cavelength.empty()) F << "

" << escape_html(ldata.cavelengthtitle) << ": " << ldata.cavelength << "

" << endl; if (!ldata.cavedepth.empty()) F << "

" << escape_html(ldata.cavedepthtitle) << ": " << ldata.cavedepth << "

" << endl; if (!ldata.copyrights.empty()) F << "

" << escape_html(ldata.copyrights) << "

" << endl; if (LAYOUT.scalebar != "") { F << "

" << endl; ScBar.print_svg(F,unique_prefix); F << "

" << endl; } if (LAYOUT.northarrow != "") { F << "

" << endl; NArrow.print_svg(F,unique_prefix); F << "

" << endl; } } F << "" << endl; F << "" << endl; // patterns: // pattern is clipped according to width and height attributes; // it's not possible to specify clipping area independently // like using BBox in PDF -- may produce some strange results // if the pattern definition exceeds the BBox in MetaPost for (list::iterator I = PATTERNLIST.begin(); I != PATTERNLIST.end(); I++) { if (I->used) { F << "name << "_" << unique_prefix << "\" patternUnits=\"userSpaceOnUse\"" << " width=\"" << I->xstep << "\" height=\"" << I->ystep << "\" patternTransform=\"matrix(" << I->xx << " " << I->xy << " " << I->yx << " " << I->yy << " " << I->x << " " << I->y << ")\">" << endl; F << "llx1-I->llx << " " << I->lly1-I->lly << ")\">" << endl; I->data.MP.print_svg(F,unique_prefix); F << "" << endl; F << "" << endl; } } // scraps: for(list::iterator I = SCRAPLIST.begin(); I != SCRAPLIST.end(); I++) { ginit("F_" + I->name); I->Fc.MP.print_svg(F,unique_prefix); gend; ginit("G_" + I->name); I->Gc.MP.print_svg(F,unique_prefix); gend; ginit("B_" + I->name); I->Bc.MP.print_svg(F,unique_prefix); gend; ginit("I_" + I->name); I->Ic.MP.print_svg(F,unique_prefix); gend; ginit("E_" + I->name); I->Ec.MP.print_svg(F,unique_prefix); gend; ginit("X_" + I->name); I->Xc.MP.print_svg(F,unique_prefix); gend; } // grid: int i=0; for (list::iterator I = GRIDLIST.begin(); I != GRIDLIST.end(); I++) { ginit("grid_" + u2str(++i)); I->MP.print_svg(F,unique_prefix); gend; } // clip to initial viewBox // (browsers mostly ignore clip="auto" overflow="hidden" root svg attributes) F << "" << endl; F << "" << endl; F << "" << endl; F << "" << endl; // --- end of definitions --- F << "" << endl; // page background: if ((LAYOUT.background_r != 1) || (LAYOUT.background_g != 1) || (LAYOUT.background_b != 1)) { bgcol=rgb2svg(LAYOUT.background_r, LAYOUT.background_g, LAYOUT.background_b); F << "" << endl; } // surface: if (LAYOUT.surface == 1) print_surface_bitmaps(F); // white scrap backgrounds (when transparency added): // grid: if (LAYOUT.grid == 1) print_grid(F,llxo,llyo,urxo,uryo,unique_prefix); // preview down: if (!MAP_PREVIEW_DOWN.empty()) print_preview(0,F,unique_prefix); // map export: for (map::iterator J = LAYERHASH.begin(); J != LAYERHASH.end(); J++) { if (J->second.Z == 0) { map < int,set > LEVEL; set page_text_scraps,used_scraps; LEVEL = J->second.scraps; /*for (map < int,set >::iterator I_l = LEVEL.begin(); I_l != LEVEL.end(); I_l++) { used_scraps = I_l->second; for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->P != "") page_text_scraps.insert(K->name); } }*/ for (map < int,set >::iterator I = LEVEL.begin(); I != LEVEL.end(); I++) { used_scraps = I->second; // background for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (K->r < 0 || K->g < 0 || K->b < 0) { bgcol=rgb2svg(LAYOUT.foreground_r, LAYOUT.foreground_g, LAYOUT.foreground_b); } else { bgcol=rgb2svg(K->r, K->g, K->b); } if (used_scraps.count(K->name) > 0 && K->I != "") { F << "" << endl; F << "I1 << "\" y=\"" << K->I2 << "\" xlink:href=\"#I_" << K->name << "_" << unique_prefix << "\" />" << endl; F << "" << endl; } } // F << "G1 << "\" y=\"" << -I->G2 << "\" xlink:href=\"#G_" << I->name << "_" << unique_prefix << "\" />" << endl; // sketches F.precision(8); for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { for (list::iterator I_sk = K->SKETCHLIST.begin(); I_sk != K->SKETCHLIST.end(); I_sk++) { F << "xx << " " << I_sk->yx << " " << -I_sk->xy << " " << -I_sk->yy << " " << I_sk->dx << " " << I_sk->dy << ")\">"; F << "height << "\" width=\"" << I_sk->width << "\" height=\"" << I_sk->height << "\" xlink:href=\"data:image/" << I_sk->type << ";base64," << endl; base64_encode(I_sk->filename, F); F << "\" />"; F << "" << endl; }; } F.precision(3); // end of sketches for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->F != "") { F << "F1 << "\" y=\"" << K->F2 << "\" xlink:href=\"#F_" << K->name << "_" << unique_prefix << "\" />" << endl; } } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->E != "") { F << "E1 << "\" y=\"" << K->E2 << "\" xlink:href=\"#E_" << K->name << "_" << unique_prefix << "\" />" << endl; } } for (list::iterator K = SCRAPLIST.begin(); K != SCRAPLIST.end(); K++) { if (used_scraps.count(K->name) > 0 && K->X != "") { F << "X1 << "\" y=\"" << K->X2 << "\" xlink:href=\"#X_" << K->name << "_" << unique_prefix << "\" />" << endl; } } } } } // preview up: if (!MAP_PREVIEW_UP.empty()) print_preview(1,F,unique_prefix); // surface: if (LAYOUT.surface == 2) print_surface_bitmaps(F); // grid: if (LAYOUT.grid == 2) print_grid(F,llxo,llyo,urxo,uryo,unique_prefix); // map grid: if (LAYOUT.map_grid) { F << "" << endl; F << "" << endl; for (double i=llxo; i <= urxo; i += LAYOUT.hsize) { F << "" << endl; } for (double i=llyo; i <= uryo; i += LAYOUT.vsize) { F << "" << endl; } F << "" << endl; } F << "" << endl; F << "" << endl; // end of main SVG data block if (fmt > 0) { // legend in xhtml // title if (!ldata.exploteam.empty()) F << "

" << escape_html(ldata.explotitle) << ": " << escape_html(ldata.exploteam) << " " << ldata.explodate << "

" << endl; if (!ldata.topoteam.empty()) F << "

" << escape_html(ldata.topotitle) << ": " << escape_html(ldata.topoteam) << " " << ldata.topodate << "

" << endl; if (!ldata.cartoteam.empty()) F << "

" << escape_html(ldata.cartotitle) << ": " << escape_html(ldata.cartoteam) << " " << ldata.cartodate << "

" << endl; // color legend if (!COLORLEGENDLIST.empty()) { F << "

" << escape_html(ldata.colorlegendtitle) << "

" << endl; F << "" << endl; for(list::iterator I = COLORLEGENDLIST.begin(); I != COLORLEGENDLIST.end(); I++) { F << "" << endl; F << "" << endl; F << "" << endl; } F << "
R,I->G,I->B) << "; height: 24px; width: 36px;\">" << endl; F << "" << I->name << "
" << endl; } // map symbols if (!LEGENDLIST.empty()) { F << "

" << escape_html(ldata.legendtitle) << "

" << endl; vector L; for(list::iterator I = LEGENDLIST.begin(); I != LEGENDLIST.end(); I++) { L.push_back(*I); } int legendbox_num = LEGENDLIST.size(); int columns = LAYOUT.legend_columns; int rows = (int) ceil(double(legendbox_num) / columns); int pos = 0; F << "" << endl; for (int i = 0; i < rows; i++) { F << "" << endl; for (int j = 0; j < columns; j++) { F << "" << endl; } F << "" << endl; } F << "
" << endl; pos = i + j * rows; if (pos < legendbox_num) { L[pos].ldata.print_svg(F,unique_prefix); F << L[pos].descr; // F << "

" << endl; } F << "
" << endl; } F << "" << endl << "" << endl; } F.close(); thprintf("done\n"); } therion-5.4.1/thsvg.h000066400000000000000000000020341307545355600145110ustar00rootroot00000000000000/* * Copyright (C) 2005 Martin Budaj * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsvg_h #define thsvg_h #include "thlegenddata.h" void thsvg(const char * fname, int, legenddata ldata); std::string escape_html(std::string); #endif therion-5.4.1/thsvxctrl.cxx000066400000000000000000000541511307545355600160010ustar00rootroot00000000000000/** * @file thsvxctrl.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsvxctrl.h" #include "thdatabase.h" #include "thdataleg.h" #include "thtmpdir.h" #include "thdata.h" #include "thexception.h" #include "thdatabase.h" #include "thinfnan.h" #include "thinit.h" #include "thconfig.h" #include #include #include "thsurvey.h" #include "thcs.h" #include "thlogfile.h" #include "extern/img.h" #include #include #include #ifdef THMSVC #include #define getcwd _getcwd #endif #define THPI 3.1415926535898 thsvxctrl::thsvxctrl() { this->pdl.clear(); this->svxf_ln = 1; } thsvxctrl::~thsvxctrl() { } void thsvxctrl::write_double(double dd) { if (thisnan(dd)) { fprintf(this->svxf,"\t-"); return; } switch (thisinf(dd)) { case -1: fprintf(this->svxf,"\tdown"); break; case 1: fprintf(this->svxf,"\tup"); break; default: fprintf(this->svxf,"\t%f",dd); break; } } void thsvxctrl::write_survey_leg(thdataleg * legp) { // first let's check infer if (this->pdl.infer_plumbs != legp->infer_plumbs) { fprintf(this->svxf,"*infer plumbs %s\n",(legp->infer_plumbs ? "on" : "off")); this->svxf_ln++; } if (this->pdl.infer_equates != legp->infer_equates) { fprintf(this->svxf,"*infer equates %s\n",(legp->infer_equates ? "on" : "off")); this->svxf_ln++; } // let's check standard deviations if ( (((!thisnan(this->pdl.length_sd)) || (!thisnan(legp->length_sd))) && (this->pdl.length_sd != legp->length_sd)) || // (((!thisnan(this->pdl.counter_sd)) || (!thisnan(legp->counter_sd))) && // (this->pdl.counter_sd != legp->counter_sd)) // || (((!thisnan(this->pdl.depth_sd)) || (!thisnan(legp->depth_sd))) && (this->pdl.depth_sd != legp->depth_sd)) || (((!thisnan(this->pdl.bearing_sd)) || (!thisnan(legp->bearing_sd))) && (this->pdl.bearing_sd != legp->bearing_sd)) || (((!thisnan(this->pdl.gradient_sd)) || (!thisnan(legp->gradient_sd))) && (this->pdl.gradient_sd != legp->gradient_sd)) || (((!thisnan(this->pdl.dx_sd)) || (!thisnan(legp->dx_sd))) && (this->pdl.dx_sd != legp->dx_sd)) || (((!thisnan(this->pdl.dy_sd)) || (!thisnan(legp->dy_sd))) && (this->pdl.dy_sd != legp->dy_sd)) || (((!thisnan(this->pdl.dz_sd)) || (!thisnan(legp->dz_sd))) && (this->pdl.dz_sd != legp->dz_sd)) ) { fprintf(this->svxf,"*sd default\n"); this->svxf_ln++; if (!(thisnan(legp->length_sd))) { fprintf(this->svxf,"*sd tape %f metres\n", legp->length_sd); this->svxf_ln++; } // if (!(thisnan(legp->counter_sd))) { // fprintf(this->svxf,"*sd counter %f metres\n", legp->counter_sd); // this->svxf_ln++; // } if (!(thisnan(legp->depth_sd))) { fprintf(this->svxf,"*sd depth %f metres\n", legp->depth_sd); this->svxf_ln++; } if (!(thisnan(legp->bearing_sd))) { fprintf(this->svxf,"*sd compass %f degrees\n", legp->bearing_sd); this->svxf_ln++; } if (!(thisnan(legp->gradient_sd))) { fprintf(this->svxf,"*sd clino %f degrees\n", legp->gradient_sd); this->svxf_ln++; } if (!(thisnan(legp->dx_sd))) { fprintf(this->svxf,"*sd dx %f metres\n", legp->dx_sd); this->svxf_ln++; } if (!(thisnan(legp->dy_sd))) { fprintf(this->svxf,"*sd dy %f metres\n", legp->dy_sd); this->svxf_ln++; } if (!(thisnan(legp->dz_sd))) { fprintf(this->svxf,"*sd dz %f metres\n", legp->dz_sd); this->svxf_ln++; } } if (this->pdl.data_type != legp->data_type) { switch (legp->data_type) { case TT_DATATYPE_NORMAL: fprintf(this->svxf,"*data\tnormal\tfrom\tto\ttape\tcompass\tclino\n"); this->svxf_ln++; break; case TT_DATATYPE_DIVING: fprintf(this->svxf,"*data\tdiving"); case TT_DATATYPE_CYLPOLAR: if (legp->data_type != TT_DATATYPE_DIVING) fprintf(this->svxf,"*data\tcylpolar"); fprintf(this->svxf,"\tfrom\tto\ttape\tcompass\tdepthchange\n"); this->svxf_ln++; break; case TT_DATATYPE_CARTESIAN: fprintf(this->svxf,"*data\tcartesian\tfrom\tto\tnorthing\teasting\taltitude\n"); this->svxf_ln++; break; case TT_DATATYPE_NOSURVEY: fprintf(this->svxf,"*data\tnosurvey\tfrom\tto\n"); this->svxf_ln++; break; } } double leggridmc; leggridmc = 0.0; if (legp->gridcs != TTCS_LOCAL) { if (legp->gridcs != this->lastleggridmccs) { if (legp->gridcs == thcfg.outcs) { this->lastleggridmc = this->meridian_convergence; } else { this->lastleggridmc = thcfg.get_cs_convergence(legp->gridcs); } this->lastleggridmccs = legp->gridcs; } leggridmc = this->lastleggridmc; } // recalculate declination if necessary double legp_bearing = legp->bearing; double legp_dx = legp->dx; double legp_dy = legp->dy; double legp_declin = (this->meridian_convergence - leggridmc + (!thisnan(legp->declination) ? legp->declination : legp->implicit_declination)); if (legp_declin != 0.0) { switch (legp->data_type) { case TT_DATATYPE_NORMAL: case TT_DATATYPE_DIVING: case TT_DATATYPE_CYLPOLAR: if (!thisnan(legp_bearing)) { legp_bearing += legp_declin; if (legp_bearing >= 360.0) legp_bearing -= 360.0; if (legp_bearing < 0.0) legp_bearing += 360.0; } break; case TT_DATATYPE_CARTESIAN: double cosdecl = cos(legp_declin/180*THPI), sindecl = sin(legp_declin/180*THPI); legp_dx = (cosdecl * legp->dx) + (sindecl * legp->dy); legp_dy = (cosdecl * legp->dy) - (sindecl * legp->dx); break; } } // now print the data // first stations if (legp->direction) fprintf(this->svxf, "\t%ld\t%ld", legp->from.id, legp->to.id); else fprintf(this->svxf, "\t%ld\t%ld", legp->to.id, legp->from.id); // then data switch (legp->data_type) { case TT_DATATYPE_NORMAL: this->write_double(legp->length); if (legp->infer_plumbs && ((legp->gradient == 90.0) || (legp->gradient == -90.0)) && (!thisnan(legp_bearing))) fprintf(this->svxf,"\t-"); else this->write_double(legp_bearing); this->write_double(legp->gradient); break; case TT_DATATYPE_DIVING: case TT_DATATYPE_CYLPOLAR: this->write_double(legp->length); this->write_double(legp_bearing); if (!thisnan(legp->depthchange)) this->write_double(legp->depthchange); else this->write_double(legp->todepth - legp->fromdepth); break; case TT_DATATYPE_CARTESIAN: this->write_double(legp_dy); this->write_double(legp_dx); this->write_double(legp->dz); break; } this->src_map[this->svxf_ln] = &(legp->srcf); fprintf(this->svxf, "\n"); this->svxf_ln++; this->pdl = *legp; } void thsvxctrl::write_survey_fix(thdatafix * fixp) { if (!(thisnan(fixp->x))) { fprintf(this->svxf,"*fix\t%ld\t%f\t%f\t%f",fixp->station.id, fixp->x,fixp->y,fixp->z); if (!(thisnan(fixp->sdx))) { fprintf(this->svxf,"\t%f\t%f\t%f",fixp->sdx,fixp->sdy,fixp->sdz); if (!(thisnan(fixp->cxy))) fprintf(this->svxf,"\t%f\t%f\t%f",fixp->cxy,fixp->cyz,fixp->cxz); } this->src_map[this->svxf_ln] = &(fixp->srcf); fprintf(this->svxf,"\n"); this->svxf_ln++; } } void thsvxctrl::process_survey_data(class thdatabase * dbp) { #ifdef THDEBUG thprintf("\n\nprocessing survey data\n"); #else thprintf("processing survey data ... "); thtext_inline = true; #endif // first check if any survey data if (dbp->db1d.station_vec.size() == 0) { #ifdef THDEBUG thprintf("no survey data\n"); #else thprintf("no data.\n"); thtext_inline = false; #endif return; } // first create survex file #ifdef THDEBUG #else // thprintf("writing ... "); #endif const char * svxfn = thtmp.get_file_name("data.svx"); this->svxf = fopen(svxfn,"w"); if (svxf == NULL) ththrow(("can't open survex file for output -- %s", svxfn)) this->meridian_convergence = thcfg.get_outcs_convergence(); this->lastleggridmccs = TTCS_LOCAL; this->lastleggridmc = 0.0; fprintf(this->svxf,"*units declination clino compass degrees\n"); fprintf(this->svxf,"*units tape depth counter northing easting altitude metres\n"); fprintf(this->svxf,"*infer plumbs off\n"); fprintf(this->svxf,"*infer equates off\n"); this->svxf_ln += 4; // write data to file thdb_object_list_type::iterator obi = dbp->object_list.begin(); thdataleg_list::iterator lei; thdatafix_list::iterator fii; //thdatass_list::iterator ssi; thdataequate_list::iterator eqi; thdata * dp; thdataobject * cx1, * cx2; thdb1ds * tmps; while (obi != dbp->object_list.end()) { if ((*obi)->get_class_id() == TT_DATA_CMD) { dp = (thdata *)(*obi); // scan data shots lei = dp->leg_list.begin(); while(lei != dp->leg_list.end()) { if (lei->is_valid) this->write_survey_leg(&(*lei)); lei++; } // scan data fixes fii = dp->fix_list.begin(); while(fii != dp->fix_list.end()) { tmps = &(dbp->db1d.station_vec[fii->station.id - 1]); cx1 = tmps->fixcontext; cx2 = fii->srcf.context; if (((cx1 == NULL) && (cx2 == NULL)) || ((cx1 != NULL) && (cx2 != NULL) && (cx1->id == cx2->id))) { this->write_survey_fix(&(*fii)); } fii++; } // export data equates int last_e = 0; for(eqi = dp->equate_list.begin(); eqi != dp->equate_list.end(); eqi++) { if (last_e != eqi->eqid) { if (last_e > 0) { fprintf(this->svxf,"\n"); this->svxf_ln++; } fprintf(this->svxf,"*equate"); this->src_map[this->svxf_ln] = &(eqi->srcf); last_e = eqi->eqid; } fprintf(this->svxf,"\t%ld",eqi->station.id); } if (last_e > 0) { fprintf(this->svxf,"\n"); this->svxf_ln++; } } obi++; } fclose(svxf); // run survex thbuffer svxcom, wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); int retcode; svxcom = "\""; svxcom += thini.get_path_cavern(); svxcom += "\" --quiet --log --output="; svxcom += thtmp.get_dir_name(); svxcom += " "; svxcom += svxfn; #ifdef THDEBUG thprintf("running cavern\n"); #else // thprintf("processing ... "); #endif retcode = system(svxcom.get_buffer()); this->transcript_log_file(dbp, thtmp.get_file_name("data.log")); if (retcode != EXIT_SUCCESS) ththrow(("cavern exit code -- %d", retcode)) else this->load_err_file(dbp, thtmp.get_file_name("data.err")); // read coordinates from 3D file img_point imgpt; int result; unsigned long ss; thdb1ds * stp; img* pimg = img_open(thtmp.get_file_name("data.3d")); if (pimg == NULL) ththrow(("can't open cavern output")) do { result = img_read_item(pimg, &imgpt); switch (result) { case img_MOVE: case img_LINE: break; case img_LABEL: if (sscanf(pimg->label,"%lu",&ss) != 0) { stp = & (dbp->db1d.station_vec[ss-1]); stp->x = imgpt.x; stp->y = imgpt.y; stp->z = imgpt.z; } break; case img_BAD: img_close(pimg); ththrow(("error reading cavern output")) break; } } while (result != img_STOP); img_close(pimg); // svxcom = "\""; // svxcom += thini.get_path_3dtopos(); // svxcom += "\" "; // svxcom += thtmp.get_file_name("data.3d"); // svxcom += " "; // svxcom += thtmp.get_file_name("data.pos"); // // #ifdef THDEBUG // thprintf("running 3dtopos\n"); // #endif // retcode = system(svxcom.get_buffer()); // // if (retcode != EXIT_SUCCESS) // ththrow(("3dtopos exit code -- %d", retcode)) // // // Let's copy results and log-file to working directory // // #ifdef THWIN32 // // svxcom = "copy "; // // #else // // svxcom = "cp "; // // #endif // // svxcom += thtmp.get_file_name("data.*"); // // svxcom += " "; // // svxcom += wdir.get_buffer(); // // #ifdef THDEBUG // // thprintf("copying results\n"); // // #endif // // // // retcode = system(svxcom.get_buffer()); // // // // if (retcode != EXIT_SUCCESS) // // ththrow(("cp exit code -- %d", retcode)) // // // #ifdef THDEBUG // #else // // thprintf("reading ... "); // #endif // // import survex export // std::ifstream posf; // thdb1ds * stp; // double sx, sy, sz; // unsigned long ss; // size_t lnsize = 4096, pix = 0, ppx = 0, clns; // svxcom.guarantee(lnsize); // char * lnbuff = svxcom.get_buffer(), // * p[4], * cps = lnbuff; // posf.open(thtmp.get_file_name("data.pos")); // if (!posf.is_open()) // ththrow(("can't open survex output")) // while (!posf.eof()) { // posf.getline(lnbuff, lnsize); // clns = strlen(lnbuff); // ppx = 0; // pix = 0; // cps = lnbuff; // bool scan_num = true; // while ((pix < clns) && (ppx < 4)) { // if (scan_num && // (((((unsigned char) *cps) > 47) && // (((unsigned char) *cps) < 58)) || (*cps == 46) || // (*cps == 45) || (*cps == 43))) { // p[ppx] = cps; // ppx++; // scan_num = false; // } // if (((unsigned char)*cps) < 33) // scan_num = true; // if ((*cps == ',') || (((unsigned char)*cps) < 33)) // *cps = 0; // cps++; // pix++; // } // if (ppx == 4) { // if (sscanf(p[0],"%lf",&sx) == 0) // ppx = 0; // if (sscanf(p[1],"%lf",&sy) == 0) // ppx = 0; // if (sscanf(p[2],"%lf",&sz) == 0) // ppx = 0; // if (sscanf(p[3],"%lu",&ss) == 0) // ppx = 0; // // if inport OK, write coordinates into database // if (ppx == 4) { // stp = & (dbp->db1d.station_vec[ss-1]); // stp->x = sx; // stp->y = sy; // stp->z = sz; // } // } // } // posf.close(); // #ifdef THDEBUG #else thprintf("done\n"); thtext_inline = false; #endif // FILE * ptsf; // ptsf = fopen("data.pts","w"); // if (ptsf == NULL) // ththrow(("can't open data.pts for output")) // unsigned int sid, lsid; // lsid = dbp->db1d.station_vec.size(); // for (sid = 0; sid < lsid; sid++) { // stp = & (dbp->db1d.station_vec[sid]); // fprintf(ptsf,"%6d -> %s@%s\n",sid+1,stp->name,stp->survey->get_full_name()); // } // fclose(ptsf); } enum {THSVXLOGNUM_NONE, THSVXLOGNUM_LINE, THSVXLOGNUM_STATION}; void thsvxctrl::transcript_log_file(class thdatabase * dbp, const char * lfnm) { thbuffer tsbuff; thdb1ds * stp; char * lnbuff = new char [4097]; char * numbuff = &(lnbuff[2049]); unsigned long lnum = 0; thlog.printf("\n####################### cavern log file ########################\n"); std::ifstream clf(lfnm); if (!(clf.is_open())) ththrow(("can't open cavern log file for input")) // let's read line by line and print to log file size_t chidx, nchs; char * chch; bool onnum, ondig, fonline; long csn; size_t lsid; lsid = dbp->db1d.station_vec.size(); while (!(clf.eof())) { lnum++; clf.getline(lnbuff,2048); thlog.printf("%2d> %s\n",lnum,lnbuff); // let's scan the line chch = lnbuff; nchs = strlen(chch); onnum = false; fonline = true; csn = 0; chidx = 0; char * start_ch = NULL; //, * test_ch; int num_type; thsvxctrl_src_maptype::iterator srcmi; // if (*lnbuff == 13) lnbuff++; // if (strncmp(lnbuff,"There were",10) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"There are",9) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"Survey has",10) == 0) // chidx = 2049; // else if (strncmp(lnbuff,"Survey contains",15) == 0) // chidx = 2049; // else if (nchs > 6) { // if (strcmp(&(lnbuff[nchs-6]),"nodes.") == 0) // chidx = 2049; // else if (strcmp(&(lnbuff[nchs-5]),"node.") == 0) // chidx = 2049; // } while ((chidx <= nchs) && (chidx <= 2048)) { if ((chidx < nchs) && (chidx < 2048) && (((unsigned char) *chch) > 47) && (((unsigned char) *chch) < 58)) { if (!onnum) start_ch = chch; ondig = true; onnum = true; } else ondig = false; if (onnum) { if (ondig) { csn *= 10; csn += ((unsigned char) *chch) - 48; } else { num_type = THSVXLOGNUM_STATION; if ((chidx > 0) && (chidx <= nchs)) { if ((start_ch[-1] == ':') && (*chch == ':')) num_type = THSVXLOGNUM_LINE; } if (num_type == THSVXLOGNUM_STATION) { if ((chidx > 0) && (chidx <= nchs)) { if ((*chch == '.') || (*chch == ',') || (*chch == ')') || (*chch == 'm') || (*chch == '-') || (*chch == '/')) num_type = THSVXLOGNUM_NONE; if ((start_ch[-1] == '.') || (start_ch[-1] == '-')) num_type = THSVXLOGNUM_NONE; } } switch (num_type) { case THSVXLOGNUM_LINE: srcmi = this->src_map.find((unsigned long)csn); if (srcmi != this->src_map.end()) { if (!fonline) { fonline = true; tsbuff.strcat("\n"); } sprintf(numbuff,"%2ld> input:%ld -- %s [%ld]\n",lnum,csn,srcmi->second->name,srcmi->second->line); tsbuff.strcat(numbuff); } break; case THSVXLOGNUM_STATION: csn--; if ((csn >= 0) && (csn < long(lsid))) { if (fonline) { sprintf(numbuff,"%2ld> ",lnum); tsbuff.strcat(numbuff); fonline = false; } else { tsbuff.strcat(" -- "); } sprintf(numbuff,"%ld : ",(csn+1)); stp = & (dbp->db1d.station_vec[(unsigned int)csn]); tsbuff.strcat(numbuff); tsbuff.strcat(stp->name); tsbuff.strcat("@"); tsbuff.strcat(stp->survey->get_full_name()); } break; default: break; } // end of switch onnum = false; csn = 0; } } chch++; chidx++; } if (!fonline) tsbuff.strcat("\n"); } clf.close(); thlog.printf("######################### transcription ########################\n%s",tsbuff.get_buffer()); thlog.printf("#################### end of cavern log file ####################\n"); delete [] lnbuff; } void thsvxctrl::load_err_file(class thdatabase * dbp, const char * lfnm) { std::string line; std::ifstream infile(lfnm); thmbuffer b; unsigned long sf, st, prev_st, nst; long i; while(std::getline(infile, line)) { // thprintf("SCANNING: %s\n", line.c_str()); thsplit_args(&b, line.c_str()); thdb1d_traverse t, * ct; thdb1d_loop_leg l; thdb1d_loop_leg * cl; thdb1d_tree_node * cn; thdb1d_tree_arrow * ca; bool has_legs; has_legs = false; nst = 0; cl = NULL; prev_st = 0; i = 0; if (b.get_size() > 2) { i = 0; while (i < b.get_size()) { // thprintf("%s\n", b.get_buffer()[i]); if (sscanf(b.get_buffer()[i], "%lu", &st)) { nst++; if (nst == 1) { sf = st; // thprintf("\nFROM: %lu\n", sf); t.first_leg = NULL; t.last_leg = NULL; t.from = & (dbp->db1d.station_vec[sf-1]); t.nlegs = 0; prev_st = sf; cl = NULL; } else { t.to = & (dbp->db1d.station_vec[st-1]); if (strcmp(b.get_buffer()[i-1],"-") == 0) { has_legs = true; l.prev_leg = cl; l.next_leg = NULL; l.leg = NULL; l.reverse = false; //TODO // find appropriate leg cn = &(dbp->db1d.tree_nodes[dbp->db1d.station_vec[prev_st-1].uid - 1]); for(ca = cn->first_arrow; ca != NULL; ca = ca->next_arrow) { if (ca->end_node->uid == dbp->db1d.station_vec[st-1].uid) { l.leg = ca->leg->leg; l.reverse = ca->leg->reverse; break; } } if (l.leg != NULL) { cl = &(*dbp->db1d.loop_leg_list.insert(dbp->db1d.loop_leg_list.end(), l)); if (t.nlegs == 0) { t.first_leg = cl; } if (cl->prev_leg != NULL) { cl->prev_leg->next_leg = cl; } t.last_leg = cl; t.nlegs++; } else { // thprintf("LEG not found!!!\n"); } // thprintf("TO: %s %lu\n", b.get_buffer()[i], st); } else if (strcmp(b.get_buffer()[i-1],"=") == 0) { // thprintf("EQ: %s %lu\n", b.get_buffer()[i], st); } prev_st = st; } } i++; } } if (has_legs) { t.id = dbp->db1d.traverse_list.size() + 1; // TODO: read original length std::getline(infile, line); // read E std::getline(infile, line); sscanf(line.c_str(), "%lf", &t.E); // TODO: read H, V std::getline(infile, line); // thprintf("E: %.2lf\n", t.E); ct = &(*dbp->db1d.traverse_list.insert(dbp->db1d.traverse_list.end(), t)); for(cl = ct->first_leg; cl != NULL; cl = cl->next_leg) { cl->leg->traverse = ct; } } } } therion-5.4.1/thsvxctrl.h000066400000000000000000000036411307545355600154240ustar00rootroot00000000000000/** * @file thsvxctrl.h * Survex controler. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsvxctrl_h #define thsvxctrl_h #include #include "thdataleg.h" #include "thobjectsrc.h" #include typedef std::map < unsigned long, thobjectsrc * > thsvxctrl_src_maptype; ///< Source map type. /** * Survex controler. */ class thsvxctrl { thdataleg pdl; double meridian_convergence, lastleggridmc; int lastleggridmccs; unsigned long svxf_ln; thsvxctrl_src_maptype src_map; FILE * svxf; void write_survey_leg(thdataleg * legp); void write_survey_fix(thdatafix * fixp); void write_double(double dd); void transcript_log_file(class thdatabase * dbp, const char * lfnm); void load_err_file(class thdatabase * dbp, const char * lfnm); public: /** * Standard constructor. */ thsvxctrl(); /** * Destructor. */ ~thsvxctrl(); /** * Process survey data in given database. */ void process_survey_data(class thdatabase * dbp); }; #endif therion-5.4.1/thsymbolset.cxx000066400000000000000000001623231307545355600163160ustar00rootroot00000000000000/** * @file thdb2dxs.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thsymbolset.h" #include "thparse.h" #include "thpoint.h" #include "thline.h" #include "tharea.h" #include "thexception.h" #include "thpdfdata.h" #include "thlayout.h" #include "thtexfonts.h" #include "thdate.h" #include "thlang.h" #include "thtmpdir.h" #include "thcmdline.h" #include "thmpost.h" #include "thinit.h" #include "thsymbolsets.h" #include "thlogfile.h" #include "thepsparse.h" #ifndef THMSVC #include #else #include #define getcwd _getcwd #define chdir _chdir #define putenv _putenv #define hypot _hypot #define mkdir _mkdir #endif thsymbolset::thsymbolset() { for(int i = 0; i < thsymbolset_size; i++) { this->assigned[i] = !(thsymbolset__hidden[i]); this->used[i] = false; } this->group_symbols = true; } void thsymbolset_log_log_file(const char * logfpath, const char * on_title, const char * off_title, bool mpbug = false) { char * lnbuff = new char [4097]; // unsigned long lnum = 0; thlog.printf("%s",on_title); std::ifstream lf(logfpath); if (!(lf.is_open())) {{ thwarning(("can't open %s file for input", logfpath)); } thlog.printf("can't open %s file for input",logfpath); thlog.printf("%s",off_title); delete [] lnbuff; return; } // let's read line by line and print to log file bool skip_next = false, skip_this = false, peoln = false; while (!(lf.eof())) { lf.getline(lnbuff,4096); if (mpbug && (!skip_this)) { if (strncmp(lnbuff,"write",5) == 0) { skip_next = true; skip_this = true; peoln = false; } } if (!skip_this) { if (!skip_next) { thlog.printf("%s%s", (peoln ? "\n" : ""), lnbuff); peoln = true; } else { skip_next = false; } } else { skip_this = false; } } if (peoln) thlog.printf("\n"); lf.close(); delete [] lnbuff; thlog.printf("%s",off_title); } char * thlegend_u2string(unsigned u) { static char a [5]; a[4] = 0; unsigned v = 1; for(int i = 3; i >= 0; i--) { a[i] = 'a' + ((u / v) % 10); v *= 10; } return (&(a[0])); } const char * thsymbolset::get_mp_macro(int id) { this->used[id] = true; return thsymbolset__mp[id]; } enum { TT_SYMBOL_POINT, TT_SYMBOL_LINE, TT_SYMBOL_AREA, TT_SYMBOL_GROUP, TT_SYMBOL_UNKNOWN, TT_SYMBOL_SPECIAL, }; static const thstok thtt_symbol_class[] = { {"area", TT_SYMBOL_AREA}, {"group", TT_SYMBOL_GROUP}, {"line", TT_SYMBOL_LINE}, {"point", TT_SYMBOL_POINT}, {"special", TT_SYMBOL_SPECIAL}, {NULL, TT_SYMBOL_UNKNOWN} }; static const thstok thtt_symbol_group[] = { {"all", SYMX_ALL}, {"cave-centerline", SYMX_CAVECENTERLINE}, {"cave-centreline", SYMX_CAVECENTERLINE}, {"centerline", SYMX_CENTERLINE}, {"centreline", SYMX_CENTERLINE}, {"equipment", SYMX_EQUIPMENT}, {"ice", SYMX_ICE}, {"passage-fills", SYMX_PASSAGEFILLS}, {"sections", SYMX_SECTIONS}, {"sediments", SYMX_SEDIMENTS}, {"speleothems", SYMX_SPELEOTHEMS}, {"surface-centerline", SYMX_SURFACECENTERLINE}, {"surface-centreline", SYMX_SURFACECENTERLINE}, {"text", SYMX_TEXT}, {"water", SYMX_WATER}, {NULL, SYMX_} }; static const thstok thtt_symbol_point_spec[] = { {"cave-station", SYMP_CAVESTATION}, {"flag", SYMX_POINT_FLAG}, {"flag:air-draught", SYMP_FLAG_AIRDRAUGHT}, {"flag:arch", SYMP_FLAG_ARCH}, {"flag:continuation", SYMP_FLAG_CONTINUATION}, {"flag:dig", SYMP_FLAG_DIG}, {"flag:doline", SYMP_FLAG_DOLINE}, {"flag:entrance", SYMP_FLAG_ENTRANCE}, {"flag:overhang", SYMP_FLAG_OVERHANG}, {"flag:sink", SYMP_FLAG_SINK}, {"flag:spring", SYMP_FLAG_SPRING}, {"surface-station", SYMP_SURFACESTATION}, {"wall-altitude", SYMP_WALLALTITUDE}, {NULL, SYMX_} }; static const thstok thtt_symbol_special[] = { {"north-arrow", SYMS_NORTHARROW}, {"scale-bar", SYMS_SCALEBAR}, {NULL, SYMX_} }; #define c2(TH,MP) case TH: rv = MP; break; #define cl3(TH,MP) case TH: \ if (subtype != TT_LINE_SUBTYPE_UNKNOWN) break; \ rv = MP; \ break; #define cp3(TH,MP) case TH: \ if (subtype != TT_POINT_SUBTYPE_UNKNOWN) break; \ rv = MP; \ break; #define sgroup(MP) if (strlen(subtypes) == 0) { \ rv = MP; \ break; \ } int thsymbolset__get_id(const char * symclass, const char * symbol) { int type, subtype, rv; char types[128], subtypes[128]; types[127] = 0; subtypes[127] = 0; int ci = 0, slen = (int)strlen(symbol); while((ci < slen) && (symbol[ci] != ':')) ci++; if (symbol[ci] == ':') { strncpy(&(types[0]),symbol,ci); types[ci] = 0; strncpy(&(subtypes[0]),&(symbol[ci+1]),127); } else { strncpy(&(types[0]),symbol,127); subtypes[0] = 0; } rv = -1; switch (thmatch_token(symclass,thtt_symbol_class)) { case TT_SYMBOL_GROUP: type = thmatch_token(types,thtt_symbol_group); if (strlen(subtypes) > 0) break; if (type != SYMX_) rv = type; break; case TT_SYMBOL_SPECIAL: type = thmatch_token(types,thtt_symbol_special); if (strlen(subtypes) > 0) break; if (type != SYMX_) rv = type; break; case TT_SYMBOL_AREA: type = thmatch_token(types,thtt_area_types); if (strlen(subtypes) > 0) break; switch (type) { c2(TT_AREA_TYPE_DEBRIS, SYMA_DEBRIS); c2(TT_AREA_TYPE_SAND, SYMA_SAND); c2(TT_AREA_TYPE_SUMP, SYMA_SUMP); c2(TT_AREA_TYPE_WATER, SYMA_WATER); c2(TT_AREA_TYPE_ICE, SYMA_ICE); c2(TT_AREA_TYPE_SNOW, SYMA_SNOW); c2(TT_AREA_TYPE_BLOCKS, SYMA_BLOCKS); c2(TT_AREA_TYPE_CLAY, SYMA_CLAY); c2(TT_AREA_TYPE_PEBBLES, SYMA_PEBBLES); c2(TT_AREA_TYPE_DIMENSIONS, SYMA_DIMENSIONS); c2(TT_AREA_TYPE_FLOWSTONE, SYMA_FLOWSTONE); c2(TT_AREA_TYPE_MOONMILK, SYMA_MOONMILK); } break; case TT_SYMBOL_LINE: type = thmatch_token(types,thtt_line_types); subtype = thmatch_token(subtypes,thtt_line_subtypes); switch (type) { case TT_LINE_TYPE_WALL: sgroup(SYMX_LINE_WALL) switch (subtype) { c2(TT_LINE_SUBTYPE_BEDROCK,SYML_WALL_BEDROCK) c2(TT_LINE_SUBTYPE_BLOCKS,SYML_WALL_BLOCKS) c2(TT_LINE_SUBTYPE_CLAY,SYML_WALL_CLAY) c2(TT_LINE_SUBTYPE_DEBRIS,SYML_WALL_DEBRIS) c2(TT_LINE_SUBTYPE_ICE,SYML_WALL_ICE) c2(TT_LINE_SUBTYPE_INVISIBLE,SYML_WALL_INVISIBLE) c2(TT_LINE_SUBTYPE_PEBBLES,SYML_WALL_PEBBLES) c2(TT_LINE_SUBTYPE_PRESUMED,SYML_WALL_PRESUMED) c2(TT_LINE_SUBTYPE_SAND,SYML_WALL_SAND) c2(TT_LINE_SUBTYPE_UNDERLYING,SYML_WALL_UNDERLYING) c2(TT_LINE_SUBTYPE_UNSURVEYED,SYML_WALL_UNSURVEYED) c2(TT_LINE_SUBTYPE_FLOWSTONE,SYML_WALL_FLOWSTONE) c2(TT_LINE_SUBTYPE_MOONMILK,SYML_WALL_MOONMILK) c2(TT_LINE_SUBTYPE_PIT,SYML_WALL_PIT) c2(TT_LINE_SUBTYPE_OVERLYING,SYML_WALL_OVERLYING) } break; case TT_LINE_TYPE_BORDER: sgroup(SYMX_LINE_BORDER) switch (subtype) { c2(TT_LINE_SUBTYPE_TEMPORARY,SYML_BORDER_TEMPORARY) c2(TT_LINE_SUBTYPE_INVISIBLE,SYML_BORDER_INVISIBLE) c2(TT_LINE_SUBTYPE_VISIBLE,SYML_BORDER_VISIBLE) } break; case TT_LINE_TYPE_SURVEY: sgroup(SYMX_LINE_SURVEY) switch (subtype) { c2(TT_LINE_SUBTYPE_CAVE,SYML_SURVEY_CAVE) c2(TT_LINE_SUBTYPE_SURFACE,SYML_SURVEY_SURFACE) } break; case TT_LINE_TYPE_WATER_FLOW: sgroup(SYMX_LINE_WATERFLOW) switch (subtype) { c2(TT_LINE_SUBTYPE_PERMANENT,SYML_WATERFLOW_PERMANENT) c2(TT_LINE_SUBTYPE_INTERMITTENT,SYML_WATERFLOW_INTERMITTENT) c2(TT_LINE_SUBTYPE_CONJECTURAL,SYML_WATERFLOW_CONJECTURAL) } break; cl3(TT_LINE_TYPE_ARROW,SYML_ARROW); cl3(TT_LINE_TYPE_GRADIENT,SYML_GRADIENT); cl3(TT_LINE_TYPE_CEILING_STEP,SYML_CEILINGSTEP); cl3(TT_LINE_TYPE_CEILING_MEANDER,SYML_CEILINGMEANDER); cl3(TT_LINE_TYPE_CHIMNEY,SYML_CHIMNEY); cl3(TT_LINE_TYPE_CONTOUR,SYML_CONTOUR); cl3(TT_LINE_TYPE_FLOOR_STEP,SYML_FLOORSTEP); cl3(TT_LINE_TYPE_FLOOR_MEANDER,SYML_FLOORMEANDER); cl3(TT_LINE_TYPE_FLOWSTONE,SYML_FLOWSTONE); cl3(TT_LINE_TYPE_MOONMILK,SYML_MOONMILK); cl3(TT_LINE_TYPE_LABEL,SYML_LABEL); cl3(TT_LINE_TYPE_MAP_CONNECTION,SYML_MAPCONNECTION); cl3(TT_LINE_TYPE_OVERHANG,SYML_OVERHANG); cl3(TT_LINE_TYPE_PIT,SYML_PIT); cl3(TT_LINE_TYPE_ROCK_BORDER,SYML_ROCKBORDER); cl3(TT_LINE_TYPE_ROCK_EDGE,SYML_ROCKEDGE); cl3(TT_LINE_TYPE_SECTION,SYML_SECTION); cl3(TT_LINE_TYPE_SLOPE,SYML_SLOPE); cl3(TT_LINE_TYPE_HANDRAIL,SYML_HANDRAIL); cl3(TT_LINE_TYPE_STEPS,SYML_STEPS); cl3(TT_LINE_TYPE_ROPE,SYML_ROPE); cl3(TT_LINE_TYPE_ROPE_LADDER,SYML_ROPELADDER); cl3(TT_LINE_TYPE_FIXED_LADDER,SYML_FIXEDLADDER); cl3(TT_LINE_TYPE_VIA_FERRATA,SYML_VIAFERRATA); } break; case TT_SYMBOL_POINT: type = thmatch_token(types,thtt_point_types); subtype = thmatch_token(subtypes,thtt_point_subtypes); if ((type == TT_POINT_TYPE_UNKNOWN) && (strlen(subtypes) == 0)) { type = thmatch_token(types,thtt_symbol_point_spec); if (type != SYMX_) rv = type; type = TT_POINT_TYPE_UNKNOWN; } if ((type == TT_POINT_TYPE_UNKNOWN) && (strlen(subtypes) > 0)) { type = thmatch_token(symbol,thtt_symbol_point_spec); if (type != SYMX_) rv = type; type = TT_POINT_TYPE_UNKNOWN; } switch (type) { case TT_POINT_TYPE_PASSAGE_HEIGHT: sgroup(SYMX_POINT_PASSAGEHEIGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_POSITIVE,SYMP_PASSAGEHEIGHT_POSITIVE); c2(TT_POINT_SUBTYPE_NEGATIVE,SYMP_PASSAGEHEIGHT_NEGATIVE); c2(TT_POINT_SUBTYPE_BOTH,SYMP_PASSAGEHEIGHT_BOTH); c2(TT_POINT_SUBTYPE_UNSIGNED,SYMP_PASSAGEHEIGHT_UNSIGNED); } break; case TT_POINT_TYPE_HEIGHT: sgroup(SYMX_POINT_HEIGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_POSITIVE,SYMP_HEIGHT_POSITIVE); c2(TT_POINT_SUBTYPE_NEGATIVE,SYMP_HEIGHT_NEGATIVE); c2(TT_POINT_SUBTYPE_UNSIGNED,SYMP_HEIGHT_UNSIGNED); } break; case TT_POINT_TYPE_WATER_FLOW: sgroup(SYMX_POINT_WATERFLOW) switch (subtype) { c2(TT_POINT_SUBTYPE_INTERMITTENT,SYMP_WATERFLOW_INTERMITTENT) c2(TT_POINT_SUBTYPE_PERMANENT,SYMP_WATERFLOW_PERMANENT) c2(TT_POINT_SUBTYPE_PALEO,SYMP_WATERFLOW_PALEO) } break; case TT_POINT_TYPE_STATION: sgroup(SYMX_POINT_STATION) switch (subtype) { c2(TT_POINT_SUBTYPE_FIXED,SYMP_STATION_FIXED) c2(TT_POINT_SUBTYPE_PAINTED,SYMP_STATION_PAINTED) c2(TT_POINT_SUBTYPE_NATURAL,SYMP_STATION_NATURAL) c2(TT_POINT_SUBTYPE_TEMP,SYMP_STATION_TEMPORARY) } break; case TT_POINT_TYPE_AIR_DRAUGHT: sgroup(SYMX_POINT_AIRDRAUGHT) switch (subtype) { c2(TT_POINT_SUBTYPE_UNDEF,SYMP_AIRDRAUGHT) c2(TT_POINT_SUBTYPE_SUMMER,SYMP_AIRDRAUGHT_SUMMER) c2(TT_POINT_SUBTYPE_WINTER,SYMP_AIRDRAUGHT_WINTER) } break; cp3(TT_POINT_TYPE_ALTITUDE,SYMP_ALTITUDE); cp3(TT_POINT_TYPE_ANASTOMOSIS,SYMP_ANASTOMOSIS); cp3(TT_POINT_TYPE_ANCHOR,SYMP_ANCHOR); cp3(TT_POINT_TYPE_ARAGONITE,SYMP_ARAGONITE); cp3(TT_POINT_TYPE_ARCHEO_MATERIAL,SYMP_ARCHEOMATERIAL); cp3(TT_POINT_TYPE_BEDROCK,SYMP_BEDROCK); cp3(TT_POINT_TYPE_BLOCKS,SYMP_BLOCKS); cp3(TT_POINT_TYPE_BREAKDOWN_CHOKE,SYMP_BREAKDOWNCHOKE); cp3(TT_POINT_TYPE_BRIDGE,SYMP_BRIDGE); cp3(TT_POINT_TYPE_CAMP,SYMP_CAMP); cp3(TT_POINT_TYPE_CAVE_PEARL,SYMP_CAVEPEARL); cp3(TT_POINT_TYPE_CLAY,SYMP_CLAY); cp3(TT_POINT_TYPE_CONTINUATION,SYMP_CONTINUATION); cp3(TT_POINT_TYPE_CRYSTAL,SYMP_CRYSTAL); cp3(TT_POINT_TYPE_CURTAIN,SYMP_CURTAIN); cp3(TT_POINT_TYPE_DATE,SYMP_DATE); cp3(TT_POINT_TYPE_DEBRIS,SYMP_DEBRIS); cp3(TT_POINT_TYPE_DIG,SYMP_DIG); cp3(TT_POINT_TYPE_DISK,SYMP_DISK); cp3(TT_POINT_TYPE_ENTRANCE,SYMP_ENTRANCE); cp3(TT_POINT_TYPE_FIXED_LADDER,SYMP_FIXEDLADDER); cp3(TT_POINT_TYPE_FLOWSTONE,SYMP_FLOWSTONE); cp3(TT_POINT_TYPE_FLOWSTONE_CHOKE,SYMP_FLOWSTONECHOKE); cp3(TT_POINT_TYPE_CLAY_CHOKE,SYMP_CLAYCHOKE); cp3(TT_POINT_TYPE_FLUTE,SYMP_FLUTE); cp3(TT_POINT_TYPE_GRADIENT,SYMP_GRADIENT); cp3(TT_POINT_TYPE_GUANO,SYMP_GUANO); cp3(TT_POINT_TYPE_GYPSUM,SYMP_GYPSUM); cp3(TT_POINT_TYPE_GYPSUM_FLOWER,SYMP_GYPSUMFLOWER); cp3(TT_POINT_TYPE_HELICTITE,SYMP_HELICTITE); cp3(TT_POINT_TYPE_ICE,SYMP_ICE); cp3(TT_POINT_TYPE_SNOW,SYMP_SNOW); cp3(TT_POINT_TYPE_KARREN,SYMP_KARREN); cp3(TT_POINT_TYPE_LABEL,SYMP_LABEL); cp3(TT_POINT_TYPE_LOW_END,SYMP_LOWEND); cp3(TT_POINT_TYPE_MOONMILK,SYMP_MOONMILK); cp3(TT_POINT_TYPE_NARROW_END,SYMP_NARROWEND); cp3(TT_POINT_TYPE_NO_EQUIPMENT,SYMP_NOEQUIPMENT); cp3(TT_POINT_TYPE_PALEO_MATERIAL,SYMP_PALEOMATERIAL); cp3(TT_POINT_TYPE_PEBBLES,SYMP_PEBBLES); cp3(TT_POINT_TYPE_PILLAR,SYMP_PILLAR); cp3(TT_POINT_TYPE_POPCORN,SYMP_POPCORN); cp3(TT_POINT_TYPE_RAFT,SYMP_RAFT); cp3(TT_POINT_TYPE_RAFT_CONE,SYMP_RAFTCONE); cp3(TT_POINT_TYPE_REMARK,SYMP_REMARK); cp3(TT_POINT_TYPE_RIMSTONE_DAM,SYMP_RIMSTONEDAM); cp3(TT_POINT_TYPE_RIMSTONE_POOL,SYMP_RIMSTONEPOOL); cp3(TT_POINT_TYPE_ROOT,SYMP_ROOT); cp3(TT_POINT_TYPE_ROPE,SYMP_ROPE); cp3(TT_POINT_TYPE_ROPE_LADDER,SYMP_ROPELADDER); cp3(TT_POINT_TYPE_SAND,SYMP_SAND); cp3(TT_POINT_TYPE_SECTION,SYMP_SECTION); cp3(TT_POINT_TYPE_SCALLOP,SYMP_SCALLOP); cp3(TT_POINT_TYPE_SINK,SYMP_SINK); cp3(TT_POINT_TYPE_SODA_STRAW,SYMP_SODASTRAW); cp3(TT_POINT_TYPE_SPRING,SYMP_SPRING); cp3(TT_POINT_TYPE_STALACTITE,SYMP_STALACTITE); cp3(TT_POINT_TYPE_STALAGMITE,SYMP_STALAGMITE); cp3(TT_POINT_TYPE_STATION_NAME,SYMP_STATIONNAME); cp3(TT_POINT_TYPE_STEPS,SYMP_STEPS); cp3(TT_POINT_TYPE_TRAVERSE,SYMP_TRAVERSE); cp3(TT_POINT_TYPE_VEGETABLE_DEBRIS,SYMP_VEGETABLEDEBRIS); cp3(TT_POINT_TYPE_WALL_CALCITE,SYMP_WALLCALCITE); cp3(TT_POINT_TYPE_WATER,SYMP_WATER); cp3(TT_POINT_TYPE_ICE_STALACTITE,SYMP_ICESTALACTITE); cp3(TT_POINT_TYPE_ICE_STALAGMITE,SYMP_ICESTALAGMITE); cp3(TT_POINT_TYPE_ICE_PILLAR,SYMP_ICEPILLAR); cp3(TT_POINT_TYPE_HANDRAIL,SYMP_HANDRAIL); cp3(TT_POINT_TYPE_VIA_FERRATA,SYMP_VIAFERRATA); cp3(TT_POINT_TYPE_STALACTITES,SYMP_STALACTITES); cp3(TT_POINT_TYPE_STALAGMITES,SYMP_STALAGMITES); cp3(TT_POINT_TYPE_PILLARS,SYMP_PILLARS); } break; } return rv; } void thsymbolset::export_symbol_defaults(FILE * mpf, const char * symset) { fprintf(mpf,"\n\n\n%% %s symbol set.\n",symset); for(int id = 0; id < SYMX_; id++) { if (thsymbolset__assign[id]) { this->assigned[id] = true; fprintf(mpf,"mapsymbol(\"%s\",\"%s\",false);\n",thsymbolset__mp[id],symset); } } } void thsymbolset::export_symbol_assign(FILE * mpf, int sym_id, const char * symset) { if (sym_id > SYMX_) export_symbol_assign_group(mpf, sym_id, symset); else if (thsymbolset__assign[sym_id]) { fprintf(mpf,"mapsymbol(\"%s\",\"%s\",true);\n",thsymbolset__mp[sym_id],symset); } } void thsymbolset::export_symbol_hide(FILE * mpf, int sym_id) { if (sym_id > SYMX_) export_symbol_hide_group(mpf, sym_id); else this->assigned[sym_id] = false; } void thsymbolset::export_symbol_show(FILE * mpf, int sym_id) { if (sym_id > SYMX_) export_symbol_show_group(mpf, sym_id); else this->assigned[sym_id] = true; } void thsymbolset::export_symbol_color(FILE * mpf, int sym_id, thlayout_color * clr) { if (sym_id > SYMX_) export_symbol_color_group(mpf, sym_id, clr); else { this->color[sym_id] = *clr; this->color[sym_id].defined = true; } } void thsymbolset::export_symbol_color_group(FILE * mpf, int sym_id, thlayout_color * clr) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_color(mpf, cid, clr); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_assign_group(FILE * mpf, int sym_id, const char * symset) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_assign(mpf, cid, symset); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_hide_group(FILE * mpf, int sym_id) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_hide(mpf, cid); cid = thsymbolset__get_group(sym_id,id++); } } void thsymbolset::export_symbol_show_group(FILE * mpf, int sym_id) { int id = 0; int cid = thsymbolset__get_group(sym_id,id++); while (cid >= 0) { this->export_symbol_show(mpf, cid); cid = thsymbolset__get_group(sym_id,id++); } } #define bgroup(gid) case gid: \ switch (cid) { #define group(id,mid) case id: rv = mid; break; #define egroup } break; int thsymbolset__get_group(int group_id, int cid) { int rv = -1; switch (group_id) { case SYMX_ALL: if (cid < SYMS_) rv = cid; break; bgroup(SYMX_SECTIONS) group(0,SYMP_SECTION) group(1,SYML_SECTION) egroup bgroup(SYMX_CENTERLINE) group(0,SYMX_POINT_STATION) group(1,SYML_SURVEY_SURFACE) group(2,SYML_SURVEY_CAVE) group(3,SYMP_STATIONNAME) egroup bgroup(SYMX_TEXT) group(0,SYMP_LABEL) group(1,SYMP_REMARK) group(2,SYMP_DATE) group(3,SYML_LABEL) egroup bgroup(SYMX_WATER) group(0,SYMX_LINE_WATERFLOW) group(1,SYMX_POINT_WATERFLOW) group(2,SYMP_WATER) group(3,SYMA_WATER) group(4,SYMA_SUMP) group(5,SYMP_SPRING) group(6,SYMP_SINK) egroup bgroup(SYMX_EQUIPMENT) group( 0,SYMP_ANCHOR); group( 1,SYMP_ROPE); group( 2,SYMP_FIXEDLADDER); group( 3,SYMP_ROPELADDER); group( 4,SYMP_STEPS); group( 5,SYMP_BRIDGE); group( 6,SYMP_TRAVERSE); group( 7,SYMP_CAMP); group( 8,SYMP_NOEQUIPMENT); group( 9,SYML_ROPE); group(10,SYML_HANDRAIL); group(11,SYMP_HANDRAIL); group(12,SYML_FIXEDLADDER); group(13,SYML_ROPELADDER); group(14,SYMP_VIAFERRATA); group(15,SYML_VIAFERRATA); group(16,SYML_STEPS); egroup bgroup(SYMX_SPELEOTHEMS) group( 0,SYMP_FLOWSTONE); group( 1,SYMP_MOONMILK); group( 2,SYMP_STALACTITE); group( 3,SYMP_STALAGMITE); group( 4,SYMP_PILLAR); group( 5,SYMP_CURTAIN); group( 6,SYMP_HELICTITE); group( 7,SYMP_SODASTRAW); group( 8,SYMP_CRYSTAL); group( 9,SYMP_WALLCALCITE); group(10,SYMP_POPCORN); group(11,SYMP_DISK); group(12,SYMP_GYPSUM); group(13,SYMP_GYPSUMFLOWER); group(14,SYMP_ARAGONITE); group(15,SYMP_CAVEPEARL); group(16,SYMP_RIMSTONEPOOL); group(17,SYMP_RIMSTONEDAM); group(19,SYML_FLOWSTONE); group(20,SYML_MOONMILK); group(21,SYMA_FLOWSTONE) group(22,SYMA_MOONMILK) egroup bgroup(SYMX_ICE) group(0,SYML_WALL_ICE); group(1,SYMP_ICE); group(2,SYMP_ICESTALACTITE); group(3,SYMP_ICESTALAGMITE); group(4,SYMP_ICEPILLAR); group(5,SYMP_SNOW); group(6,SYMA_ICE); group(7,SYMA_SNOW); egroup bgroup(SYMX_SEDIMENTS) group(0,SYML_WALL_SAND); group(1,SYML_WALL_CLAY); group(2,SYMP_SAND); group(3,SYMP_CLAY); group(4,SYMA_SAND); group(5,SYMA_CLAY); group(6,SYMP_CLAYTREE); group(7,SYMP_RAFT); group(8,SYMP_RAFTCONE); group(9,SYMP_GUANO); egroup bgroup(SYMX_PASSAGEFILLS) group(0,SYMX_POINT_WATERFLOW) group(1,SYMP_BEDROCK); group(2,SYMP_SAND); group(3,SYMP_RAFT); group(4,SYMP_CLAY); group(5,SYMP_PEBBLES); group(6,SYMP_DEBRIS); group(7,SYMP_BLOCKS); group(8,SYMP_WATER); group(9,SYMP_ICE); group(10,SYMP_GUANO); group(11,SYMP_SNOW); group(12,SYML_ROCKBORDER); group(13,SYML_ROCKEDGE); group(14,SYMX_LINE_WATERFLOW) group(15,SYMA_WATER) group(16,SYMA_SUMP) group(17,SYMA_BEDROCK) group(18,SYMA_BLOCKS) group(19,SYMA_CLAY) group(20,SYMA_DEBRIS) group(21,SYMA_ICE) group(22,SYMA_PEBBLES) group(23,SYMA_SAND) group(24,SYMA_SNOW) egroup bgroup(SYMX_SURFACECENTERLINE) group(0,SYMP_SURFACESTATION) group(1,SYML_SURVEY_SURFACE) egroup bgroup(SYMX_POINT_FLAG) group(0,SYMP_FLAG_ENTRANCE) group(1,SYMP_FLAG_CONTINUATION) group(2,SYMP_FLAG_SINK) group(3,SYMP_FLAG_SPRING) group(4,SYMP_FLAG_DOLINE) group(5,SYMP_FLAG_DIG) group(6,SYMP_FLAG_AIRDRAUGHT) group(7,SYMP_FLAG_ARCH) group(8,SYMP_FLAG_OVERHANG) egroup bgroup(SYMX_CAVECENTERLINE) group(0,SYMP_CAVESTATION) group(1,SYML_SURVEY_CAVE) egroup bgroup(SYMX_LINE_WALL) group(0,SYML_WALL_BEDROCK) group(1,SYML_WALL_BLOCKS) group(2,SYML_WALL_CLAY) group(3,SYML_WALL_DEBRIS) group(4,SYML_WALL_ICE) group(5,SYML_WALL_PEBBLES) group(6,SYML_WALL_PRESUMED) group(7,SYML_WALL_SAND) group(8,SYML_WALL_UNDERLYING) group(9,SYML_WALL_UNSURVEYED) group(10,SYML_WALL_PIT) group(11,SYML_WALL_OVERLYING) group(12,SYML_WALL_MOONMILK) group(13,SYML_WALL_FLOWSTONE) egroup bgroup(SYMX_LINE_WATERFLOW) group(0,SYML_WATERFLOW_CONJECTURAL) group(1,SYML_WATERFLOW_INTERMITTENT) group(2,SYML_WATERFLOW_PERMANENT) egroup bgroup(SYMX_LINE_BORDER) group(0,SYML_BORDER_TEMPORARY) group(1,SYML_BORDER_VISIBLE) egroup bgroup(SYMX_LINE_SURVEY) group(0,SYML_SURVEY_CAVE) group(1,SYML_SURVEY_SURFACE) egroup bgroup(SYMX_POINT_STATION) group(0,SYMP_STATION_FIXED) group(1,SYMP_STATION_NATURAL) group(2,SYMP_STATION_PAINTED) group(3,SYMP_STATION_TEMPORARY) group(4,SYMP_SURFACESTATION) group(5,SYMP_CAVESTATION) egroup bgroup(SYMX_POINT_AIRDRAUGHT) group(0,SYMP_AIRDRAUGHT) group(1,SYMP_AIRDRAUGHT_SUMMER) group(2,SYMP_AIRDRAUGHT_WINTER) egroup bgroup(SYMX_POINT_WATERFLOW) group(0,SYMP_WATERFLOW_INTERMITTENT) group(1,SYMP_WATERFLOW_PALEO) group(2,SYMP_WATERFLOW_PERMANENT) egroup bgroup(SYMX_POINT_PASSAGEHEIGHT) group(0,SYMP_PASSAGEHEIGHT_POSITIVE) group(1,SYMP_PASSAGEHEIGHT_NEGATIVE) group(2,SYMP_PASSAGEHEIGHT_BOTH) group(3,SYMP_PASSAGEHEIGHT_UNSIGNED) egroup bgroup(SYMX_POINT_HEIGHT) group(0,SYMP_HEIGHT_POSITIVE) group(1,SYMP_HEIGHT_NEGATIVE) group(2,SYMP_HEIGHT_UNSIGNED) egroup } return rv; } void thsymbolset::export_pdf(class thlayout * layout, FILE * mpf, unsigned & sfig) { list::iterator LEGENDITEM; legendrecord dummlr; LEGENDLIST.clear(); thbuffer texb; texb.guarantee(128); unsigned symn = 0; for(int i = 0; i < thsymbolset_size; i++) if (layout->legend == TT_LAYOUT_LEGEND_ALL) { this->export_symbol_show_group(mpf, SYMX_POINT_FLAG); } // TODO: // + section point (rez), line (ciara), arrow (sipocka) // + wall:pebbles, wall:clay, wall:ice // + point: passase-height (p,n,pn,u), height (p,n,u), date, label, remark // + line: label #define helpsymbol fprintf(mpf,"drawoptions(withcolor HelpSymbolColor);\n"); #define endhelpsymbol fprintf(mpf,"drawoptions();\n"); #define isused(mid) \ (this->assigned[mid] && \ (this->used[mid] || (layout->legend == TT_LAYOUT_LEGEND_ALL))) // vlozi figure do metapostu #define insfig(mid,txt) \ if (((mid == 0) || (isused(mid))) && (strlen(txt) > 0)) {\ LEGENDITEM = LEGENDLIST.insert(LEGENDLIST.end(),dummlr); \ fprintf(mpf,"beginfig(%d);\n",sfig); \ fprintf(mpf,"clean_legend_box;\n"); \ sprintf(texb.get_buffer(),"data.%d",sfig); \ LEGENDITEM->idfig = (unsigned) sfig; \ LEGENDITEM->idsym = (unsigned) mid; \ LEGENDITEM->idnum = (unsigned) symn; \ LEGENDITEM->fname = texb.get_buffer(); \ LEGENDITEM->name = thlegend_u2string(unsigned(symn++)); \ LEGENDITEM->descr = txt; \ sfig++; #define endfig \ fprintf(mpf,"draw_legend_box;\nendfig;\n"); \ } #define legend_point(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[mid]); \ endfig; #define legend_hpoint(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[mid]); \ endfig; // meracie body + polygon + station-name #define legend_station(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((0.5,0.5) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("point station") legend_station(SYMP_STATION_TEMPORARY,thT("point station:temporary",layout->lang)); legend_station(SYMP_STATION_PAINTED,thT("point station:painted",layout->lang)); legend_station(SYMP_STATION_NATURAL,thT("point station:natural",layout->lang)); legend_station(SYMP_STATION_FIXED,thT("point station:fixed",layout->lang)); #define legend_station_flag(mid,txt,flag) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"p_station((0.5,0.5) inscale, 0, \"\", \"%s\");\n",flag); \ endfig; legend_station_flag(SYMP_FLAG_ENTRANCE,thT("point flag:entrance",layout->lang),"entrance"); legend_station_flag(SYMP_FLAG_SINK,thT("point flag:sink",layout->lang),"sink"); legend_station_flag(SYMP_FLAG_SPRING,thT("point flag:spring",layout->lang),"spring"); legend_station_flag(SYMP_FLAG_DOLINE,thT("point flag:doline",layout->lang),"doline"); legend_station_flag(SYMP_FLAG_DIG,thT("point flag:dig",layout->lang),"dig"); legend_station_flag(SYMP_FLAG_CONTINUATION,thT("point flag:continuation",layout->lang),"continuation"); legend_station_flag(SYMP_FLAG_AIRDRAUGHT,thT("point flag:air-draught",layout->lang),"airdraught"); legend_station_flag(SYMP_FLAG_ARCH,thT("point flag:arch",layout->lang),"arch"); legend_station_flag(SYMP_FLAG_OVERHANG,thT("point flag:overhang",layout->lang),"overhang"); #define insert_station(x,y) \ helpsymbol \ if (true || isused(SYMP_STATION_TEMPORARY)) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_TEMPORARY],x,y); \ else \ if isused(SYMP_STATION_PAINTED) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_PAINTED],x,y); \ else \ if isused(SYMP_STATION_NATURAL) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_NATURAL],x,y); \ else \ if isused(SYMP_STATION_FIXED) \ fprintf(mpf,"%s((%g,%g) inscale);\n",thsymbolset__mp[SYMP_STATION_FIXED],x,y); \ endhelpsymbol; insfig(SYML_SURVEY_CAVE,thT("line survey",layout->lang)); this->export_mp_symbol_options(mpf, SYML_SURVEY_CAVE); fprintf(mpf,"%s(((-1,1) -- (0.8,0.6) -- (0,-1)) inscale);\n", thsymbolset__mp[SYML_SURVEY_CAVE]); insert_station(0.8,0.6); endfig; insfig(SYMP_STATIONNAME,thT("point station-name",layout->lang)); this->export_mp_symbol_options(mpf, SYMP_STATIONNAME); fprintf(mpf,"p_label.urt(btex \\thstationname %s etex,((0.3,0.3) inscale),0,7);\n",utf2tex("173")); insert_station(0.3,0.3); endfig; legend_hpoint(SYMP_ENTRANCE,thT("point entrance",layout->lang)); insfig(SYML_MAPCONNECTION,thT("line map-connection",layout->lang)); this->export_mp_symbol_options(mpf, SYML_MAPCONNECTION); fprintf(mpf,"%s(((0.2,0.8) -- (0.8,0.2)) inscale)",thsymbolset__mp[SYML_MAPCONNECTION]); endfig; // steny + wall-altitude + altitude #define legend_wall(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((-.3,0.5) .. (.3,.3) .. (.7,.7) .. (1.3,.5)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("line wall") legend_wall(SYML_WALL_BEDROCK,thT("line wall:bedrock",layout->lang)); legend_wall(SYML_WALL_UNDERLYING,thT("line wall:underlying",layout->lang)); legend_wall(SYML_WALL_OVERLYING,thT("line wall:overlying",layout->lang)); legend_wall(SYML_WALL_UNSURVEYED,thT("line wall:unsurveyed",layout->lang)); legend_wall(SYML_WALL_PRESUMED,thT("line wall:presumed",layout->lang)); legend_wall(SYML_WALL_PIT,thT("line wall:pit",layout->lang)); legend_wall(SYML_WALL_BLOCKS,thT("line wall:blocks",layout->lang)); legend_wall(SYML_WALL_DEBRIS,thT("line wall:debris",layout->lang)); legend_wall(SYML_WALL_PEBBLES,thT("line wall:pebbles",layout->lang)); legend_wall(SYML_WALL_SAND,thT("line wall:sand",layout->lang)); legend_wall(SYML_WALL_CLAY,thT("line wall:clay",layout->lang)); legend_wall(SYML_WALL_ICE,thT("line wall:ice",layout->lang)); legend_wall(SYML_WALL_FLOWSTONE,thT("line wall:flowstone",layout->lang)); legend_wall(SYML_WALL_MOONMILK,thT("line wall:moonmilk",layout->lang)); insfig(SYMP_WALLALTITUDE,thT("point wall-altitude",layout->lang)); helpsymbol; if (true || isused(SYML_WALL_BEDROCK)) fprintf(mpf,"%s(((-.3,0.5) .. controls (.2,.6) and (.2,.6) .. (.3,.7) .. controls (.4,.8) and (.4,.8) .. (.5,1.4)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_WALLALTITUDE); fprintf(mpf,"%s((0.2,0.6) inscale,(0.3,0.7) inscale,(0.4,0.8) inscale,btex \\thwallaltitude %s etex);\n",thsymbolset__mp[SYMP_WALLALTITUDE],utf2tex("1510")); endfig; insfig(SYMP_ALTITUDE,thT("point altitude",layout->lang)); this->export_mp_symbol_options(mpf, SYMP_ALTITUDE); fprintf(mpf,"p_label.rt(btex \\thaltitude %s etex,((0.3,0.5) inscale),0,1);\n",utf2tex("1510")); endfig; // thT("point section") insfig(SYML_SECTION,thT("line section",layout->lang)); helpsymbol; if (true || (true || isused(SYML_WALL_BEDROCK))) { fprintf(mpf,"%s(((.25,1.0) .. (.2,.5){dir 270} .. (.15,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); fprintf(mpf,"%s(((.3,0.0) .. (.4,.5){dir 90} .. (.5,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); if (true || isused(SYMP_SECTION)) { fprintf(mpf,"%s(((.7,.5){dir 90} .. (.9,.75){dir 270} .. (.8,.15){dir 235} .. cycle) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); } } endhelpsymbol; this->export_mp_symbol_options(mpf, SYML_SECTION); fprintf(mpf,"%s(((0,.5) .. controls (.195,.5) and (.405,.5) .. (.6,.5)) inscale,1);\n",thsymbolset__mp[SYML_SECTION]); endfig; // vysky chodby #define insert_big_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.35,1.0) .. (.3,.5){dir 270} .. (.25,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.6,0.0) .. (.7,.5){dir 90} .. (.8,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; #define insert_big_water_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.35,1.0) .. (.3,.5){dir 270} .. (.25,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.6,0.0) .. (.7,.5){dir 90} .. (.8,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; // thT("point passage-height") insfig(SYMP_PASSAGEHEIGHT_UNSIGNED,thT("point passage-height:unsigned",layout->lang)); //insert_big_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_UNSIGNED); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,5);\n",utf2tex("5")); endfig; insfig(SYMP_PASSAGEHEIGHT_POSITIVE,thT("point passage-height:positive",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_POSITIVE); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,2);\n",utf2tex("3")); endfig; insfig(SYMP_PASSAGEHEIGHT_NEGATIVE,thT("point passage-height:negative",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_NEGATIVE); fprintf(mpf,"p_label(btex \\thframed %s etex,((0.5,0.5) inscale),0,3);\n",utf2tex("2")); endfig; insfig(SYMP_PASSAGEHEIGHT_BOTH,thT("point passage-height:both",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_PASSAGEHEIGHT_BOTH); fprintf(mpf,"p_label(btex \\thframed \\updown{%s}",utf2tex("3")); fprintf(mpf,"{%s} etex,((0.5,0.5) inscale),0,4);\n",utf2tex("2")); endfig; legend_hpoint(SYMP_AIRDRAUGHT,thT("point air-draught",layout->lang)); legend_hpoint(SYMP_AIRDRAUGHT_WINTER,thT("point air-draught:winter",layout->lang)); legend_hpoint(SYMP_AIRDRAUGHT_SUMMER,thT("point air-draught:summer",layout->lang)); thdate d; d.parse("1999.12.31"); insfig(SYMP_DATE,thT("point date",layout->lang)); //insert_big_water_passage this->export_mp_symbol_options(mpf, SYMP_DATE); fprintf(mpf,"p_label(btex \\thdate %s etex,((0.5,0.5) inscale),0,0);\n",utf2tex(d.get_str(TT_DATE_FMT_UTF8_ISO))); endfig; // ukoncenia #define legend_end(mid,txt) \ insfig(mid,txt); \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) {\ fprintf(mpf,"%s(((0,.2){dir 30} .. {dir 0}(.5,.4)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.5,.6){dir 180} .. {dir 210}(0,.8)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s((.6,.5) inscale,270.0,1.0,(0,1));\n",thsymbolset__mp[mid]); \ endfig; legend_point(SYMP_DIG,thT("point dig",layout->lang)) legend_end(SYMP_CONTINUATION,thT("point continuation",layout->lang)) legend_end(SYMP_NARROWEND,thT("point narrow-end",layout->lang)) legend_end(SYMP_LOWEND,thT("point low-end",layout->lang)) legend_end(SYMP_FLOWSTONECHOKE,thT("point flowstone-choke",layout->lang)) legend_end(SYMP_BREAKDOWNCHOKE,thT("point breakdown-choke",layout->lang)) legend_end(SYMP_CLAYCHOKE,thT("point clay-choke",layout->lang)) #define legend_iuline "(((.1,.6) .. (.5,.4) .. (.9,.6)) inscale)" #define legend_cline "(((.85,.5){dir 90} .. (.5,.85){dir 180} .. (.4,.15){dir 0} .. cycle) inscale)" #define legend_scline "(((.5,.5){dir 90} .. (.3,.75){dir 180} .. (.15,.5) .. (.2,.25){dir 0} .. cycle) inscale)" #define legend_step(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(%s);\n",thsymbolset__mp[mid],legend_iuline); \ endfig; #define legend_cycle(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(%s);\n",thsymbolset__mp[mid],legend_cline); \ endfig; #define insert_small_passage \ helpsymbol; \ if (true || isused(SYML_WALL_BEDROCK)) { \ fprintf(mpf,"%s(((.2,1.0) .. (.15,.5){dir 270} .. (.1,0.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ fprintf(mpf,"%s(((.4,0.0) .. (.5,.5){dir 90} .. (.6,1.0)) inscale);\n",thsymbolset__mp[SYML_WALL_BEDROCK]); \ } \ endhelpsymbol; // zrazy + kominy + priepasti + gradient legend_step(SYML_FLOORSTEP,thT("line floor-step",layout->lang)); legend_step(SYML_OVERHANG,thT("line overhang",layout->lang)); legend_step(SYML_FLOORMEANDER,thT("line floor-meander",layout->lang)); legend_cycle(SYML_PIT,thT("line pit",layout->lang)); legend_step(SYML_CEILINGSTEP,thT("line ceiling-step",layout->lang)); legend_step(SYML_CEILINGMEANDER,thT("line ceiling-meander",layout->lang)); legend_cycle(SYML_CHIMNEY,thT("line chimney",layout->lang)); if isused(SYML_GRADIENT) { insfig(SYML_GRADIENT,thT("line gradient",layout->lang)); this->export_mp_symbol_options(mpf, SYML_GRADIENT); fprintf(mpf,"%s(((0.2,0.5) -- (0.8,0.5)) inscale);\n",thsymbolset__mp[SYML_GRADIENT]); endfig; } if ((!(isused(SYML_GRADIENT)) || (!(this->group_symbols)))) { this->export_mp_symbol_options(mpf, SYMP_GRADIENT); legend_hpoint(SYMP_GRADIENT,thT("point gradient",layout->lang)); } // thT("point height") // thT("point dimensions") insfig(SYMP_HEIGHT_UNSIGNED,thT("point height:unsigned",layout->lang)); helpsymbol; if isused(SYML_FLOORSTEP) { fprintf(mpf,"%s(((.15,.5){dir 340} .. (.5,.5)) inscale);\n",thsymbolset__mp[SYML_FLOORSTEP]); insert_small_passage } else if isused(SYML_PIT) { fprintf(mpf,"%s(((.15,.5){dir 340} .. (.5,.5)) inscale);\n",thsymbolset__mp[SYML_PIT]); insert_small_passage } endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_UNSIGNED); fprintf(mpf,"p_label.rt(btex \\thheight %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("4")); endfig; insfig(SYMP_HEIGHT_POSITIVE,thT("point height:positive",layout->lang)); helpsymbol; if isused(SYML_CHIMNEY) fprintf(mpf,"%s(%s);\n",thsymbolset__mp[SYML_CHIMNEY],legend_scline); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_POSITIVE); fprintf(mpf,"p_label.rt(btex \\thheightpos %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("15")); endfig; insfig(SYMP_HEIGHT_NEGATIVE,thT("point height:negative",layout->lang)); helpsymbol; if isused(SYML_PIT) fprintf(mpf,"%s(%s);\n",thsymbolset__mp[SYML_PIT],legend_scline); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_HEIGHT_NEGATIVE); fprintf(mpf,"p_label.rt(btex \\thheightneg %s etex,((0.5,0.5) inscale),0,7);\n",utf2tex("30")); endfig; insfig(SYML_CONTOUR,thT("line contour",layout->lang)); this->export_mp_symbol_options(mpf, SYML_CONTOUR); fprintf(mpf,"%s(%s,-1);\n",thsymbolset__mp[SYML_CONTOUR],legend_iuline); endfig; insfig(SYML_SLOPE,thT("line slope",layout->lang)); this->export_mp_symbol_options(mpf, SYML_SLOPE); fprintf(mpf,"%s((((.1,.35) .. (.5,.25) .. (.9,.35)) inscale),1,(0,-1,1u),(2,-1,1u));\n",thsymbolset__mp[SYML_SLOPE]); endfig; // kamene insfig(SYML_ROCKBORDER,thT("line rock-border",layout->lang)); this->export_mp_symbol_options(mpf, SYML_ROCKBORDER); fprintf(mpf,"%s(((.16,.36) -- (.61,.21) -- (.91,.46) -- (.84,.78) -- (.38,.86) -- (.20,.55) -- cycle) inscale)",thsymbolset__mp[SYML_ROCKBORDER]); endfig; insfig(SYML_ROCKEDGE,thT("line rock-edge",layout->lang)); helpsymbol; if isused(SYML_ROCKBORDER) fprintf(mpf,"%s(((.16,.36) -- (.61,.21) -- (.91,.46) -- (.84,.78) -- (.38,.86) -- (.20,.55) -- cycle) inscale)",thsymbolset__mp[SYML_ROCKBORDER]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYML_ROCKEDGE); fprintf(mpf,"%s(((.16,.36) -- (.42,.62) -- (.38,.86) -- (.42,.62) -- (.6,.55) -- (.61,.21) -- (.6,.55) -- (.84,.78)) inscale)",thsymbolset__mp[SYML_ROCKEDGE]); endfig; // vypln bodova legend_point(SYMP_BEDROCK,thT("point bedrock",layout->lang)); legend_point(SYMP_BLOCKS,thT("point blocks",layout->lang)); legend_point(SYMP_DEBRIS,thT("point debris",layout->lang)); legend_point(SYMP_SAND,thT("point sand",layout->lang)); legend_point(SYMP_CLAY,thT("point clay",layout->lang)); legend_point(SYMP_WATER,thT("point water",layout->lang)); legend_point(SYMP_ICE,thT("point ice",layout->lang)); legend_point(SYMP_SNOW,thT("point snow",layout->lang)); legend_point(SYMP_PEBBLES,thT("point pebbles",layout->lang)); legend_point(SYMP_RAFT,thT("point raft",layout->lang)); legend_point(SYMP_GUANO,thT("point guano",layout->lang)); legend_point(SYMP_CLAYTREE,thT("point clay-tree",layout->lang)); // okraje // thT("line border") legend_cycle(SYML_BORDER_VISIBLE,thT("line border:visible",layout->lang)); legend_cycle(SYML_BORDER_TEMPORARY,thT("line border:temporary",layout->lang)); legend_cycle(SYML_BORDER_PRESUMED,thT("line border:presumed",layout->lang)); // vypln plosna #define legend_area(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(buildcycle((((-1,0) -- (1,0) -- (1,1) -- (0,1) -- (0,-1)) inscale)));\n",thsymbolset__mp[mid]); \ endfig; #define legend_nocliparea(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(buildcycle((((-4,-4) -- (4,-4) -- (4,4) -- (-4,4) -- (-4,-4)) inscale)));\n",thsymbolset__mp[mid]); \ endfig; legend_area(SYMA_WATER,thT("area water",layout->lang)); legend_area(SYMA_SUMP,thT("area sump",layout->lang)); legend_area(SYMA_SNOW,thT("area snow",layout->lang)); legend_area(SYMA_ICE,thT("area ice",layout->lang)); legend_area(SYMA_SAND,thT("area sand",layout->lang)); legend_area(SYMA_CLAY,thT("area clay",layout->lang)); legend_area(SYMA_PEBBLES,thT("area pebbles",layout->lang)); legend_area(SYMA_DEBRIS,thT("area debris",layout->lang)); legend_area(SYMA_FLOWSTONE,thT("area flowstone",layout->lang)); legend_area(SYMA_MOONMILK,thT("area moonmilk",layout->lang)); legend_nocliparea(SYMA_BLOCKS,thT("area blocks",layout->lang)); legend_nocliparea(SYMA_BEDROCK,thT("area bedrock",layout->lang)); // vodne toky (ciary, body) #define legend_waterflow(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((0.2,0.8) -- (0.8,0.2)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // thT("line water-flow") // thT("point water-flow") if (isused(SYML_WATERFLOW_PERMANENT) && isused(SYMP_WATERFLOW_PERMANENT) && this->group_symbols) { insfig(SYML_WATERFLOW_PERMANENT,thT("line water-flow:permanent",layout->lang)); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_PERMANENT); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,0.3)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); this->export_mp_symbol_options(mpf, SYMP_WATERFLOW_PERMANENT); fprintf(mpf,"%s((0.5,0.7) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_WATERFLOW_PERMANENT]); endfig; } else { legend_waterflow(SYML_WATERFLOW_PERMANENT,thT("line water-flow:permanent",layout->lang)); legend_hpoint(SYMP_WATERFLOW_PERMANENT,thT("point water-flow:permanent",layout->lang)); } if (isused(SYML_WATERFLOW_INTERMITTENT) && isused(SYMP_WATERFLOW_INTERMITTENT) && this->group_symbols) { insfig(SYML_WATERFLOW_INTERMITTENT,thT("line water-flow:intermittent",layout->lang)); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_INTERMITTENT); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,0.3)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_INTERMITTENT]); this->export_mp_symbol_options(mpf, SYML_WATERFLOW_INTERMITTENT); fprintf(mpf,"%s((0.5,0.7) inscale,270.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_WATERFLOW_INTERMITTENT]); endfig; } else { legend_waterflow(SYML_WATERFLOW_INTERMITTENT,thT("line water-flow:intermittent",layout->lang)); legend_hpoint(SYMP_WATERFLOW_INTERMITTENT,thT("point water-flow:intermittent",layout->lang)); } legend_waterflow(SYML_WATERFLOW_CONJECTURAL,thT("line water-flow:conjectural",layout->lang)); legend_hpoint(SYMP_WATERFLOW_PALEO,thT("point water-flow:paleo",layout->lang)); insfig(SYMP_SPRING,thT("point spring",layout->lang)); helpsymbol; fprintf(mpf,"%s(((0.3,0.5) -- (0.9,0.5)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_SPRING); fprintf(mpf,"%s((0.3,0.5) inscale,270,1.0,(0,-1));\n",thsymbolset__mp[SYMP_SPRING]); endfig; insfig(SYMP_SINK,thT("point sink",layout->lang)); helpsymbol; fprintf(mpf,"%s(((0.1,0.5) -- (0.7,0.5)) inscale);\n",thsymbolset__mp[SYML_WATERFLOW_PERMANENT]); endhelpsymbol; this->export_mp_symbol_options(mpf, SYMP_SINK); fprintf(mpf,"%s((0.7,0.5) inscale,270,1.0,(0,1));\n",thsymbolset__mp[SYMP_SINK]); endfig; // vyzdoba if (isused(SYMP_FLOWSTONE) && isused(SYML_FLOWSTONE) && this->group_symbols) { insfig(SYMP_FLOWSTONE,thT("point flowstone",layout->lang)); this->export_mp_symbol_options(mpf, SYML_FLOWSTONE); fprintf(mpf,"%s(((.1,.4) .. (.5,.2) .. (.9,.4)) inscale);\n",thsymbolset__mp[SYML_FLOWSTONE]); this->export_mp_symbol_options(mpf, SYMP_FLOWSTONE); fprintf(mpf,"%s((0.5,0.7) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_FLOWSTONE]); endfig; } else { legend_point(SYMP_FLOWSTONE,thT("point flowstone",layout->lang)); legend_step(SYML_FLOWSTONE,thT("line flowstone",layout->lang)); } if (isused(SYMP_MOONMILK) && isused(SYML_MOONMILK) && this->group_symbols) { insfig(SYMP_MOONMILK,thT("point moonmilk",layout->lang)); this->export_mp_symbol_options(mpf, SYML_MOONMILK); fprintf(mpf,"%s(((.1,.4) .. (.5,.2) .. (.9,.4)) inscale);\n",thsymbolset__mp[SYML_MOONMILK]); this->export_mp_symbol_options(mpf, SYMP_MOONMILK); fprintf(mpf,"%s((0.5,0.7) inscale,0.0,1.0,(0,0));\n",thsymbolset__mp[SYMP_MOONMILK]); endfig; } else { legend_point(SYMP_MOONMILK,thT("point moonmilk",layout->lang)); legend_step(SYML_MOONMILK,thT("line moonmilk",layout->lang)); } legend_point(SYMP_STALACTITE,thT("point stalactite",layout->lang)); legend_point(SYMP_STALACTITES,thT("point stalactites",layout->lang)); legend_point(SYMP_STALAGMITE,thT("point stalagmite",layout->lang)); legend_point(SYMP_STALAGMITES,thT("point stalagmites",layout->lang)); legend_point(SYMP_PILLAR,thT("point pillar",layout->lang)); legend_point(SYMP_PILLARS,thT("point pillars",layout->lang)); legend_point(SYMP_ICESTALACTITE,thT("point ice-stalactite",layout->lang)); legend_point(SYMP_ICESTALAGMITE,thT("point ice-stalagmite",layout->lang)); legend_point(SYMP_ICEPILLAR,thT("point ice-pillar",layout->lang)); legend_point(SYMP_CURTAIN,thT("point curtain",layout->lang)); legend_point(SYMP_SODASTRAW,thT("point soda-straw",layout->lang)); legend_point(SYMP_POPCORN,thT("point popcorn",layout->lang)); legend_point(SYMP_CAVEPEARL,thT("point cave-pearl",layout->lang)); legend_point(SYMP_DISK,thT("point disk",layout->lang)); legend_point(SYMP_HELICTITE,thT("point helictite",layout->lang)); legend_point(SYMP_ARAGONITE,thT("point aragonite",layout->lang)); legend_point(SYMP_CRYSTAL,thT("point crystal",layout->lang)); legend_point(SYMP_WALLCALCITE,thT("point wall-calcite",layout->lang)); legend_point(SYMP_GYPSUM,thT("point gypsum",layout->lang)); legend_point(SYMP_GYPSUMFLOWER,thT("point gypsum-flower",layout->lang)); legend_point(SYMP_RIMSTONEDAM,thT("point rimstone-dam",layout->lang)); legend_point(SYMP_RIMSTONEPOOL,thT("point rimstone-pool",layout->lang)); legend_point(SYMP_ANASTOMOSIS,thT("point anastomosis",layout->lang)); legend_point(SYMP_KARREN,thT("point karren",layout->lang)); legend_point(SYMP_SCALLOP,thT("point scallop",layout->lang)); legend_point(SYMP_FLUTE,thT("point flute",layout->lang)); legend_point(SYMP_RAFTCONE,thT("point raft-cone",layout->lang)); // ostatne materialy legend_point(SYMP_ARCHEOMATERIAL,thT("point archeo-material",layout->lang)); legend_point(SYMP_PALEOMATERIAL,thT("point paleo-material",layout->lang)); legend_point(SYMP_VEGETABLEDEBRIS,thT("point vegetable-debris",layout->lang)); legend_point(SYMP_ROOT,thT("point root",layout->lang)); #define legend_eqline(mid,txt) \ insfig(mid,txt); \ this->export_mp_symbol_options(mpf, mid); \ fprintf(mpf,"%s(((0.1,0.5) .. (0.9,.5)) inscale);\n",thsymbolset__mp[mid]); \ endfig; // vystroj legend_point(SYMP_NOEQUIPMENT,thT("point no-equipment",layout->lang)); legend_point(SYMP_ANCHOR,thT("point anchor",layout->lang)); legend_point(SYMP_ROPE,thT("point rope",layout->lang)); legend_point(SYMP_ROPELADDER,thT("point rope-ladder",layout->lang)); legend_eqline(SYML_ROPELADDER,thT("line rope-ladder",layout->lang)); legend_point(SYMP_FIXEDLADDER,thT("point fixed-ladder",layout->lang)); legend_eqline(SYML_FIXEDLADDER,thT("line fixed-ladder",layout->lang)); legend_point(SYMP_STEPS,thT("point steps",layout->lang)); insfig(SYML_ROPE,thT("line rope",layout->lang)); this->export_mp_symbol_options(mpf, SYML_ROPE); fprintf(mpf,"%s(((0.1,0.85) -- (0.25,0.6) -- (0.5,0.1)) inscale, false, true);\n",thsymbolset__mp[SYML_ROPE]); fprintf(mpf,"%s(((0.6,0.8) -- (0.8,0.2)) inscale, true, false);\n",thsymbolset__mp[SYML_ROPE]); endfig; insfig(SYML_STEPS,thT("line steps",layout->lang)); this->export_mp_symbol_options(mpf, SYML_STEPS); fprintf(mpf,"%s(((0.1,0.3) -- (0.9,.3) -- (0.9,0.7) -- (0.1,0.7) -- cycle) inscale);\n",thsymbolset__mp[SYML_STEPS]); endfig; legend_point(SYMP_VIAFERRATA,thT("point via-ferrata",layout->lang)); legend_eqline(SYML_VIAFERRATA,thT("line via-ferrata",layout->lang)); legend_point(SYMP_TRAVERSE,thT("point traverse",layout->lang)); legend_point(SYMP_BRIDGE,thT("point bridge",layout->lang)); legend_point(SYMP_HANDRAIL,thT("point handrail",layout->lang)); legend_eqline(SYML_HANDRAIL,thT("line handrail",layout->lang)); legend_point(SYMP_CAMP,thT("point camp",layout->lang)); // thT("point remark") // thT("point label") // thT("line label") // nakoniec prejde uzivatelsky definovane symboly thdb2d_udef_map::iterator it; std::string udef_desc; int mid = SYMX_; if (layout->db != NULL) { for(it = layout->db->db2d.m_udef_map.begin(); it != layout->db->db2d.m_udef_map.end(); it++) { if (it->second->m_assigned && (it->second->m_used || (layout->legend == TT_LAYOUT_LEGEND_ALL))) { switch (it->first.m_command) { case TT_POINT_CMD: udef_desc = "point"; break; case TT_LINE_CMD: udef_desc = "line"; break; case TT_AREA_CMD: udef_desc = "area"; break; } udef_desc += " u:"; udef_desc += it->first.m_type; if (strlen(thT(udef_desc.c_str(), layout->lang)) > 0) { insfig(0,thsymbolset__mp[0]); switch (it->first.m_command) { case TT_POINT_CMD: fprintf(mpf,"p_u_%s_legend;\n",it->first.m_type); break; case TT_LINE_CMD: fprintf(mpf,"l_u_%s_legend;\n",it->first.m_type); break; case TT_AREA_CMD: fprintf(mpf,"a_u_%s_legend;\n",it->first.m_type); break; } LEGENDITEM->descr = thT(udef_desc.c_str(), layout->lang); LEGENDITEM->idsym = (unsigned) mid++; endfig; } } } } } void export_all_symbols() { // vytvori si temporary MP subor FILE * mpf; thlayout tmplayout; tmplayout.lang = THLANG_SYSTEM; mpf = fopen(thtmp.get_file_name("data.mp"),"w"); // spusti metapost a nasledne pdftex // fprintf(mpf,"Scale:=%.2f;\n",0.01 / tmplayout.scale); // if (tmplayout.def_base_scale || tmplayout.redef_base_scale) // fprintf(mpf,"BaseScale:=%.2f;\n",0.01 / tmplayout.base_scale); fprintf(mpf,"Scale:=0.8;\n"); fprintf(mpf,"BaseScale:=2;\n"); fprintf(mpf,"color HelpSymbolColor;\nHelpSymbolColor := (0.8, 0.8, 0.8);\n"); fprintf(mpf,"background:=(1.0, 1.0, 1.0);\n"); fprintf(mpf,"verbatimtex \\input th_enc.tex etex;\n"); if (thcmdln.extern_libs) fprintf(mpf,"input therion;\n"); else fprintf(mpf,"%s\n",thmpost_library); fprintf(mpf,"lang:=\"%s\";\n",thlang_getid(tmplayout.lang)); if (ENC_NEW.NFSS==0) fprintf(mpf,"defaultfont:=\"%s\";\n",FONTS.begin()->ss.c_str()); else fprintf(mpf,"defaultfont:=\"thss00\";\n"); tmplayout.export_mpost(mpf); fprintf(mpf,"background:=white;\n"); fprintf(mpf,"transparency:=false;\n"); // vyexportuje secky znacky size_t iset, isym; unsigned figi = 1; thsymbolset symset; thsymsets_symbols_init(); list::iterator li; // najprv exportujeme secky defaultne tmplayout.legend = TT_LAYOUT_LEGEND_ALL; LEGENDLIST.clear(); symset.group_symbols = false; symset.export_pdf(&tmplayout, mpf, figi); for(isym = 0; isym < thsymbolset_size; isym++) { thsymsets_figure[isym][thsymsets_size] = 0; thsymsets_order[isym] = 0; } for(li = LEGENDLIST.begin(); li != LEGENDLIST.end(); li++) { thsymsets_figure[li->idsym][thsymsets_size] = li->idfig; thsymsets_comment[li->idsym] = li->descr; thsymsets_order[li->idnum] = li->idsym; } tmplayout.legend = TT_LAYOUT_LEGEND_ON; for (iset = 0; iset < thsymsets_size; iset++) { LEGENDLIST.clear(); symset.export_symbol_defaults(mpf, thsymsets[iset]); for(isym = 0; isym < thsymbolset_size; isym++) { if (thsymsets_symbols[isym][iset] > 0) symset.used[isym] = true; else symset.used[isym] = false; } symset.export_pdf(&tmplayout, mpf, figi); for(isym = 0; isym < thsymbolset_size; isym++) { thsymsets_figure[isym][iset] = 0; } thsymsets_count[iset] = 0; for(li = LEGENDLIST.begin(); li != LEGENDLIST.end(); li++) { thsymsets_figure[li->idsym][iset] = li->idfig; thsymsets_count[iset]++; } } fprintf(mpf,"end;\n"); fclose(mpf); // run MP thbuffer com, wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); chdir(thtmp.get_dir_name()); // vypise kodovania print_fonts_setup(); int retcode; #ifdef THWIN32 if (!thini.tex_env) { putenv("TEXMFCNF="); putenv("DVIPSHEADERS="); putenv("GFFONTS="); putenv("GLYPHFONTS="); putenv("MFBASES="); putenv("MFINPUTS="); putenv("MFPOOL="); #ifdef THMSVC putenv("MPINPUTS=../mpost;."); #else putenv("MPINPUTS="); #endif putenv("MPMEMS="); putenv("MPPOOL="); putenv("MPSUPPORT="); putenv("PKFONTS="); putenv("PSHEADERS="); putenv("T1FONTS="); putenv("T1INPUTS="); putenv("T42FONTS="); putenv("TEXCONFIG="); putenv("TEXDOCS="); putenv("TEXFONTMAPS="); putenv("TEXFONTS="); putenv("TEXFORMATS="); putenv("TEXINPUTS="); putenv("TEXMFDBS="); putenv("TEXMFINI="); putenv("TEXPICTS="); putenv("TEXPKS="); putenv("TEXPOOL="); putenv("TEXPSHEADERS="); putenv("TEXSOURCES="); putenv("TFMFONTS="); putenv("TTFONTS="); putenv("VFFONTS="); putenv("WEB2C="); } #endif // exportuje com = "\""; com += thini.get_path_mpost(); com += "\" "; com += thini.get_opt_mpost(); // com += " --interaction nonstopmode data.mp"; com += " data.mp"; #ifdef THDEBUG thprintf("running metapost\n"); #endif retcode = system(com.get_buffer()); thsymbolset_log_log_file("data.log", "####################### metapost log file ########################\n", "#################### end of metapost log file ####################\n",true); if (retcode != EXIT_SUCCESS) { chdir(wdir.get_buffer()); ththrow(("metapost exit code -- %d", retcode)) } thconvert_new(); chdir(wdir.get_buffer()); ofstream hf ("symbols.xhtml"); hf << "\n"; hf << "Therion symbols\n\n"; hf << "\n\n\n"; for(iset = 0; iset < thsymsets_size; iset++) { if (thsymsets_count[iset] > 0) { hf << "\n"; } } hf << "\n"; unsigned sx, fx; char fname[100]; converted_data svgpict; double a,b,c,d; for(isym = 0; isym < thsymbolset_size; isym++) { if(thsymsets_order[isym] > 0) { sx = thsymsets_order[isym]; hf << "\n\n"; fx = 0; for(iset = 0; iset < thsymsets_size; iset++) { fx += thsymsets_figure[sx][iset]; } if (fx > 0) { for(iset = 0; iset < thsymsets_size; iset++) { if (thsymsets_count[iset] > 0) { fx = thsymsets_figure[sx][iset]; if (fx > 0) { sprintf(fname, "%s/data.%d", thtmp.get_dir_name(),fx); parse_eps(fname,"",0,0,a,b,c,d,svgpict); hf << "\n"; } else { hf << "\n"; } } } } else { sprintf(fname, "%s/data.%d", thtmp.get_dir_name(),thsymsets_figure[sx][thsymsets_size]); parse_eps(fname,"",0,0,a,b,c,d,svgpict); hf << "\n"; } hf << "\n"; } } hf << "
Symbol set" << thsymsets[iset] << "
" << thsymsets_comment[sx].c_str() << "\n"; svgpict.print_svg(hf); hf << ""; svgpict.print_svg(hf); hf << "
\n"; hf << "" << endl; hf.close(); } void thsymbolset::export_mp_symbol_options(FILE * mpf, int sym_id) { if ((sym_id >= 0) && (this->color[sym_id].defined)) { fprintf(mpf,"drawoptions(withcolor (%.6f,%.6f,%.6f));\n", this->color[sym_id].R, this->color[sym_id].G, this->color[sym_id].B); } else { fprintf(mpf,"drawoptions();\n"); } } void thsymbolset::export_mp_symbol_options(thexception * x, int sym_id) { if ((sym_id >= 0) && (this->color[sym_id].defined)) { x->appspf("drawoptions(withcolor (%.6f,%.6f,%.6f));\n", this->color[sym_id].R, this->color[sym_id].G, this->color[sym_id].B); } else { x->appspf("drawoptions();\n"); } } bool thsymbolset::is_assigned(int symbol) { if (symbol < SYMX_) return this->assigned[symbol]; if (symbol > SYMX_) { int id = 0; int cid = thsymbolset__get_group(symbol,id++); while (cid >= 0) { if (this->assigned[cid]) return true; cid = thsymbolset__get_group(symbol,id++); } } return false; } therion-5.4.1/thsymbolset.h000066400000000000000000000062501307545355600157370ustar00rootroot00000000000000/** * @file thsymbolset.h * Symbol set class. */ /* Copyright (C) 2003 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thsymbolset_h #define thsymbolset_h #include "thsymbolsetlist.h" #include "thlayoutclr.h" #include /** * Symbol set class. */ struct thsymbolset { bool assigned[thsymbolset_size], ///< definovane symboly used[thsymbolset_size]; ///< pouzite symboly thlayout_color color[thsymbolset_size]; ///< Symbol colors. bool group_symbols; ///< Ci zgrupuje podobne symboly alebo nie. thsymbolset(); /** * Vrati macro a zaragistruje ho ako pouzite. */ const char * get_mp_macro(int id); /** * Return whether symbol is assigned. */ bool is_assigned(int symbol); /** * Do MP suboru zapise mapsymbol() makro. */ void export_symbol_defaults(FILE * mpf, const char * symset); /** * Do MP suboru zapise mapsymbol() makro + zmeni hidden value. */ void export_symbol_assign(FILE * mpf, int sym_id, const char * symset); /** * Skryje symbol. */ void export_symbol_hide(FILE * mpf, int sym_id); /** * Zobrazi symbol. */ void export_symbol_show(FILE * mpf, int sym_id); /** * Set symbol color. */ void export_symbol_color(FILE * mpf, int sym_id, thlayout_color * clr); /** * Do MP suboru zapise mapsymbol() makro + zmeni hidden value. */ void export_symbol_assign_group(FILE * mpf, int sym_id, const char * symset); /** * Skryje symbol. */ void export_symbol_hide_group(FILE * mpf, int sym_id); /** * Zobrazi symbol. */ void export_symbol_show_group(FILE * mpf, int sym_id); /** * Set symbol color. */ void export_symbol_color_group(FILE * mpf, int sym_id, thlayout_color * clr); /** * Exportuje znackovy kluc do pdfka. */ void export_pdf(class thlayout * layout, FILE * mpf, unsigned & sfig); /** * Export symbol options to metapost. */ void export_mp_symbol_options(FILE * mpf, int sym_id); void export_mp_symbol_options(class thexception * x, int sym_id); }; /** * Vrati ID z popisu classu a symbolu. */ int thsymbolset__get_id(const char * symclass, const char * symbol); /** * Vrati ID itemu z groupy. */ int thsymbolset__get_group(int group_id, int cid); /** * Export all symbols. */ void export_all_symbols(); #endif therion-5.4.1/thsymbolsetfont.txt000066400000000000000000000021441307545355600172140ustar00rootroot00000000000000CHAR CODE SYMBOL ! 33 airdraught " 34 airdraught_summer # 35 airdraught_winter $ 36 anastomosis % 37 anchor & 38 aragonite ' 39 archeomaterial ( 40 bedrock ) 41 blocks * 42 breakdownchoke + 43 bridge , 44 camp - 45 cavepearl . 46 clay / 47 claychoke 0 48 claytree 1 49 continuation 2 50 crystal 3 51 curtain 4 52 debris 5 53 dig 6 54 disk 7 55 entrance 8 56 fixedladder 9 57 flowstone : 58 flowstonechoke ; 59 flute < 60 gradient = 61 guano > 62 gypsum ? 63 gypsumflower @ 64 helictite A 65 ice B 66 icepillar C 67 icestalactite D 68 icestalagmite E 69 karren F 70 lowend G 71 moonmilk H 72 narrowend I 73 noequipment J 74 paleomaterial K 75 pebbles L 76 pillar M 77 popcorn N 78 raft O 79 raftcone P 80 rimstonedam Q 81 rimstonepool R 82 root S 83 rope T 84 ropeladder U 85 sand V 86 scallop W 87 sink X 88 snow Y 89 sodastraw Z 90 spring [ 91 stalactite \ 92 stalagmite ] 93 station ^ 94 station_fixed _ 95 station_natural ` 96 station_painted a 97 station_temporary b 98 steps c 99 traverse d 100 vegetabledebris e 101 wallcalcite f 102 water g 103 waterflow_intermittent h 104 waterflow_paleo i 105 waterflow_permanent therion-5.4.1/thsymbolsetlist.pl000077500000000000000000000073211307545355600170220ustar00rootroot00000000000000#!/usr/bin/perl open(I,"mpost/thTrans.mp"); while () { if (/^\s*(\S+)\s+([plas]{1}[a-z_]+)/) { $SYMHASH{$2} = ""; } } close(I); open(I,"thsymbolsetfont.txt"); while () { if (/^\s*(\S+)\s+(\S+)\s+([a-z_]+)/) { $FNTHASH{"p_$3"} = $2; } } close(I); $SYMHASH{a_} = "noassign hidden"; $SYMHASH{a_u} = ""; $SYMHASH{a_zzz} = "noassign hidden"; $SYMHASH{l_border_invisible} = "hidden"; $SYMHASH{l_wall_invisible} = "hidden"; # ??? $SYMHASH{l_survey} = "noassign"; $SYMHASH{l_undefined} = "noassign"; $SYMHASH{l_label} = "noassign"; $SYMHASH{l_rope} = "noassign"; $SYMHASH{l_u} = ""; $SYMHASH{l_} = "noassign hidden"; $SYMHASH{l_zzz} = "noassign hidden"; $SYMHASH{p_undefined} = "noassign"; $SYMHASH{p_section} = "noassign"; $SYMHASH{p_label} = "noassign"; $SYMHASH{p_remark} = "noassign"; $SYMHASH{p_mapconnection} = "noassign"; $SYMHASH{p_stationname} = "noassign"; $SYMHASH{p_date} = "noassign"; $SYMHASH{p_altitude} = "noassign"; $SYMHASH{p_wallaltitude} = "noassign"; $SYMHASH{p_height_positive} = "noassign"; $SYMHASH{p_height_negative} = "noassign"; $SYMHASH{p_height_unsigned} = "noassign"; $SYMHASH{p_passageheight_positive} = "noassign"; $SYMHASH{p_passageheight_negative} = "noassign"; $SYMHASH{p_passageheight_both} = "noassign"; $SYMHASH{p_passageheight_unsigned} = "noassign"; $SYMHASH{p_surfacestation} = "noassign"; $SYMHASH{p_cavestation} = "noassign"; $SYMHASH{p_flag_entrance} = "noassign hidden"; $SYMHASH{p_flag_spring} = "noassign hidden"; $SYMHASH{p_flag_sink} = "noassign hidden"; $SYMHASH{p_flag_doline} = "noassign hidden"; $SYMHASH{p_flag_airdraught} = "noassign hidden"; $SYMHASH{p_flag_continuation} = "noassign hidden"; $SYMHASH{p_flag_dig} = "noassign hidden"; $SYMHASH{p_flag_arch} = "noassign hidden"; $SYMHASH{p_flag_overhang} = "noassign hidden"; $SYMHASH{p_station} = "hidden"; $SYMHASH{p_u} = ""; $SYMHASH{p_} = "noassign hidden"; $SYMHASH{p_zzz} = "noassign hidden"; $SYMHASH{s_} = "noassign hidden"; $SYMHASH{s_zzz} = "noassign hidden"; $SYMHASH{x_} = "noassign hidden"; $SYMHASH{x_all} = "hidden"; $SYMHASH{x_ice} = "hidden"; $SYMHASH{x_sediments} = "hidden"; $SYMHASH{x_centerline} = "hidden"; $SYMHASH{x_water} = "hidden"; $SYMHASH{x_speleothems} = "hidden"; $SYMHASH{x_passagefills} = "hidden"; $SYMHASH{x_equipment} = "hidden"; $SYMHASH{x_sections} = "hidden"; $SYMHASH{x_text} = "hidden"; $SYMHASH{x_surfacecenterline} = "noassign hidden"; $SYMHASH{x_cavecenterline} = "noassign hidden"; $SYMHASH{x_line_wall} = "hidden"; $SYMHASH{x_line_border} = "hidden"; $SYMHASH{x_line_waterflow} = "hidden"; $SYMHASH{x_line_survey} = "hidden"; $SYMHASH{x_point_waterflow} = "hidden"; $SYMHASH{x_point_station} = "hidden"; $SYMHASH{x_point_flag} = "hidden"; $SYMHASH{x_point_height} = "hidden"; $SYMHASH{x_point_passageheight} = "hidden"; $SYMHASH{x_point_airdraught} = "hidden"; $i = 0; foreach $k (sort keys(%SYMHASH)) { $TK .= " SYM" . uc($k). " = $i,\n"; $TS .= " \"SYM" . uc($k). "\",\n"; $MP .= " \"$k\",\n"; $EX .= ($SYMHASH{$k} =~ /noassign/ ? " false,\n" : " true,\n"); $HN .= ($SYMHASH{$k} =~ /hidden/ ? " true,\n" : " false,\n"); $FC .= ($FNTHASH{$k} =~ /\S+/ ? " $FNTHASH{$k},\n" : " 0,\n"); $i++; } open(O,">thsymbolsetlist.h"); print O < #include #include #include #include #include #include #include #include #include #include #include "thtexfonts.h" #include "thtexenc.cxx" #include "thpdfdbg.h" #include "thinit.h" #include "thpdfdata.h" #ifndef NOTHERION #include "thbuffer.h" thbuffer thtexfontsbuff; #endif using namespace std; list FONTS; typedef list unistr; encodings_new::encodings_new () { v_fon.resize(134); // v_fon.resize(127); for (int i = 0; i < 33; i++) { v_fon[i] = 0; } for (int i = 33; i < 127; i++) { // printable ASCII v_fon[i] = i; m_fon[i] = i; } v_fon[127] = 0xFB00; m_fon[0xFB00] = 127; // ff v_fon[128] = 0xFB01; m_fon[0xFB01] = 128; // fi v_fon[129] = 0xFB02; m_fon[0xFB02] = 129; // fl v_fon[130] = 0xFB03; m_fon[0xFB03] = 130; // ffi v_fon[131] = 0xFB04; m_fon[0xFB04] = 131; // ffl v_fon[132] = 0x2013; m_fon[0x2013] = 132; // en dash v_fon[133] = 0x2014; m_fon[0x2014] = 133; // em dash i_fon = 0; NFSS = 0; t1_convert = 1; } int encodings_new::get_enc_pos (int ch) { if (m_fon.find(ch) == m_fon.end()) { if (i_fon < 33) { v_fon[i_fon] = ch; m_fon[ch] = i_fon; i_fon++; } else { v_fon.push_back(ch); m_fon[ch] = v_fon.size()-1; } } //cout << "==FP== " << m_fon[style][ch] << endl; return m_fon[ch]; }; void encodings_new::write_enc_files() { if (NFSS==0) return; thprintf("generating TeX metrics ... "); char fc[10]; string style[5] = {"rm", "it", "bf", "ss", "si"}; string s; ofstream H ("thfonts.map"); // delete previous file, we will append to it below if (!H) therror(("could not write font mapping data for pdfTeX\n")); H.close(); int fcount = get_enc_count(); for (int j = 0; j < fcount; j++) { sprintf(fc,"%02d", j); string fname_enc = string("th_enc")+fc+".enc"; ofstream F(fname_enc.c_str()); if (!F) therror(("could not write encoding file\n")); F << "% LIGKERN uni002D uni002D =: uni2013 ; uni2013 uni002D =: uni2014 ;" << endl; F << "% LIGKERN uni0066 uni0066 =: uniFB00 ; uni0066 uni006C =: uniFB02 ; uni0066 uni0069 =: uniFB01 ; uniFB00 uni0069 =: uniFB03 ; uniFB00 uni006C =: uniFB04 ;" << endl; F << "/" << fname_enc << "[" << endl; for (int k=0; k < 256; k++) { //cout << ccount << "** i:" << i << " j:" << j << " k:" << k << " " << v_fon[i][k] << endl; if ((v_fon.size() <= ((unsigned) 256*j + k)) || (v_fon[256*j + k] == 0)) F << "/.notdef" << endl; else F << "/uni" << setw(4) << setfill('0') << hex << noshowbase << uppercase << v_fon[256*j + k] << endl; } F << "] def" << endl; F.close(); for (int i=0; i<5; i++) { string fname_tfm = "th"+style[i]+fc; // convention used also in tex2uni // we don't use -fliga to turn ligatures on, beacause between // subsequent runs (metapost, pdftex) the meaning of ligatures // positioned at the end of the encoding would change // if more characters are present at the second run // -- a few ligatures are initialised in the constructor string type1 = (t1_convert==1) ? " " : " --no-type1 "; if (system(("\"" + string(thini.get_path_otftotfm()) + "\" -e " + fname_enc + " -fkern --no-default-ligkern --no-virtual --name " + fname_tfm + // " -fkern --no-default-ligkern --name " + fname_tfm + // type1 + " --warn-missing "+otf_file[i]+" > thotftfm.tmp").c_str()) > 0) type1 + otf_file[i]+" > thotftfm.tmp").c_str()) > 0) therror((("can't generate TFM file from "+otf_file[i]+" (LCDF typetools not installed?)").c_str())); ifstream G ("thotftfm.tmp"); if (!G) therror(("could not read font mapping data\n")); while (G) { getline(G,s); if (s.find("<") != string::npos) break; } if (s.substr(s.size()-3,3)=="otf" || s.substr(s.size()-3,3)=="OTF") { s.replace(s.rfind("<"), 1, "<<"); // OTF fonts must be fully embedded } G.close(); ofstream H ("thfonts.map", ios::app); if (!H) therror(("could not write font mapping data for pdfTeX\n")); H << "\\pdfmapline{+" << s << "}" << endl; H.close(); } } thprintf("done\n"); } int encodings_new::get_enc_count () { return v_fon.size() / 256 + 1; } int encodings_new::get_uni (int f, int ch) { return v_fon[256*f + ch]; } encodings_new ENC_NEW; // returns the index of given encoding (as used in predefined encoding arrays) // or -1 if such an encoding is not known int get_enc_id(const char * enc) { for (int i=0; i=192 && c<=223) { j = 64*(c-192); c = s[++i]; j += c-128; t.push_back(j); } else if (c>=224 && c<=239) { j = 4096*(c-224); c = s[++i]; j += 64*(c-128); c = s[++i]; j += c-128; t.push_back(j); } else therror (("Invalid utf-8 string!")); // we don't support higher // unicode characters } return t; } // converts utf8 to 2B Unicode in a special format for pdfTeX string utf2texoctal(string str) { unistr s = utf2uni(str); string t; char ch[10]; // t = "\\ne\\376\\ne\\377"; unsigned char c; for (unistr::iterator I = s.begin(); I != s.end(); I++) { c = (*I) / 256; sprintf(ch,"%o",c); t = t + "\\ne\\" + (string) ch; c = (*I) % 256; sprintf(ch,"%o",c); t = t + "\\ne\\" + (string) ch; } return t; } // converts utf8 to 2B Unicode in a special format for pdfTeX string utf2texhex(string str) { unistr s = utf2uni(str); string t; char ch[10]; unsigned char c; for (unistr::iterator I = s.begin(); I != s.end(); I++) { c = (*I) / 256; sprintf(ch,"%02x",c); t += (string) ch; c = (*I) % 256; sprintf(ch,"%02x",c); t += (string) ch; } return t; } string replace_all(string s, string f, string r) { size_t found = s.find(f); while(found != string::npos) { s.replace(found, f.length(), r); found = s.find(f); } return s; } // easier to use brute force than to link regex on all platforms :( string select_lang(string s, string lang) { size_t i,j; if (s.find(""); if (i != string::npos) { // precise match i = s.find(">",i); j = s.find(""); if (i != string::npos) { // match main language part i = s.find(">",i); j = s.find("",i); j = s.find("") != string::npos) align = 1; else if (str.find("") != string::npos) align = 1; else if (str.find("") != string::npos) align = 0; else if (str.find("") != string::npos) align = 2; if (str.find("
") != string::npos) is_multiline = true; str = replace_all(str,"
",""); str = replace_all(str,"",""); str = replace_all(str,"",""); str = replace_all(str,"",""); str = replace_all(str,"
","\x1B\x1"); // \e not accepted in VC++ str = replace_all(str,"","\x1B\x2"); str = replace_all(str,"","\x1B\x3"); str = replace_all(str,"","\x1B\x4"); str = replace_all(str,"","\x1B\x5"); str = replace_all(str,"","\x1B\x6"); str = replace_all(str,"","\x1B\x7"); str = replace_all(str,"","\x1B\x8"); str = replace_all(str,"","\x1B\x9"); // An attempt to implement hyperlinks, unsuccessful though: // ! pdfTeX error (ext4): link annotations cannot be inside an XForm. // \xxxx //// links // size_t i=-1,j; // while((i = str.find("",i); // if (j == string::npos) therror(("No closing '>' in definition")); // str = str.replace(j,1,"\x1B\x0B"); // str = str.replace(i,6,"\x1B\x0A"); // } // str = replace_all(str,"","\x1B\x0C"); //// endlinks if (is_multiline) { T << "\\vbox{\\halign{"; if (align > 0) T << "\\hfil"; T << "#"; if (align < 2) T << "\\hfil"; T << "\\cr"; } unistr s = utf2uni(str); for (unistr::iterator I = s.begin(); I != s.end(); I++) { wc = *I; if (wc == 32 || wc == 9) { // space requires special treatment T << "\\ "; // (it's not included in TeX fonts) continue; // so encodings search doesn't help } else if (wc == 27) { // escaped chars (special formatting) wc = *(++I); switch (wc) { case 0x1: if (rtl) T << "\\endR"; T << "\\cr"; if (rtl) T << "\\beginR"; switch (laststyle) { case 1: T << "\\rm"; break; case 2: T << "\\it"; break; case 3: T << "\\bf"; break; case 4: T << "\\ss"; break; case 5: T << "\\si"; break; } SELFONT; T << " "; break; case 0x2: T << "\\thinspace "; break; case 0x3: T << "\\rm "; laststyle = 1; SELFONT; break; case 0x4: T << "\\it "; laststyle = 2; SELFONT; break; case 0x5: T << "\\bf "; laststyle = 3; SELFONT; break; case 0x6: T << "\\ss "; laststyle = 4; SELFONT; break; case 0x7: T << "\\si "; laststyle = 5; SELFONT; break; case 0x8: T << "\\global\\TeXXeTstate=1\\beginR "; rtl = true; break; case 0x9: T << "\\endR "; rtl = false; break; //// links // case 0xA: if (link_active) T << "\\pdfendlink "; // T << "\\pdfstartlink attr {/Border [0 0 0]} goto name {"; // link_active = true; // break; // case 0xB: T << "}"; break; // case 0xC: if (link_active) { // T << "\\pdfendlink "; // link_active = false; // } // break; //// endlinks } continue; } if (ENC_NEW.NFSS==0) { if (wc==39) wc = 8217; // apostrophe -> quoteright; bool local_exit = false; bool local_repeat = true; bool is_accent = false; bool bot_accent = false; int bc = 0, alt = 0; // base char, alternative char while(local_repeat) { local_repeat = false; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) { int j = J->id; for (int i=0; i<256; i++) { if (texenc[i][j] == wc || (is_accent && (texenc[i][j] == alt))) { if (j != lastenc) { // do a better optimization // of the font changes in a string T << "\\thf" << u2str(j+1);//<< "{}"; lastenc = j; } if (!is_accent) { // some characters require special treatment in TeX // if (i==0 || i==127 || i==123 || i==125 || i==36 || i==38 || // i==10 || i==35 || i==95 || i==126 || i==13 || i==94 || // i==92 || i==37 || i < 32) { //original T << "\\char" << i << " "; T << "\\char" << i << " " << (remove_kerning ? "{}" : ""); // } // else { // T << char(i); //// if (bot_accent) T << " "; // } } else if (!bot_accent) { T << "\\accent" << i << " "; } else { T << "\\fixaccent{" << i << "}"; } local_exit = true; local_repeat = false; } if (local_exit) break; } if (local_exit) break; } if (!local_exit && !is_accent) { // current character is not included in any of the used encodings; // let's try to find an approximation based on Unicode // decomposition table int a = 0, b = max_base - 1, i, j; while (a<=b) { i = (int) (a+b)/2; j = unibase[i][0]; if (j == wc) { bc = unibase[i][1]; wc = unibase[i][2]; alt = -1; bot_accent = false; switch (wc) { case 768: alt = 96; break; // grave case 769: alt = 180; break; // acute case 770: alt = 710; break; // circumflex case 771: alt = 732; break; // tilde case 772: alt = 175; break; // macron case 774: alt = 728; break; // breve case 775: alt = 729; break; // dot above case 776: alt = 168; break; // diaeresis case 778: alt = 730; break; // ring above case 779: alt = 733; break; // double acute -- hungarian case 780: alt = 711; break; // caron case 807: alt = 184; bot_accent = true; break; // cedilla case 808: alt = 731; bot_accent = true; break; // ogonek } if (!bot_accent && bc == 105) bc = 305; // dotless i correction if (!bot_accent && bc == 106) bc = 63166; // dotless j correction is_accent = true; local_repeat = true; break; } if (j > wc) b = i - 1; else a = i + 1; } } else if (is_accent) { wc = bc; is_accent = false; local_repeat = true; local_exit = false; } } if (!local_exit) // we didn't find anything to display // it would be possible to add here various characters mapped // by plain TeX macros to mathematical fonts (backslash &c.) // This would require to make math fonts scalable with the \size[.] macro T << "."; } else { // NFSS == 1 int k = ENC_NEW.get_enc_pos(wc); int f_ind = k / 256; if (f_ind != lastenc) { T << "\\thf" << u2str(f_ind+1); lastenc = f_ind; } T << "\\char" << k % 256 << " " << (remove_kerning ? "{}" : ""); } } // endfor if (is_multiline) { T << "\\cr}}"; } T << "\\mainfont{}"; if (rtl) T << "\\endR "; // change from the links experiment return T.str(); } int tex2uni(string font, int ch) { if (ENC_NEW.NFSS==0) { int id = -1; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) if (J->rm == font || J->it == font || J->ss == font || J->si == font || J->bf == font) { id = J->id; break; } //assert(id != -1); ch %= 256; if (ch < 0) ch += 256; // if string is based on signed char if (id == -1) { ostringstream s; s << "can't map character 0x" << std::uppercase << std::setfill('0') << std::setw(2) << std::hex << ch << " in font '" << font << "' to unicode"; therror((s.str().c_str())); } return texenc[ch][id]; } else { // NFSS string f_ind = font.substr(4,2); // basic check that we have a number assert(f_ind[0] >= '0' && f_ind[0] <= '9' && f_ind[1] >= '0' && f_ind[1] <= '9'); if (ch < 0) ch += 256; // if string is based on signed char return ENC_NEW.get_uni(atoi(f_ind.c_str()),ch); } } //const char * utf2tex (char * s) { // string t = utf2tex(string(s)); // return t.c_str(); //} #ifndef NOTHERION const char * utf2tex (const char * s, bool b) { string t = utf2tex(string(s),b); thtexfontsbuff.strcpy(t.c_str()); return thtexfontsbuff.get_buffer(); } #endif // For simlicity we suppose that all characters which are set by TeX macros // are included in the first encoding specified. This concerns especially // page numbers, labels, and scalebar legend. Therefore we switch to \thfa // after each size/style change void print_fonts_setup() { ofstream P("th_enc.tex"); // included also in MetaPost if(!P) therror(("Can't write file th_enc.tex")); P << "\\def\\rms{\\rm}" << endl; P << "\\def\\its{\\it}" << endl; P << "\\def\\bfs{\\bf}" << endl; P << "\\def\\sss{\\ss}" << endl; P << "\\def\\sis{\\si}" << endl; if (ENC_NEW.NFSS==0) { P << "\\def\\fixaccent#1#2 {{\\setbox0\\hbox{#2}\\ifdim\\ht0=1ex\\accent#1 #2%" << endl; P << " \\else\\ooalign{\\unhbox0\\crcr\\hidewidth\\char#1\\hidewidth}\\fi}}" << endl; P << "\\def\\size[#1]{%" << endl; P << " \\let\\prevstyle\\laststyle" << endl; P << " \\baselineskip#1pt" << endl; P << " \\baselineskip=1.2\\baselineskip" << endl; string firstfont = "\\thf" + u2str(FONTS.begin()->id+1); P << " \\def\\rm{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->rm << " at#1pt"; P << "\\let\\laststyle\\rms" << firstfont << "}%" << endl; P << " \\def\\it{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->it << " at#1pt"; P << "\\let\\laststyle\\its" << firstfont << "}%" << endl; P << " \\def\\bf{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->bf << " at#1pt"; P << "\\let\\laststyle\\bfs" << firstfont << "}%" << endl; P << " \\def\\ss{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->ss << " at#1pt"; P << "\\let\\laststyle\\sss" << firstfont << "}%" << endl; P << " \\def\\si{"; for (list::iterator J = FONTS.begin(); J != FONTS.end(); J++) P << "\\font\\thf" << u2str(J->id+1) << "=" << J->si << " at#1pt"; P << "\\let\\laststyle\\sis" << firstfont << "}%" << endl; P << " \\prevstyle" << endl; P << "}"; P << "\\let\\laststyle\\rms" << endl; P << "\\size[10]\\ss" << endl; P << "\\def\\mainfont{" << firstfont << "}" << endl; } else { string styledef[5] = {"rm", "it", "bf", "ss", "si"}; P << "\\def\\size[#1]{%" << endl; P << " \\let\\prevstyle\\laststyle" << endl; P << " \\baselineskip#1pt" << endl; P << " \\baselineskip=1.2\\baselineskip" << endl; for (int j=0; j<5; j++) { P << " \\def\\" << styledef[j] << "{"; for (int i = 0; i < ENC_NEW.get_enc_count(); i++) P << "\\font\\thf" << u2str(i+1) << "=th" << styledef[j] << setw(2) << setfill('0') << i << " at#1pt"; P << "\\let\\laststyle\\" << styledef[j] << "s\\thfa}%" << endl; } P << " \\prevstyle" << endl; P << "}"; P << "\\let\\laststyle\\rms" << endl; P << "\\size[10]\\ss" << endl; P << "\\def\\mainfont{\\thfa}" << endl; } P << "\\ifx\\TeXXeTstate\\undefined" << endl; P << " \\let\\beginR\\relax" << endl; P << " \\let\\endR\\relax" << endl; P << " \\def\\TeXXeTstate=#1{\\def\\blbost{}}" << endl; // for using \global\TeXXeTstate P << "\\fi" << endl; P.close(); } #ifdef NOTHERION #ifndef NOMAIN int main () { //cout << "xl2 " << get_enc_index("xl2") << endl; return(0); } #endif #endif // obsolete: // else if (wc == 60) { // special <.> string formatting // tmp = ""; // I++; // while (I != s.end() && (wc = *I) != 62 && wc < 128) { // tmp += char(wc); // I++; // } // if (tmp == "br") T << "\\cr "; // else if (tmp == "center" || tmp == "left" || tmp == "right") ; // else if (tmp == "thsp") T << "\\thinspace "; // else T << "?"; // if (I == s.end()) break; // incorrect input (no closing `>') // continue; // } therion-5.4.1/thtexfonts.h000066400000000000000000000036751307545355600156000ustar00rootroot00000000000000/* * Copyright (C) 2003 Martin Budaj * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtexfonts_h #define thtexfonts_h #include #include #include #include using namespace std; string select_lang(string s, string lang); struct fontrecord { int id; string rm,it,bf,ss,si; bool opt; }; extern list FONTS; int get_enc_id(const char* enc); void print_tex_encodings (void); void print_fonts_setup(void); void init_encodings(); string utf2texoctal(string s); string utf2texhex(string s); string utf2tex (string s, bool b=false); int tex2uni(string font, int ch); string replace_all(string s, string f, string r); struct encodings_new { private: vector v_fon; // tex - unicode map m_fon; // unicode - tex int i_fon; // last position public: int NFSS, t1_convert; string otf_file[5]; encodings_new(); int get_enc_pos(int ch); int get_enc_count(); int get_uni (int f, int ch); void write_enc_files(); }; extern encodings_new ENC_NEW; #ifndef NOTHERION const char * utf2tex (const char * s, bool b = false); #endif #endif therion-5.4.1/thtf.cxx000066400000000000000000000026541307545355600147060ustar00rootroot00000000000000/** * @file thtf.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtf.h" #include "thexception.h" #include "thparse.h" #include thtf::~thtf() {} void thtf::parse_scale(char * sstr) { int sv; thparse_double(sv,this->sfactor,sstr); if (sv != TT_SV_NUMBER) ththrow(("invalid scale factor -- %s", sstr)) if (this->sfactor == 0.0) ththrow(("invalid scale factor -- 0.0")) } double thtf::transform(double value) { return value * this->sfactor * this->ufactor; } int thtf::get_units() { return this->units; } therion-5.4.1/thtf.h000066400000000000000000000032411307545355600143240ustar00rootroot00000000000000/** * @file thtf.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtf_h #define thtf_h /** * Transformation class. * * Parent class for all units transformations. */ class thtf { public: double ufactor, ///< Units factor. sfactor; ///< Scale factor. int units; public: /** * Standard constructor. */ thtf() : ufactor(1.0), sfactor(1.0) {} virtual ~thtf(); /** * Parse units factor. */ virtual void parse_units(char * ustr) = 0; /** * Return units. */ virtual int get_units(); /** * Parse scale factor. */ void parse_scale(char * sstr); /** * Make units transformation on number. */ virtual double transform(double value); }; #endif therion-5.4.1/thtfangle.cxx000066400000000000000000000036521307545355600157140ustar00rootroot00000000000000/** * @file thtfangle.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thparse.h" #include "thtfangle.h" #include "thexception.h" #include "thinfnan.h" #include thtfangle::thtfangle() { this->units = TT_TFU_DEG; this->allow_percentage = false; } void thtfangle::parse_units(char * ustr) { this->units = thmatch_token(ustr, thtt_tfunits_angle); switch (this->units) { case TT_TFU_DEG: case TT_TFU_DMS: this->ufactor = 1.0; break; case TT_TFU_MIN: this->ufactor = 0.0166666666666666666666666666666666666666666; break; case TT_TFU_GRAD: this->ufactor = 0.9; break; case TT_TFU_PERC: if (this->allow_percentage) { this->ufactor = 1.0; break; } case TT_TFU_UNKNOWN_ANGLE: ththrow(("unknown angle unit -- %s", ustr)) break; } } double thtfangle::transform(double value) { switch (this->units) { case TT_TFU_PERC: return (atan(thtf::transform(value) / 100.0) / THPI * 180.0); break; default: return thtf::transform(value); } } therion-5.4.1/thtfangle.h000066400000000000000000000034621307545355600153400ustar00rootroot00000000000000/** * @file thtfangle.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtfangle_h #define thtfangle_h #include "thtf.h" #include "thparse.h" enum {TT_TFU_DEG, TT_TFU_DMS, TT_TFU_GRAD, TT_TFU_MIN, TT_TFU_PERC, TT_TFU_UNKNOWN_ANGLE}; static const thstok thtt_tfunits_angle[] = { {"deg", TT_TFU_DEG}, {"degree", TT_TFU_DEG}, {"degrees", TT_TFU_DEG}, {"grad", TT_TFU_GRAD}, {"grads", TT_TFU_GRAD}, {"mil",TT_TFU_GRAD}, {"mils", TT_TFU_GRAD}, {"min", TT_TFU_MIN}, {"minute", TT_TFU_MIN}, {"minutes", TT_TFU_MIN}, {"percent", TT_TFU_PERC}, {"percentage", TT_TFU_PERC}, {NULL, TT_TFU_UNKNOWN_ANGLE}, }; /** * Angle transformation class. */ class thtfangle : public thtf { public: bool allow_percentage; /** * Parse units factor. */ thtfangle(); virtual void parse_units(char * ustr); virtual double transform(double value); }; #endif therion-5.4.1/thtflength.cxx000066400000000000000000000032311307545355600161000ustar00rootroot00000000000000/** * @file thtflength.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtflength.h" #include "thexception.h" thtflength::thtflength() { this->units = TT_TFU_M; } void thtflength::parse_units(char * ustr) { this->units = thmatch_token(ustr, thtt_tfunits_length); switch (this->units) { case TT_TFU_CM: this->ufactor = 0.01; break; case TT_TFU_MM: this->ufactor = 0.001; break; case TT_TFU_FT: this->ufactor = 0.3048; break; case TT_TFU_IN: this->ufactor = 0.0254; break; case TT_TFU_M: this->ufactor = 1.0; break; case TT_TFU_YD: this->ufactor = 0.9144; break; case TT_TFU_UNKNOWN_LENGTH: ththrow(("unknown length unit -- %s", ustr)) break; } } therion-5.4.1/thtflength.h000066400000000000000000000040211307545355600155230ustar00rootroot00000000000000/** * @file thtflength.h * Units transformation class. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtflength_h #define thtflength_h #include "thtf.h" #include "thparse.h" enum {TT_TFU_YD, TT_TFU_FT, TT_TFU_IN, TT_TFU_M, TT_TFU_CM, TT_TFU_MM, TT_TFU_UNKNOWN_LENGTH}; static const thstok thtt_tfunits_length[] = { {"centimeter", TT_TFU_CM}, {"centimeters", TT_TFU_CM}, {"centimetre", TT_TFU_CM}, {"centimetres", TT_TFU_CM}, {"cm", TT_TFU_CM}, {"feet", TT_TFU_FT}, {"feets", TT_TFU_FT}, {"ft", TT_TFU_FT}, {"in", TT_TFU_IN}, {"inch", TT_TFU_IN}, {"inches", TT_TFU_IN}, {"m", TT_TFU_M}, {"meter", TT_TFU_M}, {"meters", TT_TFU_M}, {"metres", TT_TFU_M}, {"metric", TT_TFU_M}, {"millimeter", TT_TFU_MM}, {"millimeters", TT_TFU_MM}, {"millimetre", TT_TFU_MM}, {"millimetres", TT_TFU_MM}, {"mm", TT_TFU_MM}, {"yard", TT_TFU_YD}, {"yards", TT_TFU_YD}, {"yd", TT_TFU_YD}, {NULL, TT_TFU_UNKNOWN_LENGTH}, }; /** * Length transformation class. */ class thtflength : public thtf { public: thtflength(); /** * Parse units factor. */ virtual void parse_units(char * ustr); }; #endif therion-5.4.1/thtfpwf.cxx000066400000000000000000000110731307545355600154160ustar00rootroot00000000000000/** * @file thtfpwf.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtfpwf.h" #include "thexception.h" #include "thinfnan.h" #include "thparse.h" void thtfpwf::clear() { if (this->valn > 0) { delete [] this->valp; this->valn = 0; this->valp = NULL; } } thtfpwf::~thtfpwf() { this->clear(); } int thtfpwfxy_comp(const void * x1, const void * x2) { thtfpwfxy * p1 = (thtfpwfxy *) x1; thtfpwfxy * p2 = (thtfpwfxy *) x2; if (p1->x < p2->x) return -1; if (p1->x == p2->x) return 0; else return 1; } void thtfpwf::set(size_t nv, double * pv) { size_t idx; this->clear(); if (nv > 0) { this->valp = new thtfpwfxy [nv]; this->valn = nv; for(idx = 0; idx < nv; idx++) { this->valp[idx].x = *pv; pv++; this->valp[idx].y = *pv; pv++; } // now let's sort them qsort(this->valp,this->valn,sizeof(thtfpwfxy),thtfpwfxy_comp); // for(idx = 0; idx < nv; idx++) { // printf("PWF SETTING: %f -> %f\n", this->valp[idx].x, this->valp[idx].y); // } } } void thtfpwf::parse(int nfact, char ** sfact) { int sv; switch (nfact) { case 1: thparse_double(sv, this->b, *sfact); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", *sfact)) break; case 2: thparse_double(sv, this->b, sfact[0]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", sfact[0])) thparse_double(sv, this->a, sfact[1]); if (sv != TT_SV_NUMBER) ththrow(("invalid number -- %s", sfact[1])) break; default: if ((nfact > 2) && ((nfact % 2) == 0)) { double * coefs = new double [nfact]; int cidx,spv; for(cidx = 0; cidx < nfact; cidx++) { thparse_double(spv,coefs[cidx],sfact[cidx]); if (spv == TT_SV_UNKNOWN) ththrow(("invalid number -- %s", sfact[cidx])) } this->set(nfact / 2, coefs); delete [] coefs; } else ththrow(("invalid number of transformation constants")) } if (this->a == 0.0) ththrow(("invalid scale factor -- %f", this->a)) } double thtfpwf::evaluate(double value) { switch (valn) { case 0: return (value - b) * a; case 1: return this->valp->y; default: // let's do a binary search int a = 0, b = (int) this->valn - 1, c, r, ret = -1; while (a <= b) { c = unsigned((a + b) / 2); if (this->valp[c].x < value) r = -1; else { if (c == 0) r = 0; else { if (this->valp[c - 1].x <= value) r = 0; else r = 1; } } if (r == 0) { ret = c; break; } if (r < 0) a = c + 1; else b = c - 1; } switch (ret) { case -1: return this->valp[this->valn - 1].y; case 0: return this->valp->y; default: double x1 = this->valp[ret - 1].x; double y1 = this->valp[ret - 1].y; double x2 = this->valp[ret].x; double y2 = this->valp[ret].y; if (thisnan(y1) || thisnan(y2)) return thnan; if ((thisinf(y1) != 0) || (thisinf(y2) != 0)) { if ((thisinf(y1) + thisinf(y2)) == 0) return thnan; if ((thisinf(y1) + thisinf(y2)) > 0) return thinf; if ((thisinf(y1) + thisinf(y2)) < 0) return -thinf; } if (x1 == x2) return y1; return (y1 + (value - x1) * (y2 - y1) / (x2 - x1)); } } } thtfpwfxy * thtfpwf::get_values() { return this->valp; } size_t thtfpwf::get_size() { return this->valn; } therion-5.4.1/thtfpwf.h000066400000000000000000000037711307545355600150510ustar00rootroot00000000000000/** * @file thtfpwf.h * Piece wise function. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtfpwf_h #define thtfpwf_h #include #include /** * Piecewise function element. */ struct thtfpwfxy { double x, y; }; /** * Piecewise function class. * * If two elements are defined, makes makes (x - b) * a transformation. */ class thtfpwf { double a, ///< Multiplier. b; ///< Addition. size_t valn; thtfpwfxy * valp; void clear(); ///< Clear the value array. public: /** * Standard constructor. */ thtfpwf() : a(1.0), b(0.0), valn(0), valp(NULL) {} /** * Standard destructor. */ virtual ~thtfpwf(); /** * Parse function. */ virtual void parse(int nfact, char ** sfact); /** * Make units transformation on number. */ double evaluate(double value); /** * Set function values. */ void set(size_t nv, double * pv); /** * Return function values. */ thtfpwfxy * get_values(); /** * Return number of function values. */ size_t get_size(); }; #endif therion-5.4.1/thtmpdir.cxx000066400000000000000000000137061307545355600155740ustar00rootroot00000000000000/** * @file thtmpdir.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thtmpdir.h" #include "therion.h" #include "thinit.h" #include #include #ifndef THMSVC #include #include #else #include #define mkdir _mkdir #define S_ISDIR(v) (((v) | _S_IFDIR) != 0) #endif #include #include #include #include #ifdef THWIN32 #include #define snprintf _snprintf #define getpid _getpid #define THPATHSEPARATOR "\\" #else #define THPATHSEPARATOR "/" #endif thtmpdir::thtmpdir() { this->exist = false; this->tried = false; this->name.strcpy("."); #ifdef THDEBUG this->delete_all = false; this->debug = true; #else this->delete_all = true; this->debug = false; #endif } thtmpdir::~thtmpdir() { this->remove(); } void thtmpdir::create() { if ((!this->exist) && (!this->tried)) { thbuffer dir_path; this->tmp_remove_script = thini.tmp_remove_script.get_buffer(); #ifndef THMSVC #ifdef THDEBUG // the debugging temp directory dir_path = "thTMPDIR"; #else if (strlen(thini.tmp_path.get_buffer()) > 0) { dir_path.strcpy(thini.tmp_path.get_buffer()); } else { char dn[16]; char *envtmp; // release temp directory envtmp = getenv("TEMP"); if (envtmp != NULL) { dir_path = envtmp; } else { envtmp = getenv("TMP"); if (envtmp != NULL) { dir_path = envtmp; } else { #ifdef THWIN32 dir_path = "."; #else dir_path = "/tmp"; #endif } } dir_path += THPATHSEPARATOR; if (this->debug) { thbuffer wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); wdir += "/thTMPDIR"; dir_path = wdir; //dir_path += "thTMPDIR"; } else { dir_path += "th"; snprintf(&(dn[0]),16,"%d",getpid()); dir_path += &(dn[0]); } } #endif #else thbuffer wdir; wdir.guarantee(1024); getcwd(wdir.get_buffer(),1024); wdir += "\\thTMPDIR"; dir_path = wdir; #endif this->tried = true; #ifdef THWIN32 if (mkdir(dir_path) != 0) { #else if (mkdir(dir_path,0046750) != 0) { #endif struct #ifdef THMSVC _stat #else stat #endif buf; #ifdef THMSVC _stat #else stat #endif (dir_path,&buf); if ((errno == EEXIST) && (S_ISDIR(buf.st_mode))) { if (!this->debug) { thwarning(("temporary directory already exists")); } this->exist = true; this->name = dir_path; } else { therror(("can't create temporary directory -- %s", dir_path.get_buffer())); } } else { this->exist = true; this->name = dir_path; } } } void thtmpdir::remove() { if (this->exist && this->delete_all) { // remove directory contents if (strlen(this->tmp_remove_script.get_buffer()) > 0) { thbuffer tmpfname; tmpfname = this->tmp_remove_script.get_buffer(); tmpfname += " "; tmpfname += this->name; system(tmpfname.get_buffer()); #ifndef THMSVC DIR *tmpdir = opendir(this->name); if (tmpdir != NULL) { thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) closedir(tmpdir); } else { this->name = "."; this->tried = false; this->exist = false; } } else { #ifdef THMACOSX thbuffer tmpfname; tmpfname = "rm -f -R "; tmpfname += this->name; system(tmpfname.get_buffer()); DIR *tmpdir = opendir(this->name); if (tmpdir != NULL) { thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) closedir(tmpdir); } else { this->name = "."; this->tried = false; this->exist = false; } #else DIR *tmpdir = opendir(this->name); struct dirent *tmpf; thbuffer tmpfname; if (tmpdir != NULL) { tmpf = readdir(tmpdir); while (tmpf != NULL) { tmpfname = this->name; tmpfname += THPATHSEPARATOR; tmpfname += tmpf->d_name; unlink(tmpfname); tmpf = readdir(tmpdir); } closedir(tmpdir); } // remove directory if (rmdir(this->name) != 0) thwarning(("error deleting temporary directory -- %s",this->name.get_buffer())) else { this->name = "."; this->tried = false; this->exist = false; } #endif #endif } } } const char* thtmpdir::get_dir_name() { if (!this->exist) this->create(); return(this->name); } const char* thtmpdir::get_file_name(const char *fname) { if (!this->exist) this->create(); this->file_name = this->name; this->file_name += THPATHSEPARATOR; this->file_name += fname; return(this->file_name); } void thtmpdir::set_delete(bool delete_id) { this->delete_all = delete_id; } bool thtmpdir::get_delete() { return(this->delete_all); } void thtmpdir::delete_on() { this->delete_all = true; } void thtmpdir::delete_off() { this->delete_all = false; } thtmpdir thtmp; therion-5.4.1/thtmpdir.h000066400000000000000000000045071307545355600152200ustar00rootroot00000000000000/** * @file thtmpdir.h * Temporary directory module. */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtmpdir_h #define thtmpdir_h #include "thbuffer.h" /** * Temporary directory module. * * Creates and remove temporary directory. */ class thtmpdir { public: bool exist; ///< ID whether temp directory exist. bool tried; ///< ID, if we've tried to create temp directory. bool delete_all; ///< ID whether to delete temporary directory. bool debug; ///< ID, whether debugging mode is on. thbuffer name, ///< Name of temp dir. file_name, ///< Name of temporary file. tmp_remove_script; /** * Creates temporary directory. */ void create(); /** * Removes temporary directory. */ void remove(); /** * Standard constructor. */ thtmpdir(); /** * Standard destructor. */ ~thtmpdir(); /** * Retrieve temporary directory name. */ const char* get_dir_name(); /** * Form valid path from temporary directory name and given file name. */ const char* get_file_name(const char *fname); /** * Set deleting state. */ void set_delete(bool delete_id); /** * Retrieve deleting state. */ bool get_delete(); /** * Turn deleting temp directory on. */ void delete_on(); /** * Turn deleting temp directory off. */ void delete_off(); }; extern thtmpdir thtmp; #endif therion-5.4.1/thtrans.cxx000066400000000000000000000534231307545355600154240ustar00rootroot00000000000000/** * @file thtrans.cxx * Transformation structures. */ /* Copyright (C) 2006 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include #include "thtrans.h" #include "thdatabase.h" void thvec2::reset() { this->m_x = 0.0; this->m_y = 0.0; } void thmat2::reset() { this->m_xx = 1.0; this->m_xy = 0.0; this->m_yx = 0.0; this->m_yy = 1.0; } thlintrans::thlintrans() { this->reset(); } void thlintrans::reset() { this->m_scale = 1.0; this->m_rot = 0.0; this->m_initpts.clear(); this->m_shift.reset(); this->m_bmat.reset(); this->m_fmat.reset(); } thvec2 thvec2::operator += (const thvec2 & v) { this->m_x += v.m_x; this->m_y += v.m_y; return (*this); } thvec2 thvec2::operator -= (const thvec2 & v) { this->m_x -= v.m_x; this->m_y -= v.m_y; return (*this); } thvec2 thvec2::operator *= (const double & c) { this->m_x *= c; this->m_y *= c; return (*this); } thvec2 thvec2::operator /= (const double & c) { this->m_x /= c; this->m_y /= c; return (*this); } void thvec2::minimize(thvec2 v) { if (this->m_x > v.m_x) this->m_x = v.m_x; if (this->m_y > v.m_y) this->m_y = v.m_y; } void thvec2::maximize(thvec2 v) { if (this->m_x < v.m_x) this->m_x = v.m_x; if (this->m_y < v.m_y) this->m_y = v.m_y; } thmat2 thmat2::operator *= (const double & c) { this->m_xx *= c; this->m_xy *= c; this->m_yx *= c; this->m_yy *= c; return (*this); } thmat2 thmat2::operator /= (const double & c) { this->m_xx /= c; this->m_xy /= c; this->m_yx /= c; this->m_yy /= c; return (*this); } thmat2 thmat2::inverse() { double d; d = (this->m_xx * this->m_yy - this->m_xy * this->m_yx); return thmat2(this->m_yy / d, -1.0 * this->m_xy / d, -1.0 * this->m_yx / d, this->m_xx / d); } thvec2 operator - (const thvec2 & v) { return thvec2( - v.m_x, - v.m_y); } thvec2 operator + (const thvec2 & v1, const thvec2 & v2) { return thvec2(v1.m_x + v2.m_x, v1.m_y + v2.m_y); } thvec2 operator - (const thvec2 & v1, const thvec2 & v2) { return thvec2(v1.m_x - v2.m_x, v1.m_y - v2.m_y); } double operator * (const thvec2 & v1, const thvec2 & v2) { return (v1.m_x * v2.m_x + v1.m_y * v2.m_y); } double operator ^ (const thvec2 & v1, const thvec2 & v2) { return (v1.m_x * v2.m_y - v1.m_y * v2.m_x); } thvec2 operator * (const double & c, const thvec2 & v) { return thvec2(c * v.m_x, c * v.m_y); } thvec2 operator * (const thvec2 & v, const double & c) { return thvec2(v.m_x * c, v.m_y * c); } thvec2 operator / (const thvec2 & v, const double & c) { return thvec2(v.m_x / c, v.m_y / c); } thvec2 operator * (const thmat2 & m, const thvec2 & v) { return thvec2(m.m_xx * v.m_x + m.m_xy * v.m_y, m.m_yx * v.m_x + m.m_yy * v.m_y); } thmat2 operator * (const double & c, const thmat2 & m) { return thmat2(c * m.m_xx, c * m.m_xy, c * m.m_yx, c * m.m_yy); } thmat2 operator * (const thmat2 & m, const double & c) { return thmat2(c * m.m_xx, c * m.m_xy, c * m.m_yx, c * m.m_yy); } thmat2 operator / (const thmat2 & m, const double & c) { return thmat2(m.m_xx / c, m.m_xy / c, m.m_yx / c, m.m_yy / c); } void thvec2::normalize() { double l = this->length(); if (l > 0.0) *this /= this->length(); } thline2::thline2(thvec2 from, thvec2 to) { thvec2 norm; norm = to - from; norm.normalize(); this->m_a = - norm.m_y; this->m_b = norm.m_x; this->m_c = - (this->m_a * from.m_x + this->m_b * from.m_y); } thvec2::thvec2( thline2 & l1, thline2 & l2 ) { // | m_xx m_xy | * | x | = | -c1 | // | m_yx m_yy | | y | | -c2 | thmat2 m( l1.m_a, l1.m_b, l2.m_a, l2.m_b ); thmat2 m_1 = m.inverse(); m_x = - ( m_1.m_xx * l1.m_c + m_1.m_xy * l2.m_c ); m_y = - ( m_1.m_yx * l1.m_c + m_1.m_yy * l2.m_c ); } double thline2::eval(thvec2 p) { return (p.m_x * this->m_a + p.m_y * this->m_b + this->m_c); } void thmat3::reset() { m_xx = 1.0; m_xy = 0.0; m_xz = 0.0; m_yx = 0.0; m_yy = 1.0; m_yz = 0.0; m_zx = 0.0; m_zy = 0.0; m_zz = 1.0; } thmat3 thmat3::inverse() { thmat3 minor; minor.m_xx = m_yy * m_zz - m_yz * m_zy; minor.m_xy = m_yx * m_zz - m_yz * m_zx; minor.m_xz = m_yx * m_zy - m_yy * m_zx; minor.m_yx = m_xy * m_zz - m_xz * m_zy; minor.m_yy = m_xx * m_zz - m_xz * m_zx; minor.m_yz = m_xx * m_zy - m_xy * m_zx; minor.m_zx = m_xy * m_yz - m_xz * m_yy; minor.m_zy = m_xx * m_yz - m_xz * m_yx; minor.m_zz = m_xx * m_yy - m_xy * m_yx; double det = m_xx * minor.m_xx - m_xy * minor.m_xy + m_xz * minor.m_xz; return thmat3( minor.m_xx/det, -minor.m_yx/det, minor.m_zx/det, -minor.m_xy/det, minor.m_yy/det, -minor.m_zy/det, minor.m_xz/det, -minor.m_yz/det, minor.m_zz/det ); } void thlintrans::init(thmat2 A, thvec2 b) { this->m_fmat = A; this->m_shift = b; } void thlintrans::insert_point(thvec2 src, thvec2 dst) { this->m_initpts.push_back(thlintrans_pt(src, dst)); } void thlintrans::init_points() { // Initialize transformation using least squares. this->m_fmat.reset(); this->m_bmat.reset(); this->m_shift.reset(); this->m_scale = 1.0; this->m_rot = 0.0; size_t npt = this->m_initpts.size(); thlintrans_pt_list::iterator ipt; if (npt == 0) return; if (npt == 1) { ipt = this->m_initpts.begin(); this->m_shift = ipt->m_tgt - ipt->m_src; return; } // 1. najdeme transformaciu targetov for (ipt = this->m_initpts.begin(); ipt != this->m_initpts.end(); ipt++) { this->m_shift += ipt->m_tgt; } this->m_shift /= double(npt); double sumXx, sumYy, sumYx, sumXy, sumxx, sumyy, X, Y, a, b; sumXx = 0.0; sumYy = 0.0; sumYx = 0.0; sumXy = 0.0; sumxx = 0.0; sumyy = 0.0; for (ipt = this->m_initpts.begin(); ipt != this->m_initpts.end(); ipt++) { X = ipt->m_tgt.m_x - this->m_shift.m_x; Y = ipt->m_tgt.m_y - this->m_shift.m_y; sumXx += X * ipt->m_src.m_x; sumYy += Y * ipt->m_src.m_y; sumXy += X * ipt->m_src.m_y; sumYx += Y * ipt->m_src.m_x; sumxx += ipt->m_src.m_x * ipt->m_src.m_x; sumyy += ipt->m_src.m_y * ipt->m_src.m_y; } a = (sumXx + sumYy) / (sumxx + sumyy); b = (sumYx - sumXy) / (sumxx + sumyy); if (((sumxx + sumyy) > 0) && (hypot(a,b) > 0.0)) { this->m_fmat.m_xx = a; this->m_fmat.m_xy = -b; this->m_fmat.m_yx = b; this->m_fmat.m_yy = a; this->m_scale = hypot(a,b); this->m_rot = - atan2(b,a) / 3.14159265359 * 180.0; } } double thvec2::orientation() { double o = atan2(this->m_x, this->m_y) / 3.14159265359 * 180.0; if (o < 0.0) o += 360.0; return o; } void thlintrans::init(thvec2 src, thvec2 dst) { this->m_fmat.reset(); this->m_scale = 1.0; this->m_rot = 0.0; this->m_shift = dst - src; } void thlintrans::init(thvec2 srcF, thvec2 srcT, thvec2 dstF, thvec2 dstT) { thvec2 srcV, dstV; srcV = srcT - srcF; dstV = dstT - dstF; double r1, r2, rr, ss; r1 = atan2(srcV.m_y, srcV.m_x); r2 = atan2(dstV.m_y, dstV.m_x); rr = r2 - r1; ss = dstV.length() / srcV.length(); this->m_fmat = ss * thmat2(cos(rr), -sin(rr), sin(rr), cos(rr)); this->m_shift = dstF - this->m_fmat * srcF; this->m_scale = ss; this->m_rot = rr / 3.14159265358 * 180.0; } void thlintrans::init_backward() { this->m_bmat = this->m_fmat.inverse(); } thvec2 thlintrans::forward(thvec2 src) { return (this->m_fmat * src + this->m_shift); } thvec2 thlintrans::backward(thvec2 dst) { return (this->m_bmat * (dst - this->m_shift)); } double thvec2::length() { return hypot(this->m_x, this->m_y); } void thmorphtrans::insert_point(thvec2 src, thvec2 dst) { this->m_initpts.push_back(thlintrans_pt(src, dst - src)); } thvec2 thmorphtrans::forward(thvec2 src) { thlintrans_pt_list::iterator i; thvec2 sumv; double sumw(0.0), d, w; for(i = this->m_initpts.begin(); i != this->m_initpts.end(); i++) { d = (i->m_src - src).length(); if (d > 0.0) { w = 1.0 / (d * d); sumw += w; sumv += w * i->m_tgt; } else { return (src + i->m_tgt); } } sumv /= sumw; sumv += src; return sumv; } thvec2 thmorphtrans::backward(thvec2 dst, thvec2 ini) { #define EPS 0.01 #define FF(v) (dst - this->forward(v)).length() double F, a, b, d; thvec2 x(ini), dd; size_t counter(0); do { F = FF(x); if (F < EPS) break; a = (FF(x + thvec2(EPS, 0.0)) - F) / EPS; b = (FF(x + thvec2(0.0, EPS)) - F) / EPS; d = a * a + b * b; if (d == 0.0) break; dd = thvec2(a * F / d, b * F / d); x -= dd; } while (counter++ < 10); return x; } struct thm2t_point { thvec2 m_src, m_dst; bool m_used; long m_id; thm2t_point() : m_used(false), m_id(-1) {} thm2t_point(thvec2 src, thvec2 dst, long id) : m_src(src), m_dst(dst), m_used(false), m_id(id) {} }; typedef thm2t_point * thm2t_point_ptr; typedef std::map thm2t_point_ptr_map; typedef std::list thm2t_point_list; struct thm2t_line { long m_f, m_t; thm2t_line(long f, long t) { if (f < t) { this->m_f = f; this->m_t = t; } else { this->m_t = f; this->m_f = t; } } }; typedef thm2t_line * thm2t_line_ptr; bool operator < (const struct thm2t_line & l1, const struct thm2t_line & l2) { if (l1.m_f < l2.m_f) return true; if (l1.m_f > l2.m_f) return false; if (l1.m_t < l2.m_t) return true; return false; } typedef std::list thm2t_line_list; typedef std::map thm2t_line_map; struct thm2t_zoom_point { thvec2 m_src; double m_dst; long m_id; thm2t_zoom_point(thvec2 src, double dst, long id) : m_src(src), m_dst(dst), m_id(id) {} }; typedef std::list thm2t_zoom_point_list; struct thm2t_feature { bool m_single; thm2t_point_ptr m_fp, m_tp; thline2 m_ln, m_lnf, m_lnt; thlintrans m_lintrans; thlinzoomtrans m_zoomtrans; double calc_dist(thvec2 src); }; double thm2t_feature::calc_dist(thvec2 src) { double lnfd, lntd; if (this->m_single) { return (src - this->m_fp->m_src).length(); } else { lnfd = this->m_lnf.eval(src); lntd = this->m_lnt.eval(src); if (lnfd < 0) return (src - this->m_fp->m_src).length(); else if (lntd < 0) return (src - this->m_tp->m_src).length(); else return fabs(this->m_ln.eval(src)); } } typedef std::list thm2t_feature_list; struct thmorph2trans_members { thm2t_point_list m_points; thm2t_point_ptr_map m_point_map; thm2t_line_list m_lines; thm2t_line_map m_line_map; thm2t_point_ptr get_point(long id); thm2t_zoom_point_list m_zoom_points; thm2t_feature_list m_features; }; thm2t_point_ptr thmorph2trans_members::get_point(long id) { thm2t_point_ptr_map::iterator ii; ii = this->m_point_map.find(id); if (ii == this->m_point_map.end()) return NULL; else return ii->second; } thmorph2trans::thmorph2trans() { this->m = new thmorph2trans_members; this->reset(); } thmorph2trans::~thmorph2trans() { delete this->m; } void thmorph2trans::reset() { this->m_eps = 0.01; this->m->m_lines.clear(); this->m->m_points.clear(); this->m->m_point_map.clear(); this->m->m_zoom_points.clear(); this->m->m_features.clear(); } void thmorph2trans::insert_point(thvec2 src, thvec2 dst, long id) { thm2t_point_list::iterator i; i = this->m->m_points.insert(this->m->m_points.end(), thm2t_point(src, dst, id)); this->m->m_point_map[id] = &(*i); } void thmorph2trans::insert_zoom_point(thvec2 src, double dst, long id) { this->m->m_zoom_points.push_back(thm2t_zoom_point(src, dst, id)); } void thmorph2trans::insert_line(long from, long to) { thm2t_line tmp(from, to); thm2t_line_map::iterator mi; if (from == to) return; if ((this->m->get_point(from) == NULL) || (this->m->get_point(to) == NULL)) return; mi = this->m->m_line_map.find(tmp); if (mi == this->m->m_line_map.end()) { thm2t_line_ptr lp = &(*this->m->m_lines.insert(this->m->m_lines.end(), thm2t_line(from, to))); this->m->m_line_map[tmp] = lp; } } void thmorph2trans::init(double eps) { this->m->m_features.clear(); this->m_eps = eps; // initialize features thm2t_line_list::iterator iln; for(iln = this->m->m_lines.begin(); iln != this->m->m_lines.end(); iln++) { thm2t_feature tmpf; tmpf.m_fp = this->m->get_point(iln->m_f); tmpf.m_tp = this->m->get_point(iln->m_t); if ((tmpf.m_fp != NULL) && (tmpf.m_tp != NULL)) { if (((tmpf.m_fp->m_src - tmpf.m_tp->m_src).length() > 0.0) && ((tmpf.m_fp->m_dst - tmpf.m_tp->m_dst).length() > 0.0)) { tmpf.m_single = false; tmpf.m_ln = thline2(tmpf.m_fp->m_src, tmpf.m_tp->m_src); tmpf.m_lnf = thline2(tmpf.m_fp->m_src, tmpf.m_fp->m_src + thvec2(-tmpf.m_ln.m_a, -tmpf.m_ln.m_b)); tmpf.m_lnt = thline2(tmpf.m_tp->m_src, tmpf.m_tp->m_src + thvec2(tmpf.m_ln.m_a, tmpf.m_ln.m_b)); tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_tp->m_src, tmpf.m_fp->m_dst, tmpf.m_tp->m_dst); tmpf.m_fp->m_used = true; tmpf.m_tp->m_used = true; this->m->m_features.push_back(tmpf); } } } thm2t_point_list::iterator ipt, ipt2; for(ipt = this->m->m_points.begin(); ipt != this->m->m_points.end(); ipt++) { thm2t_feature tmpf; tmpf.m_fp = &(*ipt); tmpf.m_tp = NULL; if (!tmpf.m_fp->m_used) { // find nearest TP double md, cd; md = -1.0; for(ipt2 = this->m->m_points.begin(); ipt2 != this->m->m_points.end(); ipt2++) { if (ipt->m_id != ipt2->m_id) { cd = (ipt->m_dst - ipt2->m_dst).length(); if ((cd > 0.0) && ((ipt->m_src - ipt2->m_src).length() > 0.0)) { if (md < 0.0) { md = cd; tmpf.m_tp = &(*ipt2); } else if (cd < md) { md = cd; tmpf.m_tp = &(*ipt2); } } } } if (tmpf.m_tp == NULL) { tmpf.m_single = true; tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_fp->m_dst); } else { tmpf.m_single = false; tmpf.m_ln = thline2(tmpf.m_fp->m_src, tmpf.m_tp->m_src); tmpf.m_lnf = thline2(tmpf.m_fp->m_src, tmpf.m_fp->m_src + thvec2(-tmpf.m_ln.m_a, -tmpf.m_ln.m_b)); tmpf.m_lnt = thline2(tmpf.m_tp->m_src, tmpf.m_tp->m_src + thvec2(tmpf.m_ln.m_a, tmpf.m_ln.m_b)); tmpf.m_lintrans.init(tmpf.m_fp->m_src, tmpf.m_tp->m_src, tmpf.m_fp->m_dst, tmpf.m_tp->m_dst); tmpf.m_fp->m_used = true; tmpf.m_tp->m_used = true; } this->m->m_features.push_back(tmpf); } } // initialize zoom transformations thm2t_feature_list::iterator i; thm2t_zoom_point_list::iterator izp; for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { if (i->m_tp != NULL) i->m_zoomtrans.init_points(i->m_fp->m_dst, i->m_tp->m_dst); else i->m_zoomtrans.init_points(i->m_fp->m_dst, i->m_fp->m_dst); } for(izp = this->m->m_zoom_points.begin(); izp != this->m->m_zoom_points.end(); izp++) { for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { if (izp->m_id == i->m_fp->m_id) i->m_zoomtrans.init_from(this->forward(izp->m_src), izp->m_dst); if (i->m_tp != NULL) { if (izp->m_id == i->m_tp->m_id) i->m_zoomtrans.init_to(this->forward(izp->m_src), izp->m_dst); } } } for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { i->m_zoomtrans.init(); } } thvec2 thmorph2trans::forward(thvec2 src) { thm2t_feature_list::iterator i; thvec2 sumv, cdst; double sumw(0.0), d, w; for(i = this->m->m_features.begin(); i != this->m->m_features.end(); i++) { d = i->calc_dist(src); cdst = i->m_zoomtrans.forward(i->m_lintrans.forward(src)); if (d > 0.0) { w = 1.0 / (d * d * d * d); sumw += w; sumv += w * cdst; } else { return cdst; } } sumv /= sumw; return sumv; } thvec2 thmorph2trans::backward(thvec2 dst, thvec2 ini) { #define EPS 0.01 #define FF(v) (dst - this->forward(v)).length() double F, a, b, d; thvec2 x(ini), dd; size_t counter(0); do { F = FF(x); if (F < EPS) break; a = (FF(x + thvec2(EPS, 0.0)) - F) / EPS; b = (FF(x + thvec2(0.0, EPS)) - F) / EPS; d = a * a + b * b; if (d == 0.0) break; dd = thvec2(a * F / d, b * F / d); x -= dd; } while (counter++ < 10); return x; } void thmorph2trans::insert_lines_from_db() { long nst = (long) thdb.db1d.station_vec.size(); thdb1d_tree_node * nodes = thdb.db1d.get_tree_nodes(), * cnode; thdb1d_tree_arrow * carrow; // station by station and insert shots thm2t_point_list::iterator ipt; thdataleg * lg; long fid, tid; for(ipt = this->m->m_points.begin(); ipt != this->m->m_points.end(); ipt++) { if ((ipt->m_id > 0) && (ipt->m_id < nst)) { cnode = &(nodes[ipt->m_id - 1]); carrow = cnode->first_arrow; while (carrow != NULL) { lg = carrow->leg->leg; fid = thdb.db1d.station_vec[lg->from.id - 1].uid; tid = thdb.db1d.station_vec[lg->to.id - 1].uid; this->insert_line(fid, tid); carrow = carrow->next_arrow; } } } } thlinzoomtrans::thlinzoomtrans() { this->m_valid = false; this->m_single = true; this->m_fl = 0.0; this->m_fr = 0.0; this->m_tl = 0.0; this->m_tr = 0.0; this->m_flc = 0; this->m_frc = 0; this->m_tlc = 0; this->m_trc = 0; } void thlinzoomtrans::init_points(thvec2 from, thvec2 to) { this->m_from = from; this->m_to = to; thvec2 vec; vec = to - from; this->m_line_l = vec.length(); if (this->m_line_l > 0.0) { this->m_line = thline2(from, to); this->m_line_from = thline2(from, from + thvec2(vec.m_y, -vec.m_x)); this->m_orient_from = thvec2(vec.m_y, -vec.m_x).orientation(); this->m_line_to = thline2(to, to + thvec2(-vec.m_y, vec.m_x)); this->m_orient_to = thvec2(-vec.m_y, vec.m_x).orientation(); this->m_single = false; } else { this->m_single = true; } } void thlinzoomtrans::init_from(thvec2 src, double dst) { double l; l = (src - this->m_from).length(); if (l > 0.0) { if (this->m_single) { this->m_flc++; this->m_fl += (dst / l); } else { if (this->m_line.eval(src) > 0) { this->m_flc++; this->m_fl += (dst / l); } else { this->m_frc++; this->m_fr += (dst / l); } } } } void thlinzoomtrans::init_to(thvec2 src, double dst) { double l; l = (src - this->m_to).length(); if (l > 0.0) { if (this->m_single) { this->m_flc++; this->m_fl += (dst / l); } else { if (this->m_line.eval(src) > 0) { this->m_tlc++; this->m_tl += (dst / l); } else { this->m_trc++; this->m_tr += (dst / l); } } } } void thlinzoomtrans::init() { if ((this->m_flc > 0) || (this->m_frc > 0) || (this->m_tlc > 0) || (this->m_trc > 0)) { this->m_valid = true; if (this->m_flc > 0) this->m_fl /= double(this->m_flc); else this->m_fl = 1.0; if (this->m_frc > 0) this->m_fr /= double(this->m_frc); else this->m_fr = 1.0; if (this->m_tlc > 0) this->m_tl /= double(this->m_tlc); else this->m_tl = 1.0; if (this->m_trc > 0) this->m_tr /= double(this->m_trc); else this->m_tr = 1.0; //if ((this->m_flc == 0) && (this->m_frc == 0)) { // this->m_fl = 1.0; // this->m_fr = 1.0; //} else if ((this->m_flc == 0) && (this->m_frc > 0)) { // this->m_fl = this->m_fr; //} else if ((this->m_flc > 0) && (this->m_frc == 0)) { // this->m_fr = this->m_fl; //} //if ((this->m_tlc == 0) && (this->m_trc == 0)) { // this->m_tl = 1.0; // this->m_tr = 1.0; //} else if ((this->m_tlc == 0) && (this->m_trc > 0)) { // this->m_tl = this->m_tr; //} else if ((this->m_tlc > 0) && (this->m_trc == 0)) { // this->m_tr = this->m_tl; //} } } thvec2 thlinzoomtrans::forward(thvec2 src) { if (this->m_valid) { thvec2 vec; double vo; if (this->m_single) { vec = src - this->m_from; vec *= this->m_fl; return (src + vec); } else { double dl, dlf, dlt; dl = this->m_line.eval(src); dlf = this->m_line_from.eval(src); dlt = this->m_line_to.eval(src); if (dlf < 0.0) { vec = src - this->m_from; vo = vec.orientation() - this->m_orient_from; if (vo < 0.0) vo += 360.0; vo /= 180.0; vec *= (vo * this->m_fl + (1.0 - vo) * this->m_fr); return this->m_from + vec; } else if (dlt < 0.0) { vec = src - this->m_to; vo = this->m_orient_to - vec.orientation() - 180.0; if (vo < 0.0) vo += 360.0; vo /= 180.0; vec *= (vo * this->m_tl + (1.0 - vo) * this->m_tr); return this->m_to + vec; } else { thvec2 lp; double ln; ln = this->m_line.m_a * this->m_line.m_a + this->m_line.m_b * this->m_line.m_b; lp = thvec2(src.m_x - this->m_line.m_a * dl / ln, src.m_y - this->m_line.m_b * dl / ln); vo = this->m_line.eval(lp); vec = src - lp; vo = (lp - this->m_from).length() / this->m_line_l; if (dl > 0) { vec *= (vo * this->m_tl + (1.0 - vo) * this->m_fl); } else { vec *= (vo * this->m_tr + (1.0 - vo) * this->m_fr); } return lp + vec; } } } else { return src; } } therion-5.4.1/thtrans.h000066400000000000000000000171631307545355600150520ustar00rootroot00000000000000/** * @file thtrans.h * Transformation structures. */ /* Copyright (C) 2006-2007 Stacho Mudrak, Marco Corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thtrans_2_h #define thtrans_2_h #include // sqrt #include "thinfnan.h" // NaN #include #include #include struct thline2; // forward declaration /** 2D vector * */ struct thvec2 { double m_x, m_y; //!< coordinates thvec2() : m_x(0.0), m_y(0.0) {} //!< default cstr thvec2(double x, double y) : m_x(x), m_y(y) {} //!< cstr thvec2( thline2 & l1, thline2 & l2 ); //!< intersection of two lines thvec2 operator += (const thvec2 & v); //!< vector addition thvec2 operator -= (const thvec2 & v); //!< vector difference thvec2 operator *= (const double & c); //!< multiplication by a scalar thvec2 operator /= (const double & c); //!< division by a scalar void minimize(thvec2 v); //!< min( this, v ) void maximize(thvec2 v); //!< max( this, v ) double length(); //!< |V| = sqrt( V * V ) double length2() const { return m_x*m_x + m_y*m_y; } //!< V * V double orientation(); //!< orientation in degrees void reset(); //!< V = 0 void normalize(); //!< V / |V| thvec2 orthogonal() { return thvec2( m_y, -m_x); } //!< V^ (anticlockwise orthogonal vector) bool is_nan() const { return thisnan(m_x) || thisnan(m_y); } }; /** 2 x 2 matrix with real coefficient *
 *       m_xx  m_xy
 *       m_yx  m_yy 
 * 
*/ struct thmat2 { double m_xx, m_xy, m_yx, m_yy; //!< matric coefficients thmat2() : m_xx(1.0), m_xy(0.0), m_yx(0.0), m_yy(1.0) {} //!< cstr thmat2(double xx, double xy, double yx, double yy) : m_xx(xx), m_xy(xy), m_yx(yx), m_yy(yy) {} thmat2 operator *= (const double & c); //!< multiplication by a scalar thmat2 operator /= (const double & c); //!< division by a scalar thmat2 inverse(); //!< inverse matrix double determinant() { return m_xx*m_yy - m_xy*m_yx; } //!< determinant double trace() { return m_xx + m_yy; } //!< trace void reset(); //!< M = Identity matrix }; /** line in the 2D plane, with equation *
 *     m_a * X + m_b * Y + m_c = 0
 * 
*/ struct thline2 { double m_a, m_b, m_c; //!< coefficients of the line thline2() : m_a(0.0), m_b(0.0), m_c(0.0) {} //!< cstr thline2(double a, double b, double c) : m_a(a), m_b(b), m_c(c) {} thline2(thvec2 from, thvec2 to); //!< cstr: line joining two vectors double eval(thvec2 p); //!< evalate the line eq. on the vector }; /** linear algebra operations */ thvec2 operator - (const thvec2 & v); // -V thvec2 operator + (const thvec2 & v1, const thvec2 & v2); // V1 + V2 thvec2 operator - (const thvec2 & v1, const thvec2 & v2); // V1 - V2 double operator * (const thvec2 & v1, const thvec2 & v2); // V1 * V2 double operator ^ (const thvec2 & v1, const thvec2 & v2); // V1 ^ V2 = V1 * (V2^) thvec2 operator * (const double & c, const thvec2 & v); // c * V1 thvec2 operator * (const thvec2 & v, const double & c); // V1 * c thvec2 operator / (const thvec2 & v, const double & c); // V1 / c thvec2 operator * (const thmat2 & m, const thvec2 & v); // M * V1 thmat2 operator * (const double & c, const thmat2 & m); // c * M thmat2 operator * (const thmat2 & m, const double & c); // M * c thmat2 operator / (const thmat2 & m, const double & c); // M / c /** * 3x3 matrix */ struct thmat3 { double m_xx, m_xy, m_xz; //!< first row double m_yx, m_yy, m_yz; //!< second row double m_zx, m_zy, m_zz; //!< second row /** default cstr: set the matrix to the identity */ thmat3() : m_xx(1.0), m_xy(0.0), m_xz(0.0) , m_yx(0.0), m_yy(1.0), m_yz(0.0) , m_zx(0.0), m_zy(0.0), m_zz(1.0) { } /** cstr with the nine matrix elements, row-wise */ thmat3(double xx, double xy, double xz, double yx, double yy, double yz, double zx, double zy, double zz) : m_xx(xx), m_xy(xy), m_xz(xz) , m_yx(yx), m_yy(yy), m_yz(yz) , m_zx(zx), m_zy(zy), m_zz(zz) { } /** set the matrix to the identity */ void reset(); /** compute the inverse matrix * @return the inverse matrix */ thmat3 inverse(); }; /** linear transformation point */ struct thlintrans_pt { thvec2 m_src; //!< point in the source domain thvec2 m_tgt; //!< point in the target domain thlintrans_pt() {} /** cstr */ thlintrans_pt(thvec2 src, thvec2 tgt) : m_src(src) , m_tgt(tgt) { } }; /** list of linear-transform points */ typedef std::list thlintrans_pt_list; /** * Linear transformation. Rotate, zoom, shift. */ struct thlintrans { thmat2 m_fmat; //!< forward matrix thmat2 m_bmat; //!< backward matrix thvec2 m_shift; double m_rot, m_scale; thlintrans_pt_list m_initpts; thlintrans(); void reset(); void init(thmat2 A, thvec2 b); void init(thvec2 src, thvec2 dst); void init(thvec2 srcX, thvec2 srcY, thvec2 dstX, thvec2 dstY); void insert_point(thvec2 src, thvec2 dst); void init_points(); void init_backward(); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst); }; /** * Linear zooming transformation. */ struct thlinzoomtrans { bool m_valid, m_single; thvec2 m_from, m_to; double m_fl, m_fr, m_tl, m_tr; int m_flc, m_frc, m_tlc, m_trc; thline2 m_line_from, m_line_to, m_line; double m_orient_from, m_orient_to, m_line_l; thlinzoomtrans(); void init_points(thvec2 from, thvec2 to); void init_from(thvec2 src, double dst); void init_to(thvec2 src, double dst); void init(); thvec2 forward(thvec2 src); }; /** * Morphing transformation. */ struct thmorphtrans { thlintrans_pt_list m_initpts; void reset(); void insert_point(thvec2 src, thvec2 dst); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst, thvec2 ini = thvec2(0,0)); }; /** * Advanced morphing transformation. */ struct thmorph2trans { struct thmorph2trans_members * m; double m_eps; thmorph2trans(); ~thmorph2trans(); void reset(); void insert_point(thvec2 src, thvec2 dst, long id); void insert_line(long from, long to); void insert_lines_from_db(); void insert_zoom_point(thvec2 src, double dst, long id); void init(double eps = 0.01); thvec2 forward(thvec2 src); thvec2 backward(thvec2 dst, thvec2 ini = thvec2(0,0)); }; #endif therion-5.4.1/thwarp.cxx000066400000000000000000000342751307545355600152520ustar00rootroot00000000000000/** * @file thexpsys.cxx */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thwarp.h" #include "thdb1d.h" #include "thscrap.h" #include "thtrans.h" #include "th2ddataobject.h" #include "thpoint.h" #include "thconfig.h" thwarp::~thwarp() {} thpic * thwarp::morph(thsketch * sketch, double scale) { this->m_sketch = sketch; return NULL; } void thwarp::self_delete() { delete this; } /** * Sketch station structure. */ struct thwarplinst { double x, y, tx, ty; thdb1ds * st; thwarplinst() : x(0.0), y(0.0), tx(0.0), ty(0.0), st(NULL) {} }; typedef std::list thwarplinst_list; thpic * thwarplin::morph(thsketch * sketch, double scale) { if (this->morphed && this->mpic.exists()) return &(this->mpic); if (!sketch->m_pic.exists()) return NULL; thwarplinst_list stations; thwarplinst tmpst; thdb2dcp * ccp; ccp = sketch->m_scrap->fcpp; while (ccp != NULL) { if ((ccp->point != NULL) && (ccp->st != NULL)) { tmpst.x = ccp->pt->x - sketch->m_x; tmpst.y = ccp->pt->y - sketch->m_y; tmpst.tx = ccp->tx + sketch->m_scrap->proj->rshift_x; tmpst.ty = ccp->ty + sketch->m_scrap->proj->rshift_y; tmpst.st = ccp->st; stations.push_back(tmpst); } ccp = ccp->nextcp; } if (stations.size() < 2) return NULL; this->morphed = true; // if linear transformation, use only two stations with maximal // distance on output if ((this->method == 0) && (stations.size() > 2)) { thwarplinst_list::iterator sti1, sti2; thwarplinst tmpst2; tmpst2.st = NULL; double maxdist, cdist; maxdist = 0.0; for(sti1 = stations.begin(); sti1 != stations.end(); sti1++) { sti2 = sti1; sti2++; while (sti2 != stations.end()) { cdist = thvec2(sti1->tx - sti2->tx, sti1->ty - sti2->ty).length(); if (cdist > maxdist) { tmpst = *sti1; tmpst2 = *sti2; maxdist = cdist; } sti2++; } } if (tmpst2.st != NULL) { stations.clear(); stations.push_back(tmpst); stations.push_back(tmpst2); } } thlintrans T1, T2, T3, TLIN; thwarplinst_list::iterator ii; // Calculate transformations. // T1 - shift // T2 - rotate from TLIN // T3 - scale and shift from TLIN const char * fn; size_t fnx, fnl; fn = sketch->m_pic.fname; fnl = strlen(sketch->m_pic.fname); for(fnx = 0; fnx < fnl; fnx++) { if (((sketch->m_pic.fname[fnx] == '/') || (sketch->m_pic.fname[fnx] == '\\')) && (fnx < fnl - 1)) { fn = &(sketch->m_pic.fname[fnx + 1]); } } if (thtext_inline) thprintf("\n"); thprintf("morphing %s ", fn); thtext_inline = true; for (ii = stations.begin(); ii != stations.end(); ii++) { T1.m_shift -= thvec2(ii->x, ii->y); } T1.m_shift /= double(stations.size()); T1.init_backward(); for (ii = stations.begin(); ii != stations.end(); ii++) { TLIN.insert_point(T1.forward(thvec2(ii->x, ii->y)), thvec2(ii->tx, ii->ty)); } TLIN.init_points(); // create T2 and T3 from TLIN T2.m_fmat = TLIN.m_fmat / TLIN.m_scale; T2.init_backward(); T3.m_fmat.reset(); T3.m_fmat *= TLIN.m_scale; T3.m_scale = TLIN.m_scale; T3.m_shift = TLIN.m_shift; T3.init_backward(); long mw, mh, x, y, yy,counter; thvec2 pmin, pmax, ptmp, mpic_origin; counter = 1; if (/*(stations.size() < 3) ||*/ (this->method == 0)) { pmin = pmax = T2.forward(T1.forward(thvec2(0.0, 0.0))); ptmp = T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), 0.0))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = T2.forward(T1.forward(thvec2(0.0, double(sketch->m_pic.height)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(sketch->m_pic.height)))); pmin.minimize(ptmp); pmax.maximize(ptmp); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (y = 0; y < mh; y++) { ptmp = T1.backward(T2.backward(mpic_origin + thvec2(double(x), double(y)))); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } } else if (this->method == 1) { thmorphtrans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty))); } pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x <= double(sketch->m_pic.width); x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y <= double(sketch->m_pic.height); y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start; start = T2.forward(T1.forward(thvec2(0.0, 0.0))); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (yy = 0; yy < mh; yy++) { y = yy - mh/2; if (y < 0) y += mh; start = TM.backward(mpic_origin + thvec2(double(x), double(y)), start); ptmp = T1.backward(T2.backward(start)); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } } else if (method == 2) { thmorph2trans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty)), ii->st->uid); } TM.insert_lines_from_db(); TM.init(); pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x <= double(sketch->m_pic.width); x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y <= double(sketch->m_pic.height); y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start, * ss(NULL); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); if (mh > 0) ss = new thvec2 [mh]; thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); start = T2.forward(T1.forward(thvec2(0.0, double(mh/2.0)))); this->mpic.rgba_init(mw, mh); for (x = 0; x < mw; x++) { for (y = 0; y < mh; y++) { start = TM.backward(mpic_origin + thvec2(double(x), double(y)), x > 0 ? ss[y] : start); ss[y] = start; ptmp = T1.backward(T2.backward(start)); this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); } } delete [] ss; } else { thmorph2trans TM; for (ii = stations.begin(); ii != stations.end(); ii++) { TM.insert_point( T2.forward(T1.forward(thvec2(ii->x, ii->y))), T3.backward(thvec2(ii->tx, ii->ty)), ii->st->uid); } TM.insert_lines_from_db(); th2ddataobject * pobj; thpoint * pointp; pobj = sketch->m_scrap->fs2doptr; while (pobj != NULL) { if (pobj->get_class_id() == TT_POINT_CMD) { pointp = (thpoint *) pobj; if (pointp->type == TT_POINT_TYPE_EXTRA) { if ((T3.m_scale > 0.0) && (pointp->from_name.id > 0) && (!thisnan(pointp->xsize))) { TM.insert_zoom_point( T2.forward(T1.forward(thvec2( pointp->point->x - sketch->m_x, pointp->point->y - sketch->m_y))), pointp->xsize / T3.m_scale, thdb.db1d.station_vec[pointp->from_name.id - 1].uid); } } } pobj = pobj->nscrapoptr; } TM.init(); pmin = pmax = TM.forward(T2.forward(T1.forward(thvec2(0.0, 0.0)))); for(x = 0; x < sketch->m_pic.width; x++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), 0.0)))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(x), double(sketch->m_pic.height))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } for(y = 0; y < sketch->m_pic.height; y++) { ptmp = TM.forward(T2.forward(T1.forward(thvec2(0.0, double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); ptmp = TM.forward(T2.forward(T1.forward(thvec2(double(sketch->m_pic.width), double(y))))); pmin.minimize(ptmp); pmax.maximize(ptmp); } thvec2 start, * ss(NULL); mpic_origin = thvec2(pmin.m_x, pmin.m_y); mw = long(pmax.m_x + 0.5) - long(pmin.m_x - 0.5); mh = long(pmax.m_y + 0.5) - long(pmin.m_y - 0.5); if (mh > 0) ss = new thvec2 [mh]; thprintf("(%.1f Mpix)", double(mw * mh) / 1000000.0); sketch->m_pic.rgba_load(); start = T2.forward(T1.forward(thvec2(0.0, double(mh/2.0)))); this->mpic.rgba_init(mw, mh); long ox, oy, x1, y1, x2, y2; thvec2 * pscan, * cscan, newp, newpmin, newpmax; thline2 lAB, lBC, lCD, lDA, lCA; double dAB, dBC, dCD, dDA, dCA; pscan = new thvec2 [sketch->m_pic.width]; cscan = new thvec2 [sketch->m_pic.width]; for(oy = 0; oy < sketch->m_pic.height; oy++) { for(ox = 0; ox < sketch->m_pic.width; ox++) { cscan[ox] = TM.forward(T2.forward(T1.forward(thvec2(double(ox), double(oy))))) - mpic_origin; if ((ox > 0) && (oy > 0)) { newpmax = newpmin = pscan[ox-1]; newpmax.maximize(pscan[ox]);newpmin.minimize(pscan[ox]); newpmax.maximize(cscan[ox-1]);newpmin.minimize(cscan[ox-1]); newpmax.maximize(cscan[ox]);newpmin.minimize(cscan[ox]); x1 = long(newpmin.m_x); x2 = long(newpmax.m_x) + 2; y1 = long(newpmin.m_y); y2 = long(newpmax.m_y) + 2; lAB = thline2(pscan[ox-1], cscan[ox-1]); lBC = thline2(cscan[ox-1], cscan[ox]); lCA = thline2(cscan[ox], pscan[ox-1]); lCD = thline2(cscan[ox], pscan[ox]); lDA = thline2(pscan[ox], pscan[ox-1]); // interpolate pixels within quadrilateral for (x = x1; x < x2; x++) { for (y = y1; y < y2; y++) { newp = thvec2(double(x), double(y)); dAB = lAB.eval(newp); dBC = lBC.eval(newp); dCD = lCD.eval(newp); dCA = lCA.eval(newp); dDA = lDA.eval(newp); if (((dAB <= 0.0) && (dBC <= 0.0) && (dCA <= 0.0)) || ((dCA >= 0) && (dCD <= 0.0) && (dDA <= 0.0))) { dCD = fabs(dCD); dDA = fabs(dDA); dAB = fabs(dAB) + dCD; dBC = fabs(dBC) + dDA; if (dAB > 0.0) dCD /= dAB; else dCD = 0.5; if (dBC > 0.0) dDA /= dBC; else dDA = 0.5; this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(double(ox) - dCD, double(oy) - 1.0 + dDA)); } } } if ((counter++ % 20000) == 0) thprintf(" [%.0f%%]", double(counter) / double(sketch->m_pic.width * sketch->m_pic.height) * 100.0); } } for(ox = 0; ox < sketch->m_pic.width; ox++) pscan[ox] = cscan[ox]; } delete [] pscan; delete [] cscan; //for (x = 0; x < mw; x++) { // for (y = 0; y < mh; y++) { // start = TM.backward(mpic_origin + thvec2(double(x), double(y)), x > 0 ? ss[y] : start); // ss[y] = start; // ptmp = T1.backward(T2.backward(start)); // this->mpic.rgba_set_pixel(x, y, sketch->m_pic.rgba_interpolate_pixel(ptmp.m_x, ptmp.m_y)); // if ((counter++ % 20000) == 0) // thprintf(" [%.0f%%]", double(counter) / double(mw * mh) * 100.0); // } //} delete [] ss; } this->mpic.rgba_save("PNG","png",thcfg.sketch_colors); this->mpic.rgba_free(); sketch->m_pic.rgba_free(); this->mpic.scale = T3.m_scale; ptmp = T3.forward(mpic_origin); this->mpic.x = ptmp.m_x; this->mpic.y = ptmp.m_y; thprintf(" done\n"); thtext_inline = false; return &(this->mpic); } void thwarplin::self_delete() { delete this; } void thwarpinvdist::self_delete() { delete this; } void thwarpinvdistln::self_delete() { delete this; } void thwarpfastinvdistln::self_delete() { delete this; } therion-5.4.1/thwarp.h000066400000000000000000000043411307545355600146660ustar00rootroot00000000000000/** * @file thwarp.h * Export class. */ /* Copyright (C) 2007 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarp_h #define thwarp_h #include #include "thpic.h" #include "thsketch.h" class thwarp { protected: thsketch * m_sketch; public: thwarp() : m_sketch(NULL) {} virtual ~thwarp(); /** * Morph given sketch. */ virtual thpic * morph(thsketch * sketch, double scale); /** * Delete warp object. */ virtual void self_delete(); }; /** * Only linear picture transformation. */ class thwarplin : public thwarp { protected: thpic mpic; bool morphed; int method; public: thwarplin() : morphed(false), method(0) {} virtual thpic * morph(thsketch * sketch, double scale); virtual void self_delete(); }; /** * Inverse distance transformation. */ class thwarpinvdist : public thwarplin { public: thwarpinvdist() { this->method = 1; } virtual void self_delete(); }; /** * Inverse distance line transformation. */ class thwarpinvdistln : public thwarplin { public: thwarpinvdistln() { this->method = 2; } virtual void self_delete(); }; /** * Inverse distance line transformation. */ class thwarpfastinvdistln : public thwarplin { public: thwarpfastinvdistln() { this->method = 3; } virtual void self_delete(); }; #endif therion-5.4.1/thwarpp.cxx000066400000000000000000000145471307545355600154320ustar00rootroot00000000000000/** * @file warpp.cxx */ /* Copyright (C) 2000 Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include "thwarpp.h" #include "thscrap.h" #include "th2ddataobject.h" #include "thpoint.h" #include "thconfig.h" thwarpp::~thwarpp() {} void thwarpp::self_delete() { delete this; } thscrap * thwarpp::get_scrap() { if (this->m_sketch != NULL) return this->m_sketch->m_scrap; return NULL; } void thwarpp::process_station_vector( thwarptrans & tw, double ph ) { thsketchst_list::iterator ii; for (ii = this->stations.begin(); ii != this->stations.end(); ii++) { thdb1ds & st = thdb.db1d.station_vec[ii->station.id - 1]; std::string name( st.name ); tw.insert_point( ii->code, name, thvec2(ii->x, ph - ii->y), thvec2(st.x, - st.y) ); // thprintf("insert %s from %.2f %.2f to %.2f %.2f \n", // st.name, ii->x, ph - ii->y, st.x, - st.y ); } } void thwarpp::process_leg_vector( thwarptrans & tw ) { for ( thsketchlg_list::iterator jj = this->legs.begin(); jj != this->legs.end(); ++jj ) { // thprintf("insert line %s %s\n", jj->from.name, jj->to.name ); std::string f( jj->from.name ); std::string t( jj->to.name ); tw.insert_line( jj->code, f, t ); } } thpic * thwarpp::morph(thsketch * sketch, double scale) { thwarp::morph(sketch, scale); double sf = scale; if (!this->m_sketch->m_pic.exists()) return NULL; const char * fn; size_t fnx, fnl; fn = sketch->m_pic.fname; fnl = strlen(sketch->m_pic.fname); for(fnx = 0; fnx < fnl; fnx++) { if (((sketch->m_pic.fname[fnx] == '/') || (sketch->m_pic.fname[fnx] == '\\')) && (fnx < fnl - 1)) { fn = &(sketch->m_pic.fname[fnx + 1]); } } if (thtext_inline) thprintf("\n"); thprintf("morphing %s ...", fn); thtext_inline = true; this->m_sketch->m_pic.rgba_load(); long pw = this->m_sketch->m_pic.width; long ph = this->m_sketch->m_pic.height; // FIXME could use bounds (defaults 1.5 1.5 2.0) // thwarptrans TW( b2, b3, b4 ); thwarptrans TW; thscrap * scrap = this->get_scrap(); thdb2dcp *ccp; thbuffer n2sb, n2sb2; n2sb.guarantee(128); n2sb2.guarantee(128); std::string s, s2; std::map ssm; //std::map ::iterator ssmi; ccp = scrap->fcpp; while (ccp != NULL) { if ((ccp->point != NULL) && (ccp->st != NULL)) { sprintf(n2sb.get_buffer(),"%ld",ccp->st->uid); s = n2sb.get_buffer(); TW.insert_point( THMORPH_STATION, s, thvec2(ccp->pt->x - sketch->m_x, sketch->m_y + double(sketch->m_pic.height) - ccp->pt->y), thvec2(ccp->tx + sketch->m_scrap->proj->rshift_x,- (ccp->ty + sketch->m_scrap->proj->rshift_y))); ssm[ccp->st->uid] = &(thdb.db1d.station_vec[ccp->st->uid - 1]); } ccp = ccp->nextcp; } thdb1d_leg_vec_type::iterator lg = thdb.db1d.leg_vec.begin(); unsigned long fuid, tuid; while ( lg != thdb.db1d.leg_vec.end() ) { thdataleg * dlg = lg->leg; fuid = thdb.db1d.station_vec[dlg->from.id - 1].uid; tuid = thdb.db1d.station_vec[dlg->to.id - 1].uid; sprintf(n2sb.get_buffer(),"%ld",fuid); sprintf(n2sb2.get_buffer(),"%ld",tuid); s = n2sb.get_buffer(); s2 = n2sb2.get_buffer(); if ((ssm.find(fuid) != ssm.end()) && (ssm.find(tuid) != ssm.end())) { // thprintf("insert leg %s %s\n", dlg->from.name, dlg->to.name ); TW.insert_line( THMORPH_STATION, s, s2); } ++ lg; } th2ddataobject * pobj = scrap->fs2doptr; int n_extra = 0; while (pobj != NULL) { if (pobj->get_class_id() == TT_POINT_CMD) { thpoint * pointp = (thpoint *) pobj; if (pointp->type == TT_POINT_TYPE_EXTRA) { pointp->check_extra(); if ((pointp->from_name.id > 0) && (!thisnan(pointp->xsize))) { unsigned long fuid = thdb.db1d.station_vec[pointp->from_name.id - 1].uid; if ( ssm.find(fuid) == ssm.end() ) { thprintf("warning: extra point from %s but no station\n", pointp->from_name.name ); } else { sprintf(n2sb2.get_buffer(),"%ld",fuid); sprintf(n2sb.get_buffer(),"%ld_E_%d",fuid, ++n_extra); s = n2sb.get_buffer(); s2 = n2sb2.get_buffer(); thdb2dpt * pt = pointp->point; // assert( pt != NULL ); double x = pt->x - sketch->m_x; double y = sketch->m_y + double(sketch->m_pic.height) - pt->y; TW.insert_zoom_point( THMORPH_EXTRA, s, thvec2(x, y), s2, pointp->xsize ); // ssm[ccp->st->uid] = &(thdb.db1d.station_vec[ccp->st->uid - 1]); } } } } pobj = pobj->nscrapoptr; } TW.initialize(); // the factor of 4 is good compromise between quality and speed double myscale = 4.0 * TW.to_unit() / TW.from_unit(); long mw = (long)( pw * myscale * sf / 4.0 ); long mh = (long)( ph * myscale * sf / 4.0 ); this->mpic.rgba_init(mw, mh); thvec2 origin( mw/2.0, mh/2.0 ); double unit = TW.to_unit() * sf; TW.map_image( (const unsigned char*)this->m_sketch->m_pic.rgba, pw, ph, (unsigned char*)this->mpic.rgba, mw, mh, origin, unit, 4 ); this->mpic.rgba_save("PNG","png",thcfg.sketch_colors); this->mpic.rgba_free(); this->m_sketch->m_pic.rgba_free(); #if 0 this->mpic.scale = T3.m_scale; ptmp = T3.forward(mpic_origin); this->mpic.x = ptmp.m_x; this->mpic.y = ptmp.m_y; #else this->mpic.scale = TW.to_unit() / TW.warped_unit(); this->m_origin = TW.to_origin(); this->mpic.x = - origin.m_x * this->mpic.scale; this->mpic.y = - origin.m_y * this->mpic.scale; #endif this->mpic.x += this->m_origin.m_x; this->mpic.y -= this->m_origin.m_y; thprintf(" done\n"); thtext_inline = false; return &(this->mpic); } therion-5.4.1/thwarpp.h000066400000000000000000000047271307545355600150560ustar00rootroot00000000000000/** * @file thwarp.h * Plaquette morphing. */ /* Copyright (C) 2007 Marco Corvi, Stacho Mudrak * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarpp_h #define thwarpp_h #define THERION #include "thwarp.h" #include "thwarppme.h" #include "thwarppt.h" #include "thdataobject.h" /** * Sketch station structure. */ struct thsketchst { thmorph_type code; //!< station code double x, y; //!< station image coords thobjectname station; //!< station survey name thobjectsrc source; }; /** * Sketch leg structure. */ struct thsketchlg { thmorph_type code; //!< leg code thobjectname from; //!< station survey name thobjectname to; //!< station survey name thobjectsrc source; }; typedef std::list thsketchst_list; typedef std::list thsketchlg_list; class thwarpp : public thwarp { private: thpic mpic, upic; ///< Morphed picture. thvec2 m_origin; //!< Survey origin thsketchst_list stations; //!< List of sketch stations. thsketchlg_list legs; //!< List of legs private: /** get the scrap (pointer) for this sketch * @return the scrap pointer (NULL on failure) */ thscrap * get_scrap(); /** process the points and insert them in the warp transform * @param tw the warp transform * @param ph this picture height */ void process_station_vector( thwarptrans & tw, double ph ); /** process the legs and insert them in the warp transform * @param tw the warp transform */ void process_leg_vector( thwarptrans & tw ); public: virtual ~thwarpp(); virtual thpic * morph(thsketch * sketch, double scale); virtual void self_delete(); }; #endif therion-5.4.1/thwarppdef.h000066400000000000000000000050101307545355600155170ustar00rootroot00000000000000/** @file thwarppdef.h * * @author marco corvi * @date mar 2007 * * @brief warping transformation definitions */ /* Copyright (C) 2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarppdef_h #define thwarppdef_h #define THERION // #define BOUND_SEGMENT 1.5 #define BOUND_TRIANGLE 1.5 #define BOUND_PLAQUETTE 2.0 #define MORPH_USE_BD #define MORPH_BD 0.5 /** whether or not to use rotation */ #define MORPH_ROTATE 1 /** a multiplicative factor for the angle differences */ #define MORPH_ANGLE_FACTOR 0.5 namespace therion { namespace warp { /** type of the warping control objects * overused for point-pairs and lines */ enum morph_type { THMORPH_STATION, /* station point | centerline shot */ THMORPH_LEFT, /* left point | left shot */ THMORPH_RIGHT, /* right point | right shot */ THMORPH_SEGMENT, /* - | straight end segment */ THMORPH_EXTRA, }; /** warping projection type */ enum warp_proj { THWARP_PLAN, /* plan */ THWARP_EXTENDED, /* extended elevation */ }; /** warping pair types */ enum warp_type { THWARP_NONE = 0, THWARP_POINT = 1, THWARP_SEGMENT = 2, THWARP_TRIANGLE = 3, THWARP_PLAQUETTE = 4 }; } // namespace warp } // namespace therion // ***************************************************************** // backward compatibility // #ifdef THERION typedef therion::warp::morph_type thmorph_type; typedef therion::warp::warp_proj thwarp_proj; using therion::warp::THMORPH_STATION; using therion::warp::THMORPH_EXTRA; #endif #endif // thwarppdef_h therion-5.4.1/thwarppme.cxx000066400000000000000000001111011307545355600157340ustar00rootroot00000000000000/** @file thwarppme.cxx * * @author marco corvi * @date nov 2006 - mar 2007 * * @brief Warping plaquette algo structures */ /* Copyright (C) 2006-2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #include #include #include "thinfnan.h" #include "thwarppme.h" int therion::warp::basic_pair::basic_pair_nr = 0; namespace therion { namespace warp { /** compute vertical-ness * @param a X-coordinate factor * @param x X vector * @param u U vector * @return the min vertical-ness between X and U * * vertical-ness is * - positive if Y-coord is positive * - negative if Y-coord is negative * - the closer to 0 the more vertical is the vector */ double compute_vertical( double a, thvec2 & x, thvec2 & u ) { double vx = ( fabs(x.m_x * a) < fabs(x.m_y) )? 0.0 : ( (x.m_y > 0.0)? (1.0 - x.m_y/fabs( x.m_x * a )) : (x.m_y/fabs( x.m_x * a ) -1.0) ); double vu = ( fabs(u.m_x * a) < fabs(u.m_y) )? 0.0 : ( (u.m_y > 0.0)? (1.0 - u.m_y/fabs( u.m_x * a )) : (u.m_y/fabs( u.m_x * a ) - 1.0) ); return ( fabs(vx) < fabs(vu) )? vx : vu; } /** compute the squared distance from a segment * @param x input vector * @param b first endpoint of the segment * @param c second endpoint of the segment */ double compute_segment_distance2( const thvec2 & x, const thvec2 & b, const thvec2 & c ) { double xcb = c.m_x - b.m_x; double ycb = c.m_y - b.m_y; double x0b = x.m_x - b.m_x; double y0b = x.m_y - b.m_y; double xcb2 = xcb*xcb; double ycb2 = ycb*ycb; double cb2 = xcb2 + ycb2; double hx = (xcb2 * x.m_x + ycb2 * b.m_y + xcb * ycb * y0b)/cb2; double hy = (ycb2 * x.m_y + xcb2 * b.m_x + xcb * ycb * x0b)/cb2; bool inside = true; if (fabs(xcb) > fabs(ycb) ) { inside = ( c.m_x > b.m_x ) ? ( hx > b.m_x && hx < c.m_x ) : ( hx > c.m_x && hx < b.m_x ); } else { inside = ( c.m_y > b.m_y ) ? ( hy > b.m_y && hy < c.m_y ) : ( hy > c.m_y && hy < b.m_y ); } if ( inside ) { hx -= x.m_x; hy -= x.m_y; return hx*hx + hy*hy; } // else { hx = x.m_x - c.m_x; hy = x.m_y - c.m_y; double dc = hx*hx + hy*hy; double db = x0b*x0b + y0b*y0b; return ( dc < db )? dc : db; } } // namespace warp } // namespace therion void therion::warp::point_pair::add_line( line * line ) { // thprintf("%s add_line %s-%s\n", // m_name.c_str(), line->m_p1->m_name.c_str(), line->m_p2->m_name.c_str() ); if ( line->m_type == THMORPH_STATION ) m_legs ++; mLines.push_back( line ); } therion::warp::line::line( morph_type t, point_pair * p1, point_pair * p2 ) : m_type( t ) , m_p1( p1 ) , m_p2( p2 ) { // thprintf("New line: P1 %s P2 %s\n", p1->m_name.c_str(), p2->m_name.c_str() ); if ( p1 != NULL ) p1->add_line( this ); if ( p2 != NULL ) p2->add_line( this ); } void therion::warp::point_pair::update( thvec2 & x0, double xunit, thvec2 & u0, double uunit ) { z = ( x - x0 ) / xunit; w = ( u - u0 ) / uunit; } void therion::warp::point_pair::order_lines( inserter * warper, double x_u, warp_proj proj ) { size_t sz = mLines.size(); // thprintf("order_lines(): Point %s has %d/%d lines\n", m_name.c_str(), sz, m_legs ); if ( sz <= 1 ) { return; } bool repeat = true; while ( repeat ) { sz = mLines.size(); therion::warp::line * l1 = mLines[0]; thvec2 v1 = ( this == l1->m_p1 ) ? l1->vz : l1->vz * (-1); for ( size_t i=1; im_p1 ) ? l2->vz : l2->vz * (-1); double ct = v1 * v2; double st = v1 ^ v2; double theta = atan2( st, ct ); if ( theta < 0 ) theta += 2*THPI; if ( theta < theta_min ) { jmin = j; theta_min = theta; } } l1 = mLines[jmin]; if ( jmin > i ) { mLines[jmin] = mLines[i]; mLines[i] = l1; } v1 = ( this == l1->m_p1 ) ? l1->vz : l1->vz * (-1); } repeat = false; // now check that between any two STATION lines there is a non-STATION line // thprintf("Point %s: %6.2f %6.2f has %d lines\n", m_name.c_str(), x.m_x, x.m_y, sz ); for ( size_t i=0; i= 2 ) { therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; if ( l1->m_type != THMORPH_STATION ) continue; if ( l2->m_type != THMORPH_STATION ) continue; therion::warp::point_pair * p1 = l1->other_end( this ); therion::warp::point_pair * p2 = l2->other_end( this ); // thprintf("point %s (%s - %s) sizes %d %d \n", // m_name.c_str(), p1->m_name.c_str(), p2->m_name.c_str(), p1->size(), p2->size() ); if ( p1->size() == 1 && p2->size() == 1 ) continue; } else if ( m_legs == 0 ) { continue; } else { // m_legs == 1 // angle between line[i] and line[j] therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; therion::warp::point_pair * p1 = l1->other_end( this ); therion::warp::point_pair * p2 = l2->other_end( this ); // thprintf("point %s (%s - %s) legs 1 angle %6.2f\n", // m_name.c_str(), p1->m_name.c_str(), p2->m_name.c_str(), // (p2->u - u) ^ (p1->u -u ) ); if ( ((p2->u - u) ^ (p1->u -u )) < 0 ) continue; } repeat = true; // thprintf("Point %s: insert %d/%d lines (j=%d)\n", m_name.c_str(), i, sz, j ); therion::warp::line * l1 = mLines[i]; therion::warp::line * l2 = mLines[j]; therion::warp::point_pair * p1 = l1->other_end( this ); // ( this == l1->m_p1 ) ? l1->m_p2 : l1->m_p1; therion::warp::point_pair * p2 = l2->other_end( this ); // ( this == l2->m_p1 ) ? l2->m_p2 : l2->m_p1; thvec2 x1 = p1->x - x; thvec2 x2 = p2->x - x; thvec2 u1 = p1->u - u; thvec2 u2 = p2->u - u; // thprintf("must insert between %s %s at %s (m_legs %d) proj %s\n", // p1->m_name.c_str(), p2->m_name.c_str(), m_name.c_str(), m_legs, // (proj == THWARP_PLAN)? "plan" : "elev" ); // try a non-STATION line that reflected is between l1 and l2 size_t k = 0; if ( m_legs <= 2 ) { for ( ; km_type == THMORPH_STATION ) continue; therion::warp::point_pair * p0 = mLines[k]->other_end( this ); thvec2 x0 = x - p0->x; thvec2 u0 = u - p0->u; if ( (x2 ^ x0) < 0 && (x0 ^ x1) < 0 && (u2 ^ u0) < 0 && (u0 ^ u1) ) { // opposite is OK both for PLAN and for EXTENDED proj // thprintf("adding extra as opposite of %s\n", p0->m_name.c_str() ); thvec2 x3 = x + x0; thvec2 u3 = u + u0; warper->add_extra_line( this, i, x3, u3 ); break; } } } else { k = sz; // still need to insert } if ( k == sz ) { thvec2 x3, u3; if ( proj == THWARP_PLAN ) { // this is a wild guess. there is no generic way to guess // where the tranverse point(s) are ... double d1 = u1.length(); double d2 = u2.length(); double du = (u1 - u2).length(); thvec2 vu = u2/d2 - u1/d1; vu.normalize(); // thprintf("adding extra as bisector at %s [lengths %.2f %.2f %.2f]\n", // this->m_name.c_str(), du, d1, d2 ); if ( d1 < du ) du = d1; if ( d2 < du ) du = d2; u3.m_x = u.m_x + vu.m_y * du; u3.m_y = u.m_y - vu.m_x * du; thvec2 vx = x2/x2.length() - x1/x1.length(); vx.normalize(); /* double dx = (x1 - x2).length() / 2.0; double d1 = x1.length()/2.0; double d2 = x2.length()/2.0; if ( d1 < dx ) dx = d1; if ( d2 < dx ) dx = d2; */ double dx = du * x_u; x3.m_x = x.m_x + vx.m_y * dx; x3.m_y = x.m_y - vx.m_x * dx; } else /* if ( proj == THWARP_EXTENDED ) */ { #define TH_VERT_ALPHA 32.0 double v1 = compute_vertical( TH_VERT_ALPHA, x1, u1 ); double v2 = compute_vertical( TH_VERT_ALPHA, x2, u2 ); thvec2 vu = u2/u2.length() - u1/u1.length(); double du = (u1 - u2).length(); double d1 = u1.length(); double d2 = u2.length(); if ( d1 < du ) du = d1; if ( d2 < du ) du = d2; double dx = du * x_u; // thprintf("v1 %f v2 %f \n", v1, v2 ); if ( fabs(v1) < 0.5 || fabs(v2) < 0.5 ) { if ( fabs(v1) < 0.1 && fabs(v2) < 0.1 ) { if ( v1 * v2 < 0.0 ) { // vertical opposite // thprintf("horizontal\n"); u3.m_x = u.m_x + ((v2>0.0)? 1.0 : -1.0) * du; u3.m_y = u.m_y; x3.m_x = x.m_x + ((v2>0.0)? 1.0 : -1.0) * dx; x3.m_y = x.m_y; } else { thprintf("warning: closed up vertical angle\n"); u3.m_x = u.m_x; u3.m_y = (u1.m_y + u2.m_y)/2.0; x3.m_x = x.m_x; x3.m_y = (x1.m_y + x2.m_y)/2.0; } } else { // thprintf("bisector\n"); u3.m_x = u.m_x + vu.m_y * du; u3.m_y = u.m_y - vu.m_x * du; thvec2 vx = x2/x2.length() - x1/x1.length(); x3.m_x = x.m_x + vx.m_y * dx; x3.m_y = x.m_y - vx.m_x * dx; } } else { // thprintf("vertical\n"); u3.m_x = u.m_x; u3.m_y = u.m_y + ((v2>0.0)? 1.0 : -1.0) * du; x3.m_x = x.m_x; x3.m_y = x.m_y + ((v2>0.0)? 1.0 : -1.0) * dx; } } warper->add_extra_line( this, i, x3, u3 ); } } // for ( ...; iother_end( this ); thprintf("%s ", p2->m_name.c_str() ); } thprintf("\n"); */ // check that all the lines from this point that are not centerlines have a "single" // node at the other end // this check could be restricted to // if ( m_type == THMORPH_STATION ) for ( size_t i=0; im_type != THMORPH_STATION ) { point_pair * p2 = l2->other_end( this ); assert( p2->mLines.size() == 1 ); } } } therion::warp::line * therion::warp::point_pair::first_leg() { size_t sz = mLines.size(); for (size_t j=0; jm_type == THMORPH_STATION ) return mLines[j]; } return NULL; } void therion::warp::line::update() { // thprintf("Update line %s %s\n", m_p1->m_name.c_str(), m_p2->m_name.c_str() ); vz = m_p2->z - m_p1->z; vw = m_p2->w - m_p1->w; z.m_a = vz.m_y; z.m_b = - vz.m_x; z.m_c = - ( z.m_a * m_p1->z.m_x + z.m_b * m_p1->z.m_y); zab = sqrt(z.m_a*z.m_a + z.m_b*z.m_b); w.m_a = vw.m_y; w.m_b = - vw.m_x; w.m_c = - ( w.m_a * m_p1->w.m_x + w.m_b * m_p1->w.m_y); wab = sqrt(w.m_a*w.m_a + w.m_b*w.m_b); double dz = vz.length2(); // R.m_xx = R.m_yy = ( vw * vz ) / dz; // R.m_xy = ( vw ^ vz ) / dz; // R.m_yx = - R.m_xy; double dw = vw.length2(); // S.m_xx = S.m_yy = ( vz * vw ) / dw; // S.m_xy = ( vz ^ vw ) / dw; // S.m_yx = - S.m_xy; dz = sqrt( dz ); dw = sqrt( dw ); vz /= dz; vw /= dw; assert( fabs( vz.length() - 1.0 ) < 0.01 ); assert( fabs( vw.length() - 1.0 ) < 0.01 ); z_w = dz / dw; w_z = dw / dz; } // --------------------------------------------------------------- // therion::warp::triangle // // TOCHECK from .h double therion::warp::triangle::sm_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = p.m_x - m_A.m_x; ret.m_y = p.m_y - m_A.m_y; double d2 = ret.length2(); return d2*d2; } void therion::warp::triangle::inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const { ret.m_x = d4 * ( m_A.m_x + p.m_x ); ret.m_y = d4 * ( m_A.m_y + p.m_y ); } // --------------------------------------------------------------- // therion::warp::plaquette void therion::warp::plaquette::init() { m_AD = m_D - m_A; m_BC = m_C - m_B; m_AB = m_B - m_A; m_BA = m_A - m_B; m_AB_len = m_AB.length(); // length of AB (was m_abd) m_AD_len = m_AD.length(); // length of AD m_BC_len = m_BC.length(); // length of BC m_adn = m_AD; m_adn.normalize(); m_bcn = m_BC; m_bcn.normalize(); m_abn = m_AB; m_abn.normalize(); m_abh.m_x = m_abn.m_y; m_abh.m_y = - m_abn.m_x; m_a = m_A.m_x - m_B.m_x - m_D.m_x + m_C.m_x; m_b = - m_A.m_x + m_B.m_x; m_c = - m_A.m_x + m_D.m_x; m_d = m_A.m_x; m_e = m_A.m_y - m_B.m_y - m_D.m_y + m_C.m_y; m_f = - m_A.m_y + m_B.m_y; m_g = - m_A.m_y + m_D.m_y; m_h = m_A.m_y; m_A0 = m_a * m_f - m_b * m_e; m_B0 = m_a * m_h - m_d * m_e + m_c * m_f - m_b * m_g; m_C0 = m_c * m_h - m_d * m_g; m_D0 = m_a * m_g - m_c * m_e; m_E0 = m_a * m_h - m_d * m_e - m_c * m_f + m_b * m_g; m_F0 = m_b * m_h - m_d * m_f; // angles + "line" // thvec2 adn = m_AD; adn.normalize(); // m_theta_l = acos( m_abn * adn ); m_theta_l = angle( m_abn, m_adn ); // thvec2 bcn = m_BC; bcn.normalize(); // m_theta_r = acos( - m_abn * bcn ); m_theta_r = angle( m_bcn, - m_abn ); // thprintf("Plaquette theta L %.2f R %.2f \n", m_theta_l, m_theta_r ); // C1 is the projection (parallel to AB) of C on AD. // [1] line thru C parallel to AB: // y = C.y + ( x - C.x ) * AB.y / AB.x // [2] intersection with // y = A.y + ( x - A.x ) * AD.y / AD.x // // x ( AB.y AD.x - AB.x AD.y ) = AD.x AB.x ( A.y - C.y ) + AD.x AB.y C.x - AB.x AD.y A.x // i.e. // - adab * x = AB.x ( AD.x A.y - AD.y A.x ) - AD.x ( AB.x C.y - AB.y C.x ) // adab * x = AB.x * ( A ^ AD ) - AD.x * ( C ^ AB ) m_adab = - m_adn.m_x * m_abn.m_y + m_adn.m_y * m_abn.m_x; // abn ^ adn m_bcab = - m_bcn.m_x * m_abn.m_y + m_bcn.m_y * m_abn.m_x; // abn ^ bcn m_adA = - m_adn.m_x * m_A.m_y + m_adn.m_y * m_A.m_x; // A ^ adn m_bcB = - m_bcn.m_x * m_B.m_y + m_bcn.m_y * m_B.m_x; // B ^ bcn double cab = m_C.m_x * m_abn.m_y - m_C.m_y * m_abn.m_x; // C ^ abn m_C1 = ( m_abn * m_adA - m_adn * cab ) / m_adab; // check align A-D-C1 assert( fabs( m_A.m_x * m_D.m_y - m_A.m_y * m_D.m_x + m_D.m_x * m_C1.m_y - m_D.m_y * m_C1.m_x + m_C1.m_x * m_A.m_y - m_C1.m_y * m_A.m_x ) < 0.001 ); m_C1C = m_C - m_C1; // assert m_C1C || m_AB assert( fabs( m_C1C.m_x * m_AB.m_y - m_C1C.m_y * m_AB.m_x ) < 0.001 ); m_sin = m_AB.m_x / m_AB_len; m_cos = m_AB.m_y / m_AB_len; if ( fabs(m_AB.m_x) * 1.73 > fabs(m_AB.m_y) ) { // horizontal up to 60 deg. if ( fabs(m_AB.m_x) * 1.19 > fabs(m_AB.m_y) ) { // really horizontal m_sin = 0.0; m_cos = 1.0; } } else { if ( fabs(m_AB.m_y) * 0.58 > fabs(m_AB.m_x) ) { m_sin = 1.0; m_cos = 0.0; } } m_tan = m_sin/m_cos; m_ctg = m_cos/m_sin; } double therion::warp::plaquette::s_map_straight( const thvec2 & p ) const { double s; double ex_ay = m_e * p.m_x - m_a * p.m_y; double A = m_A0; double B = (ex_ay + m_B0)/2.0; double C = m_g * p.m_x - m_c * p.m_y + m_C0; double det = B*B - A * C; if ( det < 0.0 ) return thnan; if ( det > 0.0 ) det = sqrt( det ); if ( fabs(A) > 1.e-6 ) { s = (- B + det )/A; double s2 = (-B-det)/A; if ( s2 > 0.0 && fabs(s2) < fabs(s) ) s = s2; } else { s = ( B == 0.0 ) ? thinf : - C / (2*B); } return s; } double therion::warp::plaquette::s_map_slant( const thvec2 & p ) const { double x0 = p.m_x; double y0 = p.m_y; double pab = p.m_x * m_abn.m_y - p.m_y * m_abn.m_x; // P1 = [ (ad^A) ab + (P^ab) ad ] / [ad^ab] // P2 = [ (bc^B) ab + (P^ab) bc ] / [ad^bc] double x1 = ( m_abn.m_x * m_adA - m_adn.m_x * pab ) / m_adab; double y1 = ( m_abn.m_y * m_adA - m_adn.m_y * pab ) / m_adab; double x2 = ( m_abn.m_x * m_bcB - m_bcn.m_x * pab ) / m_bcab; double y2 = ( m_abn.m_y * m_bcB - m_bcn.m_y * pab ) / m_bcab; // check alignment // double align = (x1*y2 - x2*y1) + (x2*y0 - x0*y2) + (x0*y1 - x1*y0); // assert( fabs(align) < 0.001 ); double d12 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); double d10 = (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1); return sqrt( d10/d12 ); } double therion::warp::plaquette::t_map( const thvec2 & p ) const { double t; double ex_ay = m_e * p.m_x - m_a * p.m_y; // double A = m_A0; double D = m_D0; // double B = (ex_ay + m_B0)/2.0; double E = (ex_ay + m_E0)/2.0; // double C = m_g * p.m_x - m_c * p.m_y + m_C0; double F = m_f * p.m_x - m_b * p.m_y + m_F0; double det = E*E - D * F; if ( det < 0.0 ) return thnan; if ( det > 0.0 ) det = sqrt( det ); if ( fabs(D) > 1.e-6 ) { t = (- E + det )/D; double t2 = (-E-det)/D; if ( t2 > 0.0 && fabs(t2) < fabs(t) ) t = t2; } else { t = ( E == 0.0 ) ? thinf : - F / (2*E); } return t; } // -------------------------------------------------------------- // Horizontal + Vertical stuff // // X:horizontal - Y:vertical void therion::warp::plaquette::hv_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = ( p.m_x - m_A.m_x )/m_AB.m_x; // Qy = Ay + (By-Ay)/(Bx-Ax) * (Px - Ax) double yq = m_A.m_y + m_AB.m_y * ret.m_x; ret.m_y = p.m_y - yq; } void therion::warp::plaquette::inv_hv_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_y = yq + p.m_y; } // X:vertical - Y:horizontal void therion::warp::plaquette::vh_map( const thvec2 & p, thvec2 & ret ) const { ret.m_x = ( p.m_y - m_A.m_y )/m_AB.m_y; // Qx = Ax + (Bx-Ax)/(By-Ay) * (Py - Ay) double xq = m_A.m_x + m_AB.m_x * ret.m_x; ret.m_y = p.m_x - xq; } void therion::warp::plaquette::inv_vh_map( const thvec2 & p, thvec2 & ret ) const { ret.m_y = m_A.m_y + p.m_x * m_AB.m_y; double xq = m_A.m_x + p.m_x * m_AB.m_x; ret.m_x = xq + p.m_y; } // horizontal-vertical at an angle (m1) // X = Px + m1 ( Y - Py ) // // X = Qx + t * cos // Y = Qy + t * sin // // t = ( Y - Qy ) / sin // X = Qx + cos/sin * ( Y - Qy ) // = Px + cos/sin * ( Y - Py ) // void therion::warp::plaquette::vhm_map( const thvec2 & p, thvec2 & ret ) const { double yq = ( m_AB.m_x * m_A.m_y + (p.m_x - m_A.m_x - m_ctg * p.m_y ) * m_AB.m_y ) / ( m_AB.m_x - m_ctg * m_AB.m_y ); ret.m_x = ( yq - m_A.m_y )/m_AB.m_y; double xq = m_A.m_x + ret.m_x * m_AB.m_x; double dx = p.m_x - xq; double dy = p.m_y - yq; ret.m_y = sqrt( dx*dx + dy*dy ); } void therion::warp::plaquette::inv_vhm_map( const thvec2 & p, thvec2 & ret ) const { double xq = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_x = xq + m_cos * p.m_y; ret.m_y = yq + m_sin * p.m_y; } // Y = Py + m ( X - Px ) void therion::warp::plaquette::hvm_map( const thvec2 & p, thvec2 & ret ) const { double xq = ( m_AB.m_y * m_A.m_x + (p.m_y - m_A.m_y - m_tan * p.m_x ) * m_AB.m_x ) / ( m_AB.m_y - m_tan * m_AB.m_x ); ret.m_x = ( xq - m_A.m_x )/m_AB.m_x; double yq = m_A.m_y + ret.m_x * m_AB.m_y; double dx = p.m_x - xq; double dy = p.m_y - yq; ret.m_y = sqrt( dx*dx + dy*dy ); } void therion::warp::plaquette::inv_hvm_map( const thvec2 & p, thvec2 & ret ) const { double xq = m_A.m_x + p.m_x * m_AB.m_x; double yq = m_A.m_y + p.m_x * m_AB.m_y; ret.m_x = xq + m_cos * p.m_y; ret.m_y = yq + m_sin * p.m_y; } // -------------------------------------------------------------- /** solve the system * | A+t(D-A) B+t(C-B) P | = 0 */ void therion::warp::plaquette::st_map( const thvec2 & p, thvec2 & ret ) const { double s; double ex_ay = m_e * p.m_x - m_a * p.m_y; double A = m_A0; double B = (ex_ay + m_B0)/2.0; double C = m_g * p.m_x - m_c * p.m_y + m_C0; if ( fabs(A) > 1.e-6 ) { double det = B*B - A * C; if ( det < 0.0 ) { ret.m_x = ret.m_y = thnan; return; } if ( det > 0.0 ) det = sqrt( det ); s = (- B + det )/A; double s2 = (-B-det)/A; if ( s2 > 0.0 && fabs(s2) < fabs(s) ) s = s2; } else { s = ( B == 0.0 ) ? thinf : - C / (2*B); } ret.m_x = s; ret.m_y = ( p.m_x - m_b * s - m_d ) / ( m_a * s + m_c ); } void therion::warp::plaquette::inv_st_map( const thvec2 & v, thvec2 & ret ) const { ret.m_x = m_a * v.m_x * v.m_y + m_b * v.m_x + m_c * v.m_y + m_d; ret.m_y = m_e * v.m_x * v.m_y + m_f * v.m_x + m_g * v.m_y + m_h; } // this are Beier-Neely type maps // "Feature-based image metamorphosis" Computer Graphics, 26 35-42, 1992 // // TODO // Taking into account different end-size ratios can be done here // or by the caller. The plaquette does not have the ratios, // and the relative weight could be different from the return // X coordinate (ret.m_x) // straight BN map void therion::warp::plaquette::bn_map_straight( const thvec2 & p, thvec2 & ret ) const { thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); ret.m_x = ( ap * m_abn ) / m_AB_len; ret.m_y = ap * m_abh; } void therion::warp::plaquette::inv_bn_map_straight( const thvec2 & p, thvec2 & ret ) const { // ret = m_A + m_AB * p.m_x + m_abh * p.m_y; ret.m_x = m_A.m_x + m_AB.m_x * p.m_x + m_abh.m_x * p.m_y; ret.m_y = m_A.m_y + m_AB.m_y * p.m_x + m_abh.m_y * p.m_y; } // slanted BN map void therion::warp::plaquette::bn_map_slant( const thvec2 & p, thvec2 & ret ) const { double x0 = p.m_x; double y0 = p.m_y; double pab = p.m_x * m_abn.m_y - p.m_y * m_abn.m_x; // P ^ ab // P1 = [ (A^ad) ab - (P^ab) ad ] / [ab^ad] projection of P parallel to AB on AD // P2 = [ (B^bc) ab - (P^ab) bc ] / [ab^bc] projection of P parallel to AB on BC double x1 = ( m_abn.m_x * m_adA - m_adn.m_x * pab ) / m_adab; double y1 = ( m_abn.m_y * m_adA - m_adn.m_y * pab ) / m_adab; double x2 = ( m_abn.m_x * m_bcB - m_bcn.m_x * pab ) / m_bcab; double y2 = ( m_abn.m_y * m_bcB - m_bcn.m_y * pab ) / m_bcab; // check alignment // double align = (x1*y2 - x2*y1) + (x2*y0 - x0*y2) + (x0*y1 - x1*y0); // assert( fabs(align) < 0.001 ); double d12 = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); double d10 = (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1); ret.m_x = sqrt( d10/d12 ); // slant distance // x1 = m_A.m_x + ret.m_x * m_AB.m_x; // y1 = m_A.m_y + ret.m_x * m_AB.m_y; // ret.m_y = sqrt( (x0-x1)*(x0-x1) + (y0-y1)*(y0-y1) ); // // straight distance ret.m_y = (p - m_A) * m_abh; } void therion::warp::plaquette::inv_bn_map_slant( const thvec2 & p, thvec2 & ret ) const { // slanted BN map /* thvec2 ps = m_A + p.m_x * m_AB; thvec2 p1 = m_C1 + p.m_x * m_C1C; double x = p1.m_x - ps.m_x; double y = p1.m_y - ps.m_y; ret = ps + (p1-ps)*(p.m_y /sqrt(x*x+y*y) ); */ double d1 = fabs(p.m_y/m_adab); double d2 = fabs(p.m_y/m_bcab); double x1 = 1.0 - p.m_x; ret.m_x = x1 * ( m_A.m_x + d1 * m_adn.m_x ) + p.m_x * ( m_B.m_x + d2 * m_bcn.m_x ); ret.m_y = x1 * ( m_A.m_y + d1 * m_adn.m_y ) + p.m_x * ( m_B.m_y + d2 * m_bcn.m_y ); } // TODO fix this double therion::warp::plaquette::sm_map( const thvec2 & p, thvec2 & ret ) const { thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); ret.m_x = (ap * m_abn) / m_AB_len; ret.m_y = ap * m_abh; double d2; if ( ret.m_x < 0.0 ) { // left point d2 = ap.length2(); } else if ( ret.m_x > 1.0 ) { // right point thvec2 bp( p.m_x - m_B.m_x, p.m_y - m_B.m_y ); d2 = bp.length2(); } else { // middle point d2 = ret.m_y * ret.m_y; } return d2*d2; } void therion::warp::plaquette::inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const { ret.m_x = d4 * ( m_A.m_x + p.m_x * m_AB.m_x + p.m_y * m_abh.m_x ); ret.m_y = d4 * ( m_A.m_y + p.m_x * m_AB.m_y + p.m_y * m_abh.m_y ); } // **************************************************************** // TRIANGLE PAIRS // namespace therion { namespace warp { /** cstr * @param a A-corner point pair ("vertex" of the triangle) * @param b B-corner point pair (right side) * @param c C-corner point pair (left side) * @param bound bound on "a" for is_inside test * @param cubic whether to use the cubic radial correction * @param border inner border */ template< > item_pair::item_pair( point_pair * a, point_pair * b, point_pair * c , double bound /* = BOUND_TRIANGLE */ ) : basic_pair( bound ) , from( a->z, b->z, c->z ) , to ( a->w, b->w, c->w ) { m_pair[0] = c; m_pair[1] = a; m_pair[2] = b; m_kl = ( from.theta_left() - to.theta_left() ) * MORPH_ANGLE_FACTOR; m_kr = ( from.theta_right() - to.theta_right() ) * MORPH_ANGLE_FACTOR; // m_kl = fabs(from.theta_left()-M_PI_2) - fabs(to.theta_left()-M_PI_2); // m_kr = fabs(from.theta_right()-M_PI_2) - fabs(to.theta_right()-M_PI_2); m_dl = from.m_ac / to.m_ac; m_dr = from.m_ab / to.m_ab; // thprintf("Triangle [%d] Theta L %.2f R %.2f Ratios L %.2f R %.2f \n", // nr(), m_kl, m_kr, m_dl, m_dr ); } /** type of this warping basic_pair * @return the number of points of the basic_pair */ template< > warp_type item_pair::type() const { return THWARP_TRIANGLE; } /** maximum number of neighbors * @return the maximum number of neighbors */ template< > int item_pair::ngbh_nr() const { return 2; } template< > void item_pair::set_projection( warp_proj proj ) { // thprintf("item_pair::set_projection(%d)\n", proj ); // TODO } template< > void item_pair::backward_normal_bd( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1, pa; to.bn_map( p, v0 ); v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); if ( v0.m_x < MORPH_BD ) { double x = v0.m_x/MORPH_BD; // x = 0 .. 1 // double x1 = 1.0 - 2*x + x*x; double x1 = 1 - x; /* #if MORPH_ROTATE != 0 double t = left_ngbh()->m_kr * x1; left_ngbh()->pto()->right_rotate( p, pa, cos(t), -sin(t) ); left_ngbh()->pto()->bn_map( pa, v0 ); #else left_ngbh()->pto()->bn_map( p, v0 ); #endif */ left_ngbh()->right_rotate_to( p, v0, x1 ); // double s = left_ngbh()->pto()->s_map( pa ); // v0.m_y *= s * left_ngbh()->m_dr + (1.0-s) * left_ngbh()->m_dl; v0.m_y *= v0.m_x * left_ngbh()->m_dr + (1.0-v0.m_x) * left_ngbh()->m_dl; left_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( ret.m_x + x1 * r1.m_x ) / ( 1 + x1 ); ret.m_y = ( ret.m_y + x1 * r1.m_y ) / ( 1 + x1 ); } else if ( 1.0 - v0.m_x < MORPH_BD ) { double x = (1.0-v0.m_x)/MORPH_BD; // double x1 = 1.0 - 2*x + x*x; double x1 = 1 - x; /* #if MORPH_ROTATE != 0 double t = right_ngbh()->m_kl * x1; right_ngbh()->pto()->left_rotate( p, pa, cos(t), -sin(t) ); right_ngbh()->pto()->bn_map( pa, v0 ); #else right_ngbh()->pto()->bn_map( p, v0 ); #endif */ right_ngbh()->left_rotate_to( p, v0, x1 ); // s = right_ngbh()->pto()->s_map( pa ); // v0.m_y *= s * right_ngbh()->m_dr + (1.0-s) * right_ngbh()->m_dl; v0.m_y *= v0.m_x * right_ngbh()->m_dr + (1.0-v0.m_x) * right_ngbh()->m_dl; right_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( ret.m_x + x1 * r1.m_x ) / ( 1 + x1 ); ret.m_y = ( ret.m_y + x1 * r1.m_y ) / ( 1 + x1 ); } else { /* nothing */ } } /* * as in therion template< > void item_pair::forward( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0; from.bn_map( p, v0 ); v0.m_y /= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; to.inv_bn_map( v0, ret ); } */ #ifdef DEBUG /** debug: print */ template< > void item_pair::print() const { thprintf("[%d] Triangle A %6.2f %6.2f <-> %6.2f %6.2f\n", nr(), from.m_A.m_x, from.m_A.m_y, to.m_A.m_x, to.m_A.m_y ); thprintf(" B %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_B.m_x, from.m_B.m_y, to.m_B.m_x, to.m_B.m_y ); thprintf(" C %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_C.m_x, from.m_C.m_y, to.m_C.m_x, to.m_C.m_y ); print_ngbhs(); } #endif // **************************************************************** // PLAQUETTE PAIRS // // TODO FIXME template< > void item_pair::set_projection( warp_proj proj ) { // thprintf("item_pair::set_projection(%d)\n", proj ); #ifdef MORPH_EXPERIMENTAL if ( proj == THWARP_EXTENDED ) { // TODO if ( fabs(from.m_sin) > fabs(from.m_cos) ) { // horizontal if ( fabs(from.m_cos) > 0.0 ) { from.bn_map_impl = &therion::warp::plaquette::hvm_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_hvm_map; to.bn_map_impl = &therion::warp::plaquette::hvm_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_hvm_map; } else { from.bn_map_impl = &therion::warp::plaquette::hv_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_hv_map; to.bn_map_impl = &therion::warp::plaquette::hv_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_hv_map; } } else { if ( fabs(from.m_sin) > 0.0 ) { from.bn_map_impl = &therion::warp::plaquette::vhm_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_vhm_map; to.bn_map_impl = &therion::warp::plaquette::vhm_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_vhm_map; } else { from.bn_map_impl = &therion::warp::plaquette::vh_map; from.inv_bn_map_impl = &therion::warp::plaquette::inv_vh_map; to.bn_map_impl = &therion::warp::plaquette::vh_map; to.inv_bn_map_impl = &therion::warp::plaquette::inv_vh_map; } } } else #endif { if ( m_kl + m_kr < 0 ) { from.s_map_impl = &therion::warp::plaquette::s_map_slant; from.bn_map_impl = &therion::warp::plaquette::bn_map_slant; from.inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_slant; } else if ( false ) { to.s_map_impl = &therion::warp::plaquette::s_map_slant; to.bn_map_impl = &therion::warp::plaquette::bn_map_slant; to.inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_slant; } } } /** cstr * @param a A-corner point pair * @param b B-corner point pair * @param c C-corner point pair * @param d D-corner point pair * @param bound bound of "t" for the is_inside test * @param cubic whether to use the cubic correction * @param border inner border */ template< > item_pair::item_pair( point_pair * a, point_pair * b, point_pair * c, point_pair * d , double bound /* = BOUND_PLAQUETTE */ ) : basic_pair( bound ) , from( a->z, b->z, c->z, d->z ) , to ( a->w, b->w, c->w, d->w ) { m_pair[0] = d; m_pair[1] = a; m_pair[2] = b; m_pair[3] = c; m_kl = ( from.theta_left() - to.theta_left() ) * MORPH_ANGLE_FACTOR; m_kr = ( from.theta_right() - to.theta_right() ) * MORPH_ANGLE_FACTOR; // m_kl = fabs(from.theta_left()-M_PI_2) - fabs(to.theta_left()-M_PI_2); // m_kr = fabs(from.theta_right()-M_PI_2) - fabs(to.theta_right()-M_PI_2); m_dl = from.m_AD_len / to.m_AD_len; m_dr = from.m_BC_len / to.m_BC_len; // thprintf("Plaquette [%d] Theta L %.2f R %.2f Ratios L %.2f R %.2f \n", // nr(), m_kl, m_kr, m_dl, m_dr ); // } /** warp type * @return the warp type of the warping basic_pair */ template< > warp_type item_pair::type() const { return THWARP_PLAQUETTE; } /** maximum number of neighbors * @return the maximum number of neighbors */ template< > int item_pair::ngbh_nr() const { return 3; } template< > void item_pair::backward_normal_bd( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1, pa; double s = to.s_map( p ); // assert( s >= 0 && s <= 1.0 ); if ( s < MORPH_BD ) { double x = s/MORPH_BD; // x = 0 .. 1 double x1 = 1.0 - 2*x + x*x; // x1 = 1 .. 0 this->left_rotate_to( p, v0, x1 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); left_ngbh()->right_rotate_to( p, v0, x1 ); s = v0.m_x; v0.m_y *= s * left_ngbh()->m_dr + (1.0-s) * left_ngbh()->m_dl; left_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( (2-x1)* ret.m_x + x1 * r1.m_x ) / 2; // ( 1 + x1 ); ret.m_y = ( (2-x1)* ret.m_y + x1 * r1.m_y ) / 2; // ( 1 + x1 ); } else if ( 1.0 - s < MORPH_BD ) { double x = (1.0-s)/MORPH_BD; // double x1 = 1.0 - x; double x1 = 1.0 - 2*x + x*x; this->right_rotate_to( p, v0, x1 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); right_ngbh()->left_rotate_to( p, v0, x1 ); s = v0.m_x; v0.m_y *= s * right_ngbh()->m_dr + (1.0-s) * right_ngbh()->m_dl; right_ngbh()->pfrom()->inv_bn_map( v0, r1 ); // ret = ( ret + r1 * x1 ) / ( 1.0 + x1 ); ret.m_x = ( (2-x1)* ret.m_x + x1 * r1.m_x ) / 2; // ( 1 + x1 ); ret.m_y = ( (2-x1)* ret.m_y + x1 * r1.m_y ) / 2; // ( 1 + x1 ); } else { to.bn_map( p, v0 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; from.inv_bn_map( v0, ret ); // to.st_map( p, v0 ); // from.inv_st_map( v0, ret ); } } /** map p in the "from" image to a point in the "to" img * @param p 2D point in the "from" image * @param ret corresponding 2D point in the "to" image * * The backward() map is not invertibel in close form, therefore * the forward() map is carried out by guessing s first point and * searching around it for a point that satisfies the backward() map. * This way forward() takes 30-40 times longer than backward(). * * The forward() code must come after backward() has been instantiated. */ template< typename T > void item_pair::forward( const thvec2 & p, thvec2 & ret ) const { static thvec2 v0, r1; thvec2 p1; double d, d0, x, y; double dx = 0.1, dy=0.1; from.bn_map( p, v0 ); // v0.m_y *= s * m_dr + (1.0-s) * m_dl; v0.m_y *= v0.m_x * m_dr + (1.0-v0.m_x) * m_dl; to.inv_bn_map( v0, r1 ); this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d0 = x*x + y*y; do { r1.m_x += dx; this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d = x*x + y*y; if ( d < d0 ) { d0 = d; } else { r1.m_x -= dx; dx = -dx/2; } r1.m_y += dy; this->backward( r1, p1 ); x = p.m_x - p1.m_x; y = p.m_y - p1.m_y; d = x*x + y*y; if ( d < d0 ) { d0 = d; } else { r1.m_y -= dy; dy = -dy/2; } } while ( d0 > 1.e-6 && fabs(dx) > 1.e-3 && fabs(dy) > 1.e-3); ret = r1; } #ifdef DEBUG /** debug: print */ template< > void plaquette_pair::print() const { thprintf("[%d] Plaquette A %6.2f %6.2f <-> %6.2f %6.2f\n", nr(), from.m_A.m_x, from.m_A.m_y, to.m_A.m_x, to.m_A.m_y ); thprintf(" B %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_B.m_x, from.m_B.m_y, to.m_B.m_x, to.m_B.m_y ); thprintf(" C %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_C.m_x, from.m_C.m_y, to.m_C.m_x, to.m_C.m_y ); thprintf(" D %6.2f %6.2f <-> %6.2f %6.2f\n", from.m_D.m_x, from.m_D.m_y, to.m_D.m_x, to.m_D.m_y ); print_ngbhs(); } #endif } // namespace warp } // namespace therion therion-5.4.1/thwarppme.h000066400000000000000000001302021307545355600153640ustar00rootroot00000000000000/** * @file thwarppme.h * * @author marco corvi * @date mar 2007 * * Transformation structures for warping plaquette algorithm */ /* Copyright (C) 2007 marco corvi * * $Date: $ * $RCSfile: $ * $Revision: $ * * -------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -------------------------------------------------------------------- */ #ifndef thwarppme_h #define thwarppme_h #define THERION #include "thwarppdef.h" #ifdef THERION #include "therion.h" // thprintf #else #define thprintf printf #endif #include "thtrans.h" #define THWARP_NGBH_DIM 3 #define THWARP_PAIR_DIM 4 // apparently it takes the same time ... // #define MORPH_USE_IS_INSIDE namespace therion { namespace warp { struct line; // forward declaration struct point_pair; // forward declaration #ifdef MORPH_USE_IS_INSIDE /** check if a vector is inside other two * @param sbp sign of the angle between the first vector and the given vector * @param scp sign of the angle between the second vector and the given vector * @param less_then_pi whether the angle between the two vectors is less than PI * @return true if the given vector is inside the angle of the two vectors *
  dots (false) and commas (true) for the position of C 

      ,,,,,P                      P ..... <-- less_then_pi
      ,,,,,|                      | .....
 [1]  -----+------ B    [2]  -----+------- B
      ,,,,,|                      | ,,,,, 
      ,,,,,|                      | ,,,,, <-- not lss_than_pi
 
      .....|                      | ..... <-- less_than_pi
      .....|                      | .....
 [3]  -----+------ B    [4]  -----+------- B
      .....|                      | ,,,,, 
      .....P                      P ,,,,, <-- not less_than_pi

*/ inline bool is_inside( double sbp, double scp, bool less_then_pi = true ) { if ( sbp > 0.0 ) { if ( scp <= 0.0 ) return true; // [1] return ! less_then_pi; // [2] } else { if ( scp > 0.0 ) return false; // [3] return ! less_then_pi; // [4] } return true; } #endif // MORPH_USE_IS_INSIDE /** compute the angle between two vectors * @param v1 first vector * @param v2 second vector * @return vector between v2 and v1 [radians] */ inline double angle( const thvec2 & v1, const thvec2 & v2 ) { double c = v1 * v2; double s = v2 ^ v1; return atan2( s, c ); } /** compute ... * @param a ... * @param x ... * @param u ... */ double compute_vertical( double a, thvec2 & x, thvec2 & u ); /** compute the squared distance from a segment * @param x input vector * @param b first endpoint of the segment * @param c second endpoint of the segment */ double compute_segment_distance2( const thvec2 & x, const thvec2 & b, const thvec2 & c ); /** extra point and line inserter */ class inserter { public: /** dstr */ virtual ~inserter() {} /** add and extra line * @param p1 first line endpoint * @param index ... * @param x3 "from" image coords of the second endpoint * @param u3 "to" image coords of the second endpoint * @return pointer to the new line */ virtual line * add_extra_line( point_pair * p1, size_t index, thvec2 & x3, thvec2 & u3 ) = 0; }; /** * a pair of points in the sketch and in the survey * into correspondence */ struct point_pair { morph_type m_type; //!< point pair type bool m_used; //!< whether this pair has been used in making the plaquettes std::string m_name; //!< station (or whatever) name thvec2 x; //!< sketch coords thvec2 u; //!< survey coords thvec2 z; //!< sketch reduced coords thvec2 w; //!< survey reduced coords private: std::vector< line * > mLines; //!< lines joining this point size_t m_legs; //!< number of legs public: /** cstr * @param t type of the point_pair * @param n name of the point_pair (naming must follow a strict convention) * @param x1 X coord in the sketch image * @param y1 Y coord in the sketch image * @param u1 X coord in the survey * @param v1 Y coord in the survey */ point_pair( morph_type t, std::string & n, double x1, double y1 , double u1, double v1 ) : m_type( t ) , m_name( n ) , x( x1, y1 ) , u( u1, v1 ) , m_legs( 0 ) { } /** cstr * @param t type of the point_pair * @param n name of the point_pair (naming must follow a strict convention) * @param x1 X coord in the sketch image * @param y1 Y coord in the sketch image * @param u1 X coord in the survey * @param v1 Y coord in the survey */ point_pair( morph_type t, const char * n, double x1, double y1 , double u1, double v1 ) : m_type( t ) , m_name( n ) , x( x1, y1 ) , u( u1, v1 ) , m_legs( 0 ) { } /** add a line (pointer) to the array of lines * @param line line (pointer) */ void add_line( line * line ); /** reorder (counter)clockwise the lines around the point * @param warper new point_pair/line inserter * @param x_u ratio X_unit / U_unit * @param proj projection type */ void order_lines( inserter * warper, double x_u, warp_proj proj ); /** update: compute scaled coordinates * @param ... */ void update( thvec2 & x0, double xunit, thvec2 & u0, double uunit ); /** get the index of the node (the number of lines) * @return the number of lines at this node */ size_t size() const { return mLines.size(); } /** get the number of centerline legs at the point * @return the number of centerline legs at this node */ size_t legs() const { return m_legs; } /** get the "first" leg line * return the first leg line (NULL if none) */ line * first_leg(); /** get the next line around the point * @param line given line (NULL to get the first line) * @return the line next to the given one (NULL if at the end of the lines) */ line * next_line( line * line ) { size_t sz = mLines.size(); if ( line == NULL ) { return ( sz > 0 ) ? mLines[0] : NULL; } for (size_t j=0; jP2) thvec2 vw; //!< unit vector in W double z_w; // dz / dw double w_z; // dw / dz // thmat2 R; //!< rotation matrix R(from->to) // thmat2 S; //!< rotation matrix R(to->from) /** cstr * @param t morph type of the line * @param p1 first point pair * @param p2 second point pair * * @note as a side effect this line (pointer) is added to the two points */ line( morph_type t, point_pair * p1, point_pair * p2 ); /** update reduced parameters of the line */ void update(); /** get the other end of the line * @param end one end of the line * @return the other end (NULL if end is not an end of this line) */ point_pair * other_end( point_pair * end ) { if ( end == m_p1 ) return m_p2; if ( end == m_p2 ) return m_p1; return NULL; } }; // -------------------------------------------------------------- /** base class for single-image warping items */ struct item { protected: double m_theta_l; //!< left angle double m_theta_r; //!< right angle public: /** default cstr is fine */ /** dstr must be virtual */ virtual ~item() { } /** get the value of the left angle * @return the left angle [radians] */ double theta_left() const { return m_theta_l; } /** get the value of the right angle * @return the right angle [radians] */ double theta_right() const { return m_theta_r; } /** check if a point is inside * @param p 2D point * @param bound boundary size * @return true if the point is inside */ virtual bool is_inside( const thvec2 & p, double bound ) const = 0; /** compute the distance of a point from the item * @param p 2D point * @return the distance */ virtual double distance( const thvec2 & p ) const = 0; /** B-N distance from the item * @param p 2D point * @return the B-N distance * virtual double bn_distance( const thvec2 & p ) const = 0; */ /** */ virtual double distance2( const thvec2 & p ) const = 0; /** bounding box for the item * @param t1 minimum values (output) * @param t2 maximum values (output) * @param bound item boundary size */ virtual void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const = 0; virtual double s_map( const thvec2 & p ) const = 0; /** S-T map * @param p input point * @return transformed coordinates */ virtual void st_map( const thvec2 & p, thvec2 & ret ) const = 0; /** inverse S-T map * @param coordinates in trasformed domain * @return 2D point */ virtual void inv_st_map( const thvec2 & p, thvec2 & ret ) const = 0; virtual double sm_map( const thvec2 & p, thvec2 & ret ) const = 0; virtual void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const = 0; /** B-N map * @param p input point * @return transformed coordinates */ virtual void bn_map( const thvec2 & p, thvec2 & ret ) const = 0; /** inverse B-N map * @param coordinates in trasformed domain * @return 2D point */ virtual void inv_bn_map( const thvec2 & p, thvec2 & ret ) const = 0; /** rotate a point around the left corner * @param p input point * @param ret rotated point * @param c cosine of the rotation angle * @param s sine of the rotation angle */ virtual void left_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const = 0; /** rotate a point around the right corner * @param p input point * @param ret rotated point * @param c cosine of the rotation angle * @param s sine of the rotation angle */ virtual void right_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const = 0; }; // class item // -------------------------------------------------------------- // warping feature elements /** * abstract class of a warping feature basic_pair. * All warping basic_pair have one "missing" side and are * "extends" across that side by an amount specified be the * basic_pair's "bound" */ class basic_pair { private: int m_nr; //!< the basic_pair nr static int basic_pair_nr; //!< global counter for the basic_pairs protected: double m_bound; //!< this basic_pair bound public: basic_pair * m_ngbh[THWARP_NGBH_DIM]; //!< this basic_pair neighbors point_pair * m_pair[THWARP_PAIR_DIM]; //!< pointer to the point_pairs double m_ndist[THWARP_NGBH_DIM]; //!< neighbors distances double m_kl; //!< left angle differences (from - to) double m_kr; //!< right angle differences (from - to) double m_dl; //!< left end-size ratio (from/to) double m_dr; //!< right end-size ration (from/to) public: /** cstr * @param bound boundary size */ basic_pair( double bound ) : m_nr( ++basic_pair_nr ) , m_bound( bound ) , m_kl( 0.0 ) , m_kr( 0.0 ) , m_dl( 1.0 ) , m_dr( 1.0 ) { for (int k=0; knr() ); } thprintf("\n"); } #endif }; // class basic_pair // ---------------------------------------------------------------- /** a pair of items, one in the "from" image, one in the "to" image */ template< typename T > struct item_pair : public basic_pair { T from; //!< item in the "from" image T to; //!< item in the "to" image // double m_kl, m_kr; // of basic_pair /** cstr from three point pairs * @param a first point pair * @param b second point pair * @param c third point pair * @param bound boundary size (default TRIANGLE boundary size) */ item_pair( point_pair * a, point_pair * b, point_pair * c, double bound = BOUND_TRIANGLE ); /** cstr from four point pairs * @param a first point pair * @param b second point pair * @param c third point pair * @param d fourth point pair * @param bound boundary size (default PLAQUETTE boundary size) */ item_pair( point_pair * a, point_pair * b, point_pair * c, point_pair * d, double bound = BOUND_PLAQUETTE ); /** override basic_pair::pfrom() * @return pointer to the "from" item */ const item * pfrom() const { return dynamic_cast(&from); } item * pfrom() { return dynamic_cast(&from); } /** override basic_pair::pto() * @return pointer to the "to" item */ const item * pto() const { return dynamic_cast(&to); } item * pto() { return dynamic_cast(&to); } /** override basic_pair::type() * @return the warp type of this basic_pair */ warp_type type() const; /** override basic_pair::ngbh_nr() * @return the number of neighbors of this basic_pair */ int ngbh_nr() const; #ifdef DEBUG /** override basic_pair::print() */ void print() const; #endif /** set the projection info * @param proj projection type */ void set_projection( warp_proj proj ); /** compute the forward map of a point * @param p 2D point in the "from" image * @return point coords in the "to" image * * @note in VERSION 0.5.1: * for triangle: * from.bn_map() * to.inv_bn_map() * now it is an iterative process * for plaquette: an iterative process (same as now) */ void forward( const thvec2 & p, thvec2 & ret ) const; /** compute the backward map of a point * @param p 2D point in the "to" image * @param ret point coords in the "from" image * * @note in VERSION 0.5.1: * for triangle: * to.bn_map() * from.inv_bn_map() * the closest to this is backward_normal_no_bd * for plaquette: * backward_normal_bd() with MORPH_BD == 0.5 */ void backward( const thvec2 & p, thvec2 & ret ) const { backward_normal_bd( p, ret ); } /** backward() methods (0.5.2) */ void backward_normal_bd( const thvec2 & p, thvec2 & ret ) const; /** check if a point is inside this basic_pair in the "from" image * @param p 2D point in the "from" image * @return true if the point is in this basic_pair */ bool is_inside_from( const thvec2 & p ) const { return from.is_inside( p, m_bound ); } /** check if a point is inside this basic_pair in the "to" image * @param p 2D point in the "to" image * @return true if the point is in this basic_pair */ bool is_inside_to( const thvec2 & p ) const { return to.is_inside( p, m_bound ); } /** get the distance of a point in the "from" domain * @param p 2d point * @return distance of the point in the "from" domain */ double distance_from( const thvec2 & p ) const { return from.distance( p ); } /** get the distance of a point in the "to" domain * @param p 2d point * @return distance of the point in the "to" domain */ double distance_to( const thvec2 & p ) const { return to.distance( p ); } /** double bn_distance_from( const thvec2 & p ) const { return from.bn_distance( p ); } double bn_distance_to( const thvec2 & p ) const { return to.bn_distance( p ); } */ /** sqaured distance in the "to" image * @param p input 2D point * @return squared distance */ double distance2_to( const thvec2 & p ) const { return to.distance2( p ); } /** compute the bounding box in the "to" image * @param t1 upper left corner (output) * @param t2 lower right corner (output) */ void bounding_box_to( thvec2 & t1, thvec2 & t2 ) const { to.bounding_box( t1, t2, m_bound ); } /** left rotate in the "to" item (0.5.2) * @param p input 2D vector * @param ret return vector * @param x rotation angle */ void left_rotate_to( const thvec2 & p, thvec2 & ret, double x ) const { thvec2 pa; double t = m_kl * x; to.left_rotate( p, pa, cos(t), -sin(t) ); to.bn_map( pa, ret ); } /** right rotate in the "to" item (0.5.2) * @param p input 2D vector * @param ret return vector * @param x rotation angle */ void right_rotate_to( const thvec2 & p, thvec2 & ret, double x ) const { thvec2 pa; double t = m_kr * x; to.right_rotate( p, pa, cos(t), sin(t) ); to.bn_map( pa, ret ); } }; // class item_pair // --------------------------------------------------------------------- /** a triangle. * * The geometry is *
     *     + - - - - - +
     *      \         /
     *       C - - - B
     *        \     /
     *         \   /
     *          \ /
     *           A
     * 
* The bounds applies to the extension across the side CB. * C is the left vertex, B is the right vertex. * The order of the points is C-A-B * * A triangle is an "angle". The mapping is a linear map in polar * coordinates: *
     *   theta --> theta' = (theta/theta_0) * theta'_0
     *   rho   --> rho'   = (rho/rho_0) * rho'_0
     * 
* theta_0 and theta'_0 are the size of the two angles in the "from" and "to" * image, respectively. * rho_0 and rho'_0 are the radial dimensions of the angles. They depend on * theta, as they are linearly interpolated between the two angle sides. */ struct triangle : public item { thvec2 m_A, m_B, m_C; //!< corners of the triangle (vertex, right, left) double m_ab; //!< distance AB double m_ac; //!< distance AC double m_abc; //!< max between m_ab and m_ac double m_d; //!< distances difference: AB - AC double m_t; //!< theta = angle from AC to AB double m_ct; //!< cosine of theta double m_st; //!< sine of theta double m_dt; //!< m_d/m_t; thvec2 m_AB; //!< unit vector along AB thvec2 m_AC; //!< unit vector along AC thvec2 m_AB1; //!< unit vector orthogonal to AB thvec2 m_AC1; //!< unit vector orthogonal to AC bool m_ltpi; //!< "less than pi": whether theta is less than pi /** cstr * @note there is aproblem if the three points are aligned, * ie, A ^ (B-C) = 0, because the matrix M1 is not invertible. */ triangle( thvec2 & a, thvec2 & b, thvec2 & c ) : m_A( a ) , m_B( b ) , m_C( c ) , m_AB( b.m_x - a.m_x, b.m_y - a.m_y ) , m_AC( c.m_x - a.m_x, c.m_y - a.m_y ) { double xb = m_AB.m_x; double yb = m_AB.m_y; double xc = m_AC.m_x; double yc = m_AC.m_y; m_ab = sqrt(xb*xb + yb*yb); m_ac = sqrt(xc*xc + yc*yc); m_abc = (m_ab > m_ac)? m_ab : m_ac; m_d = m_ab - m_ac; m_st = yb * xc - xb * yc; m_ct = xb * xc + yb * yc; m_t = atan2( m_st, m_ct ); m_dt = m_d / m_t; m_AB.normalize(); m_AC.normalize(); m_AB1.m_x = m_AB.m_y; m_AB1.m_y = - m_AB.m_x; m_AC1.m_x = m_AC.m_y; m_AC1.m_y = - m_AC.m_x; m_ltpi = m_st > 0.0; m_theta_l = m_theta_r = m_t; // m_theta_l = m_theta_r = angle( m_AB, m_AC ); // thprintf("Triangle A %.2f %.2f B %.2f %.2f C %.2f %.2f\n", // a.m_x, a.m_y, b.m_x, b.m_y, c.m_x, c.m_y ); // thprintf(" AB %.2f AC %.2f Theta %.2f\n", m_ab, m_ac, m_t ); } /** map a point to polar coordinates (AB is the X-axis) * @param p input point * @return polar coords (theta, rho) * * rho is the normalized radial coordinate * theta is the normalized angular coordinate * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ void to_polar( const thvec2 & p, thvec2 & ret ) const { double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; ret.m_x = atan2(st,ct) / m_t; ret.m_y = sqrt(xp*xp + yp*yp); } /** compute a point from its polar coords * @param p input point (polar coords) * @return cartesiona coord of the point * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ void from_polar( const thvec2 & p, thvec2 & ret ) const { double r = p.m_y; // rho double t = m_t * p.m_x; // theta double c = r * cos(t); // along AB double s = r * sin(t); // across AB ret.m_x = m_A.m_x + m_AC.m_x * c - m_AC1.m_x * s; ret.m_y = m_A.m_y + m_AC.m_y * c - m_AC1.m_y * s; } /** check if a point is inside the triangle * @param p 2D point * @param bound size of the item * @return true if the point is inside * * @note in VERSION 0.5.1: not MORPH_USE_IS_INSIDE and MORPH_USE_TRI_F */ bool is_inside( const thvec2 & p, double bound ) const { #ifdef MORPH_USE_IS_INSIDE thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y ); double sbp = - m_AB.m_x * ap.m_y + m_AB.m_y * ap.m_x; double scp = - m_AC.m_x * ap.m_y + m_AC.m_y * ap.m_x; if ( ! therion::warp::is_inside( sbp, scp, m_ltpi ) ) return false; double t = ap.m_x*ap.m_x + ap.m_y*ap.m_y; #else // the following is adapted from to_polar() code // // thvec2 p1; // to_polar( p, p1 ); // return p1.m_x >= 0.0 && p1.m_x <= 1 && p1.m_y < bound; // double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; // double s = atan2(st,ct); // if ( s > m_t ) return false; if ( st < 0 ) return false; if ( m_st*ct < m_ct*st ) return false; double t = xp*xp + yp*yp; #endif double f = m_abc*bound; return ( t >= 0.0 && t < f*f ); } /** distance of a 2D point from the triangle * @param p 2D point * @return the distance */ double distance( const thvec2 & p ) const { thvec2 p1 = p - m_A; return p1.length(); } /** line distance of apoint from the triangle * @param p 2D point * @return the line distance * double bn_distance( const thvec2 & p ) const { double x = p.m_x - m_A.m_x; double y = p.m_y - m_A.m_y; return x*x + y*y; } */ /** square distance of a point * @param p input 2D point * @return square distance of the point from the vertex * * @note in VERSION 0.5.1: MORPH_USE_TRI_F */ double distance2( const thvec2 & p ) const { thvec2 p1; to_polar( p, p1 ); if ( p.m_x < 0.0 || p.m_x > 1.0 ) return 1.e+12; // INFINITY; double d = p.m_y; return d*d; } /** compute the bounding box of the triangle * @param t1 lower-left corner of the bounding box * @param t2 upper-right corner of the bounding box * @param bound "vertical" size of the bounding box */ void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const { #if 1 thvec2 b = m_B - bound * (m_A - m_B); thvec2 c = m_C - bound * (m_A - m_C); t1 = m_A; t1.minimize( b ); t1.minimize( c ); t2 = m_A; t2.maximize( b ); t2.maximize( c ); #else // TODO #endif } /** (0.5.2) * @param p input 2D point * @return S value in st_map */ double s_map( const thvec2 & p ) const { double xp = p.m_x - m_A.m_x; double yp = p.m_y - m_A.m_y; double st = m_AC.m_x * yp - m_AC.m_y * xp; double ct = m_AC.m_x * xp + m_AC.m_y * yp; return atan2(st,ct) / m_t; } /** s-t map for the triangle * @param p input 2D point * @param ret return s-t coordinates (polar coordinates) */ void st_map( const thvec2 & p, thvec2 & ret ) const { to_polar(p, ret); } /** inverse s-t map for the triangle * @param p input s-t (= polar) coordinates * @param ret return 2D point */ void inv_st_map( const thvec2 & p, thvec2 & ret ) const { from_polar(p, ret); } /** (0.5.2) */ double sm_map( const thvec2 & p, thvec2 & ret ) const; /** (0.5.2) */ void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const; /** Beier-Neely map for the triangle * @param p input 2D point * @param ret return B-N coordinates (polar coordinates) */ void bn_map( const thvec2 & p, thvec2 & ret ) const { to_polar(p, ret); } /** inverse Beier-Neely map for the triangle * @param p input B-N (= polar) coordinates * @param ret return 2D point */ void inv_bn_map( const thvec2 & p, thvec2 & ret ) const { from_polar(p, ret); } /** rotate a point about the "left" corner * @param p input point * @param ret rotated point (actually p itself) * @param c cosine of the rotation angle * @param s sine of the rotation angle * * @note in VERSION 0.5.1: ret was return instead of param */ void left_rotate( const thvec2 & p, thvec2 & ret, double /* c */, double /* s */) const { ret = p; } /** rotate a point about the "right" corner * @param p input point * @param ret rotated point (actually p itself) * @param c cosine of the rotation angle * @param s sine of the rotation angle * * @note in VERSION 0.5.1: ret was return instead of param */ void right_rotate( const thvec2 & p, thvec2 & ret, double /* c */, double /* s */) const { ret = p; } }; // class triangle // ---------------------------------------------------------------------- /** four corners plaquette (quadrilater) * * The geometry is *
  
     *        + - - - - - - +
     *        |             |
     *     <- D - - - - - - C ->
     *        |             |
     *        A ----------- B
     * <\PRE>
     * The bound applies to the extension across the side CD
     * The order of the pairs is D-A-B-C
     *
     * @see P.S. Heckbert "Fundamentals of Texture Mapping and Image Warping"
     *      UCA Berkeley, 1989
     *
     * @note projective transform is not fine because it is not linear on the
     *       sides and this introduces 0-order discontinuities on the plaquette
     *       borders.
     */
    
    struct plaquette : public item
    {
      public:
        thvec2 m_A, m_B, m_C, m_D;  //!< vertices of the plaquette
    
        thvec2 m_AD;                //!< vector AD: A - D
        thvec2 m_BC;                //!< vector BC: B - C
	thvec2 m_adn;               //!< unit vector AD
	thvec2 m_bcn;               //!< unit vector BC
	thvec2 m_abn;               //!< unit vector from A to B
        thvec2 m_abh;               //!< unit orthogonal vector
        double m_AB_len;            //!< length of AB

        double m_a, m_b, m_c, m_d, m_e, m_f, m_g, m_h; 
        double m_A0, m_B0, m_C0;
        double m_D0, m_E0, m_F0;

        double m_adab;   //!< ad ^ ab
        double m_bcab;   //!< bc ^ ab
        double m_adA;    //!< ad ^ A
        double m_bcB;    //!< bc ^ B
        thvec2 m_AB;     //!< vector AB = B - A
	thvec2 m_BA;     //!< vector BA (= -m_AB)
        thvec2 m_C1;
        thvec2 m_C1C;

        double m_AD_len;  //!< length of AD
        double m_BC_len;  //!< length of BC

        double m_tan, m_ctg, m_cos, m_sin; // coeff for the "normal" direction

	double (plaquette::* s_map_impl)( const thvec2 & p ) const;
        void (plaquette::* bn_map_impl)( const thvec2 & p, thvec2 & ret ) const;
        void (plaquette::* inv_bn_map_impl)( const thvec2 & p, thvec2 & ret ) const;
   
      public:
        /** cstr
	 * @param a   A vertex
	 * @param b   B vertex
	 * @param c   C vertex
	 * @param d   D vertex
	 */
        plaquette( thvec2 & a, thvec2 & b, thvec2 & c, thvec2 & d )
          : m_A( a )
          , m_B( b )
          , m_C( c )
          , m_D( d )
        { 
	  s_map_impl = &therion::warp::plaquette::s_map_straight;
	  bn_map_impl = &therion::warp::plaquette::bn_map_straight;
	  inv_bn_map_impl = &therion::warp::plaquette::inv_bn_map_straight;

          init();
        }

	/** compute the S coordinate of the ST map
	 * @param p input 2d point
	 * @return s coordinate value
	 *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: s_map == s_map_straight
	 */
	double s_map( const thvec2 & p ) const
	{
	  return (this ->* s_map_impl)(p);
	}

        /** s-maps() (0.5.2)
	 */
	double s_map_straight( const thvec2 & p ) const;
	double s_map_slant( const thvec2 & p ) const;


	/** compute the T coordinate of the ST map
	 * @param p input 2d point
	 * @return t coordinate value
	 *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: unchanged
	 */
	double t_map( const thvec2 & p ) const;
    
        /** map a point to plaquette (s,t) coordinates
         * @param p 2D point
         * @return plaquette (s,t) coordinates of the point
         *
         * @pre the point should lie inside the plaquette
	 * @note in VERSION 0.5.1: unchanged
         */
        void st_map( const thvec2 & p, thvec2 & ret ) const;

        /** inverse map plaquette (s,t) coordinates to point
         * @param p plaquette (s,t) coordinates of the point
         * @return 2D point
	 *
	 * @note in VERSION 0.5.1: unchanged
         */
        void inv_st_map( const thvec2 & p, thvec2 & ret ) const;

        /** sm-maps (0.5.2)
         * @return fourth power of the distance
         */
        double sm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_sm_map( const thvec2 & p, thvec2 & ret, double d4 ) const;

        /** h-v map
         * @param  p 2D point
         * @param ret 2D return point (x: coord. along AB, y: vertical)
         */
        void hv_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_hv_map( const thvec2 & p, thvec2 & ret ) const;

        void vh_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_vh_map( const thvec2 & p, thvec2 & ret ) const;

        void hvm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_hvm_map( const thvec2 & p, thvec2 & ret ) const;

        void vhm_map( const thvec2 & p, thvec2 & ret ) const;
        void inv_vhm_map( const thvec2 & p, thvec2 & ret ) const;


        /** Beier-Neely map
	 * @param p input point
	 * @return B-N transformed point
	 *
	 * map a point P into 
	 * - x = normalized projection along AB (A=0, B=1)
	 * - y = un-normalized distance from the line AB
	 *
	 * @note in VERSION 0.5.1: bn_map == bn_map_straight
	 */
        void bn_map( const thvec2 & p, thvec2 & ret ) const
	{
	  (this->*bn_map_impl)( p, ret );
	}

        /** inverse Beier-Neely map
	 * @param p input point (B-N coordinates)
	 * @return 2D point
	 *
	 * @note in VERSION 0.5.1: inv_bn_map == inv_bn_map_straight
	 */
        void inv_bn_map( const thvec2 & p, thvec2 & ret ) const
	{
	  (this->*inv_bn_map_impl)( p, ret );
	}

        /** bn-maps() (0.5.2)
	 */
        void bn_map_straight( const thvec2 & p, thvec2 & ret ) const;
        void bn_map_slant( const thvec2 & p, thvec2 & ret ) const;

        void inv_bn_map_straight( const thvec2 & p, thvec2 & ret ) const;
        void inv_bn_map_slant( const thvec2 & p, thvec2 & ret ) const;

        /** rotate a point around the "left" (A) corner
	 * @param p input point
	 * @param ret rotated point
	 * @param c cosine of the rotation angle
	 * @param s sine of the rotation angle
	 */
	void left_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const
	{
	  double x = p.m_x - m_A.m_x;
	  double y = p.m_y - m_A.m_y;
	  ret.m_x = m_A.m_x + x * c - y * s;
	  ret.m_y = m_A.m_y + x * s + y * c;
	}

        /** rotate a point around the "right" (B) corner
	 * @param p input point
	 * @param ret rotated point
	 * @param c cosine of the rotation angle
	 * @param s sine of the rotation angle
	 */
	void right_rotate( const thvec2 & p, thvec2 & ret, double c, double s ) const
	{
	  double x = p.m_x - m_B.m_x;
	  double y = p.m_y - m_B.m_y;
	  ret.m_x = m_B.m_x + x * c - y * s;
	  ret.m_y = m_B.m_y + x * s + y * c;
	}
    
        /** check if a point is inside the plaquette
         * @param p   2D point
         * @param bound  size of the item
         * @return true if the point is inside
	 *
	 * @note in VERSION 0.5.1: st_map (ie not MORPH_USE_IS_INSIDE)
         */
        bool is_inside( const thvec2 & p, double bound ) const 
        {
          // thvec2 v;
	  // st_map( p, v );
          // if ( v.is_nan() ) return false;
          // return v.m_x >= 0.0 && v.m_x <= 1.0 && v.m_y >= 0.0 && v.m_y < bound;

#ifdef MORPH_USE_IS_INSIDE
          thvec2 ap( p.m_x - m_A.m_x, p.m_y - m_A.m_y );
          double sbp = - m_AB.m_x * ap.m_y + m_AB.m_y * ap.m_x;
          double scp = - m_AD.m_x * ap.m_y + m_AD.m_y * ap.m_x;
	  if ( ! therion::warp::is_inside( sbp, scp ) ) return false;
	  scp = - sbp;
	  thvec2 bp( p.m_x - m_B.m_x, p.m_y - m_B.m_y );
	  sbp = - m_BC.m_x * bp.m_y + m_BC.m_y * bp.m_x;
	  if ( ! therion::warp::is_inside( sbp, scp ) ) return false;
	  double c = ap * m_abn;
	  // ap -= c * m_abn;
	  ap.m_x -= c * m_abn.m_x;
	  ap.m_y -= c * m_abn.m_y;
	  bound *= m_AB_len;
	  double t = ap.m_x*ap.m_x + ap.m_y*ap.m_y - bound*bound;
          return ( t < 0.0 );
#else
          // the following is the st_map code
          double s;
          double ex_ay = m_e * p.m_x - m_a * p.m_y;
          double A = m_A0;
          double B = (ex_ay + m_B0)/2.0;
          double C = m_g * p.m_x - m_c * p.m_y + m_C0;
          if ( fabs(A) < 1.e-6 ) {
	    if ( B == 0.0 ) return false;
            s = - C / (2*B);
            if ( s < 0 || s > 1 ) return false;
	  } else {
	    if ( A < 0.0 ) { A=-A; B=-B; C=-C; }
	    // now A > 0
	    if ( C > 0 ) { // det < B
	      if ( B > 0 ) return false;     // neg. solutions
	      if ( B*B < A*C ) return false; // neg. det
	      // s = (-B-det)/A > 1
	      //     |B|-det > A
	      //     |B|-A > det
	      //     B*B - 2 |B| A + A*A > det^2 = B*B - A C
	      //     A * ( A + 2 B + C ) > 0
	      if ( A+2*B+C > 0 ) return false;
              s = (- B - sqrt(B*B-A*C) )/A;
	    } else { // det > B
	      // s = (det - B)/A > 0
	      if ( A + 2*B + C < 0 ) return false;
              s = (sqrt(B*B-A*C) - B)/A;
	    }
          }
          double t = ( p.m_x - m_b * s - m_d ) / ( m_a * s + m_c );
	  return ( t >= 0.0 && t < bound );
#endif
        }

        /** distance of a point from the plaquette
         * @param p 2D point
         * @return the distance
	 *
	 * @pre p is inside the plaquette
	 * this could be any reasonable distance function
         */
        double distance( const thvec2 & p ) const
        {
          return t_map( p );
        }

	/** Beier-Neely distance
	 * @param p 2D point
	 * @return the B-N distance
	 *
	double bn_distance( const thvec2 & p ) const
	{
	  thvec2 ap = p - m_A;
	  double d = ap * m_abn;
	  if ( d >= 0 ) {
	    if ( d < m_AB_len ) 
	      return ( ap.length2() - d*d );
	    double x = p.m_x - m_B.m_x;
	    double y = p.m_y - m_B.m_y;
	    return x*x + y*y;
	  }
	  double x = p.m_x - m_A.m_x;
	  double y = p.m_y - m_A.m_y;
	  return x*x + y*y;
	}
	 */
    
        double distance2( const thvec2 & p ) const
        {
          thvec2 v;
	  st_map( p, v );
          if ( v.m_y < 0.0 || v.m_x < 0.0 || v.m_x > 1.0 ) return 1.e+12; // INFINITY;
          if ( v.m_y < 1.0 ) return 0.0;
          return compute_segment_distance2( p, m_D, m_C );
        }
   
        /** compute the bounding box of the plaquette
	 * @param t1 lower-left corner of the bounding box
	 * @param t2 upper-right corner of the bounding box
	 * @param bound  "vertical" size of the bounding box
	 */
        void bounding_box( thvec2 & t1, thvec2 & t2, double bound ) const
	{
          thvec2 c = m_B + bound * m_BC;
          thvec2 d = m_A + bound * m_AD;
          t1 = m_A;
          t1.minimize( m_B );
          t1.minimize( c );
          t1.minimize( d );
          t2 = m_A;
          t2.maximize( m_B );
          t2.maximize( c );
          t2.maximize( d );
	}

      private:
        /** initialize the plaquette
         */
        void init();

    }; // class plaquette

// ****************************************************************
// PAIRS
//
    typedef item_pair< triangle > triangle_pair;
    typedef item_pair< plaquette > plaquette_pair;

    
  } // namespace warp

} // namespace therion

// *****************************************************************
// backward compatibility
//
#ifdef THERION
  typedef therion::warp::point_pair thmorph_pair;
  typedef therion::warp::line thmorph_line;
#endif


#endif
therion-5.4.1/thwarppt.cxx000066400000000000000000000604521307545355600156120ustar00rootroot00000000000000/** @file thwarppt.cxx
 * 
 * @author marco corvi
 * @date   nov 2006 - mar 2007
 * 
 * @brief warping plaquette algorithm transform implementation
 */
/* Copyright (C) 2006-2007 marco corvi
 * 
 * $Date: $
 * $RCSfile: $
 * $Revision: $
 *
 * -------------------------------------------------------------------- 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * --------------------------------------------------------------------
 */
#include 
#include 
#include 
#include 

#include "thwarppt.h"

#ifndef M_PI
#define M_PI       3.14159265358979323846
#endif

typedef unsigned int warpp_t;
const warpp_t ngbh_mask = ((warpp_t)(0x7))<<(8*sizeof(warpp_t)-3);
const warpp_t indx_mask = ~ngbh_mask;


therion::warp::plaquette_algo::plaquette_algo( )
  : m_initialized( false )
  , m_bound3( BOUND_TRIANGLE )
  , m_bound4( BOUND_PLAQUETTE )
{ 
}

therion::warp::plaquette_algo::plaquette_algo( double bound3, double bound4 )
  : m_initialized( false )
  , m_bound3( bound3 )
  , m_bound4( bound4 )
{ 
}

therion::warp::plaquette_algo::~plaquette_algo( )
{
  reset();
}

void 
therion::warp::plaquette_algo::reset( )
{
  for (size_t i=0; im_name == from ) { p1 = mPairs[i]; if (p2) break; }
    if ( mPairs[i]->m_name == to   ) { p2 = mPairs[i]; if (p1) break; }
  }
  if ( p1 == NULL || p2 == NULL ) throw;
  mLines.push_back( new therion::warp::line( t, p1, p2 ) );
}

#ifdef DEBUG
void
therion::warp::plaquette_algo::print()
{
  printf("Plaquette algo: P.nr %d L.nr %d\n", mPairs.size(), mLines.size() );
  printf("  X origin %.2f %.2f units %.4f\n", mX0.m_x, mX0.m_y, mXUnit );
  printf("  U origin %.2f %.2f units %.4f\n", mU0.m_x, mU0.m_y, mUUnit );
  printf("  UC origin %.2f %.2f units %.2f\n", mUC.m_x, mUC.m_y, mUCUnit);

  for ( size_t i=0; im_name.c_str(), mPairs[i]->m_type, 
      mPairs[i]->u.m_x, mPairs[i]->u.m_y, mPairs[i]->x.m_x, mPairs[i]->x.m_y );
  }
  for ( size_t i=0; im_p1->m_name.c_str(),
      mLines[i]->m_p2->m_name.c_str(), mLines[i]->m_type );
  }
  for ( size_t i=0; iprint();
}
#endif

bool
therion::warp::plaquette_algo::initialize( warp_proj proj )
{
  if ( mPairs.size() < 2 )
    return false;

  if ( ! m_initialized ) {
    // thprintf("plaquette_algo::initialize() \n");
    size_t sz = mPairs.size();

    // bounding box
    thvec2 xmin( mPairs[0]->x );
    thvec2 xmax( xmin );
    thvec2 umin( mPairs[0]->u );
    thvec2 umax( umin );

    for ( size_t k=1; kx );
      xmax.maximize( mPairs[k]->x );
      umin.minimize( mPairs[k]->u );
      umax.maximize( mPairs[k]->u );
    }
    mX0 = (xmin + xmax) / 2.0;
    mU0 = (umin + umax) / 2.0;

    // units
    mXUnit = (xmax - xmin).length() / 2.0;
    mUUnit = (umax - umin).length() / 2.0;

    // scaled coordinates (relative to the centers)
    for ( size_t k=0; kz = ( mPairs[k]->x - mX0 ) / mXUnit;
        mPairs[k]->w = ( mPairs[k]->u - mU0 ) / mUUnit;
    }
    mUC = mU0;
    mUCUnit = mUUnit;

    update_lines();
    make_plaquettes( proj );

    make_neighbors( );

    /* print topology
    for (unsigned int k=0; knr(), mPlaquettes[k]->left_ngbh()->nr(),
        mPlaquettes[k]->right_ngbh()->nr() );
    }
    */
  
    m_initialized = true;
  }
  return m_initialized;
}

therion::warp::point_pair * 
therion::warp::plaquette_algo::insert_zoom_point(
  morph_type t, std::string & name, 
  const thvec2 src, std::string & from, double size )
{
  size_t k;
  size_t sz = mPairs.size();
  for (k=0; km_name == from ) break;
  }
  if ( k == sz ) {
    thprintf("warning insert_zoom_point() from point \"%s\" not found\n", 
      from.c_str() );
    return NULL;
  }
  double x0 = mPairs[k]->x.m_x;
  double y0 = mPairs[k]->x.m_y;
  thprintf("insert_zoom_point() %s (%.2f %.2f) from %s (%.2f %.2f) distance %.2f\n",
    name.c_str(), src.m_x, src.m_y, from.c_str(), x0, y0, size );

  double x1 = src.m_x - x0;
  double y1 = src.m_y - y0;
  double dd = sqrt( x1*x1 + y1*y1 );
  x1 /= dd;
  y1 /= dd;

  double a1=7.0, a2=7.0;
  point_pair * p1 = NULL; // to the left
  point_pair * p2 = NULL; // to the right
  size_t sl = mLines.size();
  double x2, y2;
  double sa, ca, a;
  for (size_t h=0; hm_type != THMORPH_STATION ) continue;
    point_pair * p;
    if ( mLines[h]->m_p1 == mPairs[k] ) {
      p = mLines[h]->m_p2;
    } else if ( mLines[h]->m_p2 == mPairs[k] ) {
      p = mLines[h]->m_p1;
    } else { 
      continue;
    }
    x2 = p->x.m_x - x0;
    y2 = p->x.m_y - x0;
    dd = sqrt(x2*x2 + y2*y2);
    x2 /= dd;
    y2 /= dd;
    sa = x2*y1 - y2*x1;
    ca = x1*x2 + y1*y2;
    a = atan2( sa, ca );
    if ( a < 0.0 ) a += 2*M_PI;
    if ( a < a1 ) { a1=a; p1=p; }
    a = 2*M_PI - a;
    if ( a < a2 ) { a2=a; p2=p; }
  }
  if ( p1 == NULL || p2 == NULL || p1 == p2 ) return NULL;
  x0 = mPairs[k]->u.m_x;
  y0 = mPairs[k]->u.m_y;

  x1 = p1->u.m_x - x0;
  y1 = p1->u.m_y - y0;
  dd = sqrt( x1*x1 + y1*y1 );
  x1 /= dd;
  y1 /= dd;

  x2 = p2->u.m_x - x0;
  y2 = p2->u.m_y - y0;
  double d2 = sqrt( x2*x2 + y2*y2 );
  x2 /= d2;
  y2 /= d2;
  if ( dd < d2 ) d2 = dd;
  if ( size < d2 / 10 ) return NULL;

  ca = x1*x2 + y1*y2;
  sa = sqrt( 1 - ca );
  ca = sqrt( 1 + ca );

  x0 += ( x2*ca + y2*sa) * size;
  y0 += (-x2*sa + y2*ca) * size;

  thprintf("left %s (%.2f %.2f)  right %s (%.2f %.2f) ==> %.2f %.2f\n",
    p1->m_name.c_str(), p1->u.m_x, p1->u.m_y, p2->m_name.c_str(), p2->u.m_x, p2->u.m_y, x0, y0 );

  point_pair * pair = new point_pair( t, name, src.m_x, src.m_y, x0, y0 );
  mPairs.push_back( pair );
  mLines.push_back( new therion::warp::line( t, mPairs[k], pair ) );
  return pair;
}
    

therion::warp::line *
therion::warp::plaquette_algo::add_extra_line( 
    point_pair * p1, 
    size_t index, 
    thvec2 & x3, 
    thvec2 & u3 )
{
  std::ostringstream ost;
  ost << p1->m_name << "_E_" << index;
  std::string name = ost.str();
  // thprintf("Extra line() point %s %6.2f %6.2f %6.2f %6.2f \n",
  //    name.c_str(), x3.m_x, x3.m_y, u3.m_x, u3.m_y );

  point_pair * p3 = insert_point( THMORPH_EXTRA, name, x3, u3 );
  p3->update( mX0, mXUnit, mU0, mUUnit );
  
  therion::warp::line * l3 = new therion::warp::line( THMORPH_EXTRA, p1, p3 );
  l3->update();
  mLines.push_back( l3 );
  return l3;
}

// ========================================================================

bool
therion::warp::plaquette_algo::forward( 
    const thvec2 & src, 
    thvec2 & dst, 
    const thvec2 & origin, 
    double unit )
{
  thvec2 z = ( src - mX0) / mXUnit;
  size_t szp = mPlaquettes.size();
  double dmin = -1.0;
  size_t imin = (size_t)(-1);
  for ( size_t i=0; iis_inside_from( z ) ) {
      double d = mPlaquettes[i]->distance_from( z );
      if ( thisnan( d ) ) continue;
      if ( imin == (size_t)(-1) || d < dmin ) {
        dmin = d;
        imin = i;
      }
    }
  }
  if ( imin == (size_t)(-1) ) 
    return false;
  thvec2 w;
  mPlaquettes[imin]->forward( z, w );
  if ( w.is_nan() )
    return false;
  dst = ( origin + w * unit );
  return true;
}

bool
therion::warp::plaquette_algo::backward(
    const thvec2 & dst, 
    thvec2 & src, 
    const thvec2 & origin, 
    double unit )
{
  thvec2 w = (dst - origin) / unit;
  size_t szp = mPlaquettes.size();
  double dmin = -1.0;
  size_t imin = (size_t)(-1);
  for ( size_t i=0; iis_inside_to( w ) ) {
      double d = mPlaquettes[i]->distance_to( w );
      if ( thisnan( d ) ) continue;
      if ( imin == (size_t)(-1) || d < dmin ) {
        dmin = d;
        imin = i;
      }
    }
  }
  if ( imin == (size_t)(-1) ) 
    return false;
  thvec2 z;
  mPlaquettes[imin]->backward( w, z );
  if ( z.is_nan( ) )
    return false;
  src = mX0 + z * mXUnit;
  return true;
}

void 
therion::warp::plaquette_algo::update_lines()
{
  for (size_t i=0; iupdate();
  }
}

void 
therion::warp::plaquette_algo::make_neighbors( )
{
  // thprintf("plaquette_algo::make_neighbors() plaquettes %d \n", mPlaquettes.size() );
  for (size_t k=0; kcompute_slopes();
  }
}

void
therion::warp::plaquette_algo::find_neighbors( therion::warp::basic_pair * me )
{
  
  switch ( me->type() ) {
    case THWARP_TRIANGLE:
    case THWARP_PLAQUETTE:
      for (int k=0; kngbh_nr(); ++k) 
        me->m_ngbh[k] = find_plaquette( me->m_pair[k+1], me->m_pair[k] );
      break;
    default:
      thprintf("plaquette_algo::make_neighbors() wrong pair warp-type %d\n",
        me->type() );
  }
}

therion::warp::basic_pair * 
therion::warp::plaquette_algo::find_plaquette( 
    point_pair * p1, 
    point_pair * p2 )
{
  // thprintf("find_plaquette() %s %s \n", p1->m_name.c_str(), p2->m_name.c_str() );
  for (size_t k=0; kngbh_nr();
    if ( i2 >= 1 && i2 < 4 ) {
      for (int i=0; im_pair[i] == p1 && mPlaquettes[k]->m_pair[i+1] == p2 ) {
	  // thprintf("found %d\n", mPlaquettes[k]->nr() );
	  return mPlaquettes[k];
	}
      }
    }
  }
  return NULL;
}



void 
therion::warp::plaquette_algo::make_plaquettes( warp_proj proj )
{
  for (size_t k=0; korder_lines( this, mXUnit/mUUnit, proj );
  }
  // print();

  szp = mPairs.size();
  for (size_t i=0; im_used = false;
  }

  for ( ; ; ) {
    therion::warp::point_pair * node1 = NULL;
    therion::warp::line * line = NULL;
    for (size_t i=0; ilegs() == 1 && ! mPairs[i]->m_used ) {
        node1 = mPairs[i];
        line  = node1->first_leg();
        for ( ++i; isize() == 1 ) {
            therion::warp::line * ln = mPairs[i]->next_line(NULL);
            if ( ln && ln->m_type == THMORPH_STATION ) 
              ln->m_type = THMORPH_EXTRA;
          }
        }
        break; // not really necessary
      }
      */
      if ( mPairs[i]->size() == 1 && ! mPairs[i]->m_used ) {
        node1 = mPairs[i];
        line  = node1->next_line(NULL);
        line->m_type = THMORPH_STATION; // make the line into a station line
        break;
      }
    }
    if ( node1 == NULL ) { 
      // thprintf("Error: cannot find a 1-leg node\n");
      return;
    }
  
    therion::warp::point_pair * node2 = line->other_end( node1 );
    therion::warp::point_pair * node10 = node1; // save starting nodes
    therion::warp::point_pair * node20 = node2;
    // thprintf("make_plaquettes()");
    // thprintf(" node1 %s node2 %s\n", node1->m_name.c_str(), node2->m_name.c_str() );
  
    do {
      therion::warp::point_pair * A = node1;
      therion::warp::point_pair * B = node2;
      if ( line->m_type == THMORPH_STATION ) {
        size_t iA = A->size();
        size_t iB = B->size();
        if ( iA == 1 ) // mark the node as used
          A->m_used = true;
        if ( iB == 1 ) 
          B->m_used = true;

        // thprintf("  A %s (%d)  B %s (%d) line type S\n", A->m_name.c_str(), iA, B->m_name.c_str(), iB );
        if ( iA == 1 && iB == 1 ) { 
	  thprintf("ERROR: segments are no longer supported\n");
        } else if ( iA == 1 ) {
          //                      /
          //           A ======= B ... 
          //                     | 
          //                     C
          //
          // do not do anything: B will do it
          therion::warp::line * line2 = B->next_line( line );
          therion::warp::point_pair * C = line2->other_end( B );
          if ( line2->m_type != THMORPH_STATION )
            add_triangle( A, B, C, proj );
          node1 = B;
          node2 = C;
          line = line2;
        } else if ( iB == 1 ) {
          //
          //           | 
          //       ... A ======= B  
          //          / 
          //         D
          therion::warp::line * line1 = A->prev_line( line );
          therion::warp::point_pair * D = line1->other_end( A );
          add_triangle( D, A, B, proj );
          node1 = B;
          node2 = A;
          // line = line;
        } else {
          //    ... A ========= B ...
          //        |           |
          //        D           C
          //
          therion::warp::line * line1 = A->prev_line( line );
          therion::warp::point_pair * D = line1->other_end( A );
          therion::warp::line * line2 = B->next_line( line );
          therion::warp::point_pair * C = line2->other_end( B );
          add_quadrilater( A, B, C, D, proj );
          node1 = B;
          node2 = C;
          line = line2;
        }
      } else { // line->m_type != THMORPH_STATION 
        size_t iA = A->size();
        size_t iB = B->size();
        if ( iA == 1 ) // mark the node as used
          A->m_used = true;
        if ( iB == 1 ) 
          B->m_used = true;

        // thprintf("  A %s B %s line type non-S\n", A->m_name.c_str(), B->m_name.c_str() );
        //      ?
        //      |
        //      A ======== B
        //
        therion::warp::line * line2 = A->next_line( line );
        if ( line2->m_type == THMORPH_STATION ) {
          //    node_2
          //      |
          //      A ======== B
          //
          line = line2;
          node2 = line->other_end( A );
          // insertion is handled at the next iteration
        } else {
          //      D
          //      |
          //      A ======== B
          //
          therion::warp::point_pair * D = line2->other_end( A );
          add_triangle( B, A, D, proj );
          node2 = D;
          line = line2;
        }
      }
    } while ( node1 != node10 );
    // back to start
    while ( node2 != node20 ) {
      therion::warp::line * line2 = node1->next_line( line );
      therion::warp::point_pair * C = line2->other_end( node1 );
      add_triangle( node2, node1, C, proj );
      node2 = C;
      line = line2;
    }
  } // end big for ( ; ; )
}


void
therion::warp::plaquette_algo::add_triangle( point_pair * A, point_pair * B, point_pair * C,
  warp_proj proj )
{
  // N.B. bad triangles are only warned; 
  // they are used anyways.
  if ( ((C->x - B->x) ^ (A->x - B->x)) >= 0.0 ) {
    thprintf("WARNING: bad triangle (%s %s %s) X-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else if ( ((C->u - B->u) ^ (A->u - B->u)) >= 0.0 ) {
    thprintf("WARNING: bad triangle (%s %s %s) U-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } // else {
    therion::warp::triangle_pair * tri = new therion::warp::triangle_pair( B, C, A, this->m_bound3 );
    tri->set_projection( proj );
    mPlaquettes.push_back( tri );
  // }
}

void
therion::warp::plaquette_algo::add_quadrilater( 
     point_pair * A, point_pair * B, point_pair * C, point_pair * D,
     warp_proj proj )
{
  // thprintf("  ADD Plaquette: %s %s %s %s\n",
  //   A->m_name.c_str(), B->m_name.c_str(), C->m_name.c_str(), D->m_name.c_str() );
  // check orientation
  if ( ((B->x - A->x) ^ (D->x - A->x)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) X-orientation\n",
      B->m_name.c_str(), A->m_name.c_str(), D->m_name.c_str() );
  } else if ( ((C->x - B->x) ^ (A->x - B->x)) >= 0.0 ) {
    thprintf( "WARNING: bad plaquette (%s %s %s) X-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else if ( ((B->u - A->u) ^ (D->u - A->u)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) U-orientation\n",
      B->m_name.c_str(), A->m_name.c_str(), D->m_name.c_str() );
  } else if ( ((C->u - B->u) ^ (A->u - B->u)) >= 0.0 ) {
    thprintf("WARNING: bad plaquette (%s %s %s) U-orientation\n",
      C->m_name.c_str(), B->m_name.c_str(), A->m_name.c_str() );
  } else {
    therion::warp::plaquette_pair * plaq = new therion::warp::plaquette_pair( A, B, C, D, this->m_bound4 );
    plaq->set_projection( proj );
    mPlaquettes.push_back( plaq );
  }
}




bool
therion::warp::plaquette_algo::map_backward_plaquette( size_t k, const thvec2 & w, thvec2 & z )
{
  if ( mPlaquettes[k]->is_inside_to( w ) ) {
    mPlaquettes[k]->backward( w, z );
    return true;
  }
  return false;
}


bool
therion::warp::plaquette_algo::map_image( const unsigned char * src, unsigned int ws, unsigned int hs,
                       unsigned char * dst, unsigned int wd, unsigned int hd,
		       thvec2 const & origin, double unit,
                       int depth, 
		       warp_proj proj )
{
  if ( ! initialize( proj ) ) return false;

  mUC     = origin;
  mUCUnit = unit;

  double res[4];
  assert( depth <= 4 ); // max 4 components
  unsigned int wsd = ws * depth;

  thvec2 z;

  // print();

  // thprintf("X origin %6.2f %6.2f units %6.2f\n", mX0.m_x, mX0.m_y, mXUnit);
  // thprintf("U origin %6.2f %6.2f units %6.2f\n", mU0.m_x, mU0.m_y, mUUnit);
  // thprintf("UC origin %6.2f %6.2f units %6.2f\n", mUC.m_x, mUC.m_y, mUCUnit);
  // new way
  warpp_t * pi = (warpp_t *)malloc( wd * hd * sizeof(warpp_t) );
  if ( pi != NULL ) {
    memset( pi, 0xff, wd*hd*sizeof(warpp_t) );
    double * pf = (double *)malloc( wd * hd * sizeof(double) );
    if ( pf == NULL ) 
      thprintf("warning: failed to allocate temporary distance image\n");

    for (size_t k=0; kbounding_box_to( t1, t2 );
      t1 = mUC + mUCUnit * t1;
      t2 = mUC + mUCUnit * t2;
      t1.maximize( thvec2(0,0) );
      t2.minimize( thvec2(wd, hd) );
      int i1 = (int)t1.m_x;
      int i2 = (int)t2.m_x;
      int j2 = (int)t2.m_y;
      for (int j=(int)t1.m_y; jis_inside_to( w ) ) {
	    // ++cnt;
            if ( ( piwd[i] & ngbh_mask ) == ngbh_mask ) {
              piwd[i] = (warpp_t)k;
	      if ( pf ) pfwd[i] = -1.0; // delay distance computation
	      // pfwd[i] = mPlaquettes[k]->distance2_to( w );
            } else {
              double d1 = mPlaquettes[k]->distance2_to( w );
	      if ( pf ) {
	        // delayed distance computation
	        if ( pfwd[i] < 0.0 ) pfwd[i] = mPlaquettes[piwd[i]]->distance2_to( w );
                double d0 = pfwd[i];
                if ( d1 < d0 ) { 
		  piwd[i] = (warpp_t)k;
		  pfwd[i] = d1; 
		}
	      } else {
	        double d0 = mPlaquettes[piwd[i]]->distance2_to( w );
		if ( d1 < d0 ) { 
		  piwd[i] = (warpp_t)k; 
		}
	      }
            }
          }
	  u.m_x += 1.0;
        }
      }
      // thprintf("plaquette %2d: points %d\n", k, cnt );
    }
    warpp_t * pij = pi;

    // not sure if it's better to random-access or scan-through
    // if the output image is dense a scan-through should be better
    // if it is "sparse" random-access should be better
    // in the following i opt for scan-through on the destination image
    // but random-access of the (i,j) vector
    //
    // unsigned int wdd = wd * depth;
    unsigned char * dst1 = dst;
    for (unsigned int j=0; j= 0 && ix2 < (int)ws ) {
            int iy1 = (int)x.m_y;
            int iy2 = iy1 + 1;
	    if ( iy1 >= 0 && iy2 < (int)hs ) {
	      // bilinear interpolation: does not cost much more than nearest-pixel
              double dx = x.m_x - ix1;  
              double dy = x.m_y - iy1;
	      double dx1dy1 = (1-dx) * (1-dy);
	      double dx1dy0 = (1-dx) * dy;
	      double dx0dy1 = dx * (1-dy);
	      double dx0dy0 = dx * dy;
              // unsigned char * dst1 = dst + (j * wdd + i * depth);
              const unsigned char * src00 = src + iy1*wsd + ix1 * depth;
              const unsigned char * src01 = src00 + wsd;
              const unsigned char * src10 = src00 + depth;
              const unsigned char * src11 = src01 + depth;
              for (int c=0; c= 255 ) ? 255 : res[c]);
              }
	    }
	  }
        }
	dst1 += depth;
      }
    }
    if ( pf ) free( pf );
    free( pi );
  } else { // old way (used if pi malloc failed ...
    thprintf("warning: failed to allocate temporary index image\n");
    for (size_t k=0; kbounding_box_to( t1, t2 );
      t1 = mUC + mUCUnit * t1;
      t2 = mUC + mUCUnit * t2;
      t1.maximize( thvec2(0,0) );
      t2.minimize( thvec2(wd, hd) );
      int i2 = (int)t2.m_x;
      int j2 = (int)t2.m_y;
      for (int j=(int)t1.m_y; j= 0 && ix2 < (int)ws && iy1 >= 0 && iy2 < (int)hs ) {
              double dx = x.m_x - ix1;  // bilinear interpolation
              double dy = x.m_y - iy1;
              unsigned char * dst1 = dst + depth * (j * wd + i);
              const unsigned char * src00 = src + depth * ( iy1*ws + ix1 );
              const unsigned char * src01 = src00 + depth * ws;
              const unsigned char * src10 = src00 + depth;
              const unsigned char * src11 = src01 + depth;
              for (int k=0; k= 255 ) ? 255 : res);
              }
            }
          }
        }
      }
    }
  }

  return true;
}
therion-5.4.1/thwarppt.h000066400000000000000000000242671307545355600152430ustar00rootroot00000000000000/** @file thwarppt.h
 * 
 * @author marco corvi
 * @date   nov 2006 - mar 2007
 * 
 * @brief warping plaquette algorithm
 *
 * ---------------------------------------------------
 */
/* Copyright (C) 2006-2007 marco corvi
 * 
 * $Date: $
 * $RCSfile: $
 * $Revision: $
 *
 * -------------------------------------------------------------------- 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * --------------------------------------------------------------------
 */

#ifndef thwarppt_h
#define thwarppt_h
#define THERION

#include 

#include "thtrans.h"
#include "thwarppme.h"
#include "thwarppdef.h"


namespace therion
{
  namespace warp
  {

  /**
   * therion warping transformation.
   *
   * The "from" data are in the sketch image reference frame
   * The "to" data are in the survey reference frame
   * The "warped image" is scaled/translated with respect to the survey frame
   *
   * The X and U centers and units are computed when the mapping is
   * initialized.  The warped image center and units are computed when a
   * source image is mapped (before that point they have the same values as the
   * U center and units).  Until the map has been initialized the centers and
   * units have undefined values.
   */
    class plaquette_algo : public inserter
    {
      private:
        bool m_initialized;          //!< whether the map has been initialized
        std::vector< therion::warp::point_pair * > mPairs;         //!< vector of point pairs
        std::vector< therion::warp::line * > mLines;         //!< vector of legs (lines)
        std::vector< therion::warp::basic_pair * > mPlaquettes; //!< vector of 4-plaquettes
       
        double m_bound3;   //!< bound for triangles
        double m_bound4;   //!< bound for plaquettes
    
      public:
        thvec2 mX0;    //!< X-Y center
        thvec2 mU0;    //!< U-V center
        double mXUnit; //!< X-Y unit
        double mUUnit; //!< U-V unit
        thvec2 mUC;    //!< U-V center in the warped image
        double mUCUnit; //!< U-V unit in the warped image
        
      public:
        /** default cstr
         */
        plaquette_algo( );
    
    
        /** cstr
         * @param bound3   bound for triangles
         * @param bound4   bound for plaquettes
         */
        plaquette_algo( double bound3, double bound4 );
        
        /** dstr
         */
        ~plaquette_algo();
        
        /** clear internal mapping data
         */
        void reset( );
    
    
        /** accessor to the "from" origin 
         * @return origin in the "from" image
         */
        thvec2 from_origin() const { return mX0; }
        
        /** accessor to the "to" origin 
         * @return origin in the "to" image
         */
        thvec2 to_origin() const { return mU0; }
        
        /** accessor to the "from" unit 
         * @return unit in the "from" image
         */
        double from_unit() const { return mXUnit; }
        
        /** accessor to the "to" unit 
         * @return unit in the "to" image
         */
        double to_unit() const { return mUUnit; }
        
        /** accessor to the warped image origin 
         * @return origin in the warped image (zero at the upper-left corner)
         */
        thvec2 warped_origin() const { return mUC; }
        
        /** accessor to the warped image unit 
         * @return unit in the warped image
         */
        double warped_unit() const { return mUCUnit; }
    
    
        
        /** insert a point and a line of extra type
         * @param p1  first line point
         * @param index index used to make the new point name
         * @param x3    new point X (sketch frame)
         * @param u3    new point U (survey frame)
         */
        line * add_extra_line( point_pair * p1, size_t index, 
                                       thvec2 & x3, thvec2 & u3 );
    
    
        /** insert a point
         * @param t    point morph type
         * @param name point name
         * @param src  point coords in the source (from) frame (sketch)
         * @param dst  point coords in the destination (to) frame (survey)
         * @return pointer to the new point-pair
         */
        point_pair * insert_point( morph_type t, std::string & name, 
                                     const thvec2 & src, const thvec2 & dst );

	point_pair * insert_zoom_point( morph_type t, std::string & name, 
	                                const thvec2 src, std::string & from, double size );
    
        /** insert a line
         * @param t    line morph type
         * @param from name of the first line endpoint 
         * @param to   name of the second line endpoint 
         */
        void insert_line( morph_type t, std::string & from, std::string & to );
        
        /** initialize internal data for the mapping
         * @param proj  projection type
         * @return true if initialized successfully
         */
        bool initialize( warp_proj proj = THWARP_PLAN );
        
        /** map a 2D point forward 
         * @param src     point in the source ("from") frame
         * @param dst     point in the "to" frame
         * @return true if successful
         */
        bool forward( const thvec2 & src, thvec2 & dst )
        {
            return forward( src, dst, mU0, mUUnit );
        }
        
        /** map a 2D point backward 
         * @param dst     point in the "to" frame
         * @param src     point in the "from" frame
         * @return true if successful
         */
        bool backward( const thvec2 & dst, thvec2 & src )
        {
            return backward( dst, src, mU0, mUUnit );
        }
        
        /** map a 2D point backward 
         * @param dst     point in the "to" frame (survey)
         * @param src     point in the "from" frame (sketch)
         * @param origin  origin in the "to" frame
         * @param unit    unit in the "to" frame
         * @return true if successfulA
         */
        bool backward( const thvec2 & dst, thvec2 & src, const thvec2 & origin, double unit );
        
        /** map a 2D point forward
         * @param src     point in the "from" frame
         * @param dst     point in the "to" frame
         * @param origin  origin in the "to" frame
         * @param unit    unit in the "to" frame
         * @return true if successful
         */
        bool forward( const thvec2 & src, thvec2 & dst, const thvec2 & origin, double unit );
        
        /** map an image. The result is centered in the destination image
         * @param src  source image (RGB)
         * @param ws   source image width
         * @param hs   source image height 
         * @param dst  destination image (RGB) must be preallocaed by the caller
         * @param wd   destination image width
         * @param hd   destination image height
         * @param origin target origin in the warped image frame
         * @param unit   target units
         * @param depth image depth (bytes per pixel).
         * @param proj  sketch projection type
         * @return true if successful
         *
         * @note this method, as a side effect, sets the warped image origin and units
         */
        bool map_image( const unsigned char * src, unsigned int ws, unsigned int hs,
                    unsigned char * dst, unsigned int wd, unsigned int hd,
    		    thvec2 const & origin, double unit,
                    int depth = 3, 
    		    warp_proj proj = THWARP_PLAN );
    
        /** debug: print the content of this warptrans
         */
        void print();
    
      private:
        /** update line features - compute the lines' coeffs.
         */
        void update_lines();
        
        /** prepare the plaquettes
         * @param proj  projection type
         */
        void make_plaquettes( warp_proj proj );
        
        /** set up the neighbors
         */
        void make_neighbors( );
    
        /** find the neighbors of a warping pair
         * @param me warping basic_pair
         */
        void find_neighbors( basic_pair * me );
    
        /** fidn the warping pair with a given oriented side
         * @param p1 first side point
         * @param p2 second side point
         */
        basic_pair * find_plaquette( point_pair * p1, point_pair * p2 );
        
        /** map by the plaquette
         * @param k   plaquette index
         * @param w   from point
         * @param z   to point
         * @return true if successful
         */
        bool map_backward_plaquette( size_t k, const thvec2 & w, thvec2 & z );
    
        #ifdef USE_SEGMENT
        /** add a segment
         * @param A   first endpoint
         * @param B   second endpoint
         */
        void add_segment( point_pair * A, point_pair * B );
        #endif
    
        /** add a triangle
         * @param A   first point (left)
         * @param B   second point (vertex)
         * @param C   third point (right)
         * @param proj warp projection type
         */
        void add_triangle( point_pair * A, point_pair * B, point_pair * C,
          warp_proj proj = THWARP_PLAN );
        
        /** add a quadrilater
         * @param A   first point 
         * @param B   second point
         * @param C   third point 
         * @param D   fourth point 
         * @param proj warp projection type
         */
        void add_quadrilater( point_pair * A, point_pair * B, point_pair * C, point_pair * D,
          warp_proj proj = THWARP_PLAN );
    };

  } // namespace warp

} // name space therion

// *******************************************************************
// backward compatibility
//
#ifdef THERION
  typedef therion::warp::plaquette_algo thwarptrans;
#endif

#endif
therion-5.4.1/xtherion/000077500000000000000000000000001307545355600150465ustar00rootroot00000000000000therion-5.4.1/xtherion/Makefile000066400000000000000000000015401307545355600165060ustar00rootroot00000000000000OUTDIR ?= .
THPLATFORM ?= LINUX
ifneq ($(OUTDIR),.)
LOUTDIR = $(OUTDIR)/xtherion
else
LOUTDIR = .
endif


ifeq ($(THPLATFORM),WIN32)
TARGET = xtherion.tcl
else
TARGET = xtherion
endif

all: $(LOUTDIR)/$(TARGET)

$(LOUTDIR)/$(TARGET): *.tcl msgxth.tcl
	tclsh mkall.tcl $(THPLATFORM)
ifneq ($(OUTDIR),.)
	perl ../makefile.pl mv ./$(TARGET) $(LOUTDIR)
endif

survex:
	tclsh mkall.tcl survex
	tar -cvzf ../../../svxedit.tar.gz svxedit
	perl ../makefile.pl rm -q svxedit

clean:
	perl ../makefile.pl rm -q *~
	perl ../makefile.pl rm -q ../../bin/xtherion
	perl ../makefile.pl rm -q lang/*~
	perl ../makefile.pl rm -q svxedit
	perl ../makefile.pl rm -q msgxth.tcl
	perl ../makefile.pl rm -q xtherion.tar.gz
	perl ../makefile.pl rm -q svxedit.tar.gz
	perl ../makefile.pl rm -q err.log

update:
	$(MAKE) -C ./lang update
  
msgxth.tcl: lang/xtexts.txt
	$(MAKE) -C ./lang

therion-5.4.1/xtherion/about.tcl000066400000000000000000000054331307545355600166710ustar00rootroot00000000000000##
## about.tcl --
##
##     Application module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 


set xth(about,image_id) [image create photo -data $xth(about,image_data)]
set xth(about,infotime) 2500

proc xth_about_status {str} {
    global xth
    set xth(about,status) "$str"
    update idletasks
}

proc xth_about_show {btnid} {
    global xth
    if {[winfo exists $xth(gui,about)]} xth_about_hide
    xth_about_status ""
    set w $xth(gui,about)
    toplevel $w -relief raised -bg black -bd 3 -cursor $xth(gui,cursor)
    wm transient $w
    wm withdraw $w
    set sw [winfo screenwidth .]
    set sh [winfo screenheight .]
    wm overrideredirect $w 1
    label $w.image -bd 0 -relief sunken -background black -fg white -image $xth(about,image_id)
    pack $w.image -side top -expand 1 -fill both
    label $w.status -relief flat -background black -foreground white \
    	-textvariable xth(about,status) -font $xth(gui,lfont) -anchor center
    pack $w.status -side top -expand 1 -fill both
    label $w.i1 -bd 0 -relief sunken -background black -fg white -text "xtherion\n$xth(about,ver)" \
      -font $xth(gui,lfont) -anchor center
    pack $w.i1 -side top -expand 1 -fill both -pady 5
    if {$btnid} {
      button $w.close -text "Close" -font $xth(gui,lfont) -anchor center \
        -command xth_about_hide -width 5
      pack $w.close -side top -fill none -anchor center -pady 5
      focus $w.close
    }
    wm geometry $xth(gui,about) -$sw-$sh
    wm deiconify $xth(gui,about)
    update idletasks
    set x [expr {($sw - [winfo width $xth(gui,about)])/2}]
    set y [expr {($sh - [winfo height $xth(gui,about)])/2}]
    wm geometry $xth(gui,about) +$x+$y
    $w configure -bg black
    $w.image configure -image $xth(about,image_id)
    $w.i1 configure -text "xtherion $xth(about,ver)\n\u00A9 2002-2017 Stacho Mudrak"
    update idletasks
}


proc xth_about_hide {} {
  global xth
  destroy $xth(gui,about)
  focus $xth(gui,main)
}

therion-5.4.1/xtherion/app.tcl000066400000000000000000000436721307545355600163460ustar00rootroot00000000000000##
## app.tcl --
##
##     Application module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 


proc xth_app_move_panel {aname xx} {
  global xth
  if {$xth(app,$aname,wpsw) == 1} {
    set xth(app,$aname,relw) [expr [winfo width $xth(gui,main)] - $xx + $xth(app,$aname,wrtx)]; 
  } else {
    set xth(app,$aname,relw) [expr $xx - $xth(app,$aname,wrtx)]; 
  }
  xth_app_place $aname
}


proc xth_app_create {aname title} {
  
  global xth
  
  set aw "$xth(gui,main).$aname"
  set xth(gui,$aname) $aw
  set xth(app,list) [concat $xth(app,list) $aname]
  if {![info exists xth(app,$aname,relw)]} {
    set xth(app,$aname,relw) $xth(app,all,relw)
  }
  if {![info exists xth(app,$aname,wpsw)]} {
    set xth(app,$aname,wpsw) $xth(app,all,wpsw)
  }
  if {![info exists xth(app,$aname,wmwd)]} {
    set xth(app,$aname,wmwd) $xth(app,all,wmwd)
  }
  
  # create and configure application frames
  frame $aw
  frame $aw.af
  frame $aw.af.apps
  frame $aw.af.ctrl
  frame $aw.af.lrhn -borderwidth 2 -relief raised -cursor sb_h_double_arrow
  xth_status_bar $aname $aw.af.lrhn [mc "Drag to resize control panel."]

  frame $aw.sf
  set sbar $aw.sf.sbar
  label $sbar -text "" -anchor w -relief sunken -font $xth(gui,lfont)
  pack $sbar -side left -fill both -expand 1
  
  bind $aw.af.lrhn  "set xth(app,$aname,wwid) \[winfo width $xth(gui,main)\]; set xth(app,$aname,wrtx) \[winfo rootx $xth(gui,main)]; xth_ctrl_reshape $aname"
  bind $aw.af.lrhn  "xth_app_move_panel $aname %X"
  
  set amn $aw.menu
  menu $amn -tearoff 0
  set xth($aname,menu) $amn
  
  set fmn $amn.file
  menu $fmn -tearoff 0 
  $amn add cascade -label [mc "File"] -menu $fmn -font $xth(gui,lfont) -underline 0
  set xth($aname,menu,file) $fmn
  
  set xth($aname,title) $title
  set xth($aname,wtitle) [string tolower $title]

  pack $aw.af -expand yes -fill both
  pack $aw.sf -side bottom -fill x

  set fr $xth(app,$aname,relw)
  set minfr $xth(app,$aname,wmwd)
  set lrhny [expr [winfo height $xth(gui,main)] - 64]
  if {$fr < $minfr} {
    set fr $minfr
  } elseif {$fr > ([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))} {
    set fr [expr {([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))}]
  }
  set xth(app,$aname,relw) $fr
  set fr [expr 1.0 - $fr / double([winfo width $xth(gui,main)])]
  
  if {$xth(app,$aname,wpsw) == 1} {
    place $aw.af.apps -relx 0 -rely 0 -relheight 1 -relwidth $fr
    place $aw.af.ctrl -relx $fr -rely 0 -relheight 1 -relwidth [expr 1.0 - $fr]
    place $aw.af.lrhn -relx $fr -y $lrhny -width 8 -height 8 -anchor center
  } else {
    place $aw.af.ctrl -relx 0 -rely 0 -relheight 1 -relwidth $fr
    place $aw.af.apps -relx $fr -rely 0 -relheight 1 -relwidth [expr 1.0 - $fr]
    place $aw.af.lrhn -relx $fr -y $lrhny -width 8 -height 8 -anchor center
  }
  
  xth_ctrl_create $aname
  
}


proc xth_app_clock {} {
  global xth
  set xth(gui,clock) [clock format [clock seconds] -format "%H:%M"]
  after 15000 xth_app_clock
}


proc xth_app_place {aname} {
  
  global xth
  set aw "$xth(gui,main).$aname"

  set fr $xth(app,$aname,relw)
  set minfr $xth(app,$aname,wmwd)
  if {$fr < $minfr} {
    set fr $minfr
  } elseif {$fr > ([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))} {
    set fr [expr {([winfo width $xth(gui,main)] - $xth(app,$aname,wmwd))}]
  }
  set xth(app,$aname,relw) $fr
  set fr [expr 1.0 - $fr / double([winfo width $xth(gui,main)])]

  set lrhny [expr [winfo height $xth(gui,main)] - 64]
  
  if {$xth(app,$aname,wpsw) == 1} {
    place configure $aw.af.apps -relx 0 -relwidth $fr
    place configure $aw.af.ctrl -relx $fr -relwidth [expr 1.0 - $fr]
    place configure $aw.af.lrhn -relx $fr -y $lrhny
  } else {
    place configure $aw.af.apps -relx [expr 1.0 - $fr] -relwidth $fr
    place configure $aw.af.ctrl -relx 0 -relwidth [expr 1.0 - $fr]
    place configure $aw.af.lrhn -relx [expr 1.0 - $fr] -y $lrhny
  }

  xth_ctrl_reshape $aname   
}

proc xth_app_switch {} {

  global xth
  
  set aname $xth(app,active)
  
  if {$xth(app,$aname,wpsw) == 1} {
    set xth(app,$aname,wpsw) 0
  } else {
    set xth(app,$aname,wpsw) 1
  }
  
  xth_app_place $aname
}


proc xth_app_finish {} {

  global xth
  
  # add Window menu to each menu
  set m "$xth(gui,main).wmenu"
  menu $m -tearoff 0
  set i 0
  
  set xth(gui,menu,window) $m

  foreach aname $xth(app,list) {

    if {[llength $xth(app,list)] > 1} {
      set i [expr $i + 1]
      $m add command -label $xth($aname,title) -accelerator "F$i" \
        -command "xth_app_show $aname" -font $xth(gui,lfont)
      bind $xth(gui,main)  "xth_app_show $aname"
    }
    
    # add clock to aname
    set clockbar $xth(gui,$aname).sf.clockbar
    label $clockbar -textvariable xth(gui,clock) -anchor center \
      -relief sunken -font $xth(gui,lfont) -width 5
    pack $clockbar -side left

  }
  if {[llength $xth(app,list)] > 1} {
    $m add separator
  }
  $m add command -label [mc "Maximize"] -underline 1 \
      -command "xth_app_maximize" -font $xth(gui,lfont)
  $m add command -label [mc "Normalize"] -underline 1 \
      -command "xth_app_normalize" -font $xth(gui,lfont)
  $m add command -label [mc "Switch panels"] -underline 1 \
      -command "xth_app_switch" -font $xth(gui,lfont)
  $m add separator

  $m add command -label [mc "Toggle toolbar"] -underline 1 \
      -command "xth_tools_toggle" -font $xth(gui,lfont)
  
  menu $m.kbes -tearoff 0
  set encnames [encoding names]
  set xth(encoding_system) [encoding system]
  foreach ecd [lsort $xth(kbencodings)] {
    if {[lsearch $encnames $ecd] >= 0} {
      $m.kbes add radiobutton -label $ecd \
        -command "encoding system $ecd\nset xth(encoding_system) \[encoding system\]" -font $xth(gui,lfont) \
        -variable xth(encoding_system) -value $ecd
    }
  }
  $m add cascade -label [mc "KBD encoding"] -menu $m.kbes
  

  if {$xth(debug)} {
    set dm "$xth(gui,main).dmenu"
    menu $dm -tearoff 0
  
    $dm add command -label "Refresh procs" -underline 0 -command {
      set idir $xth(gui,initdir)
      source global.tcl
      source sbar.tcl
      source cp_procs.tcl
      source te_sdata.tcl
      source me_imgs.tcl
      source me_cmds.tcl
      source me_cmds2.tcl
      source me_ss.tcl
      source te_import.tcl
      source me_import.tcl
      source bac.tcl
      set xth(gui,initdir) $idir
    } -font $xth(gui,lfont)
    $dm add command -label "Screen dump" -underline 0 -command {
      after 5000 {xwd -out screendump -frame}
    } -font $xth(gui,lfont)
    $dm add separator
    $dm add command -label "Show command console" -underline 1 \
      -command "wm deiconify $xth(gui,dbg); wm transient $xth(gui,dbg) $xth(gui,main)" -font $xth(gui,lfont)
    $dm add command -label "Hide command console" -underline 1 \
      -command "wm withdraw $xth(gui,dbg)" -font $xth(gui,lfont)
  }

  bind $xth(gui,main) <$xth(kb_control)-Key-q> "xth_exit"
  bind $xth(gui,main) <$xth(kb_control)-Key-o> xth_app_control_o 
  bind $xth(gui,main) <$xth(kb_control)-Key-r> xth_app_control_r 
  bind $xth(gui,main) <$xth(kb_control)-Key-w> xth_app_control_w
  bind $xth(gui,main) <$xth(kb_control)-Key-s> xth_app_control_s 
  bind $xth(gui,main) <$xth(kb_control)-Key-z> xth_app_control_z
  bind $xth(gui,main) <$xth(kb_control)-Key-y> xth_app_control_y 
  bind $xth(gui,main) <$xth(kb_control)-Key-p> xth_app_control_p 
  bind $xth(gui,main) <$xth(kb_control)-Key-l> xth_app_control_l 
  bind $xth(gui,main) <$xth(kb_control)-Key-d> xth_app_control_d
  bind $xth(gui,main) <$xth(kb_control)-Key-a> xth_app_control_a
  bind $xth(gui,main) <$xth(kb_control)-Key-D> xth_app_control_shift_d
  bind $xth(gui,main)  xth_app_pgup
  bind $xth(gui,main)  xth_app_pgdn
  bind $xth(gui,main)  xth_app_shift_pgup
  bind $xth(gui,main)  xth_app_shift_pgdn
  bind $xth(gui,main)  xth_app_escape 
  bind $xth(gui,main)  xth_app_make
  bind $xth(gui,main) <$xth(kb_control)-Up> xth_app_control_up
  bind $xth(gui,main) <$xth(kb_control)-Down> xth_app_control_down
  
  foreach aname $xth(app,list) {
    $xth($aname,menu) add cascade -label [mc "Window"] -menu $m -underline 0 \
      -font $xth(gui,lfont)
    if $xth(debug) {
      $xth($aname,menu) add cascade -label "Debug" -menu $dm -underline 0 \
        -font $xth(gui,lfont)
    }
    $xth($aname,menu,file) add separator
    $xth($aname,menu,file) add command -label [mc "Compile"] -underline 0 \
      -command "xth_app_make" -font $xth(gui,lfont) \
      -accelerator "F9"
    $xth($aname,menu,file) add command -label [mc "Quit"] -underline 0 \
      -command "xth_exit" -font $xth(gui,lfont) \
      -accelerator "$xth(gui,controlk)-q"
    $xth($aname,menu) add cascade -label [mc "Help"] -menu $xth(gui,menu,help) \
      -underline 0  -font $xth(gui,lfont)
  }  

}

proc xth_app_title {aname} {
  
  global xth
  
  # set the application menu
  set ofn ""
  if {[info exists xth($aname,open_file)]} {
    set ofn $xth($aname,open_file)
  }
  if {[string length $xth($aname,wtitle)] > 0} {
    set atit " $xth($aname,wtitle)"
  } else {
    set atit ""
  }
  if {[string equal $aname me] && ([string length $xth(me,curscrap)] > 0)} {
    set sname " - $xth(me,curscrap)"
  } else {
    set sname ""
  }
  if {[string length $ofn] > 0} {
    wm title $xth(gui,main) "$xth(prj,name)$atit - $xth($aname,open_file)$sname"
  } else {
    wm title $xth(gui,main) "$xth(prj,name)$atit$sname"
  }
}

proc xth_app_control_o {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {xth_te_open_file 1 {} 0}
    me  {xth_me_open_file 1 {} 1}
    cp  {
      set xth(cp,updcf) 0
      xth_cp_open_file {}
    }
  }
}  


proc xth_app_pgup {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(gui,main).me.af.ctrl.c yview scroll -1 pages
    }
    cp  {}
  }
}

proc xth_app_pgdn {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(gui,main).me.af.ctrl.c yview scroll 1 pages
    }
    cp  {}
  }
}

proc xth_app_shift_pgup {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(ctrl,me,cmds).cl.l yview scroll -1 pages
    }
    cp  {}
  }
}


proc xth_app_shift_pgdn {} {
  global xth
  switch $xth(app,active) {
    te  {}
    me  {
      $xth(ctrl,me,cmds).cl.l yview scroll 1 pages
    }
    cp  {}
  }
}


proc xth_app_control_a {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {}
    me  {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    }
    cp  {}
  }
}  


proc xth_app_control_r {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    te  {}
    me  {
      xth_me_cmds_create_scrap {} 1 "" ""
      xth_ctrl_scroll_to me scrap
      xth_ctrl_maximize me scrap
    }
    
    cp  {}
  }
}  


proc xth_app_control_w {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_close_file}
    cp  {xth_cp_close_file}
  }
}  

proc xth_app_control_s {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_save_file 0}
  }
}  


proc xth_app_control_z {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_unredo_undo}
  }
  
}  

proc xth_app_control_y {} {

  global xth

  # puts $xth(app,active)  
  switch $xth(app,active) {
    me  {xth_me_unredo_redo}
  }
}  

proc xth_app_control_p {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_set_mode 1}
  }
}  


proc xth_app_control_d {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_delete {}}
  }
}  

proc xth_app_control_shift_d {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_delete_linept {} {}}
  }
}  

proc xth_app_control_l {} {
  global xth
  switch $xth(app,active) {
    me  {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    }
  }
}  


proc xth_app_escape {} {
  global xth
  switch $xth(app,active) {
    me  {xth_me_cmds_set_mode 0}
  }
}

proc xth_app_control_up {} {
  global xth
  switch $xth(app,active) {
    me {  
			if {$xth(me,zoom)*2 > 800} return;
      xth_me_area_zoom_to [ expr {$xth(me,zoom) * 2} ]
    }  
  }
}

proc xth_app_control_down {} {
  global xth
  switch $xth(app,active) {
    me {  
			if {$xth(me,zoom)*2 < 12} return;
			xth_me_area_zoom_to [ expr {$xth(me,zoom) / 2} ]
    }  
  }
}


proc xth_app_show {aname} {

  global xth
  
  if {[string equal $xth(app,active) $aname]} {
    return;
  }
  
  if {![string equal $xth(app,active) ""]} {
    pack forget $xth(gui,$xth(app,active))
  }

  set xth(app,active) $aname
  pack $xth(gui,$aname) -expand yes -fill both

  xth_app_title $aname

  $xth(gui,main) configure -menu $xth($aname,menu)
  
  regexp {([0-9]+)x([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize

  if {($xsize < [lindex $xth(gui,minsize) 0]) || \
      ($ysize < [lindex $xth(gui,minsize) 1])} {
    if {($xsize < [lindex $xth(gui,minsize) 0])} {
      set xsize [lindex $xth(gui,minsize) 0]
    }
    if {($ysize < [lindex $xth(gui,minsize) 1])} {
      set ysize [lindex $xth(gui,minsize) 1]
    }
    set ogeom [winfo geometry $xth(gui,main)]
    regsub $geom $ogeom [format "%sx%s" $xsize $ysize] ngeom
    wm geometry $xth(gui,main) $ngeom
  }

  update idletasks  
  xth_ctrl_reshape $aname
  
  # toolbar changes
  # disable map editor tools
  catch {
    pack forget $xth(gui,tb).edif
    pack forget $xth(gui,tb).self
  }
  switch $aname {
    me {
      # enable map editor tools
      pack $xth(gui,tb).self -side right -anchor nw
      pack $xth(gui,tb).edif -side right
      xth_me_unredo_update
    }
    default {
      $xth(gui,tb).undob configure -state normal
      $xth(gui,tb).redob configure -state normal
    }
  }
}


proc xth_exit {} {

  global xth

  catch {
    registry set $xth(win32registry) XTherionDir $xth(gui,initdir)
  }
  
  # save all open text editor files
  if {![info exists xth(te,flist)]} {
    set xth(te,flist) {}
  }
  
  foreach cfid $xth(te,flist) {
    if {[xth_te_before_close_file $cfid yesnocancel] == 0} {
      return
    }
  }
  
  if {[info exists xth(me,fopen)]} {
    if {$xth(me,fopen) == 1} {
      if {[xth_me_before_close_file yesnocancel] == 0} {
        return
      }
    }
  }

  if {[info exists xth(cp,fopen)]} {
    xth_cp_close_file
  }
  
  destroy $xth(gui,main)
  update
  destroy .    
  
}


proc xth_app_maximize {} {
  global xth
  set swd [winfo screenwidth $xth(gui,main)]
  set shg [winfo screenheight $xth(gui,main)]
  wm geometry $xth(gui,main) [format "%dx%d+0+0" $swd $shg]
  update idletasks
  regexp {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize xshft yshft
  wm geometry $xth(gui,main) [format "%dx%d+0+0" [expr $swd - $xshft] [expr $shg - $yshft]]
  update idletasks
}

proc xth_app_normalize {} {
  global xth
  set twd [expr int(0.8 * [winfo screenwidth $xth(gui,main)])]
  if {$twd < [lindex $xth(gui,minsize) 0]} {
    set twd [lindex $xth(gui,minsize) 0]
  }
  set thg [expr int(0.8 * [winfo screenheight $xth(gui,main)])]
  if {$thg < [lindex $xth(gui,minsize) 1]} {
    set thg [lindex $xth(gui,minsize) 1]
  }
  set tpx [expr int(0.5 * ([winfo screenwidth $xth(gui,main)] - $twd))]
  set tpy [expr int(0.5 * ([winfo screenheight $xth(gui,main)] - $thg))]
  wm geometry $xth(gui,main) [format "%dx%d+%d+%d" $twd $thg $tpx $tpy]
  update idletasks
  regexp {([0-9]+)x([0-9]+)\+([0-9]+)\+([0-9]+)} [winfo geometry $xth(gui,main)] geom xsize ysize xshft yshft
  wm geometry $xth(gui,main) [format "%dx%d+%d+%d" [expr $twd - $xshft + $tpx] \
    [expr $thg - $yshft + $tpy] $tpx $tpy]
  update idletasks
}

proc xth_app_clipboard {ev} {
  global xth
  set w [focus -lastfor $xth(gui,main)]
  if {[winfo ismapped $w]} {
    switch $ev {
      cut {
         event generate $w <>
      }
      copy {
         event generate $w <>
      }
      paste {
         event generate $w <>
      }
      undo {
         event generate $w <>
      }
      redo {
         event generate $w <>
      }
    }
  }
}


proc xth_app_check_text_undo_redo {} {
  global xth
  catch {
    set w [focus -lastfor $xth(gui,main)]
    if {[winfo ismapped $w]} {
      catch {
        $w edit separator
      }
    }
  }
  after idle {after 1000 xth_app_check_text_undo_redo}
}

if {$xth(gui,text_undo)} {
  after idle {after 1000 xth_app_check_text_undo_redo}
}


proc xth_app_make {} {
  global xth
  set oactive $xth(app,active)
  if {[string length $oactive] == 0} {
    set oactive cp
  }
  xth_te_save_all
  xth_me_save_file 0
  switch $oactive {
    cp {}
    default {
      set xth(cp,updcf) 0
      xth_app_show cp
    }
  }
  if {!$xth(cp,fopen)} {
    xth_cp_open_file {}
  }
  update idletasks
  if {[xth_cp_compile]} {
    if {[string equal $xth(gui,platform) windows]} {
      xth_app_show te
      xth_app_show me
      xth_app_show cp
    }
    if {![string equal $oactive cp]} {
      xth_app_show $oactive
    }
  }
}


proc xth_app_autosave_schedule {} {
  global xth
  if $xth(gui,auto_save) {
    set xth(gui,auto_save,id) [after 60000 xth_app_autosave]
  } else {
    catch {
      after cancel $xth(gui,auto_save,id)
    }
  }
}

proc xth_app_autosave {} {
  global xth
  switch $xth(app,active) {
    me {xth_me_save_file 0}
    te {xth_te_save_all}
  }
  xth_app_autosave_schedule
}


therion-5.4.1/xtherion/bac.tcl000077500000000000000000000215171307545355600163100ustar00rootroot00000000000000#! /usr/bin/wish

# TODO:
# vstup hodiny : minuty

proc xth_bac_check {number from to wgt} {

  set rw 0
  if [catch {expr double($number)}] {
    set rw 1
  } else {
    set num [expr double($number)]
    if {($num < $from) || ($num > $to)} {
      set rw 1
    }
  }
  
  if {$rw} {
    $wgt configure -fg red
    return 0
  } else {
    $wgt configure -fg black
    return 1
  }
  
}

proc xth_bac_hm2h {h} {
  if {[regexp {(.+)\:(.+)} $h dum hh mm]} {
    if {[catch {
      set h [expr double($hh) + double($mm) / 60.0]
      return $h
    }]} {
      return $h
    }
  } else {
    return $h
  }
}

proc xth_bac_h2hm {h} {
  catch {
    set hh [expr int(floor($h))]
    set mm [expr int($h*60.0) % 60]
    if {$mm != 0.0} {
      set h [format "%d:%02d" $hh $mm]  
    } else {
      set h $hh
    }
  }
  return $h
}

proc xth_bac_calculate {} {

  global xth

  set xth(bac,BAC) ""
  set xth(bac,ETA) ""
  set xth(bac,MRS) ""
  set f $xth(gui,bacw)
  $f.rdle configure -bg $xth(bac,bg) -fg black

  set gender xth(bac,gender)
  set nok 0
  if [xth_bac_check $xth(bac,age) 0 1e10 $f.bdal] {set age $xth(bac,age)} else {set nok 1}
  if [xth_bac_check $xth(bac,height) 0 1e10 $f.bdhl] {set height $xth(bac,height)} else {set nok 1}
  if [xth_bac_check $xth(bac,weight) 0 1e10 $f.bdwl] {set weight $xth(bac,weight)} else {set nok 1}
  if [xth_bac_check $xth(bac,volume) 0 1e10 $f.cdvl] {set volume $xth(bac,volume)} else {set nok 1}
  if [xth_bac_check $xth(bac,level) 0 100 $f.cdll] {set level $xth(bac,level)} else {set nok 1}
  set xth(bac,time) [xth_bac_hm2h $xth(bac,time)]
  if [xth_bac_check $xth(bac,time) 0 1e10 $f.cdtl] {set elapsedTime [expr double($xth(bac,time))]} else {set nok 1}
  set xth(bac,time) [xth_bac_h2hm $xth(bac,time)]
  if $nok return

  set ALCOHOL_DENSITY 0.79
  set ingested [expr double($volume) * double($level) * 0.01 * $ALCOHOL_DENSITY]

  # in g/hr
	set METABOLIC_REMOVAL_RATE 7.0
	set remaining [expr $ingested - ($METABOLIC_REMOVAL_RATE * $elapsedTime)]
  if {$remaining < 0.0} {set remaining 0}
  
  if $xth(bac,gender) {
	  set HEIGHT_FACTOR 0.1074
    set WEIGHT_FACTOR 0.3362
    set AGE_FACTOR 0.09516
    set BODY_WATER_CONST 2.447
  } else {
    set HEIGHT_FACTOR 0.1069
    set WEIGHT_FACTOR 0.2466
    set AGE_FACTOR 0
    set BODY_WATER_CONST 2.097
  }
	set h [expr $HEIGHT_FACTOR * $height]
	set w [expr $WEIGHT_FACTOR * $weight]
	set a [expr $AGE_FACTOR * $age]
	set bodyWater [expr ($h - $a + $w + $BODY_WATER_CONST) * 1000.0]
  
	set WATER_CONTENT_OF_BLOOD 0.8157
	set BAC [expr 100.0 * ($remaining / ($bodyWater / $WATER_CONTENT_OF_BLOOD))]
	set MRS [expr 100.0 * ($METABOLIC_REMOVAL_RATE / ($bodyWater / $WATER_CONTENT_OF_BLOOD))]
  set maxRemaining [expr ($bodyWater / $WATER_CONTENT_OF_BLOOD) * 0.0002]
  if {$maxRemaining < $remaining} {
    set ETA [expr ($remaining - $maxRemaining) / $METABOLIC_REMOVAL_RATE]
  } else {
    set ETA 0.0
  }
  
  
  set xth(bac,BAC) [format "%.3f" $BAC]
  set xth(bac,ETA) [format "%d:%02d" [expr int(floor($ETA))] [expr int($ETA*60.0) % 60]]
  set xth(bac,MRS) [format "%.3f" $MRS]
  
  if {$BAC < 0.02} {
    $f.rdle configure -bg green -fg black
  } else {
    $f.rdle configure -bg red -fg white
  }

}


proc xth_bac_init {} {

  global xth
  
  set f $xth(gui,bacw)
  toplevel $f
  wm transient $f $xth(gui,main)
  wm title $f [mc "BAC calculator"]
  
  Label $f.bdl -text [mc "Biometric data"] -anchor center -font $xth(gui,lfont)
  Label $f.bdal -text [mc "age"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdae -font $xth(gui,lfont) -width 5 -textvariable xth(bac,age)
  Label $f.bdau -text [mc "years"] -anchor w -font $xth(gui,lfont)
  Label $f.bdgl -text [mc "gender"] -anchor e -font $xth(gui,lfont)
  radiobutton $f.bdgm -text [mc "male"] -anchor w \
  -font $xth(gui,lfont) -variable xth(bac,gender) -value 1
  radiobutton $f.bdgf -text [mc "female"] -anchor w \
  -font $xth(gui,lfont) -variable xth(bac,gender) -value 0
  Label $f.bdhl -text [mc "height"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdhe -font $xth(gui,lfont) -width 5 -textvariable xth(bac,height)
  Label $f.bdhu -text "cm" -anchor w -font $xth(gui,lfont)
  Label $f.bdwl -text [mc "weight"] -anchor e -font $xth(gui,lfont)
  Entry $f.bdwe -font $xth(gui,lfont) -width 5 -textvariable xth(bac,weight)
  Label $f.bdwu -text "kg" -anchor w -font $xth(gui,lfont)
  Separator $f.s1 -orient horizontal

  Label $f.cdl -text [mc "Consumption data"] -anchor center -font $xth(gui,lfont)
  Label $f.cdvl -text [mc "volume"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdve -font $xth(gui,lfont) -width 5 -textvariable xth(bac,volume)
  Label $f.cdvu -text "ml" -anchor w -font $xth(gui,lfont)

  Label $f.cdll -text [mc "alcohol level"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdle -font $xth(gui,lfont) -width 5 -textvariable xth(bac,level)
  Label $f.cdlu -text "%" -anchor w -font $xth(gui,lfont)
  
  Label $f.cdtl -text [mc "time elapsed"] -anchor e -font $xth(gui,lfont)
  Entry $f.cdte -font $xth(gui,lfont) -width 5 -textvariable xth(bac,time)
  Label $f.cdtu -text [mc "hours"] -anchor w -font $xth(gui,lfont)

  Button $f.calc -text [mc "Calculate"] -anchor center -font $xth(gui,lfont) \
  -command xth_bac_calculate

  Label $f.rdll -text [mc "BAC"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdle -font $xth(gui,lfont) -width 5 -textvariable xth(bac,BAC) \
    -editable 0
  Label $f.rdlu -text "%" -anchor w -font $xth(gui,lfont)
  
  Label $f.rdtl -text [mc "ETA"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdte -font $xth(gui,lfont) -width 5 -textvariable xth(bac,ETA) \
    -editable 0
  Label $f.rdtu -text [mc "hours"] -anchor w -font $xth(gui,lfont)

  Label $f.rdml -text [mc "MRR"] -anchor e -font $xth(gui,lfont)
  Entry $f.rdme -font $xth(gui,lfont) -width 5 -textvariable xth(bac,MRS) \
    -editable 0
  Label $f.rdmu -text "%/h" -anchor w -font $xth(gui,lfont)

  Button $f.cls -text [mc "Close"] -anchor center -font $xth(gui,lfont) \
  -command "destroy $f"

  
  grid columnconf $f 0 -weight 0
  grid columnconf $f 1 -weight 1
  grid columnconf $f 2 -weight 0

  grid $f.bdl -column 0 -row 0 -columnspan 3 -sticky news 
  grid $f.cdl -column 0 -row 7 -columnspan 3 -sticky news 

  grid $f.bdal -column 0 -row 1 -columnspan 1 -sticky news 
  grid $f.bdgl -column 0 -row 2 -rowspan 2 -sticky news 
  grid $f.bdhl -column 0 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwl -column 0 -row 5 -columnspan 1 -sticky news 
  grid $f.cdvl -column 0 -row 8 -columnspan 1 -sticky news 
  grid $f.cdll -column 0 -row 9 -columnspan 1 -sticky news 
  grid $f.cdtl -column 0 -row 10 -columnspan 1 -sticky news 
  grid $f.rdll -column 0 -row 12 -columnspan 1 -sticky news 
  grid $f.rdtl -column 0 -row 13 -columnspan 1 -sticky news 
  grid $f.rdml -column 0 -row 14 -columnspan 1 -sticky news 

  grid $f.bdae -column 1 -row 1 -columnspan 1 -sticky news 
  grid $f.bdgf -column 1 -row 3 -columnspan 2 -sticky news 
  grid $f.bdgm -column 1 -row 2 -columnspan 2 -sticky news 
  grid $f.bdhe -column 1 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwe -column 1 -row 5 -columnspan 1 -sticky news 
  grid $f.cdve -column 1 -row 8 -columnspan 1 -sticky news 
  grid $f.cdle -column 1 -row 9 -columnspan 1 -sticky news 
  grid $f.cdte -column 1 -row 10 -columnspan 1 -sticky news 
  grid $f.rdle -column 1 -row 12 -columnspan 1 -sticky news 
  grid $f.rdte -column 1 -row 13 -columnspan 1 -sticky news 
  grid $f.rdme -column 1 -row 14 -columnspan 1 -sticky news 

  grid $f.bdau -column 2 -row 1 -columnspan 1 -sticky news 
  grid $f.bdhu -column 2 -row 4 -columnspan 1 -sticky news 
  grid $f.bdwu -column 2 -row 5 -columnspan 1 -sticky news 
  grid $f.cdvu -column 2 -row 8 -columnspan 1 -sticky news 
  grid $f.cdlu -column 2 -row 9 -columnspan 1 -sticky news 
  grid $f.cdtu -column 2 -row 10 -columnspan 1 -sticky news 
  grid $f.rdlu -column 2 -row 12 -columnspan 1 -sticky news 
  grid $f.rdtu -column 2 -row 13 -columnspan 1 -sticky news 
  grid $f.rdmu -column 2 -row 14 -columnspan 1 -sticky news 

  grid $f.s1 -row 6 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3
  grid $f.calc -row 11 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3
  grid $f.cls -row 15 -column 0 -columnspan 3 -sticky news -pady 3 -padx 3

  set xth(bac,bg) [$f.rdle cget -bg]

  set sw [winfo screenwidth .]
  set sh [winfo screenheight .]
  update idletasks
  wm geometry $f -$sw-$sh
  set x [expr {($sw - [winfo width $f])/2}]
  set y [expr {($sh - [winfo height $f])/2}]
  wm geometry $f +$x+$y
  update idletasks
  
}


if 0 {
  package require BWidget
  source ver.tcl
  source global.tcl
  wm withdraw .
  set xth(gui,bacw) .f
  xth_bac_init
} else {
  set xth(bac,age) ""
  set xth(bac,height) ""
  set xth(bac,weight) ""
  set xth(bac,volume) ""
  set xth(bac,level) ""
  set xth(bac,time) ""
}

set xth(bac,gender) 1
set xth(bac,BAC) ""
set xth(bac,ETA) ""
set xth(bac,MRS) ""
  
if 0 {
  set xth(bac,age) "25"
  set xth(bac,height) "193"
  set xth(bac,weight) "90"
  set xth(bac,volume) "500"
  set xth(bac,level) "5.5"
  set xth(bac,time) "0"
}

therion-5.4.1/xtherion/console.tcl000066400000000000000000002121641307545355600172220ustar00rootroot00000000000000# console.tcl --
#
#	Console package for the plugin, based on Jeff Hobbs' TkCon work.
#	Copyright 1996-1997 Jeffrey Hobbs.
#
#	Additional copyright of modifications (c) 1995-1997
#	Sun Microsystems, Inc.
#
# This software is copyrighted by the Regents of the University of
# California, Sun Microsystems, Inc., and other parties.  The following
# terms apply to all files associated with the software unless explicitly
# disclaimed in individual files.
# 
# The authors hereby grant permission to use, copy, modify, distribute,
# and license this software and its documentation for any purpose, provided
# that existing copyright notices are retained in all copies and that this
# notice is included verbatim in any distributions. No written agreement,
# license, or royalty fee is required for any of the authorized uses.
# Modifications to this software may be copyrighted by their authors
# and need not follow the licensing terms described here, provided that
# the new terms are clearly indicated on the first page of each file where
# they apply.
# 
# IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
# FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
# ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
# DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
# 
# THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
# IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
# NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
# MODIFICATIONS.
# 
# GOVERNMENT USE: If you are acquiring this software on behalf of the
# U.S. government, the Government shall have only "Restricted Rights"
# in the software and related documentation as defined in the Federal 
# Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
# are acquiring the software on behalf of the Department of Defense, the
# software shall be classified as "Commercial Computer Software" and the
# Government shall have only "Restricted Rights" as defined in Clause
# 252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
# authors grant the U.S. Government and others acting in its behalf
# permission to use and distribute the software in accordance with the
# terms specified in this license.
#
# SCCS: @(#) console.tcl 1.14 97/10/16 18:58:44
#
##------------------------------------------------------------------------
## PROCEDURE
##	console
##
## DESCRIPTION
##	Implements a console mega-widget
##
## ARGUMENTS
##	console  
##
## OPTIONS
##	(Any frame widget option may be used in addition to these)
##
##  -blinkcolor color			DEFAULT: yellow
##	Specifies the background blink color for brace highlighting.
##	This doubles as the highlight color for the find box.
##
##  -blinkrange TCL_BOOLEAN		DEFAULT: 1
##	When doing electric brace matching, specifies whether to blink
##	the entire range or just the matching braces.
##
##  -blinktime delay			DEFAULT: 500
##	For electric brace matching, specifies the amount of time to
##	blink the background for.
##
##  -cols ##				DEFAULT: 80
##	Specifies the startup width of the console.
##
##  -grabputs TCL_BOOLEAN		DEFAULT: 1
##	Whether this console should grab the "puts" default output
##
##  -lightbrace TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to activate electric brace matching.
##
##  -lightcmd TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to highlight recognized commands.
##
##  -proccolor color			DEFAULT: darkgreen
##	Specifies the color to highlight recognized procs.
##
##  -promptcolor color			DEFAULT: brown
##	Specifies the prompt color.
##
##  -rows ##				DEFAULT: 20
##	Specifies the startup height of the console.
##
##  -stdincolor color			DEFAULT: black
##	Specifies the color for "stdin".
##	This doubles as the console foreground color.
##
##  -stdoutcolor color			DEFAULT: blue
##	Specifies the color for "stdout".
##
##  -stderrcolor color			DEFAULT: red
##	Specifies the color for "stderr".
##
##  -scrollypos left|right		DEFAULT: right
##	Specified position of the console scrollbar relative to the text.
##
##  -showmultiple TCL_BOOLEAN		DEFAULT: 1
##	For file/proc/var completion, specifies whether to display
##	completions when multiple choices are possible.
##
##  -showmenu TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to show the menubar.
##
##  -subhistory TCL_BOOLEAN		DEFAULT: 1
##	Specifies whether to allow substitution in the history.
##
## RETURNS: the window pathname
##
## BINDINGS (these are the bindings for Console, used in the text widget)
##
## <>	
## <>	
## <>	
## <>		
## <>		 
##
## <>		
## <>		
## <>	
## <>	
## <>	
##
## <>		
## <>		
## <>	
## <>	
## <>	
## <>	
##
## <>		
## <>		
## <>		
## <>		
## <>		
## <>		
##
## METHODS
##	These are the methods that the console megawidget recognizes.
##
## configure ?option? ?value option value ...?
## cget option
##	Standard tk widget routines.
##
## load ?filename?
##	Loads the named file into the current interpreter.
##	If no file is specified, it pops up the file requester.
##
## save ?filename?
##	Saves the console buffer to the named file.
##	If no file is specified, it pops up the file requester.
##
## clear ?percentage?
##	Clears a percentage of the console buffer (1-100).  If no
##	percentage is specified, the entire buffer is cleared.
##
## error
##	Displays the last error in the interpreter in a dialog box.
##
## hide
##	Withdraws the console from the screen
##
## history ?-newline?
##	Prints out the history without numbers (basically providing a
##	list of the commands you've used).
##
## show
##	Deiconifies and raises the console
##
## subwidget widget
##	Returns the true widget path of the specified widget.  Valid
##	widgets are console, scrolly, menubar.
##
## NAMESPACE & STATE
##	The megawidget creates a global array with the classname, and a
## global array which is the name of each megawidget created.  The latter
## array is deleted when the megawidget is destroyed.
##	The procedure console and those beginning with Console are
## used.  Also, when a widget is created, commands named .$widgetname
## and Console$widgetname are created.
##
## EXAMPLE USAGE:
##
## console .con -rows 24 -showmenu false
##
##------------------------------------------------------------------------

set xth(gui,dbg) .

package require Tk

proc megawidget {CLASS} {
  upvar \#0 $CLASS class

  foreach o [array names class -*] {
    foreach {name cname val} $class($o) {
      if [string match -* $name] continue
      option add *$CLASS.$name [uplevel \#0 [list subst $val]] widgetDefault
    }
  }
  set class(class) $CLASS

  bind $CLASS  "catch {${CLASS}_destroy %W}"

  ;proc $CLASS:eval {w method args} {
    upvar \#0 $w data
    set class [winfo class $w]
    if [string match {} [set arg [info command ${class}_$method]]] {
      set arg [info command ${class}_$method*]
    }
    set num [llength $arg]
    if {$num==1} {
      return [uplevel $arg [list $w] $args]
    } elseif {$num} {
      return -code error "ambiguous option \"$method\""
    } elseif {[catch {uplevel [list $data(cmd) $method] $args} err]} {
      return -code error $err
    } else {
      return $err
    }
  }

  ;proc ${CLASS}_destroy w {
    upvar \#0 $w data
    catch { [winfo class $w]:destroy $w }
    catch { rename $w {} }
    catch { rename $data(cmd) {} }
    catch { unset data }
  }

  ;proc ${CLASS}_cget {w args} {
    if {[llength $args] != 1} {
      return -code error "wrong \# args: should be \"$w cget option\""
    }
    upvar \#0 $w data [winfo class $w] class
    if {[info exists class($args)] && [string match -* $class($args)]} {
      set args $class($args)
    }
    if [string match {} [set arg [array names data $args]]] {
      set arg [array names data ${args}*]
    }
    set num [llength $arg]
    if {$num==1} {
      return $data($arg)
    } elseif {$num} {
      return -code error "ambiguous option \"$args\""
    } elseif {[catch {$data(cmd) cget $args} err]} {
      return -code error $err
    } else {
      return $err
    }
  }

  ;proc ${CLASS}_configure {w args} {
    upvar \#0 $w data [winfo class $w] class

    set num [llength $args]
    if {$num==1} {
      if {[info exists class($args)] && [string match -* $class($args)]} {
	set args $class($args)
      }
      if [string match {} [set arg [array names data $args]]] {
	set arg [array names data ${args}*]
      }
      set num [llength $arg]
      if {$num==1} {
	return [list $arg $class($arg) $data($arg)]
      } elseif {$num} {
	return -code error "ambiguous option \"$args\""
      } elseif {[catch {$data(cmd) config $args} err]} {
	return -code error $err
      } else {
	return $err
      }
    } elseif {$num} {
      for {set i 0} {$i<$num} {incr i} {
	set key [lindex $args $i]
	if {[info exists class($key)] && [string match -* $class($key)]} {
	  set key $class($key)
	}
	if [string match {} [set arg [array names data $key]]] {
	  set arg [array names data $key*]
	}
	set val [lindex $args [incr i]]
	set len [llength $arg]
	if {$len==1} {
	  $class(class):configure $w $arg $val
	} elseif {$len} {
	  return -code error "ambiguous option \"$args\""
	} elseif {[catch {$data(cmd) configure $key $val} err]} {
	  return -code error $err
	}
      }
      return
    } else {
      set conf [$data(cmd) config]
      foreach i [array names data -*] {
	lappend conf "$i $class($i) [list $data($i)]"
      }
      return [lsort $conf]
    }
  }

  ;proc $CLASS:configure {w key value}  {
    puts "$w: $key configured to [list $value]"
  }

  return $CLASS
}

foreach pkg [info loaded {}] {
  set file [lindex $pkg 0]
  set name [lindex $pkg 1]
  if {![catch {set version [package require $name]}]} {
    if {[string match {} [package ifneeded $name $version]]} {
      package ifneeded $name $version "load [list $file $name]"
    }
  }
}
catch {unset file name version}

set Console(WWW) [info exists embed_args]

array set Console {
  -blinkcolor	{blinkColor	BlinkColor	yellow}
  -proccolor	{procColor	ProcColor	darkgreen}
  -promptcolor	{promptColor	PromptColor	brown}
  -stdincolor	{stdinColor	StdinColor	black}
  -stdoutcolor	{stdoutColor	StdoutColor	blue}
  -stderrcolor	{stderrColor	StderrColor	red}

  -blinkrange	{blinkRange	BlinkRange	1}
  -blinktime	{blinkTime	BlinkTime	500}
  -cols		{columns	Columns		80}
  -grabputs	{grabPuts	GrabPuts	1}
  -lightbrace	{lightBrace	LightBrace	1}
  -lightcmd	{lightCmd	LightCmd	1}
  -rows		{rows		Rows		20}
  -scrollypos	{scrollYPos	ScrollYPos	right}
  -showmultiple	{showMultiple	ShowMultiple	1}
  -showmenu	{showMenu	ShowMenu	1}
  -subhistory	{subhistory	SubHistory	1}

  active	{}
  version	1.2
  release	{February 1997}
  contact	{jhobbs@cs.uoregon.edu}
  docs		{http://www.sunlabs.com/tcl/plugin/}
  slavealias	{ console }
  slaveprocs	{ alias dir dump lremove puts echo unknown tcl_unknown which }
}

if [string compare unix $tcl_platform(platform)] {
  set Console(-font) {font	Font	{Courier 14}}
} else {
  set Console(-font) {font	Font	fixed}
}

if $Console(WWW) {
  set Console(-prompt) {prompt	Prompt	{\[history nextid\] % }}
} else {
  set Console(-prompt) {prompt	Prompt	\
      {(\[file tail \[pwd\]\]) \[history nextid\] % }}
}

megawidget Console
set ConsoleDialog(version) $Console(version)
megawidget ConsoleDialog

proc console_dialog {w args} {
  set CLASS ConsoleDialog
  upvar \#0 $w data $CLASS class
  toplevel $w -class $CLASS
  wm withdraw $w
  wm title $w "Console $class(version)"

  ## User definable options
  foreach o [array names class -*] {
    if [string match -* $class($o)] continue
    set data($o) [option get $w [lindex $class($o) 0] $CLASS]
  }

  ## Private variables
  array set data [list class $CLASS cmd $CLASS$w \
      console	$w.con \
      ]

  pack [console $data(console)] -fill both -exp 1

  rename $w .$w
  rename $data(console) $data(cmd)
  if {[string comp {} $args] && \
      [catch {eval ConsoleDialog_configure $w $args} err]} {
    catch {destroy $w}
    catch {unset data}
    return -code error $err
  }
  ;proc $w		args "eval $CLASS:eval [list $w] \$args"
  ## FIX TEST!!!
  ;proc $data(console)	args "eval $CLASS:eval [list $w] \$args"

  return $w
}

;proc ConsoleDialog_subwidget {w widget} {
  upvar \#0 $w data
  switch -- $widget {
    console { return $data($widget) }
    default { return -code error "No $data(class) subwidget \"$widget\"" }
  }
}

;proc ConsoleDialog:configure {w key val} {
  upvar \#0 $w data
  set truth {^(1|yes|true|on)$}
  switch -- $key {
  }
}

;proc ConsoleDialog_hide w { if [winfo exists $w] {wm withdraw $w} }

;proc ConsoleDialog_show w { if [winfo exists $w] {wm deiconify $w; raise $w} }

## console -
# ARGS:	w	- widget pathname of the Console console
#	args
# Calls:	ConsoleInitUI
# Outputs:	errors found in Console resource file
##
proc console {W args} {
    global Console
  set CLASS Console
  upvar \#0 $W data $CLASS class
  frame $W -class $CLASS

  ## User definable options
  foreach o [array names class -*] {
    if [string match -* $class($o)] continue
    set data($o) [option get $W [lindex $class($o) 0] $CLASS]
  }

  global auto_path tcl_pkgPath tcl_interactive
  set tcl_interactive 1

  ## Private variables
  array set data {
    appname {} cmdbuf {} cmdsave {} errorInfo {}
    event 1 histid 0 find {} find,case 0 find,reg 0
  }
  array set data [list class $CLASS cmd $CLASS$W \
      menubar	$W.bar \
      console	$W.text \
      scrolly	$W.sy \
      ]

  rename $W $data(cmd)
  if {[string comp {} $args] && \
      [catch {eval ${CLASS}_configure $W $args} err]} {
    catch {destroy $W}
    catch {unset data}
    return -code error $err
  }
  ;proc $W args "eval $CLASS:eval [list $W] \$args"

  if {!$Console(WWW)} {
      if {![info exists tcl_pkgPath]} {
	  set dir [file join [file dirname [info nameofexec]] lib]
	  if [string comp {} [info commands @scope]] {
	      set dir [file join $dir itcl]
	  }
	  catch {source [file join $dir pkgIndex.tcl]}
      }
      catch {tclPkgUnknown dummy-name dummy-version}
  }

  ## Menus
  frame $data(menubar) -relief raised -bd 2
  set c [text $data(console) -font $data(-font) -wrap char -setgrid 1 \
      -yscrollcomm [list $W.sy set] -foreground $data(-stdincolor) \
      -width $data(-cols) -height $data(-rows)]
  bindtags $W [list $W all]
  bindtags $c [list $c PreCon Console PostCon $W all]
  scrollbar $data(scrolly) -takefocus 0 -bd 1 -command "$c yview"

  ConsoleInitMenus $W

  if $data(-showmenu) { pack $data(menubar) -fill x }
  pack $data(scrolly) -side $data(-scrollypos) -fill y
  pack $c -fill both -expand 1

  Console:prompt $W "console display active\n"

  foreach col {prompt stdout stderr stdin proc} {
    $c tag configure $col -foreground $data(-${col}color)
  }
  $c tag configure blink -background $data(-blinkcolor)
  $c tag configure find -background $data(-blinkcolor)

  bind $c  {
    set W [winfo toplevel %W]
    scan [wm geometry $W] "%%dx%%d" $W\(-cols\) $W\(-rows\)
  }

  if {$data(-grabputs) && [lsearch $class(active) $W] == -1} {
    set class(active) [linsert $class(active) 0 $W]
  }

  return $W
}

;proc Console:configure { W key val } {
  upvar \#0 $W data
  global Console

  set truth {^(1|yes|true|on)$}
  switch -- $key {
    -blinkcolor		{
      $data(console) tag config blink -background $val
      $data(console) tag config find -background $val
    }
    -proccolor		{ $data(console) tag config proc   -foreground $val }
    -promptcolor	{ $data(console) tag config prompt -foreground $val }
    -stdincolor		{
      $data(console) tag config stdin  -foreground $val
      $data(console) config -foreground $val
    }
    -stdoutcolor	{ $data(console) tag config stdout -foreground $val }
    -stderrcolor	{ $data(console) tag config stderr -foreground $val }

    -blinktime		{
      if ![regexp {[0-9]+} $val] {
	return -code error "$key option requires an integer value"
      }
    }
    -cols		{
      if [winfo exists $data(console)] { $data(console) config -width $val }
    }
    -font		{ $data(console) config -font $val }
    -grabputs		{
      set val [regexp -nocase $truth $val]
      if $val {
	set Console(active) [linsert $Console(active) 0 $W]
      } else {
	set Console(active) [lremove -all $Console(active) $W]
      }
    }
    -lightbrace		{ set val [regexp -nocase $truth $val] }
    -lightcmd		{ set val [regexp -nocase $truth $val] }
    -prompt		{
      if [catch {uplevel \#0 [list subst $val]} err] {
	return -code error "\"$val\" threw an error:\n$err"
      }
    }
    -rows		{
      if [winfo exists $data(console)] { $data(console) config -height $val }
    }
    -scrollypos		{
      if [regexp {^(left|right)$} $val junk val] {
	if [winfo exists $data(scrolly)] {
	  pack config $data(scrolly) -side $val
	}
      } else {
	return -code error "bad option \"$val\": must be left or right"
      }
    }
    -showmultiple	{ set val [regexp -nocase $truth $val] }
    -showmenu		{
      set val [regexp -nocase $truth $val]
      if [winfo exists $data(menubar)] {
	if $val {
	  pack $data(menubar) -fill x -before $data(console) \
	      -before $data(scrolly)
	} else { pack forget $data(menubar) }
      }
    }
    -subhistory		{ set val [regexp -nocase $truth $val] }
  }
  set data($key) $val
}

;proc Console:destroy W {
  global Console
  set Console(active) [lremove $Console(active) $W]
}

## ConsoleEval - evaluates commands input into console window
## This is the first stage of the evaluating commands in the console.
## They need to be broken up into consituent commands (by ConsoleCmdSep) in
## case a multiple commands were pasted in, then each is eval'ed (by
## ConsoleEvalCmd) in turn.  Any uncompleted command will not be eval'ed.
# ARGS:	w	- console text widget
# Calls:	ConsoleCmdGet, ConsoleCmdSep, ConsoleEvalCmd
## 
;proc ConsoleEval {w} {
  ConsoleCmdSep [ConsoleCmdGet $w] cmds cmd
  $w mark set insert end-1c
  $w insert end \n
  if [llength $cmds] {
    foreach c $cmds {ConsoleEvalCmd $w $c}
    $w insert insert $cmd {}
  } elseif {[info complete $cmd] && ![regexp {[^\\]\\$} $cmd]} {
    ConsoleEvalCmd $w $cmd
  }
  $w see insert
}

## ConsoleEvalCmd - evaluates a single command, adding it to history
# ARGS:	w	- console text widget
# 	cmd	- the command to evaluate
# Calls:	Console:prompt
# Outputs:	result of command to stdout (or stderr if error occured)
# Returns:	next event number
## 
;proc ConsoleEvalCmd {w cmd} {
  ## HACK to get $W as we need it
  set W [winfo parent $w]
  upvar \#0 $W data

  $w mark set output end
  if [string comp {} $cmd] {
    set err 0
    if $data(-subhistory) {
      set ev [ConsoleEvalSlave history nextid]
      incr ev -1
      if {[string match !! $cmd]} {
	set err [catch {ConsoleEvalSlave history event $ev} cmd]
	if !$err {$w insert output $cmd\n stdin}
      } elseif {[regexp {^!(.+)$} $cmd dummy event]} {
	## Check last event because history event is broken
	set err [catch {ConsoleEvalSlave history event $ev} cmd]
	if {!$err && ![string match ${event}* $cmd]} {
	  set err [catch {ConsoleEvalSlave history event $event} cmd]
	}
	if !$err {$w insert output $cmd\n stdin}
      } elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $cmd dummy old new]} {
	if ![set err [catch {ConsoleEvalSlave history event $ev} cmd]] {
	  regsub -all -- $old $cmd $new cmd
	  $w insert output $cmd\n stdin
	}
      }
    }
    if $err {
      $w insert output $cmd\n stderr
    } else {
      if [string match {} $data(appname)] {
	if [catch {ConsoleEvalSlave eval $cmd} res] {
	  set data(errorInfo) [ConsoleEvalSlave set errorInfo]
	  set err 1
	}
      } else {
	if [catch [list ConsoleEvalAttached $cmd] res] {
	  if [catch {ConsoleEvalAttached set errorInfo} err] {
	    set data(errorInfo) {Error attempting to retrieve errorInfo}
	  } else {
	    set data(errorInfo) $err
	  }
	  set err 1
	}
      }
      ConsoleEvalSlave history add $cmd
      if $err {
	$w insert output $res\n stderr
      } elseif {[string comp {} $res]} {
	$w insert output $res\n stdout
      }
    }
  }
  Console:prompt $W
  set data(event) [ConsoleEvalSlave history nextid]
}

## ConsoleEvalSlave - evaluates the args in the associated slave
## args should be passed to this procedure like they would be at
## the command line (not like to 'eval').
# ARGS:	args	- the command and args to evaluate
##
;proc ConsoleEvalSlave {args} {
  uplevel \#0 $args
}

## ConsoleEvalAttached
##
;proc ConsoleEvalAttached {args} {
  eval uplevel \#0 $args
}

## ConsoleCmdGet - gets the current command from the console widget
# ARGS:	w	- console text widget
# Returns:	text which compromises current command line
## 
;proc ConsoleCmdGet w {
  if [string match {} [$w tag nextrange prompt limit end]] {
    $w tag add stdin limit end-1c
    return [$w get limit end-1c]
  }
}

## ConsoleCmdSep - separates multiple commands into a list and remainder
# ARGS:	cmd	- (possible) multiple command to separate
# 	list	- varname for the list of commands that were separated.
#	rmd	- varname of any remainder (like an incomplete final command).
#		If there is only one command, it's placed in this var.
# Returns:	constituent command info in varnames specified by list & rmd.
## 
;proc ConsoleCmdSep {cmd ls rmd} {
  upvar $ls cmds $rmd tmp

  set tmp {}
  set cmds {}
  foreach cmd [split [set cmd] \n] {
    if [string comp {} $tmp] {
      append tmp \n$cmd
    } else {
      append tmp $cmd
    }
    if {[info complete $tmp] && ![regexp {[^\\]\\$} $tmp]} {
      lappend cmds $tmp
      set tmp {}
    }
  }
  if {[string comp {} [lindex $cmds end]] && [string match {} $tmp]} {
    set tmp [lindex $cmds end]
    set cmds [lreplace $cmds end end]
  }
}

## Console:prompt - displays the prompt in the console widget
# ARGS:	w	- console text widget
# Outputs:	prompt (specified in data(-prompt)) to console
## 
;proc Console:prompt {W {pre {}} {post {}} {prompt {}}} {
  upvar \#0 $W data

  set w $data(console)
  if [string comp {} $pre] { $w insert end $pre stdout }
  set i [$w index end-1c]
  if [string comp {} $data(appname)] {
    $w insert end ">$data(appname)< " prompt
  }
  if [string comp {} $prompt] {
    $w insert end $prompt prompt
  } else {
    $w insert end [ConsoleEvalSlave subst $data(-prompt)] prompt
  }
  $w mark set output $i
  $w mark set insert end
  $w mark set limit insert
  $w mark gravity limit left
  if [string comp {} $post] { $w insert end $post stdin }
  $w see end
}

## ConsoleAbout - gives about info for Console
## 
;proc ConsoleAbout W {
  global Console

  set w $W.about
  if [winfo exists $w] {
    wm deiconify $w
  } else {
    global tk_patchLevel tcl_patchLevel tcl_platform
    toplevel $w
    wm title $w "About Console v$Console(version)"
    button $w.b -text Dismiss -command [list wm withdraw $w]
    text $w.text -height 9 -bd 1 -width 60
    pack $w.b -fill x -side bottom
    pack $w.text -fill both -side left -expand 1
    $w.text tag config center -justify center
    global tcl_platform
    if {[string comp unix $tcl_platform(platform)] || [info tclversion] >= 8} {
      $w.text tag config title -justify center -font {Courier 18 bold}
    } else {
      $w.text tag config title -justify center -font *Courier*Bold*18*
    }
    $w.text insert 1.0 "About Console v$Console(version)\n\n" title \
	"Copyright 1995-1997 Jeffrey Hobbs, $Console(contact)\
	\nhttp://www.cs.uoregon.edu/~jhobbs/\
	\nRelease Date: v$Console(version), $Console(release)\
	\nDocumentation available at:\n$Console(docs)\
	\nUsing: Tcl v$tcl_patchLevel / Tk v$tk_patchLevel" center
  }
}

## ConsoleInitMenus - inits the menubar and popup for the console
# ARGS:	W	- console
## 
;proc ConsoleInitMenus {W} {
  upvar \#0 $W data

  set w    $data(menubar)
  set text $data(console)

  if [catch {menu $w.pop -tearoff 0}] {
    label $w.label -text "Menus not available in plugin mode"
    pack $w.label
    return
  }
  bind [winfo toplevel $w]  "tk_popup $w.pop %X %Y"
  bind $text  "tk_popup $w.pop %X %Y"

  pack [menubutton $w.con  -text "Console"  -un 0 -menu $w.con.m] -side left
  $w.pop add cascade -label "Console" -un 0 -menu $w.pop.con

  pack [menubutton $w.edit -text "Edit"     -un 0 -menu $w.edit.m] -side left
  $w.pop add cascade -label "Edit"    -un 0 -menu $w.pop.edit

  pack [menubutton $w.pref -text "Prefs"    -un 0 -menu $w.pref.m] -side left
  $w.pop add cascade -label "Prefs"   -un 0 -menu $w.pop.pref

  pack [menubutton $w.hist -text "History"  -un 0 -menu $w.hist.m] -side left
  $w.pop add cascade -label "History"   -un 0 -menu $w.pop.hist

  pack [menubutton $w.help -text "Help"     -un 0 -menu $w.help.m] -side right
  $w.pop add cascade -label "Help"    -un 0 -menu $w.pop.help

  ## Console Menu
  ##
  foreach m [list [menu $w.con.m -disabledfore $data(-promptcolor)] \
		 [menu $w.pop.con -disabledfore $data(-promptcolor)]] {
    $m add command -label "Console $W" -state disabled
    $m add command -label "Close Console " -un 0 \
	-acc [event info <>] -command [list destroy $W]
    $m add command -label "Clear Console " -un 1 \
	-acc [event info <>] -command [list Console_clear $W]
    $m add separator
    $m add command -label "Quit" -un 0 -acc [event info <>] \
	-command exit
  }

  ## Edit Menu
  ##
  foreach m [list [menu $w.edit.m] [menu $w.pop.edit]] {
    $m add command -label "Cut"   -un 1 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsoleCut $text]
    $m add command -label "Copy"  -un 1 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsoleCopy $text]
    $m add command -label "Paste" -un 0 \
	-acc [lindex [event info <>] 0] \
	-command [list ConsolePaste $text]
    $m add separator
    $m add command -label "Find"  -un 0 -acc [event info <>] \
	-command [list ConsoleFindBox $W]
  }

  ## Prefs Menu
  ##
  foreach m [list [menu $w.pref.m] [menu $w.pop.pref]] {
    $m add checkbutton -label "Brace Highlighting"    -var $W\(-lightbrace\)
    $m add checkbutton -label "Command Highlighting"  -var $W\(-lightcmd\)
    $m add checkbutton -label "Grab Puts Output"      -var $W\(-grabputs\) \
	-command "Console:configure $W -grabputs \[set $W\(-grabputs\)\]"
    $m add checkbutton -label "History Substitution"  -var $W\(-subhistory\)
    $m add checkbutton -label "Show Multiple Matches" -var $W\(-showmultiple\)
    $m add checkbutton -label "Show Menubar"	      -var $W\(-showmenu\) \
	-command "Console:configure $W -showmenu \[set $W\(-showmenu\)\]"
    $m add cascade -label Scrollbar -un 0 -menu $m.scroll

    ## Scrollbar Menu
    ##
    set m [menu $m.scroll -tearoff 0]
    $m add radio -label "Left" -var $W\(-scrollypos\) -value left \
	-command [list Console:configure $W -scrollypos left]
    $m add radio -label "Right" -var $W\(-scrollypos\) -value right \
	-command [list Console:configure $W -scrollypos right]
  }

  ## History Menu
  ##
  foreach m [list $w.hist.m $w.pop.hist] {
    menu $m -disabledfore $data(-promptcolor) \
	-postcommand [list ConsoleHistoryMenu $W $m]
  }

  ## Help Menu
  ##
  foreach m [list [menu $w.help.m] [menu $w.pop.help]] {
    $m config -disabledfore $data(-promptcolor)
    $m add command -label "About " -un 0 -acc [event info <>] \
	-command [list ConsoleAbout $W]
  }

  bind $W <>	exit
  #bind $W <>	ConsoleNew
  bind $W <>	[list destroy $W]
  bind $W <>	[list ConsoleAbout $W]
  bind $W <>	[list ConsoleHelp $W]
  bind $W <>	[list ConsoleFindBox $W]

  ## Menu items need null PostCon bindings to avoid the TagProc
  ##
  foreach ev [bind $W] {
    bind PostCon $ev {
      # empty
    }
  }
}

## ConsoleHistoryMenu - dynamically build the menu for attached interpreters
##
# ARGS:	w	- menu widget
##
;proc ConsoleHistoryMenu {W w} {
  upvar \#0 $W data

  if ![winfo exists $w] return
  set id [ConsoleEvalSlave history nextid]
  if {$data(histid)==$id} return
  set data(histid) $id
  $w delete 0 end
  set con $data(console)
  while {($id>$data(histid)-10) && \
      ![catch {ConsoleEvalSlave history event [incr id -1]} tmp]} {
    set lbl [lindex [split $tmp "\n"] 0]
    if {[string len $lbl]>32} { set lbl [string range $tmp 0 30]... }
    $w add command -label "$id: $lbl" -command "
    $con delete limit end
    $con insert limit [list $tmp]
    $con see end
    ConsoleEval $con
    "
  }
}

## ConsoleFindBox - creates minimal dialog interface to ConsoleFind
# ARGS:	w	- text widget
#	str	- optional seed string for data(find)
##
;proc ConsoleFindBox {W {str {}}} {
  upvar \#0 $W data

  set t $data(console)
  set base $W.find
  if ![winfo exists $base] {
    toplevel $base
    wm withdraw $base
    wm title $base "Console Find"

    pack [frame $base.f] -fill x -expand 1
    label $base.f.l -text "Find:"
    entry $base.f.e -textvar $W\(find\)
    pack [frame $base.opt] -fill x
    checkbutton $base.opt.c -text "Case Sensitive" -variable $W\(find,case\)
    checkbutton $base.opt.r -text "Use Regexp" -variable $W\(find,reg\)
    pack $base.f.l -side left
    pack $base.f.e $base.opt.c $base.opt.r -side left -fill both -expand 1
    pack [frame $base.sep -bd 2 -relief sunken -height 4] -fill x
    pack [frame $base.btn] -fill both
    button $base.btn.fnd -text "Find" -width 6
    button $base.btn.clr -text "Clear" -width 6
    button $base.btn.dis -text "Dismiss" -width 6
    eval pack [winfo children $base.btn] -padx 4 -pady 2 -side left -fill both

    focus $base.f.e

    bind $base.f.e  [list $base.btn.fnd invoke]
    bind $base.f.e  [list $base.btn.dis invoke]
  }
  $base.btn.fnd config -command "Console_find $W \$data(find) \
      -case \$data(find,case) -reg \$data(find,reg)"
  $base.btn.clr config -command "
  $t tag remove find 1.0 end
  set data(find) {}
  "
  $base.btn.dis config -command "
  $t tag remove find 1.0 end
  wm withdraw $base
  "
  if [string comp {} $str] {
    set data(find) $str
    $base.btn.fnd invoke
  }

  if {[string comp normal [wm state $base]]} {
    wm deiconify $base
  } else { raise $base }
  $base.f.e select range 0 end
}

## Console_find - searches in text widget for $str and highlights it
## If $str is empty, it just deletes any highlighting
# ARGS: W	- console widget
#	str	- string to search for
#	-case	TCL_BOOLEAN	whether to be case sensitive	DEFAULT: 0
#	-regexp	TCL_BOOLEAN	whether to use $str as pattern	DEFAULT: 0
##
;proc ConsoleFind {W str args} {
  upvar \#0 $W data
  set t $data(console)
  $t tag remove find 1.0 end
  set truth {^(1|yes|true|on)$}
  set opts  {}
  foreach {key val} $args {
    switch -glob -- $key {
      -c* { if [regexp -nocase $truth $val] { set case 1 } }
      -r* { if [regexp -nocase $truth $val] { lappend opts -regexp } }
      default { return -code error "Unknown option $key" }
    }
  }
  if ![info exists case] { lappend opts -nocase }
  if [string match {} $str] return
  $t mark set findmark 1.0
  while {[string comp {} [set ix [eval $t search $opts -count numc -- \
      [list $str] findmark end]]]} {
    $t tag add find $ix ${ix}+${numc}c
    $t mark set findmark ${ix}+1c
  }
  catch {$t see find.first}
  return [expr [llength [$t tag ranges find]]/2]
}

## Console:savecommand - saves a command in a buffer for later retrieval
#
##
;proc Console:savecommand {w} {
  upvar \#0 [winfo parent $w] data

  set tmp $data(cmdsave)
  set data(cmdsave) [ConsoleCmdGet $w]
  if {[string match {} $data(cmdsave)]} {
    set data(cmdsave) $tmp
  } else {
    $w delete limit end-1c
  }
  $w insert limit $tmp
  $w see end
}

## Console_load - sources a file into the console
# ARGS:	fn	- (optional) filename to source in
# Returns:	selected filename ({} if nothing was selected)
## 
;proc Console_load {W {fn {}}} {
  if {[string match {} $fn] &&
      ([catch {tk_getOpenFile} fn] || [string match {} $fn])} return
  ConsoleEvalAttached [list source $fn]
}

## Console_save - saves the console buffer to a file
## This does not eval in a slave because it's not necessary
# ARGS:	w	- console text widget
# 	fn	- (optional) filename to save to
## 
;proc Console_save {W {fn {}}} {
  upvar \#0 $W data

  if {[string match {} $fn] &&
      ([catch {tk_getSaveFile} fn] || [string match {} $fn])} return
  if [catch {open $fn w} fid] {
    return -code error "Save Error: Unable to open '$fn' for writing\n$fid"
  }
  puts $fid [$data(console) get 1.0 end-1c]
  close $fid
}

## clear - clears the buffer of the console (not the history though)
## 
;proc Console_clear {W {pcnt 100}} {
  upvar \#0 $W data

  set data(tmp) [ConsoleCmdGet $data(console)]
  if {![regexp {^[0-9]*$} $pcnt] || $pcnt < 1 || $pcnt > 100} {
    return -code error \
	"invalid percentage to clear: must be 1-100 (100 default)"
  } elseif {$pcnt == 100} {
    $data(console) delete 1.0 end
  } else {
    set tmp [expr $pcnt/100.0*[$data(console) index end]]
    $data(console) delete 1.0 "$tmp linestart"
  }
  Console:prompt $W {} $data(tmp)
}

;proc Console_error {W} {
  ## Outputs stack caused by last error.
  upvar \#0 $W data
  set info $data(errorInfo)
  if [string match {} $info] { set info {errorInfo empty} }
  catch {destroy $W.error}
  set w [toplevel $W.error]
  wm title $w "Console Last Error"
  button $w.close -text Dismiss -command [list destroy $w]
  scrollbar $w.sy -takefocus 0 -bd 1 -command [list $w.text yview]
  text $w.text -font $data(-font) -yscrollcommand [list $w.sy set]
  pack $w.close -side bottom -fill x
  pack $w.sy -side right -fill y
  pack $w.text -fill both -expand 1
  $w.text insert 1.0 $info
  $w.text config -state disabled
}

## Console_event - searches for history based on a string
## Search forward (next) if $int>0, otherwise search back (prev)
# ARGS:	W	- console widget
##
;proc Console_event {W int {str {}}} {
  upvar \#0 $W data

  if !$int return
  set w $data(console)

  set nextid [ConsoleEvalSlave history nextid]
  if [string comp {} $str] {
    ## String is not empty, do an event search
    set event $data(event)
    if {$int < 0 && $event == $nextid} { set data(cmdbuf) $str }
    set len [string len $data(cmdbuf)]
    incr len -1
    if {$int > 0} {
      ## Search history forward
      while {$event < $nextid} {
	if {[incr event] == $nextid} {
	  $w delete limit end
	  $w insert limit $data(cmdbuf)
	  break
	} elseif {![catch {ConsoleEvalSlave history event $event} res] \
	    && ![string comp $data(cmdbuf) [string range $res 0 $len]]} {
	  $w delete limit end
	  $w insert limit $res
	  break
	}
      }
      set data(event) $event
    } else {
      ## Search history reverse
      while {![catch {ConsoleEvalSlave history event [incr event -1]} res]} {
	if {![string comp $data(cmdbuf) [string range $res 0 $len]]} {
	  $w delete limit end
	  $w insert limit $res
	  set data(event) $event
	  break
	}
      }
    } 
  } else {
    ## String is empty, just get next/prev event
    if {$int > 0} {
      ## Goto next command in history
      if {$data(event) < $nextid} {
	$w delete limit end
	if {[incr data(event)] == $nextid} {
	  $w insert limit $data(cmdbuf)
	} else {
	  $w insert limit [ConsoleEvalSlave history event $data(event)]
	}
      }
    } else {
      ## Goto previous command in history
      if {$data(event) == $nextid} { set data(cmdbuf) [ConsoleCmdGet $w] }
      if [catch {ConsoleEvalSlave history event [incr data(event) -1]} res] {
	incr data(event)
      } else {
	$w delete limit end
	$w insert limit $res
      }
    }
  }
  $w mark set insert end
  $w see end
}

;proc Console_history {W args} {
  set sub {\2}
  if [string match -n* $args] { append sub "\n" }
  set h [ConsoleEvalSlave history]
  regsub -all "( *\[0-9\]+  |\t)(\[^\n\]*\n?)" $h $sub h
  return $h
}

##
## Some procedures to make up for lack of built-in shell commands
##

## puts
## This allows me to capture all stdout/stderr to the console window
# ARGS:	same as usual	
# Outputs:	the string with a color-coded text tag
## 
if ![catch {rename puts tcl_puts}] {
  ;proc puts args {
    global Console
    set w [lindex $Console(active) 0].text
    if {[llength $Console(active)] && [winfo exists $w]} {
      set len [llength $args]
      if {$len==1} {
	eval $w insert output $args stdout {\n} stdout
	$w see output
      } elseif {$len==2 && \
	  [regexp {(stdout|stderr|-nonewline)} [lindex $args 0] junk tmp]} {
	if [string comp $tmp -nonewline] {
	  eval $w insert output [lreplace $args 0 0] $tmp {\n} $tmp
	} else {
	  eval $w insert output [lreplace $args 0 0] stdout
	}
	$w see output
      } elseif {$len==3 && \
	  [regexp {(stdout|stderr)} [lreplace $args 2 2] junk tmp]} {
	if [string comp [lreplace $args 1 2] -nonewline] {
	  eval $w insert output [lrange $args 1 1] $tmp
	} else {
	  eval $w insert output [lreplace $args 0 1] $tmp
	}
	$w see output
      } else {
	global errorCode errorInfo
	if [catch "tcl_puts $args" msg] {
	  regsub tcl_puts $msg puts msg
	  regsub -all tcl_puts $errorInfo puts errorInfo
	  error $msg
	}
	return $msg
      }
      if $len update
    } else {
      global errorCode errorInfo
      if [catch "tcl_puts $args" msg] {
	regsub tcl_puts $msg puts msg
	regsub -all tcl_puts $errorInfo puts errorInfo
	error $msg
      }
      return $msg
    }
  }
}

## echo
## Relaxes the one string restriction of 'puts'
# ARGS:	any number of strings to output to stdout
##
proc echo args { puts [concat $args] }

## alias - akin to the csh alias command
## If called with no args, then it dumps out all current aliases
## If called with one arg, returns the alias of that arg (or {} if none)
# ARGS:	newcmd	- (optional) command to bind alias to
# 	args	- command and args being aliased
## 
proc alias {{newcmd {}} args} {
  if [string match {} $newcmd] {
    set res {}
    foreach a [interp aliases] {
      lappend res [list $a -> [interp alias {} $a]]
    }
    return [join $res \n]
  } elseif {[string match {} $args]} {
    interp alias {} $newcmd
  } else {
    eval interp alias [list {} $newcmd {}] $args
  }
}

## dump - outputs variables/procedure/widget info in source'able form.
## Accepts glob style pattern matching for the names
# ARGS:	type	- type of thing to dump: must be variable, procedure, widget
# OPTS: -nocomplain
#		don't complain if no vars match something
#	-filter pattern
#		specifies a glob filter pattern to be used by the variable
#		method as an array filter pattern (it filters down for
#		nested elements) and in the widget method as a config
#		option filter pattern
#	--	forcibly ends options recognition
# Returns:	the values of the requested items in a 'source'able form
## 
proc dump {type args} {
  set whine 1
  set code  ok
  while {[string match -* $args]} {
    switch -glob -- [lindex $args 0] {
      -n* { set whine 0; set args [lreplace $args 0 0] }
      -f* { set fltr [lindex $args 1]; set args [lreplace $args 0 1] }
      --  { set args [lreplace $args 0 0]; break }
      default { return -code error "unknown option \"[lindex $args 0]\"" }
    }
  }
  if {$whine && [string match {} $args]} {
    return -code error "wrong \# args: [lindex [info level 0] 0]\
	?-nocomplain? ?-filter pattern? ?--? pattern ?pattern ...?"
  }
  set res {}
  switch -glob -- $type {
    c* {
      # command
      # outpus commands by figuring out, as well as possible, what it is
      # this does not attempt to auto-load anything
      foreach arg $args {
	if [string comp {} [set cmds [info comm $arg]]] {
	  foreach cmd [lsort $cmds] {
	    if {[lsearch -exact [interp aliases] $cmd] > -1} {
	      append res "\#\# ALIAS:   $cmd => [interp alias {} $cmd]\n"
	    } elseif {[string comp {} [info procs $cmd]]} {
	      if {[catch {dump p -- $cmd} msg] && $whine} { set code error }
	      append res $msg\n
	    } else {
	      append res "\#\# COMMAND: $cmd\n"
	    }
	  }
	} elseif $whine {
	  append res "\#\# No known command $arg\n"
	  set code error
	}
      }
    }
    v* {
      # variable
      # outputs variables value(s), whether array or simple.
      if ![info exists fltr] { set fltr * }
      foreach arg $args {
	if {[string match {} [set vars [uplevel info vars [list $arg]]]]} {
	  if {[uplevel info exists $arg]} {
	    set vars $arg
	  } elseif $whine {
	    append res "\#\# No known variable $arg\n"
	    set code error
	    continue
	  } else continue
	}
	foreach var [lsort $vars] {
	  upvar $var v
	  if {[array exists v]} {
	    set nest {}
	    append res "array set $var \{\n"
	    foreach i [lsort [array names v $fltr]] {
	      upvar 0 v\($i\) __ary
	      if {[array exists __ary]} {
		append nest "\#\# NESTED ARRAY ELEMENT: $i\n"
		append nest "upvar 0 [list $var\($i\)] __ary;\
		    [dump v -filter $fltr __ary]\n"
	      } else {
		append res "    [list $i]\t[list $v($i)]\n"
	      }
	    }
	    append res "\}\n$nest"
	  } else {
	    append res [list set $var $v]\n
	  }
	}
      }
    }
    p* {
      # procedure
      foreach arg $args {
	if {[string comp {} [set ps [info proc $arg]]] ||
	    ([auto_load $arg] &&
	     [string comp {} [set ps [info proc $arg]]])} {
	  foreach p [lsort $ps] {
	    set as {}
	    foreach a [info args $p] {
	      if {[info default $p $a tmp]} {
		lappend as [list $a $tmp]
	      } else {
		lappend as $a
	      }
	    }
	    append res [list proc $p $as [info body $p]]\n
	  }
	} elseif $whine {
	  append res "\#\# No known proc $arg\n"
	  set code error
	}
      }
    }
    w* {
      # widget
      ## The user should have Tk loaded
      if [string match {} [info command winfo]] {
	return -code error "winfo not present, cannot dump widgets"
      }
      if ![info exists fltr] { set fltr .* }
      foreach arg $args {
	if [string comp {} [set ws [info command $arg]]] {
	  foreach w [lsort $ws] {
	    if [winfo exists $w] {
	      if [catch {$w configure} cfg] {
		append res "\#\# Widget $w does not support configure method"
		set code error
	      } else {
		append res "\#\# [winfo class $w] $w\n$w configure"
		foreach c $cfg {
		  if {[llength $c] != 5} continue
		  if {[regexp -nocase -- $fltr $c]} {
		    append res " \\\n\t[list [lindex $c 0] [lindex $c 4]]"
		  }
		}
		append res \n
	      }
	    }
	  }
	} elseif $whine {
	  append res "\#\# No known widget $arg\n"
	  set code error
	}
      }
    }
    default {
      return -code error "bad [lindex [info level 0] 0] option\
	\"$type\":\ must be procedure, variable, widget"
    }
  }
  return -code $code [string trimr $res \n]
}

## which - tells you where a command is found
# ARGS:	cmd	- command name
# Returns:	where command is found (internal / external / unknown)
## 
proc which cmd {
  if {[string comp {} [info commands $cmd]] ||
      ([auto_load $cmd] && [string comp {} [info commands $cmd]])} {
    if {[lsearch -exact [interp aliases] $cmd] > -1} {
      return "$cmd:\taliased to [alias $cmd]"
    } elseif {[string comp {} [info procs $cmd]]} {
      return "$cmd:\tinternal proc"
    } else {
      return "$cmd:\tinternal command"
    }
  } elseif {[string comp {} [auto_execok $cmd]]} {
    return [auto_execok $cmd]
  } else {
    return -code error "$cmd:\tunknown command"
  }
}

## dir - directory list
# ARGS:	args	- names/glob patterns of directories to list
# OPTS:	-all	- list hidden files as well (Unix dot files)
#	-long	- list in full format "permissions size date filename"
#	-full	- displays / after directories and link paths for links
# Returns:	a directory listing
## 
proc dir {args} {
  array set s {
    all 0 full 0 long 0
    0 --- 1 --x 2 -w- 3 -wx 4 r-- 5 r-x 6 rw- 7 rwx
  }
  while {[string match \-* [lindex $args 0]]} {
    set str [lindex $args 0]
    set args [lreplace $args 0 0]
    switch -glob -- $str {
      -a* {set s(all) 1} -f* {set s(full) 1}
      -l* {set s(long) 1} -- break
      default {
	return -code error \
	    "unknown option \"$str\", should be one of: -all, -full, -long"
      }
    }
  }
  set sep [string trim [file join . .] .]
  if [string match {} $args] { set args . }
  foreach arg $args {
    if {[file isdir $arg]} {
      set arg [string trimr $arg $sep]$sep
      if $s(all) {
	lappend out [list $arg [lsort [glob -nocomplain -- $arg.* $arg*]]]
      } else {
	lappend out [list $arg [lsort [glob -nocomplain -- $arg*]]]
      }
    } else {
      lappend out [list [file dirname $arg]$sep \
		       [lsort [glob -nocomplain -- $arg]]]
    }
  }
  if $s(long) {
    set old [clock scan {1 year ago}]
    set fmt "%s%9d %s %s\n"
    foreach o $out {
      set d [lindex $o 0]
      append res $d:\n
      foreach f [lindex $o 1] {
	file lstat $f st
	set f [file tail $f]
	if $s(full) {
	  switch -glob $st(type) {
	    d* { append f $sep }
	    l* { append f "@ -> [file readlink $d$sep$f]" }
	    default { if [file exec $d$sep$f] { append f * } }
	  }
	}
	if [string match file $st(type)] {
	  set mode -
	} else {
	  set mode [string index $st(type) 0]
	}
	foreach j [split [format %o [expr $st(mode)&0777]] {}] {
	  append mode $s($j)
	}
	if {$st(mtime)>$old} {
	  set cfmt {%b %d %H:%M}
	} else {
	  set cfmt {%b %d  %Y}
	}
	append res [format $fmt $mode $st(size) \
			[clock format $st(mtime) -format $cfmt] $f]
      }
      append res \n
    }
  } else {
    foreach o $out {
      set d [lindex $o 0]
      append res $d:\n
      set i 0
      foreach f [lindex $o 1] {
	if {[string len [file tail $f]] > $i} {
	  set i [string len [file tail $f]]
	}
      }
      set i [expr $i+2+$s(full)]
      ## This gets the number of cols in the Console console widget
      set j [expr 64/$i]
      set k 0
      foreach f [lindex $o 1] {
	set f [file tail $f]
	if $s(full) {
	  switch -glob [file type $d$sep$f] {
	    d* { append f $sep }
	    l* { append f @ }
	    default { if [file exec $d$sep$f] { append f * } }
	  }
	}
	append res [format "%-${i}s" $f]
	if {[incr k]%$j == 0} {set res [string trimr $res]\n}
      }
      append res \n\n
    }
  }
  return [string trimr $res]
}
interp alias {} ls {} dir

## lremove - remove items from a list
# OPTS:	-all	remove all instances of each item
# ARGS:	l	a list to remove items from
#	args	items to remove
##
proc lremove {args} {
  set all 0
  if [string match \-a* [lindex $args 0]] {
    set all 1
    set args [lreplace $args 0 0]
  }
  set l [lindex $args 0]
  eval append is [lreplace $args 0 0]
  foreach i $is {
    if {[set ix [lsearch -exact $l $i]] == -1} continue
    set l [lreplace $l $ix $ix]
    if $all {
      while {[set ix [lsearch -exact $l $i]] != -1} {
	set l [lreplace $l $ix $ix]
      }
    }
  }
  return $l
}

## Unknown changed to get output into Console window
# unknown:
# Invoked automatically whenever an unknown command is encountered.
# Works through a list of "unknown handlers" that have been registered
# to deal with unknown commands.  Extensions can integrate their own
# handlers into the "unknown" facility via "unknown_handle".
#
# If a handler exists that recognizes the command, then it will
# take care of the command action and return a valid result or a
# Tcl error.  Otherwise, it should return "-code continue" (=2)
# and responsibility for the command is passed to the next handler.
#
# Arguments:
# args -	A list whose elements are the words of the original
#		command, including the command name.

#proc unknown args {
#    global unknown_handler_order unknown_handlers errorInfo errorCode
#
#    #
#    # Be careful to save error info now, and restore it later
#    # for each handler.  Some handlers generate their own errors
#    # and disrupt handling.
#    #
#    set savedErrorCode $errorCode
#    set savedErrorInfo $errorInfo
#
#    if {![info exists unknown_handler_order] || ![info exists unknown_handlers]} {
#	set unknown_handlers(tcl) tcl_unknown
#	set unknown_handler_order tcl
#    }
#
#    foreach handler $unknown_handler_order {
#        set status [catch {uplevel $unknown_handlers($handler) $args} result]
#
#        if {$status == 1} {
#            #
#            # Strip the last five lines off the error stack (they're
#            # from the "uplevel" command).
#            #
#            set new [split $errorInfo \n]
#            set new [join [lrange $new 0 [expr [llength $new] - 6]] \n]
#            return -code $status -errorcode $errorCode \
#                -errorinfo $new $result
#
#        } elseif {$status != 4} {
#            return -code $status $result
#        }
#
#        set errorCode $savedErrorCode
#        set errorInfo $savedErrorInfo
#    }
#
#    set name [lindex $args 0]
#    return -code error "invalid command name \"$name\""
#}
#
## tcl_unknown:
## Invoked when a Tcl command is invoked that doesn't exist in the
## interpreter:
##
##	1. See if the autoload facility can locate the command in a
##	   Tcl script file.  If so, load it and execute it.
##	2. If the command was invoked interactively at top-level:
##	    (a) see if the command exists as an executable UNIX program.
##		If so, "exec" the command.
##	    (b) see if the command requests csh-like history substitution
##		in one of the common forms !!, !, or ^old^new.  If
##		so, emulate csh's history substitution.
##	    (c) see if the command is a unique abbreviation for another
##		command.  If so, invoke the command.
##
## Arguments:
## args -	A list whose elements are the words of the original
##		command, including the command name.
#
#proc tcl_unknown args {
#  global auto_noexec auto_noload env unknown_pending tcl_interactive Console
#  global errorCode errorInfo
#
#  # Save the values of errorCode and errorInfo variables, since they
#  # may get modified if caught errors occur below.  The variables will
#  # be restored just before re-executing the missing command.
#
#  set savedErrorCode $errorCode
#  set savedErrorInfo $errorInfo
#  set name [lindex $args 0]
#  if ![info exists auto_noload] {
#    #
#    # Make sure we're not trying to load the same proc twice.
#    #
#    if [info exists unknown_pending($name)] {
#      unset unknown_pending($name)
#      if {[array size unknown_pending] == 0} {
#	unset unknown_pending
#      }
#      return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
#    }
#    set unknown_pending($name) pending;
#    set ret [catch {auto_load $name} msg]
#    unset unknown_pending($name);
#    if $ret {
#      return -code $ret -errorcode $errorCode \
#	  "error while autoloading \"$name\": $msg"
#    }
#    if ![array size unknown_pending] {
#      unset unknown_pending
#    }
#    if $msg {
#      set errorCode $savedErrorCode
#      set errorInfo $savedErrorInfo
#      set code [catch {uplevel $args} msg]
#      if {$code ==  1} {
#	#
#	# Strip the last five lines off the error stack (they're
#	# from the "uplevel" command).
#	#
#
#	set new [split $errorInfo \n]
#	set new [join [lrange $new 0 [expr [llength $new] - 6]] \n]
#	return -code error -errorcode $errorCode \
#	    -errorinfo $new $msg
#      } else {
#	return -code $code $msg
#      }
#    }
#  }
#  if {[info level] == 1 && [string match {} [info script]] \
#	  && [info exists tcl_interactive] && $tcl_interactive} {
#    if ![info exists auto_noexec] {
#      set new [auto_execok $name]
#      if {$new != ""} {
#	set errorCode $savedErrorCode
#	set errorInfo $savedErrorInfo
#	return [uplevel exec [list $new] [lrange $args 1 end]]
#	#return [uplevel exec >&@stdout <@stdin $new [lrange $args 1 end]]
#      }
#    }
#    set errorCode $savedErrorCode
#    set errorInfo $savedErrorInfo
#    ##
#    ## History substitution moved into ConsoleEvalCmd
#    ##
#    set cmds [info commands $name*]
#    if {[llength $cmds] == 1} {
#      return [uplevel [lreplace $args 0 0 $cmds]]
#    }
#    if {[llength $cmds]} {
#      if {$name == ""} {
#	return -code error "empty command name \"\""
#      } else {
#	return -code error \
#	    "ambiguous command name \"$name\": [lsort $cmds]"
#      }
#    }
#  }
#  return -code continue
#}

switch -glob $tcl_platform(platform) {
  win* { set META Alt }
  mac* { set META Command }
  default { set META Meta }
}

# ConsoleClipboardKeysyms --
# This procedure is invoked to identify the keys that correspond to
# the "copy", "cut", and "paste" functions for the clipboard.
#
# Arguments:
# copy -	Name of the key (keysym name plus modifiers, if any,
#		such as "Meta-y") used for the copy operation.
# cut -		Name of the key used for the cut operation.
# paste -	Name of the key used for the paste operation.

;proc ConsoleClipboardKeysyms {copy cut paste} {
  bind Console <$copy>	{ConsoleCopy %W}
  bind Console <$cut>	{ConsoleCut %W}
  bind Console <$paste>	{ConsolePaste %W}
}

;proc ConsoleCut w {
  if [string match $w [selection own -displayof $w]] {
    clipboard clear -displayof $w
    catch {
      clipboard append -displayof $w [selection get -displayof $w]
      if [$w compare sel.first >= limit] {$w delete sel.first sel.last}
    }
  }
}
;proc ConsoleCopy w {
  if [string match $w [selection own -displayof $w]] {
    clipboard clear -displayof $w
    catch {clipboard append -displayof $w [selection get -displayof $w]}
  }
}

;proc ConsolePaste w {
  if ![catch {selection get -displayof $w -selection CLIPBOARD} tmp] {
    if [$w compare insert < limit] {$w mark set insert end}
    $w insert insert $tmp
    $w see insert
    if [string match *\n* $tmp] {ConsoleEval $w}
  }
}

## Get all Text bindings into Console except Unix cut/copy/paste
## and newline insertion
foreach ev [lremove [bind Text] {  \
        \
    }] {
  bind Console $ev [bind Text $ev]
}

foreach {ev key} {
  <>		
  <>		
  <>	
  <>	
  <>	
  <>	

  <>	
  <>	
  <>		
  <>		
  <>		
  <>		

  <>		
  <>		
  <>		
  <>		
  <>	

  <>	
  <>	
  <>	
  <>	
  <>	
  <>	
} {
  event add $ev $key
  bind Console $key {}
}
catch {unset ev key}

## Redefine for Console what we need
##
event delete <> 
ConsoleClipboardKeysyms   

bind Console  {catch {ConsoleInsert %W [selection get -displayof %W]}}

bind Console  {+
catch {
  eval %W tag remove sel [%W tag nextrange prompt sel.first sel.last]
  %W mark set insert sel.first
}
}

bind Console <> {
  if [%W compare insert > limit] {Console:expand %W path}
  break
}
bind Console <> {
  if [%W compare insert > limit] {Console:expand %W proc}
}
bind Console <> {
  if [%W compare insert > limit] {Console:expand %W var}
}
bind Console <> {
  if [%W compare insert >= limit] {
    ConsoleInsert %W \t
  }
}
bind Console <> {
  ConsoleEval %W
}
bind Console  {
  if {[string comp {} [%W tag nextrange sel 1.0 end]] \
      && [%W compare sel.first >= limit]} {
    %W delete sel.first sel.last
  } elseif {[%W compare insert >= limit]} {
    %W delete insert
    %W see insert
  }
}
bind Console  {
  if {[string comp {} [%W tag nextrange sel 1.0 end]] \
      && [%W compare sel.first >= limit]} {
    %W delete sel.first sel.last
  } elseif {[%W compare insert != 1.0] && [%W compare insert > limit]} {
    %W delete insert-1c
    %W see insert
  }
}
bind Console  [bind Console ]

bind Console  {
  ConsoleInsert %W %A
}

bind Console  {
  if [%W compare {limit linestart} == {insert linestart}] {
    tkTextSetCursor %W limit
  } else {
    tkTextSetCursor %W {insert linestart}
  }
}
bind Console  {
  if [%W compare insert < limit] break
  %W delete insert
}
bind Console <> {
  if [%W compare insert < limit] break
  if [%W compare insert == {insert lineend}] {
    %W delete insert
  } else {
    %W delete insert {insert lineend}
  }
}
bind Console <> {
  Console_clear [winfo parent %W]
}
bind Console <> {
  if [%W compare {insert linestart} != {limit linestart}] {
    tkTextSetCursor %W [tkTextUpDownLine %W -1]
  } else {
    Console_event [winfo parent %W] -1
  }
}
bind Console <> {
  if [%W compare {insert linestart} != {end-1c linestart}] {
    tkTextSetCursor %W [tkTextUpDownLine %W 1]
  } else {
    Console_event [winfo parent %W] 1
  }
}
bind Console <> {
  Console_event [winfo parent %W] 1
}
bind Console <> {
  Console_event [winfo parent %W] -1
}
bind Console <> {
  Console_event [winfo parent %W] -1 [ConsoleCmdGet %W]
}
bind Console <> {
  Console_event [winfo parent %W] 1 [ConsoleCmdGet %W]
}
bind Console <> {
  ## Transpose current and previous chars
  if [%W compare insert > limit] { tkTextTranspose %W }
}
bind Console <> {
  ## Clear command line (Unix shell staple)
  %W delete limit end
}
bind Console <> {
  ## Save command buffer (swaps with current command)
  Console:savecommand %W
}
catch {bind Console    { tkTextScrollPages %W -1 }}
catch {bind Console      { tkTextScrollPages %W -1 }}
catch {bind Console  { tkTextScrollPages %W 1 }}
catch {bind Console       { tkTextScrollPages %W 1 }}
bind Console <$META-d> {
  if [%W compare insert >= limit] {
    %W delete insert {insert wordend}
  }
}
bind Console <$META-BackSpace> {
  if [%W compare {insert -1c wordstart} >= limit] {
    %W delete {insert -1c wordstart} insert
  }
}
bind Console <$META-Delete> {
  if [%W compare insert >= limit] {
    %W delete insert {insert wordend}
  }
}
bind Console  {
  if {(!$tkPriv(mouseMoved) || $tk_strictMotif) \
      && ![catch {selection get -displayof %W} tkPriv(junk)]} {
    if [%W compare @%x,%y < limit] {
      %W insert end $tkPriv(junk)
    } else {
      %W insert @%x,%y $tkPriv(junk)
    }
    if [string match *\n* $tkPriv(junk)] {ConsoleEval %W}
  }
}

##
## End Console bindings
##

##
## Bindings for doing special things based on certain keys
##
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \( \) limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \[ \] limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchPair %W \{ \} limit }
}
bind PostCon  {
  if [string comp \\ [%W get insert-2c]] { ConsoleMatchQuote %W limit }
}

bind PostCon  {
  if [string comp {} %A] { ConsoleTagProc %W }
}


## ConsoleTagProc - tags a procedure in the console if it's recognized
## This procedure is not perfect.  However, making it perfect wastes
## too much CPU time...  Also it should check the existence of a command
## in whatever is the connected slave, not the master interpreter.
##
;proc ConsoleTagProc w {
  upvar \#0 [winfo parent $w] data
  if !$data(-lightcmd) return
  set i [$w index "insert-1c wordstart"]
  set j [$w index "insert-1c wordend"]
  if {[string comp {} \
	   [ConsoleEvalAttached info command [list [$w get $i $j]]]]} {
    $w tag add proc $i $j
  } else {
    $w tag remove proc $i $j
  }
}

## ConsoleMatchPair - blinks a matching pair of characters
## c2 is assumed to be at the text index 'insert'.
## This proc is really loopy and took me an hour to figure out given
## all possible combinations with escaping except for escaped \'s.
## It doesn't take into account possible commenting... Oh well.  If
## anyone has something better, I'd like to see/use it.  This is really
## only efficient for small contexts.
# ARGS:	w	- console text widget
# 	c1	- first char of pair
# 	c2	- second char of pair
# Calls:	Console:blink
## 
;proc ConsoleMatchPair {w c1 c2 {lim 1.0}} {
  upvar \#0 [winfo parent $w] data
  if {!$data(-lightbrace) || $data(-blinktime)<100} return
  if [string comp {} [set ix [$w search -back $c1 insert $lim]]] {
    while {[string match {\\} [$w get $ix-1c]] &&
	   [string comp {} [set ix [$w search -back $c1 $ix-1c $lim]]]} {}
    set i1 insert-1c
    while {[string comp {} $ix]} {
      set i0 $ix
      set j 0
      while {[string comp {} [set i0 [$w search $c2 $i0 $i1]]]} {
	append i0 +1c
	if {[string match {\\} [$w get $i0-2c]]} continue
	incr j
      }
      if {!$j} break
      set i1 $ix
      while {$j && [string comp {} [set ix [$w search -back $c1 $ix $lim]]]} {
	if {[string match {\\} [$w get $ix-1c]]} continue
	incr j -1
      }
    }
    if [string match {} $ix] { set ix [$w index $lim] }
  } else { set ix [$w index $lim] }
  if $data(-blinkrange) {
    Console:blink $w $data(-blinktime) $ix [$w index insert]
  } else {
    Console:blink $w $data(-blinktime) $ix $ix+1c \
	[$w index insert-1c] [$w index insert]
  }
}

## ConsoleMatchQuote - blinks between matching quotes.
## Blinks just the quote if it's unmatched, otherwise blinks quoted string
## The quote to match is assumed to be at the text index 'insert'.
# ARGS:	w	- console text widget
# Calls:	Console:blink
## 
;proc ConsoleMatchQuote {w {lim 1.0}} {
  upvar \#0 [winfo parent $w] data
  if {!$data(-lightbrace) || $data(-blinktime)<100} return
  set i insert-1c
  set j 0
  while {[string comp {} [set i [$w search -back \" $i $lim]]]} {
    if {[string match {\\} [$w get $i-1c]]} continue
    if {!$j} {set i0 $i}
    incr j
  }
  if [expr $j%2] {
    if $data(-blinkrange) {
      Console:blink $w $data(-blinktime) $i0 [$w index insert]
    } else {
      Console:blink $w $data(-blinktime) $i0 $i0+1c \
	  [$w index insert-1c] [$w index insert]
    }
  } else {
    Console:blink $w $data(-blinktime) [$w index insert-1c] [$w index insert]
  }
}

## Console:blink - blinks between 2 indices for a specified duration.
# ARGS:	w	- console text widget
#	delay	- millisecs to blink for
# 	args	- indices of regions to blink
# Outputs:	blinks selected characters in $w
## 
;proc Console:blink {w delay args} {
  eval $w tag add blink $args
  after $delay eval $w tag remove blink $args
  return
}


## ConsoleInsert
## Insert a string into a text console at the point of the insertion cursor.
## If there is a selection in the text, and it covers the point of the
## insertion cursor, then delete the selection before inserting.
# ARGS:	w	- text window in which to insert the string
# 	s	- string to insert (usually just a single char)
# Outputs:	$s to text widget
## 
;proc ConsoleInsert {w s} {
  if {[string match {} $s] || [string match disabled [$w cget -state]]} {
    return
  }
  if [$w comp insert < limit] {
    $w mark set insert end
  }
  catch {
    if {[$w comp sel.first <= insert] && [$w comp sel.last >= insert]} {
      $w delete sel.first sel.last
    }
  }
  $w insert insert $s
  $w see insert
}

## Console:expand - 
# ARGS:	w	- text widget in which to expand str
# 	type	- type of expansion (path / proc / variable)
# Calls:	ConsoleExpand(Pathname|Procname|Variable)
# Outputs:	The string to match is expanded to the longest possible match.
#		If data(-showmultiple) is non-zero and the user longest match
#		equaled the string to expand, then all possible matches are
#		output to stdout.  Triggers bell if no matches are found.
# Returns:	number of matches found
## 
;proc Console:expand {w type} {
  set exp "\[^\\]\[ \t\n\r\[\{\"\$]"
  set tmp [$w search -back -regexp $exp insert-1c limit-1c]
  if [string compare {} $tmp] {append tmp +2c} else {set tmp limit}
  if [$w compare $tmp >= insert] return
  set str [$w get $tmp insert]
  switch -glob $type {
    pa* { set res [ConsoleExpandPathname $str] }
    pr* { set res [ConsoleExpandProcname $str] }
    v*  { set res [ConsoleExpandVariable $str] }
    default {set res {}}
  }
  set len [llength $res]
  if $len {
    $w delete $tmp insert
    $w insert $tmp [lindex $res 0]
    if {$len > 1} {
      upvar \#0 [winfo parent $w] data
      if {$data(-showmultiple) && ![string comp [lindex $res 0] $str]} {
	puts stdout [lreplace $res 0 0]
      }
    }
  } else bell
  return [incr len -1]
}

## ConsoleExpandPathname - expand a file pathname based on $str
## This is based on UNIX file name conventions
# ARGS:	str	- partial file pathname to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandPathname str {
  set pwd [ConsoleEvalAttached pwd]
  if [catch {ConsoleEvalAttached [list cd [file dirname $str]]} err] {
    return -code error $err
  }
  if [catch {lsort [ConsoleEvalAttached glob [file tail $str]*]} m] {
    set match {}
  } else {
    if {[llength $m] > 1} {
      global tcl_platform
      if [string match windows $tcl_platform(platform)] {
	## Windows is screwy because it's case insensitive
	set tmp [ConsoleExpandBestMatch [string tolower $m] \
	    [string tolower [file tail $str]]]
      } else {
	set tmp [ConsoleExpandBestMatch $m [file tail $str]]
      }
      if [string match ?*/* $str] {
	set tmp [file dirname $str]/$tmp
      } elseif {[string match /* $str]} {
	set tmp /$tmp
      }
      regsub -all { } $tmp {\\ } tmp
      set match [linsert $m 0 $tmp]
    } else {
      ## This may look goofy, but it handles spaces in path names
      eval append match $m
      if [file isdir $match] {append match /}
      if [string match ?*/* $str] {
	set match [file dirname $str]/$match
      } elseif {[string match /* $str]} {
	set match /$match
      }
      regsub -all { } $match {\\ } match
      ## Why is this one needed and the ones below aren't!!
      set match [list $match]
    }
  }
  ConsoleEvalAttached [list cd $pwd]
  return $match
}

## ConsoleExpandProcname - expand a tcl proc name based on $str
# ARGS:	str	- partial proc name to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandProcname str {
  set match [ConsoleEvalAttached info commands $str*]
  if {[llength $match] > 1} {
    regsub -all { } [ConsoleExpandBestMatch $match $str] {\\ } str
    set match [linsert $match 0 $str]
  } else {
    regsub -all { } $match {\\ } match
  }
  return $match
}

## ConsoleExpandVariable - expand a tcl variable name based on $str
# ARGS:	str	- partial tcl var name to expand
# Calls:	ConsoleExpandBestMatch
# Returns:	list containing longest unique match followed by all the
#		possible further matches
## 
;proc ConsoleExpandVariable str {
  if [regexp {([^\(]*)\((.*)} $str junk ary str] {
    ## Looks like they're trying to expand an array.
    set match [ConsoleEvalAttached array names $ary $str*]
    if {[llength $match] > 1} {
      set vars $ary\([ConsoleExpandBestMatch $match $str]
      foreach var $match {lappend vars $ary\($var\)}
      return $vars
    } else {set match $ary\($match\)}
    ## Space transformation avoided for array names.
  } else {
    set match [ConsoleEvalAttached info vars $str*]
    if {[llength $match] > 1} {
      regsub -all { } [ConsoleExpandBestMatch $match $str] {\\ } str
      set match [linsert $match 0 $str]
    } else {
      regsub -all { } $match {\\ } match
    }
  }
  return $match
}

## ConsoleExpandBestMatch2 - finds the best unique match in a list of names
## Improves upon the speed of the below proc only when $l is small
## or $e is {}.  $e is extra for compatibility with proc below.
# ARGS:	l	- list to find best unique match in
# Returns:	longest unique match in the list
## 
;proc ConsoleExpandBestMatch2 {l {e {}}} {
  set s [lindex $l 0]
  if {[llength $l]>1} {
    set i [expr [string length $s]-1]
    foreach l $l {
      while {$i>=0 && [string first $s $l]} {
	set s [string range $s 0 [incr i -1]]
      }
    }
  }
  return $s
}

## ConsoleExpandBestMatch - finds the best unique match in a list of names
## The extra $e in this argument allows us to limit the innermost loop a
## little further.  This improves speed as $l becomes large or $e becomes long.
# ARGS:	l	- list to find best unique match in
# 	e	- currently best known unique match
# Returns:	longest unique match in the list
## 
;proc ConsoleExpandBestMatch {l {e {}}} {
  set ec [lindex $l 0]
  if {[llength $l]>1} {
    set e  [string length $e]; incr e -1
    set ei [string length $ec]; incr ei -1
    foreach l $l {
      while {$ei>=$e && [string first $ec $l]} {
	set ec [string range $ec 0 [incr ei -1]]
      }
    }
  }
  return $ec
}


## ConsoleResource - re'source's this script into current console
## Meant primarily for my development of this program.  It follows
## links until the ultimate source is found.
## 
set Console(SCRIPT) [info script]
if !$Console(WWW) {
  while {[string match link [file type $Console(SCRIPT)]]} {
    set link [file readlink $Console(SCRIPT)]
    if [string match relative [file pathtype $link]] {
      set Console(SCRIPT) [file join [file dirname $Console(SCRIPT)] $link]
    } else {
      set Console(SCRIPT) $link
    }
  }
  catch {unset link}
  if [string match relative [file pathtype $Console(SCRIPT)]] {
    set Console(SCRIPT) [file join [pwd] $Console(SCRIPT)]
  }
}

;proc Console:resource {} {
  global Console
  uplevel \#0 [list source $Console(SCRIPT)]
}

## This automatically starts a console
##
catch {destroy .c}
pack [console .c] -fill both -expand 1
if {[info exists ::Name]} {
    wm title . "Console: $::Name"
    wm iconify .
    #wm geometry . +10+10
}
if {$Console(WWW)} {
    . configure -width [getattr width] -height [getattr height]
}
therion-5.4.1/xtherion/controls.txt000066400000000000000000000152161307545355600174570ustar00rootroot00000000000000КЛАВИАТУРНЫЕ СОКРАЩЕНИЯ И ОПЕРАЦИИ В РЕДАКТОРЕ КАРТ

LeftClick         - щелчек левой кнопкой мыши
Double LeftClick  - двойной щелчек левой кнопкой мыши
RightClick        - щелчек правой кнопкой мыши
Double RightClick - двойной щелчек правой кнопкой мыши
drag              - перетаскивание: удерживая указанную кнопку мыши
                    (и/или клавиатуры) перемещайте мышь

Общее
 * Ctrl+Z = отмена действия (undo)
 * Ctrl+Y = вернуть отмененное действие (redo)
 * F9 = компиляция текущего проекта
 * Для выбора в списках:
    - переместитесь к нужному элементу управления с помощью "Tab";
    - выбирайте нужный элемент списка (он подчеркнут) стрелками;
    - подтвердите выбор нажатием "Enter"

Область рисования и фоновые изображения
 * RightClick + drag = скроллинг области рисования
 * Double RightClick на изображении + drag = перемещение изображения

Вставка скрапа
 * Нажмите "Ctrl-r" или "Действие" > "Вставить скрап" на панели "Команды в файле"
 * новый скрап вставляется в после текущего

Вставка точки
 * Ctrl+P = переключение в режим `вставка точки'
 * LeftClick = вставка точки в позицию курсора
 * Ctrl+LeftClick = вставка точки близко с другой точкой (без Ctrl
   точка "притягивается" к уже существующей точке)
 * Esc = выйти из режима `вставка точки'

Редактирование точки
 * LeftClick + drag = перемещает точку
 * Ctrl+LeftClick + drag = перемещение точки близко от существующей
   точки (без Ctrl точка "притягивается" к уже существующей точке)
 * LeftClick + drag над стрелкой = изменение ориентации точки
   (ориентация должна быть включена на панели "Точка")

Вставка линии
 * Crtl+L = Вставка новой линии и переход в режим `вставка точек линии'
 * LeftClick = вставка точки линии в позицию курсора (без точек сглаживания)
 * Ctrl+LeftClick = вставка точки линии близко от существующей (без Ctrl точка
   "притягивается" к уже существующей точке)
 * LeftClick + drag = вставка точки линии (с точками сглаживания)
 * удерживая Ctrl во время перемещения точки сглаживания = перемещает только
   данную точку сглаживания
 * LeftClick + drag на точке сглаживания = изменение ее позиции
 * RightClick на одной из предыдущих точек текущей линии в режиме `вставка точек линии'
   = выбрать существующую точку, полезно для редактирования точек сглаживания
 * Esc или LeftClick на последней точке = закончить вставку точек линии
 * LeftClick на первой точке линии = замкнуть начало линии на конец и выйти из режима
   вставки

Редактирование линии
 * LeftClick + drag = перемещение точки линии
 * Ctrl+LeftClick + drag = перемещение точки линии близко от существующей
   (без Ctrl точка "притягивается" к уже существующей точке)
 * LeftClick на точке сглаживания + drag = перемещение точки сглаживания

Добавление точки к существующей линии
 * выбрать точку перед которой вы хотите вставить новую точку;
    - перейдите в режим вставки точки (панель "Линия")
    - вставьте точки (см. Вставка линии);
    - Esc или LeftClick на точке с которой вы начинали = выход из режима вставки

Удаление точки линии
 * выбрать точку линии которую нужно удалить;
    нажмите "Править линию" > "Удалить точку" на панели "Линия"

Зазделение линии
 * выбрать точку в которой вы хотите разделить линию;
    нажмите "Править линию" > "Разделить линию" на панели "Линия"

Вставка области
 * "Ctrl-a" или на панели "Команды в файле" нажмите "Действие" > "Вставить область"
   чтобы переключится в режим "выбор границ области"
 * LeftClick на линии = линия добавляется к списку границ области
 * Esc для того чтобы закончить выбор границ области

Редактировать область
 * Выбрать область для редактирования
 * неажать "Вставка" на панели "Область" для вставки граничных линий в список
   линий после выбраной линии
 * нажать "Вставить по ИД" для вставки линии с указанным идентификатором
 * нажать "Удалить" для удаления выбранной линии из списка гранци области

Выбор существующего объекта
 * LeftClick = выбор верхнего объекта
 * RightClick = перебор объектов закрытых верхним объектом (например полезно, когда
   несколько точек расположены в одной позиции друг над другом)
therion-5.4.1/xtherion/cp.tcl000066400000000000000000000361301307545355600161570ustar00rootroot00000000000000##
## cp.tcl --
##
##     The compiler module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_app_create cp [mc "Compiler"]
xth_ctrl_add cp stp [mc "Settings"]
xth_ctrl_add cp dat [mc "Survey structure"]
xth_ctrl_add cp info [mc "Survey info"]
xth_ctrl_add cp ms [mc "Map structure"]
set xth(cp,preview) 0
set xth(cp,preview,acroread) 0
set xth(cp,preview,acroreadpath) {}
set xth(cp,preview,xpdf) 0
set xth(cp,preview,xpdfpath) {}
set xth(th_exit_number_last) 0
switch $xth(gui,platform) {
  windows {
    if {[string length $xth(gui,appctrlcmd)] > 0} {
      set xth(cp,preview) 1
      set xth(cp,preview,acroread) 1
    }
  }
  unix {
    set xth(cp,preview) 1
    set xth(cp,preview,xpdf) 1
  }
}
if {$xth(cp,preview)} {
  xth_ctrl_add cp pview [mc "Preview"]
}
xth_ctrl_finish cp



# create config editor
set xth(cp,editor) $xth(gui,cp).af.apps.ed
frame $xth(cp,editor)
set txb $xth(cp,editor)
text $txb.txt -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
if {$xth(gui,text_undo)} {
    $txb.txt configure -undo 1 -maxundo -1
}
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-z> "catch {$txb.txt edit undo}"
bind $txb.txt <$xth(kb_control)-Key-y> "catch {$txb.txt edit redo}"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

# nechame tab, return originalny
if {[info exists xth(gui,te)]} {
#  bind $txb.txt <$xth(kb_control)-Key-a> "xth_te_text_select_all %W"
#  bind $txb.txt <$xth(kb_control)-Key-i> "xth_te_text_auto_indent %W"
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}


# create log window
set xth(cp,log) $xth(gui,cp).af.apps.log
frame $xth(cp,log)
set txb $xth(cp,log)
text $txb.txt -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

xth_status_bar cp $txb.txt "Therion log file."


# pack editor and log widow
grid columnconf $xth(gui,cp).af.apps 0 -weight 1
grid rowconf $xth(gui,cp).af.apps 0 -weight 1
grid rowconf $xth(gui,cp).af.apps 1 -weight 1
grid $xth(cp,editor) -column 0 -row 0 -sticky news
grid $xth(cp,log) -column 0 -row 1 -sticky news

# create setup control
Label $xth(ctrl,cp,stp).wl -text [mc "Working directory"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).wl [mc "Working directory path."]
Entry $xth(ctrl,cp,stp).we -font $xth(gui,lfont) -state disabled \
  -editable off -textvariable xth(cp,fpath)
xth_status_bar cp $xth(ctrl,cp,stp).we [mc "Working directory path."]

Label $xth(ctrl,cp,stp).fl -text [mc "Configuration file"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).fl [mc "Configuration file name."]
Entry $xth(ctrl,cp,stp).fe -font $xth(gui,lfont) -state disabled \
  -editable off -textvariable xth(cp,fname)
xth_status_bar cp $xth(ctrl,cp,stp).fe [mc "Configuration file name."]

Label $xth(ctrl,cp,stp).optl -text [mc "Command line options"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar cp $xth(ctrl,cp,stp).optl [mc "Therion command line options."]
Entry $xth(ctrl,cp,stp).opte -font $xth(gui,lfont) -state disabled \
  -textvariable xth(cp,opts)
xth_status_bar cp $xth(ctrl,cp,stp).opte [mc "Therion command line options."]

Button $xth(ctrl,cp,stp).go -text [mc "Compile"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_cp_compile} -width 4
Label $xth(ctrl,cp,stp).gores -text "" -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -relief sunken
set xth(cp,resfg) [$xth(ctrl,cp,stp).gores cget -fg]
set xth(cp,resbg) [$xth(ctrl,cp,stp).gores cget -bg]
xth_status_bar cp $xth(ctrl,cp,stp).go [mc "Run therion."]

grid columnconf $xth(ctrl,cp,stp) 0 -weight 1
grid columnconf $xth(ctrl,cp,stp) 1 -weight 1
grid $xth(ctrl,cp,stp).wl -row 0 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).we -row 1 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).fl -row 2 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).fe -row 3 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).optl -row 4 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).opte -row 5 -column 0 -columnspan 2 -sticky news
grid $xth(ctrl,cp,stp).go -row 6 -column 0 -sticky news
grid $xth(ctrl,cp,stp).gores -row 6 -column 1 -sticky ew

# create preview controls
if {$xth(cp,preview)} {
  set crow 0
  grid columnconf $xth(ctrl,cp,pview) 0 -weight 1
  grid columnconf $xth(ctrl,cp,pview) 1 -weight 1
  if {$xth(cp,preview,xpdf)} {
    Label $xth(ctrl,cp,pview).xpdfl -text [mc "Xpdf"] -anchor w -font $xth(gui,lfont) -state normal
    xth_status_bar cp $xth(ctrl,cp,pview).xpdfl [mc "PDF file path."]
    Entry $xth(ctrl,cp,pview).xpdfe -font $xth(gui,lfont) -state normal \
      -editable on -textvariable xth(cp,preview,xpdfpath)
    xth_status_bar cp $xth(ctrl,cp,pview).xpdfe [mc "PDF file path."]
    grid $xth(ctrl,cp,pview).xpdfl -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
    grid $xth(ctrl,cp,pview).xpdfe -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
  }
  if {$xth(cp,preview,acroread)} {
    Label $xth(ctrl,cp,pview).acroreadl -text [mc "Acrobat Reader"] -anchor w -font $xth(gui,lfont) -state normal
    xth_status_bar cp $xth(ctrl,cp,pview).acroreadl [mc "PDF file path."]
    Entry $xth(ctrl,cp,pview).acroreade -font $xth(gui,lfont) -state normal \
      -editable on -textvariable xth(cp,preview,acroreadpath)
    xth_status_bar cp $xth(ctrl,cp,pview).acroreade [mc "PDF file path."]
    grid $xth(ctrl,cp,pview).acroreadl -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
    grid $xth(ctrl,cp,pview).acroreade -row $crow -column 0 -columnspan 2 -sticky news
    incr crow
  }
}


# create objects control
set clbox $xth(ctrl,cp,dat)
#### set sw [ScrolledWindow $clbox.sw -relief sunken -borderwidth 2]
scrollbar $clbox.sv -orient vert  -command "$clbox.t yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.t xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
###set tr [Tree $sw.t -relief flat -height 16 -selectcommand xth_cp_data_tree_select]
set tr [Tree $clbox.t -relief flat -height 16 -selectcommand xth_cp_data_tree_select \
  -yscrollcommand "$clbox.sv set" \
  -xscrollcommand "$clbox.sh set"]
set xth(ctrl,cp,datrestore) {}
###$sw setwidget $tr
$tr bindText  xth_cp_data_tree_enter
$tr bindText  xth_cp_data_tree_leave
$tr bindText  xth_cp_data_tree_double_click
$tr bindImage  xth_cp_data_tree_enter
$tr bindImage  xth_cp_data_tree_leave
$tr bindImage  xth_cp_data_tree_double_click
### pack $sw -side top -expand yes -fill both

grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $tr -column 0 -row 0 -sticky news
grid $clbox.sv -column 1 -row 0 -sticky news
grid $clbox.sh -column 0 -row 1 -sticky news


# init survey info
set txb $xth(ctrl,cp,info)
text $txb.txt -height 4 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
xth_status_bar me $txb.txt [mc "Survey informations."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}



# create map structure control
set clbox $xth(ctrl,cp,ms)
###set sw [ScrolledWindow $clbox.sw -relief sunken -borderwidth 2]
scrollbar $clbox.sv -orient vert  -command "$clbox.t yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.t xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
set tr [Tree $clbox.t -relief flat -height 16 \
  -yscrollcommand "$clbox.sv set" \
  -xscrollcommand "$clbox.sh set"]
set xth(ctrl,cp,msrestore) {}
###$sw setwidget $tr
$tr bindText  xth_cp_map_tree_enter
$tr bindText  xth_cp_map_tree_leave
$tr bindText  xth_cp_map_tree_double_click
$tr bindImage  xth_cp_map_tree_enter
$tr bindImage  xth_cp_map_tree_leave
$tr bindImage  xth_cp_map_tree_double_click
###pack $sw -side top -expand yes -fill both
grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $tr -column 0 -row 0 -sticky news
grid $clbox.sv -column 1 -row 0 -sticky news
grid $clbox.sh -column 0 -row 1 -sticky news






# load menu
$xth(cp,menu,file) add command -label [mc "New"] -command {} \
  -font $xth(gui,lfont) -underline 0 -state normal -command {xth_cp_new_file}
$xth(cp,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" -state normal \
  -font $xth(gui,lfont) -command {
    xth_cp_open_file {}
  }
$xth(cp,menu,file) add command -label [mc "Save as"] -underline 5 \
  -state disabled -font $xth(gui,lfont) -command xth_cp_save_as
$xth(cp,menu,file) add command -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w"  -state disabled \
  -font $xth(gui,lfont) \
  -command xth_cp_close_file

set xth(cp,menu,edit) $xth(cp,menu).edit
menu $xth(cp,menu,edit) -tearoff 0
$xth(cp,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(cp,menu,edit) -underline 0
if {$xth(gui,text_undo)} {
  $xth(cp,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-z" -command "xth_app_clipboard undo"
  $xth(cp,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-y" -command "xth_app_clipboard redo"
  $xth(cp,menu,edit) add separator
}
$xth(cp,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(cp,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(cp,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"

set xth(cp,fopen) 0
set xth(cp,cursor) 1.0
set xth(cp,fname) ""
set xth(cp,opts) ""
set xth(cp,fpath) ""

xth_ctrl_minimize cp dat
xth_ctrl_minimize cp info
xth_ctrl_minimize cp ms
if {$xth(cp,preview)} {
  xth_ctrl_minimize cp pview
}


set xth(ctrl,cp,datlist) {}
set xth(ctrl,cp,maplist) {}

xth_status_bar_status cp [mc "User interface is not active. To activate it, open existing file or create new one."]

therion-5.4.1/xtherion/cp_procs.tcl000066400000000000000000000535101307545355600173660ustar00rootroot00000000000000##
## cp_procs.tcl --
##
##     Compiler procedures.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_about_status [mc "loading compiler..."]


proc xth_xcfg_fname {fpath} {
  return ".xtherion.dat"
}


proc xth_cp_new_file {} {
  global xth
  xth_status_bar_status cp ""
  if {$xth(cp,fopen)} {
    return
  }
  set xth(cp,fopen) 1
  set xth(cp,special) {}
  set xth(cp,ffull) [file join $xth(gui,initdir) "thconfig"]
  if {[xth_cp_save_as]} {
    set ff $xth(cp,ffull)
    set xth(cp,fopen) 0
    set xth(cp,fname) ""
    set xth(cp,open_file) ""
    set xth(cp,fpath) ""
    set xth(cp,ffull) ""
    xth_cp_open_file $ff
  } else {
    set xth(cp,fopen) 0
    set xth(cp,fname) ""
    set xth(cp,open_file) ""
    set xth(cp,fpath) ""
    set xth(cp,ffull) ""
  }
}

proc xth_cp_open_file {fpath} {
  global xth
  xth_status_bar_status cp ""
  
  if {$xth(cp,fopen)} {
    return
  }

  if {[string length $fpath] == 0} {
    set fpath [tk_getOpenFile -filetypes $xth(app,cp,filetypes) \
      -parent $xth(gui,main) -initialdir $xth(gui,initdir)]
  }
  
  if {[string length $fpath] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fpath]
  }

  set is_config_file [xth_cp_is_config_file $fpath];
  if {[string length $is_config_file] > 0} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon info -type ok \
      -message  "$fpath\n-----\n$is_config_file" \
      -font $xth(gui,lfont)
    return 0;
  }
  

  # read the file
  xth_status_bar_push cp
  xth_status_bar_status cp [format [mc "Opening %s ..."] $fpath]

  set fdata [xth_me_read_file $fpath 0]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop cp
      return 0
  }
  
  # now let's show the file
  catch {
    set fid [open [file join [file dirname $fpath] [xth_xcfg_fname $fpath]] r]
    fconfigure $fid -encoding utf-8
    while {![eof $fid]} {
      catch {
	eval [gets $fid]
      }
    }
    close $fid
  }
  
  set xth(cp,fopen) 1
  set xth(cp,special) [lindex $fdata 2]
  set xth(cp,fname) [file tail $fpath]
  set xth(cp,open_file) [file tail $fpath]
  set xth(cp,fpath) [file dirname $fpath]
  set xth(cp,ffull) $fpath
  
  # enable controls
  $xth(cp,editor).txt configure -state normal
#  $xth(cp,editor).txt delete 1.0 end
  foreach ln [lindex $fdata 3] {
    $xth(cp,editor).txt insert end "$ln\n"
  }
  catch {
    $xth(cp,editor).txt edit reset
  }
  $xth(cp,editor).txt mark set insert $xth(cp,cursor)
  $xth(cp,editor).txt see $xth(cp,cursor)
  
  $xth(ctrl,cp,stp).wl configure -state normal
  $xth(ctrl,cp,stp).we configure -state normal
  $xth(ctrl,cp,stp).fl configure -state normal
  $xth(ctrl,cp,stp).fe configure -state normal
  $xth(ctrl,cp,stp).optl configure -state normal
  $xth(ctrl,cp,stp).opte configure -state normal
  $xth(ctrl,cp,stp).go configure -state normal
  $xth(ctrl,cp,stp).gores configure -state normal

  $xth(ctrl,cp,info).txt configure -state normal
  
  $xth(cp,menu,file) entryconfigure [mc "New"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Open"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Save as"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Close"] -state normal
  $xth(cp,menu) entryconfigure [mc "Edit"] -state normal
  
  xth_app_title cp
  xth_status_bar_pop cp
  update idletasks
  return 1
}


set xth(cps,n) 0
set xth(cps,mxs) 0
set xth(cps,mxl) 0
set xth(cps,ts) 0
set xth(cps,tl) 0

proc xth_cp_comp_stat {tlen tscrap} {
  global xth
  incr xth(cps,n)
  if {$tscrap > $xth(cps,mxs)} {
    set xth(cps,mxs) $tscrap
  }
  if {$tlen > $xth(cps,mxl)} {
    set xth(cps,mxl) $tlen
  }
  set xth(cps,ts) [expr $xth(cps,ts) + $tscrap]
  set xth(cps,tl) [expr $xth(cps,tl) + $tscrap]
  set xth(cps,as) [expr double($xth(cps,ts)) / double($xth(cps,n))]
  set xth(cps,al) [expr double($xth(cps,tl)) / double($xth(cps,n))]  
}



proc xth_cp_close_file {} {
  
  global xth

  xth_cp_data_tree_clear      

  if {!$xth(cp,fopen)} {
    return
  }
  
  xth_cp_write_file $xth(cp,ffull)

  # disable controls
  $xth(cp,editor).txt delete 1.0 end
  $xth(cp,editor).txt see 1.0
  $xth(cp,editor).txt configure -state disabled

  $xth(cp,log).txt configure -state normal
  $xth(cp,log).txt delete 1.0 end
  $xth(cp,log).txt see 1.0
  $xth(cp,log).txt configure -state disabled

  $xth(cp,menu,file) entryconfigure [mc "New"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Open"] -state normal
  $xth(cp,menu,file) entryconfigure [mc "Save as"] -state disabled
  $xth(cp,menu,file) entryconfigure [mc "Close"] -state disabled
  $xth(cp,menu) entryconfigure [mc "Edit"] -state disabled
  
  $xth(ctrl,cp,stp).wl configure -state disabled
  $xth(ctrl,cp,stp).we configure -state disabled
  $xth(ctrl,cp,stp).fl configure -state disabled
  $xth(ctrl,cp,stp).fe configure -state disabled
  $xth(ctrl,cp,stp).optl configure -state disabled
  $xth(ctrl,cp,stp).opte configure -state disabled
  $xth(ctrl,cp,stp).go configure -state disabled
  $xth(ctrl,cp,stp).gores configure -text "" -fg $xth(cp,resfg) -bg $xth(cp,resbg) \
    -state disabled

  $xth(ctrl,cp,info).txt configure -state disabled
  
  # set variables
  set xth(cp,fopen) 0
  set xth(cp,cursor) 1.0
  set xth(cp,fname) ""
  set xth(cp,open_file) ""
  set xth(cp,fpath) ""
  set xth(cp,opts) ""
  xth_app_title cp
  focus $xth(ctrl,cp,dat).t 
  
  set xth(ctrl,cp,datrestore) {}
  set xth(ctrl,cp,msrestore) {}

}


# xth_cp_write_file --
#
# return list containing
# {success name}

proc xth_cp_write_file {pth} {

  global errorInfo xth

  xth_status_bar_push cp
  xth_status_bar_status cp [format [mc "Saving %s ..."] $pth]

  if {[catch {set fid [open $pth w]}]} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message $errorInfo \
	-font $xth(gui,lfont)    
    xth_status_bar_pop cp
    return 0
  }

  fconfigure $fid -encoding utf-8 -translation {auto auto}
  puts $fid "encoding  utf-8"

  # let's put data
  set data [$xth(cp,editor).txt get 1.0 end]
  regsub {\s*$} $data {} data
  puts $fid $data
    
  # now let's put special commands
  foreach cmd $xth(cp,special) {
    puts $fid "##XTHERION## $cmd"
  }
  close $fid
  
  xth_status_bar_pop cp
  return 1
}

proc xth_cp_save_as {} {

  global xth

  if {!$xth(cp,fopen)} {
    return 0
  }

  set fname $xth(cp,ffull)
  set idir [file dirname $fname]
  if {[string length $idir] == 0} {
    set idir $xth(gui,initdir)
  }
  set fname [tk_getSaveFile -filetypes $xth(app,cp,filetypes) \
    -parent $xth(gui,main) \
    -initialfile [file tail $fname] \
    -initialdir [xth_getdir $fname]]

  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }

  if {![xth_cp_write_file $fname]} {
    return 0
  }

  set xth(cp,fname) [file tail $fname]
  set xth(cp,open_file) [file tail $fname]
  set xth(cp,fpath) [file dirname $fname]
  set xth(cp,ffull) $fname
  xth_app_title cp
  update idletasks  
  return 1
}


# xth_cp_read_file --
#
# return success
# {success name cmds lns}

proc xth_cp_read_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set lastln ""
  set lns {}
  set cmds {}
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm {} {}]
  }
  fconfigure $fid -encoding $curenc
  while {![eof $fid]} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
	set success 0
	set nm "$pth \[$flnn\] -- unknown encoding -- $enc"
	break
      }
      fconfigure $fid -encoding $curenc
      set lastln ""
    } elseif {[regexp {^\s*\#\#XTHERION\#\#\s+(\S.*)\s*$} $fln cmmdln cmmd]} {
      lappend cmds $cmmd
      set lastln ""
    } else {
      if {[regexp {(.*)\\\s*$} $lastln dumln prevln]} {
	set fln "$prevln$fln"
	if {[llength $lns] > 1} {
	  set lns [lrange $lns 0 [expr [llength $lns] - 2]]
	} else {
	  set lns {}
	}
      }
      lappend lns $fln
      set lastln $fln
    }
  }
  close $fid
  return [list $success $nm $cmds $lns]
  
}  


proc xth_cp_is_config_file {fname} {
  set str {}
  return $str
}


proc xth_cp_compile {} {
  global xth errorInfo
  set xth(cp,compres) 0
  if {!$xth(cp,fopen)} {
    return 0;
  }
  set ret 1
  xth_cp_write_file $xth(cp,ffull)
  set cdir [pwd]
  cd $xth(cp,fpath)
  $xth(cp,log).txt configure -state normal
  $xth(cp,log).txt delete 1.0 end
  $xth(cp,log).txt configure -wrap word
  $xth(cp,editor).txt configure -state disabled
  xth_status_bar_push cp
  
  catch {
    set lid [open "therion.log" w]
    puts $lid "ERROR: Can not execute \"$xth(gui,compcmd) -x $xth(cp,opts) $xth(cp,fname)\"."
    close $lid
  }  

  set acroreadopen 1
  if {[llength $xth(cp,preview,acroreadpath)] > 0 } {
    catch {
      set acroreadopen [catch {
	exec $xth(gui,appctrlcmd) ARExists [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
      }]
    }
    if {!$acroreadopen} {
      catch {
	exec $xth(gui,appctrlcmd) AROpen [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	exec $xth(gui,appctrlcmd) ARClose [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
      }
    }
  }

  
  xth_status_bar_status cp [mc "Running therion ..."]
  $xth(ctrl,cp,stp).gores configure -text [mc "RUNNING"] -fg black -bg yellow
  update idletasks
  catch {
    set thid [open "|$xth(gui,compcmd) -x $xth(cp,opts) $xth(cp,fname)" r]
    if $xth(gui,compshow) {
      while {![eof $thid]} {
	$xth(cp,log).txt insert end [read $thid 8]
	$xth(cp,log).txt see end
	update idletasks
      }
    } else {
      read $thid;
    }
    close $thid
  }
  
  set see_end 0
  
  #puts $err
  #global errorInfo
  #puts $errorInfo

  # update UI
  xth_cp_data_tree_clear      
  set xth(th_exit_state) 0
  set xth(th_exit_number) $xth(th_exit_number_last)
  set dat_loaded_err [catch {
    set fid [open [file join [file dirname $xth(cp,ffull)] [xth_xcfg_fname $xth(cp,ffull)]] r]
    fconfigure $fid -encoding utf-8
    while {![eof $fid]} {
      catch {eval [gets $fid]}
    }
    close $fid
  }]

  set err 0
  if {$dat_loaded_err} {
    set err 1
  }
  if {$xth(th_exit_number) == $xth(th_exit_number_last)} {
    set err 1
  } else {
    set xth(th_exit_number_last) $xth(th_exit_number)
  }
  if {$xth(th_exit_state) == 0} {
    set err 1
  }

  
  if {$err} {
    bell
    $xth(ctrl,cp,stp).gores configure -text [mc "ERROR"] -fg white -bg red
    set ret 0
    set see_end 1
  } else {
    set xth(cp,compres) 1
    if {$xth(gui,auto_backup)} {
      xth_cp_write_file "$xth(cp,ffull)$xth(gui,auto_backup_ext)"
    }

    if {$xth(th_exit_state) == 1} {
      bell
      $xth(ctrl,cp,stp).gores configure -text [mc "WARNING"] -fg black -bg orange
    } else {
      $xth(ctrl,cp,stp).gores configure -text [mc "OK"] -fg black -bg green
    }

    if { [llength $xth(cp,preview,xpdfpath)] > 0 } {
      catch {
	exec xpdf -remote thpdf [file join $xth(cp,fpath) $xth(cp,preview,xpdfpath)] &
      }
    }
    if { [llength $xth(cp,preview,acroreadpath)] > 0 } {
      catch {
	if {$acroreadopen} {
	  exec $xth(gui,appctrlcmd) AROpen [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	} else {
	  exec $xth(gui,appctrlcmd) ARBack [file join $xth(cp,fpath) $xth(cp,preview,acroreadpath)]
	}
      }
    }

  }
  
  xth_status_bar_status cp [mc "Reading therion log file ..."]
  if {[catch {
    set lid [open "therion.log" r]
    $xth(cp,log).txt delete 1.0 end
    $xth(cp,log).txt configure -wrap none
    $xth(cp,log).txt insert end "[read $lid]\n"
    close $lid
    }]} {
      $xth(cp,log).txt insert end [mc "\nerror opening therion.log file\n"]
  }
  if ($see_end) {
    $xth(cp,log).txt see end
  } else {
    $xth(cp,log).txt see 1.0
  }
  xth_status_bar_pop cp
  update idletasks

  $xth(cp,log).txt configure -state normal
  $xth(cp,editor).txt configure -state normal
  xth_cp_show_errors
  
  # update configuration file if required
  set xth(cp,cursor) [$xth(cp,editor).txt index insert]
  if {0} {
    set fdata [xth_me_read_file $xth(cp,ffull) 0]
    if {[lindex $fdata 0] == 0} {
	MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	  -icon error -type ok \
	  -message [lindex $fdata 1] \
	  -font $xth(gui,lfont)
    } else {
      ###xth_cp_data_tree_clear      


      set xth(cp,special) [lindex $fdata 2]
     
      $xth(cp,editor).txt configure -undo 0 
      
      $xth(cp,editor).txt delete 1.0 end
      foreach ln [lindex $fdata 3] {
	$xth(cp,editor).txt insert end "$ln\n"
      }
      
      $xth(cp,editor).txt mark set insert $xth(cp,cursor)
      $xth(cp,editor).txt see $xth(cp,cursor)
      
      $xth(cp,editor).txt configure -undo 1
      
    }
  }
  cd $cdir
  xth_me_xvi_refresh
  xth_me_save_file 0
  return $ret
}


proc xth_cp_data_tree_clear {} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  set xth(ctrl,cp,datrestore) {}
  foreach di $xth(ctrl,cp,datlist) {
    catch {
      append xth(ctrl,cp,datrestore) "catch \{$tp itemconfigure [lindex $di 1] -open [$tp itemcget [lindex $di 1] -open]\}\n";
    }
  }
  append xth(ctrl,cp,datrestore) "update idletasks\n"
  append xth(ctrl,cp,datrestore) "catch \{$tp xview moveto [lindex [$tp xview] 0]\}\n";
  append xth(ctrl,cp,datrestore) "catch \{$tp yview moveto [lindex [$tp yview] 0]\}\n";
  append xth(ctrl,cp,datrestore) "catch \{$tp selection set [$tp selection get]\}\n";
  append xth(ctrl,cp,datrestore) "update idletasks\n"
  catch {
    $tp delete [$tp nodes root]
  }
  set tp $xth(ctrl,cp,ms).t 
  set xth(ctrl,cp,msrestore) {}
  foreach di $xth(ctrl,cp,maplist) {
    catch {
      append xth(ctrl,cp,msrestore) "catch \{$tp itemconfigure [lindex $di 1] -open [$tp itemcget [lindex $di 1] -open]\}\n";
    }
  }
  append xth(ctrl,cp,msrestore) "update idletasks\n"
  append xth(ctrl,cp,msrestore) "catch \{$tp xview moveto [lindex [$tp xview] 0]\}\n";
  append xth(ctrl,cp,msrestore) "catch \{$tp yview moveto [lindex [$tp yview] 0]\}\n";
  append xth(ctrl,cp,msrestore) "catch \{$tp selection set [$tp selection get]\}\n";
  append xth(ctrl,cp,msrestore) "update idletasks\n"
  catch {
    $tp delete [$tp nodes root]
  }
  $xth(ctrl,cp,info).txt delete 1.0 end
  # prejde oba stromy a priradi rozvinutie/zvinutie do prikazov
  # plus ulozi poziciu
}

proc xth_cp_data_tree_insert {id parent level name fullname title stitle stat} {
  global xth
  if {[string length $title] < 1} {
    set title $name
    set stitle $name
  }
  lappend xth(ctrl,cp,datlist) [list $stitle $id $parent $level $name $fullname $title $stat]
}

proc xth_cp_data_tree_create {} {
  global xth
  if {[llength $xth(ctrl,cp,datlist)] == 0} {
    return
  }
  set nlist [lsort -dictionary -index 0 $xth(ctrl,cp,datlist)]
  set level 1
  set tocnt 1
  set copen 1
  set tp $xth(ctrl,cp,dat).t 
  while {$tocnt} {
    set tocnt 0
    foreach di $nlist {
      if {[lindex $di 3] == $level} {
	if {$level == 1} {
	  set parent root
	} else {
	  set parent [lindex $di 2]
	}
	catch {
	  $tp insert end $parent [lindex $di 1] -data [list survey [lindex $di 5] [lindex $di 6] [lindex $di 7]] \
	    -text [lindex $di 6] -image [Bitmap::get folder] -open $copen -font $xth(gui,lfont)
	}
      }
      if {[lindex $di 3] > $level} {
	set tocnt 1
      }
    }
    set copen 0
    incr level
  }
  catch {
    eval $xth(ctrl,cp,datrestore)
  }
}

proc xth_cp_map_tree_insert {type subtype id parent level name fullname title stitle} {
  global xth
  if {[string length $title] < 1} {
    set title $name
    set stitle $name
  }
  lappend xth(ctrl,cp,maplist) [list $stitle $id $parent $level $name $fullname $title $type $subtype]
}

proc xth_cp_map_tree_create {} {
  global xth
  if {[llength $xth(ctrl,cp,maplist)] == 0} {
    return
  }
  set nlist [lsort -dictionary -index 0 $xth(ctrl,cp,maplist)]
  set level 0
  set tocnt 1
  set copen 1
  set tp $xth(ctrl,cp,ms).t 
  while {$tocnt} {
    set tocnt 0
    foreach di $nlist {
      if {[lindex $di 3] == $level} {
	if {$level == 0} {
	  set parent root
	} else {
	  set parent [lindex $di 2]
	}
	set ccopen $copen
	switch [lindex $di 7] {
	  map {
	    if {[lindex $di 8]} {
	      set ii [Bitmap::get file]
	      set ccopen 0
	    } else {
	      set ii [Bitmap::get copy]
	    }
	  }
	  scrap {
	    set ii [Bitmap::get new]
	  }
	  default {
	    set ii [Bitmap::get folder]
	  } 
	}
	catch {
	  $tp insert end $parent [lindex $di 1] -data [list [lindex $di 7] [lindex $di 5] [lindex $di 6]] \
	    -text [lindex $di 6] -image $ii -open $ccopen -font $xth(gui,lfont)
	}
      }
      if {[lindex $di 3] > $level} {
	set tocnt 1
      }
    }
    set copen 0
    incr level
  }
  
  # odstrani projekcie bez map
  set prjs [$tp nodes root]
  foreach prj $prjs {
    set nds [$tp nodes $prj]
    switch [llength $nds] {
      0 {
	$tp delete $prj
      }
      1 {
	$tp itemconfigure $nds -open 1
      }
    }
  }

  catch {
    eval $xth(ctrl,cp,msrestore)
  }
}



proc xth_cp_data_tree_enter {node} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  xth_status_bar_push cp
  set d [$xth(ctrl,cp,dat).t itemcget $node -data]
  xth_status_bar_status cp [format "%s - %s (%s)" [lindex $d 0] [lindex $d 1] [lindex $d 2]]
}


proc xth_cp_data_tree_select {tpath node} {
  global xth
  set tp $tpath
  xth_status_bar_push cp
  set d [$tp itemcget $node -data]
  $xth(ctrl,cp,info).txt delete 1.0 end
  $xth(ctrl,cp,info).txt see 1.0
  $xth(ctrl,cp,info).txt insert 1.0 "name: [lindex $d 1]\ntitle: [lindex $d 2]\n[lindex $d 3]"
}



proc xth_cp_data_tree_leave {node} {
  xth_status_bar_pop cp
}

proc xth_cp_data_tree_double_click {node} {
  global xth
  set tp $xth(ctrl,cp,dat).t 
  set d [$tp itemcget $node -data]
  set i [$xth(cp,editor).txt index insert]  
  regexp {(\d+)\.} $i dum cln
  $xth(cp,editor).txt insert $cln.0 [format "select %s\n" [lindex $d 1]]
}

proc xth_cp_map_tree_enter {node} {
  global xth
  set tp $xth(ctrl,cp,ms).t 
  xth_status_bar_push cp
  set d [$xth(ctrl,cp,ms).t itemcget $node -data]
  xth_status_bar_status cp [format "%s - %s (%s)" [lindex $d 0] [lindex $d 1] [lindex $d 2]]
}

proc xth_cp_map_tree_leave {node} {
  xth_status_bar_pop cp
}

proc xth_cp_map_tree_double_click {node} {
  global xth
  set tp $xth(ctrl,cp,ms).t 
  set d [$tp itemcget $node -data]
  set i [$xth(cp,editor).txt index insert]  
  regexp {(\d+)\.} $i dum cln
  if {[string length [lindex $d 1]] > 0} {
    $xth(cp,editor).txt insert $cln.0 [format "select %s\n" [lindex $d 1]]
  }
}


proc xth_cp_show_errors {} {
  
  global xth
  
  set w $xth(cp,log).txt
  $w tag remove xtherr 1.0 end

  set rx {\-- \S*[^\]\s]\s+\[\d+\]}
  set fnd [$w search -regexp -count cnt $rx 1.0 end]
  
  set i 0
  while {([string length $fnd] > 0) && ($i < 10000)} {
    
    set enx [$w index "$fnd + $cnt chars"]
    set ctext [$w get "$fnd + 3 chars" "$fnd lineend"]
    set cfnm {}
    regexp {\S+} $ctext cfnm
  
    if {![regexp {(\.mp|\.tex)\)?$} $cfnm]} {
      $w tag add xtherr "$fnd + 3 chars" $enx
    }

    set fnd [$w search -regexp -count cnt $rx $enx end]
    incr i    
    
  }
  
  $w tag configure xtherr -foreground red
  set prevcur [$xth(cp,log).txt cget -cursor]
  $w tag bind xtherr  "$w configure -cursor hand2"
  $w tag bind xtherr  "$w configure -cursor $prevcur"
  $w tag bind xtherr <1> "xth_cp_goto_error %x %y"
 
}



proc xth_cp_goto_error {x y} {
  global xth

  set epos [$xth(cp,log).txt get "@$x,$y wordstart" "@$x,$y lineend"]
  
  # skusime najst source error
  set fnm {}
  set fln {}
  if {(![regexp {\s*(\S+)\s+\[(\d+)\]} $epos dum fnm fln]) || [string equal $fnm "th"] || [string equal $fnm "th2"] || [string equal $fnm ".th"] || [string equal $fnm ".th2"]} {
    set epos [$xth(cp,log).txt get "@$x,$y linestart" "@$x,$y lineend"]
    regexp {\s*(\S+)\s+\[(\d+)\]} $epos dum fnm fln
  }
  
  if {([string length $fnm] == 0) || ([string length $fln] == 0)} {
    return
  }  
  
  if {[catch {set fln [expr $fln - 1]}]} {
    return
  }
  
  # potom sa pozrieme ci subor nemame otvoreny v kompilatore,
  # mapovom alebo textovom editore a skocime tam
  
  if $xth(cp,fopen) {
  
    set fullfnm [file join $xth(cp,fpath) $fnm]

    if {[string equal $fullfnm $xth(cp,ffull)]} {
      after idle "focus $xth(cp,editor).txt; $xth(cp,editor).txt see $fln.0; $xth(cp,editor).txt mark set insert $fln.0; $xth(cp,editor).txt tag remove sel 1.0 end; $xth(cp,editor).txt tag add sel $fln.0 \"$fln.0 lineend\""
      return
    }
    
    if {$xth(me,fopen) && [string equal $fullfnm $xth(me,ffull)]} {
      after idle "xth_app_show me; xth_me_goto_line [expr $fln + 1]"
      return
    }
  
    # skusime textovy editor, ci to mame otvorene
    foreach fx $xth(te,flist) {
      if {[string equal $fullfnm $xth(te,$fx,path)]} {
	after idle "xth_app_show te; xth_te_show_file $fx; $xth(te,$fx,frame).txt see $fln.0; $xth(te,$fx,frame).txt mark set insert $fln.0; $xth(te,$fx,frame).txt tag remove sel 1.0 end; $xth(te,$fx,frame).txt tag add sel $fln.0 \"$fln.0 lineend\""
	return
      }
    }
    
    after idle "xth_app_show te; xth_te_open_file 0 [list $fullfnm] $fln"
  
  }
  
  
}



therion-5.4.1/xtherion/ctrl.tcl000066400000000000000000000123241307545355600165200ustar00rootroot00000000000000##
## ctrl.tcl --
##
##     Controler module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

set xth(ctrl,all,number) 0

proc xth_ctrl_create {aname} {

  global xth
  
  set cf $xth(gui,$aname).af.ctrl  
    
  canvas $cf.c -yscrollcommand "xth_scroll $cf.sv" \
    -highlightthickness 0
  scrollbar $cf.sv -orient vert  -command "$cf.c yview" -takefocus 0 \
    -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)

  grid columnconf $cf 0 -weight 1
  grid rowconf $cf 0 -weight 1
  xth_scroll_showcmd $cf.sv "grid $cf.sv -row 0 -column 1 -sticky nsew; update idletasks; xth_ctrl_reshape te"
  xth_scroll_hidecmd $cf.sv "grid forget $cf.sv; update idletasks; xth_ctrl_reshape te"
  grid $cf.c -row 0 -column 0 -sticky nsew
  
  set xth(ctrl,$aname,number) 0
  set xth(ctrl,$aname,list) {}
}

proc xth_ctrl_add {aname cname title} {
  
  global xth
  
  incr xth(ctrl,$aname,number)
  incr xth(ctrl,all,number)
  lappend xth(ctrl,$aname,list) $cname
  set cn $xth(ctrl,$aname,number)
  set cf $xth(gui,$aname).af.ctrl  
  
  set ccf $cf.cf$cn
  frame $ccf
  frame $ccf.f 
  set cid [$cf.c create window 0 0 -window $ccf -anchor nw]
  set xth(ctrl,$aname,$cname) $ccf.f
  set xth(ctrl,$aname,$cname,frm) $ccf
  set xth(ctrl,$aname,$cname,pos) $cn
  set xth(ctrl,$aname,$cname,max) 1
  set xth(ctrl,$aname,$cname,menu) .xth_popup$xth(ctrl,all,number)
  set xth(ctrl,$aname,$cn) $cid 
  
  menu .xth_popup$xth(ctrl,all,number) -tearoff 0
  button $ccf.rb -text "$title" -command "xth_ctrl_minmax $aname $cname" \
    -font $xth(gui,lfont) -bg #aaaaaa \
    -fg white -bg darkBlue -activebackground lightBlue \
    -anchor w -relief flat \
    -takefocus 0
  bind $ccf.rb  "tk_popup .xth_popup$xth(ctrl,all,number) %X %Y"
  xth_status_bar $aname $ccf.rb [mc "Show or hide this control panel"]
  
  pack $ccf.rb -side top -fill x -expand 1
  pack $ccf.f -expand yes -fill both

  xth_ctrl_reshape $aname
}


proc xth_ctrl_finish {aname} {

  global xth  

  foreach ct $xth(ctrl,$aname,list) {
    set cmn $xth(ctrl,$aname,$ct,menu)
    foreach oct $xth(ctrl,$aname,list) {
      if {[string compare $ct $oct] != 0} {
        $cmn add command -label [$xth(ctrl,$aname,$oct,frm).rb cget -text] \
          -command "xth_ctrl_replace $aname $ct $oct" -font $xth(gui,lfont)
      }
    }
  }

}


proc xth_ctrl_reshape {aname} {
  
  global xth
  set cn $xth(ctrl,$aname,number)
  set cnv $xth(gui,$aname).af.ctrl.c  
  
  # position the windows
  set height 0
  set width [winfo width $cnv]
  for {set i 1} {$i <= $cn} {incr i} {
    set cid $xth(ctrl,$aname,$i)
    set cw [$cnv itemcget $cid -window]
    $cnv coord $cid 0 $height
    $cnv itemconfigure $cid -width $width
    incr height [winfo height $cw]
  }

  $cnv configure -scrollregion "0 0 $width $height"
}

proc xth_ctrl_minmax {aname cname} {

  global xth

  set cmm $xth(ctrl,$aname,$cname,max)
  if {$cmm == 1} {
    pack forget $xth(ctrl,$aname,$cname)
    $xth(ctrl,$aname,$cname,frm).rb configure -relief raised
    set cmm 0
  } else {
    pack $xth(ctrl,$aname,$cname) -expand yes -fill both
    $xth(ctrl,$aname,$cname,frm).rb configure -relief flat
    set cmm 1
  }
  set xth(ctrl,$aname,$cname,max) $cmm
  
  update idletasks
  xth_ctrl_reshape $aname
}

proc xth_ctrl_replace {aname ccname dcname} {
  
  global xth

  set cnv $xth(gui,$aname).af.ctrl.c
  set p1 $xth(ctrl,$aname,$ccname,pos)
  set p2 $xth(ctrl,$aname,$dcname,pos)
  
  set xth(ctrl,$aname,$ccname,pos) $p2
  set xth(ctrl,$aname,$dcname,pos) $p1
  $cnv itemconfigure $xth(ctrl,$aname,$p1) \
    -window $xth(ctrl,$aname,$dcname,frm)
  $cnv itemconfigure $xth(ctrl,$aname,$p2) \
    -window $xth(ctrl,$aname,$ccname,frm)
    
  update idletasks
  xth_ctrl_reshape $aname
  
}

proc xth_ctrl_minimize {aname cname} {
  global xth
  set xth(ctrl,$aname,$cname,max) 1
  xth_ctrl_minmax $aname $cname
}

proc xth_ctrl_maximize {aname cname} {
  global xth
  set xth(ctrl,$aname,$cname,max) 0
  xth_ctrl_minmax $aname $cname
}

proc xth_ctrl_scroll_to {aname cname} {
  global xth
  set cf $xth(gui,$aname).af.ctrl
  set sr [$cf.c cget -scrollregion]
  set wp [$cf.c coord $xth(ctrl,$aname,[expr [lsearch $xth(ctrl,$aname,list) [lindex $xth(ctrl,$aname,list) [expr $xth(ctrl,$aname,$cname,pos) - 1]]] + 1])]
#  set wp [$cf.c coord $xth(ctrl,$aname,[expr [lsearch $xth(ctrl,$aname,list) $cname] + 1])]
  $cf.c yview moveto [expr [lindex $wp 1] / ([lindex $sr 3] - [lindex $sr 1])]   
}

therion-5.4.1/xtherion/dbg.tcl000077500000000000000000000033551307545355600163170ustar00rootroot00000000000000#! /usr/bin/wish

proc xth_dbg_dbg {} {
  global xth
  set f $xth(gui,dbg)
  $f.cmd configure -values [linsert [$f.cmd cget -values] 0 $xth(ctrl,dbg,cmd)]
  set tmp {}
  if {[regexp {^\s*\$} $xth(ctrl,dbg,cmd)]} {
    set tmpcmd "set tmp $xth(ctrl,dbg,cmd)"
  } else {
    set tmpcmd "set tmp \[$xth(ctrl,dbg,cmd)\]"
  }
  $f.txt delete 1.0 end
  set xth(ctrl,dbg,cmd) {}
  eval $tmpcmd
  $f.txt insert 1.0 $tmp  
}

proc xth_dbg_init {} {

  global xth
  
  set f $xth(gui,dbg)
  toplevel $f
  wm title $f "Debug window"

  ComboBox $f.cmd -font $xth(gui,lfont) -height 8 \
    -textvariable xth(ctrl,dbg,cmd) -command xth_dbg_dbg

  # initialize text editor
  set txb $f
  text $txb.txt -height 12 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
  scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)

  grid columnconf $f 0 -weight 1
  grid columnconf $f 1 -weight 0
  grid rowconf $f 1 -weight 1
  grid $f.cmd -column 0 -row 0 -columnspan 2 -sticky news
  grid $f.txt -column 0 -row 1 -sticky news
  grid $f.sv -column 1 -row 1 -sticky news
  grid $f.sh -column 0 -row 2 -sticky news
      
  wm geometry $f 480x320+100+100
  update idletasks
  
}


if 0 {
  package require BWidget
  source ver.tcl
  source global.tcl
  wm withdraw .
  xth_dbg_init
} else {
  xth_dbg_init
}

therion-5.4.1/xtherion/global.tcl000066400000000000000000000443571307545355600170270ustar00rootroot00000000000000##
## global.tcl --
##
##     Global variables definition.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

package require msgcat
catch {namespace import ::msgcat::mc}  

if {[string equal -nocase [::msgcat::mclocale] c]} {
  ::msgcat::mclocale en
}

set xth(destroyed) 0
set xth(prj,name) "therion"
set xth(prj,title) "therion user interface"
set xth(gui,main) ".xth"
set xth(gui,about) ".xth_about"
set xth(gui,bacw) ".xth_bac"
set xth(gui,dbg) ".xth_dbg"
set xth(gui,help) ".xth_help"
set xth(gui,message) ".xthmsg"
#set xth(gui,minsize) {480 300}
set xth(gui,minsize) {720 576}
set xth(gui,balloons) 0
set xth(gui,toolbar) 1
set xth(te,template) {}

set xth(kb_control) Control
set xth(kb_meta) Meta
set xth(gui,compshow) 0
set xth(gui,compcmd) "therion"
set xth(gui,appctrlcmd) {}
set xth(gui,auto_save) 0
set xth(gui,auto_backup) 0
set xth(gui,auto_backup_ext) "~"
set xth(gui,check_update) 1


set xth(encodings) { iso8859-1 iso8859-2 iso8859-5 iso8859-7 utf-8 cp1250 cp1251 cp1252 cp1253}
set xth(kbencodings) {utf-8 iso8859-1 iso8859-2 cp1250 cp1251 macCentEuro unicode}
if {[lsearch -exact $xth(kbencodings) [encoding system]] < 0} {
  lappend xth(kbencodings) [encoding system]
}

# The collation aware sort code used by xtherion takes a map in which collation differences can be 
# listed as {from to from to...}, sorts the mapped items, and retrieves only the original elements.
#
# Examples:
#
# Portuguese:
# % lsort {ab ãc ae ãd}
# ab ae ãc ãd
# % collatesort {ab ãc ae ãd} {ã a}
# ab ãc ãd ae
#
# Spanish (ll sorts after lz):
# % collatesort {llano luxación leche} {ll lzz}
# leche luxación llano
#
# German (umlauts sorted as if "ä" was "ae"):
# % lsort {Bar Bär Bor}
# Bar Bor Bär
# % collatesort {Bar Bär Bor} {ä ae}
# Bär Bar Bor
#
set xth(collation-maps,pt) { á a à a ã a â a é e ê e í i î i ó o ô o õ o ú u ù u û u ç c \
  Á A À A Ã A Â A É E Ê E Í I Î I Ó O Ô O Õ O Ú U Û U Ç C }

set xth(length_units) {m cm in ft yd}
set xth(angle_units) {deg min grad}
set xth(point_types) {}
set xth(line_types) {}
set xth(scrap_projections) {plan elevation extended none}
set xth(app,te,filetypes) {    
  {{Therion files}       {.th}}    
  {{2D therion files}       {.th2}}    
  {{All files}       {*}}    
}
set xth(app,te,fileext) {.th}

set xth(app,me,filetypes) {    
  {{Therion 2D files}       {.th2}}    
  {{Therion files}       {.th}}    
  {{All files}       {*}}    
}

set xth(app,cp,filetypes) {    
  {{Therion config files}       {thconfig*}}    
  {{Therion config files }       {.thcfg .thconfig}}    
  {{All files}       {*}}    
}

set xth(icmds) {survey}
set xth(cmds) {scrap centerline grade line area map layout surface}

set xth(datafmt,unknown) {4s}                    
set xth(datafmt,station) {4s}                    
set xth(datafmt,length) {6.2fx {-}}             
set xth(datafmt,counter) {6.2f {-}}            
set xth(datafmt,bearing) {5.1fx {-}}             
set xth(datafmt,gradient) {{5.1fx} {up down -}} 
set xth(datafmt,depth) {6.2fx {-}}            
set xth(datafmt,dimensions) {4.1fx {-}}             

set xth(gui,initdir) ""
set xth(app,active) ""
set xth(app,list) {}
set xth(app,all,tbwidth) 256
set xth(app,all,relw) 380
set xth(app,all,wmwd) 180
set xth(app,all,wpsw) 1

set xth(app,fencoding) utf-8
set xth(app,sencoding) utf-8

# autodetect some options
frame .def
scrollbar .def.scrollbar
text .def.text
if {[catch {.def.text configure -undo 1}]} {
  set xth(gui,text_undo) 0;
} else {
  set xth(gui,text_undo) 1;
}
label .def.label

set xth(gui,sbwidth) [.def.scrollbar cget -width]
set xth(gui,sbwidthb) [.def.scrollbar cget -borderwidth]
set xth(gui,lfont) [.def.label cget -font]
set xth(gui,efont) [.def.text cget -font]
set xth(gui,ecolorbg) black
set xth(gui,ecolorfg) green
set xth(gui,escolorbg) black
set xth(gui,escolorfg) red
set xth(gui,ecolorselbg) green
set xth(gui,ecolorselfg) black
set xth(gui,selfg) white
set xth(gui,selbg) darkBlue
set xth(gui,etabsize) 2
set xth(gui,controlk) Ctrl

set xth(import,size) 1024.0
set xth(import,mind) 8.0
set xth(import,dxf,scale) 1.0
set xth(import,dxf,cs) {}
set xth(import,svg,scale) 1.0
set xth(import,svg,cs) {}
set xth(import,default,scale) {}
set xth(import,default,cs) {}

set xth(gui,xvi_grid_clr) #00D0D0
set xth(gui,xvi_walls_fptn) gray12
set xth(gui,xvi_walls_fclr) gray80
set xth(gui,xvi_walls_oclr) gray60
set xth(gui,xvi_shot_clr) gray50
set xth(gui,xvi_station_fclr) black
set xth(gui,xvi_station_oclr) black
set xth(gui,xvi_station_size) 3.0
set xth(gui,xvi_sketch_line_width) 1

set xth(gui,me,nozoom) 1

destroy .def
# end of options autodetection

# map editor settings

# translate types in dropdown menus
set xth(gui,me,type_dropdown_trans) 1

# reset options string on type change
set xth(gui,me,type_reset_options) 1

#########################################
# SCRAP
# size of scrap scaling square
set xth(gui,me,scrap,psize) 4


#########################################
# POINT
# size of point
set xth(gui,me,point,psize) 4

#########################################
# LINE
# size of line point
set xth(gui,me,line,psize) 3
# line width
set xth(gui,me,line,width) 3
# size of line control point
set xth(gui,me,line,cpsize) 3
# width of line between point and control point
set xth(gui,me,line,clwidth) 2
# size of start line tick
set xth(gui,me,line,ticksize) 15
# width of start line tick
set xth(gui,me,line,tickwidth) 3
# simplification limit for lines. Larger simp_limit = less points; smaller simp_limit = more points and smoother line
set xth(gui,me,line,simp_limit) 10

# for color names, see http://wiki.tcl.tk/37701
set xth(gui,me,activefill) red
set xth(gui,me,pasivefill) green
set xth(gui,me,controlfill) blue
set xth(gui,me,highlightfill) cyan
set xth(gui,me,unselectedfill) lightgray
set xth(gui,me,wallcolor) brown
set xth(gui,me,pitcolor) magenta
set xth(gui,me,slopecolor) gold
set xth(gui,me,rockcolor) snow4
set xth(gui,me,bordercolor) turquoise
set xth(gui,me,stationcolor) darkorange

set xth(gui,me,typelistwidth) 16
set xth(gui,rmb) 3

set xth(gui,bindinsdel) 1
set xth(gui,me,pointsizectrl) 0

# platform dependend settings
case $tcl_platform(platform) {
  unix {
    set xth(gui,sbwidth) 9
    set xth(gui,sbwidthb) 1
    set xth(gui,efont) {fixed -20}
    set xth(gui,platform) unix
    set xth(gui,cursor) top_left_arrow
    set xth(gui,compshow) 1
    if {[string equal $tcl_platform(os) Darwin]} {
        set xth(kb_meta) Meta
        set xth(kb_control) Alt
        set xth(gui,controlk) Cmd
        set xth(gui,platform) macintosh
        set xth(gui,cursor) arrow
        set xth(gui,bindinsdel) 0
    }
  }
  windows {
    package require registry
    set xth(win32registry) {HKEY_LOCAL_MACHINE\SOFTWARE\Therion}
    if {[catch {
      set xth(gui,compcmd) "\"[file join [registry get $xth(win32registry) InstallDir] therion.exe]\""
    }]} {
      set xth(win32registry) {HKEY_CURRENT_USER\SOFTWARE\Therion}
      catch {
	set xth(gui,compcmd) "\"[file join [registry get $xth(win32registry) InstallDir] therion.exe]\""
      }      
    }
    
    catch {
      if {[registry get {HKEY_LOCAL_MACHINE\SOFTWARE\Therion} AppCtrl]} {
	set xth(gui,appctrlcmd) "[file join [registry get $xth(win32registry) InstallDir] bin appctrl.exe]"
      }
    }
    regsub -all {\/} $xth(gui,compcmd) {\\\\} xth(gui,compcmd)
    set xth(gui,efont) "Courier 16 roman bold"
    set xth(gui,platform) windows
    set xth(gui,cursor) arrow
    set xth(app,sencoding) [encoding system]
    set xth(gui,bindinsdel) 0
    if {[catch {
      set fid [open "|cmd.exe /c" r]
      read $fid;
      close $fid
    }]} {
      set xth(gui,compcmd) "command.com /c $xth(gui,compcmd)"
    } else {
      set xth(gui,compcmd) "cmd.exe /c $xth(gui,compcmd)"
    }
  }
  macintosh {
    set xth(kb_meta) Meta
    set xth(kb_control) Alt
    set xth(gui,controlk) Cmd
    set xth(gui,platform) macintosh
    set xth(gui,cursor) arrow
    set xth(gui,bindinsdel) 0
    set xth(app,sencoding) utf-8
  }
}


case $tcl_platform(os) {
  Darwin {
    set xth(gui,rmb) 2
  }
}


# end of platform dependend settings

# words to translate
set tmp [mc "theme basic-symbols"]
set tmp [mc "theme passage-fills"]
set tmp [mc "theme speleothems"]
set tmp [mc "theme equipement"]
# This line type is special. It even doesn't appears on map legend.
# Couldn't find a better place to include this
set tmp [mc "line arrow"]

set xth(me,themes) {
  {theme basic-symbols}
    {point gradient}
    {point height}
    {point passage-height}
    {point entrance}
    {point label}
    {point station}
    {point continuation}
    {point water-flow}
    {point air-draught}
    {line wall}
    {line chimney}
    {line ceiling-step}
    {line floor-step}
    {line pit}
    {line floor-meander}
    {line ceiling-meander}
    {line contour}
    {line label}
    {line overhang}
    {line water-flow}
    {area water}
    {area sump}
    {area bedrock}
  {theme passage-fills}
    {point blocks}
    {point archeo-material}
    {point clay}
    {point debris}
    {point breakdown-choke}
    {point flowstone-choke}
    {point low-end}
    {point narrow-end}
    {point guano}
    {point ice}
    {point paleo-material}
    {point pebbles}
    {point raft}
    {point raft-cone}
    {point root}
    {point sand}
    {point snow}
    {point vegetable-debris}
    {point water}
    {line border}
    {line border:invisible}
    {line rock-border}
    {line rock-edge}
    {area blocks}
    {area clay}
    {area debris}
    {area ice}
    {area pebbles}
    {area sand}
    {area snow}
  {theme speleothems}
    {point anastomosis}
    {point aragonite}
    {point cave-pearl}
    {point crystal}
    {point curtain}
    {point disk}
    {point flowstone}
    {point flute}
    {point gypsum}
    {point gypsum-flower}
    {point helictite}
    {point karren}
    {point moonmilk}
    {point pillar}
    {point popcorn}
    {point rimstone-dam}
    {point rimstone-pool}
    {point scallop}
    {point soda-straw}
    {point stalactite}
    {point stalagmite}
    {point wall-calcite}
    {line flowstone}
    {line moonmilk}
    {area flowstone}
    {area moonmilk}
  {theme equipement}
    {point anchor}
    {point bridge}
    {point camp}
    {point fixed-ladder}
    {point no-equipment}
    {point rope}
    {point rope-ladder}
    {point steps}
    {point traverse}
    {line rope}
}





set xth(about,image_data) {
R0lGODlhwACQAOcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH+CHh0aGVyaW9uACwAAAAAwACQAAAI/gABCBxI
sKDBgwgTKlzIsKHDhxAjSpxIsaLFixgzatzIsaPHjyBDihxJsqTJkyhTqlzJ
sqXLjyRiloj5sqbNlDJJlJg586bPnxx1liiSpKjRJD2BKl0KUWfRNm0kQW1T
lCbTq1gL6kSSJI4kSbZsfaWaxGpWADFJoD1rk0SKJG7AapurS6wbpGrPOsWb
Ny9bnDvbOLKlbdu/bXPFIi3BtsTRpGv/ooyZJKotw/8yI7ZF1S/TvVOL7pzp
WXJHx5bDFtb2LbPrw9tsRSqblUTluF/dkC1b2jTHymB1bdu27zXmf/sQz+7t
U2iSSGHDSooUOilz3xOfgr083Hhh19rE/raB/FMm8NXRx3ZOq/Y69oW2K0cF
ixmha8RSyd/MCXy4YYH/jHUUUmXp915C8UHVyHaFCSSTQbBpI0sTBrbl2Hn/
DTTdXVJBZRRp7h0IgFHzbdfdQsOFJwleTJXAFVRz/WOQdtOFJppZ73n2FG6q
+ScJQaX9s5olbhAR4kt7JVHYNm0cVCBY6lXF2FU4akUQjWH5t81C2mgW3l1H
1uQcd0kglFds4lG1k1lhmrQXZOwBAIJAqEkiC2HbfJOhmSV4KV4RbMl0mTYM
babYYjrR1CZJSVaV00xzoiWfXMP5k5lCBJDgp5qSkaAaoe0d5MZm+ZHAlWNr
IplgG414KNpO/gAUAAABddoi3Gs/IlhcYdbkR4BpX3G3TSQLiXcUWUUsGhJq
uEXp6EC1XqZZsd5JVVYAps3HnYzFdqhbaL09mlZkHNUZnHQexhSpbaxaguel
C7nWmja6SNJEsr5Nyh1D0gUroH6NLpaqRjqlhp4turEYa63dwauQa8mFpeav
pkW75UJtRKdxwnBeGFUbbnxrVJUSsZvxZfvoGZu1UwLgWBpyyCJccf80Ga+f
kqSRgrLlAXfZQ4Ou3JlWwG2Xq40kO6RTE45YYs02ugh0i9BI0VlUXMI+dJ+x
LfvGLn0QwSYxbQRFS6iGkiRMdlNPZcmtQCqS9evXtjz9dkOH7ROe/iP38vxT
rWc75A9icZcJpM8NDqTNLVxHFJ+JewIgtJrsNuLuiVqTymmOTkUV3kNtaNb4
QHRHTrh4FR7UuYmZGS7QytY+ZZlw3zTykGHfaEPk2ti15zNmNjdEmCWbO4jh
3RFauyjdgx5UOInB2vKQJPcV7rdSpbsGkfWk/4682CvybmZRkdB3sUHGlrVj
WGG7pg/VFIvocmXv3l1o+uYdT5BmVIfp2FdLst9AGhefOMisfZlJzIqutxSG
Ra5QKxtQ25Z0pcOEhzPiMwjDtHcQWVhLICCwTSRkETy8ZUZPEhqa/Ixnmfrc
Dk1qKwrMZDacg1xGMalDSwnSYD4Ooi8O/uuJz0Tu078VDgRxDmuIoahToKIE
axv+QIjQUkcZzx1HgAKJnXMo4j6oWStSK4yJZb4TNlKxqHSBK4iQMNi1giDu
igiJHRIuxEXk6OkW1opfGJ+zLYi0AT93mVLBzIeQJESwQqhxm2tcVxAg8uYt
bZDDEP/Rmm30ajxG7B50pDWR6VRlfkmg1ELSlkGn9FB6CqGcpMZYQoZUazwM
bCBcCNMliqwICWlJJGEYUiqitTCJCOFUCH93PhPuql4qNKJj3NDHiahydYlT
CMv8YkpJfAeLbiRb6YrpSvCkMAlglN82sTnK4pWOX7HjiXa2xU0nWeeNEIkE
JcWWTHG+kZwH/mlDYjaXKcQxREWxuw19WANMJ5EgUoDDZ0IMo6KqKfOeEEmR
bIY2EwwVSoEbKt+2fJiQsoCAVuuMZkQKg7o25giiLwxLwvryu24aKjqIuaJC
R9Qej4HlaRRJji6I51B7WrGgCiFVIHvCMIYkIUIxvaalMoMEo/KEKPqay0Tk
qaJ76fE9y5TE1IC6UGvgr6ItRcluUHU1awJvImMzqW/qdM3tGQuX5hljO0fi
KhL8yoFcRWdnwmkap0CnrUDTIrTgiRLBWi1jdpupFI2VNL2UoA3QialiBSKW
8HlmmykRSxPWRjcyTsQNhcshVv4nrbwO5I+hJd38omK3zE6ThfQx/q3wWNa7
xzKzYa7UXNd2Ih88RREljD3oKmM7WYWIJwW9I6ZsAWBB2RSFdDZt5kkIWMXL
eWMfGFEpI/8COBcGlWq0AatlpvZAkozuQuYrr0Qi6LXH/nWpMz3M6EAKFeIK
CSXasBZcGebZiqRoRV7zHkftMxflda++tHzNPxiJBH44+MFNBdKDHxwmr7aq
KG9BXJeKW5DQNRfAndrggA+iOc4WDU8b5uiEJ1yQFT/4n4ciUCglkVgO749/
zq0Y+d7l3YUW8bBYC9prCOJiB7e4yPzaHWmIIGAbD6R6UiFCX+nH45pB0C5V
G2YS0lBfdxWGZndDB5IJImYXF4uxDnos/qUsNZHjxC2WK3mcLcibxniZ0XDx
kZ2JUkwQcPgZHyzu858DbRBNlTgvtGoCpdSbEA9nJjlf6mltEglYh4BvPRcq
ClfishqO+tnPhBbIp8ER6htv5i4o6Itt4mArzFnaO6iDM2DkymatkbRDEpyj
gCM36lL3+sUH8ROYBgICtkKRw4+m5KnLctWrkHZbrcSYkCa35dBARaMNuy8A
gPFpQD8YGwMBBwA+TQ4HXyeB2yBl17KHbCI6V7TN6W5j+WUXqkxlKk+8poL3
ve8EiNvSwwmuQPrJWlc3JGUSNTB3MSRpiUQJ3+VbNL8nvm+I5E5o+CJdEVpY
a4egUEWR0Blf/rFSOoWhNaDa6pFMKT7xiCqw4cWOCu04vA1vALSeeqFfuh1U
kYkmAZIGI05rWM7y7Rp3jSQUnym/Y/SEHMxD8C4PaqxEkfQJlD6oFImhp61Z
I2lFzbJ4yFEpqTc0B7iV8+5W7KCCtTqDxEuxSbpdvx6V9n1DH9qwhpJz9Ni0
Ay1N0PsZSbwUnjborDQBYFfWjXlrqhzIZG5QLUUyJgk5dMZniw8Jzp5FTZ+1
73QKX2vRciXrLJKlvmApyYcDGam7yjlqWlN2aEuvks7FpSNq01ZJTtcICnmm
2Fdz2lwTYseAW8vrfU0QWHiSEVc9J/UkOfSs6EQCorRw+PbZhzcs/mkJ5dG+
9lj6PgBYVl9ZWCL6DS2BHnkrh4E2nfgfJov4QeIec+Ep2g7vEMg0+inEvAb/
6xVplxUtE/ENehMbVJFxnJMaBld1XyEVEBg9KDZ0TuY8+TVsaZYEirZLBYh3
Zsc5JIBgnHQR/aJ/JdIjlWYR3EN9wCEcXFRi4lRF14d9DnEyAiIfbsB/2ZYR
nhJ6mDVEjZdB2BFd+uYaADhKKMd2YHELXVJLG0E5mUIUN8VoDOEPejI2OxNG
kqKDnbZccWQtuwEyXhZTHbEbIUUcXIRCGPR+yQUy24FiVKh2dYVgS0KDnQQV
aqAtKQgRxXFqaQAomeQUOSiBSeVMlUUd/vYWFe7CHW5nEf2yiP7nhcGWcA0n
Py5SGVc3KEbYSQ9YIm84F8PBhi4XFrqwJBRYR7fWBHOXSTrEFViib1VXWV8R
CY4QPYXRGhmRIgGkYFyUHPDDikCyOnjSY24lHZGAiAzYcRZxQsixchRRSVRT
AiPHiuN0GJ9lKPqlXBnRJxQnig+DY3chhKyIBHLVJWclEdIRSHDRQxxxDa9h
DRfRRYwlK8B4Jc83jIchiehTI5UxQsKhD9jFEUMWj1DmCEmggPW4WnsmWbEo
FRFXPx0xkMsoL4UzjYHoRLboH43IEG1QF7ZwJ1mCGXYYERJZEWMXIRg0f9iz
IxnZHUfoEN8B/l8LlhEleRHasA8RMzEJSTqgAVkMQowTQTMUWIEQMmLLaHxt
kIU7GYyBFyMj2U0VhxE1GY+584FLCSR4hRGONpUTwY1qVRGhgx/Fc5XZtIRx
OFJcCRRjo5I5dzJnSZJGqRQ8ZZFXqXgxIpBxqZZUQZc7WTCR9ZYIZI1YYSxk
eRBZuRET540hcZIK9l/jQQDYUpiDxUxbRZT20XIrQXHbd0nqJ5kHRin6aEL8
xhKakTd68g+Dg0NsuRRqsU6YoZgQwZhpORLmCBtJlRgYWJigEVmZ1xEpFpoY
cVQMRThzUZzoIo712DmbtJF4mZcfAXcXpDGy4EHr4ZkVdX2DN5sf/rEPg5MY
shgXIdMZX5mQcsaII6FgzOmbFhQ3riJ/q0klTpQlKcZIsjmTk7RvsJkdJ5Qn
KhKO7OF3fSliHIWZEkFxb0d4Y7M2BNBsnqlDcmUYkWMczvmNo/mcyIF3vWJZ
ZdOgCNFdoHg2vwmhiKGfFaqezXUo1EQuHIqVmBceHwqhq1GcSRVT3bENivmb
v3Ef3YlH1bmi8IEa9cV/cBidGqMx1lCHiqWdBQoxQmVyPooglCE7PKIa6ZEb
DxhxP/kNommZwZaPiLELlhAHn/SkStMoPtkvU9EE98ZlbmgivVmUCaQRG5Zw
OYOcZIogpEEj6WQbp7ITL6ItT1Oj9jkQ/iuXnzNyQtqHjWlgp3fKEKtyI2mW
KDqUYQw4HCpTEEM5ofCHoJLgSADaqHh6FFWCI3ElFy+KqaWpqfZhgOhhLcny
np4pFFFXNi1KpQO0ctq2PYQnIJ8Kqo6qojyHIC/ygMSakfqQmEaFqKvxFc+i
ELDqq8YjH/eGb1MIoVFJoQk3G0oJrS6RaZrGFS/Sdohxd0PZTYmqO42QBLjE
rTWRKeNCAB9VqrZwDf7Bi0H1aJthkLPKriWRNAVTqdugDwaITWNngGooFdvK
ry8Br+NzYviITcaxGUk3ngrbM7cxQnjiDRBLHNuXd5ZgkM9asRzhro6hpj3U
iOhmPSErsh0hfxNNIAchuSSMVHOWhD8se3af6B8EQSpMtDMMerMkBxwgWZwE
ETebta9AWx5/Gj1eRVnB9bNJS3JQpaYplx69h5BR21fq9BRYGgm6gbRZCxTj
Any3kaaVGLZsEUIMazVHMUe9irZZQbJCMS5wq4WlsbJ1m7d6u7d827d++7dk
GRAAOw==
====
}

proc xth_incr_station_name {oname iii} {
  if {[regexp {^(\S+)(\@\S+)$} $oname dumm stname svname]} {
    set oname $stname
  } else {
    set svname {}
  }
  if {[regexp {^0*(\d+)$} $oname dum s2]} {
    set numlen [string length $dum]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s2$svname"
  }
  if {[regexp {^(.*\D)(0*(\d+))$} $oname dumm s1 s3 s2]} {
    set numlen [string length $s3]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s1$s2$svname"
  } 
  if {[regexp {^(.*)(\D)$} $oname dumm s2 s1]} {
    set avs1 [scan $s1 %c]
    if {(($avs1 >= 65) && ($avs1 < 90)) || (($avs1 >= 97) && ($avs1 < 122))} {
      incr avs1
      return "$s2[format %c $avs1]$svname"
    }
  } 
  if {[regexp {^(0*(\d+))(\D.*)$} $oname dumm s3 s2 s1]} {
    set numlen [string length $s3]
    incr s2 $iii
    if {[string length $s2] < $numlen} {
      set s2 [format [join [list "%0" $numlen d] ""] $s2]
    }
    return "$s2$s1$svname"
  } 
  return "$oname$svname"
}


proc xth_getdir {fname} {
  set d [file dirname $fname]
  if {[file exists $d] && [file isdirectory $d]} {
    return $d
  } 
  return {}
}

therion-5.4.1/xtherion/help.tcl000066400000000000000000000100151307545355600164770ustar00rootroot00000000000000##
## help.tcl --
##
##     Help menu and its functions.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


set hm "$xth(gui,main).hmenu"
set xth(gui,menu,help) $hm

menu $hm -tearoff 0
$hm add command -label [mc "Control..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_help_control_show
$hm add command -label [mc "BAC calculator..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_bac_init
$hm add command -label [mc "Calibrate bitmap..."] -underline 0 -font $xth(gui,lfont) \
  -command xth_calibrate_bitmap
$hm add command -label [mc "About..."] -underline 0 -font $xth(gui,lfont) \
  -command {
    xth_about_show 1
    xth_about_status $xth(prj,title)
  }

proc xth_help_control_show {} {
  global xth
  if {[winfo exists $xth(gui,main).help_control]} {
    focus $xth(gui,main).help_control
  } else {
    xth_help_control_init
  }
}

proc xth_help_control_search {} {
}

proc xth_help_control_init {} {

  global xth
  
  set f $xth(gui,main).help_control
  toplevel $f
  wm transient $f $xth(gui,main)
  wm title $f "Xtherion control"

  set ff $f.lf
  frame $ff
  Entry $ff.se -font $xth(gui,lfont)
  Button $ff.sb -text [mc "Search"] -anchor center -font $xth(gui,lfont) \
  -command xth_help_control_search -width 8
  Button $ff.cb -text [mc "Close"] -anchor center -font $xth(gui,lfont) \
  -command "destroy $f" -width 8
  grid columnconf $ff 2 -weight 1
#  grid columnconf $ff 0 -weight 1
#  grid columnconf $ff 1 -weight 0
#  grid columnconf $ff 1 -weight 0
#  grid $ff.se -column 0 -row 0 -sticky news
#  grid $ff.sb -column 1 -row 0 -sticky news
  grid $ff.cb -column 2 -row 0 -sticky news


  set txb $f.tf
  frame $txb
  text $txb.txt -wrap none -font $xth(gui,lfont) \
    -relief sunken -state disabled \
    -selectbackground $xth(gui,ecolorselbg) \
    -selectforeground $xth(gui,ecolorselfg) \
    -selectborderwidth 0 \
    -yscrollcommand "$txb.sv set" \
    -xscrollcommand "$txb.sh set" 
  scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  grid columnconf $txb 0 -weight 1
  grid rowconf $txb 0 -weight 1
  grid $txb.txt -column 0 -row 0 -sticky news
  grid $txb.sv -column 1 -row 0 -sticky news
  grid $txb.sh -column 0 -row 1 -sticky news

  grid rowconf $f 0 -weight 1
  grid columnconf $f 0 -weight 1
  grid rowconf $f 1 -weight 0
  grid $txb -column 0 -row 0 -sticky news
  grid $ff -column 0 -row 1 -sticky news
  
 
  set sw [winfo screenwidth .]
  set sh [winfo screenheight .]
  update idletasks
  wm geometry $f +0+0
  wm geometry $f 640x480
  wm minsize $f 320 240
  set x [expr {($sw - [winfo width $f])/2}]
  set y [expr {($sh - [winfo height $f])/2}]
  wm geometry $f +$x+$y
  update idletasks
  
  $txb.txt configure -state normal
  set hlptxt [ mc "xtherion_help_control" ]  
  if {[string length $hlptxt] < 100} {
    set tmploc ::msgcat::mclocale
    ::msgcat::mclocale en
    set hlptxt [ mc "xtherion_help_control" ]  
    ::msgcat::mclocale $tmploc
  }
  $txb.txt insert end $hlptxt
    
     
  $txb.txt configure -state disabled
 
}



therion-5.4.1/xtherion/init.tcl000066400000000000000000000143541307545355600165240ustar00rootroot00000000000000##
## init.tcl --
##
##     Initialization script.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

package require BWidget

if {[catch {set imgver [package require Img]}]} {
  set xth(gui,imgfiletypes) {
	   { {Pictures} {.gif .pnm .ppm .xvi} }
	   { {PocketTopo therion export} {.txt} }
	   { {All Files}               * }
	 } 
} else {
  set xth(gui,imgfiletypes) {
	   { {Pictures} {.png .jpeg .jpg .gif .pnm .ppm .xvi} }
	   { {PocketTopo therion export} {.txt} }
	   { {All Files}                                               * }
	 } 
}

# read xtherion.ini file from THERION directory
set idir {}
if {[catch {set idir $env(THERION)}]} {
  if {![catch {set idir $env(HOME)}]} {
    append idir "/.therion"
    if {[string equal $xth(gui,platform) windows]} {
      append idir ";"
    } else {
      append idir ":"
    }
  }
  if {[string equal $xth(gui,platform) windows]} {
    if {[catch {
	append idir [registry get $xth(win32registry) InstallDir]
	}]} {
      append idir "C:/WINDOWS;C:/WINNT;C:/Program files/Therion"
    }
  } else {
    append idir "/etc:/usr/etc:/usr/local/etc"
  }
}
if {[string equal $xth(gui,platform) windows]} {
  set idirs [split $idir ";"]
} else {
  set idirs [split $idir ":"]
}

set xth(idirs) $idirs
foreach idir $xth(idirs) {
  catch {source [file join $idir xtherion.ini]}
}
catch {source xtherion.ini}

# create xth window
wm withdraw .
xth_about_show 0
toplevel $xth(gui,main)
wm withdraw $xth(gui,main)
wm protocol $xth(gui,main) WM_DELETE_WINDOW "xth_exit"
wm title $xth(gui,main) $xth(prj,name)
wm geometry $xth(gui,main) [format "%dx%d+0+0" [lindex $xth(gui,minsize) 0] \
  [lindex $xth(gui,minsize) 1]]
wm minsize $xth(gui,main) [lindex $xth(gui,minsize) 0] \
  [lindex $xth(gui,minsize) 1]
update idletasks
bind $xth(gui,main)  { 
  catch {xth_app_place $xth(app,active)}
}

set xth(gui,clock) "00:00"

# redefine some public key bindigs
if {$xth(gui,bindinsdel)} {
  bind Text  { }
}
bind Text <$xth(kb_control)-Key-o> "#"
bind Text <$xth(kb_control)-Key-a> "#"
bind Text <$xth(kb_control)-Key-i> "#"
bind Text <$xth(kb_control)-Key-s> "#"
bind Text <$xth(kb_control)-Key-w> "#"
bind Text <$xth(kb_control)-Key-q> "#"
bind Text <$xth(kb_control)-Key-x> "#"
bind Text <$xth(kb_control)-Key-n> "#"
bind Text <$xth(kb_control)-Key-p> "#"
bind Text <$xth(kb_control)-Key-c> "#"
bind Text <$xth(kb_control)-Key-v> "#"
bind Text <$xth(kb_control)-Key-f> "#"
bind Text <$xth(kb_control)-Key-h> "#"
bind Text <$xth(kb_control)-Key-z> "#"
bind Text <$xth(kb_control)-Key-y> "#"
bind Text <$xth(kb_control)-Key-d> "#"
bind Text <$xth(kb_control)-Key-k> "#"
bind Text <$xth(kb_control)-Key-r> "#"

bind Entry <$xth(kb_control)-Key-d> "#"
bind Entry <$xth(kb_control)-Key-k> "#"

set xth(gui,bind,text_tab) [bind Text ]
set xth(gui,bind,text_return) [bind Text ]
bind Text  "#"
bind Text  "#"

if {[string length $xth(gui,initdir)] == 0} {
  if {[catch {
    set xth(gui,initdir) [registry get $xth(win32registry) XTherionDir]
  }]} {
    set xth(gui,initdir) [pwd]
  }
}

proc thememc {tt} {
  set trans [mc $tt]
  if {[string equal $tt $trans]} {
    set trans [lindex $tt 1]
    regsub -all {[\-\:]} $trans { } trans
  }
  return $trans
}

set alllist {}
foreach type $xth(point_types) {
  lappend alllist [list point $type]
}
foreach type $xth(line_types) {
  lappend alllist [list line $type]
}
foreach type $xth(area_types) {
  lappend alllist [list area $type]
}
set tmp [mc "theme all-symbols"]
set alllist [linsert $alllist 0 {theme all-symbols}]
set xth(me,themes) "$alllist $xth(me,themes)"
set xth(me,themes,list) {}
set xth(me,themes,showlist) {}

# process themes
set acttheme all-symbols
foreach itm $xth(me,themes) {
  set key [lindex $itm 0]
  set value [lindex $itm 1]
  switch $key {
    theme {
      lappend xth(me,themes,list) $value
      lappend xth(me,themes,showlist) [thememc $itm]
      set xth(me,themes,$value,point,list) {}
      set xth(me,themes,$value,point,xlist) {}
      set xth(me,themes,$value,line,list) {}
      set xth(me,themes,$value,line,xlist) {}
      set xth(me,themes,$value,area,list) {}
      set xth(me,themes,$value,area,xlist) {}
      set acttheme $value
    }
    point {
      lappend xth(me,themes,$acttheme,point,list) $value
      lappend xth(me,themes,$acttheme,point,xlist) [list [thememc $itm] $value]
    }
    line {
      lappend xth(me,themes,$acttheme,line,list) $value
      lappend xth(me,themes,$acttheme,line,xlist) [list [thememc $itm] $value]
    }
    area {
      lappend xth(me,themes,$acttheme,area,list) $value
      lappend xth(me,themes,$acttheme,area,xlist) [list [thememc $itm] $value]
    }
  }
}

proc xth_me_sortxlist {cl} {
	global xth

  set lang [string range [::msgcat::mclocale] 0 1]
  set map [expr {[info exists "xth(collation-maps,$lang)"] ? $xth(collation-maps,$lang) : {}}]

  set l2 {}
  foreach {sort} $cl {
    lappend l2 [list [lrange $sort 0 1] [string map $map [lindex $sort 0]]]
  }
  set res {}
  foreach e [lsort -dictionary -index 1 $l2] {lappend res [lindex $e 0]}

  set hl {}
  set sl {}
  foreach xl $res {
    lappend sl [lindex $xl 0]
    lappend hl [lindex $xl 1]
  }
  return [list $sl $hl]
}

foreach tm $xth(me,themes,list) {
  foreach itm {point line area} {
    set lists [xth_me_sortxlist $xth(me,themes,$tm,$itm,xlist)]
    set xth(me,themes,$tm,$itm,showlist) [lindex $lists 0]
    set xth(me,themes,$tm,$itm,hidelist) [lindex $lists 1]
    unset xth(me,themes,$tm,$itm,xlist)
  }
}

therion-5.4.1/xtherion/lang/000077500000000000000000000000001307545355600157675ustar00rootroot00000000000000therion-5.4.1/xtherion/lang/Makefile000066400000000000000000000000711307545355600174250ustar00rootroot00000000000000all:
	perl process.pl
  
update:
	perl process.pl update
therion-5.4.1/xtherion/lang/process.pl000077500000000000000000000154331307545355600200130ustar00rootroot00000000000000#!/usr/bin/perl
## usage: 
## ./process.pl - generate .tcl sources from xtexts.txt
## ./process.pl update - find new strings to translate and load all 
##   xtexts_xy.txt into xtexts.txt
## ./process.pl export[-empty] xy - export xtexts_xy.txt with texts
##   for translation. If export-empty is used, only untranslated strings
##   are exported

@trans_sources = (
  "../app.tcl",
  "../bac.tcl",
  "../cp.tcl",
  "../cp_procs.tcl",
  "../ctrl.tcl",
  "../me.tcl",
  "../me_cmds.tcl",
  "../me_imgs.tcl",
  "../me_cmds2.tcl",
  "../te.tcl",
  "../help.tcl",
  "../init.tcl",
  "../tools.tcl",
  "../global.tcl",
);

sub read_lang_file {
  # nacita subor do hashu a vrati na neho referenciu
  my $fn = shift;
  my $lcode = shift;
  my $src = shift;
  open(INP,"$fn") || die("error: can't open $fn for input\n");
  if (defined($lcode)) {
    $lcode = check_language($lcode);
  } else {
    $lcode = "";
  }
  my %res;
  if (defined($src)) {
    %res = %{$src};
  } else {
    %res = ();
  }
  my $itm = "";
  my $lnum = 0;
  my $cmnt = "";
  while ($ln = ) {
    $lnum++;
#    print "LINE: $ln";
    if ($ln =~ /^\s*(\#.*)/) {
      $cmnt .= "$1\n";
#      print "COMMENT\n";
      next;
    } elsif ($ln =~ /^\s*therion\:\s*(.*\S)\s*$/) {
      $itm = $1;
      $res{$itm}{therion} = $lnum;
      $res{$itm}{"therion-cmnt"} = $cmnt;
      $cmnt = "";
#      print "THERION: $itm\n";
    } elsif (($ln =~ /^\s*(\w+)\:\s*(.*\S)\s*$/) && (length($itm) > 0)) {
      ($lng, $trn) = ($1, $2);
      $clng = check_language($lng);
      if (length($lng) == 0) {
        warn("warning: invalid language \"$lng\" ($fn:$lnum)\n");
      }
      if ((length($lcode) == 0) || (substr($clng,0,2) eq $lcode)) {
        $res{$itm}{$clng} = $trn;
        $res{$itm}{"$clng-cmnt"} = $cmnt;
      }
      $cmnt = "";
#      print "LANGUAGE: $clng => $trn\n";
    } elsif ($ln !~ /^\s*$/) {
      warn("warning: error parsing $fn:$lnum\n");
    }
  }
  close(INP);
  return \%res;
}

sub check_language {
  my $lng = shift;
  if ($lng =~ /^([A-Za-z]{2})([\_\-]{1}([A-Za-z]{2})){0,1}$/) {
    if (length($3) > 0) {
      return (lc($1) . "_" . uc($3))
    } else {
      return (lc($1))
    }
  } else {
    return "";
  }
}

sub write_lang_file {
  my $fn = shift;
  my $href = shift;
  my %hr = %{$href};

  open(OUT,">$fn") || die("error: can't open $fn for output\n");
  
  my %sh = ();
  for $key (keys %hr) {
#    print "SORTING: $key -> $hr{$key}{therion}\n";
    $sh{$hr{$key}{therion}} = $key;
  }
  
  @nkeys = sort {$a <=> $b} (keys %sh);
  for $key (@nkeys) {
    print OUT $hr{$sh{$key}}{"therion-cmnt"};
    print OUT "therion: $sh{$key}\n";
    for $lkey (sort keys %{$hr{$sh{$key}}}) {
      if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
        print OUT $hr{$sh{$key}}{"$lkey-cmnt"};
        print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n";
      }
    }
    print OUT "\n";
  }
  
  close(OUT);
  
}

sub str2esc {
  $str = shift;
  $ret = "";
  for($i = 0; $i < length($str); $i++) {
    $co = ord(substr($str,$i,1));
    if (($co > 31) && ($co < 128)) {
      $ret .= chr($co);
    } else {
      $ret .= sprintf("\\%o", $co);
    }
  }
  return $ret;
}


sub write_sources {
  my $href = shift;
  my %hr = %{$href};
  open(OUT,">../msgxth.tcl") || die("error: can't open ../msgxth.tcl for output\n");
  print OUT "# file generated automatically - do not modify!\n\n";

  my %sh = ();
  
  for $key (keys %hr) {
    $sh{$hr{$key}{therion}} = $key;
  }  
  my @nkeys = sort {$a <=> $b} (keys %sh);
  
  for $key (@nkeys) {
    for $lkey (sort keys %{$hr{$sh{$key}}}) {
      if (($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
        print OUT "  ::msgcat::mcset $lkey \"$sh{$key}\" [encoding convertfrom utf-8 \"". str2esc($hr{$sh{$key}}{$lkey}) ."\"]\n";
      }
    }
    print OUT "\n";
  }
  close(OUT);
  
}


sub update_todo_list {
  my $href = shift;
  my %hr = %{$href};
  
  # prejde vsetky kluce a priradi im vysoke cisla
  my $maxnm = -1;
  foreach $key (keys %hr) {
    if ($hr{$key}{therion} > $maxnm) {
      $maxnm = $hr{$key}{therion};
    }
  }
  $maxnm = -1 - $maxnm;
  
  foreach $key (keys %hr) {
    $hr{$key}{therion} += $maxnm;
  }
  
  my $i = 0;
  foreach $fn (@trans_sources) {
    print "updating definitions from $fn ...";
    open(INP,"$fn") || die("error: can't open $fn for input\n");
    my @lines = ;
    close(INP);
    my $ln = join('',@lines);
    $ln =~ s/\[mc\ /\n\[mc\ /sg;
    @lines = split(/\n/,$ln);
    foreach $ln (@lines) {
      $i++;
      if ($ln =~ /^\[mc\ \"(.*?)\"/) {
        $hr{$1}{therion} = $i;
      }
    }
    print " done\n";
  }
  
  #vypise warningy
  foreach $key (keys %hr) {
    if ($hr{$key}{therion} < 0) {
      warn("warning: expression \"$key\" doesn't need to be translated\n");
    }
  }
  
  return \%hr;
}


sub backup_file {
  my $fn = shift;
  
  open(INP,"$fn") || die("error: can't open $fn for input\n");
  my @lines = ;
  close(INP);

  open(OUT,">$fn~") || die("error: can't open $fn~ for output\n");
  print OUT @lines;
  close(OUT);

}


sub export_language {
  (my $fn, my $lng, my $href, my $onlyempty) = (shift, shift, shift, shift);
  my %hr = %{$href};
  open(OUT,">$fn") || die("error: can't open $fn for output\n");

  my %sh = ();
  
  for $key (keys %hr) {
    $sh{$hr{$key}{therion}} = $key;
  }
  
  my @nkeys = sort {$a <=> $b} (keys %sh);
  for $key (@nkeys) {
    my $toexp = 1;
    if ($onlyempty) {
      for $lkey (sort keys %{$hr{$sh{$key}}}) {
        if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
          $toexp = 0;
        }
      }
    }
    if ($toexp) {
      print OUT $hr{$sh{$key}}{"therion-cmnt"};
      print OUT "therion: $sh{$key}\n";
      my $posc = "$lng:\n";
      for $lkey (sort keys %{$hr{$sh{$key}}}) {
        if ((substr($lkey,0,2) eq $lng) && ($lkey !~ /^the/) && ($lkey !~ /\-cmnt/)) {
          print OUT $hr{$sh{$key}}{"$lkey-cmnt"};
          print OUT "$lkey: ". $hr{$sh{$key}}{$lkey} ."\n";
          $posc = "";
        }
      }
      print OUT $posc;
      print OUT "\n";
    }
  }

  close(OUT);
  
}


$rf = read_lang_file("xtexts.txt");
# ak update
if ($ARGV[0] =~ /^update$/i) {
  opendir(CDR,".");
  @updfiles = grep /^xtexts\_[a-z]{2}\.txt$/, readdir(CDR);
  foreach $ufn (@updfiles) {
    my $lcode = substr($ufn,7,2);
    print "updating $lcode translations ...";
    $rf = read_lang_file($ufn,$lcode,$rf);
    backup_file("$ufn");
    unlink($ufn) || $quietdel || warn("warning: can't delete $ufn\n");
    print " done\n";
  }
  closedir(CDR);
  backup_file("xtexts.txt");
  $rf = update_todo_list($rf);
  write_lang_file("xtexts.txt",$rf);
  write_sources($rf);
} elsif ($ARGV[0] =~ /^export(\-empty)?$/i) {
  my $onlyempty = $1;
  my $lng = check_language($ARGV[1]);
  if (length($lng) != 2) {
    die("error: invalid language \"$ARGV[1]\"\n");
  }
  export_language("xtexts_$lng.txt",$lng,$rf,$onlyempty);
} else {
  write_sources($rf);
}
therion-5.4.1/xtherion/lang/xtexts.txt000066400000000000000000005260111307545355600200740ustar00rootroot00000000000000therion: altitude
pt: altitude
ru: альтитуда

therion: place
pt: local
ru: местопложение

therion: scale
pt: tamanho
ru: масштаб

therion: line arrow
pt: seta
ru: стрелка
sk: šípka

therion: Drag to resize control panel.
bg: Плъзнете, за да промените размера на контролния панел
cz: Změnit šířku panelu.
de: Ziehen um Größe zu ändern.
el: Drag για προσαρμογή μεγέθους πίνακα ελέγχου.
en: Drag to resize control panel.
es: Arrastar para cambiar el tamaño del panel de control.
it: Trascina per ridimensionare il pannello dei controlli
pt: Arraste para redimensionar o painel de controle.
ru: Перетаскивайте для изменения размера панели
sk: Rozšíriť alebo zúžiť okno kontrolných panelov.
sq: levize per te rritur dritaren kontrolluese
zh_CN: 拖动调整控制面板大小

therion: File
bg: Файл
cz: Soubor
de: Datei
el: Αρχείο
en: File
es: Archivo
it: File
pt: Arquivo
ru: Файл
sk: Súbor
sq: fajlli
zh_CN: 文件

therion: Maximize
bg: Увеличаване
cz: Maximalizovat
de: Maximieren
el: Μεγιστοποίηση
en: Maximize
en_GB: Maximise
es: Maximizar
it: Massimizza
pt: Maximizar
ru: Развернуть
sk: Maximalizovať
sq: rrite ne maksimum
zh_CN: 最大化

therion: Normalize
bg: Нормализиране
cz: Normální velikost
de: Normalgröße
el: Κανονικό μέγεθος
en: Normalize
en_GB: Normalise
es: Normalizar
it: Normalizza
pt: Normalizar
ru: Свернуть
sk: Normálna veľkosť
sq: normalizo
zh_CN: 正常化

therion: Switch panels
bg: Превключи панела
cz: Přehoď panely
de: Panel verschieben
el: Αλλαγή παράθυρου
en: Switch panels
es: Alternar paneles
it: Cambia posto al pannello
pt: Trocar de painel
ru: Переключить панели
sk: Prehoď panely
sq: nderro panelat
zh_CN: 切换面板

therion: Toggle toolbar
bg: Превключи панела с инструменти
cz: Vypnout/zapnout lištu nástrojů
de: Werkzeugleiste anzeigen/verbergen
el: Εμφάνιση / μη-εμφάνιση γραμμής εργαλείων
it: Mostra/Nascondi la barra strumenti
pt: Barra de ferramentas
ru: Переключить панель инструментов
sk: Zapnúť/vypnúť panel
sq: dritarja aktivizuese
zh_CN: 工具栏开关

therion: KBD encoding
bg: Кодировка на клавиатурата
cz: Kódování klávesnice
de: Zeichensatz
el: Κωδικοποίηση πληκτρολογίου
en: KBD encoding
es: Codificación teclado
it: Encoding della tastiera
pt: Codificação de caracteres
ru: Кодировка клавиатуры
sk: Kódovanie klávesnice
sq: KBD-kodimi
zh_CN: 键盘编码

therion: Window
bg: Прозорец
cz: Okno
de: Fenster
el: Παράθυρο
en: Window
es: Ventana
it: Finestra
pt: Janela
ru: Окно
sk: Okno
sq: dritarja
zh_CN: 窗口

therion: Quit
bg: Изход
cz: Konec
de: Beenden
el: Έξοδος
en: Quit
es: Salir
it: Esci
pt: Encerrar
ru: Выход
sk: Ukončiť
sq: mbylle
zh_CN: 关闭

therion: Help
bg: Помощ
cz: Nápověda
de: Hilfe
el: Βοήθεια
en: Help
es: Ayuda
it: Aiuto
pt: Ajuda
ru: Помощь
sk: Pomoc
sq: ndihma
zh_CN: 帮助

therion: BAC calculator
bg: Алкохолен калкулатор
cz: Alkohol tester
de: Blutalkoholrechner
el: Αλκοτέστ
en: BAC calculator
es: Borrachímetro
it: Calcolatore BAC
pt: Calculadora TAS
ru: Калькулятор алкоголя
sk: Alkohol tester
sq: llogaritesi I alkoolit
zh_CN: 血液中酒精浓度计算器

therion: Biometric data
bg: Биометрични данни
cz: Biometrické údaje
de: Persönliche Angaben
el: Βιομετρικά δεδομένα
en: Biometric data
es: Datos biométricos
it: Dati biometrici
pt: Informações biométricas
ru: Биометрические данные
sk: Biometrické údaje
sq: shenimet biometrike
zh_CN: 生物识别数据

therion: age
bg: Възраст
cz: věk
de: Alter
el: ηλικία
en: age
es: edad
it: età
pt: idade
ru: Возраст
sk: vek
sq: mosha
zh_CN: 年龄

therion: years
bg: Години
cz: let
de: Jahre
el: έτη
en: years
es: años
it: anni
pt: anos
ru: лет
sk: rokov
sq: vitet
zh_CN: 年

therion: gender
bg: Пол
cz: pohlaví
de: Geschlecht
el: φύλο
en: gender
es: sexo
it: sesso
pt: gênero
ru: Пол
sk: pohlavie
sq: gjinia
zh_CN: 性别

therion: male
bg: Мъж
cz: muž
de: männlich
el: αρσενικό
en: male
es: hombre
it: maschio
pt: masculino
ru: мужчина
sk: muž
sq: mashkull
zh_CN: 男性

therion: female
bg: Жена
cz: žena
de: weiblich
el: θυλικό
en: female
es: mujer
it: femmina
pt: feminino
ru: женщина
sk: žena
sq: femer
zh_CN: 女性

therion: height
bg: Ръст
cz: výška
de: Größe
el: ύψος
en: height
es: altura
it: altezza
pt: altura
ru: Рост
sk: výška
sq: gjatesia
zh_CN: 身高

therion: weight
bg: Тегло
cz: váha
de: Gewicht
el: βάρος
en: weight
es: peso
it: peso
pt: peso
ru: Вес
sk: váha
sq: pesha
zh_CN: 体重

therion: Consumption data
bg: Какво сте пили
cz: Údaje o spotřebě
de: Alkoholkonsum
el: Δεδομένα κατανάλωσης
en: Consumption data
es: Datos de ingestión
it: Bevande assunte
pt: Informações de consumo
ru: Характеристика принятого
sk: Údaje o spotrebe
sq: shenimet e hargjimeve
zh_CN: 消耗数据

therion: volume
bg: Количество
cz: objem
de: Menge
el: όγκος
en: volume
es: volumen
it: volume
pt: volume
ru: Объем
sk: objem
sq: volumi
zh_CN: 容量

therion: alcohol level
bg: Концентрация
cz: koncentrace alkoholu
de: Alkoholgehalt
el: περιεκτικότητα σε αλκοόλ
en: alcohol level
es: contenido alcohólico
it: tasso alcolico
pt: nível de álcool
ru: Крепость
sk: koncentrácia
sq: sasia e alkoolit
zh_CN: 酒精浓度

therion: time elapsed
bg: Минало време
cz: uplynulý čas
de: vergangene Zeit
el: ώρα που πέρασε
en: time elapsed
es: tiempo transcurrido
it: tempo trascorso
pt: tempo transcorrido
ru: Прошло времени
sk: uplynutý čas
sq: koha e duhur
zh_CN: 用时

therion: Calculate
bg: Изчисли
cz: Vypočítat
de: Berechne
el: υπολογισμός
en: Calculate
es: Calcular
it: Calcola
pt: Calcular
ru: Посчитать
sk: Vypočítať
sq: llogarit
zh_CN: 计算

therion: BAC
bg: Наличие на алкохол в кръвта
cz: Hladina alkoholu v krvi
de: Blutalkoholpegel
el: Περιεκτικότητα αίματος σε αλκοόλ
en: BAC
es: tasa alcoholemia
it: BAC
pt: TAS
ru: Концентрация алкоголя в крови
sk: Hladina alkoholu
sq: perqindja e alkoolit ne gjak-BAC
zh_CN: 血液中酒精浓度

therion: ETA
bg: Време до изтрезняване
cz: Čas do vystřízlivění
el: Αναμενόμενη ώρα άφιξης
en: ETA
es: TBE (Tiempo Bajada Estimado)
it: ETA
pt: TEC
ru: Время до отрезвления
sk: Čas do vytriezvenia
sq: ETA
zh_CN: 预计清醒时间

therion: hours
bg: часове
cz: hodin
de: Stunden
el: ώρες
en: hours
es: horas
it: ore
pt: horas
ru: часов
sk: hodín
sq: oret
zh_CN: 小时

therion: MRR
bg: MRR
cz: Rychlost odbourávání
el: MRR
en: MRR
es: tasa de descenso
it: MRR
ru: MRR
sk: Rýchlosť odburávania
sq: MRR
zh_CN: 降解酒精速度

therion: Compiler
bg: Компилатор
cz: Kompilátor
de: Compiler
el: Συντάκτης
en: Compiler
es: Compilador
it: Compilatore
pt: Compilador
ru: Компилятор
sk: Kompilátor
sq: kompilatori
zh_CN: 编译程序

therion: Settings
bg: Настройки
cz: Nastavení
de: Einstellungen
el: Ρυθμίσεις
en: Settings
es: Ajustes
it: Impostazioni
pt: Configurações
ru: Настройки
sk: Nastavenia
sq: setingu
zh_CN: 设置

therion: Survey structure
bg: Структура на картировката
cz: Struktura měření (survey)
de: Messdatenstruktur
el: Δομή χαρτογράφησης
en: Survey structure
es: Estructura de la poligonal
it: Struttura rilievi
pt: Estrutura da topografia
ru: Структура съемки
sk: Štruktúra dát
sq: struktura e matjeve
zh_CN: 测绘数据结构

therion: Survey info
bg: Информация
cz: Info o měření (survey)
de: Infos zur Vermessung
el: Πληροφορίες χαρτογράφησης
en: Survey info
es: Información de la poligonal
it: Informazioni rilievi
pt: Informações da topografia
ru: Информация
sk: Informácie
sq: informatat e matjeve
zh_CN: 测绘信息

therion: Map structure
bg: Структура на картата
cz: Mapová struktura
de: Planstruktur
el: Δομή αποτύπωσης
en: Map structure
es: Estructura del mapa
it: Struttura mappe
pt: Estrutura dos mapas
ru: Структура карты
sk: Mapová štruktúra
sq: struktura e hartes
zh_CN: 地图数据结构

therion: Preview
bg: Предварителен изглед
cz: Náhled
de: Vorschau
el: Προεπισκόπηση
it: Anteprima
pt: Visualização
ru: Предпросмотр
sk: Náhľad
sq: parashiqimi
zh_CN: 预览

therion: Working directory
bg: Работна директория
cz: Pracovní adresář
de: Arbeitsverzeichnis
el: Φάκελος εργασίας
en: Working directory
es: Directorio actual
it: Cartella di lavoro
pt: Diretório de trabalho
ru: Рабочий каталог
sk: Pracovný adresár
sq: direktorati i punes
zh_CN: 工作目录

therion: Working directory path.
bg: Път към работната директория
cz: Cesta k pracovnímu adresáři.
de: Pfad zum Arbeitsverzeichnis.
el: Φάκελος εργασίας
en: Shows working directory path.
es: Muestra el directorio actual.
it: Path della cartella di lavoro
pt: Caminho completo do diretório de trabalho.
ru: Путь к рабочему каталогу.
sk: Cesta k pracovnému adresáru.
sq: tregon shtegun e direktoratit punues
zh_CN: 工作目录路径

therion: Configuration file
bg: Конфигурационен файл
cz: Konfigurační soubor
de: Konfigurationsdatei
el: Αρχείο σχηματισμού (config)
en: Configuration file
es: Archivo configuración
it: File di configurazione
pt: Arquivo de configuração
ru: Конфигурационный файл
sk: Konfiguračný súbor
sq: arkivi I konfiguracionit
zh_CN: 配置文件

therion: Configuration file name.
bg: Име на конфигурационният файл
cz: Jméno konfiguračního souboru.
de: Name der Konfigurationsdatei.
el: Εμφανίζει το όνομα του αρχείου σχηματισμού (config)
en: Shows configuration file name.
es: Muestra el nombre del archivo de configuración.
it: Nome del file di configurazione
pt: Nome do arquivo de configuração.
ru: Имя конфигурационного файла.
sk: Meno konfiguračného súboru.
sq: tregon emrin e arkivit te konfiguracionit
zh_CN: 配置文件名

therion: Command line options
bg: Опции на командният ред
cz: Argumenty programu
de: Kommandozeilenoptionen
el: Επιλογές γραμμής εντολής
en: Command line options
es: Opciones de línea de comandos
it: Opzioni del comando
pt: Opções linha de comando
ru: Опции командной строки
sk: Argumenty programu
sq: opcionet e vijes komanduese
zh_CN: 命令行选项

therion: Therion command line options.
bg: Опции на командният ред на Терион
cz: Argumenty therionu pro příkazovou řádku.
de: Therion Kommandozeilenoptionen.
el: Εδώ μπορείτε να περάσετε τις επιλογές γραμμής εντολής στο Therion
en: Here you can pass command line options to Therion.
es: Aquí se pueden pasar a therion opciones de línea de comandos
it: Opzioni del comando therion
pt: Opções de linha de comando para chamar o Therion.
ru: Опции командной строки Therion.
sk: Argumenty programu v príkazovom riadku.
sq: ketu ju mund te bartni vijen komanduese te arkivit tek Therion-i
zh_CN: 泰里翁命令行选项

therion: Run therion.
bg: Пускане на therion
cz: Spustí therion.
de: Therion ausführen.
el: Εκτέλεση του Therion
en: Run therion.
es: Ejecutar therion.
it: Esegui therion
pt: Rodar o therion.
ru: Запуск therion.
sk: Spustiť therion.
sq: aktivizo Therion-in
zh_CN: 运行泰里翁

therion: Xpdf
bg: Xpdf
cz: Xpdf
de: Xpdf
it: Xpdf
pt: Xpdf
ru: Xpdf
sk: Xpdf
sq: Xpdf
zh_CN: Xpdf

therion: Acrobat Reader
bg: Acrobat Reader
cz: Acrobat Reader
de: Acrobat Reader
it: Acrobat Reader
pt: Acrobat Reader
ru: Acrobat Reader
sk: Acrobat Reader
sq: lexuesi I programit-Akrobat
zh_CN: Acrobat Reader

therion: PDF file path.
bg: Път към PDF файл
cz: Cesta k PDF souboru
de: Pfad zur PDF-Datei.
el: υποφάκελος του .pdf
it: File PDF
pt: Caminho completo para arquivo PDF gerado.
ru: PDF-файл для просмотра
sk: Cesta k PDF súboru.
sq: arkivi-PDF
zh_CN: PDF文件路径

therion: Survey informations.
bg: Информация за картировката
cz: Informace o jednotlivých měřeních (survey).
de: Infos zur Vermessung.
el: Στοιχεία χαρτογράφησης
en: Survey information.
es: Estadísticas de la poligonal.
it: Informazioni del rilievo
pt: Informações sobre o mapeamento.
ru: Информация о съемке.
sk: Informácie o častiach.
sq: informatat e matjeve
zh_CN: 测绘信息

therion: User interface is not active. To activate it, open existing file or create new one.
bg: Потребителският интерфейс е неактивен. За да го активирате отворете съществуващ файл или създайте нов.
cz: Uživatelské rozhraní není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Fenster nicht aktiv. Um es zu benutzen, öffne eine existierende Datei oder lege eine neue an.
el: Διασύνδεση χρήστη ανενεργή. Για να ενεργοποιηθεί, ανοίξτε υπάρχον αρχείο ή δημιουργήστε νέο.
en: User interface is not active. To activate it, open existing file or create new one.
es: El interfaz está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'interfaccia utente non è attiva. Per attivarla apri un file o creane uno
pt: A interface do usuário não está ativa. Para ativá-la, abra um arquivo existente ou crie um novo arquivo.
ru: Интерфейс неактивен. Для активации откройте существующий файл или создайте новый.
sk: XTherion momentálne nie je aktívny. Otvorte existujúci konfiguračný súbor alebo vytvorte nový.
sq: interfejsi I perdoruesit nuk eshte aktiv. Ta aktivizosh, hape arkivin egzistues apo hape nje te ri.
zh_CN: 用户界面没有启动,打开现有文件或创建新文件启动它。

therion: loading compiler...
bg: Зареждане на компилатора...
cz: nahrávám kompilátor...
de: Lade Compiler...
el: φόρτιση συντάκτη...
en: loading compiler...
es: compilador...
it: compilatore ...
pt: carregando o compilador...
ru: загрузка компилятора...
sk: kompilátor...
sq: duke lexuar kompiluesin…
zh_CN: 程序编译载入中…

therion: Running therion ...
bg: Стартиране на therion ...
cz: Probíhá kompilace ...
de: Therion ausführen ...
el: Εκτελείται το Therion
en: Running therion ...
es: Ejecutando therion ...
it: esecuzione therion ...
pt: Rodando o therion...
ru: Запуск therion ...
sk: Prebieha výpočet...
sq: duke ve ne pune therion-in…
zh_CN: 泰里翁运行中…

therion: RUNNING
bg: Обработка
cz: PRACUJI
de: ARBEITE
el: ΕΚΤΕΛΕΣΗ
en: RUNNING
es: EJECUTANDO
it: ESECUZIONE
pt: PROCESSANDO
ru: ОБРАБОТКА
sk: VÝPOČET
sq: ne punim e siper
zh_CN: 运行中

therion: ERROR
bg: Грешка
cz: CHYBA
de: FEHLER
el: ΣΦΑΛΜΑ
en: ERROR
es: ERROR
it: ERRORE
pt: ERRO
ru: ОШИБКА
sk: CHYBA
sq: gabim
zh_CN: 出错

therion: WARNING
bg: Внимание!
cz: VAROVÁNÍ
de: WARNUNG
pt: AVISO
ru: ПРЕДУПРЕЖДЕНИЕ
sk: VAROVANIE
zh_CN: 警告

therion: Reading therion log file ...
bg: Четене на лог-файла на therion ...
cz: Načítám LOG soubor therionu ...
de: Lese Therion Logdatei ...
el: Ανάγνωση του αρχείου log therion
en: Reading therion log file ...
es: Leyendo archivo log ...
it: Lettura file di log di therion ...
pt: Lendo o arquivo log do therion...
ru: Чтение лог-файла therion...
sk: Načitávam LOG súbor.
sq: duke lexuar arkivin hyres te Therion-it
zh_CN: 泰里翁记录文件读取中 ...

therion: \nerror opening therion.log file\n
bg: \nгрешка при отварянето на файла therion.log\n
cz: \nchyba při otevírání souboru therion.log\n
de: \nFehler beim Öffnen von therion.log\n
el: \nσφάλμα κατα το άνοιγμα του αρχείου therion.log\n
en: \nerror opening therion.log file\n
es: \nerror abriendo el archivo therion.log\n
it: \nerrore in apertura del file therion.log
pt: \nerro ao abrir arquivo therion.log\n
ru: \nошибка открытия файла therion.log\n
sk: \nchyba pri čítaní súboru therion.log\n
sq: gabim gjate hapjes se Therion-it.arkivin hyres/n
zh_CN: \n打开泰里翁文件出错\n

therion: Show or hide this control panel
bg: Показване/скриване на контролният панел
cz: Zobrazit/skrýt ovládací panel
de: Dieses Panel anzeigen oder verbergen
el: Κάντε κλικ για εμφάνιση ή μη-εμφάνιση του πίνακα ελέγχου
en: Click to show or hide this control panel.
es: Clicar para mostrar u ocultar este panel de control
it: Visualizza o nascondi questo pannello
pt: Alternar visualização deste painel de controle
ru: Показать или спрятать панель
sk: Stlačte ak chcete zobraziť alebo skryť tento panel
sq: kliko te hapesh ose te mbyllesh kete panel te kontrollit
zh_CN: 显示或隐藏此控制面板

therion: loading map editor ...
bg: Зареждане на редактора на карти ...
cz: nahrávám mapový editor...
de: Lade Karteneditor ...
el: φόρτιση του επεξεργαστή αποτύπωσης...
en: loading map editor ...
es: editor de mapas...
it: editor di mappa ...
pt: carregando o editor de mapas...
ru: загрузка редактора карт...
sk: Mapový editor
sq: duke lexuar permiresuesin e hartave…
zh_CN: 地图编辑器载入中…

therion: Undo %s
bg: Отмяна
cz: Zpět - %s
de: Rückgängig %s
el: Αναίρεση %s
en: Undo %s
es: Deshacer %s
it: Indietro %s
pt: Desfazer %s
ru: Отменить %s
sk: Späť - %s
sq: prishe %s
zh_CN: 取消%s

therion: Redo %s
bg: Възстановяване
cz: Znovu - %s
de: Wiederholen %s
el: Επανάληψη %s
en: Redo %s
es: Rehacer %s
it: Rifai %s
pt: Refazer %s
ru: Вернуть %s
sk: Opakovať- %s
sq: beje perseri %s
zh_CN: 恢复 %s

therion: %s \[%s\] -- multiple encoding commands in file
bg: %s \[%s\] -- няколко команди encoding във файла
cz: %s \[%s\] -- vícenásobný výskyt příkazu encoding v jednom souboru
el: %s \[%s\] -- πολλαπλές εντολές κωδικοποίησης στο αρχείο
en: %s \[%s\] -- multiple encoding commands in file
es: %s \[%s\] -- múltiples comandos de codificación en el archivo
it: %s \[%s\] -- encoding ripetuto nel file di comandi
pt: %s \[%s\] -- mais de um elemento de codificação no mesmo arquivo
ru: %s \[%s\] -- несколько команд encoding в файле
sk: %s \[%s\] -- viac encoding príkazov v jednom súbore
sq: %s \[%s\] –shumezo komandat te deshifrimit ne arkiv
zh_CN: %s \[%s\] --文件中多重编码命令

therion: %s \[%s\] -- unknown encoding -- %s
bg: %s \[%s\] -- неизвестна кодировка -- %s
cz: %s \[%s\] -- neznámé kódování znaků -- %s
el: %s \[%s\] -- άγνωστη κωδικοποίηση -- %s
en: %s \[%s\] -- unknown encoding -- %s
es: %s \[%s\] -- codificación desconocida -- %s
it: %s \[%s\] -- encoding non conosciuto -- %s
pt: %s \[%s\] -- codificação desconhecida -- %s
ru: %s \[%s\] -- неизвестная кодировка -- %s
sk: %s \[%s\] -- neznáme kódovanie znakov -- %s
sq: %s \[%s\] – deshifrim I panjohur -- %s
zh_CN: %s \[%s\] – 未知编码 -- %s

therion: adjusting area
bg: регулиране на областта
cz: přizpůsobení pracovní plochy
de: Fläche anpassen
el: προσαρμογή επιφάνειας
en: adjusting area
es: ajustando área
it: aggiustamento area
pt: ajustando área
ru: регулирование области
sk: prispôsobenie pracovnej plochy
zh_CN: 自定义工作区

therion: zooming
bg: мащабиране
cz: zoomování
de: Zoomen
el: μεγέθυνση
en: zooming
es: zooming
it: zooming
pt: dando zoom
ru: масштабирование
sk: zoomovanie
sq: zmadhimi
zh_CN: 缩放

therion: Zoom %d %%
bg: мащаб %d %%
cz: Zoom %d %%
de: Zoom %d %%
el: Μεγέθυνση %d %%
en: Zoom %d %%
es: Zoom %d %%
it: Zomm %d %%
pt: Zoom %d %%
ru: Масштаб %d %%
sk: Zoom %d %%
sq: zmadho %d %%
zh_CN: 缩放 %d %%

therion: Zooming objects ...
bg: Мащабиране на обекти ...
cz: Zoomování objektů ...
de: Zoome Objekte ...
el: Μεγέθυνση αντικειμένων...
en: Zooming objects ...
es: Zoom sobre objetos ...
it: Zoom degli oggetti ...
pt: Dando zoom nos objetos...
ru: Масштабирование объектов...
sk: Zoomovanie objektov ...
sq: objektet e zmadhimit…
zh_CN: 目标缩放中...

therion: dragging image
bg: Плъзгане на изображение
cz: přesouvání obrázku
de: Bild verschieben
el: μετακίνηση εικόνας
en: dragging image
es: arrastrando imagen
it: trascinamento immagine
pt: arrastando imagem
ru: перетаскивание изображения
sk: Presúvanie obrázku
sq: imazhi per tu vizatuar
zh_CN: 拖动图像

therion: Map Editor
bg: Редактор на карти
cz: Mapový editor
de: Karteneditor
el: Επεξεργαστής αποτύπωσης
en: Map Editor
es: Editor de mapas
it: Editor di mappa
pt: Editor de Mapas
ru: Редактор карт
sk: Mapový Editor
sq: permiresuesi I hartave
zh_CN: 地图编辑器

therion: File commands
bg: Команди във файл
cz: Příkazy
de: Dateibefehle
el: Αντικείμενα
en: Objects
es: Objetos
it: Oggetti
pt: Elementos do arquivo
ru: Команды в файле
sk: Príkazy v súbore
sq: objektet
zh_CN: 文件命令

therion: Search & Select
bg: Търсене и избиране
cz: Najít & Vybrat
de: Suchen & auswählen
el: Αναζήτηση και επιλογή
en: Search & Select
es: Buscar y Seleccionar
it: Cerca e seleziona
pt: Buscar & Selecionar
ru: Поиск и Выделение
sk: Hľadaj a Vyber
sq: kerko dhe zgjidh
zh_CN: 查找和选择

therion: Command preview
bg: Преглед на команда
cz: Náhled příkazu
de: Kommandovorschau
el: Προεπισκόπηση εντολής
en: Command preview
es: Ver comandos
it: Anteprima comando
pt: Elemento
ru: Просмотр команды
sk: Náhľad príkazu
sq: komanda e parashiqimit
zh_CN: 命令预览

therion: Point control
bg: Точка
cz: Bod
de: Punkte bearbeiten
el: Σημεία
en: Points
es: Puntos
it: Punti
pt: Ponto
ru: Точка
sk: Bod
sq: pikat
zh_CN: 点编辑

therion: Line control
bg: Линия
cz: Křivka
de: Linien bearbeiten
el: Γραμμές
en: Lines
es: Líneas
it: Linee
pt: Linha
ru: Линия
sk: Krivka
sq: rjeshtat
zh_CN: 线编辑

therion: Line point control
bg: Точка на линия
cz: Bod křivky
de: Linienpunkte bearbeiten
el: Σημεία γραμμών
en: Line points
es: Puntos de línea
it: Punti della linea
pt: Ponto de linha
ru: Точка линии
sk: Bod krivky
sq: pikat e rjeshtit
zh_CN: 点线编辑

therion: Area control
bg: Област
cz: Oblast
de: Flächen bearbeiten
el: Επιφάνειες
en: Areas
es: Areas
it: Aree
pt: Área
ru: Область
sk: Plocha
sq: fushat
zh_CN: 区编辑

therion: Scrap control
bg: Скрап
cz: Scrap
de: Skizze bearbeiten
el: Σκραπ
en: Scraps
es: Croquis
it: Scrap
pt: Trecho
ru: Скрап
sk: Scrap
sq: mbeturinat
zh_CN: 草图编辑

therion: Text editor
bg: Текстов редактор
cz: Textový editor
de: Texteditor
el: Επεξεργαστής κειμένου
en: Text editor
es: Editor de texto
it: Editor di testo
pt: Editor de texto
ru: Редактор
sk: Textový editor
sq: permirsuesi I tekstit
zh_CN: 文本编辑

therion: Drawing area
bg: Зона на чертане
cz: Kreslící plocha
de: Zeichenfläche
el: Επιφάνεια σχεδιασμού
en: Drawing area
es: Area de dibujo
it: Area di disegno
pt: Área de desenho
ru: Зона рисования
sk: Pracovná plocha
sq: fusha e vizatimit
zh_CN: 绘图工作区

therion: Background images
bg: Фоново изображение
cz: Podkladové obrázky
de: Hintergrundbilder
el: Εικόνες φόντου
en: Background images
es: Imágenes de fondo
it: Immagini di background
pt: Imagens de fundo
ru: Фоновые изображения
sk: Obrázky pozadia
sq: imazhet ne prapavije
zh_CN: 底图

therion: Current drawing area.
bg: Текуща зона на чертане
cz: Současná kreslící plocha.
de: Aktuelle Zeichenfläche
el: Ενεργή επιφάνεια σχεδιασμού
en: Current drawing area.
es: Area de dibujo actual.
it: Area di disegno attiva
pt: Área de desenho atual
ru: Текущая зона рисования.
sk: Súčasná pracovná plocha.
sq: fusha momentale e vizatimit
zh_CN: 当前绘图区

therion: X min.
bg: X min.
cz: X min.
el: Ελάχιστο Χ
en: X min.
es: X min
it: Minimo X
pt: X mín.
ru: X min.
sk: Minimum X.
sq: minimum X.
zh_CN: 最小 X.

therion: Y min.
bg: Y min.
cz: Y min.
el: Ελάχιστο Υ
en: Y min.
es: Y min
it: Minimo Y
pt: Y mín.
ru: Y min.
sk: Minimum Y.
sq: minimum Y.
zh_CN: 最小 Y.

therion: X max.
bg: X max.
cz: X max.
el: Μέγιστο Χ
en: X max.
es: X max
it: Massimo X
pt: X máx.
ru: X max.
sk: Maximum X.
sq: maksimum X.
zh_CN: 最大 X.

therion: Y max.
bg: Y max.
cz: Y max.
el: Μέγιστο Υ
en: Y max.
es: Y max
it: Massimo Y
pt: Y máx.
ru: Y max.
sk: Maximum Y.
sq: maksimum Y.
zh_CN: 最大 Y.

therion: Adjust
bg: Определи
cz: Přizpůsobit
de: Anpassen
el: Προσαρμογή
en: Adjust
es: Ajustar
it: Ridimensiona
pt: Aplicar
ru: Установить
sk: Prispôsob
sq: permireso
zh_CN: 调整

therion: Adjust drawing area to given limits.
bg: Определи зоната за чертане в зададените граници
cz: Přizpůsobí kreslící plochu daným limitům.
de: Zeichenfläche an Begrenzung anpassen.
el: Προσαρμογή επιφάνειας σχεδίου στα δεδομένα όρια
en: Adjust drawing area to given limits.
es: Ajustar el área de dibujo a los límites indicados.
it: Ridimensiona l'area di disegno ai limiti dati
pt: Ajustar área de desenho para os valores acima.
ru: Установить зону рисования в заданных границах.
sk: Prispôsobiť pracovnú plochu daným limitom.
sq: permireso fushen e vizatimit deri ne kufijt e dhene.
zh_CN: 调整绘图区至指定区域

therion: Auto adjust
bg: Автоматично определяне
cz: Auto přizpůs.
de: Automatisch anpassen
el: Αυτόματη προσαρμογή
en: Auto adjust
es: Autoajustar
it: Auto-ridimensiona
pt: Ajuste automático
ru: Авто
sk: Automaticky
sq: permiresimi automatik
zh_CN: 自动调整

therion: Adjust drawing area to automatically calculated limits.
bg: Определи автоматично зоната за чертане
cz: Automaticky přizpůsobí kreslící plochu všem objektům.
de: Zeichenfläche an berechnete Begrenzung anpassen.
el: Προσαρμογή επιφάνειας σχεδίου στα όρια που αυτομάτως ορίστηκαν
en: Adjust drawing area to automatically calculated limits.
es: Ajustar área de dibujo automáticamente.
it: Ridimensiona l'area di disegno ai limiti calcolati
pt: Ajustar área de desenho para valores calculados automaticamente.
ru: Автоматически установить зону рисования.
sk: Automaticky prispôsobiť pracovnú plochu všetkým objektom.
sq: permireso fushen e vizatimit ne kufirin e llogaritur automatikisht.
zh_CN: 调整自动计算绘图区

therion: zoom
bg: мащаб
cz: zoom
de: Zoom
el: μεγέθυνση
en: zoom
es: zoom
it: zoom
pt: zoom
ru: масштаб
sk: zoom
sq: zmadho
zh_CN: 缩放

therion: Zoom drawing area.
bg: Мащабиране на зоната за чертане
cz: Zoom kreslící plochy.
de: Zeichenfläche zoomen.
el: Έλεγχος μεγέθυνσης. Κάντε κλικ στον ορθογώνιο για να δείτε το μενού.
en: Zoom control. Click on rectangle to see menu.
es: Control del zoom. Clic en rectángulo para ver menú.
it: Zoom area di disegno
pt: Zoom na área de desenho.
ru: Масштабировать зону рисования.
sk: Zoom pracovnej plochy.
sq: kontrolli I zmadhimit. Kliko ne gjashtekendesh te shohesh menyn
zh_CN: 缩放绘图区

therion: loading commands module ...
bg: зареждане на модула за команди
cz: nahrávám příkazový modul ...
de: Lade Befehlsmodul ...
el: φόρτιση ενότητα εντολών...
en: loading commands module ...
es: comandos ...
it: modulo comandi ...
pt: carregando o módulo de elementos...
ru: загрузка модуля команд...
sk: príkazový modul...
sq: duke lexuar modulin komandues…
zh_CN: 命令模块载入中…

therion: Select command.
bg: Изберете команда
cz: Výběr příkazu.
de: Wähle Befehl.
el: Κάντε κλικ σε μια γραμμή για να συλλέξετε το αντικείμενο στον καμβά και το αντίθετο.
en: Click a line to get corresponding object selected on canvas or vice versa.
es: Al clicar una de las líneas, se resaltará en la topo el objeto correspondiente, y viceversa.
it: Seleziona comando.
pt: Selecione o elemento.
ru: Выберите команду.
sk: Vyber príkaz.
sq: kliko ne resht qe te fitosh objektin e deshiruar I zgjedhur ne pelhure ose anasjelltas.
zh_CN: 选择命令

therion: Action button.
bg: Действие
cz: Tlačítko Akce.
de: Aktionsknopf.
el: Πατώντας εδώ μπορείτε να εισάγετε αντικείμενα με το ποντίκι. Πατήστε την εντολή να δείτε το μενού.
en: After clicking this button, you can insert objects by mouse. Click on action to see menu.
es: Tras pulsar este botón, se pueden insertar con el ratón puntos, lineas, etc. Clic en acción para ver menú.
it: Bottone di azione.
pt: Botão da ação selecionada.
ru: Действия.
sk: Gombík - akcia.
sq: pasi te klikoni kete buton, ju mund te futni objekte me mi. kliko ne aksion qe te shohesh menyn.
zh_CN: 操作按钮

therion: Switch mouse mode to select objects.
bg: Преминете на мишка за да избирате обекти
cz: Přepnutí myši do výběrového módu.
de: Maus umschalten um Objekte auszuwählen.
el: Αφού πατήστε εδώ μπορείτε να συλλέξετε αντικείμενα στον καμβά με το ποντίκι.
en: After clicking this button, you can select objects on canvas by mouse.
es: Tras clicar aquí, podrás seleccionar cosas en la topo con el ratón.
it: Cambia la modalità del mouse per selezionare oggetti.
pt: Troque o modo do mouse para selecionar objetos.
ru: Переключитесь на мышь, чтобы выбирать объекты.
sk: Nastav mód myši na vyberanie objektov.
sq: pasi te klikosh kete buton, ju mund te zgjedhni objektet ne pelhure me mi.
zh_CN: 切换鼠标选择对象

therion: Action
bg: Действие
cz: Akce
de: Aktion
el: Εντολή
en: Action
es: Acción
it: Azione
pt: Ação
ru: Действие
sk: Akcia
sq: aksion
zh_CN: 动作

therion: Configure action assigned to action button.
bg: Действието, което изберете, ще бъде изпълнене, кликайки в/у бутона 'Вмъкни <обект>'
cz: Nastaví akci pro tlačítko akcí.
de: Dem Aktionsknopf zugewiesene Aktion konfigurieren.
el: Ορισμός εντολής που θα εκτελείται κάνοντας κλικ στο κουμπί Εισαγωγή <αντικείμενο>
en: Action you choose will be executed by clicking on Insert  button.
es: Clic para ver menú. La acción que escojas será la que ejecute el botón Insertar 
it: Configura l'azione assegnata al bottone d'azione.
pt: Escolha a ação atribuída ao botão de ação.
ru: Выберите действие, назначенное для кнопки.
sk: Nakonfiguruj akciu pre gombík - akcia.
sq: aksionin qe e zgjedhni do te egzekutohet me klikimin ne butonin Fute 
zh_CN: 动作按钮动作指派配置

therion: Move up
bg: Нагоре
cz: Přesun výš
de: Schiebe nach oben
el: Μετακίνηση προς τα πάνω
en: Move up
es: Arriba
it: Sposta sù
pt: Mover para cima
ru: Вверх
sk: Presuň vyššie
sq: levize lart
zh_CN: 上移

therion: Move file command up in the list.
bg: Премести нагоре в списъка файла с команди
cz: Přesune příkaz výš v seznamu příkazů.
de: In der Liste nach oben schieben.
el: Μετακίνηση αντικειμένου ψηλότερα στην λίστα. Χρήσιμο σε περίπτωση που είναι σε λάθος σκράπ το αντικείμενο.
en: Move object up in the list. Use if object is in wrong scrap.
es: Desplaza el objeto hacia arriba en la lista. Usar si el objeto está en lugar erróneo.
it: Sposta il comando in sù nella lista.
pt: Mover elemento selecionado uma posição para cima.
ru: Переместить команду вверх по файлу.
sk: Presuň príkaz vyššie v zozname príkazov.
sq: levize objektin lart ne liste. Perdor nese objekti eshte ne deponi te gabuar.
zh_CN: 上移文件命令至列表

therion: Move down
bg: Надолу
cz: Přesun níž
de: Schiebe nach unten
el: Μετακίνηση προς τα κάτω
en: Move down
es: Abajo
it: Sposta giù
pt: Mover para baixo
ru: Вниз
sk: Presuň nižšie
sq: levize poshte
zh_CN: 下移

therion: Move file command down in the list.
bg: Премести надолу в списъка файла с команди
cz: Přesune příkaz níž v seznamu příkazů.
de: In der Liste nach unten schieben.
el: Μετακίνηση αντικειμένου χαμηλότερα στην λίστα. Χρήσιμο σε περίπτωση που είναι σε λάθος σκράπ το αντικείμενο.
en: Move object down in the list. Use if object is in wrong scrap.
es: Desplaza el objeto hacia abajo en la lista. Usar si el objeto está en lugar erróneo.
it: Sposta il comando in giù nella lista.
pt: Mover elemento selecionado uma posição para baixo.
ru: Переместить команду вниз по файлу.
sk: Presuň príkaz nižšie v zozname príkazov.
sq: levize objektin poshte ne liste. Perdore nese objekti eshte ne deponi te gabuar.
zh_CN: 下移文件命令至列表

therion: Move file command to given position.
bg: Премести файла с команди на указаната позиция
cz: Přesunout příkaz na danou pozici v seznamu.
de: Befehl an angegebene Position schieben.
el: Μετακίνηση αντικειμένου σε συγκεκριμένη θέση (θέση = αριθμός σε κάθε σειρά).
en: Move object to given position (position = number on each line).
es: Mover el objeto a la posición indicada (número al principio de cada línea).
it: Sposta il comando nella posizione specificata.
pt: Mover elemento selecionado para posição indicada.
ru: Переместить команду в указанную позицию в файле.
sk: Presuň príkaz na danú pozíciu v zozname.
sq: levize objektin ne pozicion te dhanun( pozicioni = numri ne secilen rjesht).
zh_CN: 移动文件命令至制定位置

therion: Select destination scrap and position in it.
bg: Изберете местоназначението на скрап и позицията в него
cz: Výběr cílového scrapu a pozice v něm.
de: Zielskizze auswählen und positionieren.
el: Επιλέξετε το σκραπ προορισμού και την θέση μέσα σε αυτό.
en: Select destination scrap and position in it.
es: Seleccionar croquis de destino y la posición en él.
it: Selezione lo scrap di destinazione e posizionati in esso.
pt: Selecione trecho de destino e posicione-o.
ru: Укажите целевой скрап и позицию в нем.
sk: Nastav cieľový scrap a pozíciu v ňom.
sq: zgjedhe destinacionin per deponi dhe poziciono ne te.
zh_CN: 在其中选择目标草图和位置

therion: Update text
bg: Обнови текста
cz: Aktualizovat
de: Text aktualisieren
el: Ανανέωση κειμένου
en: Update text
es: Actualizar texto
it: Aggiorna testo
pt: Atualizar texto
ru: Сохранить текст
sk: Aktualizuj text
sq: aktualizo tekstin
zh_CN: 文本更新

therion: Press this button to save code you have written.
bg: Натиснете този бутон за да запазите написаният код
cz: Stiskněte toto tlačítko pro uložení Vámi zapsaného kódu.
de: Diesen Knopf drücken, um Daten zu speichern.
el: Πατήστε το κουμπί να αποθηκευτεί ο κώδικας που γράψατε
en: Press this button to save code you have written.
es: Clicar aquí para guardar los cambios hechos en el código.
it: Premi questo bottone per salvare il codice che hai scritto.
pt: Pressione este botão para salvar o código que escreveu.
ru: Нажмите эту кнопку для сохранения написанного кода.
sk: Stlačte toto tlačítko pre uloženie Vami zapísaného kódu.
sq: shtype kete buton ta ruajsh kodin te cilin e ke shkru.
zh_CN: 按下此按钮保存代码数据

therion: Editor for free text in therion 2D file.
bg: Редактор за произволен текст в 2D файла
cz: Editor pro text ve 2D souborech.
de: Editor für Freitext in Therion 2D Datei.
el: Χρησιμοποιείτε τον επεξεργαστή αυτό για επεξεργασία αρχείων .th2
en: Use this editor window to modify .th2 files.
es: Usa este editor para modificar los archivos .th2. Otros editores darán problemas.
it: Editor di testo libero per il file 2D di therion.
pt: Editor para texto livre no arquivo 2d do therion.
ru: Редактор произвольного текста в 2D файле.
sk: Editor pre špeciálne príkazy v 2D súboroch.
sq: perdore kete dritare per permiresim qe te modofikosh. Th2 arkivin.
zh_CN: 修改.th2文件编辑器

therion: expression
bg: израз
cz: výraz
de: Muster
el: αναζήτηση για
en: search for
es: buscar
it: testo
pt: expressão
ru: выражение
sk: výraz
sq: kerko per
zh_CN: 表达式

therion: Enter search expression.
bg: Въведете дума/и за търсене
cz: Vložte hledaný výraz.
de: Suchmuster eingeben.
el: Εισαγωγή λέξεις για αναζήτηση
en: Enter word(s) to search for.
es: Introducir palabra(s) a buscar.
it: Scrivi il testo da cercare.
pt: Entre a expressão a ser buscada.
ru: Введите выражение поиска.
sk: Vložte hľadaný výraz.
sq: fute fjalin qe do ta kerkosh.
zh_CN: 输入查找表达式

therion: regular expression
bg: регулярен израз
cz: regulární výraz
de: Regulärer Ausdruck
el: Χρήση μπαλαντέρ
en: regular expression
es: patrón regular (kob.*)
it: espressione regolare
pt: expressão regular
ru: регулярное выражение
sk: regulárny výraz
sq: shprehje e rregullt
zh_CN: 正则表达式

therion: Search for regular expression.
bg: Търсене по регулярен израз
cz: Vyhledávání regulárního výrazu.
de: Suche nach regulärem Ausdruck.
el: Χρήση μπαλαντέρ στην αναζήτηση (σπή.* θα βρει σπήλαιο, σπήλαια, σπήκερ)
en: Use wildcards on search (cav.* will find cave, cavern, cavalier...)
es: Usar comodines en la búsqueda (kob.* encuentra koba, kobea, kobie, etc).
it: Cerca espressione regolare.
pt: Buscar por expressão regular
ru: Искать по регулярному выражению.
sk: Vyhľadávanie regulárneho výrazu.
sq: kerko per shprehje te rregullt.
zh_CN: 查找正则表达式

therion: case sensitive
bg: отчита се регистъра
cz: rozlišovat velikost písmen
de: Groß- und Kleinschreibung berücksichtigen
el: case sensitive
en: case sensitive
es: distinguir mayúsculas
it: case-sensitive
pt: diferenciar MAIÚSCULAS/minúsculas
ru: учитывать регистр
sk: rozlišovať veľkosť
sq: rast I ndjeshem-senzitiv
zh_CN: 区分大小写

therion: Case sensitive search.
bg: Търсене с отчитане на регистъра
cz: Vyhledávání s rozlišením velikosti písmen.
de: Suche mit Groß- und Kleinbuchstaben.
el: Αναζήτηση case sensitive
en: Case sensitive search.
es: Búsqueda sensible a las mayúsculas.
it: Ricerca case-sensistive
pt: Busca deve diferenciar letras MAIÚSCULAS das minúsculas.
ru: Поиск с учетом регистра.
sk: Vyhľadávanie s rozlišovaním veľkých a malých písmen.
sq: kerko rast senzitiv
zh_CN: 区分大小写查找

therion: Find next
bg: следващ
cz: Najít další
de: Nächste Stelle finden
el: Εύρεση επομένου
en: Find next
es: Siguiente
it: Prossimo
pt: Próximo
ru: Следующий
sk: Nasledujúci
sq: gjeje tjetren me radhe
zh_CN: 查找下一处

therion: Select next object matching expression.
bg: Избери следващият обект на търсенето
cz: Vybere další objekt odpovídající výrazu.
de: Nächstes Objekt auswählen, das auf Muster passt.
el: Επιλογή επόμενου αντικείμενου που ταιριάζει στην αναζήτηση
en: Select next object matching expression.
es: Selecionar siguiente objeto encontrado.
it: Seleziona il prossimo oggetto trovato
pt: Selecionar o próximo objeto que atenda à expressão.
ru: Выбрать следующий объект, соответствующий выражению поиска.
sk: Nájdi ďalší objekt zodpovedajúci hľadanému výrazu.
sq: zgjedhe objektin tjeter me radhe te shprehjes qe pershtatet
zh_CN: 选择匹配表达式的下一对象

therion: Find first
bg: Намвери първият
cz: Najít první
de: Finde erstes
el: Εύρεση πρώτου
en: Search
es: Buscar
it: Cerca
pt: Primeiro
ru: Первый
sk: Nájdi prvý
sq: kerko te parin
zh_CN: 查找第一项

therion: Select first object matching expression.
bg: Избери първият обект на търсенето
cz: Vybere první objekt odpovídající výrazu.
de: Erstes Objekt finden, das auf Muster passt.
el: Επιλογή πρώτου αντικείμενου που ταιριάζει στην αναζήτηση
en: Selects first object matching expression.
es: Selecionar el primer objeto encontrado.
it: Seleziona il primo oggetto trovato
pt: Selecionar o primeiro objeto que atenda à expressão.
ru: Выбрать первый объект, соответствующий выражению поиска.
sk: Nájdi prvý objekt zodpovedajúci hľadanému výrazu.
sq: zgjedh objektin e pare te shprehjes qe pershtatet
zh_CN: 选择匹配表达式的第一对象

therion: Show all
bg: Покажи всичко
cz: Zobrazit vše
de: Zeige alles
el: Εμφάνιση όλων
en: Show all
es: Mostrar todo
it: Tutti
pt: Todos
ru: Показать все
sk: Označ všetky
sq: tregoji te gjitha
zh_CN: 显示所有对象

therion: Highlight all objects matching expression.
bg: Освети всички обекти, съответстващи на търсенето
cz: Zvýrazní všechny objekty odpovídající výrazu.
de: Alle Objekte hervorheben, die auf Muster passen.
el: Τόνωση όλων όσων ταιριάζουν στην αναζήτηση.
en: Highlight all objects matching expression.
es: Seleccionar todos los objetos encontrados.
it: Evidenzia tutti gli oggetti trovati
pt: Destacar todos os objetos que atedam à expressão.
ru: Подсветить все объекты, соответствующие выражению поиска.
sk: Zvýrazní všetky objekty zodpovedajúce hľadanému výrazu.
sq: zghedh te gjitha objektet qe pershtaten me shprehjen
zh_CN: 突出显示匹配表达式的所有对象

therion: Clear all
bg: Изчисти всичко
cz: Zruš výběr
de: Alles löschen
el: Αναίρεση όλων
en: Clear all
es: Deseleccionar
it: Cancella
pt: Limpar
ru: Очистить все
sk: Zruš výber
sq: fshij krejt
zh_CN: 清除所有对象

therion: Clear highlighted objects.
bg: Изчести осветяването на всички обекти
cz: Zruší zvýraznění vybraných objektů.
de: Hervorgehobene Objekte löschen.
el: Αναίρεση των τονισθέντων
en: Clear highlighted objects.
es: Deseleccionar todos los objetos resaltados.
it: Togli l'evidenziazione degli oggetti.
pt: Remover todos os destaques nos objetos.
ru: Снять подсветку со всех объектов.
sk: Zruší zvýraznenie vybratých objektov.
sq: fshij objektet e zgjedhura-te hijezuara
zh_CN: 清除突出显示对象

therion: loading images module ...
bg: зареждане на модула за изображения
cz: nahrávám obrázkový modul ...
de: Lade Bildmodul ...
el: φορτίζεται η ενότητα εικόνων...
en: loading images module ...
es: imágenes ...
it: modulo immagini ...
pt: carregando módulo de imagens...
ru: загрузка модуля изображений...
sk: nahrávam obrázkový modul...
sq: duke lexuar modulin e imazhit…
zh_CN: 图形模块载入中...

therion: Select background image.
bg: Избери фоново изображение
cz: Výběr podkladového obrázku.
de: Wähle Hintergrundbild.
el: Κάντε κλικ στον κατάλογο να επιλέξετε την εικόνα που αντιστοιχεί.
en: Click on a line in the list to select corresponding image.
es: Al clicar un renglón, seleccionarás la imagen de fondo correspondiente.
it: Seleziona l'immagine di background.
pt: Selecione a image de fundo.
ru: Выбор фонового изображения.
sk: Označ obrázok na pozadí.
sq: kliko rreshtin ne liste qe te zgjedhesh imazhin qe pershtatet.
zh_CN: 选择底图

therion: Insert new background image.
bg: Вмъкни ново фоново изображение
cz: Vložení nového podkladového obrázku.
de: Neues Hintergrundbild einfügen.
el: Εισαγωγή νέας εικόνας φόντου (π.χ. αρχείο .xvi ή ψηφιακό σχέδιο)
en: Insert new background image (e.g., .xvi image or scanned sketch).
es: Insertar nueva imagen de fondo (p. ej: un croquis escaneado de la libreta topo).
it: Inserisci una nuova immagine di background.
pt: Insira uma nova imagem de fundo.
ru: Вставить новое фоновое изображение.
sk: Vloženie nového podkladového obrázku.
sq: fute imazhin e ri ne prapavije (p.sh., . xvi imazhin apo vizatimin e skanuar).
zh_CN: 插入底图

therion: Remove
bg: Премахни
cz: Odstranit
de: Entferne
el: Διαγραφή
en: Remove
es: Eliminar
it: Rimuovi
pt: Remover
ru: Убрать
sk: Odstrániť
sq: hiqe
zh_CN: 删除

therion: Remove selected image.
bg: Премахни избраното изображение
cz: Odstraní vybraný obrázek.
de: Entferne ausgewähltes Bild.
el: Διαγραφή επιλεγμένης εικόνας
en: Remove selected image.
es: Eliminar imagen seleccionada.
it: Rimuovi l'immagine selezionata.
pt: Remover a imagem selecionada.
ru: Убрать вырбанное изображение.
sk: Odstráni označený obrázok.
sq: hiqe imazhin e zgjedhur.
zh_CN: 删除选择图像

therion: visibility
bg: Покажи
cz: viditelnost
de: Sichtbarkeit
el: ορατότητα
en: visibility
es: visibilidad
it: visibilità
pt: visibilidade
ru: показать
sk: viditeľnosť
sq: shiqueshmeria-vizibiliteti
zh_CN: 能见度

therion: Switch image visibility.
bg: Покажи/скрий изображение
cz: Přepíná viditelnost obrázku.
de: Bildsichtbarkeit umschalten.
el: Αλλαγή ορατότητας εικόνας
en: Switch image visibility.
es: Cambiar visibilidad de la imagen.
it: Cambia la visibilità dell'immagine.
pt: Alternar visibilidade da imagem.
ru: Показать/спрятать изображение.
sk: Prepínač viditeľnosti obrázku.
sq: lesho shiqueshmerine-vizibilitetin e imazhit.
zh_CN: 切换图形能见度

therion: Control gamma value.
bg: Управление на гамата
cz: Nastavení hodnoty gamma.
de: Gammawert einstellen.
el: Ρυθμίσεις τιμών gamma.
en: Control gamma value.
es: Controlar el valor gamma.
it: Controlla il valore di gamma.
pt: Valor gamma de referência.
ru: Управление гаммой.
sk: Nastavenie gamma korekcie obrázku (farebného podania).
sq: kontrollo vleren-gamma
zh_CN: 伽玛值校正图像设置

therion: Reset
bg: Възобнови
cz: Reset
de: Zurücksetzen
el: Επαναφορά
en: Reset
es: Reajustar
it: Ripristina
pt: Restaurar
ru: Сброс
sk: Reset
sq: reseto
zh_CN: 重新设置

therion: Reset image gamma value.
bg: Възобнови настойките на гамата
cz: Resetuje nastavenou hodnotu gamma.
de: Gammawert zurücksetzen.
el: Επαναφορά τιμής gamma της εικόνας.
en: Click here to go back to original gamma value.
es: Click aquí para volver a los ajustes de gamma iniciales.
it: Ripristina il valore di gamma dell'immagine.
pt: Restaurar valor gamma original para a imagem.
ru: Сбросить значение гаммы для изображения.
sk: Resetuje nastavenú gamma korekciu obrázku.
sq: kliko ketu qe te kthehesh prapa tek vlera origjinale-gamma.
zh_CN: 重新设置图像伽马值

therion: Set image gamma value.
bg: Определи гамата на изображението
cz: Nastavuje hodnotu gamma obrázku.
de: Setze Gammawert.
el: Ορισμός τιμής gamma της εικόνας.
en: Set image gamma value.
es: Ajustar valor gamma de la imagen.
it: Imposta il valore di gamma dell'immagine.
pt: Definir valor gamma para a imagem.
ru: Установить гамму для изображения.
sk: Nastavuje gamma korekciu obrázku.
sq: vendos vleren gamma te imazhit.
zh_CN: 设置图像伽马值

therion: Current position of selected image.
bg: Текуща позиция на избраното изображение
cz: Současná pozice vybraného obrázku.
de: Gegenwärtige Position des ausgewählten Bildes.
el: Τρέχουσα θέση επιλεγμένης εικόνας
en: Current position of selected image (pixels from canvas lower left corner).
es: Posición actual de la imagen seleccionada (medida en pixels desde la esquina inf. izq del lienzo).
it: Posizione dell'immagine selezionata.
pt: Posição atual da imagem selecionada.
ru: Текущая позиция выбранного изображения.
sk: Súčasná pozícia obrázku.
sq: pozicioni momental I imazhit te zgjedhur(pikat apo pikselat prej pelhures kendi I poshtem I majte).
zh_CN: 选择图像当前位置

therion: Move to
bg: Премести
cz: Přesunout
de: Verschiebe nach
el: Μετακίνηση προς
en: Move to
es: Mover a
it: Sposta a
pt: Mover para
ru: Переместить
sk: Presuň na
sq: levize tek
zh_CN: 移动到

therion: Move image to given position.
bg: Премести изображението на указаната позиция
cz: Přesune obrázek na zadanou pozici.
de: Verschiebe Bild an angegebene Position.
el: Μετακίνηση εικόνας στην προσδιορισμένη θέση (η πάνω αριστερά γωνία θα είναι στο δεδομένο πίξελ)
en: Move image to given position (image's upper left corner will be on given pixel).
es: Mover imagen a la posición indicada (la esquina sup. izda de la imagen aparecerá en ese pixel).
it: Sposta l'immagine nella posizione specificata.
pt: Mover imagem para posição indicada.
ru: Переместить изображение к указанной позиции.
sk: Presunie obrázok na zadanú pozíciu.
sq: levize imazhin ne poziten e dhene(kendi I eperm I majte I imazhit do te jete ne pikselin e japur).
zh_CN: 移动图像至指定位置

therion: New X coordinate of image.
bg: Нова Х координата на изображението
cz: Nová souřadnice X obrázku.
de: Neue X-Koordinate des Bildes.
el: Νέα συντεταγμένη Χ εικόνας
en: New X coordinate of image.
es: Nueva coordenada X de la imagen.
it: Nuova coordinata X dell'immagine.
pt: Nova coordenada X da imagem.
ru: Новая координата X.
sk: Nová X súradnica obrázku.
sq: X-koordinata e re e imazhit
zh_CN: 图像的新X坐标

therion: New Y coordinate of image.
bg: Нова Y координата на изображението
cz: Nová souřadnice Y obrázku.
de: Neue Y-Koordinate des Bildes.
el: Νέα συντεταγμένη Υ εικόνας
en: New Y coordinate of image.
es: Nueva coordenada Y de la imagen.
it: Nuova coordinata Y dell'immagine.
pt: Nova coordenada Y da imagem.
ru: Новая координата Y.
sk: Nový Y súradnica obrázku.
sq: koordinata Y e re e imazhit.
zh_CN: 图像的新Y坐标

therion: Move front
bg: Премести отпред
cz: Dopředu
de: Nach vorne verschieben
el: Μετακίνηση προς τα μπρος
en: Move front
es: Delante
it: Davanti
pt: Frente
ru: Поверх всех
sk: Navrch
sq: levize perpara
zh_CN: 向前移动

therion: Move image in front of all images.
bg: Премести изображението пред всички останали.
cz: Přesune obrázek nad všechny ostatní.
de: Bild ganz nach vorne verschieben.
el: Μετακίνηση εικόνας στην κορυφή
en: Move image in front of all images.
es: Trae la imagen al frente de todas las imágenes.
it: Sposta l'immagine davanti a tutte le immagini.
pt: Mover imagem para a frente de todas as imagens.
ru: Вывести изображение поверх всех остальных.
sk: Presunie obrázok nad všetky ostatné.
sq: levize imazhin para te gjitha imazheve.
zh_CN: 移动图像至顶层

therion: Move back
bg: Премести назад
cz: Dozadu
de: Nach hinten verschieben
el: Μετακίνηση προς τα πίσω
en: Move back
es: Detrás
it: Dietro
pt: Fundo
ru: Под всеми
sk: Naspodok
sq: levize prapa
zh_CN: 向后移动

therion: Move image behind all images.
bg: Премести изображението отзад останалите
cz: Přesune obrázek pod všechny ostatní.
de: Bild ganz nach hinten verschieben.
el: Μετακίνηση της εικόνας στο φόντο
en: Move image behind all images.
es: Enviar la imagen detrás de todas las demás.
it: Sposta l'immagine davanti a tutte le immagini.
pt: Mover imagem para trás de todas as imagens.
ru: Вывести изображение за всеми остальными.
sk: Presunie obrázok pod všetky ostatné.
sq: levize imazhin prapa te gjitha imazheve.
zh_CN: 移动图像至底层

therion: loading preview module ...
bg: зареждане на модула за предварителен преглед ...
cz: nahrávám zobrazovací modul ...
de: Lade Vorschaumodul ...
el: Φορτίζεται η ενότητα προεπισκόπισης...
en: loading preview module ...
es: ver comandos ...
it: modulo anteprima ...
pt: carregando módulo de visualização...
ru: загрузка модуля предпросмотра...
sk: nahrávam náhľadový modul ...
sq: duke lexuar modulin e perkohshem…
zh_CN: 预览模块载入中…

therion: Update command
bg: Обнови командата
cz: Aktualizovat
de: Kommando aktualisieren
el: Ανανέωση
en: Update command
es: Actualizar
it: Aggiorna comando
pt: Atualizar
ru: Обновить команду
sk: Aktualizovať
sq: urdheri-komanda e aktualizimit
zh_CN: 命令更新

therion: Press this button, if you have changed something and you can not see your changes here.
bg: Натиснете този бутон, ако сте направили промени и не ги виждате тук.
cz: Stiskněte toto tlačítko, pokud jste něco změnili a změny nejsou v tomto okně viditelné.
de: Drücke diesen Knopf, falls du etwas geändert hast und die Änderungen nicht hier sehen kannst.
el: Πατήστε εδώ αν αλλάξατε κάτι και δεν εμφανίζονται εδώ οι αλλαγές.
en: Press this button, if you have changed something and you can not see your changes here.
es: Clicar aquí si has cambiado algo y no ves aquí los resultados del cambio
it: Premi questo bottone se hai fatto modifiche che non sono visualizzate.
pt: Pressione este botão se você alterou algo mas essas mudanças não aparecem aqui.
ru: Нажмите эту кнопку, если вы что-то изменили, но не увидели здесь своих изменений.
sk: Stlačte toto tlačítko, ak ste niečo zmenili a zmeny nie su v tomto okne viditeľné.
sq: shtype kete buton, nese ke ndryshuar diqka te cilin ndryshim nuk mund ta shohesh ketu.
zh_CN: 点击按钮,不见你所做的改动

therion: Command preview.
bg: Преглед на командата.
cz: Náhled příkazu.
de: Kommando Vorschau.
el: Εδώ βλέπετε ολοκληρωμένες εντολές με εφαρμογή επιλογών.
en: Here you can see complete commands with options applied.
es: Aquí se pueden ver los comandos completos, opciones incluídas.
it: Anteprima comando.
pt: Visualização do elemento.
ru: Просмотр команды.
sk: Náhľad príkazu.
sq: ketu mund te shohesh komandat komplete me opcionet e vendosura.
zh_CN: 命令预览

therion: loading scrap module ...
bg: Зареждане на скрап модула ...
cz: nahrávám scrap modul ...
de: Lade Skizzenmodul ...
el: φορτίζεται η ενότητα των σκραπ...
en: loading scrap module ...
es: croquis ...
it: modulo scrap ...
pt: carregando módulo de trechos...
ru: загрузка скрап-модуля...
sk: nahrávam scrap modul ...
sq: duke lexuar modulin e deponise…
zh_CN: 草图模块载入中…

therion: Scrap name.
bg: Име на скрап.
cz: Název scrapu.
de: Skizzenname.
el: Όνομα σκραπ
en: Scrap name.
es: Nombre del croquis.
it: Nome dello scrap.
pt: Nome do trecho.
ru: Имя скрапа.
sk: Identifikátor (meno) scrapu.
sq: emri I deponise.
zh_CN: 草图名称

therion: projection
bg: проекция
cz: projekce
de: Projektion
el: προβολή
en: projection
es: proyección
it: proiezione
pt: projeção
ru: проекция
sk: projekcia
sq: projekcioni
zh_CN: 投影

therion: Scrap projection.
bg: Проекция на скрапа.
cz: Projekce scrapu.
de: Skizzenprojektion
el: Προβολή σκραπ (κλικ στο τρίγωνο για μενού)
en: Scrap projection (click on triangle to see menu).
es: Proyección del croquis (Clic en triángulo para ver el menú).
it: Proiezione dello scrap.
pt: Projeção do trecho.
ru: Проекция скрапа.
sk: Projekcia scrapu.
sq: projeksioni I deponise (kliko ne trekendesh te shohesh menyne).
zh_CN: 草图投影

therion: Other scrap options.
bg: Други опции на скрапа.
cz: Další volby pro scrap.
de: Andere Skizzenoptionen.
el: Άλλες επιλογές των σκραπ - βλέπετε το thbook.pdf
en: Other scrap options (more on this on thbook.pdf)
es: Otras opciones del croquis. Consultar thbook.pdf
it: Altre opzioni dello scrap
pt: Outras opções do trecho.
ru: Другие опции скрапа.
sk: Ostatné možnosti scrapu.
sq: opcionet tjera te deponise (me shume per kete ne librin e therion-it.pdf)
zh_CN: 其它草图选项

therion: Scale
bg: Мащаб
cz: Měřítko
de: Maßstab
el: Κλίμακας
it: Scala
pt: Escala
ru: Масштаб
sk: Mierka
sq: matesi
zh_CN: 比例尺

therion: Scrap scaling - push to click picture calibration points.
bg: Мащабиране на скрапа - натиснете този бутон и поставете с мишката точка за мащабиране в/у скрапа.
cz: Škálování scrapu - stiskni pro výběr kalibračních bodů obrázku.
de: Skizze skalieren - drücken um Bildeinstellungspunkte zu klicken.
el: Καλιπράρισμα σκραπ - κάντε κλικ για να επιλέξετε τα σημεία για καλιμπράρισμα.
it: Rescalamento - premi per selezionare i punti di calibrazione.
pt: Defina a escala do trecho clicando nos pontos de calibração da imagem.
ru: Масштабирование скрапа - нажимте эту кнопку и выставите точки масштабирования мышью
sk: Škálovanie scrapu - po stlačení klikni na škálovacie body.
sq: matja e deponise-shtyp te klikosh pikat kalibruese te fotos.
zh_CN: 草图比例 – 点击鼠标,调整图像

therion: Update scrap
bg: Обнови скрапа
cz: Aktualizovat
de: Skizze aktualisieren
el: Ενημέρωση σκραπ
en: Update scrap
es: Actualizar
it: Aggiorna scrap
pt: Atualizar
ru: Обновить скрап
sk: Aktualizuj scrap
sq: aktualizo deponine
zh_CN: 草图更新

therion: Press this button to apply your changes to current scrap.
bg: Натиснете този бутон за да приложите промените в/у текущия скрап.
cz: Stiskněte toto tlačítko po uplatnění změn aktuálního scrapu.
de: Drücke diesen Knopf, um deine Änderungen auf diese Skizze anzuwenden.
el: Πατήστε εδώ για να γίνει εφαρμογή των αλλαγών σας στο τρέχον σκραπ.
en: Press this button to apply your changes to current scrap.
es: Clicar aquí tras modificar las propiedades del croquis.
it: Premi questo bottone per applicare le tue modifiche allo scrap.
pt: Aplicar as mudanças ao trecho atual.
ru: Нажмите эту кнопку для введения в действие ваших изменений для текущего скрапа
sk: Stlačte tento gombík, aby sa vaše zmeny v scrape uložili.
sq: shtype kete buton qe te besh ndrimet ne deponine momentale.
zh_CN: 点击按钮,将改变保存到当前草图

therion: picture scale points
bg: мащабиращи точки за изображение
cz: body měřítka (obrázek)
de: Bildskalierungspunkte
el: σημεία για καλιμπράρισμα (πίξελ)
en: picture scale points (pixels)
es: puntos de escala (pixels)
it: punti nella scala del disegno
pt: pontos escala imagem
ru: масштабирующие точки для картинки
sk: kalibračné body (obrazovka)
sq: pikat matese te fotos-pikselat
zh_CN: 图片缩放点

therion: Calibration points on the picture (X1:Y1 - X2:Y2).
bg: Калибриращи точки на изображение (X1:Y1 - X2:Y2)
cz: Kalibrační body na obrázku (X1:Y1 - X2:Y2).
de: Kalibrierungspunkte auf dem Bild (X1:Y1 - X2:Y2).
el: Σημεία καλιμπραρίσματος στην εικόνα (Χ1:Υ1 - Χ2:Υ2).
en: Calibration points on the picture (X1:Y1 - X2:Y2).
es: Puntos de calibración en la imagen (X1:Y1 - X2:Y2).
it: Punti di calibrazione sul disegno (X1:Y1 - X2:Y2).
pt: Pontos limite de calibração na imagem (X1:Y1 - X2:Y2).
ru: Калибровочные точки на картинке (X1:Y1 - X2:Y2).
sk: Súradnice kalibračných bodov na obrazovke (X1:Y1 - X2:Y2)
sq: pikat e kalibrimit ne foto (X1:Y1 - X2:Y2)
zh_CN: 图片校准点(X1:Y1 - X2:Y2)

therion: X1 picture.
bg: X1 на изображение
cz: X1 obrázek.
de: X1 Bild.
el: Χ1 εικόνας
en: X1 picture.
es: Punto de escala X1 en la imagen.
it: X1 del disegno.
pt: X1 na imagem.
ru: X1 картинки.
sk: X1 na obrázku.
sq: x1 fotoja
zh_CN: X1 图

therion: Y1 picture.
bg: Y1 на изображение
cz: Y1 obrázek.
de: Y1 Bild.
el: Υ1 εικόνας
en: Y1 picture.
es: Punto de escala Y1 en la imagen.
it: Y1 del disegno.
pt: Y1 na imagem.
ru: Y1 картинки.
sk: Y1 na obrázku.
sq: Y1 fotoja
zh_CN: Y1 图

therion: X2 picture.
bg: X2 на изображение
cz: X2 obrázek.
de: X2 Bild.
el: Χ2 εικόνας
en: X2 picture.
es: Punto de escala X2 en la imagen.
it: X2 del disegno.
pt: X2 na imagem.
ru: X2 картинки.
sk: X2 na obrázku.
sq: X2 fotoja
zh_CN: X2 图

therion: Y2 picture.
bg: Y2 на изображение
cz: Y2 obrázek.
de: Y2 Bild.
el: Υ2 εικόνας
en: Y2 picture.
es: Punto de escala Y2 en la imagen.
it: Y2 del disegno.
pt: Y2 na imagem.
ru: Y2 картинки.
sk: Y2 na obrázku.
sq: Y2 fotoja
zh_CN: Y2 图

therion: real scale points
bg: реални мащабиращи точки
cz: body měřítka (skutečné)
de: Punkte für Realmaßstab
el: πραγματικά σημεία για καλιμπράρισμα
en: real scale points
es: puntos de escala (reales)
it: punti nella scala effettiva
pt: pontos escala real
ru: реальные масштабирующие точки
sk: kalibračné body (skutočné)
sq: pikat reale te matjes
zh_CN: 点的实际比例

therion: Real coordinates of calibration points (X1:Y1 - X2:Y2).
bg: Реални координати на калибриращите точки (X1:Y1 - X2:Y2).
cz: Skutečné souřadnice kalibračních bodů (X1:Y1 - X2:Y2).
de: Realkoordinaten der Kalibrierungspunkte (X1:Y1 - X2:Y2).
el: Πραγματικές συντεταγμένες σημείων καλιμπραρίσματος (Χ1:Υ1 - Χ2:Υ2)
en: Real coordinates of calibration points (X1:Y1 - X2:Y2).
es: Coordenadas reales de los puntos de calibración (X1:Y1 - X2:Y2).
it: Coordinate reali dei punti di calibrazione (x1:y1 - x2:y2).
pt: Pontos limite de calibração tamanho real (X1:Y1 - X2:Y2).
ru: Реальные координаты калибровочных точек (X1:Y1 - X2:Y2).
sk: Skutočné súradnice kalibračných bodov (X1:Y1 - X2:Y2).
sq: koordinatat reale te pikave te kalibrimit (X1:Y1 - X2:Y2).
zh_CN: 校正点的实际坐标(X1:Y1 - X2:Y2)

therion: X1 real.
bg: X1 реално.
cz: X1 skutečný.
el: Πραγματικό Χ1.
en: X1 real.
es: X1 real
it: x1 reale.
pt: X1 real.
ru: X1 реальное.
sk: X1 skutočný
sq: X1 I vertet-real
zh_CN: X1值

therion: Y1 real.
bg: Y1 реално.
cz: Y1 skutečný.
el: Πραγματικό Υ1.
en: Y1 real.
es: Y1 real
it: y1 reale.
pt: Y1 real.
ru: Y1 реальное.
sk: Y1 skutočný
sq: Y1 I vertet-real
zh_CN: Y1值

therion: X2 real.
bg: X2 реално.
cz: X2 skutečný.
el: Πραγματικό Χ1.
en: X2 real.
es: X2 real
it: x2 reale.
pt: X2 real.
ru: X2 реальное.
sk: X2 skutočný
sq: X2 I vertet-real
zh_CN: X2值

therion: Y2 real.
bg: Y2 реално.
cz: Y2 skutečný.
el: Πραγματικό Υ2
en: Y2 real.
es: Y2 real
it: y2 reale.
pt: Y2 real.
ru: Y2 реальное.
sk: Y2 skutočný
sq: Y2 I vertet-real
zh_CN: Y2值

therion: units
bg: единици
cz: jednotky
de: Einheiten
el: μονάδες
en: units
es: unidades
it: unità
pt: unidade
ru: единицы
sk: jednotky
sq: njesite
zh_CN: 单位

therion: Units of real coordinates.
bg: Единици на реалните координати.
cz: Jednotky reálných souřadnic.
de: Einheiten der Realkoordinaten.
el: Μονάδες πραγματικών συντεταγμένων.
en: Units of real coordinates.
es: Unidades de las coordenadas reales.
it: Unità delle coordinate reali.
pt: Unidade das medidas reais.
ru: Единицы измерения реальных координат.
sk: Jednotky reálnych súradníc.
sq: njesite e koordinatave te verteta.
zh_CN: 实际坐标单位

therion: background sketches
bg: Фонова скица.
cz: náčrtky na pozadí
de: Hintergrundskizzen
el: Σχέδια του φόντου
it: Immagini di background
pt: croquis de fundo
ru: Фоновые изображения
sk: náčrtky na pozadí.
sq: skicat e prapavise.
zh_CN: 背景素描

therion: List of image files used as scrap background.
bg: Списък на графични файлове, използвани за фонови изображения на скрапа.
cz: Seznam obrázků použitých jako pozadí scrapu
de: Liste der als Hintergrund verwendeten Bilder.
el: Κατάλογος αρχείων εικόνων που χρησιμοποιούνται ως φόντο του σκραπ
it: Files usati come background dello scrap
pt: Lista de imagens de croquis usadas como fundo neste trecho.
ru: Список графических файлов, используемых в качестве фоновых изображений скрапа
sk: Zoznam obrázkov použitých ako pozadie.
sq: lista e foto-arkivit te perdorura si prapavije e deponise.
zh_CN: 作为草图背景的图像文件列表

therion: Press this button to insert sketch by clicking on it.
bg: Натиснете този бутон, за да вмъкнете скица, като кликнете върху нея.
cz: Stiskněte toto tlačítko a výběrem náčrtku myší jej vložte do scrapu.
de: Diesen Knopf drücken um Skizze einzufügen.
el: Πατήστε εδώ για εισαγωγή σχεδίου με ποντίκι
it: Premi per inserire il disegno che scegli col mouse
pt: Inserir neste trecho o próximo croqui clicado.
ru: Эта кнопка вставляет фон скрапа в список
sk: Po stlačení klikni na náčrtok, ktorý treba vložiť do scrapu.
sq: shtype kete buton te fusesh skicen duke klikuar ne te.
zh_CN: 点击按钮,点击插入素描

therion: Delete sketch from scrap.
bg: Изтрий скица от скрапа.
cz: Odstranit náčrtek ze scrapu
de: Lösche Skizze.
el: Διαγραφή σχεδίου από σκραπ
it: Rimuovi un disegno dallo scrap
pt: Remover croqui deste trecho.
ru: Эта кнопка удаляет фон скрапа из списка
sk: Odstráň náčrtok zo scrapu.
sq: fshije skicen nga deponia
zh_CN: 从草图中删除素描

therion: loading point module ...
bg: зареждане на модула за точки ...
cz: nahrávám point modul ...
de: Lade Punktmodul ...
el: φόρτιση ενότητας σημείων…
en: loading point module ...
es: puntos ...
it: modolo punti ...
pt: carregando módulo de pontos...
ru: загрузка модуля точек...
sk: nahrávam editor bodov ...
sq: duke lexuar modulin e pikes…
zh_CN: 点模块载入中…

therion: Update point
bg: Обнови точка
cz: Aktualizovat
de: Punkt aktualisieren
el: Ενημέρωση σημείου
en: Update point
es: Actualizar
it: Aggiorna punto
pt: Atualizar
ru: Обновить точку
sk: Akualizuj bod
sq: pika e aktualizimit
zh_CN: 点更新

therion: Click this button to apply point changes.
bg: натиснете този бутон за прилагане на измененията в/у точката.
cz: Aktualizuje data týkající se bodu.
de: Klicke diesen Knopf, um Änderungen am Punkt anzuwenden.
el: Κάντε κλικ για να γίνει εφαρμογή των αλλαγών που κάνατε στα σημεία
en: Click this button to apply point changes.
es: Clicar aquí tras modificar las propiedades del punto.
it: Premi il bottone per fare modifiche al punto.
pt: Aplicar as mudanças ao ponto atual.
ru: Нажмите эту кнопку для применения изменений точки.
sk: Stlačte aby sa aktualizovali zmenené údaje bodu.
sq: kliko kete buton te aktualizosh nderrimet e pikes.
zh_CN: 点击按钮,应用点改动

therion: Point type.
bg: Тип на точката.
cz: Typ bodu.
de: Punkttyp.
el: Είδος σημείου
en: Point type (click on triangle to see menu).
es: Tipo de punto. Clic en triángulo para ver menú
it: Tipo di punto
pt: Tipo de ponto.
ru: Тип точки.
sk: Typ bodu.
sq: lloji I pikave (kliko ne trekendesh te shohesh menun).
zh_CN: 点类型

therion: Point identifier.
bg: Индетификатор на точката.
cz: Identifikátor bodu.
de: Punktbezeichner.
el: ID σημείου
en: Point identifier.
es: Nombre (ID) del punto.
it: Identificatore del punto.
pt: Identificador do ponto.
ru: Идентификатор точки.
sk: Identifikátor bodu.
sq: identifikuesi I pikes.
zh_CN: 点识别

therion: Other point options.
bg: Други опции на точката.
cz: Další volby pro bod.
de: Andere Punktoptionen.
el: Άλλες επιλογές για σημεία
en: Options allow giving special characteristics to points.
es: Las opciones permiten dar características especiales a los puntos.
it: Altre opzioni del punto.
pt: Outras opções do ponto.
ru: Другие опции точки.
sk: Ostatné špecifikácie bodu.
sq: opcionet tjera te pikes.
zh_CN: 其它点选项

therion: I.e, if type is label, write here: -text \042this will be displayed (P100)\042
bg: Например, ако типът на точката е label (етикет), тук можете да въведете: -text \042 , това ще изобрази: (P100)\042
cz: Příklad: pokud type je label, zadejte: -text \042this will be displayed (P100)\042
de: d.h., wenn der Typ Beschriftung ist, schreibe hier: -text \042das wird hier angezeigt (P100)\042
el: Δηλαδή, αν το είδος είναι ταμπέλα, εδώ γράφετε: -text \042αυτό εμφανίζεται (P100)\042
en: I.e, if type is label, write here: -text \042this will be displayed (P100)\042
es: P.ej, si el tipo es label, escribe: -text \042lo que se verá (P100)\042.
it: Cioé, se il tipo è etichetta, scrivi: -text \042questo sarà visualizzato (P100)\042
pt: Exemplo: se for do tipo 'informação' escreva aqui -text \042texto no mapa (B3)\042
ru: Например, если тип точки label, здесь можно набрать: -text \042это напечатается (P100)\042
sk: Príklad: ak je typ label, zadajte: -text \042tento text bude zobrazený\042
sq: p.sh. nese lloji eshte etikete, shkruaj ketu: -teksti \042 kjo do te lajmerohet (P100)\042
zh_CN: 如果该类型是标签,写在这里:-text \042在此显示(P100)\042

therion: Enter symbol orientation angle.
bg: Въведете ориентация на символа.
cz: Zadejte orientaci bodu.
de: Winkel der Symbolausrichtung angeben.
el: Εισαγωγή γωνίας προσανατολισμού σύμβολου.
en: Enter symbol orientation angle.
es: Introducir dirección en que debe apuntar el símbolo.
it: Scrivi l'angolo di orientazione del simbolo.
pt: Defina o ângulo de orientação deste símbolo.
ru: Введите ориентацию символа.
sk: Zadajte orientáciu bodu.
sq: fute simbolin e kendit te orientimit.
zh_CN: 按指示角度输入符号

therion: There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard.
bg: Някои типове символи трябва да бъдат ориентирани (например gradient). Натиснете тук за да им дадете направление с помощта на мишката или клавиатурата.
cz: Jsou symboly, kterým musíte specifikovat orientaci (např. gradient). Zaklikněte tuto volbu a nastavte jim orientaci myší nebo z klávesnice.
de: Es gibt Symbole, die eine Ausrichtung haben müssen (z.B. Gefälle). Klicke hier, um sie mit der Maus oder der Tastatur auszurichten.
el: Κάποια είδη συμβόλων πρέπει να προσανατολιστούν (π.χ. κλίσεις). Κάντε κλικ εδώ να ορισθεί ο προσανατολισμός είτε από το πληκτρολόγιο είτε με το ποντίκι.
en: Some symbol types must be orientated (i.e: gradients). Click here to orientate them using mouse or keyboard.
es: Hay tipos de símbolo que deben ser orientados (p.ej, pendientes). Haz clic aquí para orientarlos con ratón o teclado.
it: Ci sono tipi di simboli che sono orientati (per es. gradiente). Premi qui per orientarli col mouse o la tastiera
pt: Há tipos de símbolos que devem ser orientados (exemplo: declividade da galeria). Você poderá definir a orientação com o mouse ou digitando um valor.
ru: Некоторые типы символов должны быть ориентированы (например gradient). Нажмите здесь для придания им ориентации с помощью мыши или клавиатуры.
sk: Sú symboly, ktorým treba zadať orientáciu (napr. gradiet). Označte túto voľbu a nastavte orientáciu myšou alebo z klávesnice.
sq: disa lloje te simboleve duhet te orientohen (p.sh.:gradienti). Kliko ketu qe ti orientosh me mi apo tastature.
zh_CN: 有些符号类型具有特定方向性,如坡度。点击此处用鼠标或键盘给定方向。

therion: x-size
bg: х-размер
cz: x-rozsah
de: x-Größe
el: μέγεθος x
en: x-size
es: tamaño-x
it: dim. x
pt: tamanho x
ru: x-size
sk: veľkosť-x
sq: madhesia-X
zh_CN: x-大小

therion: Set point size in main direction.
bg: Укажете размера на точката в главното направление.
cz: Nastaví rozsah bodu v hlavním směru.
de: Setze Punktgröße in Hauptrichtung.
el: Ορισμός πλευρικού μεγέθους σημείου
en: Set point size in main direction.
es: Ajustar tamaño del punto en dirección principal.
it: Imposta la dimensione del punto nella direzione principale.
pt: Defina o tamamho do ponto na direção principal.
ru: Установить размер точки в главном направлении.
sk: Nastavte veľkosť bodu v hlavnom (X) smere.
sq: vene madhesine e pikes ne drejtimin kryesor.
zh_CN: 在主向设置点大小

therion: Enter point size in main direction.
bg: Въведете размера на точката в главното направление.
cz: Zadejte rozsah bodu v hlavním směru.
de: Punktgröße in Hauptrichtung eingeben.
el: Εισαγωγή πλευρικού μεγέθους σημείου
en: Enter point size in main direction.
es: Introducir tamaño del punto en dirección principal.
it: Scrivi la dimensione del punto nella direzione principale.
pt: Entre o tamanho do ponto na direção principal.
ru: Введите размер точки в главном направлении.
sk: Zadajte veľkosť bodu v hlavnom (X) smere.
sq: fute madhesine e pikes ne drejtimin kryesor.
zh_CN: 在主向输入点大小

therion: y-size
bg: y-размер
cz: y-rozsah
de: y-Größe
el: μέγεθος y
en: y-size
es: tamaño-y
it: dim. y
pt: tamanho y
ru: y-size
sk: veľkosť-y
sq: madhesia-Y
zh_CN: y-大小

therion: Set point size in side direction.
bg: Укажете размера на точката в обратното направление.
cz: Nastaví rozsah bodu ve vedlejším směru.
de: Setze Punktgröße in seitlicher Richtung.
el: Ορισμός πλευρικού μεγέθους σημείου
en: Set point size in side direction.
es: Ajustar tamaño del punto en dirección lateral.
it: Imposta la dimensione del punto nella direzione trasversale.
pt: Defina o tamamho do ponto na direção lateral.
ru: Установить размер точки в боковом направлении.
sk: Nastavte veľkosť bodu vo vedľajšom smere.
sq: vene madhesine e pikes ne drejtim anesore.
zh_CN: 在侧向设置点大小

therion: Enter point size in side direction.
bg: Въведете размера на точката в обратното направление.
cz: Zadejte rozsah bodu ve vedlejším směru.
de: Punktgröße in seitlicher Richtung eingeben.
el: Εισαγωγή πλευρικού μεγέθους σημείου
en: Enter point size in side direction.
es: Introducir tamaño del punto en dirección lateral.
it: Scrivi la dimensione del punto nella direzione trasversale.
pt: Entre o tamanho do ponto na direção lateral.
ru: Введите размер точки в боковом направлении.
sk: Zadajte veľkosť bodu vo vedľajšom smere.
sq: fute madhesine e pikes ne drejtim anesore.
zh_CN: 在侧向输入点大小

therion: loading line module ...
bg: зареждане на модула за линии ...
cz: nahrávám křivkový modul ...
de: Lade Linienmodul ...
el: φόρτιση ενότητας γραμμών...
en: loading line module ...
es: líneas ...
it: modulo linee ...
pt: carregando módulo de linhas...
ru: загрузка модуля линий ...
sk: nahrávam modul kriviek ...
sq: duke lexuar modulin e rrjeshtit…
zh_CN: 线模块载入中…

therion: Line type.
bg: Тип на линия.
cz: Typ křivky.
de: Linientyp.
el: Είδος γραμμής
en: Line type (click on triangle to see menu).
es: Tipo de línea. Clic en triángulo para ver el menú.
it: Tipo di linea.
pt: Tipo de linha.
ru: Тип линии.
sk: Typ krivky.
sq: lloji I rrjeshtit.
zh_CN: 线类型

therion: id
bg: id - индетификатор
cz: id
de: id
el: ID
en: id
es: ID
it: Identificativo
pt: id
ru: id - индетификатор
sk: id
sq: ID-identifikimi
zh_CN: ID

therion: Line identifier.
bg: Индетификатор на линия
cz: Identifikátor křivky.
de: Linienbezeichner.
el: ID γραμμής.
en: Line identifier.
es: Nombre (ID) de la línea.
it: Identificativo della linea.
pt: Identificador da linha.
ru: Идентификатор линии
sk: Identifikátor krivky.
sq: identifikimi I rrjeshtit.
zh_CN: 线识别

therion: Other line options.
bg: Други опции на линията
cz: Další volby pro křivku.
de: Andere Linienoptionen.
el: Άλλες επιλογές γραμμής. Δηλαδή για μη-εμφάνιση γραμμής γράφετε εδώ: -subtype invisible. Βλέπετε το thbook.pdf
en: Other line options. I.e., to make line invisible, write here: -subtype invisible. See thbook.pdf
es: Otras opciones de línea. P. ej: para hacerla invisible, escribe: -subtype invisible (consultar thbook.pdf)
it: Altre opzioni della linea.
pt: Outras opções da linha.
ru: Прочие опции линии
sk: Ďalšie možnosti pre krivku.
sq: opcionet tjera te rrjeshtit.
zh_CN: 其它线选项

therion: Reverse line.
bg: Обърни линията
cz: Obrátit křivku.
de: Linie umkehren.
el: Αναστροφή γραμμής. Σε περίπτωση που τα σημαδάκια είναι ανάποδα, κάντε κλικ εδώ.
en: Reverse line. If symbol's ticks are on bad side, click here.
es: Invertir línea. Si p.ej el símbolo de resalte aparece al revés, haz clic aquí.
it: Inverti la linea.
pt: Inverter linha.
ru: Задать обратное направление для линии.
sk: Otočiť krivku.
sq: rrjeshti I pasem-I kthyer
zh_CN: 反向线

therion: Close line.
bg: Затвори линията с началото и.
cz: Uzavřít křivku.
de: Linie schließen.
el: Κλείσιμο γραμμής
en: Close line.
es: Cerrar línea (o sea, unir último punto con el primero para definir un espacio cerrado).
it: Chiudi la linea.
pt: Fechar a linha.
ru: Замкнуть линию на её же начало.
sk: Uzavrieť krivku.
sq: mbylle rrjeshtin.
zh_CN: 关闭线

therion: Insert/delete line point. Split line.
bg: Вмъкване/триене на точка. Разделяне на линия.
cz: Vložení/smazání bodu křivky. Rozdělení křivky.
de: Punkt auf Linie eingeben/löschen. Linie teilen.
el: Εισαγωγή και διαγραφή σημείων γραμμής. Διαίρεση γραμμής.
en: Insert/delete line point. Split line.
es: Permite añadir o borrar puntos de la línea, o cortar la línea en dos.
it: Inserisci/rimuovi un punto della linea. Dividi la linea.
pt: Inserir/apagar ponto da linha. Quebrar linha.
ru: Вставка/удаление точки, разделение линии.
sk: Vloženie/odstránenie bodu krivky. Rozdelenie krivky.
sq: fute/fshije piken e rrjeshtit. Ndaje rrjeshtin.
zh_CN: 插入/删除点线。分割线。

therion: Click this button to apply line changes.
bg: Натиснете този бутон за да приложите измененията на линията.
cz: Aktualizuje křivku.
de: Klicke diesen Knopf, um Linienänderungen anzuwenden.
el: Κάντε κλικ για να γίνει εφαρμογή των αλλαγών στην γραμμή.
en: Click this button to apply line changes.
es: Clicar aquí tras modificar las propiedades de la línea.
it: Primi questo bottone per fare modifiche alla linea.
pt: Aplicar as mudanças à linha atual.
ru: Нажмите эту кнопку для применения изменений линии.
sk: Aktualizuje krivku.
sq: kliko kete buton te aktualizosh nderrimet e rrjeshtit.
zh_CN: 点此按钮,应用线改动。

therion: Select line point.
bg: Избери една от точките на линията.
cz: Výběr bodu křivky.
de: Punkt auf Linie auswählen.
el: Αυτά είναι τα επιλεγμένα σημεία γραμμών. Κάντε κλικ σε όποιο σας ενδιαφέρει για να εμφανιστεί ως επιλεγμένο στον καμβά.
en: These are selected line points. Click on any to get it selected on canvas.
es: Lista de puntos que forman esta línea. Clic para resaltar el punto en la topo.
it: Seleziona un punto della linea.
pt: Selecione ponto da linha.
ru: Выбрать одну из точек линии.
sk: Výber bodu krivky.
sq: selekto piken e rrjeshtit.
zh_CN: 选择点线

therion: loading line point module ...
bg: зареждане на модула линейни точки ...
cz: nahrávám modul pro body křivky ...
de: Lade Linienpunktmodul ...
el: φόρτιση ενότητας σημείων γραμμών...
en: loading line point module ...
es: puntos de línea ...
it: caricando il modulo dei punti di linea ...
pt: carregando módulo de pontos de linha...
ru: загрузка модуля точек линии ...
sk: nahrávam modul pre body krivky ...
sq: duke lexuar modulin e pikes se rrjeshtit.
zh_CN: 点线模块载入中...

therion: position
bg: позиция
cz: pozice
de: Position
el: θέση
en: position
es: posición
it: posizione
pt: posição
ru: позиция
sk: poloha
sq: pozicioni
zh_CN: 位置

therion: Point position.
bg: Позиция на точката.
cz: Pozice bodu.
de: Punktposition.
el: Θέση σημείου
en: Point position.
es: Posición del punto.
it: Posizione del punto.
pt: Posição do ponto.
ru: Позиция точки.
sk: Poloha bodu.
sq: pozicioni I pikes.
zh_CN: 点位置

therion: Point X coordinate.
bg: X координата на точката.
cz: souřadnice X bodu.
de: Punkt X-Koordinate.
el: Συντεταγμένη Χ σημείου
en: Point X coordinate.
es: Coordenada X del punto.
it: Coordinata X del punto.
pt: Coordenada X do ponto.
ru: X координата точки.
sk: X súradnica bodu.
sq: pika X e koordinates.
zh_CN: 点X坐标

therion: Point Y coordinate.
bg: Y координата на точката.
cz: souřadnice Y bodu.
de: Punkt Y-Koordinate.
el: Συντεταγμένη Υ σημείου
en: Point Y coordinate.
es: coordenada Y del punto.
it: Coordinata Y del punto.
pt: Coordenada Y do ponto.
ru: Y координата точки.
sk: Y súradnica bodu.
sq: pika Y e koordinates.
zh_CN: 点Y坐标

therion: Previous control point X coordinate.
bg: X координата на предишната управляваща точка.
cz: Souřadnice X předchozího řídícího bodu.
de: Vorherige X-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Χ προηγούμενου σημείου ελέγχου
en: Previous control point X coordinate.
es: Coordenada X del punto de control anterior.
it: Coordinata X del punto di controllo precedente.
pt: Coordenada X do ponto de controle anterior.
ru: X координата предыдущей управляющей точки.
sk: X súradnica predchádzajúceho kontrolného bodu.
sq: pika e kontrollit te meparshem te koordinates X
zh_CN: 上一处X坐标控制点

therion: Previous control point Y coordinate.
bg: Y координата на предишната управляваща точка.
cz: Souřadnice Y předchozího řídícího bodu.
de: Vorherige Y-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Υ προηγούμενου σημείου ελέγχου
en: Previous control point Y coordinate.
es: Coordenada Y del punto de control anterior.
it: Coordinata Y del punto di controllo precedente.
pt: Coordenada Y do ponto de controle anterior.
ru: Y координата предыдущей управляющей точки.
sk: Y súradnica predchádzajúceho kontrolného bodu.
sq: pika e kontrollit te meparshem te koordinates-Y
zh_CN: 上一处Y坐标控制点

therion: Next control point X coordinate.
bg: X координата на следващата управляваща точка.
cz: Souřadnice X následujícího řídícího bodu.
de: Nächste X-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Χ επόμενου σημείου ελέγχου
en: Next control point X coordinate.
es: Coordenada X del siguiente punto de control.
it: Coordinata X del prossimo punto.
pt: Coordenada X do ponto de controle posterior.
ru: X координата следующей управляющей точки.
sk: X súradnica nasledujúceho kontrolného bodu.
sq: pika e ardhshme kontrollit te coordinates X
zh_CN: 下一处X坐标控制点

therion: Next control point Y coordinate.
bg: Y координата на следващата управляваща точка.
cz: Souřadnice Y následujícího řídícího bodu.
de: Nächste Y-Koordinate eines Kontrollpunkts.
el: Συντεταγμένη Υ επόμενου σημείου ελέγχου
en: Next control point Y coordinate.
es: Coordenada Y del siguiente punto de control.
it: Coordinata Y del prossimo punto.
pt: Coordenada y do ponto de controle posterior.
ru: Y координата следующей управляющей точки.
sk: Y súradnica nasledujúceho kontrolného bodu.
sq: pika e ardhshme kontrollit te coordinates Y
zh_CN: 下一处Y坐标控制点

therion: Checkbox whether to use previous control point.
bg: Поставете отбелязка за използване на предишната управляваща точка.
cz: Zaškrtněte pokud chcete pro tvar křivky použít předchozí řídící bod.
de: Auswahl, ob vorheriger Kontrollpunkt benutzt wird.
el: Επιλογή για χρήση προηγούμενου σημείου ελέγχου
en: Checkbox whether to use previous control point.
es: Usar punto de control anterior.
it: Checkbox per usare il punto di controllo precedente.
pt: Habilitar ponto de controle anterior.
ru: Поставьте галочку для использования предыдущей управляющей точки.
sk: Použi predchádzajúci kontrolný bod.
sq: kutia-kontrollit a duhet te perdoret pika e kontrollit e meparshme
zh_CN: 复选框,是否使用上一处控制点

therion: Set line to be smooth in given point.
bg: Установете за изглаждане на линията в дадената точка.
cz: Nastaví hladkou křivku v daném bodě.
de: Setze Linie auf geglättet am gegebenen Punkt.
el: Ορισμός απαλής καμπύλης στο επόμενο σημείο της γραμμής
en: Set line to be smooth in given point.
es: Suavizar la línea en el punto seleccionado.
it: Imposta la linea ad essere regolare nelpunto specificato.
pt: Forçar que a linha seja suave.
ru: Установите для сглаживания линии в данной точке.
sk: Nastaví kontrolné body tak, aby krivka bola v danom bode hladká.
sq: vene rrjeshtin per te qene I bute ne piken e dhanun
zh_CN: 设置控制点,使该曲线平滑。

therion: Checkbox whether to use next control point.
bg: Поставете отбелязка за използване на следващата управляваща точка.
cz: Zaškrtněte pokud chcete pro tvar křivky použít následující řídící bod.
de: Auswahl, ob nächster Kontrollpunkt benutzt wird.
el: Επιλογή για χρήση επόμενου σημείου ελέγχου
en: Checkbox whether to use next control point.
es: Usar siguiente punto de control.
it: Checkbox per usare il prossimo punto di controllo.
pt: Habilitar ponto de controle posterior.
ru: Поставьте галочку для использования следующей управляющей точки.
sk: Použi nasledujúci kontrolný bod.
sq: kutia-kontrollit a duhet te perdoret pika e kontrollit e ardhshme
zh_CN: 复选框,是否使用下一处控制点

therion: Set line point orientation.
bg: Укажете ориентацията на точка на линията.
cz: Nastaví orientaci bodu.
de: Setze Ausrichtung des Linienpunkts.
el: Ορισμός προσανατολισμού σημείου γραμμής
en: Set line point orientation.
es: Ajustar dirección en que apunta un punto de la línea (p.ej una pendiente).
it: Imposta l'orientazione del punto della linea.
pt: Definir uma orientação para este ponto da linha.
ru: Установите ориентацию точки линии.
sk: Nastaví orientáciu symbolov v bode krivky.
sq: vene orientimin e pikes se rrjeshtit
zh_CN: 设置点线指向

therion: Enter line point orientation.
bg: Въведете ориентацията на точка на линията.
cz: Zadejte orientaci bodu.
de: Ausrichtung des Linienpunkts eingeben.
el: Εισαγωγή προσανατολισμού σημείου γραμμής
en: Enter line point orientation.
es: Introducir dirección señalada por el punto.
it: Scrivi l'orientazione del punto della linea.
pt: Entre um ângulo (orientação) para este ponto da linha.
ru: Введите ориентацию точки линии.
sk: Zadaj orientáciu symbolov v bode krivky.
sq: fute orientimin e pikes se rrjeshtit
zh_CN: 输入点线指向

therion: r-size
bg: r-размер
cz: p-rozsah
de: r-Größe
el: διάσταση (δ)
en: r-size
es: anchura-dcha
it: dim. destra
pt: tam. dir.
ru: r-size
sk: rozmer-p
sq: r-madhesia
zh_CN: r-大小

therion: Set line size in right direction.
bg: Укажете размера на линията в направление надясно.
cz: Nastaví rozsah křivky v pravém směru.
de: Setze Liniengröße nach rechts.
el: Ορισμός διάστασης γραμμής προς τα δεξιά
en: Set line size in right direction.
es: Ajustar anchura de línea (lado derecho de la línea).
it: Imposta la dimensione della linea a destra.
pt: Definir o tamanho da linha na direção direita.
ru: Установите размер линии в правом направлении.
sk: Nastaví veľkosť symbolov napravo od krivky.
sq: cakto madhesine e rrjeshtit ne drejtim te djathte
zh_CN: 在右向设置线大小

therion: Enter line size in right direction.
bg: Въведете размера на линията в направление надясно.
cz: Zadejte rozsah křivky v pravém směru.
de: Liniengröße nach rechts eingeben.
el: Εισαγωγή διάσταση γραμμής προς τα δεξιά
en: Enter line size in right direction.
es: Introducir anchura de línea (lado derecho de la línea).
it: Scrivi la dimensione della linea a destra.
pt: Entre o tamanho da linha na direção direita.
ru: Введите размер линии в правом направлении.
sk: Zadaj veľkosť symbolov napravo od krivky.
sq: fute madhesine e rjeshtit ne drejtim te djathte
zh_CN: 在右向输入线大小

therion: Set line size in left direction.
bg: Укажете размера на линията в направление наляво.
cz: Nastaví rozsah křivky v levém směru.
de: Setze Liniengröße nach links.
el: Ορισμός διάστασης γραμμής προς τα αριστερά
en: Set line size in left direction.
es: Ajustar anchura de línea (lado izquierdo de la línea). El tipo slope necesita este valor.
it: Imposta la dimensione della linea a sinistra.
pt: Definir o tamanho da linha na direção esqierda.
ru: Установите размер линии в левом направлении.
sk: Nastaví veľkosť symbolov naľavo od krivky.
sq: cakto madhesine e rjeshtit ne drejtim te majte
zh_CN: 在左向设置线大小

therion: Enter line size in left direction.
bg: Въведете размера на линията в направление наляво.
cz: Zadejte rozsah křivky v levém směru.
de: Liniengröße nach links eingeben.
el: Εισαγωγή διάσταση γραμμής προς τα αριστερά
en: Enter line size in left direction.
es: Introducir anchura de línea (lado izquierdo de la línea). El tipo slope necesita este valor.
it: Scrivi la dimensione della linea a sinistra.
pt: Entre o tamanho da linha na direção esquerda.
ru: Введите размер линии в левом направлении.
sk: Zadaj veľkosť symbolov naľavo od krivky.
sq: fute madhesine e rjeshtit ne drejtim te majte
zh_CN: 在左向输入线大小

therion: Line point options editor.
bg: Редактор на опциите на точка на линията.
cz: Volby bodu křivky.
de: Linienpunktoptionen bearbeiten.
el: Επεξεργαστής επιλογών σημείων γραμμών
en: Line point options editor.
es: Editor de puntos pertenecientes a la línea seleccionada. Consultar thbook.pdf
it: Editor delle opzioni del punto della linea.
pt: Editor de opções de ponto de linha.
ru: Редактор опций точки линии.
sk: Editor ďalších možností bodu krivky.
sq: opcioni I editimit te pikes se rjeshtit
zh_CN: 点线选项编辑器

therion: Click this button to apply line point changes.
bg: Натисмете този бутон за прилагане на промените в/у точка на линията.
cz: Aktualizovat bod křivky.
de: Klicke diesen Knopf, um Änderungen am Linienpunkt anzuwenden.
el: Πατήστε εδώ για να γίνει εφαρμογή των αλλαγών στο σημείο της γραμμής.
en: Click this button to apply line point changes.
es: Clicar tras modificar las propiedades de los puntos de una línea.
it: Premi questo bottone per fare modifiche ai punti della linea.
pt: Aplicar as mudanças ao ponto de linha atual.
ru: Нажмите эту кнопку для применения изменений точки линии.
sk: Aktializácia bodu krivky.
sq: kliko kete buton per te bere ndrimet e pikes se rjeshtit
zh_CN: 点击按钮,应用点线改动

therion: Editor for line point options.
bg: Редактор за опциите на точка на линията.
cz: Editor voleb bodu křivky.
de: Edditor für Linienpunktoptionen.
el: Εδώ μπορείτε να εισάγετε επιλογές για τα σημεία των γραμμών.
en: Here you can enter options that will apply to line points.
es: Aquí se pueden meter opciones que afectarán a los puntos de esta línea.
it: Editor delle opzioni del punto della linea.
pt: Editor de opções de ponto de linha.
ru: Редактор опций точки линии.
sk: Editor ďalších možností bodu krivky.
sq: ketu mund te futni opcionet te cilat do te vlejne per pikat e rrjeshtit
zh_CN: 点线选项编辑器

therion: loading area module ...
bg: зареждане на модула за области ...
cz: nahrávám modul pro oblasti ...
de: Lade Flächenmodul ...
el: φορτίζεται η ενότητα επιφανειών...
en: loading area module ...
es: áreas...
it: modulo aree ...
pt: carregando módulo de área...
ru: загрузка модуля областей ...
sk: nahrávam modul pre plochy ...
sq: duke lexuar modulin e fushes…
zh_CN: 区模块载入中…

therion: Actual symbol theme.
bg: Актуален набир на символи
cz: Aktuální téma symbolů.
de: Aktueller Symbolsatz.
el: Σύμβολο
it: Simboli.
pt: Conjunto de símbolos atual.
ru: Фильтр группы символов.
sk: Aktuálna téma symbolov.
sq: tema aktuale e simbolit.
zh_CN: 当前符号集

therion: Area type.
bg: Тип на областта
cz: Typ oblasti.
de: Flächentyp.
el: Είδος επιφάνειας
en: Area type (click on triangle to see menu).
es: Tipo de área. Clic en triángulo para ver el menú.
it: Tipo dell'area
pt: Tipo de área.
ru: Тип области.
sk: Typ plochy.
sq: lloji I fushes.
zh_CN: 区类型

therion: options
bg: опции
cz: volby
de: Optionen
el: επιλογές
en: options
es: opciones
it: opzioni
pt: opções
ru: опции
sk: možnosti
sq: opcionet
zh_CN: 选项

therion: Other area options.
bg: Други опции на областта.
cz: Další volby pro oblast.
de: Andere Flächenoptionen.
el: Άλλες επιλογές επιφανειών. Βλ. thbook.pdf
en: Other area options. See thbook.pdf
es: Otras opciones de área. Consultar thbook.pdf
it: Altre opzioni dell'area.
pt: Outras opções de área.
ru: Другие опции области.
sk: Ďalšie možnosti plochy.
sq: opcionet tjera te fushes.
zh_CN: 其它区选项

therion: Select lines
bg: Избор на линии
cz: Vyber křivky
de: Linien auswählen
el: Επιλογή γραμμών
en: Select lines
es: Seleccionar
it: Selezione linee
pt: Selecione linhas
ru: Выбор линий.
sk: Vyber krivky
sq: selekto rjeshtat
zh_CN: 选择线

therion: Switch to insert line into area mode.
bg: Превключи в режим поставяне на линии-граници в областта.
cz: Výběr ohraničujících křivek oblasti.
el: Αφού πατήστε εδώ, επιλέγετε με το ποντίκι τις γραμμές ορίων της επιφάνειας (πρέπει να τέμνονται)
en: After clicking here, select by mouse this area border lines (they must intersect).
es: Tras clicar aquí, con el ratón puedes seleccionar líneas que limiten un área (deben cortarse entre sí).
it: Cambia per inserire linee nell'area.
pt: Ative o modo de inserção de linhas
ru: Переключится в режим вставки линий-границ в область.
sk: Po stlačení môžete začať vkladať krivky ohraničujúce plochu.
sq: pasi te klikoni ketu, selekto me mi rjeshtat e kufirit te fushes (ato duhet te nderlidhen)
zh_CN: 切换线插区模块

therion: Delete ID from area.
bg: Изтрий линия по ID от областта.
cz: Odstranění objektu z oblasti.
de: Lösche ID aus Fläche.
el: Διαγραφή ID από επιφάνεια
en: Delete selected line from list (will not be part of area borders)
es: Borrar la línea seleccionada de la lista (dejará de limitar este área).
it: Rimuovi identificativo dall'area.
pt: Remova ID da área.
ru: Удалить линию по ID из области.
sk: Odstrániť krivku z daným ID z plochy.
sq: fshije ID prej fushes
zh_CN: 从列表中删除给定的线(不属于区边界的部分)

therion: Insert ID
bg: Вмъкни по ID
cz: Vlož ID
de: ID einfügen
el: Εισαγωγή ID
en: Insert ID
es: Insertar ID
it: Identificativo
pt: Inserir ID
ru: Вставить по ID
sk: Vlož ID
sq: fute ID-ne
zh_CN: 插入ID

therion: Insert given id.
bg: Вмъкни линия-граница по зададено ID.
cz: Vloží objekt s daným ID.
de: Angegebene ID einfügen.
el: Εισαγωγή ID άλλο από το προκαθορισμένο του Xtherion
en: Insert given id instead of Xtherion default.
es: Insertar nombre (ID) indicado, no el nombre que therion crea automáticamente
it: Inserisci l'identificativo specificato
pt: Insira o id indicado.
ru: Вставить линию-границу по заданному ID.
sk: Vložiť ID krivky do zoznamu kriviek ohraničujúcich plochu.
sq: fute ID-n e dhene ne vend te X-therion
zh_CN: 插入指定的ID

therion: ID to insert.
bg: ID за вмъкване
cz: ID objektu ke vložení.
de: einzufügende ID.
el: Εισαγωγή ID.
en: ID to insert.
es: Escribir el nombre (ID) a insertar.
it: Identificativo da inserire.
pt: ID a ser inserido.
ru: ID линии для вставки
sk: ID na vloženie.
sq: ID-ja per tu futur.
zh_CN: 插入的ID

therion: Update
bg: Обнови
cz: Aktualizovat
de: Aktualisieren
el: Εμημέρωση
en: Update
es: Actualizar
it: Aggiorna
pt: Atualizar
ru: Обновить
sk: Aktualizovať
sq: aktualizo
zh_CN: 更新

therion: Click this button to apply changes you made to area.
bg: Натиснете този бутон за да приложите промените, направени в областта.
cz: Aktualizace oblasti.
de: Klicke diesen Knopf, um Änderungen an einer Fläche anzuwenden.
el: Κάντε κλικ να γίνει εφαρμογή των αλλαγών που κάνατε στην επιφάνεια.
en: Click this button to apply changes you made to area.
es: Clicar aquí después de modificar las propiedades de un área.
it: Premi questo bottone per fare modifiche all'area.
pt: Aplicar as mudanças à área atual.
ru: Нажмите эту кнопку для применения изменений сделанных для области.
sk: Aktualizovať plochu.
sq: kliko kete buton te aktualizosh ndrimet te cilat I ke bere ne fushe
zh_CN: 点此按钮,将改动应用到区。

therion: Show
bg: Покажи
cz: Zobrazit
de: Zeige
el: Εμφάνιση
en: Show
es: Mostrar
it: Mostra
pt: Mostrar
ru: Показать
sk: Zobraziť
sq: trego
zh_CN: 显示

therion: Show area border lines.
bg: Покажи границите на областта.
cz: Zobrazí hranice oblasti.
de: Zeige Flächenbegrenzungen.
el: Εμφάνιση γραμμών ορίων επιφάνειας
en: Show area border lines.
es: Mostrar líneas límite de área.
it: Mostra le linee del bordo dell'area.
pt: Mostrar as linhas limítrofes da área.
ru: Показать линии-границы для области.
sk: Zobraz hranice plochy.
sq: trego kufirin e vijave te fushes.
zh_CN: 显示区边界线

therion: Select line in area.
bg: Избери линия.
cz: Výběr křivky ohraničující oblast
de: Wähle Linie in Fläche.
el: Κάντε κλικ σε οποιαδήποτε γραμμή του καταλόγου για να επιλεχθεί η αντίστοιχη γραμμή ορίου επιφάνειας στον καμβά.
en: Click on any list line to get corresponding area border line selected on canvas.
es: Cada renglón de la lista corresponde a una línea que limita esta área
it: Seleziona una linea nell'area.
pt: Selecionar linha da área.
ru: Выбор линии.
sk: Vyber hraničnú krivku.
sq: kliko ne cilindo rrjesht te listes qe te kesh rrjeshtin kufizues te fushes pershtatese, I zgjedhur ne pelhure
zh_CN: 选择区中线

therion: loading main menu ...
bg: Зареждане на главното меню ...
cz: nahrávám hlavní menu ...
de: Lade Hauptmenü ...
el: φόρτιση κύριου μενού
en: loading main menu ...
es: menú principal ...
it: menù principale ...
pt: carregando menu principal...
ru: загрузка главного меню ...
sk: nahrávam hlavné menu ...
sq: duke lexuar menyn kryesore…
zh_CN: 主菜单载入中 ...

therion: Open (no pics)
bg: Отвори (без изображения)
cz: Otevřít (bez obrázků)
de: Öffne (keine Bilder)
el: Άνοιγμα (χωρίς εικόνες)
en: Open (no pics)
es: Abrir (sin imágenes)
it: Apri (no pics)
pt: Abrir (menos imagens)
ru: Открыть (без картинок)
sk: Otvoriť (bez obrázkov)
sq: hape (pa foto)
zh_CN: 打开(无图片)

therion: Insert ...
bg: Вмъкни ...
cz: Vložit ...
de: Einfügen ...
el: Εισαγωγή...
en: Insert ...
es: Insertar ...
it: Inserisci ...
pt: Inserir...
ru: Вставка...
sk: Vložiť ...
sq: fute…
zh_CN: 插入 ...

therion: point
bg: точка
cz: bod
de: Punkt
el: σημείο
en: point
es: punto
it: punto
pt: ponto
ru: точка
sk: bod
sq: pika
zh_CN: 点

therion: line
bg: линия
cz: křivka
de: Linie
el: γραμμή
en: line
es: línea
it: linea
pt: linha
ru: линия
sk: krivku
sq: vija apo rjeshti
zh_CN: 线

therion: area
bg: област
cz: oblast
de: Fläche
el: επιφάνεια
en: area
es: área
it: area
pt: área
ru: область
sk: plochu
sq: fusha
zh_CN: 区

therion: scrap
bg: скрап
cz: scrap
de: Skizze
el: σκραπ
en: scrap
es: croquis
it: scrap
pt: trecho
ru: скрап
sk: scrap
sq: deponia
zh_CN: 草图

therion: Auto adjust area
bg: Автоматична настройка на област
cz: Přizpůsobit plochu
de: Fläche automatisch anpassen
el: Αυτόματη ρύθμιση επιφάνειας
en: Auto adjust area
es: Autoajustar área
it: Auto-ridimensiona area
pt: Ajuste automático de área
ru: Автоподгонка границ зоны рисования.
sk: Prispôsob plochu
sq: fusha automatikisht e pershtatur
zh_CN: 自动调整区

therion: Insert image
bg: Вмъкни изображение
cz: Vložit obrázek
de: Bild einfügen
el: Εισαγωγή εικόνας
en: Insert image
es: Insertar imagen
it: Inserisci immagine
pt: Inserir imagem
ru: Вставить изображение
sk: Vložiť obrázok
sq: fute imazhin
zh_CN: 插入图像

therion: Hide inactive scraps
cz: Skrýt neaktivní scrapy
pt: Esconder trechos inativos
ru: Скрыть неактивные скрапы
sk: Skryť neaktívne scrapy

therion: Zoom 100 %
bg: Мащаб 100%
cz: Zoom 100 %
el: Μεγέθυνση 100%
en: Zoom 100 %
es: Zoom 100%
it: Zoom 100 %
pt: Zoom 100%
ru: Масштаб 100 %
sk: Zoom 100%
sq: zmadho 100%
zh_CN: 缩放100 %

therion: Mouse mode.
bg: Режим 'мишка'.
cz: Klikací režim.
de: Mausmodus.
el: Λειτουργία ποντικιού.
en: Mouse mode.
es: Modo ratón.
it: Modalità del mouse.
pt: Modo do mouse.
ru: Режим мыши.
sk: Mód myši.
sq: miu ne funkcion
zh_CN: 鼠标模块

therion: Current mouse position.
bg: Текуща позиция на курсора.
cz: Aktuální pozice ukazatele myši.
de: Aktuelle Mausposition.
el: Τρέχουσα θέση ποντικιού.
en: Current mouse position.
es: Posición actual del ratón.
it: Posizione del mouse.
pt: Posição atual do mouse.
ru: Текущая позиция указателя мыши.
sk: Aktuálna poloha myši.
sq: pozicioni aktual I miut.
zh_CN: 当前鼠标位置

therion: loading line procs ...
bg: зареждане на процедурите за линия ...
cz: zpracovávám křivky ...
el: φόρτιση γραμμικών διαδικασιών...
en: loading line procs ...
es: procesos de línea ...
it: procedure di linea ...
pt: carregando procedimentos relacionados a linhas...
ru: загрузка процедур для линий ...
sk: načitavam modul kriviek ...
sq: duke lexuar proceduren rjeshtit…
zh_CN: 线程序载入中 ...

therion: Map editor is not active. To activate it, open existing file or create new one.
bg: Редактора на карти не е активен. За активиране отворете съществуващ файл или създайте нов.
cz: Mapový editor není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Karteneditor ist nicht aktiv. Um ihn zu aktivieren, lade eine existierende Datei oder lege eine neue an.
el: Ο επεξεργαστής σχεδίου δεν είναι ενεργός. Για να τον ενεργοποιήσετε, ανοίξτε ένα αρχείο ή δημιουργήστε νέο.
en: Map editor is not active. To activate it, open existing file or create new one.
es: El editor de mapas está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'editor di mappa non è attivo. Per attivarlo apri un file o creane uno.
pt: O editor de mapas não está ativo. Para ativá-lo, abra um arquivo existente ou crie um novo.
ru: Редактор карты не активен. Для активации откройте существующий файл или создайте новый.
sk: Mapový editor nie je aktívny. Otvorte existujúci súbor alebo vytvorte nový.
sq: permiresuesi I hartes nuk eshte aktiv. Qe ta aktivizosh, hape fajlin egzistues ose krijo nje te ri
zh_CN: 地图编辑器没有启动。打开现有文件或创建新文件启动它。

therion: Insert line
bg: Вмъкни линия
cz: Vložit křivku
de: Linie einfügen
el: Εισαγωγή γραμμής
en: Insert line
es: Insertar línea
it: Inserisci linea
pt: Inserir linha
ru: Вставить линию
sk: Vložiť krivku
sq: fute rjeshtin-vijen
zh_CN: 插入线

therion: Insert scrap
bg: Вмъкни скрап
cz: Vložit scrap
de: Skizze einfügen
el: Εισαγωγή σκραπ
en: Insert scrap
es: Insertar croquis
it: Inserisci scrap
pt: Inserir trecho
ru: Вставить скрап
sk: Vložiť scrap
sq: fute deponin
zh_CN: 插入草图

therion: Insert text
bg: Вмъкни текст
cz: Vložit text
de: Text einfügen
el: Εισαγωγή κειμένου
en: Insert text
es: Insertar texto
it: Inserisci testo
pt: Inserir texto
ru: Вставить текст
sk: Vložiť text
sq: fute tekstin
zh_CN: 插入文本

therion: Insert area
bg: Вмъкни област
cz: Vložit oblast
de: Fläche einfügen
el: Εισαγωγή επιφάνειας
en: Insert area
es: Insertar área
it: Inserisci area
pt: Inserir área
ru: Вставить область
sk: Vložiť plochu
sq: fute fushen
zh_CN: 插入区

therion: Delete
bg: Изтрий
cz: Smazat
de: Lösche
el: Διαγραφή
en: Delete
es: Borrar
it: Rimuovi
pt: Apagar
ru: Удалить
sk: Odstrániť
sq: fshije
zh_CN: 删除

therion: deleting
bg: изтриване
cz: mazání
de: lösche
el: διαγραφή
en: deleting
es: borrando
it: rimuovendo
pt: apagando
ru: удаление
sk: mazanie
sq: duke fshire
zh_CN: 正在删除

therion: moving command
bg: преместване на команда
cz: přesun příkazu
de: Verschiebebefehl
el: εντολή μετακίνησης
en: moving command
es: desplazando comando
it: comando di spostamento
pt: movendo elemento
ru: перемещение команд
sk: presun príkazu
sq: komanda e levizjes
zh_CN: 移动命令

therion: creating endscrap
bg: създаване край на скрапа
cz: vytvoření konce scrapu
de: Erzeuge Skizzenende
el: δημιουργία τέλους σκραπ (endscrap)
en: creating endscrap
es: creando línea final de croquis (endscrap)
it: creazione endscrap
pt: criando endscrap (marca de fim de trecho)
ru: создание окончания скрапа
sk: vytvorenie konca scrapu
sq: duke kriju fundin e deponise
zh_CN: 创建草图收尾

therion: scrap changes
bg: промяна на скрапа
cz: změna parametrů scrapu
de: Skizzenänderung
el: αλλαγές σκραπ
en: scrap changes
es: cambios del croquis (scrap)
it: modifiche dello scrap
pt: alterações no trecho
ru: изменение скрапа
sk: zmena parametrov scrapu
sq: ndryshimet ne deponi
zh_CN: 草图改动

therion: creating scrap
bg: създаване на скрап
cz: vytvoření scrapu
de: Erzeuge Skizze
el: δημιουργία σκραπ
en: creating scrap
es: creando croquis (scrap)
it: creazione scrap
pt: criando trecho
ru: создание скрапа
sk: vytvorenie scrapu
sq: duke kriju deponin
zh_CN: 创建草图

therion: creating text
bg: създаване на текст
cz: vytvoření textu
de: Erzeuge Text
el: δημιουργία δοκιμής
en: creating text
es: creando texto
it: creazione testo
pt: criando texto
ru: создание текста
sk: vytvorenie textu
sq: duke kriju tekstin
zh_CN: 创建文本

therion: text changes
bg: промяна на текст
cz: změna textu
de: Textänderungen
el: αλλαγές κειμένου
en: text changes
es: cambios de texto
it: modifiche del testo
pt: alterações no texto
ru: изменение текста
sk: zmena textu
sq: ndrimet e tekstit
zh_CN: 文本改动

therion: end point insertion
bg: слагане на точка за край
cz: konec vkládání bodů
de: Endpunkt eingefügt
el: εισαγωγή τελικού σημείου
en: end point insertion
es: final de inserción de punto
it: inserimento punto finale
pt: inserção de ponto final
ru: вставка конечной точки
sk: koniec vkladania bodov
sq: perfundo futjet e pikave
zh_CN: 结束点插入

therion: select object
bg: избор на обект
cz: označ objekt
de: Objekt auswählen
el: επιλογή αντικειμένου
it: seleziona oggetto
pt: selecione objeto
ru: выбор объекта
sk: označ objekt
sq: selekto objektin
zh_CN: 选择对象

therion: Insert
bg: Вмъкни
cz: Vložit
de: Einfügen
el: Εισαγωγή
en: Insert
es: Insertar
it: Inserisci
pt: Inserir
ru: Вставка
sk: Vložiť
sq: fute
zh_CN: 插入

therion: insert point
bg: вмъкни точка
cz: vlož bod
de: Punkt einfügen
el: εισαγωγή σημείου
it: inserisci punto
pt: insira ponto
ru: вставка точки
sk: vlož bod
sq: fute piken
zh_CN: 插入点

therion: insert line point
bg: вмъкни точка от линия
cz: vlož bod křivky
de: Linienpunkt einfügen
el: εισαγωγή σημείου γραμμής
it: inserisci punto di linea
pt: insira ponto de linha
ru: вставка точки линии
sk: vlož bod krivky
sq: fute piken e rjeshtit
zh_CN: 插入点线

therion: insert area border
bg: вмъкни граница на област
cz: vlož hranici plochy
de: Flächenrand einfügen
el: εισαγωγή ορίων επιφάνειας
it: inserisci bordo dell'area
pt: insira limite de área
ru: вставка границы области
sk: vlož okraj plochy
sq: fute kufirin e fushes
zh_CN: 插入区界

therion: Select
bg: Избери
cz: Vyber
de: Auswählen
el: Επιλογή
en: Select
es: Seleccionar
it: Seleziona
pt: Selecione
ru: Выбор
sk: Vybrať
sq: selekto
zh_CN: 选择

therion: scale scrap
bg: мащабиране на скрап
cz: měřítko scrapu
de: Skizze skalieren
el: αλλαγή κλίμακα σκραπ
it: riscala lo scrap
pt: dimensionar trecho
ru: масштабирование скрапа
sk: mierka scrapu
sq: deponia e matjeve
zh_CN: 草图比例

therion: insert sketch
bg: вмъкване на скица
cz: vlož náčrtek
de: Skizze einfügen
el: εισαγωγή σχεδίου
it: inserisci disegno
pt: insira croqui
ru: вставка фона
sk: vlož náčrtok
sq: fute skicen
zh_CN: 插入素描

therion: creating point
bg: създаване на точка
cz: vytvoření bodu
de: Punkt erzeugen
el: δημιουργία σημείου
en: creating point
es: creando punto
it: creazione punto
pt: criando ponto
ru: создание точки
sk: vytvorenie bodu
sq: duke kriju piken
zh_CN: 创建点

therion: area changes
bg: изменение на областта
cz: změna parametrů oblasti
de: Flächenänderungen
el: αλλαγές επιφανειών
en: area changes
es: cambios de área
it: modifiche di area
pt: alterações na área
ru: изменение области
sk: zmena parametrov plochy
sq: ndrimet e fushes
zh_CN: 区改动

therion: point changes
bg: изменение на точка
cz: změna parametrů bodu
de: Punktänderungen
el: αλλαγές σημείων
en: point changes
es: cambios de punto
it: modifiche di punto
pt: alterações no ponto
ru: изменение точки
sk: zmena parametrov bodu
sq: ndrimet e pikes
zh_CN: 点改动

therion: Scrap sketch not inserted.
bg: Не е вмъкната скица в скрапа.
cz: Náčrtek nebyl vložen.
de: Skizze nicht eingefügt.
el: δεν εισήχθη σχέδιο σκραπ
it: Disegno non inerito.
pt: Croqui não foi inserido no trecho.
ru: Фон скрапа не вставлен.
sk: Náčrtok nebol vložený.
sq: skica e deponise nuk eshte futur
zh_CN: 没有插入的草图素描

therion: inserting scrap sketch
bg: вмъкване на скица в скрапа
cz: vkládám náčrtek
de: Füge Skizze ein
el: εισαγωγή σχεδίου σκραπ
it: inserimento disegno
pt: inserindo croqui no trecho
ru: вставка фона скрапа
sk: vloženie náčrtku
sq: duke future skicen e deponise
zh_CN: 插入草图素描

therion: deleting scrap sketch
bg: изтриване на скица от скрапа
cz: odstraňuji náčrtek
de: Lösche Skizze
el: διαγραφή σχεδίου σκραπ
it: rimozione disegno
pt: apagando croqui do trecho
ru: удаление фона скрапа
sk: odstránenie náčrtku
sq: duke fshire skicen e deponise
zh_CN: 删除草图素描

therion: on
pt: sim
ru: вкл
sk: on

therion: off
pt: não
ru: выкл
sk: off

therion: tiny (xs)
pt: ínfimo (pp)
ru: оч.маленький (xs)
sk: XS

therion: small (s)
pt: pequeno (p)
ru: маленький (s)
sk: S

therion: normal (m)
pt: normal (m)
ru: нормальный (m)
sk: M

therion: large (l)
pt: grande (g)
ru: большой (l)
sk: L

therion: huge (xl)
pt: enorme (xl)
ru: оч.большой (xl)
sk: XL

therion: out
pt: fora
ru: наружный
sk: vonkajší

therion: in
pt: dentro
ru: внутренний
sk: vnútorný

therion: none
pt: nenhum
ru: нет
sk: žiadny

therion: <<
pt: <<
ru: <<
sk: <<

therion: smooth
bg: изглаждане
cz: uhladit
de: geglättet
el: απαλή
en: smooth
es: suavizar
it: regolarizza
pt: suave
ru: сгладить
sk: vyhladiť
sq: e bute
zh_CN: 平滑

therion: >>
pt: >>
ru: >>
sk: >>

therion: Trace line
bg: Проследяване от картината
cz: Trasovat linii
en: Trace line
pt: Traçar linha
ru: Проследить линию
sk: Oklikať čiaru

therion: Convert to curve
bg: Конвертиране в Безие
cz: Konvertovat na křivku
en: Convert to curve
pt: Converter em curva
ru: Конвертировать в кривую
sk: Konvertovať na krivku

therion: Simplify line
bg: Опростяване на линия
cz: Zjednodušit linii
en: Simplify line
pt: Simplificar
ru: Упростить линию
sk: Zjednodušiť

therion: edit
bg: редактиране
cz: editovat
de: bearbeiten
el: διόρθωση
en: edit
es: editar
it: edita
pt: editar
ru: редактировать
sk: upraviť
sq: permireso
zh_CN: 编辑

therion: Altitude
bg: Надморска височина
cz: Nadmořská výška
de: Höhe
el: Υψόμετρο
en: Altitude
es: Altitud
it: Quota
pt: Altitude
ru: Высота
sk: Nadmorská výška
zh_CN: 海拔

therion: OK
bg: ОК
cz: OK
de: OK
el: ΟΚ
en: OK
es: OK
it: OK
pt: OK
ru: УСПЕХ
sk: OK
sq: ne rregull-O.K.
zh_CN: 成功

therion: Cancel
cz: Zrušit
pt: Cancelar
ru: Отмена
sk: Zrušiť

therion: painted
pt: pintada
ru: нарисованный
sk: namaľovaný

therion: natural
pt: natural
ru: естественный
sk: prírodný

therion: fixed
pt: fixa
ru: репер
sk: fixovaný

therion: winter
pt: inverno
ru: зима
sk: zimný

therion: summer
pt: verão
ru: лето
sk: letný

therion: undefined
pt: indefinido
ru: не определено
sk: nedefinovaný

therion: paleo
pt: paleo
ru: палео
sk: paleo

therion: top
pt: topo
ru: сверху
sk: hore

therion: top-right
pt: topo-direita
ru: сверху-справа
sk: vpravo-hore

therion: top-left
pt: topo-esquerda
ru: сверху-слева
sk: vľavo-hore

therion: bottom
pt: fundo
ru: снизу
sk: dole

therion: bottom-right
pt: fundo-direita
ru: снизу-справа
sk: vpravo-dole

therion: bottom-left
pt: fundo-esquerda
ru: снизу-слева
sk: vľavo-dole

therion: center
pt: centro
ru: по центру
sk: stred

therion: right
pt: direita
ru: справа
sk: vpravo

therion: left
pt: esquerda
ru: слева
sk: vľavo

therion: auto
pt: auto
ru: авто
sk: automaticky

therion: align
pt: alinhar
ru: выровнить
sk: zarovnanie

therion: name
pt: nome
ru: имя
sk: meno

therion: Station name
cz: Název bodu
pt: Nome da base
ru: Номер пикета
sk: Meno bodu

therion: Scrap reference
pt: Referência do trecho
ru: Привязка скрапа
sk: Odkaz na scrap

therion: value
pt: valor
ru: значение
sk: hodnota

therion: type
bg: тип
cz: typ
de: Typ
el: είδος
en: type
es: tipo
it: tipo
pt: tipo
ru: тип
sk: typ
sq: lloji
zh_CN: 类型

therion: bedrock
pt: rocha matriz
ru: коренная порода
sk: masív

therion: underlying
pt: inferior
ru: нижележащий
sk: ležiaci pod

therion: overlying
pt: superior
ru: вышележащий
sk: ležiaci nad

therion: unsurveyed
pt: não explorado
ru: неотснято
sk: nezameraný

therion: pit
pt: poço
ru: колодец
sk: priepasť

therion: sand
pt: areia
ru: песок
sk: piesok

therion: clay
pt: lama/argila
ru: глина
sk: blato

therion: pebbles
pt: seixos
ru: галька
sk: okrúhliaky

therion: debris
pt: escombros
ru: щебень
sk: štrk

therion: blocks
pt: blocos
ru: глыбы
sk: bloky

therion: ice
pt: gelo
ru: лед
sk: ľad

therion: flowstone
pt: escorrimento
ru: натеки
sk: sinter

therion: moonmilk
pt: leite de lua
ru: лунное молоко
sk: mäkký sinter

therion: visible
pt: visível
ru: видимый
sk: viditeľný

therion: invisible
pt: invisível
ru: невидимый
sk: neviditeľný

therion: temporary
pt: temporária
ru: временный
sk: dočasný

therion: presumed
pt: presumida
ru: предпологаемый
sk: predpokladaný

therion: permanent
pt: permanente
ru: постоянный
sk: permanentný

therion: intermittent
pt: intermitente
ru: временный
sk: občasný

therion: conjectural
pt: suposta
ru: предпологаемый
sk: predpokladaný

therion: cave
pt: subterrânea
ru: пещера
sk: jaskyňa

therion: surface
pt: superfície
ru: поверхность
sk: povrch

therion: subtype
pt: subtipo
ru: подтип
sk: podtyp

therion: control points
pt: pontos de controle
ru: контрольные точки
sk: kontrolné body

therion: orientation
bg: ориентация
cz: orientace
de: Ausrichtung
el: προσανατολισμός
en: orientation
es: orientación
it: orientazione
pt: orientação
ru: ориентация
sk: orientácia
sq: orientimi
zh_CN: 方向

therion: l-size
bg: l-размер
cz: l-rozsah
de: l-Größe
el: διάσταση (α)
en: l-size
es: anchura-izda
it: dim. sinistra
pt: tam. esq.
ru: l-size
sk: rozmer-ľ
sq: madhesia-l
zh_CN: l-大小

therion: segment subtype
pt: subtipo do segmento
ru: подтип сегмента
sk: podtyp segmentu

therion: altitude label
pt: indicador de altitude
ru: отметка высоты
sk: nadmorská výška

therion: outline
pt: contorno
ru: контур
sk: obrys

therion: text
bg: текст
cz: text
de: Text
el: κείμενο
en: text
es: texto
it: testo
pt: texto
ru: текст
sk: text
sq: teksti
zh_CN: 文本

therion: clip
pt: mascarar
ru: обрезка
sk: orezanie

therion: other options
cz: další možnosti
pt: outras opções
ru: другие опции
sk: ostatné možnosti

therion: Edit line
bg: Редактирай линия
cz: Editovat
de: Linie bearbeiten
el: Επεξεργασία γραμμής
en: Edit line
es: Editar
it: Edita
pt: Editar linha
ru: Править линию
sk: Upraviť
sq: permireso rrjeshtin
zh_CN: 编辑线

therion: close
bg: затвори
cz: zavřít
de: schließen
el: κλείσιμο
en: close
es: cerrar
it: chiudi
pt: fechar
ru: замкнуть
sk: zavrieť
sq: mbylle
zh_CN: 关闭

therion: reverse
bg: обратна
cz: obrátit
de: Umkehren
el: αναστροφή
en: reverse
es: invertir
it: inverti
pt: inverter
ru: обратная
sk: otočiť
sq: ktheje pas
zh_CN: 反向

therion: Select underlying point
pt: Selecionar o ponto inferior
ru: Выбрать нижележащую точку
sk: Vyber bod ležiaci pod

therion: Delete symbol
cz: Smazat symbol
pt: Apagar símbolo
ru: Удалить символ
sk: Odstráň symbol

therion: toggle image visibility
bg: превключване на видимостта на изображение
cz: přepnutí viditelnosti obrázku
de: Bildsichtbarkeit umschalten
el: αλλαγή ορατότητας εικόνας
en: toggle image visibility
es: Cambiar visibilidad de la imagen
it: cambia visibilità immagine
pt: inverter visibilidade da imagem
ru: переключение видимости изображения
sk: prepni viditeľnosť obrázku
sq: shikueshmeria e toggle-imazhit
zh_CN: 图像能见度开关

therion: grid - spacing %s
bg: мрежа - стъпка %s
cz: mřížka - odstup %s
de: Gitterweite - %s
el: πλέγμα - μέγεθος %s
en: grid - spacing %s
es: anchura cuadrícula %s
it: reticolato - passo %s
pt: grade - espaçamento %s
ru: сетка - шаг %s
sk: sieť - rozostupy %s
sq: %s hapesira e katroreve
zh_CN: 栅格间距 %s

therion: station - %s
bg: репер %s
cz: měřičský bod - %s
de: Messpunkt - %s
el: σημείο χαρτογράφησης - %s
en: station - %s
es: estación %s
it: caposaldo - %s
pt: base - %s
ru: пикет - %s
sk: měračský bod - %s
sq: stacioni - %s
zh_CN: 测点 - %s

therion: New *.th2 file needs to be saved before inserting background image. Save it now?
bg: Новият *.th2 се нуждае от съхраняване преди да се вмъкне фоново изображение. Да се Запиши сега?
cz: Nový *.th2 soubor musí být uložen před vložením podkladového obrázku. Uložit nyní?
de: Neue *.th2-Datei muss gespeichert werden, bevor ein Hintergrundbild eingefügt werden kann. Jetzt speichern?
el: Το νέο αρχείο *.th2 πρέπει να αποθηκευτεί πριν εισαχθεί εικόνα φόντου. Αποθήκευση τώρα;
en: New *.th2 file needs to be saved before inserting background image. Save it now?
es: Hay que guardar el nuevo archivo .th2 antes de cargar una imagen de fondo. ¿Guardar ahora?
it: Il nuovo file *.th2 deve essere salvato prima di inserire immagini di background. Salvala ora?
pt: Novo arquivo *.th2 precisa ser salvo antes que possa receber uma imagem de fundo. Salvá-lo agora?
ru: Новый *.th2 файл нуждается в сохранении перед вставкой фонового изображения. Записать сейчас?
sk: Pred vložením obrázku musíte nový *.th2 súbor uložiť. Chcete tak urobiť?
sq: arkivi I ri *.th2 duhet te ruhet para se te futet imazhi I prapavise.Te ruhet tani?
zh_CN: 插入底图前,须存储新的*.th2文件。要存储吗?

therion: inserting image
bg: вмъкване на изображение
cz: vkládám obrázek
de: Bild einfügen
el: εισαγωγή εικόνας
en: inserting image
es: insertando imagen
it: inserimento immagine
pt: inserindo imagem
ru: вставка изображения
sk: vkladám obrázok
sq: duke futur imazhin
zh_CN: 插入图像

therion: removing image
bg: махане на изображение
cz: odstraňuji obrázek
de: Bild entfernen
el: διαγραφή εικόνας
en: removing image
es: eliminando imagen
it: rimozione immagine
pt: removendo imagem
ru: удаление изображения
sk: odstránenie obrázku
sq: duke hequr imazhin
zh_CN: 删除图像

therion: moving image
bg: преместване на изображение
cz: přesunuji obrázek
de: Bild verschieben
el: μετακίνηση εικόνας
en: moving image
es: moviendo imagen
it: spostamento immagine
pt: movendo imagem
ru: перемещение изображения
sk: posun obrázku
sq: duke levizur imazhin
zh_CN: 移动图像

therion: gamma correction
bg: корекция на гамата
cz: gamma korekce
de: Gammakorrektur
el: gamma correction
en: gamma correction
es: corección gamma
it: gamma
pt: correção gamma
ru: коррекция гаммы
sk: gamma korekcia
sq: korekcioni gamma
zh_CN: 伽马校正

therion: Insert point
bg: Вмъкни точка
cz: Vložit bod
de: Punkt einfügen
el: Εισαγωγή σημείου
en: Insert point
es: Insertar punto
it: Inserisci punto
pt: Inserir ponto
ru: Вставить точку
sk: Vložiť bod
sq: fute piken
zh_CN: 插入点

therion: Delete point
bg: Изтрий точка
cz: Smazat bod
de: Punkt löschen
el: Διαγραφή σημείου
en: Delete point
es: Borrar punto
it: Rimuovi
pt: Apagar ponto
ru: Удалить точку
sk: Odstrániť bod
sq: fshije piken
zh_CN: 删除点

therion: Split line
bg: Раздели линия
cz: Rozdělit křivku
de: Linie teilen
el: Διαίρεση γραμμής
en: Split line
es: Cortar línea
it: Dividi
pt: Quebrar linha
ru: Разделить линию
sk: Rozdeliť krivku
sq: ndaje rjeshtin-vijen
zh_CN: 分割点

therion: deleting line point
bg: Изтрий точка от линията
cz: mazaní bodu na křivce
de: Linienpunkt löschen
el: διαγραφή σημείου γραμμής
en: deleting line point
es: borrando punto de línea
it: rimozione punto di linea
pt: apagando ponto de linha
ru: Удалить точку линии
sk: mazanie bodu na čiare
sq: duke fshire piken e rjeshtit-vijes
zh_CN: 删除点线

therion: inserting area border
bg: Вмъкване на граница на област
cz: vložení hranice oblasti
de: Flächenrand einfügen
el: εισαγωγή ορίου επιφάνειας
en: inserting area border
es: insertando límite de área
it: inserimento bordo area
pt: inserindo limite de área
ru: вставка границы области
sk: vloženie okraja plochy
sq: duke future kufirin e fushes
zh_CN: 插入区边界

therion: deleting area border
bg: изтриване на ганица на област
cz: mazaní hranice oblasti
de: Flächenrand löschen
el: όριο επιφάνειας
en: deleting area border
es: borrando límite de área
it: rimozione bordo area
pt: apagando limite de área
ru: удаление границы области
sk: mazanie okraja plochy
sq: duke fshire kufirin e fushes
zh_CN: 删除区边界

therion: creating area
bg: създаване на област
cz: vytvoření oblasti
de: Fläche erzeugen
el: δημιουργία επιφάνειας
en: creating area
es: creando área
it: creazione area
pt: criando área
ru: создание области
sk: vytvorenie plochy
sq: duke kriju fushen
zh_CN: 创建区

therion: creating line
bg: създаване на линия
cz: vytvoření křivky
de: Linie erzeugen
el: δημιουργία γραμμής
en: creating line
es: creando línea
it: creazione linea
pt: criando linha
ru: создание линии
sk: vytvorenie krivky
sq: duke kriju vijen apo rrjeshtin
zh_CN: 创建线

therion: line changes
bg: изменение на линия
cz: změna parametrů křivky
de: Linienänderung
el: αλλαγές γραμμής
en: line changes
es: cambios de línea
it: modifiche di linea
pt: alterações na linha
ru: изменение линии
sk: zmena parametrov krivky
sq: ndrimet e vijes
zh_CN: 线改动

therion: line closing
bg: затваряне на линия
cz: uzavření křivky
de: Linie schließen
el: κλείσιμο γραμμής
en: line closing
es: cerrando línea
it: chiusura linea
pt: fechamento de linha
ru: замыкание линии
sk: uzavretie krivky
sq: mbyllja e vijes-rjeshtit
zh_CN: 线关闭

therion: line opening
bg: отваряне (разделяне) на линия
cz: otevření křivky
de: Linie öffnen
el: άνοιγμα γραμμής
en: line opening
es: abriendo línea
it: apertura linea
pt: abertura de linha
ru: размыкание линии
sk: otvorenie krivky
sq: hapja e vijes-rjeshtit
zh_CN: 线打开

therion: inserting line point
bg: вмъкване на точка в линия
cz: vložení bodu křivky
de: Linienpunkt einfügen
el: εισαγωγή σημείο γραμμής
en: inserting line point
es: insertando punto en la línea
it: inserimento punto di linea
pt: inserção de ponto de linha
ru: вставка точки в линию
sk: vloženie bodu krivky
sq: duke futur piken e vijes
zh_CN: 插入线点

therion: line ending
bg: завършване на линия
cz: ukončení křivky
de: Linienende
el: τέλος γραμμής
en: line ending
es: finalizando línea
it: fine linea
pt: finalização de limha
ru: завершение линии
sk: ukončenie krivky
sq: rjeshti ne perfundim
zh_CN: 线结束

therion: moving control point
bg: преместване на управляваща точка
cz: posun řídícího bodu
de: Verschiebe Kontrollpunkt
el: μεταβαλλόμενο σημείο ελέγχου
en: moving control point
es: moviendo punto de control
it: spostamento punto di controllo
pt: movimentação de ponto de controle
ru: перемещение управляющей точки
sk: posun kontrolného bodu
sq: duke levize piken e kontrollit
zh_CN: 移动控制点

therion: split line
bg: разделяне на линия
cz: rozdělit křivku
de: Linie teilen
el: διαίρεση γραμμής
en: split line
es: cortar línea
it: dividi la linea
pt: quebra de linha
ru: разделение линии
sk: rozdelenie čiary
sq: ndarja e pikes-rjeshtit
zh_CN: 分割线

therion: Stop tracing
cz: Ukončit trasování
pt: Parar tracejo
ru: Прекратить трассировку
sk: Zastaviť digitalizáciu

therion: Continue tracing
cz: Pokračovat v trasování
pt: Seguir tracejo
ru: Продолжить трассировку
sk: Pokračovať digitalizácii

therion: loading text editor ...
bg: зареждане на текстовия редактор ...
cz: nahrávám text editor ...
de: Lade Texteditor ...
el: Άνοιγμα επεξεργαστή κειμένου...
en: loading text editor ...
es: editor de texto ...
it: editor di testo ...
pt: carregando editor de texto...
ru: загрузка текстового редактора ...
sk: načítavam textový editor
sq: duke lexuar editorin e tekstit…
zh_CN: 文本编辑器载入中 ...

therion: Text Editor
bg: Текстов редактор
cz: Text editor
de: Texteditor
el: Επεξεργαστής κειμένου
en: Text Editor
es: Editor de texto
it: Editor di testo
pt: Editor de texto
ru: Текстовой редактор
sk: Textový editor
sq: editori I tekstit
zh_CN: 文本编辑器

therion: Files
bg: Файлове
cz: Soubory
de: Dateien
el: Αρχεία
en: Files
es: Archivos
it: File
pt: Arquivos
ru: Файлы
sk: Súbory
sq: fajlat-arkivi
zh_CN: 文件

therion: Data table
bg: Таблица с данни
cz: Datová tabulka
de: Datentabelle
el: Πίνακας δεδομένων
en: Data table
es: Tabla de datos
it: Tabella dei dati
pt: Tabela de dados
ru: Таблица данных
sk: Dátová tabuľka
sq: tabela e te dhenave
zh_CN: 数据表

therion: Search & Replace
bg: Търсене и замяна
cz: Najít & Nahradit
de: Suchen & ersetzen
el: Αναζήτηση και αντικατάσταση
en: Search & Replace
es: Buscar y cambiar
it: Cerca e sostituisci
pt: Buscar & Substituir
ru: Поиск и Замена
sk: Nájdi a Nahraď
sq: kerko dhe ndero vendin
zh_CN: 查找/替换

therion: Switch open files.
bg: Превключи отвореният файл
cz: Přepínač otevřených souborů.
de: Geöffnete Dateien wechseln.
el: Η λίστα δείχνει τα ανοικτά αρχεία. Επιλέξετε αυτό που σας ενδιαφέρει.
en: This list shows open files. Click on the one you are interested in.
es: Esta lista muestra los archivos abiertos. Haz clic en el que te interese.
it: Cambia tra i file aperti.
pt: Trocar arquivo aberto
ru: Поменять открытый файл.
sk: Prepínač medzi otvorenými súbormi.
sq: kjo liste tregon fajlat e hapura. Kliko ne ate te cilen je I interesuar.
zh_CN: 打开文件开关

therion: Encoding
bg: Кодировка
cz: Kódování
de: Zeichenkodierung
el: Κωδικοσελίδα
en: Encoding
es: Codificación
it: Encoding
pt: Codificando
ru: Кодировка
sk: Kódovanie
sq: de-kodimi
zh_CN: 编码

therion: Change to
bg: Промени на
cz: Změnit na
de: Ändern in
el: Αλλαγή σε
en: Change to
es: Cambiar a
it: Cambia a
pt: Mudar para
ru: Изменить на
sk: Zmeniť na
sq: ndero ne
zh_CN: 改为

therion: To set file encoding, type encoding name and press  button.
bg: За задавне на кодираовката на файла, въведете името на кодировката и натиснете бутона <Промяна>
cz: Nastavení kódování - vyberte kódování a stiskněte tlačítko .
de: Um Zeichenkodierung zu ändern, gebe den Namen der Kodierung ein und drücke den  Knopf.
el: Για ρύθμιση κωδικοσελίδας, εισάγετε όνομα και πατήστε το κουμπί <Αλλαγή>
en: To set file encoding, type encoding name and press  button.
es: Para ajustar la codificación, escoje la que quieras y pulsa .
it: Per impostare l'encoding, scrivi il nome dell'encoding e premi il bottone 
pt: Para definir codificação do arquivo, digite o nome da codificação e pressione o botão .
ru: Для задания кодировки файла введите имя кодировки и нажмите кнопку <Изменить>.
sk: Na nastavenie kódovania, vložte identifikátor kódovania a stlačte .
sq: per te vendos fajlin per dekodim, shtype emrin per dekodim dhe kliko butonin 
zh_CN: 设置文件编码,输入编码名词并点击改动按钮。

therion: Scan data format
bg: Определи формата на данните
cz: Skenovat formát dat
de: Datenformat einlesen
el: Έλεγχος μορφής δεδομένων
en: Scan data format
es: Escanear formato de datos
it: Imposta formato dati
pt: Analisar formato dos dados
ru: Определить формат данных
sk: Nájdi formát dát
sq: skano formatin e shenimeve
zh_CN: 读取数据格式

therion: Scan data format and rebuild centerline data insertion tool.
bg: Автоматично определи формата на данните и преустрой полетата за въвеждане.
cz: Přečte formát dat v souboru a upraví pole pro vkládání měření.
de: Datenformat einlesen und Messdateneditor anpassen.
el: Ελέγχει την σειρά των δεδομένων και ξανασυντάσσει αυτόματα τα textbox για εισαγωγή δεδομένων.
en: Scans data order and rebuilds data insertion textboxes accordingly.
es: Ajusta las casillas al orden en que has tomado tus datos.
it: Imposta il formato dati e ricostruisci la tabella inserimento dati.
pt: Analisar formato dos dados e reconstruir a ferramenta de inserção de dados da linha de trena.
ru: Автоматически определить формат данных и перестроить поля ввода.
sk: Načíta formát dát z predchádzajúcich riadkov a príslušne zmení panel na vkladanie dát.
sq: skanon formatin e shenimeve dhe rinderton tekst-katroret per futjen e shenimeve net e njejten kohe
zh_CN: 读取数据格式,依次重建数据输入文本框。

therion: Enter station names
bg: Въвеждане на името на репераната точка
cz: Zadávat názvy bodů
de: Messpunktnamen eingeben
el: Εισαγωγή ονομάτων σημείων χαρτογράφησης
en: Enter station names
es: Nombrar estaciones
it: Scrivi nomi capisaldi
pt: Entrar nomes das bases
ru: Ввод номера следующего пикета
sk: Zadávanie názvov bodov
sq: futi emrat e stacioneve
zh_CN: 输入测点名称

therion: Check if you want to insert station names for each shot.
bg: Сложете отбелязка, ако искате следващите имена на репери да се въвеждат автоматично.
cz: Zaškrtněte pokud chcete zadávat název pro každý měřičský bod.
de: Ankreuzen, wenn du Messpunktnamen für jede Strecke eingeben willst.
el: Επιλέξτε για εισαγωγή των ονομάτων των σημείων χαρτογράφησης για το κάθε διάνυσμα.
en: Check if you want to insert station names for each shot.
en_GB: Check if you want to insert station names for each leg.
es: Marcar si se quiere dar un nombre a cada tirada topo.
it: Attiva per inserire i nomi dei capisaldi per ogni tratta.
pt: Se quiser inserir nomes de bases para cada medida.
ru: Установите отметку, если хотите, чтобы происходил автоматический ввод номера следующего пикета.
sk: Zaškrtnite pokiaľ chcete vkladať aj mená bodov pre každú zámeru.
sq: kontrollo nese deshiron ti fusesh emrat e stacioneve per secilin foto
zh_CN: 检查每一测程,输入测点名称。

therion: Auto format selection
bg: Автоматичен избор на формат.
cz: Auto formátování výběru
de: Auswahl formatieren
el: Αυτόματη μορφοποίηση επιλογής
en: Auto format selection
es: Autoformatear selección
it: Selezione formato automatico.
pt: Auto formatar seleção
ru: Перестроить выделенные данные
sk: Naformátuj výber
sq: zgjedhja automatike e formatit
zh_CN: 自动格式选择

therion: Format selection to given table.
bg: Избор на формат за определена таблица
cz: Naformátuje výběr do tabulky.
de: Formatiere Auswahl zur gegebenen Tabelle.
el: Μορφοποίηση επιλογής σύμφωνα με το δεδομένο πίνακα.
en: Format selection to given table.
es: Formatea la seleccion (ajusta tabuladores, etc).
it: Imposta selezione alla tabella specificata.
pt: Formatar seleção para tabela definida.
ru: Привести выделенные данные к заданному формату.
sk: Naformátuje výber do dátovej tabuľky.
sq: zgjedhja e formatit per tabelen e dhene
zh_CN: 指定表格的格式选择

therion: search
bg: търсене
cz: hledat
de: Suche
el: αναζήτηση
en: search
es: buscar
it: cerca
pt: buscar
ru: поиск
sk: hľadaj
sq: kerko
zh_CN: 查找

therion: Search expression.
bg: Израз за търсене
cz: Hledaný výraz.
de: Suche Muster.
el: Πληκτρολογήσετε τις λέξεις για αναζήτηση.
en: Enter word(s) to search for.
es: Introducir palabra(s) a buscar.
it: Testo da cercare.
pt: Expressão de busca
ru: Выражение поиска.
sk: Hľadaný výraz.
sq: shkruaje fjalen per tu kerkuar
zh_CN: 查找内容

therion: replace
bg: замяна
cz: nahradit
de: Ersetze
el: Αντικατάσταση
en: replace
es: cambiar
it: sostituisci
pt: substituir
ru: замена
sk: nahradiť
sq: ndero vendin
zh_CN: 替换

therion: Check whether to replace found expression.
bg: Сложете отбелязка, ако искате да се извърши замяна.
cz: Zaškrtněte pokud chcete nahradit nalezené výrazy.
el: Επιλέξτε για αντικατάσταση της ευρεθείσας περίπτωσης.
en: Check whether to replace found expression.
es: Marcar para cambiar los lo encontrado por lo que se escriba aquí.
it: Attiva per sostituire il testo trovato.
pt: Para substituir a expressão encontrada.
ru: Установите отметку, если хотите произвести замену.
sk: Zaškrtnúť pokiaľ sa má nájdený výraz nahradiť iným.
sq: kontrollo a duhet te ndrohet fjalia e gjetur
zh_CN: 检查,是否替换现有内容。

therion: Replace expression.
bg: Израз за замяна.
cz: Řetězec, kterým bude výraz nahrazen.
de: Ersetze Muster.
el: Τα αποτελέσματα αναζήτησης θα αντικατασταθούν από το συγκεκριμένο κείμενο.
en: Search results will be replaced by the string entered here.
es: Los resultados de la búsqueda serán cambiados por lo que escribas aquí.
it: Sostituisci testo.
pt: Expressão de substituição
ru: Выражение замены.
sk: Výraz na nahradenie.
sq: rezultatet e gjetura do te ndrohen nga fjalia e future ketu
zh_CN: 替换内容

therion: case sensitive search
bg: да се отчита регистъра
cz: rozlišovat velikost písmen
de: Groß- und Kleinschreibung bei Suche berücksichtigen
el: case sensitive αναζήτηση
en: case sensitive search
es: sensible a mayúsculas
it: ricerca case-sensitive
pt: busca diferencia MAIÚSCULAS/minúsculas
ru: учитывать регистр
sk: rozlišovať malé a veľké
sq: kerkimi -rast sensitiv
zh_CN: 区分大小写查找

therion: Check if search should be case sensitive.
bg: Сложете отбелязка за да се извърши търсене с отчитане на регистъра.
cz: Vyhledávání s rozlišením velikosti písmen.
de: Ankreuzen, wenn Suche Groß- und Kleinschreibung berücksichtigen soll.
el: Επιλέξετε αν η αναζήτηση πρέπει να είναι case sensitive.
en: Check if search should be case sensitive.
es: Marcar para que la búsqueda distinga entre mayúsculas y minúsculas.
it: Attiva se la ricerca deve essere case-sensitive.
pt: Faz com que a busca diferencie letras MAIÚSCULAS e minúsculas.
ru: Установите отметку, чтобы поиск происходил с учетом регистра.
sk: Zaškrtnite pokiaľ pri hľadaní chcete rozlišovať malé a veľké písmená.
sq: kontrollo nese kerkimi do te jete rast-sensitiv
zh_CN: 检查,查找(区分大小写)。

therion: regular expressions
bg: регулярни изрази
cz: regulární výrazy
de: Regulärer Ausdruck.
el: κανονικό συντακτικό (χρήση μπαλαντέρ αναζήτησης)
en: regular expressions
es: patrón regular
it: esperssioni regolari
pt: expressões regulares
ru: регулярные выражения
sk: regulárny výraz
sq: shprehje te rregullta
zh_CN: 正则表达式

therion: Check whether to evaluate search and replace as regular expressions.
bg: Сложете отбелязка за да се обработват регулярните изрази при търсене и замяна.
cz: Zaškrtněte pokud chcete vyhledávat nebo nahrazovat pomocí regulárních výrazů.
de: Ankreuzen, ob Suchen und Ersetzen regulären Ausdruck nutzen soll.
el: Επιλέξτε για αναζήτηση με κανονικό συντακτικό(χρήση μπαλαντέρ αναζήτησης)
en: Check whether to search using regular expressions.
es: Búsqueda usando comodines.
it: Attiva per ricerca e sostituzione con espressioni regolari.
pt: Fazer com que a busca trate as expressões de busca e de substituição como expressões regulares.
ru: Установите отметку, чтобы обрабатывать регулярные выражения при поиске и замене.
sk: Zaškrtnite ak sa má hľadanie a nahradenie vykonávať v móde regulárnych výrazov.
sq: kontrollo a do te kerkosh duke perdor shprehje te zakonta-rregullta
zh_CN: 检查是否用正则表达式查找和替换

therion: search selection only
bg: търсене само в избраното
cz: pouze ve vybraném textu
de: Nur in Auwahl suchen
el: αναζήτηση μόνο σε επιλογή
en: search selection only
es: selección solo
it: cerca solo nella selezione
pt: buscar somente na seleção
ru: искать в выделенном
sk: iba vo vybratom texte
sq: kerko vetem selekcionet
zh_CN: 只查找选定内容

therion: Check whether to do search only in selected text.
bg: Сложете отбелязка за да ае търси само в избраният текст.
cz: Zaškrtněte pokud chcete vyhledávat pouze ve vybraném textu.
de: Ankreuzen, wenn nur im ausgewählten Text gesucht werden soll.
el: Επιλέξετε για να γίνει η αναζήτηση μόνο στο επιλεγμένο κείμενο.
en: Check whether to search only in selected text.
es: Marcar para buscar solo dentro del texto seleccionado.
it: Attiva per cercare solo nel testo selezionato.
pt: Faz com que a busca atue somente no texto selecionado.
ru: Установите отметку, чтобы искать только в выделенном тексте.
sk: Zaškrtnite pokiaľ hladanie má prebehnúť len v označenom texte.
sq: kontrollo a do te perdoresh kerkimin vetem ne tekstin e selekcionuar
zh_CN: 检查,是否仅在选择文本中查找。

therion: First
bg: Първи
cz: První
de: Erstes
el: Πρώτο
en: First
es: Buscar
it: Primo
pt: Primeira
ru: Первый
sk: Prvý
sq: e para
zh_CN: 第一项

therion: Search or replace first expression in the file.
bg: Търсене или замяна на първият израз във файла.
cz: Najde nebo nahradí první výraz v souboru.
de: Suche oder ersetze erstes Muster in der Datei.
el: Αναζήτηση ή αντικατάσταση πρώτης περίπτωσης στο αρχείο.
en: Search or replace first expression in the file.
es: Buscar o reemplazar el primer resultado.
it: Cerca o sostituisci la prima istanza del testo nel file.
pt: Buscar ou substituir a primeira ocorrência da expressão no arquivo.
ru: Поиск или замена первого вхождения в файле.
sk: Nájte poprípade nahradí prvý výskyt hľadaného výrazu v súbore.
sq: kerko ose ndro shprehjet e para ne fajlla
zh_CN: 查找或替换文件中第一项内容

therion: Search or replace next expression after the cursor in the file.
bg: Търсене или замяна на следващият израз след курсора във файла.
cz: Najde nebo nahradí následující výraz v souboru.
de: Suche oder ersetze nächstes Muster nach dem Cursor in der Datei.
el: Αναζήτηση ή αντικατάσταση επόμενης περίπτωσης μετά τον κούρσορα.
en: Search or replace next expression after the cursor in the file.
es: Buscar o reemplazar el siguiente resultado.
it: Cerca o sostituisci la prossima istanza del testo nel file dopo il cursore.
pt: Buscar ou substituir a próxima ocorrência da expressão no arquivo.
ru: Поиск или замена следующего после курсора вхождения в файле.
sk: Nájdi alebo nahraď nasledujúci výraz v súbore.
sq: kerko ose ndroje shprehjen e ardhshme pas kursorit ne fajll
zh_CN: 在文件中指针后,查找或替换下一处内容。

therion: All
bg: Всичко
cz: Vše
de: Alles
el: Όλα
en: All
es: Todo
it: Tutti
pt: Todas
ru: Все
sk: Všetko
sq: te gjithat
zh_CN: 选择全部

therion: Search or replace all expressions in the file.
bg: Търсене или замяна на всички изрази във файла.
cz: Najde nebo nahradí všechny výrazy v souboru.
de: Suche oder ersetze alle Muster in der Datei.
el: Αναζήτηση ή αντικατάσταση όλων των περιπτώσεων στο αρχείο.
en: Search or replace all expressions in the file.
es: Buscar o reemplazar todos los resultados.
it: Cerca o sostituisci tuute le frasi nel file.
pt: Buscar ou substituir todas as ocorrência da expressão no arquivo.
ru: Поиск или замена всех вхождений в файле.
sk: Nájdi alebo nahraď všetky výrazy v súbore.
sq: kerko ose ndroji te gjitha shprehjet ne fajlla
zh_CN: 查找或替换文件中所有内容

therion: Clear
bg: Изчисване
cz: Zrušit
de: Löschen
el: Αναίρεση
en: Clear
es: Deseleccionar
it: Cancella
pt: Limpar
ru: Очистка
sk: Vyčisti
sq: e paster
zh_CN: 清除选定

therion: Clear all highlights in the file.
bg: Изчистване на всички осветени текстови участъци във файла.
cz: Zruší zvýraznění nalezených výrazů v souboru.
de: Lösche alle Hervorhebungen in der Datei.
el: Αναίρεση όλων των τονισθέντων.
en: Clear all highlights in the file.
es: Deseleccionar todo lo seleccionado.
it: Cancella tutte le evidenziazioni nel file.
pt: Remover todos os destaques no arquivo.
ru: Очистка всех подсвеченных участков текста.
sk: Zruší zvýraznenie nájdených výrazov v súbore.
sq: fshij te gjitha selekcionimet apo hijezimet ne fajlla
zh_CN: 删除文件中所有突出显示。

therion: Opening %s ...
bg: Отваряне %s ...
cz: Otevírám %s ...
de: Öffne %s ...
el: Άνοιγμα του %s ...
en: Opening %s ...
es: Abriendo %s ...
it: Apertura %s ...
pt: Abrindo %s...
ru: Открытие %s ...
sk: Oteváram %s ...
sq: duke hap %s …
zh_CN: 打开%s ...

therion: File %s is not saved. Save it now?
bg: Файлът %s не е съхранен. Да го съхраня сега?
cz: Soubor %s není uložen. Uložit nyní?
de: datei %s nicht gespeichert. Speichere jetzt?
el: Το αρχείο %s δεν έχει αποθηκευτεί. Αποθήκευση τώρα;
en: File %s is not saved. Save it now?
es: El archivo %s no ha sido guardado. ¿Guardar ahora?
it: Il file %s non è salvato. Salva ora?
pt: Arqivo %s não está salvo. Salvar agora?
ru: Файл %s не сохранен. Сохранить его сейчас?
sk: Súbor %s nie je uložený. Uložiť teraz?
sq: fajlli %s nuk eshte I ruajtur. Ta ruajm tani?
zh_CN: 文件 %s没有存储. 要存储吗?

therion: File %s was modified outside xtherion. Save it anyway?
bg: Файлът %s е изменен от друго приложение. Да го съхраня въпреки това?
cz: Soubor %s byl modifikován mimo xtherion. Přesto uložit?
de: Datei %s wurde außerhalb von Xtherion geändert. Trotzdem speichern?
el: Το αρχείο %s τροποποιήθηκε εκτός xtherion. Να αποθηκευτεί όπως και να'ναι;
en: File %s was modified outside xtherion. Save it anyway?
es: El archivo %s ha sido modificado fuera de xtherion. ¿Guardar de todos modos?
it: Il file %s è stato modificato fuori da xtherion. Salva comunque?
pt: Arquivo %s foi modificado fora do xtherion. Ainda assim quer salvá-lo?
ru: Файл %s был изменен другим приложением. Сохранить не смотря на это?
sk: Súbor %s bol modifikovaný mimo programu. Uložiť aj tak?
sq: fajlli %s eshte ndryshuar jashte x therion-it. Ta ruajm sido qe te jete?
zh_CN: 文件 %s 被修改,除xtherion外. 要存储吗?

therion: Saving %s ...
bg: Съхранение %s ...
cz: Ukládám %s ...
de: Speichere %s ...
el: Αποθήκευση του %s ...
en: Saving %s ...
es: Guardando %s ...
it: Salvataggio %s ...
pt: Salvando %s ...
ru: Сохранение %s ...
sk: Ukladám %s ...
sq: duke ruajtur %s. . .
zh_CN: 存储 %s ...

therion: New
bg: Нов
cz: Nový
de: Neu
el: Νέο
en: New
es: Nuevo
it: Nuovo
pt: Novo
ru: Новый
sk: Nový
sq: e re
zh_CN: 新建

therion: Open
bg: Отвори
cz: Otevřít...
de: Öffnen
el: Άνοιγμα
en: Open
es: Abrir
it: Apri
pt: Abrir
ru: Открыть
sk: Otvoriť
sq: hape
zh_CN: 打开

therion: Save
bg: Запиши
cz: Uložit
de: Speichern
el: Αποθήκευση
en: Save
es: Guardar
it: Salva
pt: Salvar
ru: Сохранить
sk: Uložiť
sq: ruaje
zh_CN: 存储

therion: Save as
bg: Запиши като
cz: Uložit jako...
de: Speichern als
el: Αποθήκευση ως...
en: Save as
es: Guardar como
it: Salva come
pt: Salvar como
ru: Сохранить как
sk: Uložiť ako
sq: ruaje si
zh_CN: 存储为...

therion: Save all
bg: Запиши всички
cz: Uložit vše
de: Speichere alles
el: Αποθήκευση όλων
en: Save all
es: Guardar todo
it: Salva tutti
pt: Salvar todos
ru: Сохранить всё
sk: Uložiť všetko
sq: ruaji te gjitha
zh_CN: 全部存储

therion: Auto save
bg: Автосъхранение
cz: Automaticky ukládat
de: Automatisch speichern
el: Αυτόματη αποθήκευση
en: Auto save
es: Autoguardar
it: Auto salva
pt: SAlvamento automático
ru: Автосохранение
sk: Ukladať automaticky
sq: ruajtja automatike
zh_CN: 自动存储

therion: Import
bg: Внасяне
cz: Import
de: Importieren
el: Εισαγωγή...
it: Importa
pt: Importar
ru: Импорт
sk: Import
sq: importi
zh_CN: 导入

therion: Next
bg: Следващ
cz: Následující
de: Nächstes
el: Επόμενο
en: Next
es: Siguiente
it: Prossima
pt: Próximo
ru: Следующий
sk: Nasledujúci
sq: tjetra
zh_CN: 下一处

therion: Previous
bg: Предишен
cz: Předchozí
de: Vorheriges
el: Προηγούμενο
en: Previous
es: Anterior
it: Precedente
pt: Anterior
ru: Предыдущий
sk: Predchádzajúci
sq: e perparmja
zh_CN: 上一处

therion: Edit
bg: Редактиране
cz: Editovat
de: Bearbeiten
el: Διόρθωση
en: Edit
es: Editar
it: Edita
pt: Editar
ru: Редактировать
sk: Upraviť
sq: permireso
zh_CN: 编辑

therion: Cut
bg: Изрежи
cz: Vyjmout
de: Ausschneiden
el: Αποκοπή
en: Cut
es: Cortar
it: Taglia
pt: Cortar
ru: Вырезать
sk: Vystrihnúť
sq: preje
zh_CN: 剪切

therion: Copy
bg: Копирай
cz: Kopírovat
de: Kopieren
el: Αντιγραφή
en: Copy
es: Copiar
it: Copia
pt: Copiar
ru: Копировать
sk: Kopírovať
sq: kopjo
zh_CN: 复制

therion: Paste
bg: Вмъкни
cz: Vložit
de: Einfügen
el: Επικόλληση
en: Paste
es: Pegar
it: Incolla
pt: Colar
ru: Вставить
sk: Vložiť
sq: vendose-paste
zh_CN: 粘贴

therion: Select all
bg: Избери всичко
cz: Vybrat vše
de: Alles auswählen
el: Επιλογή όλων
en: Select all
es: Seleccionar todo
it: Seleziona tutto
pt: Selecionar tudo
ru: Выделить всё
sk: Vyber všetko
sq: zghedhi-selekciono te gjitha
zh_CN: 选定全部

therion: Auto indent
bg: Автоматичен отстъп
cz: Automaticky odsazovat
de: Automatisch einrücken
el: Αυτόματη παραγραφοποίηση
en: Auto indent
es: Autoindentar
it: Indentazione automatica
pt: Indentação automática
ru: Автоотступ
sk: Automatické odsadenie
sq: indenti automatik
zh_CN: 自动缩进

therion: Processing line %s ...
bg: Обработване на ред %s ...
cz: Zpracovávám řádek %s ...
de: Verarbeite Zeile %s ...
el: Επεξεργασία γραμμής %s ...
en: Processing line %s ...
es: Procesando línea %s ...
it: Elaborazione linea %s ...
pt: Processando linha %s...
ru: Обработка строки %s ...
sk: Spracúvam riadok %s ...
sq: rrjeshti %s ne proces…
zh_CN: 运行线 %s ...

therion: Text editor is not active. To activate it, open existing file or create new one.
bg: Текстовият редактор не е активен. За активиране отворете съществуващ файл или създайте нов.
cz: Textový editor není aktivní. Pro jeho aktivaci otevřete existující soubor nebo vytvořte nový.
de: Texteditor ist nicht aktiv. Um ihn zu aktivieren, öffne eine existierende Datei oder lege eine neue an.
el: Ο επεξεργαστής κειμένου δεν είναι ενεργός. Για να τον ενεργοποιήσετε, ανοίξτε αρχείο, ή δημιουργήστε νέο.
en: Text editor is not active. To activate it, open existing file or create new one.
es: El editor de texto está inactivo. Para activarlo, abre un archivo existente o crea uno nuevo.
it: L'editor di testo non è attivo. Per attivarlo apri un file o creane uno.
pt: O editor de texto não está ativo. Para ativá-lo, abra um arquivo existente ou crie um novo arquivo.
ru: Текстовый редактор неактивен. Для активации откройте существующий файл или создайте новый.
sk: Textový editor nie je aktívny. Otvorte existujúci súbor alebo vytvorte nový.
sq: editori I tekstit nuk eshte aktiv. Qe ta aktivizosh, hape fajllin egzistues ose krijo nje tjeter.
zh_CN: 文本编辑器没有启动。打开现有文件或创建新文件启动。

therion: Control...
bg: Контрол ...
cz: Ovládání...
de: Kontrollfeld...
el: Έλεγχος...
en: Control...
es: Control
it: Controlli ...
pt: Controle...
ru: Управление...
sk: Ovládanie...
sq: kontrolli. . .
zh_CN: 控制中...

therion: BAC calculator...
bg: Калкулатор на алкохол ...
cz: Alkohol tester...
de: Blutalkoholrechner
el: Αλκοτέστ...
en: BAC calculator...
es: Borrachímetro
it: Calcolatore BAC ...
pt: Calculadora TAS...
ru: Калькулятор алкоголя...
sk: Alkohol tester...
sq: matesi I alkoolit-BAC
zh_CN: 血液酒精浓度计算器

therion: Calibrate bitmap...
bg: Калибриране на изображение ...
cz: Kalibrovat bitmapu ...
de: Bild kalibrieren...
it: Mappa georeferenziata...
pt: Calibrar imagem...
ru: Привязать изображение
sk: Kalibrovať obrázok...
zh_CN: 校准图片...

therion: About...
bg: За програмата ...
cz: O programu...
de: Über...
el: Σχετικά...
en: About...
es: Acerca de...
it: Versione ...
pt: Sobre...
ru: О программе...
sk: O programe...
sq: per programin…
zh_CN: 关于...

therion: Search
bg: Търсене
cz: Hledat
de: Suche
el: Αναζήτηση
en: Search
es: Buscar
it: Cerca
pt: Buscar
ru: Поиск
sk: Hľadať
sq: kerko
zh_CN: 查找

therion: Close
bg: Затвори
cz: Zavřít
de: Schließen
el: Κλείσιμο
en: Close
es: Cerrar
it: Chiudi
pt: Fechar
ru: Закрыть
sk: Zavrieť
sq: mbyll
zh_CN: 关闭

therion: theme all-symbols
bg: всички символи
cz: všechny symboly
de: Alle Zeichen
el: όλα
it: tutti
pt: todos os símbolos
ru: все
sk: všetky symboly
sq: tematizo te gjitha simbolet-shenjat
zh_CN: 所有字符

therion: New file
bg: Нов файл
cz: Nový soubor
de: Neue Datei
el: Νέο αρχείο
it: Nuovo
pt: Novo arquivo
ru: Новый файл
sk: Nový súbor
sq: arkivi-fajlli I ri
zh_CN: 新文件

therion: Open file
bg: Отвори файл
cz: Otevřít soubor
de: Datei öffnen
el: Άνοιγμα
it: Apri
pt: Abrir arquivo
ru: Открыть файл
sk: Otvoriť súbor
sq: hape fajllin
zh_CN: 打开文件

therion: Save file
bg: Запиши файл
cz: Uložit soubor
de: Datei speichern
el: Αποθήκευση
it: Salva
pt: Salvar arquivo
ru: Сохранить файл
sk: Uložiť súbor
sq: ruaje fajllin
zh_CN: 存储文件

therion: Save file as
bg: Запиши файл като
cz: Uložit soubor jako
de: Datei speichern als
el: Αποθήκευση ως
it: Salva come
pt: Salvar arquivo como
ru: Сохранить файл как
sk: Uložiť súbor ako
sq: ruaje fajllin si
zh_CN: 文件存储为

therion: Close file
bg: Затвори файл
cz: Zavřít soubor
de: Datei schließen
el: Κλείσιμο αρχείου
it: Chiudi
pt: Fechar arquivo
ru: Закрыть файл
sk: Zatvoriť súbor
sq: mbylle fajllin
zh_CN: 关闭文件

therion: Undo
bg: Отмяна
cz: Zpět
de: Rückgängig
el: Αναίρεση
en: Undo
es: Deshacer
it: Indietro
pt: Desfazer
ru: Отменить
sk: Späť
sq: prishe-undo
zh_CN: 取消

therion: Redo
bg: Възстановяване
cz: Opakovat
de: Wiederholen
el: Επανάληψη
en: Redo
es: Rehacer
it: Rifai
pt: Refazer
ru: Вернуть
sk: Opakovať
sq: beje prape-redo
zh_CN: 恢复

therion: Switch to text editor
bg: Превключи на текстов редактор
cz: Přepnout na textový editor
de: Zum Texteditor wechseln
el: Μετάβαση σε επεξεργαστή κειμένου
it: Editor di testi
pt: Mudar para editor de texto
ru: Переключится в текстовый редактор
sk: Prepnúť na textový editor
sq: kalo tek editori i tekstit
zh_CN: 文本编辑器开关

therion: Switch to map editor
bg: Превключи на редактор на карти
cz: Přepnout na mapový editor
de: Zum Karteneditor wechseln
el: Μετάβαση σε επεξεργαστή σχεδίου
it: Editor di mappe
pt: Mudar para editor de mapa
ru: Переключится в редактор карт
sk: Prepnúť na mapový editor
sq: kalo tek editori I hartes
zh_CN: 地图编辑器开关

therion: Switch to compiler
bg: Превключи на компилатор
cz: Přepnout na kompilátor
de: Zum Compiler wechseln
el: Μετάβαση σε συντάκτη
it: Compilatore
pt: Mudar para compilador
ru: Переключится в компилятор
sk: Prepnúť na kompilátor
sq: kalo tek kompilatori
zh_CN: 程序编译开关

therion: Compile
bg: Компилирай
cz: Kompilovat
de: Compilieren
el: Σύνταξη
en: Compile
es: Compilar
it: Compila
pt: Compilar
ru: Компилировать
sk: Kompilovať
sq: kompilo
zh_CN: 程序编译

therion: Switch to select mode
bg: Превключи на режим 'Избиране'
cz: Přepnout do módu na výběr objektu
de: In Auswahlmodus wechseln
el: Μετάβαση σε λειτουργία επιλογής
it: Modalità di selezione
pt: Mudar para modo de seleção
ru: Переключится в режим выбора
sk: Prepnúť do módu na výber objektu
sq: kalo tek moduli per selekcionim
zh_CN: 模块选择开关

therion: Select next scrap
bg: Избери следващият скрап
cz: Vyber následující scrap
de: Nächste Skizze auswählen
el: Επιλογή επόμενου σκραπ
it: Seleziona il prossimo scrap
pt: Selecionar próximo trecho
ru: Выбрать слеующий скрап
sk: Vyber nasledujúci scrap
sq: zgjedhe deponin e ardhshme
zh_CN: 选定下一个草图

therion: Select next area
bg: Избери следващата област
cz: Vyber následující plochu
de: Nächste Fläche auswählen
el: Επιλογή επόμενης επιφάνειας
it: Seleziona la prossima area
pt: Selecionar próxima área
ru: Выбрать слеующую область
sk: Vyber nasledujúcu plochu
sq: zgjedhe-selekto fushen e ardhshme
zh_CN: 选择下一个区

therion: Zoom in
bg: Приближи
cz: Zvětšit
de: Vergrößern
el: Μεγέθυνση
it: Zoom in
pt: Fechar zoom
ru: Увеличить
sk: Zväčšiť
sq: zmadho
zh_CN: 放大

therion: Zoom out
bg: Отдалечи
cz: Zmenšit
de: Verkleinern
el: Σμίκρυνση
it: Zoom out
pt: Abrir zoom
ru: Уменьшить
sk: Zmenšiť
sq: zvogelo
zh_CN: 缩小

therion: Insert new scrap
bg: Вмъкни нов скрап
cz: Vložit nový scrap
de: Neue Skizze einfügen
el: Εισαγωγή νέου σκραπ
it: Inserisci un nuovo scrap
pt: Inserir novo trecho
ru: Вставить новый скрап
sk: Vložiť nový scrap
sq: fute deponin e re
zh_CN: 插入新的草图

therion: Insert new point
bg: Вмъкни нова точка
cz: Vložit nový bod
de: Neuen Punkt einfügen
el: Εισαγωγή νέου σημείου
it: Inserisci un nuovo punto
pt: Inserir novo ponto
ru: Вставить новую точку
sk: Vložiť nový bod
sq: fute piken e re
zh_CN: 插入新的点

therion: Insert new line
bg: Вмъкни нова линия
cz: Vložit novou křivku
de: Neue Linie einfügen
el: Εισαγωγή νέας γραμμής
it: Inserisci una nuova linea
pt: Inserir nova linha
ru: Вставить новую линию
sk: Vložiť novú krivku
sq: fute rrjeshtin e ri
zh_CN: 插入新的线

therion: Insert new area
bg: Вмъкни нова област
cz: Vložit novou plochu
de: Neue Fläche einfügen
el: Εισαγωγή νέας επιφάνειας
it: Inserisci una nuova area
pt: Inserir nova área
ru: Вставить новую область
sk: Vložiť novú plochu
sq: fute fushen e re
zh_CN: 插入新的区

therion: Delete selected object
bg: Изтрий избраният обект
cz: Smaž označené objekty
de: Ausgewähltes Objekt löschen
el: διαγραφή επιλεγμένου
it: Rimuovi l'oggetto selezionato
pt: Apagar objeto selecionado
ru: Удалить выбранный объект
sk: Zmaž označené objekty
sq: fshije objektin e selektuar
zh_CN: 删除选定对象

therion: theme basic-symbols
bg: основни символи
cz: základní symboly
de: Grundsymbole
el: βασικά σύμβολα
it: base
pt: símbolos básicos
ru: основные
sk: základné symboly
sq: tema simbolet-baze
zh_CN: 基本符号

therion: theme passage-fills
bg: релеф на галерията
cz: výplň
de: Gangfüllungen
el: γέμισμα στοών
it: riempimenti
pt: passagens
ru: рельеф хода
sk: výplň
sq: tema mbushjet e kalimeve
zh_CN: 一般洞道充填物

therion: theme speleothems
bg: спелеоформи
cz: výzdoba
de: Sinter
el: σπηλαιοθέματα
it: speleotemi
pt: espeleotemas
ru: спелео-формы
sk: výzdoba
sq: speleo-tema
zh_CN: 主要次生化学沉积物

therion: theme equipement
bg: екипиране
cz: vystrojení
de: Ausrüstung
el: εξοπλισμός
en: theme equipment
it: armo
pt: equipamento
ru: оборудование
sk: vystrojenie
sq: tema pajisjet
zh_CN: 主要装备
therion-5.4.1/xtherion/licence.tcl000066400000000000000000000015131307545355600171540ustar00rootroot00000000000000## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 
therion-5.4.1/xtherion/main.tcl000066400000000000000000000037371307545355600165100ustar00rootroot00000000000000##
## main.tcl --
##
##     Main script.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

xth_app_finish
xth_app_clock

encoding system $xth(app,sencoding)
set xth(encoding_system) [encoding system]
xth_about_hide

wm deiconify $xth(gui,main)
xth_app_normalize

foreach xapp $xth(app,list) {
  catch {
    set xth(app,$xapp,relw) $xth(app,all,tbwidth)
    set xth(app,$xapp,relw) $xth(app,$xapp,tbwidth)
  } 
  catch {
    xth_app_show $xapp
  }
}

if {[llength $xth(app,list)] > 2} {
  xth_app_show [lindex $xth(app,list) 2]
} else {
  xth_app_show [lindex $xth(app,list) 0]
}


set th2open 1
set cfgopen 1

foreach fname $argv {
  if {$cfgopen && [regexp -nocase {thconfig|thcfg} $fname]} {
    set cfgopen 0
    xth_app_show cp
    update idletasks
    xth_cp_open_file $fname
  } elseif {$th2open && [regexp -nocase {\.th2$} $fname]} {
    set th2open 0
    xth_app_show me
    update idletasks
    xth_me_open_file 0 $fname 1
  } else {
    xth_app_show te
    update idletasks
    xth_te_open_file 0 $fname 0
  }
}

foreach idir $xth(idirs) {
  catch {source [file join $idir xtherion.ini]}
}
catch {source xtherion.ini}


therion-5.4.1/xtherion/mapcal.tcl000066400000000000000000000147621307545355600170210ustar00rootroot00000000000000set xth(calib_dir) ""
set xth(calib_res) 96
set xth(calib_fmt) png
set xth(calib_msg) "Wait please"

proc xth_calibrate_bitmap {} {

  global xth tcl_platform
  if {[string length $xth(calib_dir)] == 0} {
    set xth(calib_dir) $xth(gui,initdir)
  }

  # identify image
  set ipath identify
  set cpath convert
  if {[string equal $tcl_platform(platform) windows]} {
    package require registry
    set win32registry {HKEY_LOCAL_MACHINE\SOFTWARE\Therion}
    if {[catch {
      set ipath "[file join [registry get $win32registry InstallDir] bin identify.exe]"
      set cpath "[file join [registry get $win32registry InstallDir] bin convert.exe]"
    }]} {
      set win32registry {HKEY_CURRENT_USER\SOFTWARE\Therion}
      catch {
	set ipath "[file join [registry get $win32registry InstallDir] bin identify.exe]"
	set cpath "[file join [registry get $win32registry InstallDir] bin convert.exe]"
      }
    }
  }


  # load bitmap and its size using identify
  set fname [tk_getOpenFile -filetypes {{{Images} {.png .jpg .jpeg .gif .pdf}} {{All files} {*}}} \
      -parent $xth(gui,main) \
      -initialdir $xth(calib_dir)]
  if {[string length $fname] == 0} return
  set xth(calib_dir) [file dirname $fname]

  if {[string equal -nocase .pdf [file extension $fname]]} {
     # create bitmap
     set pdfname $fname
     set dp $xth(gui,main).resoldlg
     Dialog $dp -title "Image resolution" -parent $xth(gui,main) -default 0
     set df [$dp getframe]
     Label $df.l -text "Resolution (dpi)"
     Entry $df.e -textvariable xth(calib_res)
     radiobutton $df.p -text "PNG" -variable xth(calib_fmt) -value png
     radiobutton $df.j -text "JPEG" -variable xth(calib_fmt) -value jpg
     pack $df.l $df.e $df.p $df.j -side left -fill both -expand yes -padx 4 -pady 4
     $dp add -name ok 
     $dp draw
     destroy $dp
     if {[catch {set xth(calib_res) [expr int($xth(calib_res))]}]} {
       set xth(calib_res) 96
     }
     xth_calibrate_prog_show "Rastering PDF image..."
     set fname "[file rootname $fname].$xth(calib_fmt)"
     catch {exec $cpath -density $xth(calib_res)x$xth(calib_res) $pdfname -quality 95 $fname}
     xth_calibrate_prog_hide
  } else {
    set pdfname "[file rootname $fname].pdf"
    if {![file exists $pdfname]} {
      set pdfname [tk_getOpenFile -filetypes {{{PDF files} {.pdf}} {{All files} {*}}} \
	  -parent $xth(gui,main) \
	  -initialdir $xth(calib_dir)]
    }
    if {[string length $pdfname] == 0} return
  }


  xth_calibrate_prog_show "Reading bitmap..."
  catch {exec $ipath -format {%w\n%h\n} $fname > $fname.tmp}
  xth_calibrate_prog_hide
  set fid [open $fname.tmp r]
  gets $fid imgw
  gets $fid imgh
  close $fid
  file delete -force -- $fname.tmp

  # load corresponding pdf file
  xth_calibrate_prog_show "Reading calibration data..."
  catch {
  set fid [open $pdfname r]
  fconfigure $fid -eofchar {}
  set goon 1
  while {(![eof $fid])} {
    gets $fid cln
    if {[regexp {\/thCalibrate0 \(} $cln]} {
      break
    }
  }
  close $fid
  xth_calibrate_prog_hide

  # find calibration points
  set HD -1.0
  xth_calibrate_prog_show "Writing map file..."
  for {set i 0} {$i < 9} {incr i} {
    set rx "\\/thCalibrate$i"
    set X($i) 0.0
    set Y($i) 0.0
    set L($i) 0.0
    set F($i) 0.0
    append rx {\s+\([^)]*X=([\+\-\.\d]+)[^)]*Y=([\+\-\.\d]+)[^)]*L=([\+\-\.\d]+)[^)]*F=([\+\-\.\d]+)}
    regexp $rx $cln dum X($i) Y($i) L($i) F($i)
  }
  regexp {\/thCalibrate\s+\([^)]*HS=([\+\-\.\d]+)[^)]*VS=([\+\-\.\d]+)[^)]*HD=([\+\-\.\d]+)} $cln dum HS VS HD

  set geo_err 1
  set fid [open err.log w]
  for {set i 0} {$i < 9} {incr i} {
    set geo_err [expr $geo_err && ($L($i) == 0.0) && ($F($i) == 0.0)]
  }
  set geo_err [expr $geo_err || ($HD <= 0.0)]
  if {$geo_err} {
    xth_calibrate_show_err "Georeferencing of map is not correct!"
    return
  }

  
  # write map file
  set fid [open "[file rootname $fname].map" w]
  puts $fid {OziExplorer Map Data File Version 2.2}
  puts $fid [file tail $fname]
  puts $fid $fname
  puts $fid {1 ,Map Code,}
  puts $fid {WGS 84,,   0.0000,   0.0000,WGS 84}
  puts $fid {Reserved 1}
  puts $fid {Reserved 2}
  puts $fid {Magnetic Variation,,,E}
  puts $fid {Map Projection,Mercator,PolyCal,No,AutoCalOnly,No,BSBUseWPX,No}
  for {set i 0} {$i < 9} {incr i} {
    set imgx [expr $imgw - int(double($imgw) * ($HS - $X($i)) / $HS)]
    set imgy [expr int(double($imgh) * ($VS - $Y($i)) / $VS)]
    puts $fid "Point0[expr $i + 1],xy,$imgx,$imgy,in, deg,[ll2ozi $F($i) $L($i)], grid,   ,           ,           ,N"
    set mmx($i) $imgx
    set mmy($i) $imgy
  }
  # Point01,xy,    0, 0,in, deg, 48, 12.39601,N, 17, 1.25473,E, grid,   ,           ,           ,N
  for {set i 10} {$i <= 30} {incr i} {
    puts $fid "Point$i,xy,     ,     ,in, deg,    ,        ,N,    ,        ,W, grid,   ,           ,           ,N"
  }
  puts $fid {Projection Setup,,,,,,,,,,}
  puts $fid {Map Feature = MF ; Map Comment = MC     These follow if they exist}
  puts $fid {Track File = TF      These follow if they exist}
  puts $fid {Moving Map Parameters = MM?    These follow if they exist}
  puts $fid {MM0,Yes}
  puts $fid {MMPNUM,4}
  puts $fid "MMPXY,1,$mmx(5),$mmy(5)"
  puts $fid "MMPXY,2,$mmx(7),$mmy(7)"
  puts $fid "MMPXY,3,$mmx(2),$mmy(2)"
  puts $fid "MMPXY,4,$mmx(0),$mmy(0)"
  puts $fid "MMPLL,1, $L(5), $F(5)"
  puts $fid "MMPLL,2, $L(7), $F(7)"
  puts $fid "MMPLL,3, $L(2), $F(2)"
  puts $fid "MMPLL,4, $L(0), $F(0)"
  puts $fid "MM1B,[expr $HD / abs(double($mmx(7)) - double($mmx(5)))]"
  puts $fid {MOP,Map Open Position,0,0}
  puts $fid "IWH,Map Image Width/Height,$imgw,$imgh"
  close $fid
  }
  xth_calibrate_prog_hide
  
}


proc xth_calibrate_show_err {msg} {
    global xth
    set dp $xth(gui,main).messagedlg
    MessageDlg $dp -parent $xth(gui,main) -message $msg -type ok -icon error
}


proc xth_calibrate_prog_show {msg} {
    global xth
    set dp $xth(gui,main).progdlg
    set xth(calib_msg) $msg
    ProgressDlg $dp -parent $xth(gui,main) -title "Wait..." \
	-type         infinite \
	-width        30 \
	-textvariable xth(calib_msg)
    update
    after 200
}

proc xth_calibrate_prog_hide {} {
    global xth
    set dp $xth(gui,main).progdlg
    destroy $dp
}

proc ll2ozi {lat lon} {
  set latD [expr int($lat)]
  set latM [expr 60.0 * ($lat - double($latD))]
  if {$lat >= 0.0} {set latH N} else {set latH S}
  set lonD [expr int($lon)]
  set lonM [expr 60.0 * ($lon - double($lonD))]
  if {$lon >= 0.0} {set lonH E} else {set lonE W}
  return "$latD,$latM,$latH,$lonD,$lonM,$lonH"
}


if 0 {
  package require BWidget
  set xth(gui,main) .x
  toplevel .x
  set xth(gui,initdir) .
  xth_calibrate_bitmap
  exit
}
therion-5.4.1/xtherion/me.tcl000066400000000000000000003065111307545355600161610ustar00rootroot00000000000000##
## me.tcl --
##
##     The therion map editor.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

xth_about_status [mc "loading map editor ..."]

catch {package require Img}

set xth(me,dflt,scrap,scale) {}

proc xth_me_reset_defaults {} {
  global xth

  set xth(me,dflt,scrap,projection) {}
  set xth(me,dflt,scrap,options) {}

  set xth(me,dflt,point,type) {station}
  set xth(me,dflt,point,options) {}
  set xth(me,dflt,point,rotation) {}
  set xth(me,dflt,point,xsize) {}
  set xth(me,dflt,point,ysize) {}

  set xth(me,dflt,line,type) {wall}
  set xth(me,dflt,line,options) {}

  set xth(me,dflt,area,type) {water}
  set xth(me,dflt,area,options) {}
    
}

set xth(me,acttheme) 0
set xth(ctrl,me,acttheme) [lindex $xth(me,themes,showlist) 0]

xth_me_reset_defaults

proc xth_me_bind_entry_focusin {wlist} {
  foreach w $wlist {
    bind $w  "$w selection range 0 end"
  }
}

proc xth_me_bind_entry_return {wlist retcmd} {
  foreach w $wlist {
    bind $w  $retcmd
  }
}

proc xth_me_bind_entry_focus_return {wlist retcmd} {
  set llen [expr [llength $wlist] - 1]
  for {set i 0} {$i < $llen} {incr i} {
    bind [lindex $wlist $i]  "focus [lindex $wlist [expr $i + 1]]"
  }
  bind [lindex $wlist end]  "$retcmd\nfocus [lindex $wlist 0]"
}


proc xth_me_bind_typecbx_hint {pth smbl} {
  $pth _create_popup
  bind $pth.shell.listb  "xth_status_bar_push me\nevent generate $pth.shell.listb <> -when tail"
  bind $pth.shell.listb  "xth_status_bar_pop me"
  bind $pth.shell.listb <> [format {
    set vals [%s cget -values]
    xth_status_bar_status me [ mc "%s [lindex $vals [%s.shell.listb curselection]]"]
    } $pth $smbl $pth]
}


proc xth_me_unredo_reset {} {
  global xth
  set xth(me,undolist) {}
  set xth(me,redolist) {}
  set xth(me,unredook) 1
  xth_me_unredo_update
}


proc xth_me_real2canx {x} {
  global xth
  return [expr 0.01 * $xth(me,zoom) * $x]
}

proc xth_me_real2cany {y} {
  global xth
  return [expr -0.01 * $xth(me,zoom) * $y]
}

proc xth_me_can2realx {x} {
  global xth
  return [expr 100.0 / $xth(me,zoom) * $x]
}

proc xth_me_can2realy {y} {
  global xth
  return [expr -100.0 / $xth(me,zoom) * $y]
}

proc xth_me_unredo_update {} {
  
  global xth
  
  if {[llength $xth(me,undolist)] > 0} {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,undo) \
      -label [format [mc "Undo %s"] [lindex [lindex $xth(me,undolist) 0] 0]] -state normal
    $xth(gui,tb).undob configure -state normal
    #xth_status_bar me $xth(gui,tb).undob [format [mc "Undo %s"] [lindex [lindex $xth(me,undolist) 0] 0]]    
  } else {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,undo) \
      -label [mc "Undo"] -state disabled
    #xth_status_bar me $xth(gui,tb).undob [mc "Undo"]    
    $xth(gui,tb).undob configure -state disabled 
  }

  if {[llength $xth(me,redolist)] > 0} {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,redo) \
      -label [format [mc "Redo %s"] [lindex [lindex $xth(me,redolist) 0] 0]] -state normal
    $xth(gui,tb).redob configure -state normal
    #xth_status_bar me $xth(gui,tb).redob [format [mc "Redo %s"] [lindex [lindex $xth(me,redolist) 0] 0]]    
  } else {
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,redo) \
      -label [mc "Redo"] -state disabled
    #xth_status_bar me $xth(gui,tb).redob [mc "Redo"]    
    $xth(gui,tb).redob configure -state disabled 
  }

}


proc xth_me_unredo_undo {} {

  global xth
  xth_me_cmds_update {}
  if {[llength $xth(me,undolist)] > 0} {
    set acmd [lindex $xth(me,undolist) 0]
    set xth(me,undolist) [lreplace $xth(me,undolist) 0 0]
    set xth(me,redolist) [linsert $xth(me,redolist) 0 $acmd]
    set xth(me,unredook) 0
    set xth(me,unredoshift) 1
    eval [lindex $acmd 3]
    set xth(me,unredook) 1
    if {$xth(me,unredoshift)} {
      $xth(me,can) xview moveto [lindex $acmd 1]
      $xth(me,can) yview moveto [lindex $acmd 2]
      xth_me_images_rescandraw
    }
    set xth(me,fsave) 1
    xth_me_unredo_update
  }  
}


proc xth_me_get_center {} {
  global xth
  set x [winfo x $xth(me,can)]
  set y [winfo y $xth(me,can)]
  set w [winfo width $xth(me,can)]
  set h [winfo height $xth(me,can)]
  return [list [xth_me_can2realx [$xth(me,can) canvasx [expr $x + $w / 2]]] \
    [xth_me_can2realy [$xth(me,can) canvasy [expr $y + $h / 2]]]]
}


proc xth_me_center_to {crds} {
  global xth
  set x [xth_me_real2canx [lindex $crds 0]]
  set y [xth_me_real2cany [lindex $crds 1]]
  set sr [$xth(me,can) cget -scrollregion]
  set xw [$xth(me,can) xview]
  set yw [$xth(me,can) yview]
  # adjust x
  set wf [expr [lindex $xw 1] - [lindex $xw 0]]
  set hf [expr [lindex $yw 1] - [lindex $yw 0]]
  set tw [expr [lindex $sr 2] - [lindex $sr 0]]
  set th [expr [lindex $sr 3] - [lindex $sr 1]]
  if {double($wf) < 1.0} {
    set pp [expr double($x) - [lindex $sr 0] - \
      0.5 * $wf * $tw]
    if {$pp < 0} {
      set pf 0.0
    } else {
      set pf [expr double($pp) / $tw]
    }
    $xth(me,can) xview moveto $pf
  }
  # adjust y
  if {double($hf) < 1.0} {
    set pp [expr double($y) - [lindex $sr 1] - \
      0.5 * $hf * $th]
    if {$pp < 0} {
      set pf 0.0
    } else {
      set pf [expr double($pp) / $th]
    }
    $xth(me,can) yview moveto $pf
  }
  xth_me_images_rescandraw
}



proc xth_me_unredo_redo {} {

  global xth

  if {[llength $xth(me,redolist)] > 0} {
    set acmd [lindex $xth(me,redolist) 0]
    set xth(me,redolist) [lreplace $xth(me,redolist) 0 0]
    set xth(me,undolist) [linsert $xth(me,undolist) 0 $acmd]
    $xth(me,can) xview moveto [lindex $acmd 1]
    $xth(me,can) yview moveto [lindex $acmd 2]
    xth_me_images_rescandraw
    set xth(me,unredook) 0
    eval [lindex $acmd 4]
    set xth(me,unredook) 1
    set xth(me,fsave) 1
    xth_me_unredo_update
  }  
  
}


proc xth_me_unredo_action {txt undocmd redocmd} {
  
  global xth
  if {$xth(me,unredook)} {
    set xth(me,redolist) {}
    if {[string length $xth(me,unredola)] > 0} {
      set txt $xth(me,unredola)
      set xth(me,unredola) {}
    }
    set xth(me,undolist) [linsert $xth(me,undolist) 0 [list \
      $txt [lindex [$xth(me,can) xview] 0] [lindex [$xth(me,can) yview] 0] $undocmd $redocmd]]
    set xth(me,fsave) 1
    xth_me_unredo_update
  }
  
}


# create new file
proc xth_me_create_file {} {

  global xth
  xth_status_bar_status me ""

  if {$xth(me,fopen) != 0} {
    return 0
  }
  
  # create file variables
  set xth(me,unredook) 0
  incr xth(me,fltid)
  set cfid $xth(me,fltid)
  #set xth(me,fname) [format "noname%02d.th2" $cfid]
  set xth(me,fname) [format "(new file)" $cfid]
  set xth(me,open_file) $xth(me,fname)
  set xth(me,fpath) $xth(gui,initdir)
  set xth(me,ffull) [file join $xth(gui,initdir) $xth(me,fname)]

  set xth(me,fnewf) 1
  set xth(me,fopen) 1
  set xth(me,fsave) 0
  set xth(me,mtime) 0

  set xth(me,nimgs) 0
  set xth(me,imgln) 0
  set xth(me,imgs,list) {}
  set xth(me,imgs,xlist) {}

  set xth(me,cmds,cmdln) 1
  set xth(me,cmds,list) {}
  set xth(me,cmds,xlist) {}
  set xth(me,cmds,action) {}
  set xth(me,cmds,selid) 0
  set xth(me,cmds,selpid) 0
  set xth(me,cmds,selx) 0
  set xth(me,cmds,mode) 0
  xth_me_cmds_create 0 0 0
  xth_me_cmds_update_buttons
  xth_me_cmds_set_mode 0
  xth_me_prev_cmd {}
  $xth(ctrl,me,cmds).cl.l selection set 0 0

  # enable all controls
  $xth(me,pbar) configure -state normal -text "0.0 : 0.0"
  
  $xth(ctrl,me,images).ic.insp configure -state normal
  $xth(ctrl,me,area).l configure -state normal
  $xth(ctrl,me,area).zl configure -state normal
  $xth(ctrl,me,area).zb configure -state normal
    
  $xth(me,menu,file) entryconfigure [mc "New"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Open"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Open (no pics)"] -state disabled
  $xth(me,menu,file) entryconfigure [mc "Save"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Save as"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Auto save"] -state normal
  $xth(me,menu,file) entryconfigure [mc "Close"] -state normal

  $xth(me,menu,file) entryconfigure [mc "Import"] -state normal
  
  $xth(me,menu) entryconfigure [mc "Edit"] -state normal

  $xth(ctrl,me,area).xmin configure -state normal
  $xth(ctrl,me,area).ymin configure -state normal
  $xth(ctrl,me,area).xmax configure -state normal
  $xth(ctrl,me,area).ymax configure -state normal
  $xth(ctrl,me,area).mab configure -state normal
  $xth(ctrl,me,area).aab configure -state normal

  xth_me_image_select 0
  xth_me_cmds_set_action 2

  # create working area
  grid $xth(me,canf) -column 0 -row 0 -sticky news
  xth_me_area_adjust 0 0 1600 1200

  xth_app_title me  

  xth_ctrl_maximize me area
  xth_ctrl_maximize me images
  set xth(me,fsave) 0
  xth_me_unredo_reset
  xth_me_reset_defaults  
  xth_tools_me_enable
}


proc xth_me_prev_cmd {cmd} {
  global xth
  $xth(ctrl,me,prev).txt configure -state normal
  $xth(ctrl,me,prev).txt delete 1.0 end
  $xth(ctrl,me,prev).txt insert 1.0 $cmd
  $xth(ctrl,me,prev).txt configure -state disabled
  $xth(ctrl,me,prev).txt see 1.0
  update idletasks
}


proc xth_me_destroy_file {} {

  global xth
  if {$xth(me,fopen)} {
  
    xth_me_cmds_unselect {}

    set xth(me,unredook) 0
    set xth(me,open_file) ""
    set xth(me,curscrap) {}
    set xth(me,fnewf) 0
    set xth(me,fopen) 0
    xth_me_image_destroy_all
    set xth(me,fsave) 0

    set xth(me,zoom) 100
    set xth(me,zoomv) 100
    $xth(ctrl,me,area).zb configure -text [format "%d %%" 100]
    $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,zoom) -label [format "Zoom %d %%" 100]
  
    # disable all controls
    $xth(me,pbar) configure -text "" -state disabled

    set xth(ctrl,me,images,posx) ""
    set xth(ctrl,me,images,posy) ""
    set xth(ctrl,me,images,newposx) 0
    set xth(ctrl,me,images,newposy) 0
    set xth(ctrl,me,images,vis) 0
    $xth(ctrl,me,images).ic.insp configure -state disabled
    $xth(ctrl,me,area).l configure -state disabled -text ""
    set xth(ctrl,me,area,xmin) ""
    set xth(ctrl,me,area,ymin) ""
    set xth(ctrl,me,area,xmax) ""
    set xth(ctrl,me,area,ymax) ""
    $xth(ctrl,me,area).zl configure -state disabled
    $xth(ctrl,me,area).zb configure -state disabled
    $xth(me,menu,file) entryconfigure [mc "New"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Open"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Open (no pics)"] -state normal
    $xth(me,menu,file) entryconfigure [mc "Save"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Save as"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Auto save"] -state disabled
    $xth(me,menu,file) entryconfigure [mc "Close"] -state disabled

    $xth(me,menu,file) entryconfigure [mc "Import"] -state disabled

    $xth(me,menu) entryconfigure [mc "Edit"] -state disabled

    $xth(ctrl,me,area).xmin configure -state disabled
    $xth(ctrl,me,area).ymin configure -state disabled
    $xth(ctrl,me,area).xmax configure -state disabled
    $xth(ctrl,me,area).ymax configure -state disabled
    $xth(ctrl,me,area).mab configure -state disabled
    $xth(ctrl,me,area).aab configure -state disabled
    xth_me_image_select 0
    focus $xth(gui,main)

    $xth(me,can) delete command
    xth_me_cmds_update_buttons
    xth_me_prev_cmd {}
    
    set xth(me,cmds,list) {}
    set xth(me,cmds,xlist) {}
    grid forget $xth(me,canf) 
    
    xth_ctrl_minimize me cmds
    xth_ctrl_minimize me prev
    xth_ctrl_minimize me ss
    xth_ctrl_minimize me point
    xth_ctrl_minimize me line
    xth_ctrl_minimize me linept
    xth_ctrl_minimize me ac
    xth_ctrl_minimize me scrap
    xth_ctrl_minimize me text
    xth_ctrl_minimize me area
    xth_ctrl_minimize me images
    
    xth_me_unredo_reset
    xth_app_title me
    
  }
  xth_tools_me_enable
}



proc xth_me_before_close_file {btns} {

  global xth
  xth_me_cmds_update {}
  if {$xth(me,fsave)} {    
    set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon question -type $btns\
      -message [format [mc "File %s is not saved. Save it now?"] $xth(me,ffull)] \
      -font $xth(gui,lfont)]
    switch $wtd {
      0 {
	if {[xth_me_save_file 0] == 0} {
	  return 0
	}
      }
      1 {}
      default {return 0}
    }
  }
  return 1
}



# xth_me_read_file --
#
# return success
# {success name cmds lns}

proc xth_me_read_file {pth changebs} {

  global errorInfo xth
  
  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set lastln ""
  set lns {}
  set cmds {}
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm {} {}]
  }
  fconfigure $fid -encoding $curenc
  while {![eof $fid]} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }    
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      if {$encspc} {
	set success 0
	set nm [format [mc "%s \[%s\] -- multiple encoding commands in file"] $pth $flnn]
	break
      }
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
	set success 0
	set nm [format [mc "%s \[%s\] -- unknown encoding -- %s"] $pth $flnn $enc]
	break
      }
      fconfigure $fid -encoding $curenc
      set lastln ""
    } elseif {[regexp {^\s*\#\#XTHERION\#\#\s+(\S.*)\s*$} $fln cmmdln cmmd]} {
      lappend cmds $cmmd
      set lastln ""
      if {[regexp {^\s*\#\#BEGIN\#\#\s*$} $cmmd]} {
	fconfigure $fid -encoding utf-8
      }
      if {[regexp {^\s*\#\#END\#\#\s*$} $cmmd]} {
	fconfigure $fid -encoding $curenc
      }
    } else {
      if {$changebs && [regexp {(.*)\\\s*$} $lastln dumln prevln]} {
	set fln "$prevln$fln"
	if {[llength $lns] > 1} {
	  set lns [lrange $lns 0 [expr [llength $lns] - 2]]
	} else {
	  set lns {}
	}
      }
      lappend lns $fln
      set lastln $fln
    }
  }
  close $fid
  return [list $success $nm $cmds $lns]
  
}  


# xth_me_write_file --
#
# return list containing
# {success name}

proc xth_me_write_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set success 1
  if {[catch {set fid [open $pth w]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm]
  }
  fconfigure $fid -encoding utf-8 -translation {auto auto}
  puts $fid "encoding  utf-8"
  # now let's put special commands
  puts $fid "##XTHERION## xth_me_area_adjust $xth(me,area,xmin) $xth(me,area,ymin) $xth(me,area,xmax) $xth(me,area,ymax)"
  puts $fid "##XTHERION## xth_me_area_zoom_to $xth(me,zoom)"
  # images
  set xxlist {}
  foreach imgx $xth(me,imgs,xlist) {
    set xxlist [linsert $xxlist 0 $imgx]
  }
  foreach imgx $xxlist {
    if {$xth(me,imgs,$imgx,XVIimg)} continue
    set vsb $xth(me,imgs,$imgx,vsb)
    set gamma $xth(me,imgs,$imgx,gamma)
    if {$vsb < 0} {
      set vsb [expr $xth(me,imgs,$imgx,vsb) + 2]
    }
    set root [xth_me_imgs_get_root $imgx]
    set xpos [expr [lindex $xth(me,imgs,$imgx,position) 0]]
    set ypos [expr [lindex $xth(me,imgs,$imgx,position) 1]]
    switch [llength $root] {
      1 {
	set ypos [list $ypos [lindex $root 0]]
      }
      3 {
	set xpos [lindex $root 1]
	set ypos [list [lindex $root 2] [lindex $root 0]]
      }
      0 {}
    }
    puts $fid [format "##XTHERION## xth_me_image_insert %s %s %s 0 {}" \
      "{$xpos $vsb $gamma}" \
      "{$ypos}" \
      [list $xth(me,imgs,$imgx,name)]]
  }
  foreach id $xth(me,cmds,xlist) {
    if {$xth(me,cmds,$id,ct) == 4} {
      puts $fid "\n"
    }
    puts $fid "\n$xth(me,cmds,$id,data)"
  }
  close $fid
  return [list $success $nm]
}


proc xth_me_open_file {dialogid fname fline} {

  global xth

  if {$xth(me,fopen) != 0} {
    return 0
  }
  
  if {$dialogid} {
    set fname [tk_getOpenFile -filetypes $xth(app,me,filetypes) \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) -defaultextension {.th2}]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # now let's open file fname
  
  # read the file
  xth_status_bar_push me
  xth_status_bar_status me [format [mc "Opening %s ..."] $fname]
  
  set fdata [xth_me_read_file $fname 1]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop me
      return 0
  }
  
  # show the file
  xth_me_create_file
  set xth(me,unredook) 0

  set xth(me,fname) [file tail $fname]
  set xth(me,open_file) [lindex $fdata 1]
  set xth(me,fpath) [file dirname $fname]
  set xth(me,ffull) $fname
  set xth(me,mtime) [file mtime $fname]
  
  foreach cmd [lindex $fdata 2] {
    catch {eval $cmd}
  }
  xth_me_cmds_create_all [lindex $fdata 3]
  
  xth_ctrl_maximize me cmds
  xth_ctrl_maximize me point
  xth_ctrl_maximize me line
  xth_ctrl_maximize me linept
  xth_ctrl_maximize me ac
  xth_ctrl_maximize me scrap
  xth_ctrl_maximize me text
  xth_ctrl_maximize me area
  xth_ctrl_maximize me images
  
  set xth(me,fnewf) 0
  set xth(me,fopen) 1
  set xth(me,fsave) 0
  xth_app_title me
  xth_status_bar_pop me
  xth_me_cmds_select 0
  xth_me_unredo_reset
  xth_me_reset_defaults
  return 1
}


proc xth_me_save_file {dialogid} {

  global xth
  if {$xth(me,fopen) == 0} {
    return 0
  }

  xth_me_cmds_update {}
  
  # let's check if we need to save
  if {!($xth(me,fnewf) || $xth(me,fsave) || $dialogid)} {
    return 1
  }
  
  xth_status_bar_push me
  
  if {$xth(me,fnewf)} {
    set dialogid 1
  }

  set fname $xth(me,ffull)
  set ofname $fname
  if {$dialogid} {
    set fname [tk_getSaveFile -filetypes $xth(app,me,filetypes) \
      -parent $xth(gui,main) \
      -initialfile [file tail $fname] -defaultextension {.th2} \
      -initialdir [xth_getdir $fname]]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }

  if {($xth(me,mtime) > 0) && [file exists $fname] && \
    ([file mtime $fname] > $xth(me,mtime))} {
    set forcesave [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon warning -type yesno -default 1 \
      -message [format [mc "File %s was modified outside xtherion. Save it anyway?"] $fname] \
      -font $xth(gui,lfont)]
    if {$forcesave != 0} {
      return 0
    }
  }
 
  # save the file
  xth_status_bar_status me [format [mc "Saving %s ..."] $fname]
  set fdata [xth_me_write_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message [lindex $fdata 1] \
	-font $xth(gui,lfont)
      xth_status_bar_pop me
      return 0
  }
  
  set xth(me,mtime) [file mtime $fname]
  set xth(me,fnewf) 0
  set xth(me,fsave) 0
  
  # if SaveAs, then redisplay the file
  if {$dialogid} {
    if {[string compare $ofname $fname] != 0} {
      set xth(me,fname) [file tail $fname]
      set xth(me,ffull) $fname
      set xth(me,fpath) [file dirname $fname]
      set xth(me,open_file) $xth(me,fname)
      xth_app_title me
    }
  }  

  after 250 {xth_status_bar_pop me}
  return 1
    
}



proc xth_me_close_file {} {

  global xth

  if {$xth(me,fopen) == 0} {
    return
  }

  xth_me_cmds_update {}
  
  if {[xth_me_before_close_file yesnocancel]} {
    xth_me_destroy_file
    return 1
  } else {
    return 0
  }
  
}


proc xth_me_area_redraw {} {
  global xth
  set x1 [xth_me_real2canx $xth(me,area,xmin)]
  set x2 [xth_me_real2canx $xth(me,area,xmax)]
  set y1 [xth_me_real2cany $xth(me,area,ymin)]
  set y2 [xth_me_real2cany $xth(me,area,ymax)]
  $xth(me,can) coords $xth(me,canid,area) $x1 $y1 $x1 $y2 $x2 $y2 $x2 $y1  
}


proc xth_me_limitize {limits x y} {
  set xmin $x
  set xmax $x
  set ymin $y
  set ymax $y
  if {[llength $limits] == 4} {
    if {[lindex $limits 0] < $x} {
      set xmin [lindex $limits 0]
    }
    if {[lindex $limits 1] < $y} {
      set ymin [lindex $limits 1]
    }
    if {[lindex $limits 2] > $x} {
      set xmax [lindex $limits 2]
    }
    if {[lindex $limits 3] > $y} {
      set ymax [lindex $limits 3]
    }
  }
  return [list $xmin $ymin $xmax $ymax]
}


proc xth_me_image_newpos {} {

  global xth 
  set limits {}

  # scan limits of pictures
  foreach imgx $xth(me,imgs,xlist) {
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set limits [xth_me_limitize $limits $px $py]
    if {$xth(me,imgs,$imgx,XVI)} {
      set gv $xth(me,imgs,$imgx,XVIgrid)
      set v1x [expr [lindex $gv 2] * ([lindex $gv 6] - 1.0)]
      set v1y [expr [lindex $gv 3] * ([lindex $gv 6] - 1.0)]
      set v2x [expr [lindex $gv 4] * ([lindex $gv 7] - 1.0)]
      set v2y [expr [lindex $gv 5] * ([lindex $gv 7] - 1.0)]
      set limits [xth_me_limitize $limits [expr $px + $v1x] [expr $py + $v1y]]
      set limits [xth_me_limitize $limits [expr $px + $v2x] [expr $py + $v2y]]
      set limits [xth_me_limitize $limits [expr $px + $v1x + $v2x] [expr $py + $v1y + $v2y]]
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set sx [image width $xth(me,imgs,$imgx,image)]
      set sy [image height $xth(me,imgs,$imgx,image)]
      set limits [xth_me_limitize $limits [expr $px + $sx] [expr $py - $sy]]
    }
  }

  # scan limits of commands
  set cmdlim [$xth(me,can) bbox command]
  if {[llength $cmdlim] == 4} {
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 0]] [xth_me_can2realy [lindex $cmdlim 1]]]
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 2]] [xth_me_can2realy [lindex $cmdlim 3]]]
  }

  if {[llength $limits] > 0} {
    set xth(ctrl,me,images,newposx) [lindex $limits 0]
    set xth(ctrl,me,images,newposy) [expr 32.0 + [lindex $limits 3]]
  } else {
    set xth(ctrl,me,images,newposx) 0
    set xth(ctrl,me,images,newposy) 0
  }
    
}


proc xth_me_area_auto_adjust {} {
  
  global xth 
  set limits {}
  
  # scan limits of pictures
  foreach imgx $xth(me,imgs,xlist) {
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set limits [xth_me_limitize $limits $px $py]
    if {$xth(me,imgs,$imgx,XVI)} {
      set gv $xth(me,imgs,$imgx,XVIgrid)
      set v1x [expr [lindex $gv 2] * ([lindex $gv 6] - 1.0)]
      set v1y [expr [lindex $gv 3] * ([lindex $gv 6] - 1.0)]
      set v2x [expr [lindex $gv 4] * ([lindex $gv 7] - 1.0)]
      set v2y [expr [lindex $gv 5] * ([lindex $gv 7] - 1.0)]
      set limits [xth_me_limitize $limits [expr $px + $v1x] [expr $py + $v1y]]
      set limits [xth_me_limitize $limits [expr $px + $v2x] [expr $py + $v2y]]
      set limits [xth_me_limitize $limits [expr $px + $v1x + $v2x] [expr $py + $v1y + $v2y]]
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set sx [image width $xth(me,imgs,$imgx,image)]
      set sy [image height $xth(me,imgs,$imgx,image)]
      set limits [xth_me_limitize $limits [expr $px + $sx] [expr $py - $sy]]
    }
  }

  # scan limits of commands
  set cmdlim [$xth(me,can) bbox command]
  if {[llength $cmdlim] == 4} {
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 0]] [xth_me_can2realy [lindex $cmdlim 1]]]
    set limits [xth_me_limitize $limits [xth_me_can2realx [lindex $cmdlim 2]] [xth_me_can2realy [lindex $cmdlim 3]]]
  }
  
  # adjust area limits
  if {[llength $limits] < 4} {
    set limits {128 128 128 128}
  }  
  xth_me_area_adjust [expr [lindex $limits 0] - 128] [expr [lindex $limits 1] - 128] \
    [expr [lindex $limits 2] + 128] [expr [lindex $limits 3] + 128]

}

proc xth_me_area_adjust {x1 y1 x2 y2} {
  
  global xth
  
  xth_me_unredo_action [mc "adjusting area"] \
    "xth_me_area_adjust $xth(me,area,xmin) $xth(me,area,ymin) $xth(me,area,xmax) $xth(me,area,ymax)" \
    "xth_me_area_adjust $x1 $y1 $x2 $y2"

  # let's assign zeros to non numbers
  if {[catch {expr $x1}]} {
    set x1 0.0
  }
  if {[catch {expr $x2}]} {
    set x2 0.0
  }
  if {[catch {expr $y1}]} {
    set y1 0.0
  }
  if {[catch {expr $y2}]} {
    set y2 0.0
  }
  if {($x2 - $x1) < 256} {
    set x2 [expr $x1 + 256]
  }
  if {($y2 - $y1) < 256} {
    set y2 [expr $y1 + 256]
  }
  
  set xth(me,area,xmin) $x1
  set xth(me,area,xmax) $x2
  set xth(me,area,ymin) $y1
  set xth(me,area,ymax) $y2

  set xth(ctrl,me,area,xmin) $x1
  set xth(ctrl,me,area,xmax) $x2
  set xth(ctrl,me,area,ymin) $y1
  set xth(ctrl,me,area,ymax) $y2

  xth_me_area_redraw
  xth_me_area_scroll_adjust
  
  catch {$xth(ctrl,me,area).l configure -text [format "%.0f:%.0f - %.0f:%.0f" $x1 $y1 $x2 $y2]}

  set xth(ctrl,me,images,newposx) $x1
  set xth(ctrl,me,images,newposy) $y1
  
}


proc xth_me_area_scroll {wdg fir las} {
  xth_scroll $wdg $fir $las
  xth_me_area_scroll_adjust
}


proc xth_me_area_scroll_adjust {} {
  
  global xth
  set scw [winfo width $xth(me,canf)]
  set sch [winfo height $xth(me,canf)]
  set axmax [xth_me_real2canx $xth(me,area,xmax)]
  set axmin [xth_me_real2canx $xth(me,area,xmin)]
  set aymax [xth_me_real2cany $xth(me,area,ymin)]
  set aymin [xth_me_real2cany $xth(me,area,ymax)]
  set aw [expr $axmax - $axmin]
  set ah [expr $aymax - $aymin]
  if {$aw < ($scw - 3 * $xth(gui,sbwidth))} {
    set sx1 [expr $axmin - ($scw - $aw)/2.0 + $xth(gui,sbwidth)]
    set sx2 [expr $axmax + ($scw - $aw)/2.0 - $xth(gui,sbwidth)]
    # eval $xth(scroll,$xth(me,canf).sh,hide)
  } else {
    set sx1 [expr $axmin - $xth(gui,sbwidth)/2.0]
    set sx2 [expr $axmax + $xth(gui,sbwidth)/2.0]
  }
  if {$ah < ($sch - 3 * $xth(gui,sbwidth))} {
    set sy1 [expr $aymin - ($sch - $ah)/2.0 + $xth(gui,sbwidth)]
    set sy2 [expr $aymax + ($sch - $ah)/2.0 - $xth(gui,sbwidth)]
    # eval $xth(scroll,$xth(me,canf).sv,hide)
  } else {
    set sy1 [expr $aymin - $xth(gui,sbwidth)/2.0]
    set sy2 [expr $aymax + $xth(gui,sbwidth)/2.0]
  }
  
  set csr [$xth(me,can) cget -scrollregion]
  set nsr "$sx1 $sy1 $sx2 $sy2"
  if {[string compare $csr $nsr] != 0} {
    $xth(me,can) configure -scrollregion $nsr
  }
}


proc xth_me_area_zoom_to {zv} {
  global xth
  
  xth_me_cmds_update {}
  
  if {($xth(me,cmds,$xth(me,cmds,selid),ct) == 3) && 
      ($xth(me,cmds,selpid) > 0)} {
    set ccrds [list $xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),x) \
      $xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),y)]
  } elseif {$xth(me,cmds,$xth(me,cmds,selid),ct) == 2} {
    set ccrds [list $xth(me,cmds,$xth(me,cmds,selid),x) \
      $xth(me,cmds,$xth(me,cmds,selid),y)]
  } else {
    set ccrds [xth_me_get_center]
  }
  
  xth_me_unredo_action [mc "zooming"] \
    "xth_me_area_zoom_to $xth(me,zoom)" \
    "xth_me_area_zoom_to $zv"
    
  set xth(me,zoom) $zv
  set xth(me,zoomv) $zv
  $xth(ctrl,me,area).zb configure -text [format "%d %%" $zv]
  $xth(me,menu,edit) entryconfigure $xth(me,menu,edit,zoom) -label [format [mc "Zoom %d %%"] $zv]
  
  xth_me_area_redraw   
  xth_me_area_scroll_adjust
  
  foreach imgx $xth(me,imgs,xlist) {
    xth_me_image_rescan $imgx
    xth_me_image_redraw $imgx
  }
  
  xth_status_bar_push me
  xth_status_bar_status me [mc "Zooming objects ..."]
  set ncmds [llength $xth(me,cmds,xlist)]
  xth_me_progbar_show $ncmds
  set ccmd 0
  foreach id $xth(me,cmds,xlist) {
    incr ccmd
    xth_me_progbar_prog $ccmd
    switch $xth(me,cmds,$id,ct) {
      4 {
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_move_scrap_xctrl 1 [lindex $xth(me,cmds,$id,scale) 0] \
	    [lindex $xth(me,cmds,$id,scale) 1] 
	  xth_me_cmds_move_scrap_xctrl 2 [lindex $xth(me,cmds,$id,scale) 2] \
	    [lindex $xth(me,cmds,$id,scale) 3]
	}
      }
      3 {
	xth_me_cmds_move_line $id
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_show_line_xctrl $id
	  set pid $xth(me,cmds,selpid)
	  if {$pid != 0} {
	    xth_me_cmds_show_linept_xctrl $id $pid
	  }
	}
      }
      2 {
	$xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
	if {$id == $xth(me,cmds,selid)} {
	  xth_me_cmds_move_point_xctrl $id
	  xth_me_cmds_move_point_fill_xctrl $id $xth(me,cmds,$id,rotation) $xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize)
	}
      }
    }
  }
  
  xth_me_center_to $ccrds
  set xth(me,unredoshift) 0
  xth_me_progbar_hide
  xth_status_bar_pop me
  update idletasks
  
}

proc xth_me_image_choose {imgx} {
  global xth
  xth_me_image_select [lsearch $xth(me,imgs,xlist) $imgx]
}

proc xth_me_area_start_drag {tagOrId imgx x y} {
  global xth
  set hss [$xth(me,canf).sh get]
  set vss [$xth(me,canf).sv get]
  set srg [$xth(me,can) cget -scrollregion]
  set w [expr [lindex $srg 2] - [lindex $srg 0]]
  set h [expr [lindex $srg 3] - [lindex $srg 1]]
  set fx [expr (1 - [lindex $hss 1] + [lindex $hss 0]) * $w]
  set fy [expr (1 - [lindex $vss 1] + [lindex $vss 0]) * $h]     
  if {$fx > 0} {set fx [expr (1 - [lindex $hss 1] + [lindex $hss 0]) / $fx]}
  if {$fy > 0} {set fy [expr (1 - [lindex $vss 1] + [lindex $vss 0]) / $fy]}
  set xth(me,area,drag_fx) $fx
  set xth(me,area,drag_fy) $fy
  set xth(me,area,drag_ox) [lindex $hss 0]
  set xth(me,area,drag_oy) [lindex $vss 0]
  set xth(me,area,drag_mx) $x
  set xth(me,area,drag_my) $y
  $xth(me,can) configure -cursor plus
  $xth(me,can) bind $tagOrId  "xth_me_area_drag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_end_drag $tagOrId \"$imgx\" %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_drag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_end_drag $tagOrId \"$imgx\" %x %y"
  update idletasks
}

proc xth_me_area_drag {x y} {
  global xth
  set xdelta [expr ($xth(me,area,drag_mx) - $x) * $xth(me,area,drag_fx)]
  set ydelta [expr ($xth(me,area,drag_my) - $y) * $xth(me,area,drag_fy)]
  $xth(me,can) xview moveto [expr $xth(me,area,drag_ox) + $xdelta]
  $xth(me,can) yview moveto [expr $xth(me,area,drag_oy) + $ydelta]
  update idletasks     
}


proc xth_me_area_end_drag {tagOrId imgx x y} {
  global xth
  xth_me_area_drag $x $y
  $xth(me,can) configure -cursor crosshair
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[string length $imgx] > 0} {
    xth_me_image_choose $imgx
  }
  xth_me_images_rescandraw
  update idletasks 
}


proc xth_me_area_motion {x y} {
  global xth
  $xth(me,pbar) configure -text [format "%.1f : %.1f" [xth_me_can2realx [$xth(me,can) canvasx $x]] [xth_me_can2realy [$xth(me,can) canvasy $y]]]
}


proc xth_me_bind_area_drag {tagOrId imgx} {
  global xth
  $xth(me,can) bind $tagOrId <1> "xth_me_cmds_click_area $tagOrId %x %y"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-1> "xth_me_cmds_click_area $xth(me,canid,area) %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_motion %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_area_start_drag $tagOrId \"$imgx\" %x %y"
  $xth(me,can) bind $tagOrId <$xth(gui,rmb)> "xth_me_area_start_drag $tagOrId \"$imgx\" %x %y"
}

proc xth_me_bind_area_only_drag {tagOrId} {
  global xth
  $xth(me,can) bind $tagOrId  "xth_me_area_start_drag $tagOrId {} %x %y"
  $xth(me,can) bind $tagOrId <$xth(gui,rmb)> "xth_me_area_start_drag $tagOrId {} %x %y"
}




proc xth_me_image_start_drag {tagOrId imgx x y} {
  global xth
  set xth(me,imgs,drag_mx) $x
  set xth(me,imgs,drag_my) $y
  set xth(me,imgs,drag_px) [lindex $xth(me,imgs,$imgx,position) 0]
  set xth(me,imgs,drag_py) [lindex $xth(me,imgs,$imgx,position) 1]
  $xth(me,can) configure -cursor fleur
  $xth(me,can) bind $tagOrId  "xth_me_image_drag $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_end_drag $tagOrId $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_drag $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_end_drag $tagOrId $imgx %x %y"
  update idletasks
}

proc xth_me_image_drag {imgx x y} {
  global xth
  set xth(me,imgs,$imgx,position) [list \
    [expr $xth(me,imgs,drag_px) - [expr double($xth(me,imgs,drag_mx) - $x) * 100.0 / $xth(me,zoom)]] \
    [expr $xth(me,imgs,drag_py) + [expr double($xth(me,imgs,drag_my) - $y) * 100.0 / $xth(me,zoom)]] \
  ]
  xth_me_image_redraw $imgx
}

proc xth_me_image_end_drag {tagOrId imgx x y} {
  global xth
  xth_me_image_drag $imgx $x $y
  $xth(me,can) configure -cursor crosshair
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  xth_me_image_choose $imgx
  xth_me_unredo_action [mc "dragging image"] \
    "xth_me_image_move $imgx $xth(me,imgs,drag_px) $xth(me,imgs,drag_py)" \
    "xth_me_image_move $imgx $xth(me,imgs,$imgx,position)"
  update idletasks 
}


proc xth_me_bind_image_drag {tagOrId imgx} {
  global xth
  $xth(me,can) bind $tagOrId  "xth_me_image_start_drag $tagOrId $imgx %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_image_start_drag $tagOrId $imgx %x %y"
}

proc xth_me_mousewheel_up {} {
  global xth
  switch $xth(app,active) {
    me {
      if {$xth(me,zoom)*2 > 800} return;
      xth_me_area_zoom_to [ expr round([expr {$xth(me,zoom) * 1.1}]) ]
    }
  }
}

proc xth_me_mousewheel_down {} {
  global xth
  switch $xth(app,active) {
    me {
      if {$xth(me,zoom)*2 < 12} return;
      xth_me_area_zoom_to [ expr round([expr {$xth(me,zoom) / 1.1}]) ]
    }
  }
}

# Windows and Mac have only one binding for the mouse wheel, no matter if it's going up or down
# so we have to figure it out ourselves.
proc xth_me_mousewheel {widget delta} {
  if { $delta >= 0 } {
    set cmd [list yview scroll [expr {-$delta/3}] pixels]
    set cms_canvas xth_me_mousewheel_up
  } else {
    set cmd [list yview scroll [expr {(2-$delta)/3}] pixels]
    set cms_canvas xth_me_mousewheel_down
  }
  set over [winfo containing -displayof $widget {*}[winfo pointerxy $widget]]
  if { $over eq ".xth.me.af.apps.cf.c"} {
    catch {$cms_canvas}
  } elseif { $over == "" || [catch {$over {*}$cmd}] } {
    catch {$widget {*}$cmd}
  }
  return;
}

xth_app_create me [mc "Map Editor"]

xth_ctrl_add me cmds [mc "File commands"]
xth_ctrl_add me ss [mc "Search & Select"]
xth_ctrl_add me prev [mc "Command preview"]
xth_ctrl_add me point [mc "Point control"]
xth_ctrl_add me line [mc "Line control"]
xth_ctrl_add me linept [mc "Line point control"]
xth_ctrl_add me ac [mc "Area control"]
xth_ctrl_add me scrap [mc "Scrap control"]
xth_ctrl_add me text [mc "Text editor"]
xth_ctrl_add me area [mc "Drawing area"]
xth_ctrl_add me images [mc "Background images"]
xth_ctrl_finish me

# global variables initialization
set xth(me,ffull) {}
set xth(me,fltid) 0
set xth(me,fnewf) 0
set xth(me,fopen) 0
set xth(me,fsave) 0
set xth(me,zoom) 100
set xth(me,zoomv) 100
set xth(me,area,xmin) 0
set xth(me,area,xmax) 1600
set xth(me,area,ymin) 0
set xth(me,area,ymax) 1200
set xth(me,undolist) {}
set xth(me,redolist) {}
set xth(me,unredook) 0
set xth(me,unredola) {}
set xth(me,curscrap) {}
set xth(me,snai) 1
set xth(me,hinactives) 0 

set xth(ctrl,me,images,posx) ""
set xth(ctrl,me,images,posy) ""
set xth(ctrl,me,images,newposx) 0
set xth(ctrl,me,images,newposy) 0
set xth(ctrl,me,images,vis) 0
set xth(ctrl,me,images,gamma) 0.0
set xth(ctrl,me,area,xmin) ""
set xth(ctrl,me,area,xmax) ""
set xth(ctrl,me,area,ymin) ""
set xth(ctrl,me,area,ymax) ""

set xth(ctrl,me,cmds,moveto) ""

set xth(ctrl,me,scrap,name) ""
set xth(ctrl,me,scrap,projection) ""
set xth(ctrl,me,scrap,options) ""
set xth(ctrl,me,scrap,px1) ""
set xth(ctrl,me,scrap,py1) ""
set xth(ctrl,me,scrap,px2) ""
set xth(ctrl,me,scrap,py2) ""
set xth(ctrl,me,scrap,rx1) ""
set xth(ctrl,me,scrap,ry1) ""
set xth(ctrl,me,scrap,rx2) ""
set xth(ctrl,me,scrap,ry2) ""
set xth(ctrl,me,scrap,units) ""
set xth(ctrl,me,scrap,pp1) {}
set xth(ctrl,me,scrap,pp2) {}
set xth(ctrl,me,scrap,sklempty) {}


set xth(ctrl,me,point,x) {}
set xth(ctrl,me,point,y) {}
set xth(ctrl,me,point,type) {}
set xth(ctrl,me,point,name) {}
set xth(ctrl,me,point,opts) {}
set xth(ctrl,me,point,rot) {}
set xth(ctrl,me,point,xs) {}
set xth(ctrl,me,point,ys) {}
set xth(ctrl,me,point,rotid) 0
set xth(ctrl,me,point,xsid) 0
set xth(ctrl,me,point,ysid) 0

set xth(ctrl,me,line,type) {}
set xth(ctrl,me,line,name) {}
set xth(ctrl,me,line,opts) {}
set xth(ctrl,me,line,reverse) 0
set xth(ctrl,me,line,close) 0
set xth(ctrl,me,line,empty) {}
set xth(ctrl,me,linept,x) {}
set xth(ctrl,me,linept,y) {}
set xth(ctrl,me,linept,xp) {}
set xth(ctrl,me,linept,yp) {}
set xth(ctrl,me,linept,xn) {}
set xth(ctrl,me,linept,yn) {}
set xth(ctrl,me,linept,idp) 0
set xth(ctrl,me,linept,idn) 0
set xth(ctrl,me,linept,smooth) 0
set xth(ctrl,me,linept,rot) {}
set xth(ctrl,me,linept,rs) {}
set xth(ctrl,me,linept,ls) {}
set xth(ctrl,me,linept,rotid) 0
set xth(ctrl,me,linept,rsid) 0
set xth(ctrl,me,linept,lsid) 0

set xth(ctrl,me,ac,type) {}
set xth(ctrl,me,ac,opts) {}
set xth(ctrl,me,ac,empty) {}


set xth(ctrl,me,ss,expr) "station"
set xth(ctrl,me,ss,regexp) 0
set xth(ctrl,me,ss,cases) 0

# initialize drawing area

xth_about_status [mc "loading area module ..."]

$xth(gui,me).af.apps configure -bg black
set canfm $xth(gui,me).af.apps.cf 
set xth(me,canf) $canfm
grid columnconf $xth(gui,me).af.apps 0 -weight 1
grid rowconf $xth(gui,me).af.apps 0 -weight 1
frame $canfm
set xth(me,can) $canfm.c
scrollbar $canfm.sv -orient vertical -command "$xth(me,can) yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)  
bind $canfm.sv  xth_me_images_rescandraw
scrollbar $canfm.sh -orient horizontal -command "$xth(me,can) xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $canfm.sh  xth_me_images_rescandraw
canvas $xth(me,can) -relief flat -borderwidth 0 -bg black \
	-xscrollcommand "xth_me_area_scroll $canfm.sh" \
	-yscrollcommand "xth_me_area_scroll $canfm.sv" \
	-cursor crosshair
bind $xth(me,can)  xth_me_images_rescandraw
  
set xth(me,canid,area) [$xth(me,can) create polygon 0 0 0 256 256 256 256 0 -fill LightYellow]
set xth(me,canid,scrap,scp1) [$xth(me,can) create rectangle 0 0 3 3 \
  -fill red -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,scrap,scp2) [$xth(me,can) create rectangle 0 0 3 3 \
  -fill red -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,scrap,scpA) [$xth(me,can) create line 0 0 3 3 \
  -fill red -width 5 -state hidden -arrow last -arrowshape {18 20 5} -tags {cmd_ctrl}]

set xth(me,canid,scrap,scp1,pos) {0 0}
set xth(me,canid,scrap,scp2,pos) {0 0}
set xth(me,cmds,scrap_scale) 0

xth_me_bind_area_drag $xth(me,canid,area) {}
xth_me_area_adjust 0 0 1600 1200

set xth(me,canid,point,selector) [$xth(me,can) create oval 0 0 10 10 \
  -fill {} -outline red -width 1 -state hidden -tags {cmd_ctrl}]
set xth(me,canid,point,fill) [$xth(me,can) create polygon 0 0 10 0 10 10 0 10 \
  -fill red -stipple gray12 -state hidden -smooth on -tags {ptfill cmd_ctrl} -width 1]
set xth(me,canid,point,fx) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {ptfill cmd_ctrl}]
set xth(me,canid,point,fy) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {ptfill cmd_ctrl}]
#set xth(me,canid,point,fxc) [$xth(me,can) create oval 0 0 10 10 \
#  -outline red -fill red  -width 1 -state hidden -tags {ptfill cmd_ctrl}]
#set xth(me,canid,point,fyc) [$xth(me,can) create oval 0 0 10 10 \
#  -outline red -fill red  -width 1 -state hidden -tags {ptfill cmd_ctrl}]

xth_me_bind_area_drag $xth(me,canid,point,fill) {}
xth_me_bind_area_drag $xth(me,canid,point,selector) {}
xth_me_bind_area_only_drag $xth(me,canid,point,fx)
xth_me_bind_area_only_drag $xth(me,canid,point,fy)

set xth(me,canid,linept,selector) [$xth(me,can) create oval 0 0 10 10 \
  -fill {} -outline red -width 1 -state hidden -tags {linectrl cmd_ctrl}]
set xth(me,canid,linept,fr) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {linectrl cmd_ctrl}]
set xth(me,canid,linept,fl) [$xth(me,can) create line 0 0 10 10 \
  -width 5 -fill red -arrow last -arrowshape {9 12 4} \
  -state hidden -tags {linectrl cmd_ctrl}]

set xth(me,canid,linept,ppcpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill magenta -state hidden -tags "linectrl lineptppcp cmd_ctrl"]
set xth(me,canid,linept,nncpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill magenta -state hidden -tags "linectrl lineptnncp cmd_ctrl"]
set xth(me,canid,linept,ppcp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill magenta -outline magenta -state hidden -tags "linectrl lineptppcp cmd_ctrl"]
set xth(me,canid,linept,nncp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill magenta -outline magenta -state hidden -tags "linectrl lineptnncp cmd_ctrl"]

set xth(me,canid,linept,pcpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptpcp cmd_ctrl"]
set xth(me,canid,linept,ncpl) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,clwidth) -fill $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptncp cmd_ctrl"]
set xth(me,canid,linept,pcp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill red -outline $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptpcp cmd_ctrl"]
set xth(me,canid,linept,ncp) [$xth(me,can) create rectangle 0 0 10 10 \
  -width 1 -fill red -outline $xth(gui,me,controlfill) -state hidden -tags "linectrl lineptncp cmd_ctrl"]

set xth(me,canid,line,tick) [$xth(me,can) create line 0 0 10 10 \
  -width $xth(gui,me,line,tickwidth) -fill #ffda00 -state hidden -tags "entirelinectrl cmd_ctrl"]

  
xth_me_bind_area_only_drag $xth(me,canid,linept,fr)
xth_me_bind_area_only_drag $xth(me,canid,linept,fl)
xth_me_bind_area_drag $xth(me,canid,linept,pcpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,ncpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,ppcpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,nncpl) {}
xth_me_bind_area_drag $xth(me,canid,linept,selector) {}
xth_me_bind_area_drag $xth(me,canid,line,tick) {}

grid columnconf $canfm 0 -weight 1
grid rowconf $canfm 0 -weight 1
grid $xth(me,can) -column 0 -row 0 -sticky news
xth_scroll_showcmd $canfm.sv "grid $canfm.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $canfm.sv "grid forget $canfm.sv"
xth_scroll_showcmd $canfm.sh "grid $canfm.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $canfm.sh "grid forget $canfm.sh"


Label $xth(ctrl,me,area).l -text "" -anchor center -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,area).l [mc "Current drawing area."]
Entry $xth(ctrl,me,area).xmin -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,xmin)
xth_status_bar me $xth(ctrl,me,area).xmin [mc "X min."]
Entry $xth(ctrl,me,area).ymin -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,ymin)
xth_status_bar me $xth(ctrl,me,area).ymin [mc "Y min."]
Entry $xth(ctrl,me,area).xmax -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,xmax)
xth_status_bar me $xth(ctrl,me,area).xmax [mc "X max."]
Entry $xth(ctrl,me,area).ymax -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,area,ymax)
xth_status_bar me $xth(ctrl,me,area).ymax [mc "Y max."]
Button $xth(ctrl,me,area).mab -text [mc "Adjust"] -anchor center -font $xth(gui,lfont) -state disabled -width 12 \
  -command {
    xth_me_area_adjust $xth(ctrl,me,area,xmin) $xth(ctrl,me,area,ymin) \
      $xth(ctrl,me,area,xmax) $xth(ctrl,me,area,ymax) 
  }
xth_status_bar me $xth(ctrl,me,area).mab [mc "Adjust drawing area to given limits."]
Button $xth(ctrl,me,area).aab -text [mc "Auto adjust"] -anchor center -font $xth(gui,lfont) -state disabled -width 12 \
  -command xth_me_area_auto_adjust
xth_status_bar me $xth(ctrl,me,area).aab [mc "Adjust drawing area to automatically calculated limits."]
Label $xth(ctrl,me,area).zl -text [mc "zoom"] -anchor e -font $xth(gui,lfont) -state disabled
menubutton $xth(ctrl,me,area).zb -text "100 %" -anchor center -font $xth(gui,lfont) \
  -indicatoron true -menu $xth(ctrl,me,area).zb.m -state disabled
menu $xth(ctrl,me,area).zb.m -tearoff 0 -font $xth(gui,lfont)
$xth(ctrl,me,area).zb.m add radiobutton -label "25 %" -variable xth(me,zoomv) -value 25 -command "xth_me_area_zoom_to 25"
$xth(ctrl,me,area).zb.m add radiobutton -label "50 %" -variable xth(me,zoomv) -value 50 -command "xth_me_area_zoom_to 50"
$xth(ctrl,me,area).zb.m add radiobutton -label "100 %" -variable xth(me,zoomv) -value 100 -command "xth_me_area_zoom_to 100"
$xth(ctrl,me,area).zb.m add radiobutton -label "200 %" -variable xth(me,zoomv) -value 200 -command "xth_me_area_zoom_to 200"
$xth(ctrl,me,area).zb.m add radiobutton -label "400 %" -variable xth(me,zoomv) -value 400 -command "xth_me_area_zoom_to 400"
xth_status_bar me $xth(ctrl,me,area).zb [mc "Zoom drawing area."]
xth_status_bar me $xth(ctrl,me,area).zl [mc "Zoom drawing area."]

xth_me_bind_entry_focus_return "$xth(ctrl,me,area).xmin $xth(ctrl,me,area).ymin $xth(ctrl,me,area).xmax $xth(ctrl,me,area).ymax" {
    xth_me_area_adjust $xth(ctrl,me,area,xmin) $xth(ctrl,me,area,ymin) \
      $xth(ctrl,me,area,xmax) $xth(ctrl,me,area,ymax) 
}
xth_me_bind_entry_focusin "$xth(ctrl,me,area).xmin $xth(ctrl,me,area).ymin $xth(ctrl,me,area).xmax $xth(ctrl,me,area).ymax"


grid columnconf $xth(ctrl,me,area) 0 -weight 1
grid columnconf $xth(ctrl,me,area) 1 -weight 1
grid columnconf $xth(ctrl,me,area) 2 -weight 1
grid columnconf $xth(ctrl,me,area) 3 -weight 1
grid $xth(ctrl,me,area).l -column 0 -row 0 -columnspan 4 -sticky news
grid $xth(ctrl,me,area).xmin -column 0 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).ymin -column 1 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).xmax -column 2 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).ymax -column 3 -row 1 -sticky news -padx 1
grid $xth(ctrl,me,area).mab -column 0 -row 2 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).aab -column 2 -row 2 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).zl -column 0 -row 3 -columnspan 2 -sticky news
grid $xth(ctrl,me,area).zb -column 2 -row 3 -columnspan 2 -sticky news


xth_about_status [mc "loading commands module ..."]

# initialize file commands
set clbox $xth(ctrl,me,cmds).cl
set ccbox $xth(ctrl,me,cmds).cc
frame $clbox
frame $ccbox
listbox $clbox.l -height 8 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $clbox.sv" \
  -xscrollcommand "xth_scroll $clbox.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -listvariable xth(me,cmds,list) -selectborderwidth 0
scrollbar $clbox.sv -orient vert  -command "$clbox.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $clbox.sh -orient horiz  -command "$clbox.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $clbox.l <> {xth_me_cmds_select {}}
bind $clbox.l  "focus $clbox.l"

grid columnconf $clbox 0 -weight 1
grid rowconf $clbox 0 -weight 1
grid $clbox.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $clbox.sv "grid $clbox.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $clbox.sv "grid forget $clbox.sv"
xth_scroll_showcmd $clbox.sh "grid $clbox.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $clbox.sh "grid forget $clbox.sh"
xth_status_bar me $clbox [mc "Select command."]

grid columnconf $xth(ctrl,me,cmds) 0 -weight 1
grid $clbox -column 0 -row 0 -sticky news
grid $ccbox -column 0 -row 1 -sticky news

Button $ccbox.go -text [mc "Insert scrap"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_cmds_action
xth_status_bar me $ccbox.go [mc "Action button."]
Button $ccbox.sel -text [mc "Select"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_set_mode 0}
xth_status_bar me $ccbox.sel [mc "Switch mouse mode to select objects."]
menubutton $ccbox.cfg -text [mc "Action"] -anchor center -font $xth(gui,lfont) \
  -indicatoron true -menu $ccbox.cfg.m -state disabled
xth_status_bar me $ccbox.cfg [mc "Configure action assigned to action button."]
menu $ccbox.cfg.m -tearoff 0 -font $xth(gui,lfont)
$ccbox.cfg.m add command -label [mc "Insert point"] -command {xth_me_cmds_set_action 1}
$ccbox.cfg.m add command -label [mc "Insert line"] -command {xth_me_cmds_set_action 0}
$ccbox.cfg.m add command -label [mc "Insert area"] -command {xth_me_cmds_set_action 5}
$ccbox.cfg.m add command -label [mc "Insert scrap"] -command {xth_me_cmds_set_action 2}
$ccbox.cfg.m add command -label [mc "Insert text"] -command {xth_me_cmds_set_action 3}
$ccbox.cfg.m add separator
$ccbox.cfg.m add command -label [mc "Delete"] -command {xth_me_cmds_set_action 4}
Button $ccbox.mu -text [mc "Move up"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_up {}"
xth_status_bar me $ccbox.mu [mc "Move file command up in the list."]
Button $ccbox.md -text [mc "Move down"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_down {}"
xth_status_bar me $ccbox.md [mc "Move file command down in the list."]
Button $ccbox.mt -text [mc "Move to"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_cmds_move_to {} {}"
xth_status_bar me $ccbox.mt [mc "Move file command to given position."]
ComboBox $ccbox.tt -postcommand xth_me_cmds_set_move_to_list \
  -modifycmd xth_me_cmds_set_move_to \
  -font $xth(gui,lfont) -height 16 -state disabled -width 8 \
  -textvariable xth(ctrl,me,cmds,moveto)
xth_status_bar me $ccbox.tt [mc "Select destination scrap and position in it."]
grid columnconf $ccbox 0 -weight 1
grid columnconf $ccbox 1 -weight 1
grid $ccbox.go -column 0 -row 0 -columnspan 2 -sticky news
grid $ccbox.cfg $ccbox.sel -row 1 -sticky news
grid $ccbox.mu $ccbox.md -row 2 -sticky news
grid $ccbox.mt $ccbox.tt -row 3 -sticky news

# initialize text editor
set txb $xth(ctrl,me,text)
text $txb.txt -height 6 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
Button $txb.upd -text [mc "Update text"] -anchor center -font $xth(gui,lfont) \
  -state disabled \
  -command {xth_me_cmds_update {}}
xth_status_bar me $txb.upd [mc "Press this button to save code you have written."]

grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
grid $txb.upd -column 0 -row 2 -columnspan 2 -sticky news
xth_status_bar me $txb.txt [mc "Editor for free text in therion 2D file."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

if {[info exists xth(gui,te)]} {
#  bind $txb.txt <$xth(kb_control)-Key-a> "xth_te_text_select_all %W"
#  bind $txb.txt <$xth(kb_control)-Key-i> "xth_te_text_auto_indent %W"
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}



# initialize search & select tool
set ssbx $xth(ctrl,me,ss)

Label $ssbx.xl -text [mc "expression"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ssbx.xl [mc "Enter search expression."]
Entry $ssbx.xe -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,ss,expr) -width 3
bind $ssbx.xe  xth_me_ss_show
xth_status_bar me $ssbx.xe [mc "Enter search expression."]
checkbutton $ssbx.rx -text [mc "regular expression"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,ss,regexp) -command {}
xth_status_bar me $ssbx.rx [mc "Search for regular expression."]
checkbutton $ssbx.cs -text [mc "case sensitive"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,ss,cases) -command {}
xth_status_bar me $ssbx.cs [mc "Case sensitive search."]
Button $ssbx.sn -text [mc "Find next"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_next -width 10
xth_status_bar me $ssbx.sn [mc "Select next object matching expression."]
Button $ssbx.sf -text [mc "Find first"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_first -width 10
xth_status_bar me $ssbx.sf [mc "Select first object matching expression."]
Button $ssbx.sa -text [mc "Show all"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_ss_show -width 9
xth_status_bar me $ssbx.sa [mc "Highlight all objects matching expression."]
Button $ssbx.ca -text [mc "Clear all"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command xth_me_cmds_set_colors -width 9
xth_status_bar me $ssbx.ca [mc "Clear highlighted objects."]

grid columnconf $ssbx 0 -weight 1
grid columnconf $ssbx 1 -weight 1
grid $ssbx.xl -column 0 -row 0 -sticky news
grid $ssbx.xe -column 1 -row 0 -sticky news
grid $ssbx.cs -column 0 -row 1 -sticky news -columnspan 2
grid $ssbx.rx -column 0 -row 2 -sticky news -columnspan 2
grid $ssbx.sf -column 0 -row 3 -sticky news
grid $ssbx.sn -column 1 -row 3 -sticky news
grid $ssbx.sa -column 0 -row 4 -sticky news
grid $ssbx.ca -column 1 -row 4 -sticky news


xth_about_status [mc "loading images module ..."]

# initialize images
frame $xth(ctrl,me,images).il
set ilbox $xth(ctrl,me,images).il.ilbox 
set xth(me,imgs,list) {}
listbox $ilbox -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $xth(ctrl,me,images).il.sv" \
  -xscrollcommand "xth_scroll $xth(ctrl,me,images).il.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -listvariable xth(me,imgs,list) -selectborderwidth 0
scrollbar $xth(ctrl,me,images).il.sv -orient vert  -command "$ilbox yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $xth(ctrl,me,images).il.sh -orient horiz  -command "$ilbox xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
frame $xth(ctrl,me,images).ic
bind $ilbox <> "xth_me_image_select \[lindex \[%W curselection\] 0\]"

grid columnconf $xth(ctrl,me,images).il 0 -weight 1
grid rowconf $xth(ctrl,me,images).il 0 -weight 1
grid $ilbox -column 0 -row 0 -sticky news
xth_scroll_showcmd $xth(ctrl,me,images).il.sv "grid $xth(ctrl,me,images).il.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $xth(ctrl,me,images).il.sv "grid forget $xth(ctrl,me,images).il.sv"
xth_scroll_showcmd $xth(ctrl,me,images).il.sh "grid $xth(ctrl,me,images).il.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $xth(ctrl,me,images).il.sh "grid forget $xth(ctrl,me,images).il.sh"
xth_status_bar me $ilbox [mc "Select background image."]
grid columnconf $xth(ctrl,me,images) 0 -weight 1
grid $xth(ctrl,me,images).il -column 0 -row 0 -sticky news
grid $xth(ctrl,me,images).ic -column 0 -row 1 -sticky news

Button $xth(ctrl,me,images).ic.insp -text [mc "Insert"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {
		set nimgs [llength $xth(me,imgs,xlist)]
    xth_me_image_newpos
    xth_me_image_insert $xth(ctrl,me,images,newposx) $xth(ctrl,me,images,newposy) {} 0 {}
		set nnimgs [llength $xth(me,imgs,xlist)]
		if {$nnimgs > $nimgs} {
	    xth_me_area_auto_adjust
		}
  }
xth_status_bar me $xth(ctrl,me,images).ic.insp [mc "Insert new background image."]
Button $xth(ctrl,me,images).ic.remp -text [mc "Remove"] -anchor center -font $xth(gui,lfont) -state disabled \
  -command {xth_me_image_remove ""}
xth_status_bar me $xth(ctrl,me,images).ic.remp [mc "Remove selected image."]
Separator $xth(ctrl,me,images).ic.s1 -orient horizontal
checkbutton $xth(ctrl,me,images).ic.viscb -text [mc "visibility"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,images,vis) -command {xth_me_image_toggle_vsb ""}
xth_status_bar me $xth(ctrl,me,images).ic.viscb [mc "Switch image visibility."]

Label $xth(ctrl,me,images).ic.gl -text "gamma 1.00" -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.gl [mc "Control gamma value."]
Button $xth(ctrl,me,images).ic.gr -text [mc "Reset"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "set xth(ctrl,me,images,gamma) 0.0; xth_me_image_update_gamma"
xth_status_bar me $xth(ctrl,me,images).ic.gr [mc "Reset image gamma value."]
scale $xth(ctrl,me,images).ic.gs -from -1.0 -to 1.0 \
  -font $xth(gui,lfont) -state disabled -showvalue 0 -resolution 0.01 \
  -variable xth(ctrl,me,images,gamma) -orient horiz
bind $xth(ctrl,me,images).ic.gs  xth_me_image_update_gamma
xth_status_bar me $xth(ctrl,me,images).ic.gs [mc "Set image gamma value."]


Label $xth(ctrl,me,images).ic.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.posl [mc "Current position of selected image."]
Label $xth(ctrl,me,images).ic.posln -text "" -anchor center -font $xth(gui,lfont) -state disabled
xth_status_bar me $xth(ctrl,me,images).ic.posln [mc "Current position of selected image."]
Button $xth(ctrl,me,images).ic.posch -text [mc "Move to"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 8 -command "xth_me_image_move_to"
xth_status_bar me $xth(ctrl,me,images).ic.posch [mc "Move image to given position."]
Entry $xth(ctrl,me,images).ic.posx -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,images,posx)
xth_status_bar me $xth(ctrl,me,images).ic.posx [mc "New X coordinate of image."]
Entry $xth(ctrl,me,images).ic.posy -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,images,posy)
xth_status_bar me $xth(ctrl,me,images).ic.posy [mc "New Y coordinate of image."]
Button $xth(ctrl,me,images).ic.mvf -text [mc "Move front"] -anchor center -font $xth(gui,lfont) -state disabled -width 10 \
  -command xth_me_image_move_front
xth_status_bar me $xth(ctrl,me,images).ic.mvf [mc "Move image in front of all images."]
Button $xth(ctrl,me,images).ic.mvb -text [mc "Move back"] -anchor center -font $xth(gui,lfont) -state disabled -width 10 \
  -command xth_me_image_move_back
xth_status_bar me $xth(ctrl,me,images).ic.mvb [mc "Move image behind all images."]

xth_me_bind_entry_focus_return "$xth(ctrl,me,images).ic.posx $xth(ctrl,me,images).ic.posy" "xth_me_image_move_to"
xth_me_bind_entry_focusin "$xth(ctrl,me,images).ic.posx $xth(ctrl,me,images).ic.posy"

grid columnconf $xth(ctrl,me,images).ic 0 -weight 1
grid columnconf $xth(ctrl,me,images).ic 1 -weight 1
grid columnconf $xth(ctrl,me,images).ic 2 -weight 1
grid columnconf $xth(ctrl,me,images).ic 3 -weight 1
grid $xth(ctrl,me,images).ic.insp -column 0 -row 0 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.remp -column 2 -row 0 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.s1 -column 0 -row 1 -sticky news -columnspan 4 -pady 3
grid $xth(ctrl,me,images).ic.posl -column 0 -row 2 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.posln -column 2 -row 2 -sticky news -columnspan 2 -padx 1
grid $xth(ctrl,me,images).ic.posch -column 0 -row 3 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.posx -column 2 -row 3 -sticky ew -padx 1
grid $xth(ctrl,me,images).ic.posy -column 3 -row 3 -sticky ew -padx 1
grid $xth(ctrl,me,images).ic.mvf -column 0 -row 4 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.mvb -column 2 -row 4 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gl -column 0 -row 5 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gr -column 2 -row 5 -sticky news -columnspan 2
grid $xth(ctrl,me,images).ic.gs -column 0 -row 6 -sticky news -columnspan 4
grid $xth(ctrl,me,images).ic.viscb -column 0 -row 7 -sticky news -columnspan 4
# xth_status_bar me $xth(ctrl,me,images). "To set file encoding, type encoding name and press  button."


xth_about_status [mc "loading preview module ..."]

# init command preview
set txb $xth(ctrl,me,prev)
text $txb.txt -height 4 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -selectborderwidth 0 \
  -yscrollcommand "$txb.sv set" \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
Button $txb.upd -text [mc "Update command"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}}
xth_status_bar me $txb.upd [mc "Press this button, if you have changed something and you can not see your changes here."]  
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
grid $txb.upd -column 0 -row 2 -columnspan 2 -sticky news
xth_status_bar me $txb.txt [mc "Command preview."]

# init scrap control

xth_about_status [mc "loading scrap module ..."]

set sfm $xth(ctrl,me,scrap)

Label $sfm.namel -text id -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.namel [mc "Scrap name."]
Entry $sfm.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,name)
xth_status_bar me $sfm.name [mc "Scrap name."]

Label $sfm.projl -text [mc "projection"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.projl [mc "Scrap projection."]
ComboBox $sfm.proj -values $xth(scrap_projections) -autocomplete 1 \
  -font $xth(gui,lfont) -height 4 -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,projection) -command {xth_me_cmds_update {}}

xth_status_bar me $sfm.proj [mc "Scrap projection."]
xth_me_bind_typecbx_hint $sfm.proj projection

Label $sfm.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $sfm.optl [mc "Other scrap options."]
Entry $sfm.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,options)

xth_status_bar me $sfm.opt [mc "Other scrap options."] 

#Separator $sfm.s1 -orient horizontal
Button $sfm.scl -text [mc "Scale"] -anchor center -font $xth(gui,lfont) -state disabled -command xth_me_cmds_scrap_scale_start
xth_status_bar me $sfm.scl [mc "Scrap scaling - push to click picture calibration points."]
Button $sfm.scpb -text [mc "Update scrap"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command {xth_me_cmds_update {}}
xth_status_bar me $sfm.scpb [mc "Press this button to apply your changes to current scrap."]
Label $sfm.scpp -text [mc "picture scale points"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scpp [mc "Calibration points on the picture (X1:Y1 - X2:Y2)."]
Entry $sfm.scx1p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,px1)
xth_status_bar me $sfm.scx1p [mc "X1 picture."] 
Entry $sfm.scy1p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,py1)
xth_status_bar me $sfm.scy1p [mc "Y1 picture."] 
Entry $sfm.scx2p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,px2)
xth_status_bar me $sfm.scx2p [mc "X2 picture."]
Entry $sfm.scy2p -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,py2)
xth_status_bar me $sfm.scy2p [mc "Y2 picture."]
Label $sfm.scrp -text [mc "real scale points"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scrp [mc "Real coordinates of calibration points (X1:Y1 - X2:Y2)."]
Entry $sfm.scx1r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,rx1)
xth_status_bar me $sfm.scx1r [mc "X1 real."]
Entry $sfm.scy1r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,ry1)
xth_status_bar me $sfm.scy1r [mc "Y1 real."]
Entry $sfm.scx2r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,rx2)
xth_status_bar me $sfm.scx2r [mc "X2 real."]
Entry $sfm.scy2r -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,ry2)
xth_status_bar me $sfm.scy2r [mc "Y2 real."]
Label $sfm.scul -text [mc "units"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.scul [mc "Units of real coordinates."]
ComboBox $sfm.scu -values $xth(length_units) \
  -font $xth(gui,lfont) -height 5 -state disabled -width 4 \
  -textvariable xth(ctrl,me,scrap,units) -command {xth_me_cmds_update {}}
xth_status_bar me $sfm.scu [mc "Units of real coordinates."]

xth_me_bind_entry_focus_return "$sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p" {xth_me_cmds_update {}}
xth_me_bind_entry_focus_return "$sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r" {xth_me_cmds_update {}}
xth_me_bind_entry_return "$sfm.name $sfm.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$sfm.name $sfm.opt $sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p $sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r"


# scrap background sketches
Label $sfm.skl -text [mc "background sketches"] -anchor w -font $xth(gui,lfont) -state disabled
xth_status_bar me $sfm.skl [mc "List of image files used as scrap background."]


set plf $sfm.skll
frame $plf
listbox $plf.l -height 2 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l  "focus $plf.l"

Button $sfm.skins -text [mc "Insert"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command xth_me_cmds_scrap_sketch_start
xth_status_bar me $sfm.skins [mc "Press this button to insert sketch by clicking on it."]
Button $sfm.skdel -text [mc "Delete"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_delete_scrap_sketch {} {}}
xth_status_bar me $sfm.skdel [mc "Delete sketch from scrap."]

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line in area."]


grid columnconf $sfm 0 -weight 1
grid columnconf $sfm 1 -weight 1
grid columnconf $sfm 2 -weight 1
grid columnconf $sfm 3 -weight 1
grid $sfm.namel -row 0 -column 0 -columnspan 2 -sticky news
grid $sfm.name  -row 0 -column 2 -columnspan 2 -sticky news -padx 1
grid $sfm.projl -row 1 -column 0 -columnspan 2 -sticky news
grid $sfm.proj  -row 1 -column 2 -columnspan 2 -sticky news -padx 2
grid $sfm.optl -row 2 -column 0 -columnspan 2 -sticky news
grid $sfm.opt  -row 2 -column 2 -columnspan 2 -sticky news -padx 1
#grid $sfm.s1 -column 0 -row 3 -sticky news -columnspan 4 -pady 3
grid $sfm.scl -row 3 -column 0 -columnspan 2 -sticky news
grid $sfm.scpb -row 3 -column 2 -columnspan 2 -sticky news
grid $sfm.scpp -column 0 -row 4 -sticky news -columnspan 4
grid $sfm.scx1p $sfm.scy1p $sfm.scx2p $sfm.scy2p -row 5 -sticky news -padx 1
grid $sfm.scrp -column 0 -row 6 -sticky news -columnspan 4
grid $sfm.scx1r $sfm.scy1r $sfm.scx2r $sfm.scy2r -row 7 -sticky news -padx 1
grid $sfm.scul -row 8 -column 0 -columnspan 2 -sticky news
grid $sfm.scu  -row 8 -column 2 -columnspan 2 -sticky news -padx 2

grid $sfm.skl -column 0 -row 9 -sticky news -columnspan 4
grid $sfm.skll -column 0 -row 10 -sticky news -columnspan 4
grid $sfm.skins -row 11 -column 0 -columnspan 2 -sticky news
grid $sfm.skdel -row 11 -column 2 -columnspan 2 -sticky news


# point control
xth_about_status [mc "loading point module ..."]

set ptc $xth(ctrl,me,point)

Label $ptc.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $ptc.posl [mc "Point position."]
Entry $ptc.posx -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,point,x)
xth_status_bar me $ptc.posx [mc "Point X coordinate."]
Entry $ptc.posy -font $xth(gui,lfont) -state disabled -width 4 -textvariable xth(ctrl,me,point,y)
xth_status_bar me $ptc.posy [mc "Point Y coordinate."] 

Button $ptc.upd -text [mc "Update point"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}}
xth_status_bar me $ptc.upd [mc "Click this button to apply point changes."] 

ComboBox $ptc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $ptc.theme [mc "Actual symbol theme."]
ComboBox $ptc.themetype -values $xth(me,themes,all-symbols,point,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4  -fg blue \
  -textvariable xth(ctrl,me,point,themetype) \
  -modifycmd xth_me_point_themetype_modified
xth_status_bar me $ptc.themetype [mc "Point type."]

Label $ptc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled -width 8
xth_status_bar me $ptc.typl [mc "Point type."] 
ComboBox $ptc.typ -values $xth(point_types) -autocomplete 1 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,type) -command {xth_me_cmds_update {}} \
  -modifycmd {xth_me_cmds_update {}}
xth_status_bar me $ptc.typ [mc "Point type."]
xth_me_bind_typecbx_hint $ptc.typ point

Label $ptc.namel -text [mc "id"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ptc.namel [mc "Point identifier."]
Entry $ptc.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,name)
xth_status_bar me $ptc.name [mc "Point identifier."] 

Label $ptc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $ptc.optl [mc "Other point options."]
Entry $ptc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,opts)
xth_status_bar me $ptc.opt [mc "I.e, if type is label, write here: -text \042this will be displayed (P100)\042"]

Separator $ptc.s1 -orient horizontal

checkbutton $ptc.rotc -text [mc "orientation"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,rotid) -command xth_me_cmds_point_change_state
Entry $ptc.rot -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,rot)
xth_status_bar me $ptc.rot [mc "Enter symbol orientation angle."]
xth_status_bar me $ptc.rotc [mc "There are symbol types which must be orientated (i.e: gradients). Click here to giv'em orientation by mouse or keyboard."]

checkbutton $ptc.xszc -text [mc "x-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,xsid) -command xth_me_cmds_point_change_state
xth_status_bar me $ptc.xszc [mc "Set point size in main direction."]
Entry $ptc.xsz -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,xs)
xth_status_bar me $ptc.xsz [mc "Enter point size in main direction."]

checkbutton $ptc.yszc -text [mc "y-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,point,ysid) -command xth_me_cmds_point_change_state
xth_status_bar me $ptc.yszc [mc "Set point size in side direction."]
Entry $ptc.ysz -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,point,ys)
xth_status_bar me $ptc.ysz [mc "Enter point size in side direction."]

xth_me_bind_entry_focus_return "$ptc.posx $ptc.posy" {xth_me_cmds_update {}}
xth_me_bind_entry_return "$ptc.name $ptc.opt $ptc.rot $ptc.xsz $ptc.ysz" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$ptc.posx $ptc.posy $ptc.name $ptc.opt $ptc.rot $ptc.xsz $ptc.ysz"


grid columnconf $ptc 0 -weight 1
grid columnconf $ptc 1 -weight 1
grid columnconf $ptc 2 -weight 1
grid columnconf $ptc 3 -weight 1

set crow 0
grid $ptc.theme -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
grid $ptc.themetype -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $ptc.typl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.typ -row $crow -column 2 -columnspan 2 -sticky news -padx 2
incr crow
grid $ptc.s1 -row $crow -column 0 -columnspan 4 -sticky news -pady 2
incr crow
grid $ptc.posl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.posx -row $crow -column 2 -sticky news -padx 2 -pady 1
grid $ptc.posy -row $crow -column 3 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.namel -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.name -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.optl -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.opt -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
grid $ptc.rotc -row $crow -column 0 -columnspan 2 -sticky news
grid $ptc.rot -row $crow -column 2 -columnspan 2 -sticky news -padx 2 -pady 1
incr crow
## DISABLED
if $xth(gui,me,pointsizectrl) {
  grid $ptc.xszc -row $crow -column 0 -columnspan 2 -sticky news
  grid $ptc.xsz -row $crow -column 2 -columnspan 2 -sticky news -padx 1
  incr crow 
  grid $ptc.yszc -row $crow -column 0 -columnspan 2 -sticky news
  grid $ptc.ysz -row $crow -column 2 -columnspan 2 -sticky news -padx 1
  incr crow
}
grid $ptc.upd -row $crow -column 0 -columnspan 4 -sticky news
incr crow


# line control
xth_about_status [mc "loading line module ..."]

set lnc $xth(ctrl,me,line)

ComboBox $lnc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $lnc.theme [mc "Actual symbol theme."]
ComboBox $lnc.themetype -values $xth(me,themes,all-symbols,line,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 -fg blue \
  -textvariable xth(ctrl,me,line,themetype) \
  -modifycmd xth_me_line_themetype_modified
xth_status_bar me $lnc.themetype [mc "Line type."]

Label $lnc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.typl [mc "Line type."]
ComboBox $lnc.typ -values $xth(line_types) -autocomplete 1  \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,type) -modifycmd {xth_me_cmds_update {}} \
  -command {xth_me_cmds_update {}}
xth_status_bar me $lnc.typ [mc "Line type."]
xth_me_bind_typecbx_hint $lnc.typ line

Separator $lnc.s1

Label $lnc.namel -text [mc "id"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.namel [mc "Line identifier."]
Entry $lnc.name -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,name)
xth_status_bar me $lnc.name [mc "Line identifier."]

Label $lnc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.optl [mc "Other line options."]
Entry $lnc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,line,opts)
xth_status_bar me $lnc.opt [mc "Other line options."]

checkbutton $lnc.rev -text [mc "reverse"] -anchor w -font $xth(gui,lfont) \
  -state disabled \
  -variable xth(ctrl,me,line,reverse) \
  -command xth_me_cmds_toggle_line_reverse
xth_status_bar me $lnc.rev [mc "Reverse line."]
checkbutton $lnc.cls -text [mc "close"] -anchor w -font $xth(gui,lfont) \
  -state disabled \
  -variable xth(ctrl,me,line,close) \
  -command xth_me_cmds_toggle_line_close
xth_status_bar me $lnc.cls [mc "Close line."]

set plf $lnc.pl
frame $plf
listbox $plf.l -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l <> {
  if {$xth(me,fopen)} {
    xth_me_cmds_select_linept $xth(me,cmds,selid) \
    [lindex $xth(me,cmds,$xth(me,cmds,selid),xplist) \
    [lindex [%W curselection] 0]]
    if {$xth(me,cmds,selpid) > 0} {
      xth_me_center_to [list \
	$xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),x) \
	$xth(me,cmds,$xth(me,cmds,selid),$xth(me,cmds,selpid),y)]
    }
  }
}
bind $plf.l  "focus $plf.l"

menubutton $lnc.lpa -text [mc "Edit line"] -anchor w -font $xth(gui,lfont) \
  -indicatoron true -menu $lnc.lpa.m -state disabled -width 10
xth_status_bar me $lnc.lpa [mc "Insert/delete line point. Split line."]
Button $lnc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 10
Button $lnc.trace -text [mc "Continue tracing"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_line_trace} -width 10
Button $lnc.vector -text [mc "Convert to curve"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_line_poly2bezier} -width 10
Button $lnc.simpl -text [mc "Simplify line"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_line_simplify} -width 10
xth_status_bar me $lnc.upd [mc "Click this button to apply line changes."]

set tmp $lnc.lpa
xth_me_create_line_point_edit_menu tmp disabled

#Button $lnc.insp -text "Insert" -anchor center -font $xth(gui,lfont) \
#  -state disabled -width 10 -command {xth_me_cmds_start_linept_insert}
#Button $lnc.delp -text "Delete" -anchor center -font $xth(gui,lfont) \
#  -state disabled -width 10 -command {xth_me_cmds_delete_linept {} {}}

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line point."]


grid columnconf $lnc 0 -weight 1
grid columnconf $lnc 1 -weight 1
set crow 0
grid $lnc.theme -row $crow -column 0 -sticky news -padx 2 -pady 2
grid $lnc.themetype -row $crow -column 1 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.typl -row $crow -column 0 -sticky news
grid $lnc.typ -row $crow -column 1 -sticky news -padx 2
incr crow
grid $lnc.s1 -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.namel -row $crow -column 0 -sticky news
grid $lnc.name -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.optl -row $crow -column 0 -sticky news
grid $lnc.opt -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.rev -row $crow -column 0 -sticky news
grid $lnc.cls -row $crow -column 1 -sticky news
incr crow
grid $plf -row $crow -column 0 -columnspan 2 -sticky news
incr crow
set xth(ctrl,me,line,tracerow) $crow
incr crow
grid $lnc.lpa -row $crow -column 0 -sticky news
grid $lnc.upd -row $crow -column 1 -sticky news
incr crow

#grid $lnc.insp -row 5 -column 0 -sticky news
#grid $lnc.delp -row 5 -column 1 -sticky news

xth_me_bind_entry_return "$lnc.name $lnc.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lnc.name $lnc.opt"

# line point control
xth_about_status [mc "loading line point module ..."]

set lpc $xth(ctrl,me,linept)

Label $lpc.posl -text [mc "position"] -anchor e -font $xth(gui,lfont) -state disabled -width 0
xth_status_bar me $lpc.posl [mc "Point position."]
Entry $lpc.posx -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,linept,x) -width 0
xth_status_bar me $lpc.posx [mc "Point X coordinate."]
Entry $lpc.posy -font $xth(gui,lfont) -state disabled \
  -textvariable xth(ctrl,me,linept,y) -width 0
xth_status_bar me $lpc.posy [mc "Point Y coordinate."] 

Entry $lpc.xp -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,xp)
xth_status_bar me $lpc.xp [mc "Previous control point X coordinate."] 
Entry $lpc.yp -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,yp)
xth_status_bar me $lpc.yp [mc "Previous control point Y coordinate."] 
Entry $lpc.xn -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,xn)
xth_status_bar me $lpc.xn [mc "Next control point X coordinate."] 
Entry $lpc.yn -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,linept,yn)
xth_status_bar me $lpc.yn [mc "Next control point Y coordinate."] 

checkbutton $lpc.cbp -text "<<" -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,me,linept,idp) \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbp [mc "Checkbox whether to use previous control point."]
checkbutton $lpc.cbs -text [mc "smooth"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,smooth) -width 0\
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbs [mc "Set line to be smooth in given point."]
checkbutton $lpc.cbn -text ">>" -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,me,linept,idn) \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.cbn [mc "Checkbox whether to use next control point."]

checkbutton $lpc.rotc -text [mc "orientation"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,rotid) -width 0 \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.rotc [mc "Set line point orientation."]
Entry $lpc.rot -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,rot)
xth_status_bar me $lpc.rot [mc "Enter line point orientation."]

checkbutton $lpc.rszc -text [mc "r-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,rsid) -width 0 \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.rszc [mc "Set line size in right direction."]
Entry $lpc.rsz -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,rs)
xth_status_bar me $lpc.rsz [mc "Enter line size in right direction."]

checkbutton $lpc.lszc -text [mc "l-size"] -anchor w -font $xth(gui,lfont) -state disabled \
  -variable xth(ctrl,me,linept,lsid) -width 0  \
  -command xth_me_cmds_toggle_linept
xth_status_bar me $lpc.lszc [mc "Set line size in left direction."]
Entry $lpc.lsz -font $xth(gui,lfont) -state disabled -width 0 \
  -textvariable xth(ctrl,me,linept,ls)
xth_status_bar me $lpc.lsz [mc "Enter line size in left direction."]

Label $lpc.optl -text [mc "options"] -anchor sw -font $xth(gui,lfont) -state disabled \
 -width 0
xth_status_bar me $lpc.optl [mc "Line point options editor."]
Button $lpc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 0
xth_status_bar me $lpc.upd [mc "Click this button to apply line point changes."]

set txb $lpc.oe
frame $txb
text $txb.txt -height 2 -wrap none -font $xth(gui,efont) \
  -bg $xth(gui,ecolorbg) \
  -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
  -relief sunken -state disabled \
  -selectbackground $xth(gui,ecolorselbg) \
  -selectforeground $xth(gui,ecolorselfg) \
  -yscrollcommand "$txb.sv set" \
  -selectborderwidth 0 \
  -xscrollcommand "$txb.sh set" 
scrollbar $txb.sv -orient vert  -command "$txb.txt yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $txb.sh -orient horiz  -command "$txb.txt xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
grid columnconf $txb 0 -weight 1
grid rowconf $txb 0 -weight 1
grid $txb.txt -column 0 -row 0 -sticky news
grid $txb.sv -column 1 -row 0 -sticky news
grid $txb.sh -column 0 -row 1 -sticky news
xth_status_bar me $txb [mc "Editor for line point options."]
bind $txb.txt <$xth(kb_control)-Key-x> "tk_textCut $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-c> "tk_textCopy $txb.txt"
bind $txb.txt <$xth(kb_control)-Key-v> "tk_textPaste $txb.txt"

if {$xth(gui,bindinsdel)} {
  bind $txb.txt  {
    %W delete insert
    %W see insert
  }
  bind $txb.txt  "tk_textCut $txb.txt"
  bind $txb.txt <$xth(kb_control)-Key-Insert> "tk_textCopy $txb.txt"
  bind $txb.txt  "tk_textPaste $txb.txt"
#  catch {
#    bind $txb.txt  "tk_textCut $txb.txt"
#    bind $txb.txt <$xth(kb_control)-Key-KP_Insert> "tk_textCopy $txb.txt"
#    bind $txb.txt  "tk_textPaste $txb.txt"
#  }
}

if {[info exists xth(gui,te)]} {
  bind $txb.txt  $xth(te,bind,text_tab)
  bind $txb.txt  $xth(te,bind,text_return)
} else {
  bind $txb.txt  $xth(gui,bind,text_tab)
  bind $txb.txt  $xth(gui,bind,text_return)
}

grid columnconf $lpc 0 -weight 1
grid columnconf $lpc 1 -weight 1
grid columnconf $lpc 2 -weight 1
grid columnconf $lpc 3 -weight 1

grid $lpc.posl -row 0 -column 0 -columnspan 2 -sticky news
grid $lpc.posx -row 0 -column 2 -sticky news
grid $lpc.posy -row 0 -column 3 -sticky news

xth_me_bind_entry_focus_return "$lpc.posx $lpc.posy" {xth_me_cmds_update {}}

grid $lpc.xp -row 1 -column 0 -sticky news
grid $lpc.yp -row 1 -column 1 -sticky news
grid $lpc.xn -row 1 -column 2 -sticky news
grid $lpc.yn -row 1 -column 3 -sticky news

xth_me_bind_entry_focus_return "$lpc.xp $lpc.yp" {xth_me_cmds_update {}}
xth_me_bind_entry_focus_return "$lpc.xn $lpc.yn" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lpc.posx $lpc.posy $lpc.xp $lpc.yp $lpc.xn $lpc.yn"

grid $lpc.cbp -row 2 -column 0 -sticky news
grid $lpc.cbs -row 2 -column 1 -columnspan 2 -sticky news
grid $lpc.cbn -row 2 -column 3 -sticky news

grid $lpc.rotc -row 3 -column 0 -columnspan 2 -sticky news
grid $lpc.rot -row 3 -column 2 -columnspan 2 -sticky news

grid $lpc.lszc -row 4 -column 0 -columnspan 2 -sticky news
grid $lpc.lsz -row 4 -column 2 -columnspan 2 -sticky news

## DISABLED
#grid $lpc.rszc -row 5 -column 0 -columnspan 2 -sticky news
#grid $lpc.rsz -row 5 -column 2 -columnspan 2 -sticky news

grid $lpc.optl -row 6 -column 0 -columnspan 2 -sticky news
grid $lpc.upd -row 6 -column 2 -columnspan 2 -sticky news

grid $txb -row 7 -column 0 -columnspan 4 -sticky news

xth_me_bind_entry_focusin "$lpc.rot $lpc.lsz $lpc.rsz"
xth_me_bind_entry_return "$lpc.rot $lpc.lsz $lpc.rsz" {xth_me_cmds_update {}}





# area control
xth_about_status [mc "loading area module ..."]

set lnc $xth(ctrl,me,ac)

ComboBox $lnc.theme -values $xth(me,themes,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -modifycmd "xth_me_set_theme \[$ptc.theme getvalue\]" -fg blue \
  -textvariable xth(ctrl,me,acttheme)
xth_status_bar me $lnc.theme [mc "Actual symbol theme."]
ComboBox $lnc.themetype -values $xth(me,themes,all-symbols,area,showlist) -autocomplete 1 -editable 0 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 -fg blue \
  -textvariable xth(ctrl,me,ac,themetype) \
  -modifycmd xth_me_area_themetype_modified
xth_status_bar me $lnc.themetype [mc "Area type."]
Separator $lnc.s1

Label $lnc.typl -text [mc "type"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.typl [mc "Area type."]
ComboBox $lnc.typ -values $xth(area_types) -autocomplete 1 \
  -font $xth(gui,lfont) -height $xth(gui,me,typelistwidth) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,type) -modifycmd {xth_me_cmds_update {}} \
  -command {xth_me_cmds_update {}}
xth_status_bar me $lnc.typ [mc "Area type."] 
xth_me_bind_typecbx_hint $lnc.typ area

Label $lnc.optl -text [mc "options"] -anchor e -font $xth(gui,lfont) -state disabled
xth_status_bar me $lnc.optl [mc "Other area options."]
Entry $lnc.opt -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,opts)
xth_status_bar me $lnc.opt [mc "Other area options."] 

set plf $lnc.ll
frame $plf
listbox $plf.l -height 4 -selectmode single -takefocus 0 \
  -yscrollcommand "xth_scroll $plf.sv" \
  -xscrollcommand "xth_scroll $plf.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 0
scrollbar $plf.sv -orient vert  -command "$plf.l yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $plf.sh -orient horiz  -command "$plf.l xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
bind $plf.l <> {xth_me_cmds_show_current_area}
bind $plf.l  "focus $plf.l"

Button $lnc.ins -text [mc "Select lines"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_start_area_insert 1}
xth_status_bar me $lnc.ins [mc "Switch to insert line into area mode."]
Button $lnc.del -text [mc "Delete"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 10 -command {xth_me_cmds_delete_area_line {} {}}
xth_status_bar me $lnc.del [mc "Delete ID from area."]

Button $lnc.insid -text [mc "Insert ID"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_insert_area_line $xth(ctrl,me,ac,insid) {} {}} -width 10
xth_status_bar me $lnc.insid [mc "Insert given id."]
Entry $lnc.inside -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,me,ac,insid)
xth_status_bar me $lnc.inside [mc "ID to insert."] 

Button $lnc.upd -text [mc "Update"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_update {}} -width 10
xth_status_bar me $lnc.upd [mc "Click this button to apply changes you made to area."]
Button $lnc.shw -text [mc "Show"] -anchor center -font $xth(gui,lfont) \
  -state disabled -command {xth_me_cmds_show_current_area} -width 10
xth_status_bar me $lnc.shw [mc "Show area border lines."]

grid columnconf $plf 0 -weight 1
grid rowconf $plf 0 -weight 1
grid $plf.l -column 0 -row 0 -sticky news
xth_scroll_showcmd $plf.sv "grid $plf.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $plf.sv "grid forget $plf.sv"
xth_scroll_showcmd $plf.sh "grid $plf.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $plf.sh "grid forget $plf.sh"
xth_status_bar me $plf [mc "Select line in area."]

grid columnconf $lnc 0 -weight 1
grid columnconf $lnc 1 -weight 1
set crow 0
grid $lnc.theme -row $crow -column 0 -sticky news -padx 2 -pady 2
grid $lnc.themetype -row $crow -column 1 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.typl -row $crow -column 0 -sticky news
grid $lnc.typ -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.s1 -row $crow -column 0 -columnspan 2 -sticky news -padx 2 -pady 2
incr crow
grid $lnc.optl -row $crow -column 0 -sticky news
grid $lnc.opt -row $crow -column 1 -sticky news -padx 2 -pady 1
incr crow
grid $lnc.shw -row $crow -column 0 -sticky news
grid $lnc.upd -row $crow -column 1 -sticky news
incr crow
grid $plf -row $crow -column 0 -columnspan 2 -sticky news
incr crow
grid $lnc.ins -row $crow -column 0 -sticky news
grid $lnc.del -row $crow -column 1 -sticky news
incr crow
grid $lnc.insid -row $crow -column 0 -sticky news
grid $lnc.inside -row $crow -column 1 -sticky news
incr crow
xth_me_bind_entry_return "$lnc.opt" {xth_me_cmds_update {}}
xth_me_bind_entry_focusin "$lnc.opt"


# main menu
xth_about_status [mc "loading main menu ..."]


$xth(me,menu,file) add command -label [mc "New"] -command xth_me_create_file \
  -font $xth(gui,lfont) -underline 0 -state normal
$xth(me,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" -state normal \
  -font $xth(gui,lfont) -command {
		        set xth(gui,openxp) 0
		        xth_me_open_file 1 {} 1
	}
$xth(me,menu,file) add command -label [mc "Open (no pics)"] -underline 10 \
  -state normal -font $xth(gui,lfont) -command {
	    set xth(gui,openxp) 1
		        xth_me_open_file 1 {} 1
		        set xth(gui,openxp) 0
	}
$xth(me,menu,file) add command -label [mc "Save"] -underline 0 \
  -accelerator "$xth(gui,controlk)-s" -state disabled \
  -font $xth(gui,lfont) -command {xth_me_save_file 0}
$xth(me,menu,file) add command -label [mc "Save as"] -underline 5 \
  -font $xth(gui,lfont) -command {xth_me_save_file 1} -state disabled 
$xth(me,menu,file) add checkbutton -label [mc "Auto save"] -underline 1 \
  -variable xth(gui,auto_save) -font $xth(gui,lfont) \
  -state disabled -command xth_app_autosave_schedule
$xth(me,menu,file) add command -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w"  -state disabled \
  -font $xth(gui,lfont) \
  -command xth_me_close_file

$xth(me,menu,file) add separator
$xth(me,menu,file) add command -label [mc "Import"] -underline 0 \
  -state disabled -font $xth(gui,lfont) -command {xth_me_import_file {} {}}

set xth(me,menu,edit) $xth(me,menu).edit
menu $xth(me,menu,edit) -tearoff 0
menu $xth(me,menu,edit).ins -tearoff 0
bind $xth(me,menu,edit)  {xth_me_cmds_update {}}
$xth(me,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(me,menu,edit) -underline 0
$xth(me,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
  -underline 0 -accelerator "$xth(gui,controlk)-z" -state disabled \
  -command xth_me_unredo_undo
$xth(me,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
  -underline 0 -accelerator "$xth(gui,controlk)-y" -state disabled \
  -command xth_me_unredo_redo
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(me,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(me,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add command -label [mc "Select"] \
  -accelerator "Esc" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_set_mode 0}
$xth(me,menu,edit) add cascade -label [mc "Insert ..."] \
  -accelerator "$xth(gui,controlk)-i" -menu $xth(me,menu,edit).ins -underline 0 -font $xth(gui,lfont)
$xth(me,menu,edit).ins add command -label [mc "point"] \
  -accelerator "$xth(gui,controlk)-p" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_set_mode 1}
$xth(me,menu,edit).ins add command -label [mc "line"] \
    -accelerator "$xth(gui,controlk)-l" -underline 0 -font $xth(gui,lfont) -command {
  xth_me_cmds_create_line {} 1 "" "" ""
  xth_ctrl_scroll_to me line
  xth_ctrl_maximize me line
  xth_ctrl_maximize me linept
}

$xth(me,menu,edit).ins add command -label [mc "area"] \
  -accelerator "$xth(gui,controlk)-a" -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_area {} 1 "" "" ""
  xth_ctrl_scroll_to me ac
  xth_ctrl_maximize me ac
}

$xth(me,menu,edit).ins add command -label [mc "scrap"] \
  -accelerator "$xth(gui,controlk)-r" -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_scrap {} 1 "" ""
  xth_ctrl_scroll_to me scrap
  xth_ctrl_maximize me scrap
}

$xth(me,menu,edit).ins add command -label [mc "text"] -font $xth(gui,lfont) -underline 0 -command {
  xth_me_cmds_create_text {} 1 "\n" "1.0"
  xth_ctrl_scroll_to me text
  xth_ctrl_maximize me text
  focus $xth(ctrl,me,text).txt
}

$xth(me,menu,edit) add command -label [mc "Delete"] \
  -accelerator "$xth(gui,controlk)-d" -underline 0 -font $xth(gui,lfont) -command {xth_me_cmds_delete {}}
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add cascade -label [mc "Zoom 100 %"] -font $xth(gui,lfont) \
  -underline 0 -menu $xth(ctrl,me,area).zb.m
$xth(me,menu,edit) add command -label [mc "Auto adjust area"] \
  -font $xth(gui,lfont) -command xth_me_area_auto_adjust
$xth(me,menu,edit) add command -label [mc "Insert image"] \
  -font $xth(gui,lfont) \
  -command {
  set nimgs [llength $xth(me,imgs,xlist)]
  xth_me_image_newpos
  xth_me_image_insert $xth(ctrl,me,images,newposx) $xth(ctrl,me,images,newposy) {} 0 {}
  set nnimgs [llength $xth(me,imgs,xlist)]
  if {$nnimgs > $nimgs} {
    xth_me_area_auto_adjust
  }
}
$xth(me,menu,edit) add separator
$xth(me,menu,edit) add checkbutton -label [mc "Hide inactive scraps"] -variable xth(me,hinactives) -command xth_me_cmds_toggleishiding

set xth(me,menu,edit,undo) [$xth(me,menu,edit) index [mc "Undo"]]
set xth(me,menu,edit,redo) [$xth(me,menu,edit) index [mc "Redo"]]
set xth(me,menu,edit,zoom) [$xth(me,menu,edit) index [mc "Zoom 100 %"]]


# create mouse mode bar and progess bar
set barfm $xth(gui,me).sf.barfm
frame $barfm
pack $barfm -side left
grid columnconf $barfm 0 -weight 1
grid rowconf $barfm 0 -weight 1

set xth(me,mbar) $barfm.mbar
Label $xth(me,mbar) -text "" -width 20 -relief sunken -font $xth(gui,lfont) \
  -anchor center -state disabled
grid $xth(me,mbar) -column 0 -row 0 -sticky news
set xth(me,mbar,bg) [$xth(me,mbar) cget -bg]
set xth(me,mbar,fg) [$xth(me,mbar) cget -fg]
xth_status_bar me $xth(me,mbar) [mc "Mouse mode."]

set xth(me,progbar) $barfm.pbar
set xth(me,progbar,value) 0
ProgressBar $xth(me,progbar) -type normal -width 100 -variable xth(me,progbar,value) -fg darkBlue

proc xth_me_progbar_show {max} {
  global xth
  set pbw [winfo width $xth(me,mbar)]
  set pbh [winfo height $xth(me,mbar)]
  grid forget $xth(me,mbar)
  grid $xth(me,progbar) -column 0 -row 0 -sticky news
  $xth(me,progbar) configure -maximum $max -width $pbw -height $pbh
  update idletasks
}

proc xth_me_progbar_hide {} {
  global xth
  grid forget $xth(me,progbar)
  grid $xth(me,mbar) -column 0 -row 0 -sticky news
  update idletasks
}

proc xth_me_progbar_prog {val} {
  global xth
  set xth(me,progbar,value) $val
  update idletasks
}

# create position bar
set xth(me,pbar) $xth(gui,me).sf.pbar
Label $xth(me,pbar) -text "" -width 15 -relief sunken -font $xth(gui,lfont) \
  -anchor center -state disabled
pack $xth(me,pbar) -side left
xth_status_bar me $xth(me,pbar) [mc "Current mouse position."]

# For Windows and Mac there is only one MouseWheel event to bond to.
bind all  [list xth_me_mousewheel %W %D]
# In Linux we have the button 4 and 5 to bind to get mouse wheel movements.
if {[tk windowingsystem] eq "x11"} {
  bind all <4> [list xth_me_mousewheel %W 120]
  bind all <5> [list xth_me_mousewheel %W -120]
}

xth_ctrl_minimize me cmds
xth_ctrl_minimize me prev
xth_ctrl_minimize me ss
xth_ctrl_minimize me point
xth_ctrl_minimize me line
xth_ctrl_minimize me linept
xth_ctrl_minimize me ac
xth_ctrl_minimize me scrap
xth_ctrl_minimize me text
xth_ctrl_minimize me area
xth_ctrl_minimize me images
    
set xth(ctrl,me,area,xmin) ""
set xth(ctrl,me,area,ymin) ""
set xth(ctrl,me,area,xmax) ""
set xth(ctrl,me,area,ymax) ""

xth_me_set_theme 0
xth_about_status [mc "loading line procs ..."]
xth_status_bar_status me [mc "Map editor is not active. To activate it, open existing file or create new one."]

therion-5.4.1/xtherion/me_cmds.tcl000066400000000000000000003607231307545355600171740ustar00rootroot00000000000000##
## me_cmds.tcl --
##
##     Map editor command processing.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

proc xth_me_set_theme {x} {
  global xth
  set xth(me,acttheme) $x
  set at [lindex $xth(me,themes,list) $x]
  $xth(ctrl,me,point).typ configure -values $xth(me,themes,$at,point,list)
  $xth(ctrl,me,line).typ configure -values $xth(me,themes,$at,line,list)
  $xth(ctrl,me,ac).typ configure -values $xth(me,themes,$at,area,list)
  $xth(ctrl,me,point).themetype configure -values $xth(me,themes,$at,point,showlist)
  $xth(ctrl,me,line).themetype configure -values $xth(me,themes,$at,line,showlist)
  $xth(ctrl,me,ac).themetype configure -values $xth(me,themes,$at,area,showlist)
  if {[info exists xth(me,cmds,selid)]} {
    xth_me_cmds_update {}
  }
}


proc xth_me_point_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,point).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,point,type) [lindex $xth(me,themes,$at,point,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_line_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,line).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,line,type) [lindex $xth(me,themes,$at,line,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_area_themetype_modified {} {
  global xth
  set tx [$xth(ctrl,me,ac).themetype getvalue]
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  if {$tx > -1} {
    set xth(ctrl,me,ac,type) [lindex $xth(me,themes,$at,area,hidelist) $tx]
    xth_me_cmds_update {}
  }
}

proc xth_me_cmds_get_line_option {ln opt} {
  set rxl [list [list "\\s*\\-$opt\\s+\\\[(\[^\\\]\]*)\\\]" "\["]\
    [list "\\s*\\-$opt\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"" "\""]\
    [list "\\s*\\-$opt\\s+(\\S+)" {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump val]} {
      regsub [lindex $rx 0] $ln {} rln
      set sep [lindex $rx 1]
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_get_sketch_option {ln} {
  set rxl [list [list "\\s*\\-sketch\\s+\\\[((\[^\\\]\]*))\\\]\\s+(\\S+)\\s+(\\S+)" "\[" "\]"]\
    [list "\\s*\\-sketch\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"\\s+(\\S+)\\s+(\\S+)" "\"" "\""]\
    [list "\\s*\\-sketch\\s+((\\S+))\\s+(\\S+)\\s+(\\S+)" {} {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump v1 dum v2 v3]} {
      regsub [lindex $rx 0] $ln {} rln
      set val "[lindex $rx 1]$v1[lindex $rx 2] $v2 $v3"
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_set_action {act} {

  global xth
  
  set xth(me,cmds,action) $act
  switch $act {
    0 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert line"]
    }
    1 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert point"]
    }
    2 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert scrap"]
    }
    3 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert text"]
    }
    4 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Delete"]
    }
    5 {
      $xth(ctrl,me,cmds).cc.go configure -text [mc "Insert area"]
    }
  }

  update idletasks

}


proc xth_me_cmds_update_buttons {} {

  global xth
  set ccbox $xth(ctrl,me,cmds).cc
  set clbox $xth(ctrl,me,cmds).cl
  set ncmd [expr [llength $xth(me,cmds,xlist)] - 1]
  if {$xth(me,fopen)} {
    $ccbox.cfg configure -state normal
    $clbox.l configure -takefocus 1
    $ccbox.go configure -state normal
    $xth(me,mbar) configure -state normal
    if {$ncmd > 0} {
      $ccbox.sel configure -state normal
      $xth(me,menu,edit) entryconfigure [mc "Select"] -state normal
      $xth(ctrl,me,prev).upd  configure -state normal

      $xth(ctrl,me,ss).xl configure -state normal
      $xth(ctrl,me,ss).xe configure -state normal
      $xth(ctrl,me,ss).cs configure -state normal
      $xth(ctrl,me,ss).rx configure -state normal
      $xth(ctrl,me,ss).sn configure -state normal
      $xth(ctrl,me,ss).sa configure -state normal
      $xth(ctrl,me,ss).sf configure -state normal
      $xth(ctrl,me,ss).ca configure -state normal
      
      if {$ncmd > 1} {
	$ccbox.mu configure -state normal
	$ccbox.md configure -state normal
	$ccbox.mt configure -state normal
	$ccbox.tt configure -state normal
     } else {
	$ccbox.mu configure -state disabled
	$ccbox.md configure -state disabled
	$ccbox.mt configure -state disabled
	$ccbox.tt configure -state disabled
      }
      $ccbox.cfg.m entryconfigure [mc "Delete"] -state normal
      $xth(me,menu,edit) entryconfigure [mc "Delete"] -state normal
    } else {
      $xth(ctrl,me,prev).upd  configure -state disabled
      $ccbox.sel configure -state disabled
      $xth(me,menu,edit) entryconfigure [mc "Select"] -state disabled
      $ccbox.cfg.m entryconfigure [mc "Delete"] -state disabled
      $xth(me,menu,edit) entryconfigure [mc "Delete"] -state disabled
      $ccbox.mu configure -state disabled
      $ccbox.md configure -state disabled
      $ccbox.mt configure -state disabled
      $ccbox.tt configure -state disabled
      if {$xth(me,cmds,action) == 4} {
	xth_me_cmds_set_action 3
      }

      $xth(ctrl,me,ss).xl configure -state disabled
      $xth(ctrl,me,ss).xe configure -state disabled
      $xth(ctrl,me,ss).cs configure -state disabled
      $xth(ctrl,me,ss).rx configure -state disabled
      $xth(ctrl,me,ss).sn configure -state disabled
      $xth(ctrl,me,ss).sa configure -state disabled
      $xth(ctrl,me,ss).sf configure -state disabled
      $xth(ctrl,me,ss).ca configure -state disabled

    }
  } else {
    xth_me_cmds_set_action 3
    $ccbox.go configure -state disabled
    $ccbox.cfg configure -state disabled
    $clbox.l configure -takefocus 0
    $xth(me,mbar) configure -text "" -state disabled -bg $xth(me,mbar,bg) -fg $xth(me,mbar,fg)
    $ccbox.sel configure -state disabled
    $ccbox.mu configure -state disabled
    $ccbox.md configure -state disabled
    $ccbox.mt configure -state disabled
    $ccbox.tt configure -state disabled

    $xth(ctrl,me,ss).xl configure -state disabled
    $xth(ctrl,me,ss).xe configure -state disabled
    $xth(ctrl,me,ss).cs configure -state disabled
    $xth(ctrl,me,ss).rx configure -state disabled
    $xth(ctrl,me,ss).sn configure -state disabled
    $xth(ctrl,me,ss).sa configure -state disabled
    $xth(ctrl,me,ss).sf configure -state disabled
    $xth(ctrl,me,ss).ca configure -state disabled

  }
  
  update idletasks
  
}


# typy prikazov
# 0 eof
# 1 text
# 2 point
# 3 line
# 4 scrap
# 5 endscrap
# 6 area

proc xth_me_cmds_create {typ id ix} {
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,cmdln)
    incr xth(me,cmds,cmdln)
  }
  set xth(me,cmds,$id,listix) -1
  set xth(me,cmds,$id,ct) $typ
  set xth(me,cmds,$id,type) {}
  set xth(me,cmds,$id,name) {}
  set xth(me,cmds,$id,data) {}
  set xth(me,cmds,$id,sbar) {}
  set ix [lsearch $xth(me,cmds,xlist) $xth(me,cmds,selid)]

	# ak sme v normalnom mode a na scrape a chceme vlozit
	# point, line, area alebo scrap
  if {$xth(me,unredook)} {
		set ccmdid $xth(me,cmds,selid)
		if {($xth(me,cmds,$ccmdid,ct) == 4) && (($typ == 2) || ($typ == 3) || ($typ == 6))} {
		    incr ix;
		}
	}
	
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $ix {}]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $ix $id]
  if {$ix != -1} {
    xth_me_cmds_update_list_ft $ix {}
  }
  xth_me_cmds_update_buttons
  return $id
  
}


proc xth_me_cmds_update_list_ft {f t} {
  global xth
  if {[string length $f] == 0} {
    set f 0
  }
  if {[string length $t] == 0} {
    set t [llength $xth(me,cmds,xlist)]
  }
  for {set ii $f} {$ii < $t} {incr ii} {
    xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ii]
  }
}

proc xth_me_cmds_update_list {id} {
  global xth
  set ix [lsearch $xth(me,cmds,xlist) $id]
  switch $xth(me,cmds,$id,ct) {
    0 {
      set cstr "end of file"
    }
    1 {
      set cstr "$ix: text"
    }
    2 {
      set cstr "$ix: point"
    }
    3 {
      set cstr "$ix: line"
    }
    4 {
      set cstr "$ix: scrap"
    }
    5 {
      set cstr "$ix: endscrap"
    }
    6 {
      set cstr "$ix: area"
    }
  }
  if {[string length $xth(me,cmds,$id,type)] > 0} {
    set cstr "$cstr $xth(me,cmds,$id,type)"
  }
  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set cstr "$cstr - $xth(me,cmds,$id,name)"
  }
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $ix $cstr]
  set xth(me,cmds,$id,listix) $ix
  update idletasks
}


proc xth_me_cmds_draw {id} {
  global xth
  switch $xth(me,cmds,$id,ct) {
    2 {
      xth_me_cmds_draw_point $id
    }
    3 {
      xth_me_cmds_draw_line $id
    }
  }
}


proc xth_me_cmds_erase {id} {
  global xth
  switch $xth(me,cmds,$id,ct) {
    2 {
      $xth(me,can) delete pt$id
    }
    3 {
      $xth(me,can) delete ln$id
    }
  }
}


proc xth_me_cmds_undelete {id pid ix} {
  global xth
  xth_me_cmds_select 0
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $ix {}]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $ix $id]
  xth_me_cmds_update_list_ft $ix {}
  #xth_me_cmds_update_list $id
  xth_me_cmds_draw $id
  xth_me_cmds_select "$id $pid"
  xth_me_cmds_update_buttons
}

proc xth_me_cmds_delete {id} {
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$xth(me,cmds,$id,ct) > 0} {
    set oldselid $xth(me,cmds,selid)
    set oldselpid $xth(me,cmds,selpid)
    xth_me_cmds_select 0
    set ix [lsearch $xth(me,cmds,xlist) $id]
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $ix]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $ix $ix]
    xth_me_cmds_update_list_ft $ix {}
    xth_me_cmds_erase $id
    if {$oldselid == $id} {
      set nwid [lindex $xth(me,cmds,xlist) $ix]
    } else {
      set nwid $oldselid
    }
    xth_me_cmds_select $nwid
    xth_me_unredo_action [mc "deleting"] \
      "xth_me_cmds_undelete $id $oldselpid $ix" \
      "xth_me_cmds_delete $id"
    xth_me_cmds_update_buttons
  }
}


proc xth_me_cmds_update {id} {
  global xth

  if {[llength $id] < 1} {
    update idletasks
    set id $xth(me,cmds,selid)
    set pid $xth(me,cmds,selpid)
  } elseif {[llength $id] < 2} {
    set id [lindex $id 0]
    set pid $xth(me,cmds,selpid)
  } else {
    set id [lindex $id 0]
    set pid [lindex $id 1]
  }
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  switch $xth(me,cmds,$id,ct) {
    1 {
      xth_me_cmds_update_text $id [$xth(ctrl,me,text).txt get 1.0 end] \
	[$xth(ctrl,me,text).txt index insert]
    }
    2 {
      xth_me_cmds_update_point $id $xth(ctrl,me,point,x) \
	$xth(ctrl,me,point,y) $xth(ctrl,me,point,type) \
	$xth(ctrl,me,point,name) $xth(ctrl,me,point,opts) \
	$xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) \
	$xth(ctrl,me,point,ys)
      xth_me_cmds_update_point_vars $id
    }
    3 {
      xth_me_cmds_update_line $id $pid $xth(ctrl,me,line,type) \
	$xth(ctrl,me,line,name) $xth(ctrl,me,line,opts) \
	$xth(ctrl,me,line,reverse) $xth(ctrl,me,linept,x) \
	$xth(ctrl,me,linept,y) $xth(ctrl,me,linept,xp) \
	$xth(ctrl,me,linept,yp) $xth(ctrl,me,linept,xn) \
	$xth(ctrl,me,linept,yn) $xth(ctrl,me,linept,smooth) \
	$xth(ctrl,me,linept,rot) $xth(ctrl,me,linept,rs) \
	$xth(ctrl,me,linept,ls) \
	[$xth(ctrl,me,linept).oe.txt get 1.0 end] \
	[$xth(ctrl,me,linept).oe.txt index insert]
      xth_me_cmds_update_line_vars $id $pid
    }    
    4 {
      xth_me_cmds_update_scrap $id $xth(ctrl,me,scrap,name) \
	$xth(ctrl,me,scrap,projection) $xth(ctrl,me,scrap,options) \
	 [list $xth(ctrl,me,scrap,px1) $xth(ctrl,me,scrap,py1) \
	  $xth(ctrl,me,scrap,px2) $xth(ctrl,me,scrap,py2) \
	  $xth(ctrl,me,scrap,rx1) $xth(ctrl,me,scrap,ry1) \
	  $xth(ctrl,me,scrap,rx2) $xth(ctrl,me,scrap,ry2) \
	  $xth(ctrl,me,scrap,units)]
      xth_me_cmds_update_scrap_vars $id
    }
    6 {
      xth_me_cmds_update_area $id $xth(ctrl,me,ac,type) \
	$xth(ctrl,me,ac,opts)
      xth_me_cmds_update_area_vars $id
    }
  }
  xth_me_cmds_update_list $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  update idletasks
}

proc xth_me_cmds_update_text_ctrl {id} {

  global xth
  if {[string length $id] > 0} {
    $xth(ctrl,me,text).txt configure -state normal
    $xth(ctrl,me,text).txt delete 1.0 end
    $xth(ctrl,me,text).txt insert 1.0 $xth(me,cmds,$id,data)
    $xth(ctrl,me,text).txt mark set insert $xth(me,cmds,$id,cpos)
    $xth(ctrl,me,text).txt see $xth(me,cmds,$id,cpos)
    $xth(ctrl,me,text).upd configure -state normal
    xth_me_prev_cmd $xth(me,cmds,$id,data)
  } else {
    $xth(ctrl,me,text).txt configure -state normal
    $xth(ctrl,me,text).txt delete 1.0 end
    $xth(ctrl,me,text).txt see 1.0
    $xth(ctrl,me,text).txt configure -state disabled
    $xth(ctrl,me,text).upd configure -state disabled
  }
  
}



proc xth_me_cmds_unselect {id} {
  
  global xth
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$xth(me,unredook)} {
    xth_me_cmds_update $id
  }
  switch $xth(me,cmds,$id,ct) {
    1 {xth_me_cmds_update_text_ctrl {}}
    2 {xth_me_cmds_update_point_ctrl {}}
    3 {
      xth_me_cmds_update_line_ctrl {}
      xth_me_cmds_update_linept_ctrl {} 0
      set xth(me,cmds,selpid) 0
      if {$xth(me,cmds,mode) == 2} {
	xth_me_cmds_set_mode 0
      }
    }
    4 {xth_me_cmds_update_scrap_ctrl {}}
    6 {
      xth_me_cmds_update_area_ctrl {}
      if {$xth(me,cmds,mode) == 3} {
	xth_me_cmds_set_mode 0
      }
    }
  }
  update idletasks
  
}


proc xth_me_cmds_select {id} {

  global xth
  
  if {!$xth(me,fopen)} {
    return
  }
  set center_to 0
  update idletasks
  if {[llength $id] < 1} {
    set id [lindex $xth(me,cmds,xlist) [lindex [$xth(ctrl,me,cmds).cl.l curselection] 0]]
    if {$xth(me,cmds,$id,ct) == 2} {
      set center_to 1
    }
    set pid -1
  } elseif {[llength $id] < 2} {
    set id [lindex $id 0]
    set pid -1
  } else {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  }  

  if {$pid == -1} {
    set pid 0
    if {($xth(me,cmds,$id,ct) == 3) && ([llength $xth(me,cmds,$id,xplist)] > 1)} {
      set center_to [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
    }
  }
  
  set newx [lsearch $xth(me,cmds,xlist) $id]
  if {$xth(me,cmds,selid) == $id} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $newx $newx
    $xth(ctrl,me,cmds).cl.l see $newx
    if {($xth(me,cmds,$id,ct) == 3) && ($pid != $xth(me,cmds,selpid))} {
      xth_me_cmds_select_linept $id $pid
    }
    if {$xth(me,unredook)} {
      return
    }
  }
  if {$xth(me,cmds,$xth(me,cmds,selid),ct) != $xth(me,cmds,$id,ct)} {
    if {![string equal $xth(ctrl,me,cmds).cl.l [focus -lastfor $xth(gui,main)]]} {
      focus $xth(gui,main)
    }
  }
  
  if {$xth(me,cmds,selid) != $id} {
    xth_me_cmds_unselect $xth(me,cmds,selid)
  }

  set xth(me,cmds,selid) $id
  $xth(ctrl,me,cmds).cl.l selection clear 0 end  
  $xth(ctrl,me,cmds).cl.l selection set $newx $newx  
  $xth(ctrl,me,cmds).cl.l see $newx
  xth_me_cmds_set_colors  
  switch $xth(me,cmds,$id,ct) {
    1 {xth_me_cmds_update_text_ctrl $id}
    2 {xth_me_cmds_update_point_ctrl $id}
    3 {
      xth_me_cmds_update_line_ctrl $id
      xth_me_cmds_select_linept $id $pid
      $xth(me,can) itemconfigure lnln$id -fill $xth(gui,me,activefill)
      $xth(me,can) itemconfigure lnpt$id -fill $xth(gui,me,activefill)
    }
    4 {xth_me_cmds_update_scrap_ctrl $id}
    6 {
      xth_me_cmds_update_area_ctrl $id
      xth_me_cmds_show_current_area
    }
    default {xth_me_prev_cmd $xth(me,cmds,$id,data)}
  }
  
  if {$center_to > 0} {
    switch $xth(me,cmds,$id,ct) {
      2 { xth_me_center_to [list $xth(me,cmds,$id,x) $xth(me,cmds,$id,y)]
	}
      3 { xth_me_center_to [list \
	  $xth(me,cmds,$xth(me,cmds,selid),$center_to,x) \
	  $xth(me,cmds,$xth(me,cmds,selid),$center_to,y)]
	}
    }
  }
  update idletasks
}

proc xth_me_cmds_set_move_to_list {} {
  global xth
  # prejde vsetky prikazy a najde scrapy a endscrapy
  set xl [llength $xth(me,cmds,xlist)]
  set vls {}
  set lscrap {}
  for {set ii 0} {$ii < $xl} {incr ii} {
    set id [lindex $xth(me,cmds,xlist) $ii]
    switch $xth(me,cmds,$id,ct) {
      4 {
	set lscrap $xth(me,cmds,$id,name)
	lappend vls "$lscrap begin \[[expr $ii + 1]\]"
      }
      5 {
	lappend vls "$lscrap end \[$ii\]"
      }
    }
  }
  $xth(ctrl,me,cmds).cc.tt configure -values $vls
  update idletasks
}

proc xth_me_cmds_set_move_to {} {
  global xth
  set lnum {}
  regexp {\[(\d+)\]} $xth(ctrl,me,cmds,moveto) dum lnum
  set xth(ctrl,me,cmds,moveto) $lnum
  update idletasks
}


proc xth_me_cmds_move_to {id dx} {
  global xth
  xth_me_cmds_update {}
  if {[string length $dx] < 1} {
    set dx $xth(ctrl,me,cmds,moveto)
  }
  set dx [regexp -inline {\d*} $dx]
  if {[string length $dx] < 1} {
    return
  }
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  set sx [lsearch $xth(me,cmds,xlist) $id]
  set maxsdx [expr [llength $xth(me,cmds,xlist)] - 2]
  if {($dx == $sx) || ($sx > $maxsdx) || ($dx > $maxsdx)} {
    return;
  }

  # prehodi  
  set xth(me,cmds,list) [linsert $xth(me,cmds,list) $dx [lindex $xth(me,cmds,list) $sx]]
  set xth(me,cmds,xlist) [linsert $xth(me,cmds,xlist) $dx [lindex $xth(me,cmds,xlist) $sx]]
  if {$dx < $sx} {
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) [expr $sx + 1] [expr $sx + 1]]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) [expr $sx + 1] [expr $sx + 1]]
  } else {
    set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $sx $sx]
    set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $sx $sx]
  }    

  if {$dx < $sx} {
    xth_me_cmds_update_list_ft $dx [expr $sx + 1]
  } else {
    xth_me_cmds_update_list_ft $sx [expr $dx + 1]
  }

  set nid [lindex $xth(me,cmds,xlist) $sx]
  if {$xth(me,unredook)} {
    xth_me_cmds_select $nid
  }
  

  # unredo
  xth_me_unredo_action [mc "moving command"] \
    "xth_me_cmds_move_to $id $sx\nxth_me_cmds_select $id" \
    "xth_me_cmds_move_to $id $dx\nxth_me_cmds_select $nid"
  update idletasks
  
}

proc xth_me_cmds_move_up {id} {
  global xth
  xth_me_cmds_update {}
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$id < 1} {
    return
  }
  set ix [lsearch $xth(me,cmds,xlist) $id]
  if {$ix < 1} {
    return
  }
  set dix [expr $ix - 1]
  # vymenime v liste
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $dix $ix \
    [lindex $xth(me,cmds,list) $ix] [lindex $xth(me,cmds,list) $dix]]
  # vymenime v xliste
  set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $dix $ix \
    [lindex $xth(me,cmds,xlist) $ix] [lindex $xth(me,cmds,xlist) $dix]]
  # selection
  if {$id == $xth(me,cmds,selid)} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $dix $dix
    $xth(ctrl,me,cmds).cl.l see $dix
    set selcmd "\nxth_me_cmds_select $id"
  } else {
    set selcmd {}
  }
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ix]
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $dix]
  # unredo
  xth_me_unredo_action [mc "moving command"] \
    "xth_me_cmds_move_down $id$selcmd" \
    "xth_me_cmds_move_up $id$selcmd"
  update idletasks
}


proc xth_me_cmds_move_down {id} {
  global xth
  xth_me_cmds_update {}
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {$id < 1} {
    return
  }
  set ix [lsearch $xth(me,cmds,xlist) $id]
  if {$ix > [expr [llength $xth(me,cmds,xlist)] - 3]} {
    return
  }
  set iix [expr $ix + 1]
  # vymenime v liste
  set xth(me,cmds,list) [lreplace $xth(me,cmds,list) $ix $iix \
    [lindex $xth(me,cmds,list) $iix] [lindex $xth(me,cmds,list) $ix]]
  # vymenime v xliste
  set xth(me,cmds,xlist) [lreplace $xth(me,cmds,xlist) $ix $iix \
    [lindex $xth(me,cmds,xlist) $iix] [lindex $xth(me,cmds,xlist) $ix]]
  # selection
  if {$id == $xth(me,cmds,selid)} {
    $xth(ctrl,me,cmds).cl.l selection clear 0 end  
    $xth(ctrl,me,cmds).cl.l selection set $iix $iix
    $xth(ctrl,me,cmds).cl.l see $iix
    set selcmd "\nxth_me_cmds_select $id"
  } else {
    set selcmd {}
  }
  # unredo
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $ix]
  xth_me_cmds_update_list [lindex $xth(me,cmds,xlist) $iix]
  xth_me_unredo_action [mc "moving command"] \
   "xth_me_cmds_move_up $id$selcmd" "xth_me_cmds_move_down $id$selcmd"
  update idletasks
}


proc xth_me_cmds_create_endscrap {ix mode name} {
  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 5 {} $ix]
  set xth(me,cmds,$id,name) {}
  set xth(me,cmds,$id,data) "endscrap"
  if {[string length $name] > 0} {
    set xth(me,cmds,$id,data) "$xth(me,cmds,$id,data)\n# $name"
  }
  xth_me_cmds_update_list $id
  if {$mode} {
    xth_me_cmds_select $id
    xth_me_cmds_select [expr $id - 1]
    xth_me_unredo_action [mc "creating endscrap"] \
     "xth_me_cmds_delete $id" \
     "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
  }
}


proc xth_me_cmds_hide_scrap_xctrl {} {

  global xth

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -state hidden
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  ""

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -state hidden
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  ""

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scpA) -state hidden
  
}


proc xth_me_cmds_move_scrap_xctrl {id x y} {
  global xth
  set xth(me,canid,scrap,scp$id,pos) [list $x $y]
  set x [xth_me_real2canx $x]
  set y [xth_me_real2cany $y]
  $xth(me,can) coords $xth(me,canid,scrap,scp$id) \
    [expr $x - $xth(gui,me,scrap,psize)] [expr $y - $xth(gui,me,scrap,psize)] \
    [expr $x + $xth(gui,me,scrap,psize)] [expr $y + $xth(gui,me,scrap,psize)]
  set x1 [xth_me_real2canx [lindex $xth(me,canid,scrap,scp1,pos) 0]]
  set y1 [xth_me_real2cany [lindex $xth(me,canid,scrap,scp1,pos) 1]]
  set x2 [xth_me_real2canx [lindex $xth(me,canid,scrap,scp2,pos) 0]]
  set y2 [xth_me_real2cany [lindex $xth(me,canid,scrap,scp2,pos) 1]]
  $xth(me,can) coords $xth(me,canid,scrap,scpA) $x1 $y1 $x2 $y2
}


proc xth_me_cmds_start_scrap_xctrl_drag {pid x y} {
  global xth
  xth_me_cmds_update {}
  set xth(me,scrap,xdrag_mx) $x
  set xth(me,scrap,xdrag_my) $y
  set xth(me,scrap,xdrag_px) $xth(ctrl,me,scrap,px$pid)
  set xth(me,scrap,xdrag_py) $xth(ctrl,me,scrap,py$pid)
  set xth(me,scrap,xdrag_benter) [$xth(me,can) bind $xth(me,canid,scrap,scp$pid) ]
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  {}
  set xth(me,scrap,xdrag_bleave) [$xth(me,can) bind $xth(me,canid,scrap,scp$pid) ]
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  {}
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp$pid) -fill {}
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  "xth_me_cmds_scrap_xctrl_drag $pid %x %y"
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  "xth_me_cmds_end_scrap_xctrl_drag $pid %x %y"
  $xth(me,can) configure -cursor {}
}


proc xth_me_cmds_scrap_xctrl_drag {pid x y} {
  global xth
  set nx [expr $xth(me,scrap,xdrag_px) - [expr double($xth(me,scrap,xdrag_mx) - $x) * 100.0 / $xth(me,zoom)]]
  set ny [expr $xth(me,scrap,xdrag_py) + [expr double($xth(me,scrap,xdrag_my) - $y) * 100.0 / $xth(me,zoom)]]
  xth_me_cmds_move_scrap_xctrl $pid $nx $ny
  set xth(ctrl,me,scrap,px$pid) $nx
  set xth(ctrl,me,scrap,py$pid) $ny
  update idletasks
}


proc xth_me_cmds_end_scrap_xctrl_drag {pid x y} {
  global xth
  xth_me_cmds_scrap_xctrl_drag $pid $x $y
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  ""
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  $xth(me,scrap,xdrag_benter)
  $xth(me,can) bind $xth(me,canid,scrap,scp$pid)  $xth(me,scrap,xdrag_bleave)
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp$pid) -fill yellow
  $xth(me,can) configure -cursor crosshair
  xth_me_cmds_update {}
}


proc xth_me_cmds_show_scrap_xctrl {x1 y1 x2 y2} {

  global xth
  
  xth_me_cmds_move_scrap_xctrl 1 $x1 $y1
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -state normal
  $xth(me,can) raise $xth(me,canid,scrap,scp1)
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  "xth_status_bar_push me; xth_status_bar_status me \"Scrap picture scale point 1.\"; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -fill yellow"
  $xth(me,can) bind $xth(me,canid,scrap,scp1)  "xth_status_bar_pop me; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp1) -fill red"
  $xth(me,can) bind $xth(me,canid,scrap,scp1) <1> "xth_me_cmds_start_scrap_xctrl_drag 1 %x %y"

  xth_me_cmds_move_scrap_xctrl 2 $x2 $y2
  $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -state normal
  $xth(me,can) raise $xth(me,canid,scrap,scp2)
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  "xth_status_bar_push me; xth_status_bar_status me \"Scrap picture scale point 2.\"; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -fill yellow"
  $xth(me,can) bind $xth(me,canid,scrap,scp2)  "xth_status_bar_pop me; $xth(me,can) itemconfigure $xth(me,canid,scrap,scp2) -fill red"
  $xth(me,can) bind $xth(me,canid,scrap,scp2) <1> "xth_me_cmds_start_scrap_xctrl_drag 2 %x %y"

  $xth(me,can) itemconfigure $xth(me,canid,scrap,scpA) -state normal
  
}


proc xth_me_cmds_update_scrap_ctrl {id} {
  global xth
  if {[string length $id] > 0} {
    $xth(ctrl,me,scrap).namel configure -state normal
    $xth(ctrl,me,scrap).name configure -state normal
    $xth(ctrl,me,scrap).projl configure -state normal
    $xth(ctrl,me,scrap).proj configure -state normal
    $xth(ctrl,me,scrap).optl configure -state normal
    $xth(ctrl,me,scrap).opt configure -state normal
    $xth(ctrl,me,scrap).scl configure -state normal
    $xth(ctrl,me,scrap).scpb configure -state normal
    $xth(ctrl,me,scrap).scpp configure -state normal
    $xth(ctrl,me,scrap).scrp configure -state normal
    $xth(ctrl,me,scrap).scx1p configure -state normal
    $xth(ctrl,me,scrap).scy1p configure -state normal
    $xth(ctrl,me,scrap).scx2p configure -state normal
    $xth(ctrl,me,scrap).scy2p configure -state normal
    $xth(ctrl,me,scrap).scx1r configure -state normal
    $xth(ctrl,me,scrap).scy1r configure -state normal
    $xth(ctrl,me,scrap).scx2r configure -state normal
    $xth(ctrl,me,scrap).scy2r configure -state normal
    $xth(ctrl,me,scrap).scu configure -state normal
    $xth(ctrl,me,scrap).scul configure -state normal
    $xth(ctrl,me,scrap).skl configure -state normal
    $xth(ctrl,me,scrap).skll.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,sklist)
    $xth(ctrl,me,scrap).skins configure -state normal
    $xth(ctrl,me,scrap).skdel configure -state normal
    set xth(ctrl,me,scrap,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,scrap,projection) $xth(me,cmds,$id,projection)
    set xth(ctrl,me,scrap,options) $xth(me,cmds,$id,options)
    set xth(ctrl,me,scrap,px1) [lindex $xth(me,cmds,$id,scale) 0]
    set xth(ctrl,me,scrap,py1) [lindex $xth(me,cmds,$id,scale) 1]
    set xth(ctrl,me,scrap,px2) [lindex $xth(me,cmds,$id,scale) 2]
    set xth(ctrl,me,scrap,py2) [lindex $xth(me,cmds,$id,scale) 3]
    set xth(ctrl,me,scrap,rx1) [lindex $xth(me,cmds,$id,scale) 4]
    set xth(ctrl,me,scrap,ry1) [lindex $xth(me,cmds,$id,scale) 5]
    set xth(ctrl,me,scrap,rx2) [lindex $xth(me,cmds,$id,scale) 6]
    set xth(ctrl,me,scrap,ry2) [lindex $xth(me,cmds,$id,scale) 7]
    set xth(ctrl,me,scrap,units) [lindex $xth(me,cmds,$id,scale) 8]
    xth_me_cmds_show_scrap_xctrl [lindex $xth(me,cmds,$id,scale) 0] \
      [lindex $xth(me,cmds,$id,scale) 1] [lindex $xth(me,cmds,$id,scale) 2] \
      [lindex $xth(me,cmds,$id,scale) 3]
    xth_me_prev_cmd $xth(me,cmds,$id,data)
  } else {
    set xth(ctrl,me,scrap,name) ""
    set xth(ctrl,me,scrap,projection) $xth(me,dflt,scrap,projection)
    set xth(ctrl,me,scrap,options) $xth(me,dflt,scrap,options)
    set xth(ctrl,me,scrap,px1) [lindex $xth(me,dflt,scrap,scale) 0]
    set xth(ctrl,me,scrap,py1) [lindex $xth(me,dflt,scrap,scale) 1]
    set xth(ctrl,me,scrap,px2) [lindex $xth(me,dflt,scrap,scale) 2]
    set xth(ctrl,me,scrap,py2) [lindex $xth(me,dflt,scrap,scale) 3]
    set xth(ctrl,me,scrap,rx1) [lindex $xth(me,dflt,scrap,scale) 4]
    set xth(ctrl,me,scrap,ry1) [lindex $xth(me,dflt,scrap,scale) 5]
    set xth(ctrl,me,scrap,rx2) [lindex $xth(me,dflt,scrap,scale) 6]
    set xth(ctrl,me,scrap,ry2) [lindex $xth(me,dflt,scrap,scale) 7]
    set xth(ctrl,me,scrap,units) [lindex $xth(me,dflt,scrap,scale) 8]
    $xth(ctrl,me,scrap).namel configure -state disabled
    $xth(ctrl,me,scrap).name configure -state disabled
    $xth(ctrl,me,scrap).projl configure -state disabled
    $xth(ctrl,me,scrap).proj configure -state disabled
    $xth(ctrl,me,scrap).optl configure -state disabled
    $xth(ctrl,me,scrap).opt configure -state disabled
    $xth(ctrl,me,scrap).scl configure -state disabled
    $xth(ctrl,me,scrap).scpb configure -state disabled
    $xth(ctrl,me,scrap).scpp configure -state disabled
    $xth(ctrl,me,scrap).scrp configure -state disabled
    $xth(ctrl,me,scrap).scx1p configure -state disabled
    $xth(ctrl,me,scrap).scy1p configure -state disabled
    $xth(ctrl,me,scrap).scx2p configure -state disabled
    $xth(ctrl,me,scrap).scy2p configure -state disabled
    $xth(ctrl,me,scrap).scx1r configure -state disabled
    $xth(ctrl,me,scrap).scy1r configure -state disabled
    $xth(ctrl,me,scrap).scx2r configure -state disabled
    $xth(ctrl,me,scrap).scy2r configure -state disabled
    $xth(ctrl,me,scrap).scu configure -state disabled
    $xth(ctrl,me,scrap).scul configure -state disabled
    $xth(ctrl,me,scrap).skl configure -state disabled
    $xth(ctrl,me,scrap).skll.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,scrap,sklempty)
    $xth(ctrl,me,scrap).skins configure -state disabled
    $xth(ctrl,me,scrap).skdel configure -state disabled
    xth_me_cmds_hide_scrap_xctrl    
  }
}

proc xth_me_cmds_update_scrap_vars {id} {

  global xth
  set xth(ctrl,me,scrap,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,scrap,projection) $xth(me,cmds,$id,projection)
  set xth(ctrl,me,scrap,options) $xth(me,cmds,$id,options)
  set xth(ctrl,me,scrap,px1) [lindex $xth(me,cmds,$id,scale) 0]
  set xth(ctrl,me,scrap,py1) [lindex $xth(me,cmds,$id,scale) 1]
  set xth(ctrl,me,scrap,px2) [lindex $xth(me,cmds,$id,scale) 2]
  set xth(ctrl,me,scrap,py2) [lindex $xth(me,cmds,$id,scale) 3]
  set xth(ctrl,me,scrap,rx1) [lindex $xth(me,cmds,$id,scale) 4]
  set xth(ctrl,me,scrap,ry1) [lindex $xth(me,cmds,$id,scale) 5]
  set xth(ctrl,me,scrap,rx2) [lindex $xth(me,cmds,$id,scale) 6]
  set xth(ctrl,me,scrap,ry2) [lindex $xth(me,cmds,$id,scale) 7]
  set xth(ctrl,me,scrap,units) [lindex $xth(me,cmds,$id,scale) 8]
  xth_me_cmds_move_scrap_xctrl 1 [lindex $xth(me,cmds,$id,scale) 0] \
    [lindex $xth(me,cmds,$id,scale) 1] 
  xth_me_cmds_move_scrap_xctrl 2 [lindex $xth(me,cmds,$id,scale) 2] \
    [lindex $xth(me,cmds,$id,scale) 3]

}


proc xth_me_cmds_update_scrap {id nname nproj nopt nscale} {

  global xth
  
  set oname $xth(me,cmds,$id,name)
  set oproj $xth(me,cmds,$id,projection)
  set oopt $xth(me,cmds,$id,options)
  set oscale $xth(me,cmds,$id,scale)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt
  if {[string length $nname] < 1} {
    set nname $oname
  }  
  if {[llength $nscale] < 8} {
    set nscale oscale
  } else {
    for {set i 0} {$i < 8} {incr i} {
      if {[catch {expr [lindex $nscale $i]}]} {
	set nscale [lreplace $nscale $i $i [lindex $oscale $i]]
      }
    }
  }
  if {[llength $nscale] == 9} {
    if {[string length [lindex $nscale 8]] == 0} {
      set nscale [lreplace $nscale 8 8]
    }
  }
  
  if {![string equal "$oname $oproj $oopt $oscale" "$nname $nproj $nopt $nscale"]} {
    xth_me_unredo_action [mc "scrap changes"] \
      "xth_me_cmds_update_scrap $id $oname [list $oproj] [list $oopt] [list $oscale]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_scrap $id $nname [list $nproj] [list $nopt] [list $nscale]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,name) $nname
    set xth(me,cmds,$id,projection) $nproj
    set xth(me,cmds,$id,options) $nopt
    set xth(me,cmds,$id,scale) $nscale
    xth_me_cmds_update_scrap_data $id
    xth_me_cmds_update_list $id
  }
  
}


proc xth_me_cmds_update_scrap_data {id} {

  global xth

  set d "scrap $xth(me,cmds,$id,name)"

  if {[llength $xth(me,cmds,$id,projection)] > 1} {
    set d "$d -projection \[$xth(me,cmds,$id,projection)\]"
  } elseif {[llength $xth(me,cmds,$id,projection)] > 0} {
    set d "$d -projection $xth(me,cmds,$id,projection)"
  }
  set xth(me,dflt,scrap,projection) $xth(me,cmds,$id,projection)

  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,scrap,options) $xth(me,cmds,$id,options)

  set d "$d -scale \[$xth(me,cmds,$id,scale)\]"
  set xth(me,dflt,scrap,scale) $xth(me,cmds,$id,scale)
  
  foreach sk $xth(me,cmds,$id,sklist) {
    set d "$d -sketch $sk"
  }

  set xth(me,cmds,$id,data) "$d"
  
}


proc xth_me_cmds_create_scrap {ix mode name opts} {

  global xth
  xth_me_cmds_update {}

  set undoselect {}
  if {[string length $ix] == 0} {
    set undoselect "; xth_me_cmds_select $xth(me,cmds,selid)"

    #xth_me_cmds_select [lindex $xth(me,cmds,xlist) 0]
    set newselid 0
    set cx [lsearch -exact $xth(me,cmds,xlist) $xth(me,cmds,selid)]
    if {$cx > -1} {
      for {set cc [expr $cx + 1]} {$cc < [llength $xth(me,cmds,xlist)]} {incr cc} {
	set cselid [lindex $xth(me,cmds,xlist) $cc]
	if {$xth(me,cmds,$cselid,ct) == 4} {
	  set newselid $cselid
	  break
	}
      }
    }
    xth_me_cmds_select $newselid
    
  }
  
  set id [xth_me_cmds_create 4 {} $ix]

  if {[string length $name] > 0} {
    set xth(me,cmds,$id,name) $name
  } else {
    set xth(me,cmds,$id,name) "scrap$id"
  }

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,scrap,options)
  }
  
  # nastavit projekciu
  if {$mode} {
    set xth(me,cmds,$id,projection) $xth(me,dflt,scrap,projection)
  } else {
    set xth(me,cmds,$id,projection) {}
  }
  set optl [xth_me_cmds_get_line_option $opts projection]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,projection) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  set optl [xth_me_cmds_get_line_option $opts proj]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,projection) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  
  # nastavit scale
  set xth(me,cmds,$id,scale) {}
  if {[llength $xth(me,dflt,scrap,scale)] < 1} {
    set xth(me,dflt,scrap,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
      $xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 0.0254 * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 m]
  }
  set optl [xth_me_cmds_get_line_option $opts scale]
  set optv [lindex $optl 0]
  set opts [lindex $optl 1]
  switch [llength $optv] {
    1 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * $optv * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 m]
    }
    2 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * [lindex $optv 0] * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 [lindex $optv 1]]
    }
    3 {
      set xth(me,cmds,$id,scale) [list $xth(me,area,xmin) $xth(me,area,ymin) \
	$xth(me,area,xmax) $xth(me,area,ymin) 0.0 0.0 [expr 1.0 * [lindex $optv 1] / [lindex $optv 0] * ($xth(me,area,xmax) - $xth(me,area,xmin))] 0.0 [lindex $optv 2]]
    }
    8 {
      set xth(me,cmds,$id,scale) [list [lindex $optv 0] [lindex $optv 1] [lindex $optv 2] \
      [lindex $optv 3] [lindex $optv 4] [lindex $optv 5] [lindex $optv 6] [lindex $optv 7]]
    }
    9 {
      set xth(me,cmds,$id,scale) [list [lindex $optv 0] [lindex $optv 1] [lindex $optv 2] \
      [lindex $optv 3] [lindex $optv 4] [lindex $optv 5] [lindex $optv 6] [lindex $optv 7] [lindex $optv 8]]
    }
    default {
      set xth(me,cmds,$id,scale) $xth(me,dflt,scrap,scale)
    }
  }

  # set the list of sketches    
  set xth(me,cmds,$id,sklist) {}
  set optl [xth_me_cmds_get_sketch_option $opts]
  while {[lindex $optl 2]} {
    lappend xth(me,cmds,$id,sklist) [lindex $optl 0]
    set opts [lindex $optl 1]
    set optl [xth_me_cmds_get_sketch_option $opts]
  }
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts
  
  xth_me_cmds_update_list $id
  xth_me_cmds_update_scrap_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating scrap"] \
      "xth_me_cmds_delete $id$undoselect" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
    xth_me_cmds_create_endscrap $ix $mode {}
  }
}


proc xth_me_cmds_create_text {ix mode data cpos} {
  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 1 {} $ix]
  set xth(me,cmds,$id,data) $data
  set xth(me,cmds,$id,cpos) $cpos
  if {$mode} {
    xth_me_cmds_select $id
    xth_me_unredo_action [mc "creating text"] \
      "xth_me_cmds_delete $id" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"
  }
}


proc xth_me_cmds_update_text {id newdata newcpos} {
  global xth
  set olddata $xth(me,cmds,$id,data)
  set oldcpos $xth(me,cmds,$id,cpos)
  regsub {\s*$} $newdata {} newdata
  if {![string equal $xth(me,cmds,$id,data) $newdata]} {
    set newdata "$newdata\n"
    xth_me_unredo_action [mc "text changes"] \
      "xth_me_cmds_update_text $id [list $olddata] $oldcpos; xth_me_cmds_select $id" \
      "xth_me_cmds_update_text $id [list $newdata] $newcpos; xth_me_cmds_select $id"
    set xth(me,cmds,$id,data) $newdata
    set xth(me,cmds,$id,cpos) $newcpos    
  }
}


proc xth_me_cmds_action {} {
  global xth
  switch $xth(me,cmds,action) {
    0 {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    }
    1 {
      xth_me_cmds_set_mode 1    
    }
    2 {
      xth_me_cmds_create_scrap {} 1 "" ""
      xth_ctrl_scroll_to me scrap
      xth_ctrl_maximize me scrap
    }
    3 {
      xth_me_cmds_create_text {} 1 "\n" "1.0"
      xth_ctrl_scroll_to me text
      xth_ctrl_maximize me text
      focus $xth(ctrl,me,text).txt
    }
    4 {
      xth_me_cmds_delete {}
    }
    5 {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    }
  }
}


proc xth_me_cmds_create_all {lns} {
  global xth
  set ctext {}
  xth_status_bar_push me
  set ctext_push {
    regsub {^\s*} $ctext {} ctext
    regsub {\s*$} $ctext {} ctext
    if {[string length $ctext] > 0} {
      xth_me_cmds_create_text [expr [llength $xth(me,cmds,xlist)] - 1] 0 "$ctext\n" 1.0
      set ctext {}
    }
  }
  set line_lines {}
  set line_type {}
  set line_opts {}
  set inline 0
  set linenumber 0
  set totallns [llength $lns]
  xth_me_progbar_show $totallns
  xth_status_bar_status me "Processing commands ..."
  foreach ln $lns {
    incr linenumber
    xth_me_progbar_prog $linenumber
    # here take care of special commands
    if {[regexp {^\s*scrap\s+(\S+)\s*(.*)$} $ln dum name opts]} {
      eval $ctext_push
      xth_me_cmds_create_scrap [expr [llength $xth(me,cmds,xlist)] - 1] 0 $name $opts
    } elseif {[regexp {^\s*endscrap\s*(\S*)\s*$} $ln dum name]} {
      eval $ctext_push
      xth_me_cmds_create_endscrap [expr [llength $xth(me,cmds,xlist)] - 1] 0 $name
    } elseif {[regexp {^\s*point\s+(\S+)\s+(\S+)\s+(\S+)\s*(.*)$} $ln dum x y type opts]} {
      eval $ctext_push
      xth_me_cmds_create_point [expr [llength $xth(me,cmds,xlist)] - 1] 0 $x $y $type $opts
    } elseif {[regexp {^\s*line\s+(\S+)\s*(.*)$} $ln dum line_type line_opts]} {
      eval $ctext_push
      set line_lines {}
      set inline 1
    } elseif {($inline == 1) && [regexp {^\s*endline(\s|$)} $ln]} {
      xth_me_cmds_create_line [expr [llength $xth(me,cmds,xlist)] - 1] 0 $line_type $line_opts $line_lines
      set line_lines {}
      set line_type {}
      set line_opts {}
      set inline 0
    } elseif {[regexp {^\s*area\s+(\S+)\s*(.*)$} $ln dum line_type line_opts]} {
      eval $ctext_push
      set line_lines {}
      set inline 2
    } elseif {($inline == 2) && [regexp {^\s*endarea(\s|$)} $ln]} {
      xth_me_cmds_create_area [expr [llength $xth(me,cmds,xlist)] - 1] 0 $line_type $line_opts $line_lines
      set line_lines {}
      set line_type {}
      set line_opts {}
      set inarea 0
    } elseif {($inline > 0)} {
      lappend line_lines $ln
    } else {
      set ctext "$ctext\n$ln"
    }
  }
  if {$inline > 0} {
    foreach ln $line_lines {
      set ctext "$ctext\n$ln"
    }
  }
  eval $ctext_push
  xth_me_progbar_hide
  xth_status_bar_pop me
}


proc xth_me_cmds_click {id tagOrId x y mx my} {
  global xth
  xth_me_cmds_update {}
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }
  
  switch $xth(me,cmds,mode) {
    0 {
      if {[llength $id] > 0} {
	if {$id != $xth(me,cmds,selid)} {
	  xth_me_cmds_select "$id $pid"
	  if {$pid == 0} {
	    xth_ctrl_scroll_to me point
	    xth_ctrl_maximize me point
	  } else {
	    xth_ctrl_scroll_to me line
	    xth_ctrl_maximize me line
	    xth_ctrl_maximize me linept
	  }
	} else {
	  switch $xth(me,cmds,$id,ct) {
	    2 {xth_me_cmds_start_point_drag $id $mx $my}
	    3 {
	      if {$xth(me,cmds,selpid) != $pid} {
		xth_me_cmds_select_linept $id $pid
	      } else {
		xth_me_cmds_start_linecp_drag pt$id.$pid $id 0 $pid 0 x $mx $my
	      }
	    }
	  }
	}
      }
    }
    1 {
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point
      # check, whether we clicked on XVI station
      set cptype {}
      set cpopts {}
      if {[regexp {XVIstI(\d+)S(\d+)} [$xth(me,can) itemcget $tagOrId -tags] dum imgx sti]} {
	set csname [lindex [lindex $xth(me,imgs,$imgx,XVIstations) $sti] 2]
	set x [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
	set y [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
	set cptype station
	set cpopts $xth(me,dflt,point,options)
	if {[regexp {\-name\s+(\S+)} $cpopts]} {
	  regsub {\-name\s+(\S+)} $cpopts "-name $csname" cpopts
	} else {
	  set cpopts "-name $csname"
	}
      }
      if {$id == ($xth(me,cmds,cmdln) - 1)} {
	xth_me_cmds_end_point 
      } else {
	xth_me_cmds_create_point {} 1 $x $y $cptype $cpopts
      }
    }
    2 {
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
      set fpid -1
      set lpid -1
      if {($id == $xth(me,cmds,selid)) && ([string length $id] > 0) && ($pid > 0)} {
	set xl $xth(me,cmds,$id,xplist)
	set lix [expr [llength $xl] - 2]
	if {$lix >= 0} {
	  set fpid [lindex $xl 0]
	  set lpid [lindex $xl $lix]
	}
      }
      if {($id == $xth(me,cmds,selid)) && ($pid != 0) && ($pid == $xth(me,cmds,inspid))} {
	xth_me_cmds_end_line
      } elseif {($id == $xth(me,cmds,selid)) && ($pid == $fpid) && ($xth(me,cmds,inspid) == 0)} {
	xth_me_cmds_close_line $id
      } elseif {($id == $xth(me,cmds,selid)) && ($pid == $lpid) && ($xth(me,cmds,inspid) == 0)} {
	xth_me_cmds_end_line
      } else {
	# vytvori novy bod
    # ak sme klikli na XVIbod, tak hodime presne tam
      if {[regexp {XVIstI(\d+)S(\d+)} [$xth(me,can) itemcget $tagOrId -tags] dum imgx sti]} {
        set x [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
        set y [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
      }    
	xth_me_cmds_start_create_linept $tagOrId $x $y $mx $my
      }      
    }
    3 {
      if {([string length $id] > 0) && ($xth(me,cmds,$id,ct) == 3)} {
	xth_me_cmds_insert_area_lineid $id $mx $my
      }
    }
    4 {
      xth_me_cmds_scrap_scale $x $y
    }
    5 {
      xth_me_cmds_scrap_sketch_insert $tagOrId
    }
  }
}


proc xth_me_cmds_end_point {} {
  set recmds "xth_me_cmds_set_mode 0"
  set uncmds "xth_me_cmds_set_mode 1"
  eval $recmds
  xth_me_unredo_action [mc "end point insertion"] $uncmds $recmds
}




proc xth_me_cmds_click_lineln {id tagOrId mx my} {
  global xth
  xth_me_cmds_update {}
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }

  switch $xth(me,cmds,mode) {
    3 {
      if {$xth(me,cmds,$id,ct) == 3} {
	xth_me_cmds_insert_area_lineid $id $mx $my
      }
    }
    4 {
      xth_me_cmds_scrap_scale
    }
    0 {
      xth_me_cmds_select "$id $pid"
    }
    default {
      xth_me_cmds_click_area ln$id.$pid $mx $my
    }
  }
}



proc xth_me_cmds_click_area {tagOrId x y} {
  global xth
  xth_me_cmds_click {} $tagOrId [xth_me_can2realx [$xth(me,can) canvasx $x]] [xth_me_can2realy [$xth(me,can) canvasy $y]] $x $y
}


proc xth_me_cmds_set_mode {nmode} {
  
  global xth
  
  if {!$xth(me,fopen)} {
    return
  }

  if {($nmode == 0) && ($xth(me,cmds,mode) == 0)} {
    xth_me_cmds_select_nopoint
  }

  set xth(me,cmds,mode) $nmode
  switch $nmode {
    0 {
      $xth(me,mbar) configure -text [mc "select object"] -bg green -fg black
      $xth(ctrl,me,ac).ins configure -text [mc "Insert"]
    }
    1 {
      $xth(me,mbar) configure -text [mc "insert point"] -bg red -fg white
    }
    2 {
      $xth(me,mbar) configure -text [mc "insert line point"] -bg red -fg white
    }
    3 {
      $xth(me,mbar) configure -text [mc "insert area border"] -bg red -fg white
      $xth(ctrl,me,ac).ins configure -text [mc "Select"]
    }
    4 {
      $xth(me,mbar) configure -text [mc "scale scrap"] -bg red -fg white
    }
    5 {
      $xth(me,mbar) configure -text [mc "insert sketch"] -bg red -fg white
    }
  }
  
  set xth(tb,me,action) $nmode
  
}


proc xth_me_cmds_create_point {ix mode x y type opts} {

  global xth
  xth_me_cmds_update {}
  set id [xth_me_cmds_create 2 {} $ix]

  set xth(me,cmds,$id,x) $x
  set xth(me,cmds,$id,y) $y
  
  if {$mode && ([string length $opts] < 1)} {
    if {([string length $type] < 1) && \
	[string equal $xth(me,dflt,point,type) station] && \
	[regexp {\-name\s+(\S+)} $xth(me,dflt,point,options) dum stname]} {
      regsub {\-name\s+(\S+)} $xth(me,dflt,point,options) "-name [xth_incr_station_name $stname $xth(me,snai)]" xth(me,dflt,point,options)
    }
    set opts $xth(me,dflt,point,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,point,type)
  }
  
  # nastavit meno
  set optl [xth_me_cmds_get_line_option $opts id]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,name) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  
  # nastavit rotation
  if {$mode} {
    set xth(me,cmds,$id,rotation) $xth(me,dflt,point,rotation)
  } else {
    set xth(me,cmds,$id,rotation) {}
  }
  set optl [xth_me_cmds_get_line_option $opts orientation]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,rotation) [lindex $optl 0]
    set opts [lindex $optl 1]
  } else {
    set optl [xth_me_cmds_get_line_option $opts orient]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,rotation) [lindex $optl 0]
      set opts [lindex $optl 1]
    }
  }

#  # nastavit xsize
#  if {$mode} {
#    set xth(me,cmds,$id,xsize) $xth(me,dflt,point,xsize)
#  } else {
    set xth(me,cmds,$id,xsize) {}
#  }
#  set optl [xth_me_cmds_get_line_option $opts size]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,xsize) [lindex $optl 0]
#    set xth(me,cmds,$id,ysize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#  set optl [xth_me_cmds_get_line_option $opts "x-size"]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,xsize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#
#  # nastavit ysize
#  if {$mode} {
#    set xth(me,cmds,$id,ysize) $xth(me,dflt,point,ysize)
#  } else {
    set xth(me,cmds,$id,ysize) {}
#  }
#  set optl [xth_me_cmds_get_line_option $opts "y-size"]
#  if {[lindex $optl 2]} {
#    set xth(me,cmds,$id,ysize) [lindex $optl 0]
#    set opts [lindex $optl 1]
#  }
#  
#  if {([string length $xth(me,cmds,$id,ysize)] > 0) &&
#      ([string length $xth(me,cmds,$id,xsize)] == 0)} {
#    set xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize)
#    set xth(me,cmds,$id,ysize) {}
#  }

  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts
  
  xth_me_cmds_draw_point $id
  if {$mode} {
    $xth(me,can) itemconfigure pt$id -fill lightBlue
  }
  xth_me_cmds_update_list $id
  xth_me_cmds_update_point_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating point"] \
      "xth_me_cmds_delete $id" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]"  
    xth_me_cmds_select $id
  }

}


proc xth_me_cmds_update_point_data {id} {

  global xth

  set d "point $xth(me,cmds,$id,x) $xth(me,cmds,$id,y) $xth(me,cmds,$id,type)"
  set xth(me,dflt,point,type) $xth(me,cmds,$id,type)

  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set d "$d -id $xth(me,cmds,$id,name)"
  }
  
  if {[string length $xth(me,cmds,$id,rotation)] > 0} {
    set d "$d -orientation $xth(me,cmds,$id,rotation)"
  }
  set xth(me,dflt,point,rotation) $xth(me,cmds,$id,rotation)

  if {[string length $xth(me,cmds,$id,xsize)] > 0} {
    set d "$d -x-size $xth(me,cmds,$id,xsize)"
  }
  set xth(me,dflt,point,xsize) $xth(me,cmds,$id,xsize)

  if {[string length $xth(me,cmds,$id,ysize)] > 0} {
    set d "$d -y-size $xth(me,cmds,$id,ysize)"
  }
  set xth(me,dflt,point,ysize) $xth(me,cmds,$id,ysize)

  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,point,options) $xth(me,cmds,$id,options)

  catch {
  set ttype [lindex $d 3]
  set xth(me,cmds,$id,sbar) "$d"
  if {([string length $ttype] > 0)} {
    set ttyp [ mc "point $ttype"]
    if {![string equal $ttype $ttyp]} {
      set nd [lreplace $d 3 3 "$ttype:$ttyp"]
      set xth(me,cmds,$id,sbar) "$nd"
    }
  } 
  }

  set xth(me,cmds,$id,data) "$d"
  
}


proc xth_me_cmds_move_point_xctrl {id} {
  global xth
  set cx [xth_me_real2canx $xth(me,cmds,$id,x)]
  set cy [xth_me_real2cany $xth(me,cmds,$id,y)]
  set c1 [expr $cx - 3 * $xth(gui,me,point,psize)]
  set c2  [expr $cy - 3 * $xth(gui,me,point,psize)]
  set c3  [expr $cx + 3 * $xth(gui,me,point,psize)]
  set c4  [expr $cy + 3 * $xth(gui,me,point,psize)]
  $xth(me,can) coords $xth(me,canid,point,selector) [list $c1 $c2 $c3 $c4]
}

proc xth_me_cmds_show_point_xctrl {id} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state normal
  $xth(me,can) raise $xth(me,canid,point,selector)
  $xth(me,can) raise ptfill
  $xth(me,can) lower ptfill point
  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_show_point_fill_xctrl $id
  $xth(me,can) raise pt$id
}


proc xth_me_cmds_show_point_fill_xctrl {id} {
  global xth
  if {$xth(ctrl,me,point,xsid) || $xth(ctrl,me,point,ysid)} {
    xth_me_cmds_configure_point_fill_xctrl $id 1
    xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
  } elseif {$xth(ctrl,me,point,rotid)} {
    xth_me_cmds_configure_point_fill_xctrl $id 0
    xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
  } else {
    xth_me_cmds_configure_point_fill_xctrl {} 0
  }
}


proc xth_me_cmds_hide_point_xctrl {} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state hidden
  xth_me_cmds_configure_point_fill_xctrl {} {}
}


proc xth_me_cmds_update_point_ctrl {id} {
  global xth
  if {[string length $id] > 0} {

    $xth(ctrl,me,point).posl configure -state normal
    $xth(ctrl,me,point).posx configure -state normal
    $xth(ctrl,me,point).posy configure -state normal
    $xth(ctrl,me,point).upd configure -state normal
    $xth(ctrl,me,point).typl configure -state normal
    $xth(ctrl,me,point).typ configure -state normal
    $xth(ctrl,me,point).namel configure -state normal
    $xth(ctrl,me,point).name configure -state normal
    $xth(ctrl,me,point).optl configure -state normal
    $xth(ctrl,me,point).opt configure -state normal
    $xth(ctrl,me,point).rotc configure -state normal
    $xth(ctrl,me,point).rot configure -state normal
    $xth(ctrl,me,point).xszc configure -state normal
    $xth(ctrl,me,point).xsz configure -state normal
    $xth(ctrl,me,point).yszc configure -state normal
    $xth(ctrl,me,point).ysz configure -state normal
    $xth(ctrl,me,point).theme configure -state normal
    $xth(ctrl,me,point).themetype configure -state normal
    
    set xth(ctrl,me,point,x) $xth(me,cmds,$id,x)
    set xth(ctrl,me,point,y) $xth(me,cmds,$id,y)
    set xth(ctrl,me,point,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,point,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,point,opts) $xth(me,cmds,$id,options)
    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,point,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,point,themetype) {}
    } else {
      set xth(ctrl,me,point,themetype) [lindex $xth(me,themes,$at,point,showlist) $tx]
    }
    
    set xth(ctrl,me,point,rot) $xth(me,cmds,$id,rotation)
    if {[string length $xth(me,cmds,$id,rotation)] > 0} {
      set xth(ctrl,me,point,rotid) 1
    } else {
      set xth(ctrl,me,point,rotid) 0
    }

    set xth(ctrl,me,point,xs) $xth(me,cmds,$id,xsize)
    if {[string length $xth(me,cmds,$id,xsize)] > 0} {
      set xth(ctrl,me,point,xsid) 1
    } else {
      set xth(ctrl,me,point,xsid) 0
    }

    set xth(ctrl,me,point,ys) $xth(me,cmds,$id,ysize)
    if {[string length $xth(me,cmds,$id,ysize)] > 0} {
      set xth(ctrl,me,point,ysid) 1
    } else {
      set xth(ctrl,me,point,ysid) 0
    }
    
    xth_me_cmds_show_point_xctrl $id
    xth_me_prev_cmd $xth(me,cmds,$id,data)
    
  } else {
  
    set xth(ctrl,me,point,x) {}
    set xth(ctrl,me,point,y) {}
    set xth(ctrl,me,point,type) $xth(me,dflt,point,type)
    set xth(ctrl,me,point,name) {}
    set xth(ctrl,me,point,opts) $xth(me,dflt,point,options)

    set xth(ctrl,me,point,rot) $xth(me,dflt,point,rotation)
    if {[string length $xth(me,dflt,point,rotation)] > 0} {
      set xth(ctrl,me,point,rotid) 1
    } else {
      set xth(ctrl,me,point,rotid) 0
    }

    set xth(ctrl,me,point,xs) $xth(me,dflt,point,xsize)
    if {[string length $xth(me,dflt,point,xsize)] > 0} {
      set xth(ctrl,me,point,xsid) 1
    } else {
      set xth(ctrl,me,point,xsid) 0
    }

    set xth(ctrl,me,point,ys) $xth(me,dflt,point,ysize)
    if {[string length $xth(me,dflt,point,ysize)] > 0} {
      set xth(ctrl,me,point,ysid) 1
    } else {
      set xth(ctrl,me,point,ysid) 0
    }

    $xth(ctrl,me,point).posl configure -state disabled
    $xth(ctrl,me,point).posx configure -state disabled
    $xth(ctrl,me,point).posy configure -state disabled
    $xth(ctrl,me,point).upd configure -state disabled
    $xth(ctrl,me,point).typl configure -state disabled
    $xth(ctrl,me,point).theme configure -state disabled
    $xth(ctrl,me,point).themetype configure -state disabled
    $xth(ctrl,me,point).typ configure -state disabled
    $xth(ctrl,me,point).namel configure -state disabled
    $xth(ctrl,me,point).name configure -state disabled
    $xth(ctrl,me,point).optl configure -state disabled
    $xth(ctrl,me,point).opt configure -state disabled
    $xth(ctrl,me,point).rotc configure -state disabled
    $xth(ctrl,me,point).rot configure -state disabled
    $xth(ctrl,me,point).xszc configure -state disabled
    $xth(ctrl,me,point).xsz configure -state disabled
    $xth(ctrl,me,point).yszc configure -state disabled
    $xth(ctrl,me,point).ysz configure -state disabled
    
    xth_me_cmds_hide_point_xctrl  
  }
}


proc xth_me_cmds_update_point_vars {id} {

  global xth
  set xth(ctrl,me,point,x) $xth(me,cmds,$id,x)
  set xth(ctrl,me,point,y) $xth(me,cmds,$id,y)
  set xth(ctrl,me,point,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,point,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,point,opts) $xth(me,cmds,$id,options)
  set xth(ctrl,me,point,rot) $xth(me,cmds,$id,rotation)
  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,point,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,point,themetype) {}
  } else {
    set xth(ctrl,me,point,themetype) [lindex $xth(me,themes,$at,point,showlist) $tx]
  }
    
  if {[string length $xth(me,cmds,$id,rotation)] > 0} {
    set xth(ctrl,me,point,rotid) 1
  } else {
    set xth(ctrl,me,point,rotid) 0
  }
  
  set xth(ctrl,me,point,xs) $xth(me,cmds,$id,xsize)
  if {[string length $xth(me,cmds,$id,xsize)] > 0} {
    set xth(ctrl,me,point,xsid) 1
  } else {
    set xth(ctrl,me,point,xsid) 0
  }
  
  set xth(ctrl,me,point,ys) $xth(me,cmds,$id,ysize)
  if {[string length $xth(me,cmds,$id,ysize)] > 0} {
    set xth(ctrl,me,point,ysid) 1
  } else {
    set xth(ctrl,me,point,ysid) 0
  }

  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_show_point_fill_xctrl $id
  
}

proc xth_me_cmds_update_area {id ntype nopt} {

  global xth
  
  set otype $xth(me,cmds,$id,type)
  set oopt $xth(me,cmds,$id,options)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt
  
  if {[string length $ntype] < 1} {
    set ntype $otype
  }
  
  if {$xth(gui,me,type_reset_options) && (![string equal $ntype $otype]) && [string equal $nopt $oopt]} {
    set nopt {}
  }
  
  if {[regexp {^([^ :]+)\:([^ :]+)$} $ntype dum xntype xstype]} {
    if {![string equal $xntype u]} {
      set ntype $xntype
      set nopt [regsub -all {(^|\s+)\-subtype\s+\S+} $nopt {}]
      set nopt [regsub -all {^\s+|\s+$} $nopt {}]
      set nopt "-subtype $xstype $nopt"
      set nopt [regsub -all {^\s+|\s+$} $nopt {}]
    }
  }    
  
  if {![string equal "$ntype $nopt" "$otype $oopt"]} {
    xth_me_unredo_action [mc "area changes"] \
      "xth_me_cmds_update_area $id $otype [list $oopt]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_area $id $ntype [list $nopt]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,options) $nopt
    xth_me_cmds_update_area_data $id
    xth_me_cmds_update_list $id
  }

}

proc xth_me_cmds_update_point {id nx ny ntype nname nopt nrot nxs nys} {

  global xth
  
  set ox $xth(me,cmds,$id,x)
  set oy $xth(me,cmds,$id,y)
  set otype $xth(me,cmds,$id,type)
  set oname $xth(me,cmds,$id,name)
  set oopt $xth(me,cmds,$id,options)
  set orot $xth(me,cmds,$id,rotation)
  set oxs $xth(me,cmds,$id,xsize)
  set oys $xth(me,cmds,$id,ysize)

  regsub {^\s*} $nopt "" nopt
  regsub {\s*$} $nopt "" nopt

  if {[string length $ntype] < 1} {
    set ntype $otype
  }
  
  #reset point options & rotation when type changes
  if {$xth(gui,me,type_reset_options) && (![string equal $ntype $otype]) && [string equal $nopt $oopt] && [string equal $nrot $orot] && [string equal $nxs $oxs] && [string equal $nys $oys]} {
    set nopt {}
    set nrot {}
    set nxs {}
    set nys {}
  }
  
  if {[regexp {^([^ :]+)\:([^ :]+)$} $ntype dum xntype xstype]} {
    if {![string equal $xntype u]} {
      set ntype $xntype
      set nopt [regsub -all {(^|\s+)\-subtype\s+\S+} $nopt {}]
      set nopt [regsub -all {^\s+|\s+$} $nopt {}]
      set nopt "-subtype $xstype $nopt"
      set nopt [regsub -all {^\s+|\s+$} $nopt {}]
    }
  }
  
  if {[string length $nrot] > 0} {
    if {[catch {expr $nrot}]} {
      set nrot $orot
    } elseif {($nrot < 0.0) || ($nrot >= 360.0)} {
      set nrot $orot
    }
  }
  
  if {[catch {expr $nx}]} {
    set nx $ox
  }
  if {[catch {expr $ny}]} {
    set ny $oy
  }
  
  if {[string length $nxs] > 0} {
    if {[catch {expr $nxs}]} {
      set nxs $oxs
    } elseif {$nxs < 0.0} {
      set nxs $oxs
    }
  }
  if {[string length $nys] > 0} {
    if {[catch {expr $nys}]} {
      set nys $oys
    } elseif {$nys < 0.0} {
      set nys $oys
    }
  }
#  if {([string length $nys] > 0) && ([string length $nxs] == 0)} {
#    set nxs $nys
#    set nys {}
#  }
  
  if {![string equal "$nx $ny $ntype $nname $nopt $nrot $nxs $nys" "$ox $oy $otype $oname $oopt $orot $oxs $oys"]} {
    xth_me_unredo_action [mc "point changes"] \
      "xth_me_cmds_update_point $id $ox $oy $otype [list $oname] [list $oopt] [list $orot] [list $oxs] [list $oys]; xth_me_cmds_select $id" \
      "xth_me_cmds_update_point $id $nx $ny $ntype [list $nname] [list $nopt] [list $nrot] [list $nxs] [list $nys]; xth_me_cmds_select $id"
    set xth(me,cmds,$id,x) $nx
    set xth(me,cmds,$id,y) $ny
    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,name) $nname
    set xth(me,cmds,$id,options) $nopt
    set xth(me,cmds,$id,rotation) $nrot
    set xth(me,cmds,$id,xsize) $nxs
    set xth(me,cmds,$id,ysize) $nys
    
    # VG 230216: Erase and recreate the point when the type changes. The new triangular stations use 6 coordinates for a polygon, the circles use 4
    # so they can not be interchanged. Maybe there is an easier way to just update the coordinates list instead of recreating the point
    if {![string equal $ntype $otype]} {
      xth_me_cmds_erase $id
      xth_me_cmds_draw_point $id
      xth_me_cmds_set_colors
    }
    
    $xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
    xth_me_cmds_update_point_data $id
    xth_me_cmds_update_list $id
  }
  
}


proc xth_me_cmds_calc_point_coords {id} {
  global xth
  switch $xth(me,cmds,$id,type) {
    station {
      # draw a triangle for the station points
      set x1 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] - $xth(gui,me,point,psize)]
      set y1 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] + $xth(gui,me,point,psize)]
      set x2 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] + $xth(gui,me,point,psize)]
      set y2 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] + $xth(gui,me,point,psize)]
      set x3 [expr [xth_me_real2canx $xth(me,cmds,$id,x)]]
      set y3 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] - $xth(gui,me,point,psize)/2]
      return [list $x1 $y1 $x2 $y2 $x3 $y3]
      }
    default {
      set x1 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] - $xth(gui,me,point,psize)]
      set y1 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] - $xth(gui,me,point,psize)]
      set x2 [expr [xth_me_real2canx $xth(me,cmds,$id,x)] + $xth(gui,me,point,psize)]
      set y2 [expr [xth_me_real2cany $xth(me,cmds,$id,y)] + $xth(gui,me,point,psize)]
      return [list $x1 $y1 $x2 $y2]
    }
  }  
}


proc xth_me_cmds_draw_point {id} {
  global xth
  set coords [xth_me_cmds_calc_point_coords $id]
  switch $xth(me,cmds,$id,type) {
    station {
      # draw a triangle for the station points
      $xth(me,can) create polygon [xth_me_cmds_calc_point_coords $id] \
        -tags "command point pt$id" -width 1 -outline blue -fill blue
    }
    default {
      $xth(me,can) create oval $coords \
        -tags "command point pt$id" -width 1 -outline blue -fill blue
    }
  }  
  $xth(me,can) bind pt$id  "$xth(me,can) itemconfigure pt$id -fill cyan; xth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \$xth(me,cmds,$id,sbar)\""
  $xth(me,can) bind pt$id  "$xth(me,can) itemconfigure pt$id -fill \[$xth(me,can) itemcget pt$id -outline\]; xth_status_bar_pop me"
  $xth(me,can) bind pt$id <1> "xth_me_cmds_click $id pt$id \$xth(me,cmds,$id,x) \$xth(me,cmds,$id,y) %x %y"
  $xth(me,can) bind pt$id <$xth(gui,rmb)> "xth_me_show_context_menu $id %x %y"  
  $xth(me,can) bind pt$id  "xth_me_cmds_special_select $id %x %y"  
  $xth(me,can) bind pt$id <$xth(kb_control)-1> "xth_me_cmds_click_area pt$id %x %y"
}


proc xth_me_cmds_special_select {id x y} {
  global xth
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }
  $xth(me,can) raise point
  if {$xth(me,cmds,selid) != $id} {
    xth_me_cmds_select "$id $pid"
    if {$pid != 0} {
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    } else {
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point

    }
  } elseif {($xth(me,cmds,$id,ct) == 3) && ($xth(me,cmds,selpid) != $pid)} {
    xth_me_cmds_select_linept $id $pid
    xth_ctrl_scroll_to me line
    xth_ctrl_maximize me line
    xth_ctrl_maximize me linept
  } else {
    $xth(me,can) dtag all nearest
    if {$pid != 0} {
      set utag pt$id.$pid
    } else {
      set utag pt$id
    }
    $xth(me,can) addtag nearest closest [$xth(me,can) canvasx $x] [$xth(me,can) canvasy $y] 0 $utag
    set tgs [$xth(me,can) itemcget nearest -tags]
    #puts $tgs
    if {[regexp "(^|\\s)pt(\\d+)($|\\s)" $tgs d1 d2 nid]} {
      #puts "select $nid"
      xth_me_cmds_select $nid
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point
      catch {$xth(me,can) lower $utag point}
      catch {$xth(me,can) raise $utag line}
    } elseif {[regexp "(^|\\s)pt(\\d+)\.(\\d+)($|\\s)" $tgs d1 d2 nid npid]} {
      #puts "select $nid $npid"
      xth_me_cmds_select "$nid $npid"
      if {$npid != 0} {
	xth_ctrl_scroll_to me line
	xth_ctrl_maximize me line
	xth_ctrl_maximize me linept
      } else {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me point
      }
      catch {$xth(me,can) lower $utag point}
      catch {$xth(me,can) raise $utag line}
    }
  }
}


proc xth_me_cmds_start_point_drag {id x y} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_drag_point_config_xctrl $id
  set xth(me,point,drag_mx) $x
  set xth(me,point,drag_my) $y
  set xth(me,point,drag_px) $xth(me,cmds,$id,x)
  set xth(me,point,drag_py) $xth(me,cmds,$id,y)
  set xth(me,point,drag_benter) [$xth(me,can) bind pt$id ]
  set xth(me,point,drag_bleave) [$xth(me,can) bind pt$id ]
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id  ""
  $xth(me,can) itemconfigure pt$id -fill {}
  $xth(me,can) bind pt$id  "xth_me_cmds_point_drag $id %x %y 1"
  $xth(me,can) bind pt$id  "xth_me_cmds_end_point_drag $id %x %y 1"
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-Motion> "xth_me_cmds_point_drag $id %x %y 0"
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_point_drag $id %x %y 0"
  $xth(me,can) configure -cursor {}
}


proc xth_me_cmds_drag_to {id pid x y} {
  global xth
  $xth(me,can) dtag all nearest
  if {[string length $pid] > 0} {
    set stt pt$id.$pid
  } else {
    set stt pt$id
  }
  $xth(me,can) addtag nearest closest [$xth(me,can) canvasx $x] \
    [$xth(me,can) canvasy $y] 0 $stt
  set tgs [$xth(me,can) itemcget nearest -tags]
  if {[regexp "(^|\\s)pt(\\d+)($|\\s)" $tgs d1 d2 nid]} {
    # je vybraty bod, nastavime suradnice podla neho
    set nx $xth(me,cmds,$nid,x)
    set ny $xth(me,cmds,$nid,y)
    return [list 1 $nx $ny]
  } elseif {[regexp "(^|\\s)pt(\\d+)\.(\\d+)($|\\s)" $tgs d1 d2 nid npid]} {
    # je vybraty bod na ciare, nastavime suradnice podla neho
    set nx $xth(me,cmds,$nid,$npid,x)
    set ny $xth(me,cmds,$nid,$npid,y)
    return [list 1 $nx $ny]
  } elseif {[regexp {(^|\s)XVIstI(\d+)S(\d+)} $tgs d1 d2 imgx sti]} {
    set nx [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 0]
    set ny [lindex [lindex $xth(me,imgs,$imgx,XVIstationsX) $sti] 1]
    return [list 1 $nx $ny]
  }
  return 0
}


proc xth_me_cmds_point_drag {id x y dragto} {
  global xth
  set nx [expr $xth(me,point,drag_px) - [expr double($xth(me,point,drag_mx) - $x) * 100.0 / $xth(me,zoom)]]
  set ny [expr $xth(me,point,drag_py) + [expr double($xth(me,point,drag_my) - $y) * 100.0 / $xth(me,zoom)]]
  set dts 0
  if $dragto {
    set dtl [xth_me_cmds_drag_to $id {} $x $y]
    if {[lindex $dtl 0]} {
      set nx [lindex $dtl 1]
      set ny [lindex $dtl 2]
      set dts 1
    }
  }
  if $dts {
    $xth(me,can) itemconfigure pt$id -fill cyan
  } else {
    $xth(me,can) itemconfigure pt$id -fill {}
  }
  set xth(me,cmds,$id,x) $nx
  set xth(me,cmds,$id,y) $ny
  set xth(ctrl,me,point,x) $nx
  set xth(ctrl,me,point,y) $ny
  xth_me_cmds_move_point_xctrl $id
  xth_me_cmds_move_point_fill_xctrl $id $xth(me,cmds,$id,rotation) $xth(me,cmds,$id,xsize) $xth(me,cmds,$id,ysize) 
  $xth(me,can) coords pt$id [xth_me_cmds_calc_point_coords $id]
  update idletasks
}


proc xth_me_cmds_end_point_drag {id x y dragto} {
  global xth
  xth_me_cmds_point_drag $id $x $y $dragto
  set xth(me,cmds,$id,x) $xth(me,point,drag_px)
  set xth(me,cmds,$id,y) $xth(me,point,drag_py)
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id  ""
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind pt$id <$xth(kb_control)-B1-ButtonRelease> ""
  $xth(me,can) bind pt$id  $xth(me,point,drag_benter)
  $xth(me,can) bind pt$id  $xth(me,point,drag_bleave)
  $xth(me,can) itemconfigure pt$id -fill cyan
  $xth(me,can) configure -cursor crosshair
  set xth(me,unredola) "point dragging"
  xth_me_cmds_update {}
  xth_me_cmds_end_drag_point_config_xctrl $id
}


proc xth_me_cmds_configure_point_fill_xctrl {id sid} {
  global xth
  if {[string length $id] > 0} {
    if $xth(gui,me,pointsizectrl) {
        $xth(me,can) itemconfigure $xth(me,canid,point,fx) -state normal
    }
    $xth(me,can) bind $xth(me,canid,point,fx) <1> \
      "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fx) $id x %x %y"
    $xth(me,can) bind $xth(me,canid,point,fx)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fx) -fill #ffda00"
    $xth(me,can) bind $xth(me,canid,point,fx)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fx) -fill red"
    $xth(me,can) itemconfigure $xth(me,canid,point,fy) -state normal
    $xth(me,can) bind $xth(me,canid,point,fy) <1> \
      "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fy) $id y %x %y"
    $xth(me,can) bind $xth(me,canid,point,fy)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fy) -fill #ffda00"
    $xth(me,can) bind $xth(me,canid,point,fy)  \
      "$xth(me,can) itemconfigure $xth(me,canid,point,fy) -fill red"
    #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state normal
    #$xth(me,can) bind $xth(me,canid,point,fxc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -fill yellow"
    #$xth(me,can) bind $xth(me,canid,point,fxc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -fill red"
    #$xth(me,can) bind $xth(me,canid,point,fxc) <1> \
    #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fxc) $id x %x %y"
    #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state normal
    #$xth(me,can) bind $xth(me,canid,point,fyc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -fill yellow"
    #$xth(me,can) bind $xth(me,canid,point,fyc)  \
    #  "$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -fill red"
    #$xth(me,can) bind $xth(me,canid,point,fyc) <1> \
    #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fyc) $id y %x %y"
    if {$sid} {
      $xth(me,can) itemconfigure $xth(me,canid,point,fill) -state normal
      #$xth(me,can) bind $xth(me,canid,point,fill) <1> \
      #  "xth_me_cmds_start_point_fdrag $xth(me,canid,point,fill) $id z %x %y"
    } else {
      $xth(me,can) itemconfigure $xth(me,canid,point,fill) -state hidden
    }
  } else {
      # $xth(me,can) bind $xth(me,canid,point,fxc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fxc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fyc)  ""
      # $xth(me,can) bind $xth(me,canid,point,fyc)  ""
      $xth(me,can) bind $xth(me,canid,point,fx) <1> ""
      $xth(me,can) bind $xth(me,canid,point,fy) <1> ""
      $xth(me,can) bind $xth(me,canid,point,fx)  ""
      $xth(me,can) bind $xth(me,canid,point,fx)  ""
      $xth(me,can) bind $xth(me,canid,point,fy)  ""
      $xth(me,can) bind $xth(me,canid,point,fy)  ""
      #$xth(me,can) bind $xth(me,canid,point,fill) <1> ""
      $xth(me,can) itemconfigure ptfill -state hidden
  }
}


proc xth_me_cmds_move_point_fill_xctrl {id rot sx sy} {

  global xth
  
  if {[string length $rot] > 0} {
    set rot [expr double($rot) / 180 * 3.14159265359]
  } else {
    set rot 0.0
  }

  set setfsx 0
  if {[string length $sx] > 0} {
    set sx [expr $sx * 0.01 * $xth(me,zoom)]
    set fsx $sx
  } else {
    set sx 30.0
    set setfsx 1
  }

#  if {[string length $sy] > 0} {
#    set sy [expr $sy * 0.01 * $xth(me,zoom)]
#  } else {
#    if {[string length $sx] > 0} {
#      set sy $sx
#    } else {
#      set sy 30.0
#    }
#  }

  if {[string length $sy] > 0} {
    set sy [expr $sy * 0.01 * $xth(me,zoom)]
    set fsy $sy
  } else {
    set sy 30.0
    set fsy $sx
  }

  if {$setfsx} {
    set fsx $sy
  }

  set x [xth_me_real2canx $xth(me,cmds,$id,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,y)]
  set ca [expr cos($rot)]
  set sa [expr sin($rot)]
  
  set xvx [expr $ca * $sx]
  set xvy [expr $sa * $sx]
  set yvx [expr $sa * $sy]
  set yvy [expr - $ca * $sy]

  set fxvx [expr $ca * $fsx]
  set fxvy [expr $sa * $fsx]
  set fyvx [expr $sa * $fsy]
  set fyvy [expr - $ca * $fsy]
  
  
  $xth(me,can) coords $xth(me,canid,point,fx) $x $y [expr $x + $xvx] [expr $y + $xvy]
  set xth(me,canid,point,fx_tox) [expr $x + $xvx]
  set xth(me,canid,point,fx_toy) [expr $y + $xvy]
  $xth(me,can) coords $xth(me,canid,point,fy) $x $y [expr $x + $yvx] [expr $y + $yvy]
  set xth(me,canid,point,fy_tox) [expr $x + $yvx]
  set xth(me,canid,point,fy_toy) [expr $y + $yvy]
  #$xth(me,can) coords $xth(me,canid,point,fxc) [expr $x + $xvx - $xth(gui,me,point,cpsize)] [expr $y + $xvy - $xth(gui,me,point,cpsize)] [expr $x + $xvx + $xth(gui,me,point,cpsize)] [expr $y + $xvy + $xth(gui,me,point,cpsize)]
  #$xth(me,can) coords $xth(me,canid,point,fyc) [expr $x + $yvx - $xth(gui,me,point,cpsize)] [expr $y + $yvy - $xth(gui,me,point,cpsize)] [expr $x + $yvx + $xth(gui,me,point,cpsize)] [expr $y + $yvy + $xth(gui,me,point,cpsize)]
  $xth(me,can) coords $xth(me,canid,point,fill) [expr $x + $fxvx + $fyvx] [expr $y + $fxvy + $fyvy] \
    [expr $x + $fxvx - $fyvx] [expr $y + $fxvy - $fyvy] [expr $x - $fxvx - $fyvx] [expr $y - $fxvy - $fyvy] \
    [expr $x - $fxvx + $fyvx] [expr $y - $fxvy + $fyvy]

  update idletasks    
}


proc xth_me_cmds_point_change_state {} {

  global xth  
  set newrotid $xth(ctrl,me,point,rotid)
  set newxsid $xth(ctrl,me,point,xsid)
  set newysid $xth(ctrl,me,point,ysid)

  xth_me_cmds_update {}

  if {$newrotid && \
    ([string length $xth(ctrl,me,point,rot)] < 1)} {
    set xth(ctrl,me,point,rot) 0.0
  } elseif {(! $newrotid) && \
    ([string length $xth(ctrl,me,point,rot)] > 0)} {
    set xth(ctrl,me,point,rot) {}
  }

  if {$newxsid && \
    ([string length $xth(ctrl,me,point,xs)] < 1)} {
    set xth(ctrl,me,point,xs) 40.0
  } elseif {(! $newxsid) && \
    ([string length $xth(ctrl,me,point,xs)] > 0)} {
    set xth(ctrl,me,point,xs) {}
#    set xth(ctrl,me,point,ys) {}
#    set xth(ctrl,me,point,ysid) 0
  }

  if {$newysid && \
    ([string length $xth(ctrl,me,point,ys)] < 1)} {
    set xth(ctrl,me,point,ys) 40.0
  } elseif {(! $newysid) && \
    ([string length $xth(ctrl,me,point,ys)] > 0)} {
    set xth(ctrl,me,point,ys) {}
  }

#  if {$newysid && \
#      ([string length $xth(ctrl,me,point,ys)] < 1) && \
#      $newxsid} {
#    set xth(ctrl,me,point,ys) 40.0
#  } elseif {((! $newysid) && \
#      ([string length $xth(ctrl,me,point,ys)] > 0)) || \
#      (! $newxsid)} {
#    set xth(ctrl,me,point,ys) {}
#    set xth(ctrl,me,point,ysid) 0    
#  }
  
  xth_me_cmds_update {}
  
}


proc xth_me_cmds_start_point_fdrag {tagOrId id ax x y} {
  global xth
  xth_me_cmds_update {}
  #if {[string equal $ax z]} {
  #  set distx [expr hypot([$xth(me,can) canvasx $x] - $xth(me,canid,point,fx_tox), \
  #    [$xth(me,can) canvasy $y] - $xth(me,canid,point,fx_toy))]
  #  set disty [expr hypot([$xth(me,can) canvasx $x] - $xth(me,canid,point,fy_tox), \
  #    [$xth(me,can) canvasy $y] - $xth(me,canid,point,fy_toy))]
  #  if {$disty < $distx} {
  #    set ax y
  #  } else {
  #    set ax x
  #  }
  #}
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,y)] 
  if {[string length $xth(me,cmds,$id,rotation)] == 0} {
    set xth(me,point,fdrag_rot) 0
  } else {
    set xth(me,point,fdrag_rot) 1
    set xth(me,point,fdrag_orot) [expr atan2($dy,$dx)]
  }
  if {([string length $xth(me,cmds,$id,xsize)] == 0) && ([string length $xth(me,cmds,$id,ysize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } elseif {[string equal $ax y] && ([string length $xth(me,cmds,$id,ysize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } elseif {[string equal $ax x] && ([string length $xth(me,cmds,$id,xsize)] == 0)} {
    set xth(me,point,fdrag_size) 0
  } else {
    set xth(me,point,fdrag_ax) $ax
    set xth(me,point,fdrag_size) 1
    set xth(me,point,fdrag_osize) [expr hypot($dy,$dx)]
  }
  $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  set xth(me,point,fdrag_benter) [$xth(me,can) bind $tagOrId ]
  set xth(me,point,fdrag_bleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  "xth_me_cmds_point_fdrag $id %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_point_fdrag $tagOrId $id %x %y"
  $xth(me,can) configure -cursor {}
}

proc xth_me_cmds_point_fdrag {id x y} {
  global xth
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,y)] 
  if $xth(me,point,fdrag_rot) {
    set rot [expr double($xth(me,cmds,$id,rotation)) - 180.0 / 3.14159265359 * (atan2($dy,$dx) - $xth(me,point,fdrag_orot))]
    if {$rot < 0.0} {
      set rot [expr 360.0 + $rot]
    } elseif {$rot >= 360.0} {
      set rot [expr $rot - 360.0]
    }
    set rot [format "%.1f" $rot]
  } else {
    set rot $xth(me,cmds,$id,rotation)
  }
  set xth(ctrl,me,point,rot) $rot
  if {$xth(me,point,fdrag_size)} {
    set cs [expr hypot($dy,$dx)]
    switch $xth(me,point,fdrag_ax) {
      x {
	set ns [expr $xth(me,cmds,$id,xsize) - $xth(me,point,fdrag_osize) + $cs]
	if {$ns <= 0.0} {set ns 0.1}
	set ns [format "%.1f" $ns]
	set xth(ctrl,me,point,xs) $ns
      }
      y {
	set ns [expr $xth(me,cmds,$id,ysize) - $xth(me,point,fdrag_osize) + $cs]
	if {$ns <= 0.0} {set ns 0.1}
	set ns [format "%.1f" $ns]
	set xth(ctrl,me,point,ys) $ns
      }
    }
  }
  xth_me_cmds_move_point_fill_xctrl $id $xth(ctrl,me,point,rot) $xth(ctrl,me,point,xs) $xth(ctrl,me,point,ys)
}

proc xth_me_cmds_end_point_fdrag {tagOrId id x y} {
  global xth
  xth_me_cmds_point_fdrag $id $x $y
  $xth(me,can) configure -cursor crosshair
  if {$xth(me,point,fdrag_size)} {
    set xth(me,unredola) "point resizing"
  } else {
    set xth(me,unredola) "point rotation"
  }
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[lsearch [$xth(me,can) itemcget $tagOrId -tags] current] > -1} {
    $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  }
  $xth(me,can) bind $tagOrId  $xth(me,point,fdrag_benter)
  $xth(me,can) bind $tagOrId  $xth(me,point,fdrag_bleave)
  xth_me_cmds_update {}
}

proc xth_me_cmds_drag_point_config_xctrl {id} {
  global xth
  set xth(me,point,drag_stsel) [$xth(me,can) itemcget $xth(me,canid,point,selector) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state hidden
  set xth(me,point,drag_stfx) [$xth(me,can) itemcget $xth(me,canid,point,fx) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,fx) -width 1 -arrow none
  set xth(me,point,drag_stfy) [$xth(me,can) itemcget $xth(me,canid,point,fy) -state]
  $xth(me,can) itemconfigure $xth(me,canid,point,fy) -width 1 -arrow none
  #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state hidden
  #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state hidden
  $xth(me,can) itemconfigure $xth(me,canid,point,fill) -fill {} -outline red
}


proc xth_me_cmds_end_drag_point_config_xctrl {id} {
  global xth
  $xth(me,can) itemconfigure $xth(me,canid,point,selector) -state $xth(me,point,drag_stsel)
  $xth(me,can) itemconfigure $xth(me,canid,point,fx) -width 5 -arrow last
  $xth(me,can) itemconfigure $xth(me,canid,point,fy) -width 5 -arrow last
  #$xth(me,can) itemconfigure $xth(me,canid,point,fxc) -state $xth(me,point,drag_stfx)
  #$xth(me,can) itemconfigure $xth(me,canid,point,fyc) -state $xth(me,point,drag_stfy)
  $xth(me,can) itemconfigure $xth(me,canid,point,fill) -fill red -outline {}
}

proc xth_me_cmds_select_nopoint {} {
  global xth
  set id $xth(me,cmds,selid)
  set ix [lsearch $xth(me,cmds,xlist) $id]
  set xl [llength $xth(me,cmds,xlist)]
  for {set ii $ix} {$ii < $xl} {incr ii} {
    set nid [lindex $xth(me,cmds,xlist) $ii]
    switch $xth(me,cmds,$nid,ct) {
      3 {
	xth_me_cmds_select "$nid 0"
	break
      }
      2 {}
      default {
	xth_me_cmds_select $nid
	break
      }
    }
  }
}


proc xth_me_get_center {} {
  global xth
  set sr [$xth(me,can) cget -scrollregion]
  set xw [$xth(me,can) xview]
  set yw [$xth(me,can) yview]
  set xx [expr double([lindex $xw 1] + [lindex $xw 0]) / 2.0]
  set yy [expr double([lindex $yw 1] + [lindex $yw 0]) / 2.0]
  set tw [expr [lindex $sr 2] - [lindex $sr 0]]
  set th [expr [lindex $sr 3] - [lindex $sr 1]]        
  set x [xth_me_can2realx [expr [lindex $sr 0] + $xx * $tw]]
  set y [xth_me_can2realy [expr [lindex $sr 1] + $yy * $th]]
	return "$x $y"
}

proc xth_me_cmds_scrap_scale_start {} {
  global xth
  xth_me_cmds_update {}
  set xth(me,cmds,scrap_scale) 1
  xth_me_cmds_set_mode 4
}


proc xth_me_cmds_scrap_sketch_start {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_set_mode 5
}


proc xth_me_cmds_scrap_scale {x y} {
  global xth
  xth_me_cmds_update {}
  set rx $x
  set ry $y
  switch $xth(me,cmds,scrap_scale) {
    1 {
      set xth(ctrl,me,scrap,px1) $rx
      set xth(ctrl,me,scrap,py1) $ry
      incr xth(me,cmds,scrap_scale)
      xth_me_cmds_update {}
      focus $xth(ctrl,me,scrap).scx1r
    }
    2 {
      set xth(ctrl,me,scrap,px2) $rx
      set xth(ctrl,me,scrap,py2) $ry
      set xth(me,cmds,scrap_scale) 0
      xth_me_cmds_update {}
      focus $xth(ctrl,me,scrap).scx2r
      xth_me_cmds_set_mode 0
    }
  }
}


proc xth_me_cmds_scrap_sketch_insert {tagOrId} {
  global xth
  xth_me_cmds_set_mode 0 
  if {[string length $tagOrId] == 0} return
  xth_me_cmds_update {}
  set err 1
  set tags [$xth(me,can) itemcget $tagOrId -tags]
  foreach ix $xth(me,imgs,xlist) {
    if {[lsearch -exact $tags $xth(me,imgs,$ix,image)] > -1} {
      if {($xth(me,imgs,$ix,XVI) == 0) && ([string length $xth(me,imgs,$ix,ffname)] > 0)} {
	  set sk $xth(me,imgs,$ix,name)
	  if {[string first " " $sk] > -1} {
	    set sk "\[$sk\]"
	  }
	  set skpos $xth(me,imgs,$ix,position)
	  set imgh [image height $xth(me,imgs,$ix,image)]
	  set sk "$sk [lindex $skpos 0] [expr [lindex $skpos 1] - $imgh]"
	  xth_me_cmds_insert_scrap_sketch $sk
	  set err 0
      }
    }
  }
  if {$err} {
    MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon error -type ok \
      -message [mc "Scrap sketch not inserted."] \
      -font $xth(gui,lfont)
  }
}


proc xth_me_cmds_insert_scrap_sketch {sk} {

  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  if {[string length $sk] == 0} {
    return;
  }
  set id $xth(me,cmds,selid)
  set lid [lindex $xth(me,cmds,$id,sklist) [$xth(ctrl,me,scrap).skll.l curselection]]
  set ix [lsearch -exact $xth(me,cmds,$id,sklist) $lid]
  set xth(me,cmds,$id,sklist) [linsert $xth(me,cmds,$id,sklist) $ix $sk]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,scrap).skll.l selection clear 0 end
  $xth(ctrl,me,scrap).skll.l selection set [expr $ix + 1] [expr $ix + 1]
  $xth(ctrl,me,scrap).skll.l see [expr $ix + 1]

  xth_me_unredo_action [mc "inserting scrap sketch"] \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_scrap_sketch $id [list $sk]" \
    "xth_me_cmds_select $id\nxth_me_cmds_undelete_scrap_sketch 1 $id [list $sk] $ix"
      
}


proc xth_me_cmds_delete_scrap_sketch {id lid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $lid] == 0} {
    set lid [lindex $xth(me,cmds,$id,sklist) [$xth(ctrl,me,scrap).skll.l curselection]]
  }
  if {[string length $lid] == 0} {
    return
  }

  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # odstrani ho zo zoznamu
  set ix [lsearch -exact $xth(me,cmds,$id,sklist) $lid]
  set xth(me,cmds,$id,sklist) [lreplace $xth(me,cmds,$id,sklist) $ix $ix]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set $ix $ix
  $xth(ctrl,me,ac).ll.l see $ix
    
  xth_me_unredo_action [mc "deleting scrap sketch"] \
    "xth_me_cmds_select $id\nxth_me_cmds_undelete_scrap_sketch 0 $id [list $lid] $ix" \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_scrap_sketch $id [list $lid]"
  
}




proc xth_me_cmds_undelete_scrap_sketch {cr id lid ix} {
  global xth
  set xth(me,cmds,$id,sklist) [linsert $xth(me,cmds,$id,sklist) $ix $lid]
  xth_me_cmds_update_scrap_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + $cr] [expr $ix + $cr]
  $xth(ctrl,me,ac).ll.l see [expr $ix + $cr]
  
}

proc xth_me_cmds_toggleishiding {} {
	global xth
  xth_me_cmds_set_colors
}

set xth(me,ctxmenu) $xth(gui,main).mectx
catch {menu $xth(me,ctxmenu) -tearoff 0}
catch {menu $xth(me,ctxmenu).ptypes -tearoff 0}
catch {menu $xth(me,ctxmenu).ltypes -tearoff 0}

$xth(me,ctxmenu).ptypes delete 0 end
$xth(me,ctxmenu).ltypes delete 0 end

for {set j 0} {$j < [llength $xth(me,themes,list)]} {incr j} {
  set cm [lindex $xth(me,themes,list) $j]
  set cmn "$xth(me,ctxmenu).ptypes.m$j"
  catch {destroy $cmn}
  # vytvorime podmenu
  menu $cmn -tearoff 0
  for {set i 0} {$i < [llength $xth(me,themes,$cm,point,showlist)]} {incr i} {
    if {$xth(gui,me,type_dropdown_trans)} {
      set l [lindex $xth(me,themes,$cm,point,showlist) $i]
      set v [lindex $xth(me,themes,$cm,point,hidelist) $i]
    } else {
      set l [lindex $xth(me,themes,$cm,point,list) $i]
      set v [lindex $xth(me,themes,$cm,point,list) $i]      
    }
    $cmn add radiobutton -label $l -variable xth(ctrl,me,point,type) -value $v -command {xth_me_cmds_update {}}
  }    
  # pripneme ho do menu
  $xth(me,ctxmenu).ptypes add cascade -label [lindex $xth(me,themes,showlist) $j] -menu $cmn
  
  set cmn "$xth(me,ctxmenu).ltypes.m$j"
  catch {destroy $cmn}
  # vytvorime podmenu
  menu $cmn -tearoff 0
  for {set i 0} {$i < [llength $xth(me,themes,$cm,line,showlist)]} {incr i} {
    if {$xth(gui,me,type_dropdown_trans)} {
      set l [lindex $xth(me,themes,$cm,line,showlist) $i]
      set v [lindex $xth(me,themes,$cm,line,hidelist) $i]
    } else {
      set l [lindex $xth(me,themes,$cm,line,list) $i]
      set v [lindex $xth(me,themes,$cm,line,list) $i]      
    }
    $cmn add radiobutton -label $l -variable xth(ctrl,me,line,type) -value $v -command {xth_me_cmds_update {}}
  }    
  # pripneme ho do menu
  $xth(me,ctxmenu).ltypes add cascade -label [lindex $xth(me,themes,showlist) $j] -menu $cmn  
}


catch {menu $xth(me,ctxmenu).clip -tearoff 0}
$xth(me,ctxmenu).clip delete 0 end
$xth(me,ctxmenu).clip add radiobutton -label [mc "on"] -variable xth(me,ctrl,ctx,clip) -value "on" -command {xth_me_set_option_value clip}
$xth(me,ctxmenu).clip add radiobutton -label [mc "off"] -variable xth(me,ctrl,ctx,clip) -value "off" -command {xth_me_set_option_value clip}

catch {menu $xth(me,ctxmenu).visibility -tearoff 0}
$xth(me,ctxmenu).visibility delete 0 end
$xth(me,ctxmenu).visibility add radiobutton -label [mc "on"] -variable xth(me,ctrl,ctx,visibility) -value "on" -command {xth_me_set_option_value visibility}
$xth(me,ctxmenu).visibility add radiobutton -label [mc "off"] -variable xth(me,ctrl,ctx,visibility) -value "off" -command {xth_me_set_option_value visibility}

catch {menu $xth(me,ctxmenu).place -tearoff 0}
$xth(me,ctxmenu).place delete 0 end
$xth(me,ctxmenu).place add radiobutton -label [mc "top"] -variable xth(me,ctrl,ctx,place) -value "top" -command {xth_me_set_option_value place}
$xth(me,ctxmenu).place add radiobutton -label [mc "bottom"] -variable xth(me,ctrl,ctx,place) -value "bottom" -command {xth_me_set_option_value place}

image create photo align-b.gif -data {R0lGODlhFQASAKECAP8AALi4uP///////yH5BAEKAAMALAAAAAAVABIAAAI/nI+pOwAMjYtwUuRe
szCE7IFBJ5SCYwojE6SouS6t+ZaxMqfpneS6TfrBgkIVUchD+H7Jw1LXNHim1OnlaigAADs=}
image create photo align-bl.gif -data {R0lGODlhFQASAKEBAP8AALi4uP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI+nI+pmwAMjYtwUuTe
yCn472XBZh2BgKZq2amuwCLnm8YmnY7MjOsLT/MpgC9hCycwypBJCNGlNIGmnosVUQAAOw==}
image create photo align-bls.gif -data {R0lGODlhFQASAKEDAAAAAP8AAP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI+nI+pmxEMjYtwUuTe
yAn472XAZh2AgKZq2amuwCLnm8YmnY7MjOsLT/MpgC9hCycwypBJCNGlNIGmnosVUQAAOw==}
image create photo align-br.gif -data {R0lGODlhFQASAKEBAP8AALi4uP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI8nI+pCLDPHIRtqiax
NTrgAIbg0wjmiQYkgLaCupTuCS/BTEM3/up8/9jhagrhjJgwupAIZYt5EElDm2oBADs=}
image create photo align-brs.gif -data {R0lGODlhFQASAKEDAAAAAP8AAP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI+nI+pGLHPHIRtqiax
NRpgAIbg0wjmiQJkgLaCupTuCS/ATEM3/up8/9jhagrhjJgwupAIZYt5AEinVOnmWgAAOw==}
image create photo align-bs.gif -data {R0lGODlhFQASAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAVABIAAAJAnI+pOxEMjYtwUuRe
sxCA7IFAJ5SCYwojA6SouS6t+ZaxMqfpneS6TfrBgkIVUchD+H7Jw1LXNACm1Or0gjUUAAA7}
image create photo align-c.gif -data {R0lGODlhFQASAKECAP8AALi4uP///////yH5BAEKAAMALAAAAAAVABIAAAI5nI+py+0fopyxBYGz
DlYDsHXZFzLXCGacKXypK6zLBbekrJwYqYp7isEldLbSTIOMWSjMh/MJjSIKADs=}
image create photo align-cs.gif -data {R0lGODlhFQASAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAVABIAAAI5nI+py+0PopyxAYGz
BlaHsHXZFzLXCGacKXypK6zLBbekrJwYqYp7isEldLbSTIOMWSjMh/MJjSIKADs=}
image create photo align-l.gif -data {R0lGODlhFQASAKECAP8AALi4uP///////yH5BAEKAAMALAAAAAAVABIAAAI2nI+py+0dopwRiotz
sLkDwASdBy7iiH0h+gFbm5ykO8CIzJYKPqommtLFgJdNiIJ8KJfMpqIAADs=}
image create photo align-ls.gif -data {R0lGODlhFQASAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAVABIAAAI2nI+py+0NopwRiosz
sLmHwACdBy7iiH0h+gVbm5ykO8CIzJYKPqommtLFgJdNiIJ8KJfMpqIAADs=}
image create photo align-r.gif -data {R0lGODlhFQASAKECAP8AALi4uP///////yH5BAEKAAMALAAAAAAVABIAAAI5nI+py+1vgpxUtiCy
3oEBsIVCt3wi54FnRh4fMATv2RpvPIs1Yq5j6vuVVKsdAuMzHipMJeQJjSoKADs=}
image create photo align-rs.gif -data {R0lGODlhFQASAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAVABIAAAI5nI+py+1vgJxUNiCy
3oCFsIVCt3wi54FnRh5fMADv2RpvPIs1Yq5j6vuVVKsdAuMzHipMJeQJjSoKADs=}
image create photo align-t.gif -data {R0lGODlhFQASAKECAP8AALi4uP///////yH5BAEKAAMALAAAAAAVABIAAAI+nI+pF+3flgmi2hvk
oLdnyXXWt4SiQCqmmCarp71YfAHADNb3SFs2XgrYAI1hRDMYGpTIhK0peUIV0qn1UAAAOw==}
image create photo align-tl.gif -data {R0lGODlhFQASAKEBAP8AALi4uP///7i4uCH5BAEKAAMALAAAAAAVABIAAAJAnI+pE+3flgmi2hsk
u1xkSXXWt4Sip5kiqagdm7gcjMgXAIBnBeTlLuiBIA2AMWP0aQxJpnGpeEIX0mmiap0WAAA7}
image create photo align-tls.gif -data {R0lGODlhFQASAKEDAAAAAP8AAP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI9nI+pA+3flgGi2gsk
u1xkSXXWt4Sip5kiqagdm7gcjMhXEIBnhet7X4I0cIEMUYM4DpTIZK65AEIT0im0AAA7}
image create photo align-tr.gif -data {R0lGODlhFQASAKEBAP8AALi4uP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI9nI+pGe3flgmi2hvk
oLdnyXXWt4SiQCqmmDLnqK2eBABv1R71jdL23aoBNkKIIyE0JDWKGlPjfC6i0qqmAAA7}
image create photo align-trs.gif -data {R0lGODlhFQASAKEDAAAAAP8AAP///7i4uCH5BAEKAAMALAAAAAAVABIAAAI9nI+pCe3flgGi2gvk
oLdnyXXWt4SiQCqmmDLnqK2eFARv1R71jdL23aoFNkKIIyE0JDWKGlPjfC6i0qqmAAA7}
image create photo align-ts.gif -data {R0lGODlhFQASAKECAAAAAP8AAP///////yH5BAEKAAMALAAAAAAVABIAAAI+nI+pB+3flgGi2gvk
oLdnyXXWt4SiQCqmmCarp71YfAXBDNb3SFs2XgLYAo1hRDMYGpTIhK0peUIV0qn1UAAAOw==}


catch {menu $xth(me,ctxmenu).align -tearoff 0}
$xth(me,ctxmenu).align delete 0 end
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-tl.gif -selectimage align-tls.gif -variable xth(me,ctrl,ctx,align) -value "top-left" -command {xth_me_set_option_value align} 
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-l.gif -selectimage align-ls.gif -variable xth(me,ctrl,ctx,align) -value "left" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-bl.gif -selectimage align-bls.gif -variable xth(me,ctrl,ctx,align) -value "bottom-left" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-t.gif -selectimage align-ts.gif -columnbreak 1 -variable xth(me,ctrl,ctx,align) -value "top" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-c.gif -selectimage align-cs.gif -variable xth(me,ctrl,ctx,align) -value "center" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-b.gif -selectimage align-bs.gif -variable xth(me,ctrl,ctx,align) -value "bottom" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-tr.gif -selectimage align-trs.gif -columnbreak 1 -variable xth(me,ctrl,ctx,align) -value "top-right" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-r.gif -selectimage align-rs.gif -variable xth(me,ctrl,ctx,align) -value "right" -command {xth_me_set_option_value align}
$xth(me,ctxmenu).align add radiobutton -hidemargin 1 -image align-br.gif -selectimage align-brs.gif -variable xth(me,ctrl,ctx,align) -value "bottom-right" -command {xth_me_set_option_value align}


catch {menu $xth(me,ctxmenu).scale -tearoff 0}
$xth(me,ctxmenu).scale delete 0 end
$xth(me,ctxmenu).scale add radiobutton -label [mc "tiny (xs)"] -variable xth(me,ctrl,ctx,scale) -value "xs" -command {xth_me_set_option_value scale}
$xth(me,ctxmenu).scale add radiobutton -label [mc "small (s)"] -variable xth(me,ctrl,ctx,scale) -value "s" -command {xth_me_set_option_value scale}
$xth(me,ctxmenu).scale add radiobutton -label [mc "normal (m)"] -variable xth(me,ctrl,ctx,scale) -value "m" -command {xth_me_set_option_value scale}
$xth(me,ctxmenu).scale add radiobutton -label [mc "large (l)"] -variable xth(me,ctrl,ctx,scale) -value "l" -command {xth_me_set_option_value scale}
$xth(me,ctxmenu).scale add radiobutton -label [mc "huge (xl)"] -variable xth(me,ctrl,ctx,scale) -value "xl" -command {xth_me_set_option_value scale}

catch {menu $xth(me,ctxmenu).outline -tearoff 0}
$xth(me,ctxmenu).outline delete 0 end
$xth(me,ctxmenu).outline add radiobutton -label [mc "out"] -variable xth(me,ctrl,ctx,outline) -value "out" -command {xth_me_set_option_value outline}
$xth(me,ctxmenu).outline add radiobutton -label [mc "in"] -variable xth(me,ctrl,ctx,outline) -value "in" -command {xth_me_set_option_value outline}
$xth(me,ctxmenu).outline add radiobutton -label [mc "none"] -variable xth(me,ctrl,ctx,outline) -value "none" -command {xth_me_set_option_value outline}

catch {menu $xth(me,ctxmenu).cps -tearoff 0}
$xth(me,ctxmenu).cps delete 0 end
$xth(me,ctxmenu).cps add checkbutton -label [mc "<<"] -variable xth(ctrl,me,linept,idp) -command xth_me_cmds_toggle_linept
$xth(me,ctxmenu).cps add checkbutton -label [mc "smooth"] -variable xth(ctrl,me,linept,smooth) -command xth_me_cmds_toggle_linept
$xth(me,ctxmenu).cps add checkbutton -label [mc ">>"] -variable xth(ctrl,me,linept,idn) -command xth_me_cmds_toggle_linept

proc xth_me_create_line_point_edit_menu { lpem_father {state normal} } {
    upvar $lpem_father f
    global xth
    
    catch {menu $f.m -tearoff 0 -font $xth(gui,lfont)}
    $f.m add command -label [mc "Insert point"] -command {xth_me_cmds_start_linept_insert} -state $state
    $f.m add command -label [mc "Delete point"] -command {xth_me_cmds_delete_linept {} {}} -state $state
    $f.m add command -label [mc "Split line"] -command {xth_me_cmds_line_split} -state $state
    $f.m add command -label [mc "Trace line"] -command {xth_me_cmds_line_trace_start}
    $f.m add command -label [mc "Convert to curve"] -command {xth_me_cmds_line_poly2bezier}
    $f.m add command -label [mc "Simplify line"] -command {xth_me_cmds_line_simplify}    
}

catch {menu $xth(me,ctxmenu).subtype -tearoff 0}
catch {menu $xth(me,ctxmenu).segsubtype -tearoff 0}

catch {menu $xth(me,ctxmenu).altitude -tearoff 0}
$xth(me,ctxmenu).altitude delete 0 end
$xth(me,ctxmenu).altitude add radiobutton -label [mc "auto"] -variable xth(me,ctrl,ctx,altitude) -value "." -command {xth_me_set_optionline_value altitude}
$xth(me,ctxmenu).altitude add command -label [mc "edit"] -command {xth_me_ctx_change_text altitude [mc "Altitude"]}

catch {menu $xth(me,ctxmenu).others -tearoff 0}
xth_me_create_line_point_edit_menu xth(me,ctxmenu)

# return point option
proc xth_me_get_option_value {key optkey} {
  global xth
  set opt $xth($optkey)
  if {[regexp "(^|.*\\s)-($key)\\s+\\\[(\[^\\\]\]*)\\\]\\s*(.*)\$" $opt dum obeg okey oval oend]} {
  } elseif {[regexp "(^|.*\\s)-($key)\\s+\\\"(.*)\$" $opt dum obeg okey oval]} {
    set nx 0
    set nl [string length $oval]
    set oend {}
    for {set xx 0} {$xx < $nl} {incr xx} {
      if {[string equal [string index $oval $xx] "\""]} {
        if {[string equal [string index $oval [expr $xx + 1]] "\""]} {
          incr xx
        } else {
          set oend [string range $oval [expr $xx + 1] end]
          set oval [string range $oval 0 [expr $xx - 1]]
        } 
      }
    }
  } elseif {[regexp "(^|.*\\s)-($key)\\s+(\\S+)\\s*(.*)\$" $opt dum obeg okey oval oend]} {    
  } else {return [list {} $opt]}
  set oend [regsub -all {^\s+|\s+$} $oend {}] 
  set obeg [regsub -all {^\s+|\s+$} $obeg {}]
  if {([string length $obeg] > 0) && ([string length $oend] > 0)} {
    set oend " $oend"
  }
  return [list $oval "$obeg$oend"]
}


proc xth_me_get_optionline_value {key} {
  global xth
  set opt [$xth(ctrl,me,linept).oe.txt get 1.0 end]
  set oval {}
  set orest {}
  foreach ln [split $opt "\n"] {
    set oend $ln
    if {[regexp "^\\s*($key)\\s+\\\[(\[^\\\]\]*)\\\]\\s*(.*)\$" $ln dum okey oval oend]} {
    } elseif {[regexp "^\\s*($key)\\s+\\\"(.*)\$" $ln dum okey oval]} {
      set nx 0
      set nl [string length $oval]
      set oend {}
      for {set xx 0} {$xx < $nl} {incr xx} {
        if {[string equal [string index $oval $xx] "\""]} {
          if {[string equal [string index $oval [expr $xx + 1]] "\""]} {
            incr xx
          } else {
            set oend [string range $oval [expr $xx + 1] end]
            set oval [string range $oval 0 [expr $xx - 1]]
          } 
        }
      }
    } elseif {[regexp "^\\s*($key)\\s+(\\S+)\\s*(.*)\$" $ln dum okey oval oend]} {    
    }
    if {([string length $oend] > 0) && [regexp {\S+} $oend]} {
      if {[string length $orest] > 0} {
        set orest "$orest\n"
      }
      set orest "$orest$oend"
    }
  }
  return [list $oval $orest]
}



proc xth_me_optlabel {opt args} {
  global xth
  set lab [mc $opt]
  if {[llength $args] > 0} {
    set lab [lindex $args 0]
  }
  set val $xth(me,ctrl,ctx,$opt)
  set lval {}
  switch $opt {
    name -
    text -
    altitude -
    value {
      if {[string length $val] > 22} {
        set lval " ([string range $val 0 18] ...)"
      } elseif {[string length $val] > 0} {
        set lval " ([string range $val 0 22])"
      }
      if {[string equal $opt altitude] && [string equal $val "."]} {
        set lval " (auto)"
      }
    }
    default {
      if {![string equal $val "auto"]} {
        set lval " ([mc $val])"
      }
    }
  }
  return "$lab$lval"
}

proc xth_me_set_option_value {opt} {
  global xth
  set nval $xth(me,ctrl,ctx,$opt)
  set oval $xth(me,ctrl,ctxold,$opt)
  switch $opt {
    name -
    text -
    value {
    }
    default {
      if {[string equal $nval "auto"] || [string equal $nval $oval]} {
        set nval {}
      }
    }
  }
  set oopts $xth(me,ctrl,ctxopt,$opt)
  if {[string length $nval] > 0} {
    if {[regexp {^[\w\.\-][^\s\[\]\"]*$} $nval]} {
      set xth($xth(me,ctrl,ctx,optkey)) "$oopts -$opt $nval" 
    } elseif {![regexp {[\[\]]} $nval]} {
      set xth($xth(me,ctrl,ctx,optkey)) "$oopts -$opt \[$nval\]" 
    } else {
      set nval [regsub -all {"} $nval {""}]
      set xth($xth(me,ctrl,ctx,optkey)) "$oopts -$opt \"$nval\"" 
    }
  } else {
    set xth($xth(me,ctrl,ctx,optkey)) $oopts 
  }
  xth_me_cmds_update {}  
}

  
# option name, option name in therion command  
proc xth_me_set_optionline_value {opt args} {
  global xth
  set nval $xth(me,ctrl,ctx,$opt)
  set oval $xth(me,ctrl,ctxold,$opt)
  set oopts $xth(me,ctrl,ctxopt,$opt)
  set optstr $opt
  if {[llength $args] > 0} {
    set optstr [lindex $args 0]
  }
  switch $opt {
    altitude {  
      if {[string equal $nval "."] && [string equal $nval $oval]} {
        set nval {}
      }  
    }
    segsubtype {  
      if {[string equal $nval $oval]} {
        set nval {}
      }  
    }
    default {      
    }
  }
  if {[string length $nval] > 0} {
    if {[string length $oopts] > 0} {
      set oopts "$oopts\n"
    }
    if {[regexp {^[\w\.\-][^\s\[\]\"]*$} $nval]} {
      set nopts "$oopts$optstr $nval" 
    } elseif {![regexp {[\[\]]} $nval]} {
      set nopts "$oopts$optstr \[$nval\]" 
    } else {
      set nval [regsub -all {"} $nval {""}]
      set nopts "$oopts$optstr \"$nval\"" 
    }
  } else {
    set nopts $oopts 
  }
  $xth(ctrl,me,linept).oe.txt delete 1.0 end
  $xth(ctrl,me,linept).oe.txt insert 1.0 $nopts
  $xth(ctrl,me,linept).oe.txt mark set insert end
  $xth(ctrl,me,linept).oe.txt see end
  xth_me_cmds_update {}  
}
 
  

proc xth_me_ctx_change_text {id args} {
  global xth
  if {[llength $args] < 1} {
    set title $id
  } else {
    set title [lindex $args 0]
  }
  set d $xth(gui,main).ctxdlg
  catch {destroy $d}
  set dlg [Dialog $d -side bottom -title $title -transient no -cancel 1 -default 0 -geometry $xth(me,ctrl,ctx,dlggeom)]
  $d add -text [mc "OK"]
  $d add -text [mc "Cancel"]
  set f [$d getframe]
  Entry $f.stname -font $xth(gui,lfont) -width 0 -textvariable xth(me,ctrl,ctx,$id) -command "Dialog::enddialog $d 0"
  pack $f.stname -expand 1 -fill both
  set res [$d draw $f.stname]
  if {$res == 0} {
    if {[string equal $id altitude]} {
      xth_me_set_optionline_value $id
    } else {
      xth_me_set_option_value $id
    }
  }
}


# Show context menu at given coordinates 
proc xth_me_show_context_menu {id x y} {
  global xth
  if {[llength $id] == 2} {
    set pid [lindex $id 1]
    set id [lindex $id 0]
  } else {
    set pid 0
  }
  $xth(me,can) raise point
  set some_below {}
  set select {}
  # select point, if not selected
  if {$xth(me,cmds,selid) != $id} {
    #xth_me_cmds_select "$id $pid"
    set select [list "$id $pid"]
    if {$pid != 0} {
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    } else {
      xth_ctrl_scroll_to me point
      xth_ctrl_maximize me point
    }
  # select line point, if not selected
  } elseif {($xth(me,cmds,$id,ct) == 3) && ($xth(me,cmds,selpid) != $pid)} {
    #xth_me_cmds_select_linept $id $pid
    set select [list $id $pid]
    xth_ctrl_scroll_to me line
    xth_ctrl_maximize me line
    xth_ctrl_maximize me linept
  } else {
    # check, whether there is some point below
    $xth(me,can) dtag all nearest
    if {$pid != 0} {
      set utag pt$id.$pid
    } else {
      set utag pt$id
    }
    $xth(me,can) addtag nearest closest [$xth(me,can) canvasx $x] [$xth(me,can) canvasy $y] 0 $utag
    set tgs [$xth(me,can) itemcget nearest -tags]
    #puts $tgs
    if {[regexp "(^|\\s)pt(\\d+)($|\\s)" $tgs d1 d2 nid]} {
      set some_below "xth_me_cmds_select $nid; xth_ctrl_scroll_to me point; xth_ctrl_maximize me point; catch {\$xth(me,can) lower $utag point}; catch {\$xth(me,can) raise $utag line}"
    } elseif {[regexp "(^|\\s)pt(\\d+)\.(\\d+)($|\\s)" $tgs d1 d2 nid npid]} {
      set some_below "xth_me_cmds_select \"$nid $npid\"; if {$npid != 0} {xth_ctrl_scroll_to me line; xth_ctrl_maximize me line; xth_ctrl_maximize me linept} else {xth_ctrl_scroll_to me point; xth_ctrl_maximize me point}; catch {\$xth(me,can) lower $utag point}; catch {\$xth(me,can) raise $utag line}"
    }
  }
    
  if {[llength $select] == 1} {
    xth_me_cmds_select [lindex $select 0]
  } elseif {[llength $select] == 2} {
    xth_me_cmds_select_linept [lindex $select 0] [lindex $select 1]
  }
  
  $xth(me,ctxmenu) delete 0 end
  $xth(me,ctxmenu).others delete 0 end
  
  set opts {}
  if {$xth(me,cmds,$id,ct) == 2} {
    # add point menu items
    set opts "ctrl,me,point,opts"
    $xth(me,ctxmenu) add cascade -label [format "%s (%s)" [mc "type"] [thememc [list point $xth(me,cmds,$id,type)]]] -menu $xth(me,ctxmenu).ptypes
    
    # subtype if applicable
    $xth(me,ctxmenu).subtype delete 0 end
    if {[lsearch -exact {station air-draught water-flow} $xth(me,cmds,$id,type)] > -1} {
      set optsubtype [xth_me_get_option_value "subtype" $opts]
      set xth(me,ctrl,ctx,subtype) [lindex $optsubtype 0]
      if {[string length $xth(me,ctrl,ctx,subtype)] == 0} {
        set xth(me,ctrl,ctx,subtype) auto
      }
      switch $xth(me,cmds,$id,type) {
        station {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "temporary"] -variable xth(me,ctrl,ctx,subtype) -value "temporary" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "painted"] -variable xth(me,ctrl,ctx,subtype) -value "painted" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "natural"] -variable xth(me,ctrl,ctx,subtype) -value "natural" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "fixed"] -variable xth(me,ctrl,ctx,subtype) -value "fixed" -command {xth_me_set_option_value subtype}
        }
        air-draught {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "winter"] -variable xth(me,ctrl,ctx,subtype) -value "winter" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "summer"] -variable xth(me,ctrl,ctx,subtype) -value "summer" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "undefined"] -variable xth(me,ctrl,ctx,subtype) -value "undefined" -command {xth_me_set_option_value subtype}
        }
        water-flow {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "permanent"] -variable xth(me,ctrl,ctx,subtype) -value "permanent" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "intermittent"] -variable xth(me,ctrl,ctx,subtype) -value "intermittent" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "paleo"] -variable xth(me,ctrl,ctx,subtype) -value "paleo" -command {xth_me_set_option_value subtype}
        }
      }
      set xth(me,ctrl,ctxopt,subtype) [lindex $optsubtype 1] 
      $xth(me,ctxmenu) add cascade -label [xth_me_optlabel subtype] -menu $xth(me,ctxmenu).subtype
    }    
    
    # change align
    if {[lsearch -exact {station} $xth(me,cmds,$id,type)] == -1} {
    	set optalign [xth_me_get_option_value "align" $opts]
    	# set variable
    	switch -nocase [lindex $optalign 0] {
    	  t - top {
          #DON'T REMOVE - for translation. [mc "top"]
    	    set xth(me,ctrl,ctx,align) "top"
    	  }
    	  tr - top-right {
          #DON'T REMOVE - for translation. [mc "top-right"]
    	    set xth(me,ctrl,ctx,align) "top-right"
    	  }
    	  tl - top-left {
          #DON'T REMOVE - for translation. [mc "top-left"]
    	    set xth(me,ctrl,ctx,align) "top-left"
    	  }
    	  b - bottom {
          #DON'T REMOVE - for translation. [mc "bottom"]
    	    set xth(me,ctrl,ctx,align) "bottom"
    	  }
    	  br - bottom-right {
          #DON'T REMOVE - for translation. [mc "bottom-right"]
    	    set xth(me,ctrl,ctx,align) "bottom-right"
    	  }
    	  bl - bottom-left {
          #DON'T REMOVE - for translation. [mc "bottom-left"]
    	    set xth(me,ctrl,ctx,align) "bottom-left"
    	  }
    	  c - centre - center {
          #DON'T REMOVE - for translation. [mc "center"]
    	    set xth(me,ctrl,ctx,align) "center"
    	  }
    	  r - right {
          #DON'T REMOVE - for translation. [mc "right"]
    	    set xth(me,ctrl,ctx,align) "right"
    	  }
    	  l - left {
          #DON'T REMOVE - for translation. [mc "left"]
    	    set xth(me,ctrl,ctx,align) "left"
    	  }
    	  default {
          #DON'T REMOVE - for translation. [mc "auto"]
    	    set xth(me,ctrl,ctx,align) "auto"
    	  }
    	}
    	# set options
      set xth(me,ctrl,ctxopt,align) [lindex $optalign 1]
      #DON'T REMOVE - for translation. [mc "align"]
      $xth(me,ctxmenu) add cascade -label [xth_me_optlabel align] -menu $xth(me,ctxmenu).align
    }
	  	  
    # name
    if {[lsearch -exact {station} $xth(me,cmds,$id,type)] > -1} {
      set optname [xth_me_get_option_value "name" $opts]
      set xth(me,ctrl,ctx,name) [lindex $optname 0]
      set xth(me,ctrl,ctxopt,name) [lindex $optname 1] 
      #DON'T REMOVE - for translation. [mc "name"]
      $xth(me,ctxmenu) add command -label [xth_me_optlabel name] -command {xth_me_ctx_change_text name [mc "Station name"]}
    }
    # scrap
    if {[lsearch -exact {section} $xth(me,cmds,$id,type)] > -1} {
      set optscrap [xth_me_get_option_value "scrap" $opts]
      set xth(me,ctrl,ctx,scrap) [lindex $optscrap 0]
      set xth(me,ctrl,ctxopt,scrap) [lindex $optscrap 1] 
      #DON'T REMOVE - for translation. [mc "scrap"]
      $xth(me,ctxmenu) add command -label [xth_me_optlabel scrap] -command {xth_me_ctx_change_text scrap [mc "Scrap reference"]}
    }
    # text
    if {[lsearch -exact {label remark continuation} $xth(me,cmds,$id,type)] > -1} {
      set opttext [xth_me_get_option_value "text" $opts]
      set xth(me,ctrl,ctx,text) [lindex $opttext 0]
      set xth(me,ctrl,ctxopt,text) [lindex $opttext 1]
      #DON'T REMOVE - for translation. [mc "text"]
      $xth(me,ctxmenu) add command -label [xth_me_optlabel text] -command {xth_me_ctx_change_text text}
    }
    # value
    if {[lsearch -exact {height passage-height dimensions} $xth(me,cmds,$id,type)] > -1} {
      set optvalue [xth_me_get_option_value "value" $opts]
      set xth(me,ctrl,ctx,value) [lindex $optvalue 0]
      set xth(me,ctrl,ctxopt,value) [lindex $optvalue 1] 
      #DON'T REMOVE - for translation. [mc "value"]
      $xth(me,ctxmenu) add command -label [xth_me_optlabel value] -command {xth_me_ctx_change_text value}
    }
    # toggle orientation
    if {[lsearch -exact {station} $xth(me,cmds,$id,type)] == -1} {
      $xth(me,ctxmenu) add checkbutton -label [mc "orientation"] -variable xth(ctrl,me,point,rotid) -command xth_me_cmds_point_change_state
    }
  } elseif {$xth(me,cmds,$id,ct) == 3} {
  
    # add line menu items
    set opts "ctrl,me,line,opts"
    $xth(me,ctxmenu) add cascade -label [format "%s (%s)" [mc "type"] [thememc [list line $xth(me,cmds,$id,type)]]] -menu $xth(me,ctxmenu).ltypes
    
    # subtype if applicable
    $xth(me,ctxmenu).subtype delete 0 end
    if {[lsearch -exact {wall border water-flow survey} $xth(me,cmds,$id,type)] > -1} {
      set optsubtype [xth_me_get_option_value "subtype" $opts]
      set xth(me,ctrl,ctx,subtype) [lindex $optsubtype 0]
      if {[string length $xth(me,ctrl,ctx,subtype)] == 0} {
        set xth(me,ctrl,ctx,subtype) auto
      }
      switch $xth(me,cmds,$id,type) {
        wall {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "bedrock"] -variable xth(me,ctrl,ctx,subtype) -value "bedrock" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "invisible"] -variable xth(me,ctrl,ctx,subtype) -value "invisible" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "underlying"] -variable xth(me,ctrl,ctx,subtype) -value "underlying" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "overlying"] -variable xth(me,ctrl,ctx,subtype) -value "overlying" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "unsurveyed"] -variable xth(me,ctrl,ctx,subtype) -value "unsurveyed" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "presumed"] -variable xth(me,ctrl,ctx,subtype) -value "presumed" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "pit"] -variable xth(me,ctrl,ctx,subtype) -value "pit" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "sand"] -variable xth(me,ctrl,ctx,subtype) -value "sand" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "clay"] -variable xth(me,ctrl,ctx,subtype) -value "clay" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "pebbles"] -variable xth(me,ctrl,ctx,subtype) -value "pebbles" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "debris"] -variable xth(me,ctrl,ctx,subtype) -value "debris" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "blocks"] -variable xth(me,ctrl,ctx,subtype) -value "blocks" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "ice"] -variable xth(me,ctrl,ctx,subtype) -value "ice" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "flowstone"] -variable xth(me,ctrl,ctx,subtype) -value "flowstone" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "moonmilk"] -variable xth(me,ctrl,ctx,subtype) -value "moonmilk" -command {xth_me_set_option_value subtype}
        }
        border {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "visible"] -variable xth(me,ctrl,ctx,subtype) -value "visible" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "invisible"] -variable xth(me,ctrl,ctx,subtype) -value "invisible" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "temporary"] -variable xth(me,ctrl,ctx,subtype) -value "temporary" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "presumed"] -variable xth(me,ctrl,ctx,subtype) -value "presumed" -command {xth_me_set_option_value subtype}
        }
        water-flow {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "permanent"] -variable xth(me,ctrl,ctx,subtype) -value "permanent" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "intermittent"] -variable xth(me,ctrl,ctx,subtype) -value "intermittent" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "conjectural"] -variable xth(me,ctrl,ctx,subtype) -value "conjectural" -command {xth_me_set_option_value subtype}
        }
        survey {
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "cave"] -variable xth(me,ctrl,ctx,subtype) -value "cave" -command {xth_me_set_option_value subtype}
          $xth(me,ctxmenu).subtype add radiobutton -label [mc "surface"] -variable xth(me,ctrl,ctx,subtype) -value "surface" -command {xth_me_set_option_value subtype}
        }
      }
      set xth(me,ctrl,ctxopt,subtype) [lindex $optsubtype 1] 
      #DON'T REMOVE - for translation. [mc "subtype"]
      $xth(me,ctxmenu) add cascade -label [xth_me_optlabel subtype] -menu $xth(me,ctxmenu).subtype
    }    

        
    $xth(me,ctxmenu) add cascade -label [mc "control points"] -menu $xth(me,ctxmenu).cps
    if {[lsearch -exact {slope} $xth(me,cmds,$id,type)] > -1} {
      $xth(me,ctxmenu) add checkbutton -label [mc "orientation"] -variable xth(ctrl,me,linept,rotid) -command xth_me_cmds_toggle_linept
      $xth(me,ctxmenu) add checkbutton -label [mc "l-size"] -variable xth(ctrl,me,linept,lsid) -command xth_me_cmds_toggle_linept
    }

    update
    set subtypelen [$xth(me,ctxmenu).subtype index end]
    if {($subtypelen > 0) && ($subtypelen < 22)} {
      $xth(me,ctxmenu).segsubtype delete 0 end
      set optsubtype [xth_me_get_optionline_value "subtype"]
      set xth(me,ctrl,ctx,segsubtype) [lindex $optsubtype 0]
      if {[string length $xth(me,ctrl,ctx,segsubtype)] == 0} {
        set xth(me,ctrl,ctx,segsubtype) auto
      }      
      set xth(me,ctrl,ctxopt,segsubtype) [lindex $optsubtype 1]
      for {set sti 0} {$sti < $subtypelen} {incr sti} {
        $xth(me,ctxmenu).segsubtype add radiobutton -label [$xth(me,ctxmenu).subtype entrycget $sti -label] -variable xth(me,ctrl,ctx,segsubtype) -value [$xth(me,ctxmenu).subtype entrycget $sti -value] -command {xth_me_set_optionline_value segsubtype subtype}
      }
      $xth(me,ctxmenu) add cascade -label [xth_me_optlabel segsubtype [mc "segment subtype"]] -menu $xth(me,ctxmenu).segsubtype
    }
    
    # wall altitude
    if {[lsearch -exact {wall} $xth(me,cmds,$id,type)] > -1} {
      #DON'T REMOVE - for translation. [mc "altitude"]
      set optalt [xth_me_get_optionline_value "altitude"]
      set xth(me,ctrl,ctx,altitude) [lindex $optalt 0]
      if {[lsearch -exact {- nan NaN NAN} xth(me,ctrl,ctx,altitude)] > -1} {
        set xth(me,ctrl,ctx,altitude) "."  
      }
      set xth(me,ctrl,ctxopt,altitude) [lindex $optalt 1]
      $xth(me,ctxmenu) add cascade -label [xth_me_optlabel altitude [mc "altitude label"]] -menu $xth(me,ctxmenu).altitude
    }
    
    
    # outline
    set optoutline [xth_me_get_option_value "outline" $opts]
    # set variable
    switch -nocase [lindex $optoutline 0] {
      in {
        set xth(me,ctrl,ctx,outline) "in"
      }
      out {
        set xth(me,ctrl,ctx,outline) "out"
      }
      none {
        set xth(me,ctrl,ctx,outline) "none"
      }
      default {
        set xth(me,ctrl,ctx,outline) "auto"
      }
    }
    # set options
    set xth(me,ctrl,ctxopt,outline) [lindex $optoutline 1] 
    #DON'T REMOVE - for translation. [mc "outline"]
    $xth(me,ctxmenu).others add cascade -label [xth_me_optlabel outline] -menu $xth(me,ctxmenu).outline
      
    # text for label
    if {[lsearch -exact {label} $xth(me,cmds,$id,type)] > -1} {
      set opttext [xth_me_get_option_value "text" $opts]
      set xth(me,ctrl,ctx,text) [lindex $opttext 0]
      set xth(me,ctrl,ctxopt,text) [lindex $opttext 1]
      #DON'T REMOVE - for translation. [mc "text"]
      $xth(me,ctxmenu) add command -label [xth_me_optlabel text] -command {xth_me_ctx_change_text text}
    }
  }
  
  # common options 
  set xth(me,ctrl,ctx,optkey) $opts
  set xth(me,ctrl,ctx,dlggeom) "+[expr $x + [winfo rootx $xth(me,can)]]+[expr $y + [winfo rooty $xth(me,can)]]"  

  # clip
  set optclip [xth_me_get_option_value "clip" $opts]
  # set variable
  switch -nocase [lindex $optclip 0] {
    0 - off - false {
      set xth(me,ctrl,ctx,clip) "off"
    }
    1 - on - true {
      set xth(me,ctrl,ctx,clip) "on"
    }
    default {
      set xth(me,ctrl,ctx,clip) "auto"
    }
  }
  # set options
  set xth(me,ctrl,ctxopt,clip) [lindex $optclip 1] 
  #DON'T REMOVE - for translation. [mc "clip"]
  $xth(me,ctxmenu).others add cascade -label [xth_me_optlabel clip] -menu $xth(me,ctxmenu).clip

  $xth(me,ctxmenu) add cascade -label [mc "other options"] -menu $xth(me,ctxmenu).others
  
    
  # place
  set optplace [xth_me_get_option_value "place" $opts]
  # set variable
  switch -nocase [lindex $optplace 0] {
    top {
      set xth(me,ctrl,ctx,place) "top"
    }
    bottom {
      set xth(me,ctrl,ctx,place) "bottom"
    }
    default {
      set xth(me,ctrl,ctx,place) "auto"
    }
  }
  # set options
  set xth(me,ctrl,ctxopt,place) [lindex $optplace 1] 
  #DON'T REMOVE - for translation. [mc "place"]
  $xth(me,ctxmenu).others add cascade -label [xth_me_optlabel place] -menu $xth(me,ctxmenu).place
  
  
  # scale
  set optscale [xth_me_get_option_value "scale" $opts]
  # set variable
  switch -nocase [lindex $optscale 0] {
    xs - tiny {
      set xth(me,ctrl,ctx,scale) "xs"
    }
    s - small {
      set xth(me,ctrl,ctx,scale) "s"
    }
    m - normal {
      set xth(me,ctrl,ctx,scale) "m"
    }
    l - large {
      set xth(me,ctrl,ctx,scale) "l"
    }
    xl - huge {
      set xth(me,ctrl,ctx,scale) "xl"
    }
    default {
      set xth(me,ctrl,ctx,scale) "auto"
    }
  }
  # set options
  set xth(me,ctrl,ctxopt,scale) [lindex $optscale 1] 
  #DON'T REMOVE - for translation. [mc "scale"]
  $xth(me,ctxmenu).others add cascade -label [xth_me_optlabel scale] -menu $xth(me,ctxmenu).scale
  
  
  # visibility
  set optvis [xth_me_get_option_value "visible|visibility" $opts]
  # set variable
  switch -nocase [lindex $optvis 0] {
    0 - off - false {
      set xth(me,ctrl,ctx,visibility) "off"
    }
    1 - on - true {
      set xth(me,ctrl,ctx,visibility) "on"
    }
    default {
      set xth(me,ctrl,ctx,visibility) "auto"
    }
  }
  # set options
  set xth(me,ctrl,ctxopt,visibility) [lindex $optvis 1]   
  $xth(me,ctxmenu).others add cascade -label [xth_me_optlabel visibility] -menu $xth(me,ctxmenu).visibility
      
  $xth(me,ctxmenu) add separator
  if {$xth(me,cmds,$id,ct) == 3} {
    $xth(me,ctxmenu) add cascade -label [mc "Edit line"] -menu $xth(me,ctxmenu).m
    $xth(me,ctxmenu).others add checkbutton -label [mc "close"] -variable xth(ctrl,me,line,close) -command xth_me_cmds_toggle_line_close
    $xth(me,ctxmenu).others add checkbutton -label [mc "reverse"] -variable xth(ctrl,me,line,reverse) -command xth_me_cmds_toggle_line_reverse
  }
  if {[string length $some_below] > 0} {
    $xth(me,ctxmenu) add command -label [mc "Select underlying point"] -command $some_below    
  }
  $xth(me,ctxmenu) add command -label [mc "Delete symbol"] -command {xth_me_cmds_delete {}}   
  	
  # set original values variables
  foreach item [array names xth {me,ctrl,ctx,*}] {
    if {[regexp {^me,ctrl,ctx,([^,]*)$} $item dum key]} {
      set xth(me,ctrl,ctxold,$key) $xth($item)
    }
  }
  tk_popup $xth(me,ctxmenu) [expr $x + [winfo rootx $xth(me,can)]] [expr $y + [winfo rooty $xth(me,can)]]
}

therion-5.4.1/xtherion/me_cmds2.tcl000066400000000000000000003555261307545355600172630ustar00rootroot00000000000000##
## me_cmds2.tcl --
##
##     Map editor command processing 2.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

proc xth_me_cmds_get_option {ln opt} {
  set rxl [list [list "^\\s*$opt\\s+\\\[(\[^\\\]\]*)\\\]" "\["]\
    [list "^\\s*$opt\\s+\\\"((\\\"\\\"|\[^\\\"])+)\\\"" "\""]\
    [list "^\\s*$opt\\s+(\\S+)" {}]]
  set rln $ln
  set val {}
  set sep {}
  set res 0
  foreach rx $rxl {
    if {[regexp [lindex $rx 0] $ln dump val]} {
      regsub [lindex $rx 0] $ln {} rln
      regsub {^\s*} $rln {} rln
      set sep [lindex $rx 1]
      set res 1
      break
    }
  }
  return [list $val $rln $res]
}


proc xth_me_cmds_get_onoffauto {opt} {
  switch $opt {
    on {return 1}
    off {return 0}
    default {return -1}
  }
}


proc xth_me_cmds_get_bool {opt} {
  if {[lsearch {on 1 true yes} $opt] > -1} {
    return 1
  } else {
    return 0
  }
}


proc xth_me_cmds_update_line_ctrl {id} {

  global xth
  
  if {[string length $id] > 0} {

    $xth(ctrl,me,line).typl configure -state normal    
    $xth(ctrl,me,line).typ configure -state normal    
    $xth(ctrl,me,line).namel configure -state normal    
    $xth(ctrl,me,line).name configure -state normal    
    $xth(ctrl,me,line).optl configure -state normal    
    $xth(ctrl,me,line).opt configure -state normal    
    $xth(ctrl,me,line).rev configure -state normal    
    $xth(ctrl,me,line).cls configure -state normal    
#    $xth(ctrl,me,line).insp configure -state normal    
#    $xth(ctrl,me,line).delp configure -state normal    
    $xth(ctrl,me,line).theme configure -state normal    
    $xth(ctrl,me,line).themetype configure -state normal    
    $xth(ctrl,me,line).lpa configure -state normal    
    $xth(ctrl,me,line).upd configure -state normal    
    $xth(ctrl,me,line).trace configure -state normal    
    $xth(ctrl,me,line).vector configure -state normal    
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Insert point"] -state normal    
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state normal    
    $xth(ctrl,me,line).pl.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,plist)

    set xth(ctrl,me,line,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,line,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,line,opts) $xth(me,cmds,$id,options)
    set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
    set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)
    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,line,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,line,themetype) {}
    } else {
      set xth(ctrl,me,line,themetype) [lindex $xth(me,themes,$at,line,showlist) $tx]
    }

    xth_me_prev_cmd $xth(me,cmds,$id,data)

    catch {$xth(me,can) raise lnln$id line}
    catch {$xth(me,can) raise lnpt$id point}
    
  } else {
  
    set xth(ctrl,me,line,name) {}
    set xth(ctrl,me,line,reverse) 0
    set xth(ctrl,me,line,close) 0
    set xth(ctrl,me,line,type) $xth(me,dflt,line,type)
    set xth(ctrl,me,line,opts) $xth(me,dflt,line,options)

    $xth(ctrl,me,line).typl configure -state disabled    
    $xth(ctrl,me,line).typ configure -state disabled    
    $xth(ctrl,me,line).namel configure -state disabled    
    $xth(ctrl,me,line).name configure -state disabled    
    $xth(ctrl,me,line).optl configure -state disabled    
    $xth(ctrl,me,line).opt configure -state disabled    
    $xth(ctrl,me,line).rev configure -state disabled    
    $xth(ctrl,me,line).cls configure -state disabled    
#    $xth(ctrl,me,line).insp configure -state disabled    
#    $xth(ctrl,me,line).delp configure -state disabled    
    $xth(ctrl,me,line).theme configure -state disabled     
    $xth(ctrl,me,line).themetype configure -state disabled     
    $xth(ctrl,me,line).lpa configure -state disabled    
    $xth(ctrl,me,line).upd configure -state disabled
    $xth(ctrl,me,line).trace configure -state disabled
    $xth(ctrl,me,line).vector configure -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Insert point"] -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state disabled   
    $xth(ctrl,me,line).pl.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,line,empty)
    $xth(ctrl,me,line).pl.l selection clear 0 end
      
  }
  
}



proc xth_me_cmds_update_area_ctrl {id} {

  global xth
  
  if {[string length $id] > 0} {

    $xth(ctrl,me,ac).typl configure -state normal    
    $xth(ctrl,me,ac).typ configure -state normal    
    $xth(ctrl,me,ac).theme configure -state normal    
    $xth(ctrl,me,ac).themetype configure -state normal
    $xth(ctrl,me,ac).optl configure -state normal    
    $xth(ctrl,me,ac).opt configure -state normal    
    $xth(ctrl,me,ac).ins configure -state normal    
    $xth(ctrl,me,ac).del configure -state normal    
    $xth(ctrl,me,ac).insid configure -state normal    
    $xth(ctrl,me,ac).inside configure -state normal    
    $xth(ctrl,me,ac).upd configure -state normal    
    $xth(ctrl,me,ac).shw configure -state normal    
    $xth(ctrl,me,ac).ll.l configure -takefocus 1 \
      -listvariable xth(me,cmds,$id,llist)
    $xth(ctrl,me,ac).ll.l selection clear 0 end
    $xth(ctrl,me,ac).ll.l selection set end end
    $xth(ctrl,me,ac).ll.l see end
    
    set xth(ctrl,me,ac,type) $xth(me,cmds,$id,type)
    set xth(ctrl,me,ac,name) $xth(me,cmds,$id,name)
    set xth(ctrl,me,ac,opts) $xth(me,cmds,$id,options)

    set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
    set tx [lsearch -exact $xth(me,themes,$at,area,hidelist) $xth(me,cmds,$id,type)]
    if {$tx < 0} {
      set xth(ctrl,me,ac,themetype) {}
    } else {
      set xth(ctrl,me,ac,themetype) [lindex $xth(me,themes,$at,area,showlist) $tx]
    }

    set xth(ctrl,me,ac,insid) {}
    xth_me_prev_cmd $xth(me,cmds,$id,data)

  } else {
  
    set xth(ctrl,me,ac,name) {}
    set xth(ctrl,me,ac,insid) {}
    set xth(ctrl,me,ac,type) $xth(me,dflt,area,type)
    set xth(ctrl,me,ac,opts) $xth(me,dflt,area,options)

    $xth(ctrl,me,ac).typl configure -state disabled    
    $xth(ctrl,me,ac).typ configure -state disabled    
    $xth(ctrl,me,ac).theme configure -state disabled    
    $xth(ctrl,me,ac).themetype configure -state disabled
    $xth(ctrl,me,ac).optl configure -state disabled    
    $xth(ctrl,me,ac).opt configure -state disabled    
    $xth(ctrl,me,ac).ins configure -state disabled    
    $xth(ctrl,me,ac).del configure -state disabled    
    $xth(ctrl,me,ac).insid configure -state disabled    
    $xth(ctrl,me,ac).inside configure -state disabled    
    $xth(ctrl,me,ac).upd configure -state disabled    
    $xth(ctrl,me,ac).shw configure -state disabled    
    $xth(ctrl,me,ac).ll.l configure -takefocus 0 \
      -listvariable xth(ctrl,me,ac,empty)
    $xth(ctrl,me,ac).ll.l selection clear 0 end
      
  }
  
}



proc xth_me_cmds_move_lineptcp_xctrl {id ppid pid npid} {
  global xth
  
  set px [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set py [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  
  if {$xth(me,cmds,$id,$pid,idp)} {
    set x [xth_me_real2canx $xth(me,cmds,$id,$pid,xp)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$pid,yp)]
    $xth(me,can) coords $xth(me,canid,linept,pcp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,pcpl) $px $py $x $y
  }
  
  if {$xth(me,cmds,$id,$pid,idn)} {
    set x [xth_me_real2canx $xth(me,cmds,$id,$pid,xn)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$pid,yn)]
    $xth(me,can) coords $xth(me,canid,linept,ncp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,ncpl) $px $py $x $y
  }

  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    set px [xth_me_real2canx $xth(me,cmds,$id,$npid,x)]
    set py [xth_me_real2cany $xth(me,cmds,$id,$npid,y)]
    set x [xth_me_real2canx $xth(me,cmds,$id,$npid,xp)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$npid,yp)]
    $xth(me,can) coords $xth(me,canid,linept,nncp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,nncpl) $px $py $x $y
  }

  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    set px [xth_me_real2canx $xth(me,cmds,$id,$ppid,x)]
    set py [xth_me_real2cany $xth(me,cmds,$id,$ppid,y)]
    set x [xth_me_real2canx $xth(me,cmds,$id,$ppid,xn)]
    set y [xth_me_real2cany $xth(me,cmds,$id,$ppid,yn)]
    $xth(me,can) coords $xth(me,canid,linept,ppcp) [list \
      [expr $x - $xth(gui,me,line,cpsize)] \
      [expr $y - $xth(gui,me,line,cpsize)] \
      [expr $x + $xth(gui,me,line,cpsize)] \
      [expr $y + $xth(gui,me,line,cpsize)]]
    $xth(me,can) coords $xth(me,canid,linept,ppcpl) $px $py $x $y
  }

  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(me,cmds,$id,$pid,rotation) \
    $xth(me,cmds,$id,$pid,rs) $xth(me,cmds,$id,$pid,ls)
  xth_me_cmds_move_line_xctrl $id
}


proc xth_me_cmds_move_linept_xctrl {id pid} {
  global xth
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  $xth(me,can) coords $xth(me,canid,linept,selector) [list \
    [expr $x - 3 * $xth(gui,me,line,psize)] \
    [expr $y - 3 * $xth(gui,me,line,psize)] \
    [expr $x + 3 * $xth(gui,me,line,psize)] \
    [expr $y + 3 * $xth(gui,me,line,psize)]]
}


proc xth_me_cmds_move_line_xctrl {id} {
  global xth
  set pid [lindex $xth(me,cmds,$id,xplist) 0]
  set rot [xth_me_cmds_get_default_rotation $id $pid]
  if {$xth(me,cmds,$id,reverse)} {
    set rot [expr $rot + 180.0]
  }
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  $xth(me,can) coords $xth(me,canid,line,tick) [list $x $y \
      [expr $x + sin($rot/180.0*3.14159265259) * $xth(gui,me,line,ticksize)] \
      [expr $y - cos($rot/180.0*3.14159265259) * $xth(gui,me,line,ticksize)]]
}


proc xth_me_cmds_show_line_xctrl {id} {
  global xth
  if {[llength $xth(me,cmds,$id,xplist)] < 3} {
    xth_me_cmds_hide_line_xctrl    
    return
  }
  xth_me_cmds_move_line_xctrl $id
  $xth(me,can) itemconfigure entirelinectrl -state normal
  $xth(me,can) raise entirelinectrl
  $xth(me,can) lower entirelinectrl point
}

proc xth_me_cmds_hide_line_xctrl {} {
  global xth
  $xth(me,can) itemconfigure entirelinectrl -state hidden
}

proc xth_me_cmds_show_linept_xctrl {id pid} {
  global xth
  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  set xl $xth(me,cmds,$id,xplist)
  $xth(me,can) raise linectrl
  $xth(me,can) lower linectrl point

  $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state normal
  xth_me_cmds_move_linept_xctrl $id $pid

  if {$xth(me,cmds,$id,$pid,idp)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -state hidden
  }
  if {$xth(me,cmds,$id,$pid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -state hidden
  }
  set ix [lsearch $xl $pid]
  set lix [expr [llength $xl] - 2]
  if {$ix > 0} {
    set ppid [lindex $xl [expr $ix - 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set ppid [lindex $xl [expr $lix - 1]]
  } else {
    set ppid 0
  }
  if {$ix < $lix} {
    set npid [lindex $xl [expr $ix + 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set npid [lindex $xl 1]
  } else {
    set npid 0
  }
  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -state hidden
  }
  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcpl) -state normal
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -state normal
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcpl) -state hidden
    $xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -state hidden
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  $xth(me,can) raise pt$id.$pid
  $xth(me,can) bind $xth(me,canid,linept,pcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,pcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill red"
  $xth(me,can) bind $xth(me,canid,linept,pcp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,pcp) $id $ppid $pid $npid p %x %y"
  $xth(me,can) bind $xth(me,canid,linept,ncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,ncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill red"
  $xth(me,can) bind $xth(me,canid,linept,ncp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,ncp) $id $ppid $pid $npid n %x %y"
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,ppcp) -fill magenta"
  $xth(me,can) bind $xth(me,canid,linept,ppcp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,ppcp) $id $ppid $pid $npid pp %x %y"
  $xth(me,can) bind $xth(me,canid,linept,nncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -fill yellow"
  $xth(me,can) bind $xth(me,canid,linept,nncp)  \
    "$xth(me,can) itemconfigure $xth(me,canid,linept,nncp) -fill magenta"
  $xth(me,can) bind $xth(me,canid,linept,nncp) <1> \
    "xth_me_cmds_start_linecp_drag $xth(me,canid,linept,nncp) $id $ppid $pid $npid nn %x %y"
    
  xth_me_cmds_configure_linept_size_xctrl $id $pid
  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(me,cmds,$id,$pid,rotation) \
    $xth(me,cmds,$id,$pid,rs) $xth(me,cmds,$id,$pid,ls)
  xth_me_cmds_move_line_xctrl $id
    
}


proc xth_me_cmds_hide_linept_xctrl {} {
  global xth
  $xth(me,can) itemconfigure linectrl -state hidden
  $xth(me,can) bind $xth(me,canid,linept,pcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,pcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp)  ""
  $xth(me,can) bind $xth(me,canid,linept,nncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,nncp)  ""
  $xth(me,can) bind $xth(me,canid,linept,pcp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,ncp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,ppcp) <1> ""
  $xth(me,can) bind $xth(me,canid,linept,nncp) <1> ""
  xth_me_cmds_configure_linept_size_xctrl {} 0
}

proc xth_me_cmds_update_linept_ctrl {id pid} {

  global xth
  
  if {[string length $id] > 0} {
    xth_me_cmds_show_line_xctrl $id
  } else {
    xth_me_cmds_hide_line_xctrl
  }

  if {([string length $id] > 0) && ($pid > 0)} {

    $xth(ctrl,me,linept).posl configure -state normal
    $xth(ctrl,me,linept).posx configure -state normal
    $xth(ctrl,me,linept).posy configure -state normal
    $xth(ctrl,me,linept).xp configure -state normal
    $xth(ctrl,me,linept).yp configure -state normal
    $xth(ctrl,me,linept).xn configure -state normal
    $xth(ctrl,me,linept).yn configure -state normal
    $xth(ctrl,me,linept).cbp configure -state normal
    $xth(ctrl,me,linept).cbn configure -state normal
    $xth(ctrl,me,linept).cbs configure -state normal
    $xth(ctrl,me,linept).rotc configure -state normal
    $xth(ctrl,me,linept).rot configure -state normal
    $xth(ctrl,me,linept).rszc configure -state normal
    $xth(ctrl,me,linept).rsz configure -state normal
    $xth(ctrl,me,linept).lszc configure -state normal
    $xth(ctrl,me,linept).lsz configure -state normal
    $xth(ctrl,me,linept).optl configure -state normal
    $xth(ctrl,me,linept).upd configure -state normal

    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state normal    
    set xpid [lsearch -exact $xth(me,cmds,$id,xplist) $pid]
    if {($xpid > 0) && ($xpid < ([llength $xth(me,cmds,$id,xplist)] - 2))} {
      $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state normal
    } else {
      $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state disabled
    }

    $xth(ctrl,me,linept).oe.txt configure -state normal
    $xth(ctrl,me,linept).oe.txt delete 1.0 end
    $xth(ctrl,me,linept).oe.txt insert 1.0 $xth(me,cmds,$id,$pid,options)
    $xth(ctrl,me,linept).oe.txt mark set insert $xth(me,cmds,$id,$pid,optpos)
    $xth(ctrl,me,linept).oe.txt see $xth(me,cmds,$id,$pid,optpos)
    
    set xth(ctrl,me,linept,x) $xth(me,cmds,$id,$pid,x)
    set xth(ctrl,me,linept,y) $xth(me,cmds,$id,$pid,y)
    set xth(ctrl,me,linept,idn) $xth(me,cmds,$id,$pid,idn)
    set xth(ctrl,me,linept,idp) $xth(me,cmds,$id,$pid,idp)
    
    if $xth(me,cmds,$id,$pid,idp) {
      set xth(ctrl,me,linept,xp) $xth(me,cmds,$id,$pid,xp)
      set xth(ctrl,me,linept,yp) $xth(me,cmds,$id,$pid,yp)
    } else {
      set xth(ctrl,me,linept,xp) {}
      set xth(ctrl,me,linept,yp) {}
    }
    if $xth(me,cmds,$id,$pid,idn) {
      set xth(ctrl,me,linept,xn) $xth(me,cmds,$id,$pid,xn)
      set xth(ctrl,me,linept,yn) $xth(me,cmds,$id,$pid,yn)
    } else {
      set xth(ctrl,me,linept,xn) {}
      set xth(ctrl,me,linept,yn) {}
    }    
    set xth(ctrl,me,linept,smooth) $xth(me,cmds,$id,$pid,smooth)
    set xth(ctrl,me,linept,rot) $xth(me,cmds,$id,$pid,rotation)
    if {[string length $xth(me,cmds,$id,$pid,rotation)] > 0} {
      set xth(ctrl,me,linept,rotid) 1
    } else {
      set xth(ctrl,me,linept,rotid) 0
    }

    set xth(ctrl,me,linept,rs) $xth(me,cmds,$id,$pid,rs)
    if {[string length $xth(me,cmds,$id,$pid,rs)] > 0} {
      set xth(ctrl,me,linept,rsid) 1
    } else {
      set xth(ctrl,me,linept,rsid) 0
    }

    set xth(ctrl,me,linept,ls) $xth(me,cmds,$id,$pid,ls)
    if {[string length $xth(me,cmds,$id,$pid,ls)] > 0} {
      set xth(ctrl,me,linept,lsid) 1
    } else {
      set xth(ctrl,me,linept,lsid) 0
    }
    
    xth_me_cmds_show_linept_xctrl $id $pid
    
  } else {

    set xth(ctrl,me,linept,x) {}
    set xth(ctrl,me,linept,y) {}
    set xth(ctrl,me,linept,xp) {}
    set xth(ctrl,me,linept,yp) {}
    set xth(ctrl,me,linept,xn) {}
    set xth(ctrl,me,linept,yn) {}
    set xth(ctrl,me,linept,idn) 0
    set xth(ctrl,me,linept,idp) 0
    set xth(ctrl,me,linept,smooth) 0
    set xth(ctrl,me,linept,rot) {}
    set xth(ctrl,me,linept,rotid) 0
    set xth(ctrl,me,linept,rs) {}
    set xth(ctrl,me,linept,rsid) 0
    set xth(ctrl,me,linept,ls) {}
    set xth(ctrl,me,linept,lsid) 0

    $xth(ctrl,me,linept).posl configure -state disabled
    $xth(ctrl,me,linept).posx configure -state disabled
    $xth(ctrl,me,linept).posy configure -state disabled
    $xth(ctrl,me,linept).xp configure -state disabled
    $xth(ctrl,me,linept).upd configure -state disabled
    $xth(ctrl,me,linept).yp configure -state disabled
    $xth(ctrl,me,linept).xn configure -state disabled
    $xth(ctrl,me,linept).yn configure -state disabled
    $xth(ctrl,me,linept).cbp configure -state disabled
    $xth(ctrl,me,linept).cbn configure -state disabled
    $xth(ctrl,me,linept).cbs configure -state disabled
    $xth(ctrl,me,linept).rotc configure -state disabled
    $xth(ctrl,me,linept).rot configure -state disabled
    $xth(ctrl,me,linept).rszc configure -state disabled
    $xth(ctrl,me,linept).rsz configure -state disabled
    $xth(ctrl,me,linept).lszc configure -state disabled
    $xth(ctrl,me,linept).lsz configure -state disabled
    $xth(ctrl,me,linept).optl configure -state disabled
    $xth(ctrl,me,linept).oe.txt configure -state normal
    $xth(ctrl,me,linept).oe.txt delete 1.0 end
    $xth(ctrl,me,linept).oe.txt see 1.0
    $xth(ctrl,me,linept).oe.txt configure -state disabled

    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Delete point"] -state disabled
    $xth(ctrl,me,line).lpa.m entryconfigure [mc "Split line"] -state disabled
    
    xth_me_cmds_hide_linept_xctrl  
    
  }
  
}


proc xth_me_cmds_delete_linept {id pid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $pid] < 1} {
    set pid $xth(me,cmds,selpid)
  }
  if {$pid == 0} {
    return
  }

  set oldselpid $xth(me,cmds,selpid)
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # ak mazeme prvy alebo posledny, tak zrusime close ak je nastaveny
  set closerem 0
  if {$xth(me,cmds,$id,close) && ([llength $xth(me,cmds,$id,xplist)] > 2)} {
    set fpid [lindex $xth(me,cmds,$id,xplist) 0]
    set lpid [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
    if {$pid == $fpid} {
      set closerem 1
    } elseif {$pid == $lpid} {
      set closerem 1
    }
  }
  
  if {$closerem} {
    set closeremstr "set xth(me,cmds,$id,close) 0\nxth_me_cmds_update_line_vars $id $pid"
    set closeaddstr "set xth(me,cmds,$id,close) 1\nxth_me_cmds_update_line_vars $id $pid"
  } else {
    set closeremstr {}
    set closeaddstr {}
  }
  
  eval $closeremstr
  
  # odstrani ho zo zoznamu
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  set xth(me,cmds,$id,xplist) [lreplace $xth(me,cmds,$id,xplist) $ix $ix]
  set xth(me,cmds,$id,plist) [lreplace $xth(me,cmds,$id,plist) $ix $ix]
  $xth(me,can) delete pt$id.$pid
  $xth(me,can) delete ln$id.$pid
  xth_me_cmds_move_line $id
  if {$oldselpid == $pid} {
    set nwpid [lindex $xth(me,cmds,$id,xplist) $ix]
  } else {
    set nwpid $oldselpid
  }
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  
  # BUG FIX when deleting last point
  if {$nwpid == 0} {
    set xth(me,cmds,selpid) $nwpid
  }
  xth_me_cmds_select_linept $id $nwpid
    
  xth_me_unredo_action [mc "deleting line point"] \
    "xth_me_cmds_undelete_linept $id $pid $ix\n$closeaddstr" \
    "$closeremstr\nxth_me_cmds_delete_linept $id $pid"
  
}


proc xth_me_cmds_undelete_linept {id pid ix} {
  global xth
  set oldpid [lindex $xth(me,cmds,$id,xplist) $ix]
  set xth(me,cmds,$id,xplist) [linsert $xth(me,cmds,$id,xplist) $ix $pid]
  set xth(me,cmds,$id,plist) [linsert $xth(me,cmds,$id,plist) $ix {}]
  xth_me_cmds_update_linept_list $id $pid
  if {$ix > 0} {
    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $ix - 1]]
  } else {
    set ppid 0
  }
  xth_me_cmds_draw_linept $id $pid
  xth_me_cmds_draw_lineln $id $ppid $pid 
  xth_me_cmds_move_line $id
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_cmds_select_linept $id $pid
  
}


proc xth_me_cmds_create_line_point {id ix mode x y xp yp xn yn smooth rot rs ls opts optpos} {

  global xth
  
  incr xth(me,cmds,$id,lpid)
  set pid $xth(me,cmds,$id,lpid)
  set xth(me,cmds,$id,$pid,x) [expr double($x)]
  set xth(me,cmds,$id,$pid,y) [expr double($y)]

  if {([string length $xp] > 0) && ((![string equal $xp $x]) || (![string equal $yp $y]))} {
    set xth(me,cmds,$id,$pid,xp) [expr double($xp)]
    set xth(me,cmds,$id,$pid,yp) [expr double($yp)]
    set xth(me,cmds,$id,$pid,idp) 1
  } else {
    set xth(me,cmds,$id,$pid,xp) {}
    set xth(me,cmds,$id,$pid,yp) {}
    set xth(me,cmds,$id,$pid,idp) 0
  }
  
  if {([string length $xn] > 0) && ((![string equal $xn $x]) || (![string equal $yn $y]))} {
    set xth(me,cmds,$id,$pid,xn) [expr double($xn)]
    set xth(me,cmds,$id,$pid,yn) [expr double($yn)]
    set xth(me,cmds,$id,$pid,idn) 1
  } else {
    set xth(me,cmds,$id,$pid,xn) {}
    set xth(me,cmds,$id,$pid,yn) {}
    set xth(me,cmds,$id,$pid,idn) 0
  }
  
  if {[string length $smooth] < 1} {
    set xth(me,cmds,$id,$pid,smooth) -1
  } else {
    set xth(me,cmds,$id,$pid,smooth) $smooth
  }
  
  if {[string length $rot] > 0} {
    set rot [expr double($rot)]
  }
  set xth(me,cmds,$id,$pid,rotation) $rot

  if {[string length $ls] > 0} {
    set ls [expr double($ls)]
  }
  set xth(me,cmds,$id,$pid,ls) $ls

  if {[string length $rs] > 0} {
    set rs [expr double($rs)]
  }
  set xth(me,cmds,$id,$pid,rs) $rs
  
  regsub {\s*$} $opts "" opts
  if {[string length $opts] > 0} {
    regsub {$} $opts "\n" opts
  }
  set xth(me,cmds,$id,$pid,options) $opts
  set xth(me,cmds,$id,$pid,optpos) $optpos
  
  # vlozi ho do zoznamu
  set xth(me,cmds,$id,plist) [linsert $xth(me,cmds,$id,plist) $ix {}]
  set xth(me,cmds,$id,xplist) [linsert $xth(me,cmds,$id,xplist) $ix $pid]
  xth_me_cmds_update_linept_list $id $pid
  
  # vytvori ho
  if {$ix > 0} {
    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $ix - 1]]
  } else {
    set ppid 0
  }
  xth_me_cmds_draw_lineln $id $ppid $pid
  xth_me_cmds_draw_linept $id $pid
  
}



proc xth_me_cmds_create_area_line {id ix mode txt} {

  global xth
  incr xth(me,cmds,$id,llid)
  set lid $xth(me,cmds,$id,llid)
  regsub {\s*$} $txt "" txt
  regsub {^\s*} $txt "" txt
  set xth(me,cmds,$id,$lid,txt) $txt
  # vlozi ho do zoznamu
  set xth(me,cmds,$id,llist) [linsert $xth(me,cmds,$id,llist) $ix $txt]
  set xth(me,cmds,$id,xllist) [linsert $xth(me,cmds,$id,xllist) $ix $lid]
  
}


proc xth_me_cmds_insert_area_lineid {id mx my} {
  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  if {[string length $xth(me,cmds,$id,name)] == 0} {
    set nn [format "l%d-%.0f-%.0f" $id [xth_me_can2realx [$xth(me,can) canvasx $mx]] [xth_me_can2realy [$xth(me,can) canvasy $my]]]
    set unspec "set xth(me,cmds,$id,name) {}\nxth_me_cmds_update_line_data $id\nxth_me_cmds_update_list $id"
    set respec "set xth(me,cmds,$id,name) [list $nn]\nxth_me_cmds_update_line_data $id\nxth_me_cmds_update_list $id"
    eval $respec
  } else {
    set nn $xth(me,cmds,$id,name)
    set unspec {}
    set respec {}
  }    
  xth_me_cmds_insert_area_line $nn $unspec $respec
}


proc xth_me_cmds_insert_area_line {txt unspec respec} {

  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  regsub {\s*$} $txt "" txt
  regsub {^\s*} $txt "" txt  
  if {[string length $txt] == 0} {
    return;
  }
  set id $xth(me,cmds,selid)
  set lid [lindex $xth(me,cmds,$id,xllist) [$xth(ctrl,me,ac).ll.l curselection]]
  set ix [lsearch $xth(me,cmds,$id,xllist) $lid]
  xth_me_cmds_create_area_line $id $ix 1 $txt
  set lid $xth(me,cmds,$id,llid)
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + 1] [expr $ix + 1]
  $xth(ctrl,me,ac).ll.l see [expr $ix + 1]

  xth_me_unredo_action [mc "inserting area border"] \
    "xth_me_cmds_select $id\nxth_me_cmds_delete_area_line $id $lid\n$unspec" \
    "xth_me_cmds_select $id\n$respec\nxth_me_cmds_undelete_area_line 1 $id $lid $ix"
      
}


proc xth_me_cmds_delete_area_line {id lid} {

  global xth
  
  if {[string length $id] < 1} {
    set id $xth(me,cmds,selid)
  }
  if {[string length $lid] < 1} {
    set lid [lindex $xth(me,cmds,$id,xllist) [$xth(ctrl,me,ac).ll.l curselection]]
  }
  if {$lid == 0} {
    return
  }

  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  
  # odstrani ho zo zoznamu
  set ix [lsearch $xth(me,cmds,$id,xllist) $lid]
  set xth(me,cmds,$id,xllist) [lreplace $xth(me,cmds,$id,xllist) $ix $ix]
  set xth(me,cmds,$id,llist) [lreplace $xth(me,cmds,$id,llist) $ix $ix]
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set $ix $ix
  $xth(ctrl,me,ac).ll.l see $ix
    
  xth_me_unredo_action [mc "deleting area border"] \
    "xth_me_cmds_undelete_area_line 0 $id $lid $ix" \
    "xth_me_cmds_delete_area_line $id $lid"
  
}


proc xth_me_cmds_undelete_area_line {cr id lid ix} {

  global xth
  set xth(me,cmds,$id,xllist) [linsert $xth(me,cmds,$id,xllist) $ix $lid]
  set xth(me,cmds,$id,llist) [linsert $xth(me,cmds,$id,llist) $ix $xth(me,cmds,$id,$lid,txt)]
  xth_me_cmds_update_area_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  $xth(ctrl,me,ac).ll.l selection clear 0 end
  $xth(ctrl,me,ac).ll.l selection set [expr $ix + $cr] [expr $ix + $cr]
  $xth(ctrl,me,ac).ll.l see [expr $ix + $cr]
  
}



proc xth_me_cmds_create_area {ix mode type opts lines} {

  global xth
  if {$mode} {
    xth_me_cmds_update {}
  }
  set id [xth_me_cmds_create 6 {} $ix]
  set xth(me,cmds,$id,llid) 0
  set xth(me,cmds,$id,llist) {"end of area"}
  set xth(me,cmds,$id,xllist) {0}

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,area,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,area,type)
  }  

  foreach ln $lines {
    xth_me_cmds_create_area_line $id \
	  [expr [llength $xth(me,cmds,$id,xllist)] - 1] $mode $ln
  }
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts

  xth_me_cmds_update_list $id
  xth_me_cmds_update_area_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating area"] \
      "xth_me_cmds_delete $id\nxth_me_cmds_set_mode 0" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]\nxth_me_cmds_set_mode 3"  
    xth_me_cmds_select $id
    xth_me_cmds_start_area_insert 0
  }


}




proc xth_me_cmds_create_line {ix mode type opts lines} {

  global xth
  if {$mode} {
    xth_me_cmds_update {}
  }
  set id [xth_me_cmds_create 3 {} $ix]
  set xth(me,cmds,$id,lpid) 0
  set xth(me,cmds,$id,plist) {"end of line"}
  set xth(me,cmds,$id,xplist) {0}

  if {$mode && ([string length $opts] < 1)} {
    set opts $xth(me,dflt,line,options)
  }

  if {[string length $type] > 0} {
    set xth(me,cmds,$id,type) $type
  } else {
    set xth(me,cmds,$id,type) $xth(me,dflt,line,type)
  }
  
  # nastavit meno
  set optl [xth_me_cmds_get_line_option $opts id]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,name) [lindex $optl 0]
    set opts [lindex $optl 1]
  }
  # prejde vsetky riadky a pohlada meno tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln id]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,name) [lindex $optl 0]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit reversion
  set xth(me,cmds,$id,reverse) 0
  set optl [xth_me_cmds_get_line_option $opts reverse]
  if {[lindex $optl 2]} {
    #puts ">>$opts<< = >>$optl<<"
    set xth(me,cmds,$id,reverse) [xth_me_cmds_get_bool [lindex $optl 0]]
    set opts [lindex $optl 1]
    #puts "$xth(me,cmds,$id,reverse) >>$opts<<"
  }
  # prejde vsetky riadky a pohlada reverse tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln reverse]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,reverse) [xth_me_cmds_get_bool [lindex $optl 0]]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit close
  set xth(me,cmds,$id,close) -1
  set optl [xth_me_cmds_get_line_option $opts close]
  if {[lindex $optl 2]} {
    set xth(me,cmds,$id,close) [xth_me_cmds_get_onoffauto [lindex $optl 0]]
    set opts [lindex $optl 1]
  }
  # prejde vsetky riadky a pohlada reverse tam
  set newlines {}
  foreach ln $lines {
    set optl [xth_me_cmds_get_option $ln close]
    if {[lindex $optl 2]} {
      set xth(me,cmds,$id,close) [xth_me_cmds_get_onoffauto [lindex $optl 0]]
      set ln [lindex $optl 1]
      if {[string length $ln] > 0} {
	lappend newlines $ln
      }
    } else {
      lappend newlines $ln
    }
  }
  set lines $newlines
  
  # nastavit options
  regsub {^\s*} $opts "" opts
  regsub {\s*$} $opts "" opts
  set xth(me,cmds,$id,options) $opts

  # vlozi body
  set has_some 0
  set opts {}
  set rsz {}
  set lsz {}
  set smth {}
  set rot {}
  foreach ln $lines {
    set what 0
    set cmt 0
    if {[regexp {^\s*\!?\s*(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s*(\#.*)?$} \
	  $ln dum x1 y1 x2 y2 x y cmt] && (![catch {expr $x * $y * $x1 * $y1 * $x2 * $y2}])} {
      set what 2
    } elseif {[regexp {^\s*\!?\s*(\S+)\s+(\S+)\s*(\#.*)?$} $ln dum x y cmt] && (![catch {expr $x * $y}])} {
      set x1 {}
      set y1 {}
      set x2 {}
      set y2 {}
      set what 1
    } elseif {$has_some} {
      # skusi jednotlive options rotation size r-size l-size smooth
      set cmt $ln
      set optl [xth_me_cmds_get_option $ln orientation]
      if {[lindex $optl 2]} {
	set rot [lindex $optl 0]
	set cmt [lindex $optl 1]
      } else {      
	set optl [xth_me_cmds_get_option $ln orient]
	if {[lindex $optl 2]} {
	  set rot [lindex $optl 0]
	  set cmt [lindex $optl 1]
	} else {
	  set optl [xth_me_cmds_get_option $ln smooth]
	  if {[lindex $optl 2]} {
	    set smth [xth_me_cmds_get_onoffauto [lindex $optl 0]]
	    set cmt [lindex $optl 1]
	  } else {
	    set optl [xth_me_cmds_get_option $ln size]
	    if {[lindex $optl 2]} {
	      switch $xth(me,cmds,$id,type) {
		slope {
		  set lsz [expr [lindex $optl 0]]
		}
		default {
		  set rsz [expr [lindex $optl 0] / 2.0]
		  set lsz [expr [lindex $optl 0] / 2.0]
		}
	      }
	      set cmt [lindex $optl 1]
	    } else {
	      set optl [xth_me_cmds_get_option $ln r-size]
	      if {[lindex $optl 2]} {
		set rsz [lindex $optl 0]
		set cmt [lindex $optl 1]
	      } else {
		set optl [xth_me_cmds_get_option $ln l-size]
		if {[lindex $optl 2]} {
		  set lsz [lindex $optl 0]
		  set cmt [lindex $optl 1]
		}
	      }
	    }
	  }
	}
      }
      regsub {^\s*} $cmt {} cmt
    } else {
      regsub {^\s*} $ln {} ln
      set cmt $ln
    }
    if {$what == 0} {
      if {[string length $cmt] > 0} {
	if {[string length $opts] > 0} {
	  set opts "$opts\n$cmt"
	} else {
	  set opts "$cmt"
	}
      }
    } else {
      if {$has_some} {
	xth_me_cmds_create_line_point $id \
	  [expr [llength $xth(me,cmds,$id,xplist)] - 1] $mode \
	  $px $py $px2 $py2 $x1 $y1 $smth $rot $rsz $lsz $opts 1.0
	set opts {}
	set rsz {}
	set lsz {}
	set smth {}
	set rot {}
      }
      set has_some 1
      set px $x
      set py $y
      set px1 $x1
      set py1 $y1
      set px2 $x2
      set py2 $y2
    }
  }
  if {$has_some} {
    xth_me_cmds_create_line_point $id \
      [expr [llength $xth(me,cmds,$id,xplist)] - 1] $mode \
      $px $py $px2 $py2 {} {} $smth $rot $rsz $lsz $opts 1.0
  }

  if {$mode == 1} {
    set xth(me,cmds,$id,close) 0
  } else {
    xth_me_cmds_postprocess_line $id
  }
  xth_me_cmds_update_list $id
  xth_me_cmds_update_line_data $id
  if {$mode} {
    xth_me_unredo_action [mc "creating line"] \
      "xth_me_cmds_delete $id\nxth_me_cmds_set_mode 0" \
      "xth_me_cmds_undelete $id 0 [lsearch $xth(me,cmds,xlist) $id]\nxth_me_cmds_set_mode 2"  
    xth_me_cmds_select $id
    xth_me_cmds_start_linept_insert
  }
}


proc xth_me_cmds_postprocess_line {id} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]
  if {$lix < 0} {
    return
  }

  # overi uzavretie
  set postclose 0
  if {$xth(me,cmds,$id,close) != 0} {
      if {($xth(me,cmds,$id,[lindex $xl 0],x) == $xth(me,cmds,$id,[lindex $xl $lix],x)) && \
	($xth(me,cmds,$id,[lindex $xl 0],y) == $xth(me,cmds,$id,[lindex $xl $lix],y)) && \
	($lix > 0)} {
	set xth(me,cmds,$id,close) 1
      } else {
        if {$xth(me,cmds,$id,close) == 1} {
          set postclose 1
        }
        set xth(me,cmds,$id,close) 0
      }
  }
  
  if {$xth(me,cmds,$id,close)} {
    set fid [lindex $xl 0]
    set lid [lindex $xl $lix]
    if {$xth(me,cmds,$id,$fid,idn)} {
      set xth(me,cmds,$id,$lid,idn) $xth(me,cmds,$id,$fid,idn)
      set xth(me,cmds,$id,$lid,xn) $xth(me,cmds,$id,$fid,xn)
      set xth(me,cmds,$id,$lid,yn) $xth(me,cmds,$id,$fid,yn)
    }
    if {$xth(me,cmds,$id,$lid,idp)} {
      set xth(me,cmds,$id,$fid,idp) $xth(me,cmds,$id,$lid,idp)
      set xth(me,cmds,$id,$fid,xp) $xth(me,cmds,$id,$lid,xp)
      set xth(me,cmds,$id,$fid,yp) $xth(me,cmds,$id,$lid,yp)
    }
  }

  # overi smoothness
  if {$lix == 0} {
    set pid [lindex $xth(me,cmds,$id,xplist) 0]
    if {($xth(me,cmds,$id,$pid,smooth) == -1) && \
	$xth(me,cmds,$id,$pid,idp) && \
	$xth(me,cmds,$id,$pid,idn)} {
      set xth(me,cmds,$id,$pid,smooth) [xth_me_cmds_are_smooth \
	$xth(me,cmds,$id,$pid,xp) $xth(me,cmds,$id,$pid,yp) \
	$xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	$xth(me,cmds,$id,$pid,xn) $xth(me,cmds,$id,$pid,yn)]
    } elseif {$xth(me,cmds,$id,$pid,smooth) == -1} {
      set xth(me,cmds,$id,$pid,smooth) 0
    }
    return
  }
  
  # prejde vsetky body
  set lid [lindex $xl $lix]
  set fid [lindex $xl 0]
  set cls $xth(me,cmds,$id,close)
  for {set ix 0} {$ix <= $lix} {incr ix} {
    set pid [lindex $xl $ix]
    if {($ix == 0) && $cls} {
      set idp $xth(me,cmds,$id,$lid,idp)
    } else {
      set idp $xth(me,cmds,$id,$pid,idp)
    }
    if {($ix == $lix) && $cls} {
      set idn $xth(me,cmds,$id,$fid,idn)
    } else {
      set idn $xth(me,cmds,$id,$pid,idn)
    }
    if {$idn && $idp && ($xth(me,cmds,$id,$pid,smooth) == -1)} {
      set x $xth(me,cmds,$id,$pid,x)
      set y $xth(me,cmds,$id,$pid,y)
      if {($ix == 0) && $cls} {
	set xp $xth(me,cmds,$id,$lid,xp)
	set yp $xth(me,cmds,$id,$lid,yp)
      } else {
	set xp $xth(me,cmds,$id,$pid,xp)
	set yp $xth(me,cmds,$id,$pid,yp)
      }
      if {($ix == $lix) && $cls} {
	set xn $xth(me,cmds,$id,$fid,xn)
	set yn $xth(me,cmds,$id,$fid,yn)
      } else {
	set xn $xth(me,cmds,$id,$pid,xn)
	set yn $xth(me,cmds,$id,$pid,yn)
      }
      set xth(me,cmds,$id,$pid,smooth) [xth_me_cmds_are_smooth $xp $yp $x $y $xn $yn]
    } elseif {$xth(me,cmds,$id,$pid,smooth) == -1} {
      set xth(me,cmds,$id,$pid,smooth) 0
    }
  }
  
  if {$postclose} {
    xth_me_cmds_close_line $id 0
  }
  
}


proc xth_me_cmds_update_area_data {id} {

  global xth
  set xl $xth(me,cmds,$id,xllist)
  set lix [expr [llength $xl] - 2]

  set d "area $xth(me,cmds,$id,type)"
  set xth(me,dflt,area,type) $xth(me,cmds,$id,type)

  # options
  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,area,options) $xth(me,cmds,$id,options)

  for {set ix 0} {$ix <= $lix} {incr ix} {
    set lid [lindex $xl $ix]
    set d "$d\n  $xth(me,cmds,$id,$lid,txt)"
  }

  set xth(me,cmds,$id,data) "$d\nendarea"
  
}



proc xth_me_cmds_update_line_data {id} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]

  set d "line $xth(me,cmds,$id,type)"
  set xth(me,dflt,line,type) $xth(me,cmds,$id,type)

  # id
  if {[string length $xth(me,cmds,$id,name)] > 0} {
    set d "$d -id $xth(me,cmds,$id,name)"
  }
  
  if {$lix > -1} {
  
    # close
    if {$xth(me,cmds,$id,close)} {
      set d "$d -close on"
    } elseif {($xth(me,cmds,$id,[lindex $xl 0],x) == $xth(me,cmds,$id,[lindex $xl $lix],x)) && \
	($xth(me,cmds,$id,[lindex $xl 0],y) == $xth(me,cmds,$id,[lindex $xl $lix],y))} {
      set d "$d -close off"
    }

    # reverse
    if {$xth(me,cmds,$id,reverse)} {
      set d "$d -reverse on"
    }
    
  }
  
  if {[string length $xth(me,cmds,$id,options)] > 0} {
    set d "$d $xth(me,cmds,$id,options)"
  }
  set xth(me,dflt,line,options) $xth(me,cmds,$id,options)
  
  set csbar $d
  
  set xth(me,cmds,$id,data_ln) "$d\nendline"
  set xth(me,cmds,$id,data_pt) {}
  
  for {set ix 0} {$ix <= $lix} {incr ix} {
    set cto 0
    set pid [lindex $xl $ix]
    if {$ix == 0} {
      set crd [format "  %s %s" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]
    } else {
      if {$xth(me,cmds,$id,$pid,idp) || $xth(me,cmds,$id,$ppid,idn)} {
	if {$xth(me,cmds,$id,$ppid,idn)} {
	  set x1 $xth(me,cmds,$id,$ppid,xn)
	  set y1 $xth(me,cmds,$id,$ppid,yn)
	} else {
	  set x1 $xth(me,cmds,$id,$ppid,x)
	  set y1 $xth(me,cmds,$id,$ppid,y)
	}
	if {$xth(me,cmds,$id,$pid,idp)} {
	  set x2 $xth(me,cmds,$id,$pid,xp)
	  set y2 $xth(me,cmds,$id,$pid,yp)
	} else {
	  set x2 $xth(me,cmds,$id,$pid,x)
	  set y2 $xth(me,cmds,$id,$pid,y)
	}
	set crd [format "  %s %s %s %s" $x1 $y1 $x2 $y2]
	set cto 1
      } else {
	set crd " "
      }
      set crd "$crd [format "%s %s" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]"
    }
    set ptd "$crd"
    # rotation lsize rsize smooth options
    if {[string length $xth(me,cmds,$id,$pid,rotation)] > 0} {
      set ptd "$ptd\n  orientation $xth(me,cmds,$id,$pid,rotation)"
    }

    if {$cto && (! $xth(me,cmds,$id,$pid,smooth))} {
      set ptd "$ptd\n  smooth off"
    }
    
    if {[string length $xth(me,cmds,$id,$pid,ls)] > 0} {
      set ptd "$ptd\n  l-size $xth(me,cmds,$id,$pid,ls)"
    }

    if {[string length $xth(me,cmds,$id,$pid,rs)] > 0} {
      set ptd "$ptd\n  r-size $xth(me,cmds,$id,$pid,rs)"
    }
    
    if {[string length $xth(me,cmds,$id,$pid,options)] > 0} {
      set popts $xth(me,cmds,$id,$pid,options)
      regsub {\s*$} $popts {} popts
      if {[string length $popts] > 0} {
	regsub -all -line {^\s*} $popts {  } popts
      }
      set ptd "$ptd\n$popts"
    }
    
    lappend xth(me,cmds,$id,data_pt) $ptd
    
    set d "$d\n$ptd"
    set ppid $pid
  }

  set xth(me,cmds,$id,data) "$d\nendline"
  set xth(me,cmds,$id,sbar) $csbar
  catch {
  set ttype [lindex $csbar 1]
  if {([string length $ttype] > 0)} {
    set ttyp [ mc "line $ttype"]
    if {![string equal $ttype $ttyp]} {
      set nd [lreplace $csbar 1 1 "$ttype:$ttyp"]
      set xth(me,cmds,$id,sbar) "$nd"
    }
  }
  } 
  
}

proc xth_me_cmds_are_smooth {xp yp x y xn yn} {
  set rv 1
  set d1 [expr hypot($x - $xp,$y - $yp)]
  set d2 [expr hypot($xn - $x,$yn - $y)]
  if {($d2 > 0) && ($d1 > 0)} {
    set a1 [expr atan2($y - $yp, $x - $xp) / 3.14159265359 * 180.0];                        
    set a2 [expr atan2($yn - $y, $xn - $x) / 3.14159265359 * 180.0];
    if {($a2 - $a1) > 180.0} {
      set a2 [expr $a2 - 360.0]
    }
    if {($a2 - $a1) < -180.0} {
      set a2 [expr $a2 + 360.0]
    }
    if {($a2 > ($a1 + 5.0)) || ($a2 < ($a1 - 5.0))} {
      set rv 0
    }
  }        
  return $rv
}


proc xth_me_cmds_select_linept {id pid} {
  global xth
  if {$xth(me,unredook)} {
    xth_me_cmds_update {}
  }
  xth_me_cmds_update_linept_ctrl $id $pid
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  $xth(ctrl,me,line).pl.l selection clear 0 end
  $xth(ctrl,me,line).pl.l selection set $ix $ix
  $xth(ctrl,me,line).pl.l see $ix
  set xth(me,cmds,selpid) $pid
}


proc xth_me_cmds_toggle_line_close {} {
  global xth
  set id $xth(me,cmds,selid)
  set ncls $xth(ctrl,me,line,close)
  set xth(ctrl,me,line,close_tmp) $xth(ctrl,me,line,close)
  set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)
  $xth(ctrl,me,line).cls configure -variable xth(ctrl,me,line,close_tmp)
  xth_me_cmds_update {}
  set xth(ctrl,me,line,close) $ncls
  if {$ncls && (!$xth(me,cmds,$id,close))} {
    xth_me_cmds_close_line $id
  } elseif {(!$ncls) && $xth(me,cmds,$id,close)} {
    xth_me_cmds_open_line $id
  }
  $xth(ctrl,me,line).cls configure -variable xth(ctrl,me,line,close)

}


proc xth_me_cmds_toggle_line_reverse {} {
  global xth
  set id $xth(me,cmds,selid)
  set nrev $xth(ctrl,me,line,reverse)
  set xth(ctrl,me,line,reverse_tmp) $xth(ctrl,me,line,reverse)
  set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
  $xth(ctrl,me,line).rev configure -variable xth(ctrl,me,line,reverse_tmp)
  xth_me_cmds_update {}
  set xth(ctrl,me,line,reverse) $nrev
  set xth(me,unredola) "line reversion"
  xth_me_cmds_update {}
  if {[llength $xth(me,cmds,$id,xplist)] > 1} {
    xth_me_cmds_move_lineln $id [lindex $xth(me,cmds,$id,xplist) 0] [lindex $xth(me,cmds,$id,xplist) 1]
  }
  $xth(ctrl,me,line).rev configure -variable xth(ctrl,me,line,reverse)
}


proc xth_me_cmds_toggle_linept {} {

  global xth

  set nidp $xth(ctrl,me,linept,idp)
  set xth(ctrl,me,linept,idp_tmp) $nidp
  set nidn $xth(ctrl,me,linept,idn)
  set xth(ctrl,me,linept,idn_tmp) $nidn
  set nsmooth $xth(ctrl,me,linept,smooth)
  set xth(ctrl,me,linept,smooth_tmp) $nsmooth
  set nrotid $xth(ctrl,me,linept,rotid)
  set xth(ctrl,me,linept,rotid_tmp) $nrotid
  set nrsid $xth(ctrl,me,linept,rsid)
  set xth(ctrl,me,linept,rsid_tmp) $nrsid
  set nlsid $xth(ctrl,me,linept,lsid)
  set xth(ctrl,me,linept,lsid_tmp) $nlsid

  set lpc $xth(ctrl,me,linept)
  $lpc.cbp configure -variable xth(ctrl,me,linept,idp_tmp)
  $lpc.cbn configure -variable xth(ctrl,me,linept,idn_tmp)
  $lpc.cbs configure -variable xth(ctrl,me,linept,smooth_tmp)
  $lpc.rotc configure -variable xth(ctrl,me,linept,rotid_tmp)
  $lpc.rszc configure -variable xth(ctrl,me,linept,rsid_tmp)
  $lpc.lszc configure -variable xth(ctrl,me,linept,lsid_tmp)

  update idletasks
  xth_me_cmds_update {}
  
  set id $xth(me,cmds,selid)
  set pid $xth(me,cmds,selpid)

  if {(!$nidp) && $xth(me,cmds,$id,$pid,idp)} {
    set xth(ctrl,me,linept,xp) {}
    set xth(ctrl,me,linept,yp) {}
    set xth(ctrl,me,linept,smooth) 0
  } elseif {$nidp && (!$xth(me,cmds,$id,$pid,idp))} {
    set crds [xth_me_cmds_get_default_linept_cp 1 $id $pid]
    set xth(ctrl,me,linept,xp) [lindex $crds 0]
    set xth(ctrl,me,linept,yp) [lindex $crds 1]
  }

  if {(!$nidn) && $xth(me,cmds,$id,$pid,idn)} {
    set xth(ctrl,me,linept,xn) {}
    set xth(ctrl,me,linept,yn) {}
    set xth(ctrl,me,linept,smooth) 0
  } elseif {$nidn && (!$xth(me,cmds,$id,$pid,idn))} {
    set crds [xth_me_cmds_get_default_linept_cp 0 $id $pid]
    set xth(ctrl,me,linept,xn) [lindex $crds 0]
    set xth(ctrl,me,linept,yn) [lindex $crds 1]
  }

  if {$nsmooth != $xth(me,cmds,$id,$pid,smooth)} {
    if {$nsmooth} {
      if {!$xth(me,cmds,$id,$pid,idp)} {
	set crds [xth_me_cmds_get_default_linept_cp 1 $id $pid]
	set xth(ctrl,me,linept,xp) [lindex $crds 0]
	set xth(ctrl,me,linept,yp) [lindex $crds 1]
      }
      if {!$xth(me,cmds,$id,$pid,idn)} {
	set crds [xth_me_cmds_get_default_linept_cp 0 $id $pid]
	set xth(ctrl,me,linept,xn) [lindex $crds 0]
	set xth(ctrl,me,linept,yn) [lindex $crds 1]
      }
    }
    set xth(ctrl,me,linept,smooth) $nsmooth
  }
  
  if {(!$nrotid) && ([string length $xth(me,cmds,$id,$pid,rotation)] > 0)} {
    set xth(ctrl,me,linept,rot) {}
  } elseif {$nrotid && ([string length $xth(me,cmds,$id,$pid,rotation)] < 1)} {
    set xth(ctrl,me,linept,rot) [xth_me_cmds_get_default_rotation $id $pid]
  }
  
  if {(!$nrsid) && ([string length $xth(me,cmds,$id,$pid,rs)] > 0)} {
    set xth(ctrl,me,linept,rs) {}
  } elseif {$nrsid && ([string length $xth(me,cmds,$id,$pid,rs)] < 1)} {
    set xth(ctrl,me,linept,rs) 40.0
  }
  
  if {(!$nlsid) && ([string length $xth(me,cmds,$id,$pid,ls)] > 0)} {
    set xth(ctrl,me,linept,ls) {}
  } elseif {$nlsid && ([string length $xth(me,cmds,$id,$pid,ls)] < 1)} {
    set xth(ctrl,me,linept,ls) 40.0
  }
  
  xth_me_cmds_update {}

  $lpc.cbp configure -variable xth(ctrl,me,linept,idp)
  $lpc.cbn configure -variable xth(ctrl,me,linept,idn)
  $lpc.cbs configure -variable xth(ctrl,me,linept,smooth)
  $lpc.rotc configure -variable xth(ctrl,me,linept,rotid)
  $lpc.rszc configure -variable xth(ctrl,me,linept,rsid)
  $lpc.lszc configure -variable xth(ctrl,me,linept,lsid)
  update idletasks
}

proc xth_me_cmds_update_line {id pid ntype nname nopts nrev nx ny nxp nyp \
  nxn nyn nsmth nrot nrs nls nptopts nptoptpos} {

  global xth
  
  set otype $xth(me,cmds,$id,type)
  set oname $xth(me,cmds,$id,name)
  set oopts $xth(me,cmds,$id,options)
  set orev $xth(me,cmds,$id,reverse)
  set oline "$otype $oname $oopts $orev"
  
  if {$pid > 0} {
    set ox $xth(me,cmds,$id,$pid,x)
    set oy $xth(me,cmds,$id,$pid,y)
    set oxp $xth(me,cmds,$id,$pid,xp)
    set oyp $xth(me,cmds,$id,$pid,yp)
    set oxn $xth(me,cmds,$id,$pid,xn)
    set oyn $xth(me,cmds,$id,$pid,yn)
    set osmth $xth(me,cmds,$id,$pid,smooth)
    set orot $xth(me,cmds,$id,$pid,rotation)
    set ors $xth(me,cmds,$id,$pid,rs)
    set ols $xth(me,cmds,$id,$pid,ls)
    set optopts $xth(me,cmds,$id,$pid,options)
    set optoptpos $xth(me,cmds,$id,$pid,optpos)
    set olinept "$ox $oy $oxp $oyp $oxn $oyn $osmth $orot $ors $ols $optopts"
  } else {
    set ox {}
    set oy {}
    set oxp {}
    set oyp {}
    set oxn {}
    set oyn {}
    set osmth {}
    set orot {}
    set ors {}
    set ols {}
    set optopts {}
    set optoptpos {}
    set olinept ""
  }


  if {[string length $ntype] < 1} {
    set ntype $otype
  }

  set optsredo {}
  set optsundo {}

  if {$xth(gui,me,type_reset_options) && (![string equal $ntype $otype]) && [string equal $nopts $oopts]} {
    set nopts {}
    set nrs {}
    set nls {}
    set nrot {} 
    foreach xpid $xth(me,cmds,$id,xplist) {
      if {$xpid > 0} {
	foreach item {rs ls rotation} {
	  if {[string length $xth(me,cmds,$id,$xpid,$item)] > 0} {
	    set optsredo "$optsredo set xth(me,cmds,$id,$xpid,$item) {}; "
	    set optsundo "$optsundo set xth(me,cmds,$id,$xpid,$item) [list $xth(me,cmds,$id,$xpid,$item)]; "
	  }
	}
      }
    }
  }

  if {[regexp {^([^ :]+)\:([^ :]+)$} $ntype dum xntype xstype]} {
    if {![string equal $xntype u]} {
      set ntype $xntype
      set nopts [regsub -all {(^|\s+)\-subtype\s+\S+} $nopts {}]
      set nopts [regsub -all {^\s+|\s+$} $nopts {}]
      set nopts "-subtype $xstype $nopts"
    }
  }     
    
  # uprav options
  regsub {^\s*} $nopts "" nopts
  regsub {\s*$} $nopts "" nopts
  
  set nline "$ntype $nname $nopts $nrev"
  
  if {$pid > 0} {
    
    if {[catch {expr $nx}]} {
      set nx $ox
    }
    set nx [expr double($nx)]
    if {[catch {expr $ny}]} {
      set ny $oy
    }
    set ny [expr double($ny)]

    if {[string length $nxp] > 0} {
      if {[catch {expr $nxp}]} {
	set nxp $oxp
      }
      set nxp [expr double($nxp)]
    }
    if {[string length $nyp] > 0} {
      if {[catch {expr $nyp}]} {
	set nyp $oyp
      }
      set nyp [expr double($nyp)]
    }    
    if {([string length $nxp] < 1) || ([string length $nyp] < 1)} {
      set nxp {}
      set nyp {}
      set nsmth 0
    }
    
    if {[string length $nxn] > 0} {
      if {[catch {expr $nxn}]} {
	set nxn $oxn
      }
      set nxn [expr double($nxn)]
    }
    if {[string length $nyn] > 0} {
      if {[catch {expr $nyn}]} {
	set nyn $oyn
      }
      set nyn [expr double($nyn)]
    }    
    if {([string length $nxn] < 1) || ([string length $nyn] < 1)} {
      set nxn {}
      set nyn {}
      set nsmth 0
    }
    
    if {$nsmth} {
      set crds [xth_me_cmds_get_smoothed_cp 0 $nxp $nyp $nx $ny $nxn $nyn]
      set nxp [lindex $crds 0]
      set nyp [lindex $crds 1]
      set nxn [lindex $crds 2]
      set nyn [lindex $crds 3]
    }
    
    if {[string length $nrot] > 0} {
      if {[catch {expr $nrot}]} {
	set nrot $orot
      } elseif {($nrot < 0.0) || ($nrot >= 360.0)} {
	set nrot $orot
      } else {
	set nrot [expr double($nrot)]
      }
    }

    if {[string length $nrs] > 0} {
      if {[catch {expr $nrs}]} {
	set nrs $ors
      } elseif {$nrs <= 0.0} {
	set nrs $ors
      } else {
	set nrs [expr double($nrs)]
      }
    }

    if {[string length $nls] > 0} {
      if {[catch {expr $nls}]} {
	set nls $ols
      } elseif {$nls <= 0.0} {
	set nls $ols
      } else {
	set nls [expr double($nls)]
      }
    }
    
    # uprav options
    regsub {\s*$} $nptopts "" nptopts
    if {[string length $nptopts] > 0} {
      regsub {$} $nptopts "\n" nptopts
    }

    set nlinept "$nx $ny $nxp $nyp $nxn $nyn $nsmth $nrot $nrs $nls $nptopts"
  } else {
    set nlinept ""
  }

  # ak je v niecom rozdiel, tak to updatni
  if {![string equal "$nline $nlinept" "$oline $olinept"]} {
    #puts "new\n{$nline}\n===\n{$nlinept}\n===\nold\n{$oline}\n===\n{$olinept}\n===\n"
    xth_me_unredo_action [mc "line changes"] \
      "xth_me_cmds_update_line $id $pid $otype [list $oname] [list $oopts] $orev {$ox} {$oy} {$oxp} {$oyp} {$oxn} {$oyn} {$osmth} {$orot} {$ors} {$ols} [list $optopts] {$optoptpos}; $optsundo xth_me_cmds_select {$id $pid}" \
      "xth_me_cmds_update_line $id $pid $ntype [list $nname] [list $nopts] $nrev {$nx} {$ny} {$nxp} {$nyp} {$nxn} {$nyn} {$nsmth} {$nrot} {$nrs} {$nls} [list $nptopts] {$nptoptpos}; $optsredo xth_me_cmds_select {$id $pid}"    

    set xth(me,cmds,$id,type) $ntype
    set xth(me,cmds,$id,name) $nname 
    set xth(me,cmds,$id,options) $nopts 
    set xth(me,cmds,$id,reverse) $nrev 
  
    if {[string length $optsredo] > 0} {
      eval $optsredo
    }
  
    if {$pid > 0} {
      set xth(me,cmds,$id,$pid,x) $nx
      set xth(me,cmds,$id,$pid,y) $ny
      set xth(me,cmds,$id,$pid,xp) $nxp
      set xth(me,cmds,$id,$pid,yp) $nyp
      if {[string length "$nxp$nyp"] > 0} {
	set xth(me,cmds,$id,$pid,idp) 1
      } else {
	set xth(me,cmds,$id,$pid,idp) 0
      }
      set xth(me,cmds,$id,$pid,xn) $nxn
      set xth(me,cmds,$id,$pid,yn) $nyn
      if {[string length "$nxn$nyn"] > 0} {
	set xth(me,cmds,$id,$pid,idn) 1
      } else {
	set xth(me,cmds,$id,$pid,idn) 0
      }
      set xth(me,cmds,$id,$pid,smooth) $nsmth 
      set xth(me,cmds,$id,$pid,rotation) $nrot
      set xth(me,cmds,$id,$pid,rs) $nrs
      set xth(me,cmds,$id,$pid,ls) $nls
      set xth(me,cmds,$id,$pid,options) $nptopts 
      set xth(me,cmds,$id,$pid,optpos) $nptoptpos 
      xth_me_cmds_update_linept_list $id $pid
      set cpid 0
      if {$xth(me,cmds,$id,close)} {
	set fpid [lindex $xth(me,cmds,$id,xplist) 0]
	set lpid [lindex $xth(me,cmds,$id,xplist) [expr [llength $xth(me,cmds,$id,xplist)] - 2]]
	if {$pid == $fpid} {
	  set cpid $lpid
	} elseif {$pid == $lpid} {
	  set cpid $fpid
	}
      }
      if {$cpid > 0} {
	set xth(me,cmds,$id,$cpid,x) $nx
	set xth(me,cmds,$id,$cpid,y) $ny
	xth_me_cmds_move_linept $id $cpid
	set xth(me,cmds,$id,$cpid,xp) $nxp
	set xth(me,cmds,$id,$cpid,yp) $nyp
	set xth(me,cmds,$id,$cpid,idp) $xth(me,cmds,$id,$pid,idp)
	set xth(me,cmds,$id,$cpid,xn) $nxn
	set xth(me,cmds,$id,$cpid,yn) $nyn
	set xth(me,cmds,$id,$cpid,idn) $xth(me,cmds,$id,$pid,idn)
	set xth(me,cmds,$id,$cpid,smooth) $nsmth 
	set ix [lsearch $xth(me,cmds,$id,xplist) $cpid]
	xth_me_cmds_update_linept_list $id $cpid
      }
      xth_me_cmds_move_linelnpt $id $pid
    }  
    xth_me_cmds_update_line_data $id
    xth_me_cmds_update_list $id    
  }
  
}


proc xth_me_cmds_update_line_vars {id pid} {

  global xth
  set xth(ctrl,me,line,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,line,name) $xth(me,cmds,$id,name)
  set xth(ctrl,me,line,opts) $xth(me,cmds,$id,options)
  set xth(ctrl,me,line,reverse) $xth(me,cmds,$id,reverse)
  set xth(ctrl,me,line,close) $xth(me,cmds,$id,close)

  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,line,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,line,themetype) {}
  } else {
    set xth(ctrl,me,line,themetype) [lindex $xth(me,themes,$at,line,showlist) $tx]
  }
  

  xth_me_cmds_update_linept_ctrl $id $pid
    
}

proc xth_me_cmds_update_area_vars {id} {

  global xth
  set xth(ctrl,me,ac,type) $xth(me,cmds,$id,type)
  set xth(ctrl,me,ac,opts) $xth(me,cmds,$id,options)

  set at [lindex $xth(me,themes,list) $xth(me,acttheme)]
  set tx [lsearch -exact $xth(me,themes,$at,area,hidelist) $xth(me,cmds,$id,type)]
  if {$tx < 0} {
    set xth(ctrl,me,ac,themetype) {}
  } else {
    set xth(ctrl,me,ac,themetype) [lindex $xth(me,themes,$at,area,showlist) $tx]
  }
  
}





proc xth_me_cmds_get_default_linept_cp {prv id pid} {
  global xth

  set x $xth(me,cmds,$id,$pid,x)
  set y $xth(me,cmds,$id,$pid,y)
  
  if {$prv} {
    if {$xth(me,cmds,$id,$pid,idn)} {
      set dx [expr $x - $xth(me,cmds,$id,$pid,xn)]
      set dy [expr $y - $xth(me,cmds,$id,$pid,yn)]
    } else {
      set dx 0.0
      set dy 0.0
    }
  } else {
    if {$xth(me,cmds,$id,$pid,idp)} {
      set dx [expr $x - $xth(me,cmds,$id,$pid,xp)]
      set dy [expr $y - $xth(me,cmds,$id,$pid,yp)]
    } else {
      set dx 0.0
      set dy 0.0
    }
  }
  set dd [expr hypot($dy, $dx)]
  set rd $dd

  if {$dd == 0.0} {

    set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
    if {$ppix >= 0} {  
      set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
      set xp $xth(me,cmds,$id,$ppid,x)
      set yp $xth(me,cmds,$id,$ppid,y)
    } else {
      set xp $x
      set yp $y
    }
  
    set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
    set npid [lindex $xth(me,cmds,$id,xplist) $npix]
    if {$npid > 0} {
      set xn $xth(me,cmds,$id,$npid,x)
      set yn $xth(me,cmds,$id,$npid,y)
    } else {
      set xn $x
      set yn $y
    }

    if {$prv} {
      set dx [expr $xp - $xn]
      set dy [expr $yp - $yn]
    } else {
      set dx [expr $xn - $xp]
      set dy [expr $yn - $yp]
    }
    set dd [expr hypot($dy, $dx)]
 
  }
  
  if {$dd == 0.0} {
    set dx 0.0
    set dy 1.0
    set dd 1.0
    set rd 40.0
  }
  
  if {$rd == 0.0} {
    if {$prv} {
      set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
      if {$ppix >= 0} {
	set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
	if {$xth(me,cmds,$id,$ppid,idn)} {
	  set rdx [expr $xth(me,cmds,$id,$ppid,xn) - $xth(me,cmds,$id,$ppid,x)]
	  set rdy [expr $xth(me,cmds,$id,$ppid,yn) - $xth(me,cmds,$id,$ppid,y)]
	  set rd [expr hypot($rdy,$rdx)]
	}
      }        
    } else {
      set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
      set npid [lindex $xth(me,cmds,$id,xplist) $npix]
      if {$npid > 0} {
	if {$xth(me,cmds,$id,$npid,idp)} {
	  set rdx [expr $xth(me,cmds,$id,$npid,xp) - $xth(me,cmds,$id,$npid,x)]
	  set rdy [expr $xth(me,cmds,$id,$npid,yp) - $xth(me,cmds,$id,$npid,y)]
	  set rd [expr hypot($rdy,$rdx)]
	}
      }        
    }
  }
  
  if {$rd == 0.0} {
    set rd 40.0
  }
  
  return [list [expr double([format "%.2f" [expr $x + $dx / $dd * $rd]])] \
    [expr double([format "%.2f" [expr $y + $dy / $dd * $rd]])]]
  
}


proc xth_me_cmds_get_smoothed_cp {which xp yp x y xn yn} {

  set dxp [expr $x - $xp]
  set dyp [expr $y - $yp]
  set dp [expr hypot($dxp,$dyp)]

  set dxn [expr $xn - $x]
  set dyn [expr $yn - $y]
  set dn [expr hypot($dxn,$dyn)]
  
  if {($dp == 0.0) || ($dn == 0.0)} {
    return [list $xp $yp $xn $yn]
  }
  
  if {$which < 0} {
    set xp [expr $x - $dxn / $dn * $dp]
    set yp [expr $y - $dyn / $dn * $dp]
  } elseif {$which > 0} {
    set xn [expr $x + $dxp / $dp * $dn]
    set yn [expr $y + $dyp / $dp * $dn]
  } else {
    set dx [expr $xn - $xp]
    set dy [expr $yn - $yp]
    set d [expr hypot($dx,$dy)]
    if {$d == 0.0} {
       set dx [expr -1.0 * $dyp]
       set dy $dxp
       set d $dp
    }
    set xp [expr $x - $dx / $d * $dp]
    set yp [expr $y - $dy / $d * $dp]      
    set xn [expr $x + $dx / $d * $dn]
    set yn [expr $y + $dy / $d * $dn]
  }

  return [list [expr double([format "%.2f" $xp])] \
     [expr double([format "%.2f" $yp])] [expr double([format "%.2f" $xn])] \
     [expr double([format "%.2f" $yn])]]
}


proc xth_me_cmds_get_default_rotation {id pid} {

  global xth

  set x $xth(me,cmds,$id,$pid,x)
  set y $xth(me,cmds,$id,$pid,y)
  set dp 0.0
  set dn 0.0

  if {$xth(me,cmds,$id,$pid,idp) || $xth(me,cmds,$id,$pid,idn)} {

    set xp $xth(me,cmds,$id,$pid,xp)
    set yp $xth(me,cmds,$id,$pid,yp)
    set dp [expr hypot($xp - $x, $yp - $y)]
    set xn $xth(me,cmds,$id,$pid,xn)
    set yn $xth(me,cmds,$id,$pid,yn)
    set dn [expr hypot($xn - $x, $yn - $y)]
    
  } else {

    set ppix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] - 1]
    if {$ppix >= 0} {
      set ppid [lindex $xth(me,cmds,$id,xplist) $ppix]
      set xp $xth(me,cmds,$id,$ppid,x)
      set yp $xth(me,cmds,$id,$ppid,y)
      set dp [expr hypot($xp - $x, $yp - $y)]
    } else {
      set xp {}
      set yp {}
    }
    
    set npix [expr [lsearch $xth(me,cmds,$id,xplist) $pid] + 1]
    set npid [lindex $xth(me,cmds,$id,xplist) $npix]
    if {$npid > 0} {
      set xn $xth(me,cmds,$id,$npid,x)
      set yn $xth(me,cmds,$id,$npid,y)
      set dn [expr hypot($xn - $x, $yn - $y)]
    } else {
      set xn {}
      set yn {}
    }
  }
  
  if {($dp > 0.0) && ($dn > 0.0)} {
    if {$dp > $dn} {
      set xn [expr $x + ($xn - $x) / $dn * $dp]
      set yn [expr $y + ($yn - $y) / $dn * $dp]
    } else {
      set xp [expr $x + ($xp - $x) / $dp * $dn]
      set yp [expr $y + ($yp - $y) / $dp * $dn]
    }
  }

  if {[string length $xn] < 1} {
    set xn $x
    set yn $y
  } 

  if {[string length $xp] < 1} {
    set xp $x
    set yp $y
  } 

  set rr [expr 360.0 - atan2($yn - $yp,$xn - $xp) / 3.14159265359 * 180.0];
  while {$rr >= 360.0} {set rr [expr $rr - 360.0]};
  while {$rr < 0.0} {set rr [expr $rr + 360.0]};
  return [format "%.1f" $rr]
  
}


proc xth_me_cmds_update_linept_list {id pid} {
  global xth
  set ix [lsearch $xth(me,cmds,$id,xplist) $pid]
  set xth(me,cmds,$id,plist) \
    [lreplace $xth(me,cmds,$id,plist) $ix $ix [format "%7.2f %7.2f" $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)]]
}


proc xth_me_cmds_close_line {id {unredo 1}} {
  global xth
  # prida bod ak treba, ak je novy, oznaci ho
  set xl $xth(me,cmds,$id,xplist)
  set lix [expr [llength $xl] - 2]
  set fpid [lindex $xl 0]
  set nwpid $xth(me,cmds,selpid)
  set olpid $xth(me,cmds,selpid)
  if {($lix < 2) || \
    ($xth(me,cmds,$id,$fpid,x) != $xth(me,cmds,$id,[lindex $xl $lix],x)) || \
    ($xth(me,cmds,$id,$fpid,y) != $xth(me,cmds,$id,[lindex $xl $lix],y))} {
    set oldurok $xth(me,unredook)
    set xth(me,unredook) 0
    set iix [expr $lix + 1]
    xth_me_cmds_create_line_point $id $iix 0 \
      $xth(me,cmds,$id,$fpid,x) $xth(me,cmds,$id,$fpid,y) $xth(me,cmds,$id,$fpid,xp) $xth(me,cmds,$id,$fpid,yp) \
      $xth(me,cmds,$id,$fpid,xn) $xth(me,cmds,$id,$fpid,yn) $xth(me,cmds,$id,$fpid,smooth) {} {} {} {} 1.0
    set xth(me,unredook) $oldurok
    set nwpid $xth(me,cmds,$id,lpid)
    xth_me_cmds_select_linept $id $nwpid
    set unpoint "xth_me_cmds_delete_linept $id $nwpid"
    set repoint "xth_me_cmds_undelete_linept $id $nwpid $iix"
  } else {
    set lpid [lindex $xl $lix]
    set unpoint "xth_me_cmds_select $id\nset xth(me,cmds,$id,$lpid,xp) {$xth(me,cmds,$id,$lpid,xp)}\nset xth(me,cmds,$id,$lpid,yp) {$xth(me,cmds,$id,$lpid,yp)}\nset xth(me,cmds,$id,$lpid,idp) {$xth(me,cmds,$id,$lpid,idp)}\nset xth(me,cmds,$id,$lpid,xn) {$xth(me,cmds,$id,$lpid,xn)}\nset xth(me,cmds,$id,$lpid,yn) {$xth(me,cmds,$id,$lpid,yn)}\nset xth(me,cmds,$id,$lpid,idn) {$xth(me,cmds,$id,$lpid,idn)}\nset xth(me,cmds,$id,$lpid,smooth) {$xth(me,cmds,$id,$lpid,smooth)}\nxth_me_cmds_move_linelnpt $id $lpid"
    set repoint "xth_me_cmds_select $id\nset xth(me,cmds,$id,$lpid,xp) {$xth(me,cmds,$id,$fpid,xp)}\nset xth(me,cmds,$id,$lpid,yp) {$xth(me,cmds,$id,$fpid,yp)}\nset xth(me,cmds,$id,$lpid,idp) {$xth(me,cmds,$id,$fpid,idp)}\nset xth(me,cmds,$id,$lpid,xn) {$xth(me,cmds,$id,$fpid,xn)}\nset xth(me,cmds,$id,$lpid,yn) {$xth(me,cmds,$id,$fpid,yn)}\nset xth(me,cmds,$id,$lpid,idn) {$xth(me,cmds,$id,$fpid,idn)}\nset xth(me,cmds,$id,$lpid,smooth) {$xth(me,cmds,$id,$fpid,smooth)}\nxth_me_cmds_move_linelnpt $id $lpid"
    eval $repoint
  }
  # nastavi close
  set xth(me,cmds,$id,close) 1
  # update vars
  xth_me_cmds_update_line_vars $id $nwpid
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  if {$xth(me,cmds,mode) == 2} {
    set remode "xth_me_cmds_set_mode 0"
    set unmode "xth_me_cmds_set_mode 2"
    eval $remode
  } else {
    set remode ""
    set unmode ""
  }
  if {$unredo} {
    xth_me_unredo_action [mc "line closing"] \
    "$unpoint\nset xth(me,cmds,$id,close) 0\nxth_me_cmds_update_line_vars $id $olpid\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd \$xth(me,cmds,$id,data)\n$unmode" \
    "$repoint\nset xth(me,cmds,$id,close) 1\nxth_me_cmds_update_line_vars $id $nwpid\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd \$xth(me,cmds,$id,data)\n$remode"
  }
}


proc xth_me_cmds_open_line {id} {
  global xth
  set xth(me,cmds,$id,close) 0
  xth_me_cmds_update_line_vars $id $xth(me,cmds,selpid)
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_unredo_action [mc "line opening"] \
    "xth_me_cmds_reclose_line $id" \
    "xth_me_cmds_open_line $id"
}

proc xth_me_cmds_reclose_line {id} {
  global xth
  set xth(me,cmds,$id,close) 1
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  xth_me_cmds_update_line_vars $id $xth(me,cmds,selpid)
}


proc xth_me_cmds_get_bezier_coords {x1 y1 c1x c1y c2x c2y x2 y2} {
#  if {[llength $x1] > 1} {
#    set tlen [lindex $x1 2]
#    set rotation [lindex $x1 1]
#    set x1 [lindex $x1 0]
#  } else {
#    set rotation {}
#  }
  if {[string length $c1x] < 1} {
    set c1x $x1
    set c1y $y1
  }
  if {[string length $c2x] < 1} {
    set c2x $x2
    set c2y $y2
  }
  set q 20
#  if {[string length $rotation] > 0} {    
#    set crds [list [expr $x1 + $tlen * sin(double($rotation)/180.0*3.14159265359)] \
#      [expr $y1 + $tlen * cos(double($rotation)/180.0*3.14159265359)]]
#  } else {
    set crds {}
#  }
  for {set i 0} {$i <= $q} {incr i} {
    set t [expr $i.0 / $q.0]
    set t2 [expr pow($t,2.0)]
    set t3 [expr pow($t,3.0)]
    set t_ [expr 1.0 - $t]
    set t_2 [expr pow($t_,2.0)]
    set t_3 [expr pow($t_,3.0)]
    lappend crds [expr $t_3 * $x1 + 3.0 * $t * $t_2 * $c1x + 3.0 * $t2 * $t_ * $c2x + $t3 * $x2] \
      [expr $t_3 * $y1 + 3.0 * $t * $t_2 * $c1y + 3.0 * $t2 * $t_ * $c2y + $t3 * $y2]
  }
  return $crds
}


proc xth_me_cmds_real2can_coords {crds} {
  set x 1
  set r {}
  foreach c $crds {
    if $x {
      lappend r [xth_me_real2canx $c]
      set x 0
    } else {
      lappend r [xth_me_real2cany $c]
      set x 1
    }
  }
  return $r
}


proc xth_me_cmds_get_crds2state {id ppid pid} {
  global xth
#  set tlen [expr 0.01 * $xth(me,zoom) * $xth(gui,me,line,ticksize)]

  if {$ppid > 0} {

#    if {[lsearch $xth(me,cmds,$id,xplist) $ppid] == 0} {
#      set rot [xth_me_cmds_get_default_rotation $id $ppid]
#      set x1 [list $xth(me,cmds,$id,$ppid,x) $rot $tlen]
#    } else {
#      set rot {}
      set x1 $xth(me,cmds,$id,$ppid,x)
#    }

    set st normal
    if {$xth(me,cmds,$id,$ppid,idn) || $xth(me,cmds,$id,$pid,idp)} {
      set crds [xth_me_cmds_get_bezier_coords $x1 \
	$xth(me,cmds,$id,$ppid,y) $xth(me,cmds,$id,$ppid,xn) \
	$xth(me,cmds,$id,$ppid,yn) $xth(me,cmds,$id,$pid,xp) \
	$xth(me,cmds,$id,$pid,yp) $xth(me,cmds,$id,$pid,x) \
	$xth(me,cmds,$id,$pid,y)]
    } else {
#      if {[string length $rot] > 0} {
#        set crds [list [expr $xth(me,cmds,$id,$ppid,x) + $tlen * sin(double($rot)/180.0*3.14159265359)] \
#          [expr $xth(me,cmds,$id,$ppid,y) + $tlen * cos(double($rot)/180.0*3.14159265359)]]
#      } else {
	set crds {}
#      }
      lappend crds $xth(me,cmds,$id,$ppid,x) $xth(me,cmds,$id,$ppid,y) \
	$xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y)
    }
  } else {
    set crds {0 0 10 10}
    set st hidden
  }
  return [list $st $crds]
}



proc xth_me_cmds_draw_lineln {id ppid pid} {
  global xth
  set st2crds [xth_me_cmds_get_crds2state $id $ppid $pid]
  set st [lindex $st2crds 0]
  set crds [lindex $st2crds 1]
  $xth(me,can) create line [xth_me_cmds_real2can_coords $crds] -width $xth(gui,me,line,width) -fill $xth(gui,me,activefill) \
    -tags "line ln$id lnln$id ln$id.$pid command" -state $st
  xth_me_bind_area_drag ln$id.$pid {}
  $xth(me,can) bind ln$id.$pid <1> "xth_me_cmds_click_lineln {$id $pid} pt$id.$pid %x %y"
  set highlight_on "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \$xth(gui,me,highlightfill)}"
  set highlight_off "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \[$xth(me,can) itemcget pt$id.$pid -outline\]}"
  $xth(me,can) bind ln$id.$pid  "$highlight_on\nxth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \$xth(me,cmds,$id,sbar)\""
  $xth(me,can) bind ln$id.$pid  "$highlight_off\nxth_status_bar_pop me"
  $xth(me,can) bind ln$id.$pid <$xth(gui,rmb)> "xth_me_show_context_menu {$id $pid} %x %y"  
  catch {$xth(me,can) lower ln$id.$pid point}
}


proc xth_me_cmds_move_lineln {id ppid pid} {
  global xth
  set st2crds [xth_me_cmds_get_crds2state $id $ppid $pid]
  set st [lindex $st2crds 0]
  set crds [lindex $st2crds 1]
  $xth(me,can) coords ln$id.$pid [xth_me_cmds_real2can_coords $crds]
  #$xth(me,can) itemconfigure ln$id.$pid -state $st
}


proc xth_me_cmds_draw_linept {id pid} {
  global xth
  $xth(me,can) create oval [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] - $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] - $xth(gui,me,line,psize)] [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] + $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] + $xth(gui,me,line,psize)] -width 1 -outline blue -fill $xth(gui,me,activefill) \
  -tags "point ln$id lnpt$id pt$id.$pid command"
  set highlight_on "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \$xth(gui,me,highlightfill)}"
  set highlight_off "if {\$xth(me,cmds,selid) != $id} {\$xth(me,can) itemconfigure lnln$id -fill \[$xth(me,can) itemcget pt$id.$pid -outline\]}"
  $xth(me,can) bind pt$id.$pid  "$highlight_on\n$xth(me,can) itemconfigure pt$id.$pid -fill cyan; xth_status_bar_push me; xth_status_bar_status me \"\$xth(me,cmds,$id,listix): \[lindex \[regexp -inline -- {^\[^\\n\]*} \$xth(me,cmds,$id,data)\] 0\]\""
  $xth(me,can) bind pt$id.$pid  "$highlight_off\n$xth(me,can) itemconfigure pt$id.$pid -fill \[$xth(me,can) itemcget ln$id.$pid -fill\]; xth_status_bar_pop me"
  $xth(me,can) bind pt$id.$pid <1> "xth_me_cmds_click {$id $pid} pt$id.$pid \$xth(me,cmds,$id,$pid,x) \$xth(me,cmds,$id,$pid,y) %x %y"
  $xth(me,can) bind pt$id.$pid <$xth(gui,rmb)> "xth_me_show_context_menu {$id $pid} %x %y"  
  $xth(me,can) bind pt$id.$pid  "xth_me_cmds_special_select {$id $pid} %x %y"  
  $xth(me,can) bind pt$id.$pid <$xth(kb_control)-1> "xth_me_cmds_click_area pt$id.$pid %x %y"
}


proc xth_me_cmds_move_linept {id pid} {
  global xth
  $xth(me,can) coords pt$id.$pid [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] - $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] - $xth(gui,me,line,psize)] [expr [xth_me_real2canx $xth(me,cmds,$id,$pid,x)] + $xth(gui,me,line,psize)] \
  [expr [xth_me_real2cany $xth(me,cmds,$id,$pid,y)] + $xth(gui,me,line,psize)]
}


proc xth_me_cmds_draw_line {id} {
  global xth
  set ppid 0
  foreach pid $xth(me,cmds,$id,xplist) {
    if {($pid > 0)} {
      xth_me_cmds_draw_lineln $id $ppid $pid
      xth_me_cmds_draw_linept $id $pid
    }
    set ppid $pid
  }
  catch {$xth(me,can) raise lnpt$id point}
}


proc xth_me_cmds_move_line {id} {
  global xth
  set ppid 0
  foreach pid $xth(me,cmds,$id,xplist) {
    if {($pid > 0)} {
      xth_me_cmds_move_lineln $id $ppid $pid
      xth_me_cmds_move_linept $id $pid
    }
    set ppid $pid
  }
}


proc xth_me_cmds_move_linelnpt {id pid} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set ix [lsearch $xl $pid]
  if {($ix < 0) || ($pid == 0)} {
    return
  }
  
  set pix [expr $ix - 1]
  set nix [expr $ix + 1]
    
  set fix 0
  set lix [expr [llength $xl] - 2]
  
  set cpid 0
  set mpix 0
  set mnix 0
  
  if {$xth(me,cmds,$id,close)} {
    if {$ix == $fix} {
      set cpid [lindex $xl $lix]
      set pix [expr $lix - 1]
      set mpix 1
    } elseif {$ix == $lix} {
      set cpid [lindex $xl $fix]
      set nix [expr $fix + 1]
      set mnix 1
    }
  }
  xth_me_cmds_move_linept $id $pid
  if {$cpid > 0} {
    xth_me_cmds_move_linept $id $cpid
  }
  
  if {($pix >= $fix) && ($pix <= $lix)} {
    set ppid [lindex $xl $pix]
  } else {
    set ppid 0
  }
  if {$mpix} {
    xth_me_cmds_move_lineln $id $ppid $cpid
  } else {
    xth_me_cmds_move_lineln $id $ppid $pid
  }


  if {($nix >= $fix) && ($nix <= $lix)} {
    set npid [lindex $xl $nix]
    if {$mnix} {
      xth_me_cmds_move_lineln $id $cpid $npid
    } else {
      xth_me_cmds_move_lineln $id $pid $npid
    }
  }
  
}

proc xth_me_cmds_start_create_linept {tagOrId x y mx my} {

  global xth

  set xth(me,lptc,id) $xth(me,cmds,selid)
  set id $xth(me,lptc,id)
  if {$xth(me,cmds,$id,ct) != 3} {
    return
  }
  set xl $xth(me,cmds,$id,xplist)
  set inspid $xth(me,cmds,inspid)
  set oldpid $xth(me,cmds,selpid)
  set ix [lsearch $xl $inspid]
  set xth(me,lptc,mx) $mx
  set xth(me,lptc,my) $my
  set xth(me,lptc,tagOrId) $tagOrId
  if {($ix == 0) && $xth(me,cmds,$id,close)} {
    set unclosecmd "xth_me_cmds_reclose_line $id"
    set reclosecmd "xth_me_cmds_open_line $id"
    set ook $xth(me,unredook)
    set xth(me,unredook) 0
    eval $reclosecmd
    set xth(me,unredook) $ook
  } else {
    set unclosecmd ""
    set reclosecmd ""
  }

  xth_me_cmds_create_line_point $id $ix 0 $x $y {} {} {} {} 0 {} {} {} {} 1.0
  xth_me_cmds_hide_linept_xctrl  
  set pid $xth(me,cmds,$id,lpid)
  set pnpid [xth_me_cmds_get_line_pnpid $id $pid]
  set xth(me,lptc,ppid) [lindex $pnpid 0]
  set ppid $xth(me,lptc,ppid)
  set xth(me,lptc,npid) [lindex $pnpid 1]
  set npid $xth(me,lptc,npid)
  set xth(me,lptc,pid) $pid
  set xth(me,lptc,oldm) [$xth(me,can) bind $tagOrId ]
  set xth(me,lptc,oldr) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow
  $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linept_creation %x %y 1"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> "xth_me_cmds_continue_linept_creation %x %y 0"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_create_linept %x %y 1"
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_create_linept %x %y 0"
  xth_me_cmds_continue_linept_creation $mx $my 1
  xth_me_unredo_action [mc "inserting line point"] \
    "xth_me_cmds_delete_linept $id $pid\n$unclosecmd\nxth_me_cmds_select_linept $id $oldpid" \
    "$reclosecmd\nxth_me_cmds_undelete_linept $id $pid $ix"
  if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
    $xth(me,can) itemconfigure lineptppcp -state normal
  }
  if {($npid > 0) && $xth(me,cmds,$id,$npid,idp)} {
    $xth(me,can) itemconfigure lineptnncp -state normal
  }
  xth_me_cmds_continue_linept_creation $mx $my 1
}


proc xth_me_cmds_continue_linept_creation {x y motionID} {
  global xth
  set id $xth(me,lptc,id)
  set pid $xth(me,lptc,pid)
  set ppid $xth(me,lptc,ppid)
  set npid $xth(me,lptc,npid)
  set dx [expr $x - $xth(me,lptc,mx)]
  set dy [expr $y - $xth(me,lptc,my)]
  set dst [expr hypot($dy,$dx)]
  if {$dst > $xth(gui,me,line,psize)} {
    set xn [xth_me_can2realx [$xth(me,can) canvasx $x]]
    set yn [xth_me_can2realy [$xth(me,can) canvasy $y]]
    set xth(me,cmds,$id,$pid,idn) 1
    set xth(me,cmds,$id,$pid,xn) [expr double([format %.2f $xn])]
    set xth(me,cmds,$id,$pid,yn) [expr double([format %.2f $yn])]
    set xth(me,cmds,$id,$pid,idp) 1
    set x $xth(me,cmds,$id,$pid,x)
    set y $xth(me,cmds,$id,$pid,y)
    set dx [expr $xn - $x]
    set dy [expr $yn - $y]
    $xth(me,can) itemconfigure lineptpcp -state normal
    $xth(me,can) itemconfigure lineptncp -state normal
    if {($ppid > 0) && $xth(me,cmds,$id,$ppid,idn)} {
      $xth(me,can) itemconfigure lineptppcp -state normal
    }
    set d [expr hypot($dy,$dx)]
    if {$motionID} {
      set xd $d
      set xth(me,lptc,xd) $d
    } else {
      if {[info exist xth(me,lptc,xd)]} {
	set xd $xth(me,lptc,xd)
      } else {
	set xd $d
      }
    }
    if {(!$motionID)} {
      set dx [expr $dx / $d * $xd]
      set dy [expr $dy / $d * $xd]
    }
    set xth(me,cmds,$id,$pid,xp) [expr double([format %.2f [expr $x - $dx]])]
    set xth(me,cmds,$id,$pid,yp) [expr double([format %.2f [expr $y - $dy]])]
    set xth(me,cmds,$id,$pid,smooth) 1
  } else {
    set xth(me,cmds,$id,$pid,idn) 0
    set xth(me,cmds,$id,$pid,xn) {}
    set xth(me,cmds,$id,$pid,yn) {}
    set xth(me,cmds,$id,$pid,idp) 0
    set xth(me,cmds,$id,$pid,xp) {}
    set xth(me,cmds,$id,$pid,yp) {}
    $xth(me,can) itemconfigure lineptpcp -state hidden
    $xth(me,can) itemconfigure lineptncp -state hidden
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  xth_me_cmds_move_line_xctrl $id
  xth_me_cmds_move_linelnpt $id $pid
  update idletasks
}


proc xth_me_cmds_end_create_linept {x y motionID} {
  global xth
  xth_me_cmds_continue_linept_creation $x $y $motionID
  set tagOrId $xth(me,lptc,tagOrId)
  set id $xth(me,lptc,id)
  set pid $xth(me,lptc,pid)
  $xth(me,can) bind $tagOrId  $xth(me,lptc,oldm)
  $xth(me,can) bind $tagOrId  $xth(me,lptc,oldr)
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> ""
  xth_me_cmds_hide_linept_xctrl  
  set ook $xth(me,unredook)
  set xth(me,unredook) 0
  if {$xth(me,cmds,$id,$pid,idn)} {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill yellow
  } else {
    $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill red
  }
  xth_me_cmds_select_linept $id $pid
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)
  set xth(me,unredook) $ook
}


proc xth_me_cmds_end_line {} {
  set recmds "xth_me_cmds_set_mode 0"
  set uncmds "xth_me_cmds_set_mode 2"
  eval $recmds
  xth_me_unredo_action [mc "line ending"] $uncmds $recmds
}


proc xth_me_cmds_start_linept_insert {} {
  global xth
  set xth(me,cmds,inspid) $xth(me,cmds,selpid)
  xth_me_cmds_set_mode 2
}


proc xth_me_cmds_start_area_insert {btn} {
  global xth
  if {$btn && ($xth(me,cmds,mode) == 3)} {
    xth_me_cmds_set_mode 0
  } else {
    xth_me_cmds_set_mode 3
  }
}


proc xth_me_cmds_get_line_pnpid {id pid} {
  global xth
  set xl $xth(me,cmds,$id,xplist)
  set ix [lsearch $xl $pid]
  set lix [expr [llength $xl] - 2]
  if {$ix > 0} {
    set ppid [lindex $xl [expr $ix - 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set ppid [lindex $xl [expr $lix - 1]]
  } else {
    set ppid 0
  }
  if {$ix < $lix} {
    set npid [lindex $xl [expr $ix + 1]]
  } elseif {$xth(me,cmds,$id,close) && ($lix > 0)} {
    set npid [lindex $xl 1]
  } else {
    set npid 0
  }
  return [list $ppid $npid]
}


proc xth_me_cmds_start_linecp_drag {tagOrId id ppid pid npid which x y} {

  global xth
  
  xth_me_cmds_update {}

  set xth(me,lcpd,tagOrId) $tagOrId
  set xth(me,lcpd,id) $id
  set xth(me,lcpd,pid) $pid
  set xth(me,lcpd,ppid) $ppid
  set xth(me,lcpd,npid) $npid
  set xth(me,lcpd,which) $which
  set xth(me,lcpd,mx) $x
  set xth(me,lcpd,my) $y
  
  set lix [expr [llength $xth(me,cmds,$id,xplist)] - 2]
  if {$lix > 0} {
    set fpid [lindex $xth(me,cmds,$id,xplist) 0]
    set lpid [lindex $xth(me,cmds,$id,xplist) $lix] 
  }
  set altpid 0
  set altppid 0
  set altnpid 0
  if {($lix > 0) && $xth(me,cmds,$id,close)} {
    if {$pid == $fpid} {
      set altpid $lpid
    } elseif {$pid == $lpid} {
      set altpid $fpid
    }
    if {$ppid == $fpid} {
      set altppid $lpid
    } elseif {$ppid == $lpid} {
      set altppid $fpid
    }
    if {$npid == $fpid} {
      set altnpid $lpid
    } elseif {$npid == $lpid} {
      set altnpid $fpid
    }
  }
  
  set xth(me,lcpd,altpid) $altpid
  set xth(me,lcpd,altppid) $altppid
  set xth(me,lcpd,altnpid) $altnpid

  set xth(me,lcpd,oldenter) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  set xth(me,lcpd,oldleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  set xth(me,lcpd,oldfill) [$xth(me,can) itemcget $tagOrId -fill]
  $xth(me,can) itemconfigure $tagOrId -fill {}
  $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linecp_drag %x %y 0"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linecp_drag %x %y 0"

  set dragto 0

  switch $which {
    x {
      set dragto 1
      $xth(me,can) bind $tagOrId  "xth_me_cmds_continue_linecp_drag %x %y 1"
      $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linecp_drag %x %y 1"
      $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> "xth_me_cmds_continue_linecp_drag %x %y 0"
      $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> "xth_me_cmds_end_linecp_drag %x %y 0"
      set xth(me,lcpd,oldmove,pcplstate) [$xth(me,can) itemcget $xth(me,canid,linept,pcpl) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state hidden
      set xth(me,lcpd,oldmove,ncplstate) [$xth(me,can) itemcget $xth(me,canid,linept,ncpl) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state hidden
      set xth(me,lcpd,oldmove,selstate) [$xth(me,can) itemcget $xth(me,canid,linept,selector) -state]
      $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state hidden
      set xth(me,lcpd,oldmove,pcpfill) [$xth(me,can) itemcget $xth(me,canid,linept,pcp) -fill]
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill {}
      set xth(me,lcpd,oldmove,ncpfill) [$xth(me,can) itemcget $xth(me,canid,linept,ncp) -fill]
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill {}
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -width 1 -arrow none
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -width 1 -arrow none
      set xth(me,lcpd,oldx) $xth(me,cmds,$id,$pid,x)
      set xth(me,lcpd,oldy) $xth(me,cmds,$id,$pid,y)
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    p {
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    n {
      set xth(me,lcpd,oldxp) $xth(me,cmds,$id,$pid,xp)
      set xth(me,lcpd,oldyp) $xth(me,cmds,$id,$pid,yp)
      set xth(me,lcpd,oldxn) $xth(me,cmds,$id,$pid,xn)
      set xth(me,lcpd,oldyn) $xth(me,cmds,$id,$pid,yn)
    }
    pp {
      set xth(me,lcpd,oldxpp) $xth(me,cmds,$id,$ppid,xn)
      set xth(me,lcpd,oldypp) $xth(me,cmds,$id,$ppid,yn)
    }
    nn {
      set xth(me,lcpd,oldxnn) $xth(me,cmds,$id,$npid,xp)
      set xth(me,lcpd,oldynn) $xth(me,cmds,$id,$npid,yp)
    }
  }
  
  xth_me_cmds_continue_linecp_drag $x $y $dragto
  $xth(me,can) configure -cursor {}
  
}


proc xth_me_cmds_continue_linecp_drag {x y dragto} {
  global xth
  set id $xth(me,lcpd,id)
  set pid $xth(me,lcpd,pid)
  set ppid $xth(me,lcpd,ppid)
  set npid $xth(me,lcpd,npid)
  set tagOrId $xth(me,lcpd,tagOrId)
  set altpid $xth(me,lcpd,altpid)
  set altppid $xth(me,lcpd,altppid)
  set altnpid $xth(me,lcpd,altnpid)
  set nx [expr double([format %.2f [xth_me_can2realx [$xth(me,can) canvasx $x]]])]
  set ny [expr double([format %.2f [xth_me_can2realy [$xth(me,can) canvasy $y]]])]
  set dts 0
  if $dragto {
    set dtl [xth_me_cmds_drag_to $id $pid $x $y]
    if {[lindex $dtl 0]} {
      set nx [lindex $dtl 1]
      set ny [lindex $dtl 2]
      set dts 1
    }
  }
  if $dts {
    $xth(me,can) itemconfigure $tagOrId -fill cyan
  } else {
    $xth(me,can) itemconfigure $tagOrId -fill {}
  }
  switch $xth(me,lcpd,which) {
    x {
      set xth(ctrl,me,linept,x) $nx
      set xth(me,cmds,$id,$pid,x) $nx
      set xth(ctrl,me,linept,y) $ny
      set xth(me,cmds,$id,$pid,y) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,y) $ny
	set xth(me,cmds,$id,$altpid,x) $nx
      }
      
      if {$xth(me,cmds,$id,$pid,idp)} {
	set nxp [expr double([format %.2f [expr $nx + $xth(me,lcpd,oldxp) - $xth(me,lcpd,oldx)]])]
	set nyp [expr double([format %.2f [expr $ny + $xth(me,lcpd,oldyp) - $xth(me,lcpd,oldy)]])]
	set xth(ctrl,me,linept,xp) $nxp
	set xth(me,cmds,$id,$pid,xp) $nxp
	set xth(ctrl,me,linept,yp) $nyp
	set xth(me,cmds,$id,$pid,yp) $nyp
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xp) $nxp
	  set xth(me,cmds,$id,$altpid,yp) $nyp
	}
      }
      
      if {$xth(me,cmds,$id,$pid,idn)} {
	set nxn [expr double([format %.2f [expr $nx + $xth(me,lcpd,oldxn) - $xth(me,lcpd,oldx)]])]
	set nyn [expr double([format %.2f [expr $ny + $xth(me,lcpd,oldyn) - $xth(me,lcpd,oldy)]])]
	set xth(ctrl,me,linept,xn) $nxn
	set xth(me,cmds,$id,$pid,xn) $nxn
	set xth(ctrl,me,linept,yn) $nyn
	set xth(me,cmds,$id,$pid,yn) $nyn
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xn) $nxn
	  set xth(me,cmds,$id,$altpid,yn) $nyn
	}
      }
      xth_me_cmds_move_linept_xctrl $id $pid
      xth_me_cmds_move_line_xctrl $id
    }
    p {
      set xth(ctrl,me,linept,xp) $nx
      set xth(me,cmds,$id,$pid,xp) $nx
      set xth(ctrl,me,linept,yp) $ny
      set xth(me,cmds,$id,$pid,yp) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $nx
	set xth(me,cmds,$id,$altpid,yp) $ny
      }
      if {$xth(me,cmds,$id,$pid,idn) && $xth(me,cmds,$id,$pid,smooth)} {
	set ncn [xth_me_cmds_get_smoothed_cp 1 $nx $ny \
	  $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	  $xth(me,cmds,$id,$pid,xn) $xth(me,cmds,$id,$pid,yn)]
	set nxn [lindex $ncn 2]
	set nyn [lindex $ncn 3]
	set xth(ctrl,me,linept,xn) $nxn
	set xth(me,cmds,$id,$pid,xn) $nxn
	set xth(ctrl,me,linept,yn) $nyn
	set xth(me,cmds,$id,$pid,yn) $nyn
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xn) $nxn
	  set xth(me,cmds,$id,$altpid,yn) $nyn
	}
      }
    }
    n {
      set xth(ctrl,me,linept,xn) $nx
      set xth(me,cmds,$id,$pid,xn) $nx
      set xth(ctrl,me,linept,yn) $ny
      set xth(me,cmds,$id,$pid,yn) $ny
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xn) $nx
	set xth(me,cmds,$id,$altpid,yn) $ny
      }
      if {$xth(me,cmds,$id,$pid,idp) && $xth(me,cmds,$id,$pid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp -1 \
	  $xth(me,cmds,$id,$pid,xp) $xth(me,cmds,$id,$pid,yp) \
	  $xth(me,cmds,$id,$pid,x) $xth(me,cmds,$id,$pid,y) \
	  $nx $ny]
	set nxp [lindex $ncp 0]
	set nyp [lindex $ncp 1]
	set xth(ctrl,me,linept,xp) $nxp
	set xth(me,cmds,$id,$pid,xp) $nxp
	set xth(ctrl,me,linept,yp) $nyp
	set xth(me,cmds,$id,$pid,yp) $nyp
	if {$altpid > 0} {
	  set xth(me,cmds,$id,$altpid,xp) $nxp
	  set xth(me,cmds,$id,$altpid,yp) $nyp
	}
      }
    }
    pp {
      if {$xth(me,cmds,$id,$ppid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp 1 \
	  $xth(me,cmds,$id,$ppid,xp) $xth(me,cmds,$id,$ppid,yp) \
	  $xth(me,cmds,$id,$ppid,x) $xth(me,cmds,$id,$ppid,y) \
	  $nx $ny]
	set xth(me,cmds,$id,$ppid,xn) [lindex $ncp 2]
	set xth(me,cmds,$id,$ppid,yn) [lindex $ncp 3]
      } else {
	set xth(me,cmds,$id,$ppid,xn) $nx
	set xth(me,cmds,$id,$ppid,yn) $ny
      }
      if {$altppid > 0} {
	set xth(me,cmds,$id,$altppid,xn) $xth(me,cmds,$id,$ppid,xn)
	set xth(me,cmds,$id,$altppid,yn) $xth(me,cmds,$id,$ppid,yn)
      }
    }
    nn {
      if {$xth(me,cmds,$id,$npid,smooth)} {
	set ncp [xth_me_cmds_get_smoothed_cp -1 \
	  $nx $ny \
	  $xth(me,cmds,$id,$npid,x) $xth(me,cmds,$id,$npid,y) \
	  $xth(me,cmds,$id,$npid,xn) $xth(me,cmds,$id,$npid,yn)]
	set xth(me,cmds,$id,$npid,xp) [lindex $ncp 0]
	set xth(me,cmds,$id,$npid,yp) [lindex $ncp 1]
      } else {
	set xth(me,cmds,$id,$npid,xp) $nx
	set xth(me,cmds,$id,$npid,yp) $ny
      }
      if {$altnpid > 0} {
	set xth(me,cmds,$id,$altnpid,xp) $xth(me,cmds,$id,$npid,xp)
	set xth(me,cmds,$id,$altnpid,yp) $xth(me,cmds,$id,$npid,yp)
      }
    }
  }
  xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid
  xth_me_cmds_move_linelnpt $id $pid
  update idletasks
}


proc xth_me_cmds_end_linecp_drag {x y dragto} {
  global xth

  xth_me_cmds_continue_linecp_drag $x $y $dragto
  set id $xth(me,lcpd,id)
  set pid $xth(me,lcpd,pid)
  set ppid $xth(me,lcpd,ppid)
  set npid $xth(me,lcpd,npid)
  set altpid $xth(me,lcpd,altpid)
  set altppid $xth(me,lcpd,altppid)
  set altnpid $xth(me,lcpd,altnpid)
  set tagOrId $xth(me,lcpd,tagOrId)

  set movecmd "xth_me_cmds_move_lineptcp_xctrl $id $ppid $pid $npid\nxth_me_cmds_move_linept_xctrl $id $pid\nxth_me_cmds_move_linelnpt $id $pid"

  switch $xth(me,lcpd,which) {
    x {
      set xth(me,cmds,$id,$pid,x) $xth(me,lcpd,oldx)
      set xth(me,cmds,$id,$pid,y) $xth(me,lcpd,oldy)
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,x) $xth(me,lcpd,oldx)
	set xth(me,cmds,$id,$altpid,y) $xth(me,lcpd,oldy)
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving line point"
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcpl) -state $xth(me,lcpd,oldmove,pcplstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncpl) -state $xth(me,lcpd,oldmove,ncplstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,selector) -state $xth(me,lcpd,oldmove,selstate)
      $xth(me,can) itemconfigure $xth(me,canid,linept,pcp) -fill $xth(me,lcpd,oldmove,pcpfill)
      $xth(me,can) itemconfigure $xth(me,canid,linept,ncp) -fill $xth(me,lcpd,oldmove,ncpfill)
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -width 5 -arrow last
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -width 5 -arrow last
    }
    p {
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving control pint"
    }
    n {
      set xth(me,cmds,$id,$pid,xp) $xth(me,lcpd,oldxp)
      set xth(me,cmds,$id,$pid,yp) $xth(me,lcpd,oldyp)
      set xth(me,cmds,$id,$pid,xn) $xth(me,lcpd,oldxn)
      set xth(me,cmds,$id,$pid,yn) $xth(me,lcpd,oldyn)
      if {$altpid > 0} {
	set xth(me,cmds,$id,$altpid,xp) $xth(me,lcpd,oldxp)
	set xth(me,cmds,$id,$altpid,yp) $xth(me,lcpd,oldyp)
	set xth(me,cmds,$id,$altpid,xn) $xth(me,lcpd,oldxn)
	set xth(me,cmds,$id,$altpid,yn) $xth(me,lcpd,oldyn)
      }
      set xth(me,unredola) "moving control pint"
    }
    pp {
      if {$altppid > 0} {
	set unaltcmd "set xth(me,cmds,$id,$altppid,xn) $xth(me,lcpd,oldxpp)\nset xth(me,cmds,$id,$altppid,yn) $xth(me,lcpd,oldypp)"
	set realtcmd "set xth(me,cmds,$id,$altppid,xn) $xth(me,cmds,$id,$ppid,xn)\nset xth(me,cmds,$id,$altppid,yn) $xth(me,cmds,$id,$ppid,yn)"
      } else {
	set unaltcmd ""
	set realtcmd ""
      }
      xth_me_unredo_action [mc "moving control point"] \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$ppid,xn) $xth(me,lcpd,oldxpp)\nset xth(me,cmds,$id,$ppid,yn) $xth(me,lcpd,oldypp)\n$unaltcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]" \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$ppid,xn) $xth(me,cmds,$id,$ppid,xn)\nset xth(me,cmds,$id,$ppid,yn) $xth(me,cmds,$id,$ppid,yn)\n$realtcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]"
    }
    nn {
      if {$altnpid > 0} {
	set unaltcmd "set xth(me,cmds,$id,$altnpid,xp) $xth(me,lcpd,oldxnn)\nset xth(me,cmds,$id,$altnpid,yp) $xth(me,lcpd,oldynn)"
	set realtcmd "set xth(me,cmds,$id,$altnpid,xp) $xth(me,cmds,$id,$npid,xp)\nset xth(me,cmds,$id,$altnpid,yp) $xth(me,cmds,$id,$npid,yp)"
      } else {
	set unaltcmd ""
	set realtcmd ""
      }
      xth_me_unredo_action [mc "moving control point"] \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$npid,xp) $xth(me,lcpd,oldxnn)\nset xth(me,cmds,$id,$npid,yp) $xth(me,lcpd,oldynn)\n$unaltcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]" \
      "xth_me_cmds_select {$id $pid}\nset xth(me,cmds,$id,$npid,xp) $xth(me,cmds,$id,$npid,xp)\nset xth(me,cmds,$id,$npid,yp) $xth(me,cmds,$id,$npid,yp)\n$realtcmd\n$movecmd\nxth_me_cmds_update_line_data $id\nxth_me_prev_cmd [list $xth(me,cmds,$id,data)]"
    }
  }

  $xth(me,can) bind $tagOrId  $xth(me,lcpd,oldenter)
  $xth(me,can) bind $tagOrId  $xth(me,lcpd,oldleave)
  $xth(me,can) itemconfigure $tagOrId -fill $xth(me,lcpd,oldfill)
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-Motion> ""
  $xth(me,can) bind $tagOrId <$xth(kb_control)-B1-ButtonRelease> ""
  $xth(me,can) configure -cursor crosshair
  xth_me_cmds_update_line_data $id
  xth_me_prev_cmd $xth(me,cmds,$id,data)  
  xth_me_cmds_move_line_xctrl $id
  xth_me_cmds_update {}
  
}


proc xth_me_cmds_configure_linept_size_xctrl {id pid} {

  global xth
  
  if {([string length $id] > 0) && ($pid > 0)} {
    if {([string length $xth(me,cmds,$id,$pid,rs)] > 0)} {
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state normal
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> \
	"xth_me_cmds_start_linept_fdrag $xth(me,canid,linept,fr) $id $pid r %x %y"
      $xth(me,can) bind $xth(me,canid,linept,fr)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fr) -fill #ffda00"
      $xth(me,can) bind $xth(me,canid,linept,fr)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fr) -fill red"
    } else {
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state hidden
    }
    if {([string length $xth(me,cmds,$id,$pid,ls)] > 0) || \
      (([string length $xth(me,cmds,$id,$pid,rotation)] > 0) && \
       ([string length $xth(me,cmds,$id,$pid,rs)] < 1))} {
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state normal
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> \
	"xth_me_cmds_start_linept_fdrag $xth(me,canid,linept,fl) $id $pid l %x %y"
      $xth(me,can) bind $xth(me,canid,linept,fl)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fl) -fill #ffda00"
      $xth(me,can) bind $xth(me,canid,linept,fl)  \
	"$xth(me,can) itemconfigure $xth(me,canid,linept,fl) -fill red"
    } else {
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state hidden
    }
  } else {
      $xth(me,can) bind $xth(me,canid,linept,fr) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) bind $xth(me,canid,linept,fr)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fr) -state hidden
      $xth(me,can) bind $xth(me,canid,linept,fl) <1> ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) bind $xth(me,canid,linept,fl)  ""
      $xth(me,can) itemconfigure $xth(me,canid,linept,fl) -state hidden
  }
}


proc xth_me_cmds_move_linept_size_xctrl {id pid rot rs ls} {

  global xth
  
  set rotng 1
  if {[string length $rot] > 0} {
    set rot [expr double($rot) / 180.0 * 3.14159265359]
    set rotng 0
  } else {
    set rot [expr double([xth_me_cmds_get_default_rotation $id $pid]) / 180 * 3.14159265359]
  }

  if {[string length $rs] > 0} {
    set rs [expr 0.01 * $rs * $xth(me,zoom)]
  } else {
    set rs 30.0
  }

  if {[string length $ls] > 0} {
    set ls [expr 0.01 * $ls * $xth(me,zoom)]
  } else {
    set ls 30.0
  }


  set x [xth_me_real2canx $xth(me,cmds,$id,$pid,x)]
  set y [xth_me_real2cany $xth(me,cmds,$id,$pid,y)]
  set ca [expr cos($rot)]
  set sa [expr sin($rot)]
  
  set yvx [expr $sa * $ls]
  set yvy [expr - $ca * $ls]
  set xvx [expr - $sa * $rs]
  set xvy [expr $ca * $rs]
  
  if {$xth(me,cmds,$id,reverse) && $rotng} {
    set xvx [expr -1.0 * $xvx]
    set xvy [expr -1.0 * $xvy]
    set yvx [expr -1.0 * $yvx]
    set yvy [expr -1.0 * $yvy]
  }
  
  $xth(me,can) coords $xth(me,canid,linept,fr) $x $y [expr $x + $xvx] [expr $y + $xvy]
  $xth(me,can) coords $xth(me,canid,linept,fl) $x $y [expr $x + $yvx] [expr $y + $yvy]
  update idletasks    
}


proc xth_me_cmds_start_linept_fdrag {tagOrId id pid side x y} {
  global xth
  xth_me_cmds_update {}
  set xth(me,lptfd,tagOrId) $tagOrId
  set xth(me,lptfd,id) $id
  set xth(me,lptfd,pid) $pid
  set xth(me,lptfd,side) $side
  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,$pid,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,$pid,y)] 

  if {[string length $xth(me,cmds,$id,$pid,rotation)] == 0} {
    set xth(me,lptfd,rot) 0
  } else {
    set xth(me,lptfd,rot) 1
    set xth(me,lptfd,orot) [expr atan2($dy,$dx)]
  }

  if {[string length $xth(me,cmds,$id,$pid,[format "%ss" $side])] == 0} {
    set xth(me,lptfd,size) 0
  } else {
    set xth(me,lptfd,size) 1
    set xth(me,lptfd,osize) [expr hypot($dy,$dx)]
  }

  $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  set xth(me,lptfd,benter) [$xth(me,can) bind $tagOrId ]
  set xth(me,lptfd,bleave) [$xth(me,can) bind $tagOrId ]
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  "xth_me_cmds_linept_fdrag %x %y"
  $xth(me,can) bind $tagOrId  "xth_me_cmds_end_linept_fdrag %x %y"
  xth_me_cmds_linept_fdrag $x $y
  $xth(me,can) configure -cursor {}
}

proc xth_me_cmds_linept_fdrag {x y} {
  global xth
  set id $xth(me,lptfd,id)
  set pid $xth(me,lptfd,pid)
  set side $xth(me,lptfd,side)

  set dx [expr [xth_me_can2realx [$xth(me,can) canvasx $x]] - $xth(me,cmds,$id,$pid,x)]
  set dy [expr [xth_me_can2realy [$xth(me,can) canvasy $y]] - $xth(me,cmds,$id,$pid,y)]
  
  if $xth(me,lptfd,rot) {
    set rot [expr double($xth(me,cmds,$id,$pid,rotation)) - 180.0 / 3.14159265359 * (atan2($dy,$dx) - $xth(me,lptfd,orot))]
    if {$rot < 0.0} {
      set rot [expr 360.0 + $rot]
    } elseif {$rot >= 360.0} {
      set rot [expr $rot - 360.0]
    }
    set rot [format "%.1f" $rot]
    set xth(ctrl,me,linept,rot) $rot
  }
  
  if {$xth(me,lptfd,size)} {
    set cs [expr hypot($dy,$dx)]
    set ns [expr $xth(me,cmds,$id,$pid,[format "%ss" $side]) - $xth(me,lptfd,osize) + $cs]
    if {$ns <= 0.0} {set ns 0.1}
    set xth(ctrl,me,linept,[format "%ss" $side]) [format "%.1f" $ns]
  }

  xth_me_cmds_move_linept_size_xctrl $id $pid $xth(ctrl,me,linept,rot) $xth(ctrl,me,linept,rs) $xth(ctrl,me,linept,ls)
  xth_me_cmds_move_line_xctrl $id
}

proc xth_me_cmds_end_linept_fdrag {x y} {
  global xth

  xth_me_cmds_linept_fdrag $x $y

  set id $xth(me,lptfd,id)
  set pid $xth(me,lptfd,pid)
  set side $xth(me,lptfd,side)
  set tagOrId $xth(me,lptfd,tagOrId)

  $xth(me,can) configure -cursor crosshair
  if {$xth(me,lptfd,size)} {
    set xth(me,unredola) "line point resizing"
  } else {
    set xth(me,unredola) "line point rotation"
  }
  $xth(me,can) bind $tagOrId  ""
  $xth(me,can) bind $tagOrId  ""
  if {[lsearch [$xth(me,can) itemcget $tagOrId -tags] current] > -1} {
    $xth(me,can) itemconfigure $tagOrId -fill #ffda00
  }
  
  $xth(me,can) bind $tagOrId  $xth(me,lptfd,benter)
  $xth(me,can) bind $tagOrId  $xth(me,lptfd,bleave)
  xth_me_cmds_update {}
}


proc xth_me_cmds_set_colors {} {
  global xth
  # najde id zaciatku a konca sucasneho scrapu
  set xid [lsearch $xth(me,cmds,xlist) $xth(me,cmds,selid)]
  set llen [llength $xth(me,cmds,xlist)]
  set cid $xid

  set dcol $xth(gui,me,unselectedfill)
  set scol $xth(gui,me,pasivefill)
  if {$xth(me,cmds,$xth(me,cmds,selid),ct) == 4} {
    set col $dcol
    set ocol $scol
  } elseif {$xth(me,cmds,$xth(me,cmds,selid),ct) == 5} {
    set col $scol
    set ocol $dcol
  } else {
    set col $scol
    set ocol $scol
  }

  set xth(me,curscrap) {}
  set godown 1
  set selectedscrap 1
  if {$cid < 0} {
    set cid [expr $xid + 1]
    set godown 0
    set selectedscrap 0
  }
  while {(($cid >= 0) && ($cid < $llen)) || ($godown)} {
    set id [lindex $xth(me,cmds,xlist) $cid]
    switch $xth(me,cmds,$id,ct) {
      2 {   # point     
        if {$selectedscrap} {
          switch $xth(me,cmds,$id,type) {
            station {
              set col $xth(gui,me,stationcolor)
            }
            default {
              set col $scol
            }
          }   
        }
        $xth(me,can) itemconfigure pt$id -outline $col -fill $col -state normal
        if {$xth(me,hinactives) && ($col == $dcol)} {
          $xth(me,can) itemconfigure pt$id -state hidden
        }
      }
      
      3 {  # line/line point
        if {$selectedscrap} {
          switch $xth(me,cmds,$id,type) {
            wall {
              set col $xth(gui,me,wallcolor)
            }
            pit {
              set col $xth(gui,me,pitcolor)
            }
            slope {
              set col $xth(gui,me,slopecolor)
            }
            "rock-border" - "rock-edge" {
              set col $xth(gui,me,rockcolor)
            }
            border {
              set col $xth(gui,me,bordercolor)
            }
            default {
              set col $scol
            }
          }   
        }
        $xth(me,can) itemconfigure lnpt$id -outline $col -fill $col -state normal
        $xth(me,can) itemconfigure lnln$id -fill $col -state normal
        if {$xth(me,hinactives) && ($col == $dcol)} {
          $xth(me,can) itemconfigure ln$id -state hidden  
        }
      }
      
      4 - 5 { # scrap/endscrap
        if {(($xth(me,cmds,$id,ct) == 4) && ($godown) && ($selectedscrap)) || (($xth(me,cmds,$id,ct) == 5) && ($selectedscrap))} {
          set selectedscrap 0
        }
        if {(![string equal $col $dcol]) && ($xth(me,cmds,$id,ct) == 4)} {
          set xth(me,curscrap) $xth(me,cmds,$id,name)
          #          if {[string equal $xth(me,cmds,$id,projection) extended]} {
          #            set xth(me,snai) -1
          #          } else {
          #            set xth(me,snai) 1
          #          }
          set xth(me,snai) 1
        }
        if {$cid != $xid} {
          set col $dcol
        }
      }
    }

    if {$godown} {
      incr cid -1
      if {$cid < 0} {
        set cid [expr $xid + 1]
        set godown 0
        set selectedscrap 1
        set col $ocol
      }
    } else {
      incr cid 1
    }
  }
  xth_app_title me
}


proc xth_me_cmds_show_current_area {} {

  global xth

  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 6} {
    return
  }

  set xid [expr [lsearch $xth(me,cmds,xlist) $id] + 1]
  set llen [llength $xth(me,cmds,xlist)]
  set cid $xid

  
  set godown 1
  if {$cid < 0} {
    set cid [expr $xid - 1]
    set godown 0
  }

  set llist $xth(me,cmds,$id,llist)
  set llast [expr [llength $llist] - 1]
  set lcsel [$xth(ctrl,me,ac).ll.l curselection]
  set lsel {}
  if {([llength $lcsel] > 0) && ($lcsel < $llast)} {
    set lsel [lindex $llist $lcsel]
  }
  
  while {(($cid >= 0) && ($cid < $llen)) || ($godown)} {
    set oid [lindex $xth(me,cmds,xlist) $cid]
    switch $xth(me,cmds,$oid,ct) {
      3 {
	foreach lnid $llist {
	  if {[string equal $xth(me,cmds,$oid,name) $lnid]} {
	    if {([llength $lsel] == 0) || [string equal $lsel $lnid]} {
	      $xth(me,can) itemconfigure lnpt$oid -fill red
	      $xth(me,can) itemconfigure lnln$oid -fill red
	    } else {
	      $xth(me,can) itemconfigure lnpt$oid -fill $xth(gui,me,pasivefill)
	      $xth(me,can) itemconfigure lnln$oid -fill $xth(gui,me,pasivefill)
	    }
	  }
	}
      }
      4 {
	return
      }
      5 {
	if {$godown} {
	  if {$cid != $xid} {
	    set cid [expr $xid - 1]
	    set godown 0
	  }
	} else return
      }
    }
    
    if {$godown} {
      incr cid 1      
      if {$cid >= $llen} {
	set cid [expr $xid - 1]
	set godown 0
      }
    } else {
      incr cid -1
    }
    
  }
}




proc xth_me_cmds_line_split {} {

  global xth
  
  xth_me_cmds_update {}
  
  set id $xth(me,cmds,selid)
  set pid $xth(me,cmds,selpid)  
	
	set prev_center [xth_me_get_center]

  # najprv zisti ci mooze, ak nie tak exit
  if {$xth(me,cmds,$id,ct) != 3} {
    return
  }
  
  set px [lsearch -exact $xth(me,cmds,$id,xplist) $pid]
  set lpx [llength $xth(me,cmds,$id,xplist)]
  if {($px <= 0) || ($px >= ($lpx - 2))} {
    return
  }
  
  # vytvori dve nove ciary, close nastavene na false
  set xth(me,unredook) 0
  set ix [lsearch $xth(me,cmds,xlist) $id]
  
  set id1 [xth_me_cmds_create 3 {} {}]
  set xth(me,cmds,$id1,lpid) 0
  set xth(me,cmds,$id1,plist) {"end of line"}
  set xth(me,cmds,$id1,xplist) {0}
  set id2 [xth_me_cmds_create 3 {} {}]
  set xth(me,cmds,$id2,lpid) 0
  set xth(me,cmds,$id2,plist) {"end of line"}
  set xth(me,cmds,$id2,xplist) {0}
  
  set xth(me,cmds,$id1,type) $xth(me,cmds,$id,type)
  set xth(me,cmds,$id2,type) $xth(me,cmds,$id,type)
  set xth(me,cmds,$id1,name) {}
  set xth(me,cmds,$id2,name) {}
  set xth(me,cmds,$id1,reverse) $xth(me,cmds,$id,reverse)
  set xth(me,cmds,$id2,reverse) $xth(me,cmds,$id,reverse)
  set xth(me,cmds,$id1,close) 0
  set xth(me,cmds,$id2,close) 0
  set xth(me,cmds,$id1,options) $xth(me,cmds,$id,options)
  set xth(me,cmds,$id2,options) $xth(me,cmds,$id,options)

  xth_me_cmds_update_list $id1
  xth_me_cmds_update_list $id2
  
  # povklada body
  set ix1 0
  set ix2 0
  for {set cx 0} {$cx < ($lpx - 1)} {incr cx} {
    set opid [lindex $xth(me,cmds,$id,xplist) $cx]
    if {$cx <= $px} {
      #vlozi ho do prvej      
      xth_me_cmds_create_line_point $id1 $ix1 0 \
      $xth(me,cmds,$id,$opid,x) $xth(me,cmds,$id,$opid,y) \
      $xth(me,cmds,$id,$opid,xp) $xth(me,cmds,$id,$opid,yp) \
      $xth(me,cmds,$id,$opid,xn) $xth(me,cmds,$id,$opid,yn) \
      $xth(me,cmds,$id,$opid,smooth) $xth(me,cmds,$id,$opid,rotation) \
      $xth(me,cmds,$id,$opid,rs) $xth(me,cmds,$id,$opid,ls) \
      $xth(me,cmds,$id,$opid,options) 1.0
      incr ix1
    }
    if {$cx >= $px} {
      #vlozi ho do druhej
      xth_me_cmds_create_line_point $id2 $ix2 0 \
      $xth(me,cmds,$id,$opid,x) $xth(me,cmds,$id,$opid,y) \
      $xth(me,cmds,$id,$opid,xp) $xth(me,cmds,$id,$opid,yp) \
      $xth(me,cmds,$id,$opid,xn) $xth(me,cmds,$id,$opid,yn) \
      $xth(me,cmds,$id,$opid,smooth) $xth(me,cmds,$id,$opid,rotation) \
      $xth(me,cmds,$id,$opid,rs) $xth(me,cmds,$id,$opid,ls) \
      $xth(me,cmds,$id,$opid,options) 1.0
      incr ix2
    }
  }
  
  xth_me_cmds_update_line_data $id1
  xth_me_cmds_update_line_data $id2
  
  # zmaze originalnu
  set pid1 0
  set pid2 [lindex $xth(me,cmds,$id2,xplist) 0]
  xth_me_cmds_delete $id
  xth_me_cmds_select [list $id2 $pid2]
	
	# scrollne sa tam, odkial sme zacinali
	xth_me_center_to $prev_center

  set xth(me,unredook) 1
  
  # nastavi undo na zmazanie novych a undelete originalnej
  # a redo na undelete novych a zmazanie originalnej
  xth_me_unredo_action [mc "split line"] \
    "xth_me_cmds_delete $id1; xth_me_cmds_delete $id2; xth_me_cmds_undelete $id $pid $ix; xth_me_center_to {$prev_center}" \
    "xth_me_cmds_undelete $id1 $pid1 $ix; xth_me_cmds_undelete $id2 $pid2 $ix; xth_me_cmds_delete $id; xth_me_cmds_select {$id2 $pid2}; xth_me_center_to {$prev_center}"

}

# todo - zistovat, ci sme nad inymi, ako prave startovacimi pt a lnpt
# pridat button na tracovanie a stop
# pridat vytvorenie bezierovej krivky
proc xth_me_image_get_color {x y {include {}} {exclude {}}} {
  global xth
  # najde obrazok na ktory sme klikli - ak taky ma, spocita suradnice a vrati RGB
  set iid {}
  foreach id [$xth(me,can) find overlapping [xth_me_real2canx $x] [xth_me_real2cany $y] [xth_me_real2canx $x] [xth_me_real2cany $y]] {
    set tags [$xth(me,can) itemcget $id -tags]
    if {[regexp {bgimg.*imgx(\d+)} $tags dum tmpiid]} {
      set iid $tmpiid
    }
    if {[regexp {command} $tags]} {      
      if {([string length $include] > 0) && (!([regexp $include $tags])) && ([regexp $exclude $tags])} {
	return 1
      }
    }
  }
  if {[string length $iid] == 0} {
    return {}
  }
  # calculate color
  set img $xth(me,imgs,$iid,image)
  set iw [image width $img]
  set ih [image height $img]
  set ix [expr round($x - [lindex $xth(me,imgs,$iid,position) 0])]
  set iy [expr round([lindex $xth(me,imgs,$iid,position) 1] - $y)]
  if {$ix < 0} {set ix 0}
  if {$ix >= $iw} {set ix [expr $iw - 1]}
  if {$iy < 0} {set iy 0}
  if {$iy >= $ih} {set iy [expr $ih - 1]}
  return [$img get $ix $iy]
}

proc xth_me_cmds_line_trace_stop {} {
  global xth
  set xth(ctrl,me,line,tracecontinue) 0  
}

proc xth_me_cmds_line_trace_start {} {
  global xth
  set xth(ctrl,me,line,tracedist) 0.0
  xth_me_cmds_line_trace
}

proc xth_me_cmds_line_trace {} {
  global xth
  xth_me_cmds_update {}
  set xth(ctrl,me,line,tracecontinue) 1
  if {$xth(ctrl,me,line,tracerow) > 0} {
    grid $xth(ctrl,me,line).trace -row $xth(ctrl,me,line,tracerow) -column 0 -sticky news
    grid $xth(ctrl,me,line).vector -row $xth(ctrl,me,line,tracerow) -column 1 -sticky news
    set xth(ctrl,me,line,tracebtnfg) [$xth(ctrl,me,line).trace cget -fg]
    set xth(ctrl,me,line,tracebtnbg) [$xth(ctrl,me,line).trace cget -bg]
    set xth(ctrl,me,line,tracebtnafg) [$xth(ctrl,me,line).trace cget -activeforeground]
    set xth(ctrl,me,line,tracebtnabg) [$xth(ctrl,me,line).trace cget -activebackground]
    set xth(ctrl,me,line,tracerow) 0
  }
  set id $xth(me,cmds,selid)
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 3} {return}
  # zoberieme posledne 2 body na ciare
  set px0 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 3]]
  set px1 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 2]]
  set xth(me,cmds,selpid) 0
  # spocitame ich vzdialenost
  set x0 $xth(me,cmds,$id,$px0,x)
  set y0 $xth(me,cmds,$id,$px0,y)
  set x1 $xth(me,cmds,$id,$px1,x)
  set y1 $xth(me,cmds,$id,$px1,y)
  set dx [expr $x1 - $x0]
  set dy [expr $y1 - $y0]
  set l [expr hypot($dx, $dy)]
  if {($x0 == $x1) && ($y0 == $y1)} {
    return
  }
  if {$l < 1.0} {set l 1.0}
  set tcol [xth_me_image_get_color $x1 $y1]
  if {[llength $tcol] != 3} {return}
  if {$xth(ctrl,me,line,tracedist) == 0.0} {
    set xth(ctrl,me,line,tracedist) $l
    set xth(ctrl,me,line,tracecolor) $tcol
    set dist $l
  } else {
    set dist $xth(ctrl,me,line,tracedist)
    set tcol $xth(ctrl,me,line,tracecolor)
  }
  xth_me_cmds_line_trace_point_cycle $dist $tcol
  return
}

proc xth_me_cmds_line_trace_point_cycle {dist tcol} {
    global xth
    set next [xth_me_cmds_line_trace_point $dist $tcol]
    set cont [expr [llength $next] > 0]
    if {(!$cont) && ($dist > 2.0)} {
      set next [xth_me_cmds_line_trace_point [expr $dist / 2.0] $tcol]
      set cont [expr [llength $next] > 0]
    }
    if {(!$cont)} {
      set next [xth_me_cmds_line_trace_point [expr $dist * 2.0] $tcol]
      set cont [expr [llength $next] > 0]
    }
    if {$cont && $xth(ctrl,me,line,tracecontinue) && ([llength $next] == 2)} {
      $xth(ctrl,me,line).trace configure -command {xth_me_cmds_line_trace_stop} -text [mc "Stop tracing"] \
        -fg white -bg red -activeforeground white -activebackground red
      set lt 0
      set ld 100
      catch {
        set lt $xth(ctrl,me,line,traceltime)
        set ld $xth(ctrl,me,line,traceldelay)
      }
      set xth(ctrl,me,line,traceltime) [clock clicks -milliseconds]
      set cd [expr 100 - $xth(ctrl,me,line,traceltime) + $lt]
      if {$cd < 0} {
        set cd 0
      }
      if {$cd > 100} {
        set cd 100
      }
      set cd [expr int(0.95 * $ld + 0.05 * $cd)]
      set xth(ctrl,me,line,traceldelay) $cd
      after $cd "after idle \"xth_me_cmds_line_trace_point_cycle $dist [list $tcol]\""
    } else {
      $xth(ctrl,me,line).trace configure -command {xth_me_cmds_line_trace} -text [mc "Continue tracing"] \
        -fg $xth(ctrl,me,line,tracebtnfg) -bg $xth(ctrl,me,line,tracebtnbg) \
        -activeforeground $xth(ctrl,me,line,tracebtnafg) -activebackground $xth(ctrl,me,line,tracebtnabg)
    }
}


proc xth_me_cmds_line_trace_point {dist tcol} {

  global xth
  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 3} {return}
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 3} {return}
  if {$xth(me,cmds,$id,close)} {return}

  # zoberieme posledne 2 body na ciare
  set pxs [lindex $xth(me,cmds,$id,xplist) 0]
  set px0 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 3]]
  set px1 [lindex $xth(me,cmds,$id,xplist) [expr $npx - 2]]
  set xth(me,cmds,selpid) 0
  
  set itags "pt$id\\.$px1|ln$id\\.$px1"
  set etags "pt$id\\.\\d+|ln$id\\.\\d+"
  
  # spocitame ich vzdialenost
  set xs $xth(me,cmds,$id,$pxs,x)
  set ys $xth(me,cmds,$id,$pxs,y)
  set x0 $xth(me,cmds,$id,$px0,x)
  set y0 $xth(me,cmds,$id,$px0,y)
  set x1 $xth(me,cmds,$id,$px1,x)
  set y1 $xth(me,cmds,$id,$px1,y)
  set dx [expr $x1 - $x0]
  set dy [expr $y1 - $y0]
  set l [expr hypot($dx, $dy)]
  if {($x0 == $x1) && ($y0 == $y1)} {
    return
  }
  set dx [expr $dx / $l * $dist]
  set dy [expr $dy / $l * $dist]
  
  set resol 1.0
  xth_me_center_to [list $x1 $y1]
  set da [expr atan2($resol, $dist)]
  set maxta [expr $da * (2.0 * $dist / $resol)]
  set minta [expr -1.0 * $maxta]
  set tR [lindex $tcol 0]
  set tG [lindex $tcol 1]
  set tB [lindex $tcol 2]
  if {[llength $tcol] == 0} {
    return
  }
  
  # spocitame polkruznicu
  set mode 0
  set ta 0.0
  set sa {}
  set ea {}
  set cstep 0.0
  set goback 0
  while {$mode >= 0} {
    set tx [expr $x1 + $dx * cos($ta) + $dy * sin($ta)]
    set ty [expr $y1 - $dx * sin($ta) + $dy * cos($ta)]
    set ccol [xth_me_image_get_color $tx $ty $itags $etags]
    if {[llength $ccol] != 3} {
      set ceq 0
    } else {
      set dR [expr [lindex $ccol 0] - $tR]
      set dG [expr [lindex $ccol 1] - $tG]
      set dB [expr [lindex $ccol 2] - $tB]
      set ceq [expr [expr ($dR * $dR) + ($dG * $dG) + ($dB * $dB)] < 1600]
    }
    switch $mode {
      0 {
	if {$ceq} {
	  set sa $ta
	  set ea $ta
	  if {$ta == 0.0} {
	    set mode 1
	    set goback 1
	  } elseif {$ta < 0.0} {
	    set mode 1
	  } else {
	    set mode 2
	  }
	} else {
	  if {$ta == 0.0} {
	    set ta $da
	  } elseif {$ta < 0.0} {
	    set ta [expr -1.0 * $ta + $da]
	  } else {
	    set ta [expr -1.0 * $ta]
	  }
	}
      }
      1 {
	# odratavame
	if {$ceq} {
	  set sa $ta
	  set ta [expr $ta - $da]
	} else {
	  if $goback {
	    set ta [expr $ea + $da]
	    set mode 2
	    set goback 0
	  } else {
	    set mode -1
	  }
	}
      }
      2 {
	# priratavame
	if {$ceq} {
	  set ea $ta
	  set ta [expr $ta + $da]
	} else {
	  if $goback {
	    set ta [expr $sa - $da]
	    set mode 1
	    set goback 0
	  } else {
	    set mode -1
	  }
	}
      }
    }    
    if {($ta > $maxta) || ($ta < $minta)} {
      set mode -1
    }
  }
  if {[llength $sa] == 0} {
    return
  }
  
  # vypocitame bod
  set ta [expr 0.5 * ($sa + $ea)]
  set tx [expr $x1 + $dx * cos($ta) + $dy * sin($ta)]
  set ty [expr $y1 - $dx * sin($ta) + $dy * cos($ta)]
  
  set ok 0
  set tryclose [expr ($npx > 3) && (hypot($x1 - $xs, $y1 - $ys) < $dist)]
  if {$tryclose} {
    set ttx $tx
    set tty $ty
    set tx $xs
    set ty $ys
  }
  while {!$ok} {
    set nin 0
    set nto 0
    for {set t 0.0} {$t <= $dist} {set t [expr $t + 1.0]} {
      set lx [expr $x1 + ($tx - $x1) / $dist * $t]
      set ly [expr $y1 + ($ty - $y1) / $dist * $t]
      if {$tryclose} {
	set ccol [xth_me_image_get_color $lx $ly]
      } else {
	set ccol [xth_me_image_get_color $lx $ly $itags $etags]
      }
      if {[llength $ccol] == 1} {
	return
      } elseif {[llength $ccol] == 0} {
	set ceq 0
      } else {
	set dR [expr [lindex $ccol 0] - $tR]
	set dG [expr [lindex $ccol 1] - $tG]
	set dB [expr [lindex $ccol 2] - $tB]
	set ceq [expr [expr ($dR * $dR) + ($dG * $dG) + ($dB * $dB)] < 1600]
      }
      if {$ceq} {incr nin}
      incr nto
    }
    if {double($nin)/double($nto) < 0.5} {
      if {$tryclose} {
	set tryclose 0
	set tx $ttx
	set ty $tty
      } else {
	return
      }
    } else {
      set ok 1
    }
  }
  
  # vlozi bod na ciare
  if {$tryclose} {
    xth_me_cmds_close_line $id
    return 1
  } else {
    xth_me_cmds_start_create_linept {} [format "%.2f" $tx] [format "%.2f" $ty] 0 0
    xth_me_cmds_end_create_linept 0 0 0
    return [list $tx $ty]
  }

}

# Line simplification using the Ramer-Douglas-Peucker algorithm
# P is a list of points. Epsilon controls the point removal accuracy. Larger E means less points remaining
proc simplify_line_RDP {P epsilon} {
  set P0 [lindex $P 0]
  set P1 [lindex $P end]
  set dmax 0
  set idx 0
  for {set i 1} {$i < [llength $P]-1} {incr i} {
    set d [DistanceToLine [lindex $P $i] $P0 $P1]
    if {$d > $dmax} {
        set dmax $d
        set idx $i
    }
  }

  if {$dmax >= $epsilon} {
    set leg1 [simplify_line_RDP [lrange $P 0 $idx] $epsilon]
    set leg2 [simplify_line_RDP [lrange $P $idx end] $epsilon]
    set leg [concat [lrange $leg1 0 end-1] $leg2]
  } else {
    return [list $P0 $P1]
  }
}

# Given a point and a line segment, return distance between the point and the segment
# Perpendicular or euclidean distance
# can probably be replaced with ::math::geometry::findClosestPointOnLine, but not tested
proc DistanceToLine {P P0 P1} {
  lassign $P PX PY
  lassign $P0 x0 y0
  lassign $P1 x1 y1
  
  set lx [expr {$x1 - $x0}]
  set ly [expr {$y1 - $y0}]
  set d [expr {hypot($lx, $ly)}]              ;# To normalize line vector
  if {$d == 0} { return 99999 }               ;# Degenerate line

  set px [expr {$PX - $x0}]                   ;# Vector to our point
  set py [expr {$PY - $y0}]
  set hdist [expr {($px*$lx + $py*$ly) / $d}] ;# Distance along line vector
  set vdist [expr {($py*$lx - $px*$ly) / $d}] ;# Distance along perpendicular

  if {$hdist < 0} {                           ;# Point behind line segment
    set rdist [expr {hypot($px, $py)}]
  } elseif {$hdist <= $d} {                   ;# Point within line segment
    set rdist [expr {abs($vdist)}]
  } else {                                    ;# Point beyond line segment
    set px [expr {$PX - $x1}]
    set py [expr {$PY - $y1}]
    set rdist [expr {hypot($px, $py)}]
  }
  return $rdist
}

# Replace the selected line with one with less points
proc xth_me_cmds_line_simplify {} {
  global xth
  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 3} {return}
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 4} {return}
  
  # copy line points to a new list
  set points {}
  foreach x $xth(me,cmds,$id,xplist) {
    if {$x != 0} {
      lappend points [concat $xth(me,cmds,$id,$x,x) $xth(me,cmds,$id,$x,y)]
    }
  }
  
  # reduce points
  set points [simplify_line_RDP $points $xth(gui,me,line,simp_limit)]
  
  set type $xth(me,cmds,$id,type)
  set opts " $xth(me,cmds,$id,options)"
  if {$xth(me,cmds,$id,reverse)} {
    set opts "$opts -reverse on"
  }
  if {$xth(me,cmds,$id,close)} {
    set opts "$opts -close on"
  }
  xth_me_cmds_delete $id
  xth_me_cmds_create_line 0 2 $type $opts $points
  xth_me_cmds_set_mode 0
  return
}

proc xth_me_cmds_line_poly2bezier {} {
  global xth
  set id $xth(me,cmds,selid)
  if {$xth(me,cmds,$id,ct) != 3} {return}
  set npx [llength $xth(me,cmds,$id,xplist)]
  if {$npx < 4} {return}
  foreach x $xth(me,cmds,$id,xplist) {
    if {($x != 0) && ($xth(me,cmds,$id,$x,idn) || $xth(me,cmds,$id,$x,idp))} return
  }
  set cdir [pwd]
  cd $xth(me,fpath)
  set f [open "therion.bci" w]
  foreach x $xth(me,cmds,$id,xplist) {
    if {$x != 0} {
      puts $f "$xth(me,cmds,$id,$x,x) $xth(me,cmds,$id,$x,y)"
    }
  }
  close $f
  set f [open "therion.bco" w]
  close $f
  update idletasks
  catch {
    set thid [open "|$xth(gui,compcmd) -b" r]
    read $thid
    close $thid
  } 
  set data {}
  catch {
    set f [open "therion.bco" r]
    while {![eof $f]} {
      set ln [gets $f]
      if {[regexp {\d+} $ln]} {
        lappend data $ln
      }
    }
    close $f
  }
  catch {
    file delete therion.bci
    file delete therion.bco
  }
  cd $cdir
  if {[llength $data] == 0} {return}
  set type $xth(me,cmds,$id,type)
  set opts " $xth(me,cmds,$id,options)"
  if {$xth(me,cmds,$id,reverse)} {
    set opts "$opts -reverse on"
  }
  if {$xth(me,cmds,$id,close)} {
    set opts "$opts -close on"
  }
  xth_me_cmds_delete $id
  xth_me_cmds_create_line 0 2 $type $opts $data
  xth_me_cmds_set_mode 0
  return
}
therion-5.4.1/xtherion/me_imgs.tcl000066400000000000000000001121351307545355600171750ustar00rootroot00000000000000##
## me_imgs.tcl --
##
##     Map editor images module.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## -------------------------------------------------------------------- 

set xth(gui,openxp) 0
set xth(me,imgs,xviid) 0

proc xth_me_image_update_position {} {
  global xth 
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  $xth(ctrl,me,images).ic.posln configure -text [format "%.0f:%.0f" \
    [lindex $xth(me,imgs,$imgx,position) 0] \
    [lindex $xth(me,imgs,$imgx,position) 1]]
  set xth(ctrl,me,images,posx) [format "%.0f" [lindex $xth(me,imgs,$imgx,position) 0]]
  set xth(ctrl,me,images,posy) [format "%.0f" [lindex $xth(me,imgs,$imgx,position) 1]]
  update idletasks
}

proc xth_me_image_update_list {} {
  global xth
  set xth(me,imgs,list) {}
  foreach imgx $xth(me,imgs,xlist) {
    if {$xth(me,imgs,$imgx,XVI)} {
      set imgsize "(XVI)"
    } elseif {[string length $xth(me,imgs,$imgx,image)] > 0} {
      set imgw [image width $xth(me,imgs,$imgx,image)]
      set imgh [image height $xth(me,imgs,$imgx,image)]
      set imgsize "($imgw x $imgh)"
    } else {
      set imgsize "(unknown)"
    }
    lappend xth(me,imgs,list) "$xth(me,imgs,$imgx,name) $imgsize"
  }
}


proc xth_me_image_move_to {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return;
  }
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  xth_me_unredo_action [mc "moving image"] \
    "xth_me_image_move $imgx $xth(me,imgs,$imgx,position); xth_me_image_update_position" \
    "xth_me_image_move $imgx $xth(ctrl,me,images,posx) $xth(ctrl,me,images,posy); xth_me_image_update_position"
  xth_me_image_move $imgx $xth(ctrl,me,images,posx) $xth(ctrl,me,images,posy)
  xth_me_image_update_position
}



proc xth_me_image_move {imgx xx yy} {
  # zisti si aktualne suradnice
  global xth
  if {[catch {expr $xx}]} {
    set xx [lindex $xth(me,imgs,$imgx,position) 0]
  }
  if {[catch {expr $yy}]} {
    set yy [lindex $xth(me,imgs,$imgx,position) 1]
  }
  set xth(me,imgs,$imgx,position) [list $xx $yy]
  xth_me_image_redraw $imgx
}


proc xth_me_image_toggle_vsb {iidx} {
  global xth
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return
  }
  if {[string length $iidx] < 1} {
    set iidx [lindex $isel 0]
  }
  set imgx [lindex $xth(me,imgs,xlist) $iidx]

  xth_me_unredo_action [mc "toggle image visibility"] \
    "xth_me_image_toggle_vsb $iidx" "xth_me_image_toggle_vsb $iidx"

  switch $xth(me,imgs,$imgx,vsb) {
    0 {
      set xth(me,imgs,$imgx,vsb) 1
      $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state normal
      xth_me_image_rescan $imgx
      xth_me_image_redraw $imgx
      set xth(ctrl,me,images,vis) 1
    }
    1 {
      set xth(me,imgs,$imgx,vsb) 0
      $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state hidden
      set xth(ctrl,me,images,vis) 0
    }
    default {
      set xth(ctrl,me,images,vis) 0
    }
  }
}


proc xth_me_image_set_gamma {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set ng $xth(me,imgs,$imgx,gamma)
  xth_status_bar_push me
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Correcting image gamma (%s) ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  $xth(me,imgs,$imgx,image) configure -gamma $ng
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    $dsti configure -gamma $ng
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

if {$xth(gui,me,nozoom)} {

proc xth_me_images_rescandraw {} {
  global xth
  if {($xth(me,zoom) > 100) && $xth(gui,me,nozoom)} {
    foreach imgx $xth(me,imgs,xlist) {
      xth_me_image_redraw $imgx
    }
  }
}

proc xth_me_image_redraw {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    xth_me_imgs_xvi_redraw $imgx
    return
  }
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  set x [lindex $xth(me,imgs,$imgx,position) 0]
  set y [lindex $xth(me,imgs,$imgx,position) 1]
  set w [image width $xth(me,imgs,$imgx,image)]
  set h [image height $xth(me,imgs,$imgx,image)]
  # ak je zoom 100 - nastavi image na source image
  # a kasle na ostatne
  if {$xth(me,zoom) <= 100} {
    foreach imgl $xth(me,imgs,$imgx,subimgs) {
      incr csi
      $xth(me,can) coords [lindex $imgl 1] \
	[xth_me_real2canx [expr $x + [lindex $imgl 2]]] \
	[xth_me_real2cany [expr $y - [lindex $imgl 3]]]
    }
  } else {
    # najde si suradnice z obrazka, ktore su viditelne
    set imgl [lindex $xth(me,imgs,$imgx,subimgs) 0]
    set cminx [winfo x $xth(me,can)]
    set cminy [winfo y $xth(me,can)]
    set cmaxx [expr $cminx + [winfo width $xth(me,can)]]
    set cmaxy [expr $cminy + [winfo height $xth(me,can)]]
    set sx [xth_me_can2realx [$xth(me,can) canvasx $cminx]]
    set sw [expr [xth_me_can2realx [$xth(me,can) canvasx $cmaxx]] - $sx]
    set sy [xth_me_can2realy [$xth(me,can) canvasy $cminy]]
    set sh [expr $sy - [xth_me_can2realy [$xth(me,can) canvasy $cmaxy]]]

    # ak je nieco viditelne - tak to zobrazi
    set vfx [expr round($sx - $x)]
    set vfy [expr round($y - $sy)] 
    set vtx [expr round($vfx + $sw)] 
    set vty [expr round($vfy + $sh)]
    if {$vfx < 0} {set vfx 0}
    if {$vfy < 0} {set vfy 0}
    if {$vtx > $w} {set vtx $w}
    if {$vty > $h} {set vty $h}
    
    #puts "$vfx $vfy $vtx $vty"
    if {($vtx <= 0) || ($vty <= 0) || 
	($vfx >= $w) || ($vfy >= $h) ||
	($vtx <= $vfx) || ($vty <= $vfy)} {
      # nezobrazime nic
      $xth(me,can) itemconfigure [lindex $imgl 1] -image {}
    } else {
      # zobrazime vyrez
      set dsti [lindex $imgl 0]
      $dsti copy $xth(me,imgs,$imgx,image) -zoom [expr $xth(me,zoom) / 100] -shrink \
	-from $vfx $vfy $vtx $vty
      $xth(me,can) itemconfigure [lindex $imgl 1] -image $dsti
      $xth(me,can) coords [lindex $imgl 1] \
	[xth_me_real2canx [expr $x + $vfx]] \
	[xth_me_real2cany [expr $y - $vfy]]
    }
  }
  update idletasks
}

proc xth_me_image_rescan {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set srci $xth(me,imgs,$imgx,image)
  xth_status_bar_push me
  set origgamma [$srci cget -gamma]
  $srci configure -gamma 1.0
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Zooming image %s ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    switch $xth(me,zoom) {
      100 {
	$xth(me,can) itemconfigure [lindex $imgl 1] -image $srci
      }
      default {
	$xth(me,can) itemconfigure [lindex $imgl 1] -image $dsti
      }
    }
    switch $xth(me,zoom) {
      25 {$dsti copy $srci -subsample 4 -shrink}
      50 {$dsti copy $srci -subsample 2 -shrink}
      200 {}
      400 {}
      default {}
    }
  }
  xth_me_progbar_hide
  $srci configure -gamma $origgamma
  xth_status_bar_pop me
}

# NOZOOMING
} else {

proc xth_me_images_rescandraw {} {
}

proc xth_me_image_redraw {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    xth_me_imgs_xvi_redraw $imgx
    return
  }
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  set x [lindex $xth(me,imgs,$imgx,position) 0]
  set y [lindex $xth(me,imgs,$imgx,position) 1]
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    incr csi
    $xth(me,can) coords [lindex $imgl 1] \
      [xth_me_real2canx [expr $x + [lindex $imgl 2]]] \
      [xth_me_real2cany [expr $y - [lindex $imgl 3]]]
  }
  update idletasks
}

proc xth_me_image_rescan {imgx} {
  global xth
  if {$xth(me,imgs,$imgx,vsb) <= 0} {
    return
  }
  if {$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set srci $xth(me,imgs,$imgx,image)
  xth_status_bar_push me
  set totalsi [llength $xth(me,imgs,$imgx,subimgs)]
  set csi 0
  xth_status_bar_status me [format "Zooming image %s ..." $xth(me,imgs,$imgx,name)]
  xth_me_progbar_show $totalsi
  foreach imgl $xth(me,imgs,$imgx,subimgs) {
    set dsti [lindex $imgl 0]
    incr csi
    xth_me_progbar_prog $csi
    $dsti blank
    switch $xth(me,zoom) {
      25 {$dsti copy $srci -subsample 4 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      50 {$dsti copy $srci -subsample 2 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      200 {$dsti copy $srci -zoom 2 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      400 {$dsti copy $srci -zoom 4 -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
      default {$dsti copy $srci -shrink -from \
	[lindex $imgl 2] [lindex $imgl 3] [lindex $imgl 4] [lindex $imgl 5]}
    }
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

}
# END NO NOZOOM

proc xth_me_imgs_xvi_redraw {imgx} {
  global xth
  set id $xth(me,imgs,$imgx,image)  
  
  # calculate all coordinates
  # grid
  set px [lindex $xth(me,imgs,$imgx,position) 0]
  set py [lindex $xth(me,imgs,$imgx,position) 1]
  set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
  set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
  set gxx [lindex $xth(me,imgs,$imgx,XVIgrid) 2]
  set gxy [lindex $xth(me,imgs,$imgx,XVIgrid) 3]
  set gyx [lindex $xth(me,imgs,$imgx,XVIgrid) 4]
  set gyy [lindex $xth(me,imgs,$imgx,XVIgrid) 5]
  set ngx [lindex $xth(me,imgs,$imgx,XVIgrid) 6]
  set ngy [lindex $xth(me,imgs,$imgx,XVIgrid) 7]
  
  set shx [expr double($px) - double($gx)]
  set shy [expr double($py) - double($gy)]
  
  set odd 0
  set crd {}
  for {set i 0} {$i <= $ngy} {incr i} {
    set lvx [xth_me_real2canx [expr $shx + $gx + $i * $gyx]]
    set lvy [xth_me_real2cany [expr $shy + $gy + $i * $gyy]]
    set rvx [xth_me_real2canx [expr $shx + $gx + $i * $gyx + $ngx * $gxx]]
    set rvy [xth_me_real2cany [expr $shy + $gy + $i * $gyy + $ngx * $gxy]]
    if {$odd} {
      lappend crd $lvx $lvy $rvx $rvy
      set odd 0
    } else {
      lappend crd $rvx $rvy $lvx $lvy
      set odd 1
    }
  }
  $xth(me,can) coords [format "%sGH" $id] $crd
  set crd {}
  for {set i 0} {$i <= $ngx} {incr i} {
    set lvx [xth_me_real2canx [expr $shx + $gx + $i * $gxx]]
    set lvy [xth_me_real2cany [expr $shy + $gy + $i * $gxy]]
    set rvx [xth_me_real2canx [expr $shx + $gx + $i * $gxx + $ngy * $gyx]]
    set rvy [xth_me_real2cany [expr $shy + $gy + $i * $gxy + $ngy * $gyy]]
    if {$odd} {
      lappend crd $lvx $lvy $rvx $rvy
      set odd 0
    } else {
      lappend crd $rvx $rvy $lvx $lvy
      set odd 1
    }
  }
  $xth(me,can) coords [format "%sGV" $id] $crd

  # walls
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set x0 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 4]]]
      set y0 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 5]]]
      set x1 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 6]]]
      set y1 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 7]]]
      set x2 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 8]]]
      set y2 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 9]]]
      set x3 [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 10]]]
      set y3 [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 11]]]
      $xth(me,can) coords [format "%sWLF%d" $id $i] $x0 $y0 $x1 $y1 $x2 $y2 $x3 $y3
      $xth(me,can) coords [format "%sWLO%d" $id $i] $x0 $y0 $x1 $y1 $x2 $y2 $x3 $y3 $x0 $y0
    }
  }

  # shots
  for {set i 0} {$i < [llength $shts]} {incr i} {
    set fx [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 0]]]
    set fy [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 1]]]
    set tx [xth_me_real2canx [expr $shx + [lindex [lindex $shts $i] 2]]]
    set ty [xth_me_real2cany [expr $shy + [lindex [lindex $shts $i] 3]]]
    $xth(me,can) coords [format "%sSH%d" $id $i] $fx $fy $tx $ty
  }
  
  # sketch lines
  set sklns $xth(me,imgs,$imgx,XVIsketchlines)
  for {set i 0} {$i < [llength $sklns]} {incr i} {
    set slcl [lrange [lindex $sklns $i] 1 end]
    set slcrds {}
    for {set j 0} {$j < [llength $slcl]} {set j [expr $j + 2]} {
      set xx [xth_me_real2canx [expr $shx + [lindex $slcl $j]]]
      set yy [xth_me_real2cany [expr $shy + [lindex $slcl [expr $j + 1]]]]
      append slcrds "$xx $yy "
    }
    if {[llength $slcrds] < 4} {
      set slcrds [list [expr $xx - 0.5] [expr $yy - 0.5] \
                 [expr $xx + 0.5] [expr $yy - 0.5] \
                 [expr $xx + 0.5] [expr $yy + 0.5] \
                 [expr $xx - 0.5] [expr $yy + 0.5] \
                 [expr $xx - 0.5] [expr $yy - 0.5]]
    }
    $xth(me,can) coords [format "%sSKLN%d" $id $i] $slcrds
  }

  # stations
  set stns $xth(me,imgs,$imgx,XVIstations)
  set xth(me,imgs,$imgx,XVIstationsX) {}
  for {set i 0} {$i < [llength $stns]} {incr i} {
    set cx [expr $shx + [lindex [lindex $stns $i] 0]]
    set cy [expr $shy + [lindex [lindex $stns $i] 1]]
    lappend xth(me,imgs,$imgx,XVIstationsX) [list $cx $cy]
    set cx [xth_me_real2canx $cx]
    set cy [xth_me_real2cany $cy]
    $xth(me,can) coords [format "%sST%d" $id $i] [expr $cx - $xth(gui,xvi_station_size)] [expr $cy - $xth(gui,xvi_station_size)] [expr $cx + $xth(gui,xvi_station_size)] [expr $cy + $xth(gui,xvi_station_size)]
  }
  
  if {$xth(me,imgs,$imgx,vsb) == 1} {
    $xth(me,can) itemconfigure $xth(me,imgs,$imgx,image) -state normal
  }
}

proc xth_me_imgs_xvi_create {imgx} {
  global xth

  # firstly delete all imgx items
  foreach silist $xth(me,imgs,$imgx,subimgs) {
    $xth(me,can) delete [lindex $silist 1]
  }
  set xth(me,imgs,$imgx,subimgs) {}
  set id $xth(me,imgs,$imgx,image)
  set stpref [format "XVIstI%sS" $imgx] 
  # now create them

  # walls fill
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set cid [$xth(me,can) create polygon 0 0 1 0 1 1 -stipple $xth(gui,xvi_walls_fptn) -fill $xth(gui,xvi_walls_fclr) -width 1 -state hidden -tags [list $id [format "%sWLF%d" $id $i]]]
      xth_me_bind_area_drag $cid $imgx
      xth_me_bind_image_drag $cid $imgx
      lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
    }
  }

  # grid
  set grid_info_str [format [mc "grid - spacing %s"] $xth(me,imgs,$imgx,XVIgrids)]
  set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_grid_clr) -width 1 -state hidden -tags [list $id [format "%sGH" $id]]]
  xth_me_bind_area_drag $cid $imgx
  xth_me_bind_image_drag $cid $imgx
  $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $grid_info_str]"
  $xth(me,can) bind $cid  "xth_status_bar_pop me"
  lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_grid_clr) -width 1 -state hidden -tags [list $id [format "%sGV" $id]]]
  xth_me_bind_area_drag $cid $imgx
  xth_me_bind_image_drag $cid $imgx
  $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $grid_info_str]"
  $xth(me,can) bind $cid  "xth_status_bar_pop me"
  lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]

  # walls outline
  set shts $xth(me,imgs,$imgx,XVIshots)
  for {set i 0} {$i < [llength $shts]} {incr i} {
    if {[llength [lindex $shts $i]] >= 12} {
      set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_walls_oclr) -width 1 -state hidden -tags [list $id [format "%sWLO%d" $id $i]]]
      xth_me_bind_area_drag $cid $imgx
      xth_me_bind_image_drag $cid $imgx
      lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
    }
  }

  # shots
  for {set i 0} {$i < [llength $shts]} {incr i} {
    set cid [$xth(me,can) create line 0 0 1 1 -fill $xth(gui,xvi_shot_clr) -width 3 -state hidden -tags [list $id [format "%sSH%d" $id $i]]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }


  # sketch lines
  set sklns $xth(me,imgs,$imgx,XVIsketchlines)
  for {set i 0} {$i < [llength $sklns]} {incr i} {
    set cclr [lindex [lindex $sklns $i] 0]
    set cdash {}
    if {[string equal $cclr connect]} {
      set cclr gray
      set cdash .
    }
    set cid [$xth(me,can) create line 0 0 1 1 -fill $cclr -dash $cdash -width $xth(gui,xvi_sketch_line_width) -state hidden -tags [list $id [format "%sSKLN%d" $id $i]]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }

  # stations
  set stns $xth(me,imgs,$imgx,XVIstations)
  for {set i 0} {$i < [llength $stns]} {incr i} {
    set cid [$xth(me,can) create oval 0 0 1 1 -fill $xth(gui,xvi_station_fclr) -outline $xth(gui,xvi_station_oclr) -width 1 -state hidden -tags [list $id [format "%sST%d" $id $i] "$stpref$i"]]
    xth_me_bind_area_drag $cid $imgx
    xth_me_bind_image_drag $cid $imgx
    set stinfo [format [mc "station - %s"] [lindex [lindex $stns $i] 2]]
    $xth(me,can) bind $cid  "xth_status_bar_push me; xth_status_bar_status me [list $stinfo]"
    $xth(me,can) bind $cid  "xth_status_bar_pop me"
    lappend xth(me,imgs,$imgx,subimgs) [list {} $cid]
  }

  # and change coordinates
  catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
  set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
  if {$iidx > 0} {
    $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
  }
  xth_me_imgs_xvi_redraw $imgx
}

proc xth_me_imgs_set_root {imgx} {
  global xth
  if {!$xth(me,imgs,$imgx,XVI)} {
    return
  }
  set rs $xth(me,imgs,$imgx,XVIroot)
  set xss $xth(me,imgs,$imgx,XVIstations)
  if {[string length $rs] < 1} {
    return
  }
  
  # prejde vsetky stations, a skusi najst tu s danym menom
  # ked ju najde, prerata position na grid origin a vynuluje
  for {set i 0} {$i < [llength $xss]} {incr i} {
    if {[string equal [lindex [lindex $xss $i] 2] $rs]} {
      set sx [lindex [lindex $xss $i] 0]
      set sy [lindex [lindex $xss $i] 1]
      set px [lindex $xth(me,imgs,$imgx,position) 0]
      set py [lindex $xth(me,imgs,$imgx,position) 1]
      set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
      set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
      set xth(me,imgs,$imgx,position) [list [expr double($gx) + double($px) - double($sx)] [expr double($gy) + double($py) - double($sy)]]
      set xth(me,imgs,$imgx,XVIroot) {}  
      break
    }
  }
}

proc xth_me_imgs_get_root {imgx} {
  global xth
  set xss $xth(me,imgs,$imgx,XVIstations)
  if {[llength $xss] > 0} {
    set i 0
    set sx [lindex [lindex $xss $i] 0]
    set sy [lindex [lindex $xss $i] 1]
    set px [lindex $xth(me,imgs,$imgx,position) 0]
    set py [lindex $xth(me,imgs,$imgx,position) 1]
    set gx [lindex $xth(me,imgs,$imgx,XVIgrid) 0]
    set gy [lindex $xth(me,imgs,$imgx,XVIgrid) 1]
    return [list [lindex $xss $i 2] [expr double($sx) + double($px) - double($gx)] [expr double($sy) + double($py) - double($gy)]]
  } else {
    return [list $xth(me,imgs,$imgx,XVIroot)]
  }
}


proc xth_me_image_insert {xx yy fname iidx imgx} {
  
  global xth
  
  if {! $xth(me,fopen)} {
    return
  }
  
  set vsb 1
  set igamma 1.0
  if {[llength $xx] > 1} {
    if {[llength $xx] > 2} {
      set igamma [lindex $xx 2]
    }
    set vsb [lindex $xx 1]
    set xx [lindex $xx 0]
  } 
  
  set xdata {}
  set ximage 0
  if {[llength $imgx] > 1} {
    set xdata [lindex $imgx 1]
    set ximage 1
    set imgx [lindex $imgx 0]
  }
  
  set XVIroot {}
  set isXVI 0
  if {[llength $yy] > 1} {
    set XVIroot [lindex $yy 1]
    set yy [lindex $yy 0]
  }
  
  set dial_id 0
  
  if {([string length $fname] < 1) && (!$ximage)} {
    
    if {$xth(me,fnewf)} {
      set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	  -icon question -type yesno \
	  -message [mc "New *.th2 file needs to be saved before inserting background image. Save it now?"] \
	  -font $xth(gui,lfont)]
      if {$wtd == 1} {
	return
      }
      xth_me_save_file 1
    }
    if {$xth(me,fnewf)} {
      return
    }
    
    set fname [tk_getOpenFile -parent $xth(gui,main) \
	-filetypes $xth(gui,imgfiletypes) \
	-initialdir $xth(me,fpath) -defaultextension ".gif"]
	
    if {[string length $fname] < 1} {
      return
    } else {    
      if {[string equal -nocase [file extension $fname] .txt]} {
	 set fname [xth_me_ptopo2xvi $fname]
	 if {[string length $fname] < 1} {
	   return
	 }
      }
      # overi ci cesta sedi
      if {![string equal -length [string length $xth(me,fpath)] \
	$xth(me,fpath) $fname]} {
	set cwpath [file split $xth(me,fpath)]
	set ifpath [file split $fname]
	set cmnpath [lindex $ifpath 0]
	if {![string equal [lindex $cwpath 0] $cmnpath]} {
	  MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	    -icon error -type ok \
	    -message "Unable to create relative path to current file from $fname." \
	    -font $xth(gui,lfont)
	  return
	}
	for {set px 1} {$px < [llength $cwpath]} {incr px} {
	  if {![string equal [lindex $cwpath $px] [lindex $ifpath $px]]} {
	    break
	  } else {
	    append cmnpath [lindex $ifpath $px]
	  }
	}
	set cmnlevel $px
	set fname {}
	for {} {$px < [llength $ifpath]} {incr px} {
	  set fname [file join $fname [lindex $ifpath $px]]
	}
	set uplevel [expr [llength $cwpath] - $cmnlevel]
	for {set px 0} {$px < $uplevel} {incr px} {
	  set fname [file join ".." $fname]
	}
	set dial_id 1
      } else {
	set fname [string range $fname [expr [string length $xth(me,fpath)] + 1] end]
	set dial_id 1
      }
    }
  }
  
  
  xth_status_bar_push me
  xth_status_bar_status me "Loading image file $fname ..."
  set ffname {}
  if {!$ximage} {
    set ffname [file join $xth(me,fpath) $fname]
  }
  if {[string length $imgx] < 1} {
    set imgx $xth(me,imgln)
  }
  set imgid {}
  set XVIgrids {}
  set XVIgrid {}
  set XVIstations {}
  set XVIshots {}
  set XVIsketchlines {}
  set XVIimages {}
  if {!$xth(gui,openxp)} {
    catch {
      if {$ximage} {
	set imgid [image create photo -data $xdata]
      } else {
	set imgid [image create photo -file $ffname]
      }
    } errorinf
    if {[string length $imgid] < 1} {
      catch {
	source $ffname
      } errorinf
      if {[string length $XVIgrids] > 0} {
	set isXVI 1
	set imgid "XVI$xth(me,imgs,xviid)"
	incr xth(me,imgs,xviid)
      }
    }
  } else {
    set errorinf "excluded picture"
  }
  
  if {[string length $imgid] < 1} {
    if {$xth(me,unredook)} {
      set imgerr [mc "Unable to load image file.\n(Progressive JPEG encoding?)"]
      catch {
        set imgerr "$imgerr\n$ffname"
      } errorinf2
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
	-icon error -type ok \
	-message "$imgerr" \
	-font $xth(gui,lfont)
    }
    xth_status_bar_pop me
    if {$dial_id} {
      return
    } else {
      set vsb [expr $vsb - 2]
    }
  }
  
  set undocmd "xth_me_image_remove %d"
  set redocmd "xth_me_image_insert %s %s [list $fname] %d $imgx"
  
  if {[catch {expr $xx}]} {
    set xx $xth(me,area,xmin)
  }
  if {[catch {expr $yy}]} {
    set yy $xth(me,area,ymin)
  }
  
  xth_me_unredo_action [mc "inserting image"] \
    [format $undocmd $iidx] [format $redocmd "{$xx $vsb}" "{$yy $XVIroot}" $iidx]
  
  
  incr xth(me,nimgs)
  set xth(me,imgs,xlist) [linsert $xth(me,imgs,xlist) $iidx $imgx]
  set xth(me,imgs,$imgx,name) $fname
  set xth(me,imgs,$imgx,image) $imgid
  set xth(me,imgs,$imgx,position) [list $xx $yy]  
  set xth(me,imgs,$imgx,subimgs) {}
  set xth(me,imgs,$imgx,vsb) $vsb
  set xth(me,imgs,$imgx,gamma) $igamma
  set xth(me,imgs,$imgx,reload) [list $undocmd $redocmd]
  set xth(me,imgs,$imgx,ffname) $ffname
  set xth(me,imgs,$imgx,fmtime) 0
  catch {set xth(me,imgs,$imgx,fmtime) [file mtime $ffname]}
  set xth(me,imgs,$imgx,XVI) $isXVI
  set xth(me,imgs,$imgx,XVIbitmaps) {}
  set xth(me,imgs,$imgx,XVIimg) $ximage
  set xth(me,imgs,$imgx,XVIroot) $XVIroot
  set xth(me,imgs,$imgx,XVIgrids) $XVIgrids
  set xth(me,imgs,$imgx,XVIgrid) $XVIgrid
  set xth(me,imgs,$imgx,XVIshots) $XVIshots
  set xth(me,imgs,$imgx,XVIstations) $XVIstations
  set xth(me,imgs,$imgx,XVIsketchlines) $XVIsketchlines
  set xth(me,imgs,$imgx,XVIstationsX) {}

  xth_me_imgs_set_root $imgx

  if {$isXVI} {  
    set Xxx [lindex $XVIgrid 0]
    set Xyy [lindex $XVIgrid 1]
    set nxx [lindex $xth(me,imgs,$imgx,position) 0]
    set nyy [lindex $xth(me,imgs,$imgx,position) 1]
    set Xshx [expr double($nxx) - double($Xxx)]
    set Xshy [expr double($nyy) - double($Xyy)]
  }
  
  # let's create image subimages
  if {($vsb >= 0) && (!$xth(me,imgs,$imgx,XVI))} {
    if {$xth(gui,me,nozoom)} {
      set subimg [image create photo]
      set subcimg [$xth(me,can) create image 0 0 -image $subimg -anchor nw \
      -tags "$imgid bgimg imgx$imgx"]
      xth_me_bind_area_drag $subcimg $imgx
      xth_me_bind_image_drag $subcimg $imgx
      set iw [image width $imgid]
      set ih [image height $imgid]
      lappend xth(me,imgs,$imgx,subimgs) [list $subimg $subcimg 0 0 $iw $ih]
      catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
      if {$iidx > 0} {
        $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
      }
    } else {
      set iw [image width $imgid]
      set ih [image height $imgid]
      set subisize 128
      for {set subx 0} {$subx < $iw} {incr subx $subisize} {
        for {set suby 0} {$suby < $ih} {incr suby $subisize} {
          set subxx [expr $subx + $subisize]
          set subyy [expr $suby + $subisize]
          if {$subxx > $iw} {
            set subxx $iw
          }
          if {$subyy > $ih} {
            set subyy $ih
          }
          set subimg [image create photo]
          set subcimg [$xth(me,can) create image 0 0 -image $subimg -anchor nw \
          -tags "$imgid bgimg imgx$imgx"]
          xth_me_bind_area_drag $subcimg $imgx
          xth_me_bind_image_drag $subcimg $imgx
          lappend xth(me,imgs,$imgx,subimgs) [list $subimg $subcimg $subx $suby $subxx $subyy]
        }
      }
      catch {$xth(me,can) lower $xth(me,imgs,$imgx,image) command}
      set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
      if {$iidx > 0} {
        $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) [expr $iidx - 1]],image)
      }
    }  
  }
  if {($vsb >= 0) && ($xth(me,imgs,$imgx,XVI))} {
    xth_me_imgs_xvi_create $imgx
  }
  xth_me_image_rescan $imgx
  xth_me_image_redraw $imgx
  xth_me_image_set_gamma $imgx
  xth_me_image_update_list
  xth_me_image_select 0
  incr xth(me,imgln)
  catch {$xth(me,can) raise cmd_ctrl bgimg}  
  set ximg 1
  foreach xid $XVIimages {
    set llln $xth(me,imgln)
    xth_me_image_insert [expr double([lindex $xid 0]) + $Xshx] [expr double([lindex $xid 1]) + $Xshy] [format "%s - IMG%d" $fname $ximg] [expr $iidx + 1] [list {} [lindex $xid 2]]
    if {$xth(me,imgln) > $llln} {
      lappend xth(me,imgs,$imgx,XVIbitmaps) $llln
    }
    incr ximg
  }
  xth_status_bar_pop me
}


proc xth_me_image_destroy_all {} {
  global xth
  foreach imgx $xth(me,imgs,xlist) {
    unset xth(me,imgs,$imgx,name)
    unset xth(me,imgs,$imgx,position)
    if {[string length $xth(me,imgs,$imgx,image)] > 0} {
      catch {image delete $xth(me,imgs,$imgx,image)}
    }
    unset xth(me,imgs,$imgx,image)
    unset xth(me,imgs,$imgx,vsb)
    unset xth(me,imgs,$imgx,gamma)
    foreach silist $xth(me,imgs,$imgx,subimgs) {
      catch {image delete [lindex $silist 0]}
      $xth(me,can) delete [lindex $silist 1]
    }
    unset xth(me,imgs,$imgx,reload)
    unset xth(me,imgs,$imgx,ffname)
    unset xth(me,imgs,$imgx,fmtime)
    unset xth(me,imgs,$imgx,subimgs)
    unset xth(me,imgs,$imgx,XVI)
    unset xth(me,imgs,$imgx,XVIbitmaps)
    unset xth(me,imgs,$imgx,XVIroot)
    unset xth(me,imgs,$imgx,XVIgrids)
    unset xth(me,imgs,$imgx,XVIgrid)
    unset xth(me,imgs,$imgx,XVIshots)
    unset xth(me,imgs,$imgx,XVIstations)
    unset xth(me,imgs,$imgx,XVIstationsX)
    unset xth(me,imgs,$imgx,XVIsketchlines)
  }
  set xth(me,nimgs) 0
  set xth(me,imgln) 0
  set xth(me,imgs,list) {}
  set xth(me,imgs,xlist) {}
}

proc xth_me_image_remove {iidx} {
  global xth
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  if {[string length $iidx] < 1} {
    set iidx [lindex $isel 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {[string length $xth(me,imgs,$imgx,ffname)] == 0} return
  }
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  if {[llength $xth(me,imgs,$imgx,XVIbitmaps)] > 0} {
    foreach bx $xth(me,imgs,$imgx,XVIbitmaps) {
      set ccc [lsearch -exact $xth(me,imgs,xlist) $bx]
      catch {xth_me_image_remove $ccc}
    }
  }
  set iidx [lsearch -exact $xth(me,imgs,xlist) $imgx]
  xth_me_unredo_action [mc "removing image"] \
    "xth_me_image_insert {[lindex $xth(me,imgs,$imgx,position) 0] $xth(me,imgs,$imgx,vsb) $xth(me,imgs,$imgx,gamma)} [lindex $xth(me,imgs,$imgx,position) 1] [list $xth(me,imgs,$imgx,name)] $iidx $imgx" "xth_me_image_remove $iidx"
  unset xth(me,imgs,$imgx,name)
  unset xth(me,imgs,$imgx,position)
  if {[string length $xth(me,imgs,$imgx,image)] > 0} {
    catch {image delete $xth(me,imgs,$imgx,image)}
  }
  unset xth(me,imgs,$imgx,image)
  unset xth(me,imgs,$imgx,vsb)
  unset xth(me,imgs,$imgx,gamma)
  foreach silist $xth(me,imgs,$imgx,subimgs) {
    catch {image delete [lindex $silist 0]}
    $xth(me,can) delete [lindex $silist 1]
  }
  unset xth(me,imgs,$imgx,subimgs)
  unset xth(me,imgs,$imgx,reload)
  unset xth(me,imgs,$imgx,ffname)
  unset xth(me,imgs,$imgx,fmtime)
  unset xth(me,imgs,$imgx,XVI)
  unset xth(me,imgs,$imgx,XVIbitmaps)
  unset xth(me,imgs,$imgx,XVIroot)
  unset xth(me,imgs,$imgx,XVIgrids)
  unset xth(me,imgs,$imgx,XVIgrid)
  unset xth(me,imgs,$imgx,XVIshots)
  unset xth(me,imgs,$imgx,XVIstations)
  unset xth(me,imgs,$imgx,XVIstationsX)
  unset xth(me,imgs,$imgx,XVIsketchlines)
  set xth(me,nimgs) [expr $xth(me,nimgs) - 1]
  set xth(me,imgs,xlist) [lreplace $xth(me,imgs,xlist) $iidx $iidx]
  xth_me_image_update_list
  if {$iidx >= [llength $xth(me,imgs,xlist)]} {
    set iidx end
  }
  xth_me_image_select $iidx
}


proc xth_me_image_move_special {iidx newiidx} {

  global xth  

  if {$iidx == [expr $xth(me,nimgs) - 1]} {
    set iidx $xth(me,nimgs)
  }
  if {$iidx < $xth(me,nimgs)} {
    set iiidx $iidx
    set xiidx $iidx
  } else {
    set iiidx end
    set xiidx [expr $xth(me,nimgs) - 1]
  }
  set imgx [lindex $xth(me,imgs,xlist) $iiidx]

  if {$newiidx < $xth(me,nimgs)} {
    $xth(me,can) raise $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) $newiidx],image)
    set xth(me,imgs,xlist) [linsert [lreplace $xth(me,imgs,xlist) $iiidx $iiidx] $newiidx $imgx]
  } else {
    $xth(me,can) lower $xth(me,imgs,$imgx,image) $xth(me,imgs,[lindex $xth(me,imgs,xlist) end],image)
    set xth(me,imgs,xlist) [linsert [lreplace $xth(me,imgs,xlist) $iiidx $iiidx] end $imgx]
  }  

  xth_me_unredo_action [mc "moving image"] \
    "xth_me_image_move_special $newiidx $iidx" "xth_me_image_move_special $iidx $newiidx"
  xth_me_image_update_list
  xth_me_image_select $xiidx
  
}


proc xth_me_image_move_front {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  set iidx [lindex $isel 0]
  if {$iidx == 0} {
    return
  }
  
  xth_me_image_move_special $iidx 0

}


proc xth_me_image_move_back {} {
  global xth
  xth_me_cmds_update {}
  if {$xth(me,nimgs) < 1} {
    return
  }
  set isel [$xth(ctrl,me,images).il.ilbox curselection]
  if {[llength $isel] < 1} {
    return;
  }
  set iidx [lindex $isel 0]
  if {$iidx == ($xth(me,nimgs) - 1)} {
    return
  }

  xth_me_image_move_special $iidx $xth(me,nimgs)
}


proc xth_me_image_select {iidx} {
  
  global xth

  if {!$xth(me,fopen)} {
    return
  }
  
  if {[string length $iidx] == 0} {
    set iidx 0
  }
  
  if {$xth(me,nimgs) > 0} {
    $xth(ctrl,me,images).ic.remp configure -state normal
    $xth(ctrl,me,images).ic.posl configure -state normal
    $xth(ctrl,me,images).ic.posln configure -state normal
    $xth(ctrl,me,images).ic.posch configure -state normal
    $xth(ctrl,me,images).ic.posx configure -state normal
    $xth(ctrl,me,images).ic.posy configure -state normal
    $xth(ctrl,me,images).ic.mvf configure -state normal
    $xth(ctrl,me,images).ic.mvb configure -state normal
#    $xth(ctrl,me,images).il.ilbox configure -state normal
    $xth(ctrl,me,images).il.ilbox selection clear 0 end
    $xth(ctrl,me,images).il.ilbox selection set $iidx
    set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {$xth(me,imgs,$imgx,vsb) < 0} {
      $xth(ctrl,me,images).ic.viscb configure -state disabled
      $xth(ctrl,me,images).ic.gs configure -state disabled
      $xth(ctrl,me,images).ic.gr configure -state disabled
      $xth(ctrl,me,images).ic.gl configure -state disabled
      xth_me_image_update_gamma_scale
      set xth(ctrl,me,images,vis) 0
    } else {
      $xth(ctrl,me,images).ic.viscb configure -state normal
      $xth(ctrl,me,images).ic.gs configure -state normal
      $xth(ctrl,me,images).ic.gr configure -state normal
      $xth(ctrl,me,images).ic.gl configure -state normal
      xth_me_image_update_gamma_scale
      set xth(ctrl,me,images,vis) $xth(me,imgs,$imgx,vsb)
    }
    xth_me_image_update_position
    update idletasks
  } else {
    $xth(ctrl,me,images).ic.viscb configure -state disabled
    $xth(ctrl,me,images).ic.remp configure -state disabled
    $xth(ctrl,me,images).ic.posl configure -state disabled
    $xth(ctrl,me,images).ic.posln configure -state disabled -text ""
    set xth(ctrl,me,images,posx) ""
    set xth(ctrl,me,images,posy) ""
    $xth(ctrl,me,images).ic.posch configure -state disabled
    $xth(ctrl,me,images).ic.posx configure -state disabled
    $xth(ctrl,me,images).ic.posy configure -state disabled
    $xth(ctrl,me,images).ic.mvf configure -state disabled
    $xth(ctrl,me,images).ic.mvb configure -state disabled
    $xth(ctrl,me,images).ic.gs configure -state disabled
    $xth(ctrl,me,images).ic.gr configure -state disabled
    $xth(ctrl,me,images).ic.gl configure -state disabled -text "gamma 1.00"
#    $xth(ctrl,me,images).il.ilbox configure -state disabled
    focus $xth(gui,main)
    update idletasks
  }
  
}

proc xth_me_image_gamma {imgx gv} {
  global xth
  set og $xth(me,imgs,$imgx,gamma)
  set xth(me,imgs,$imgx,gamma) $gv
  xth_me_image_set_gamma $imgx
  xth_me_unredo_action [mc "gamma correction"] \
    "xth_me_image_gamma $imgx $og" \
    "xth_me_image_gamma $imgx $gv"
  xth_me_image_update_gamma_scale
}

proc xth_me_image_update_gamma {} {
  global xth
  catch { 
    set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
    set imgx [lindex $xth(me,imgs,xlist) $iidx]
    if {[string length $imgx] > 0} {
      xth_me_image_gamma $imgx [expr pow(10.0,$xth(ctrl,me,images,gamma))]
    }
  }
}

proc xth_me_image_update_gamma_scale {} {
  global xth
  set iidx [lindex [$xth(ctrl,me,images).il.ilbox curselection] 0]
  set imgx [lindex $xth(me,imgs,xlist) $iidx]
  if {[string length $imgx] > 0} {
    set xth(ctrl,me,images,gamma) [expr log10($xth(me,imgs,$imgx,gamma))]
    $xth(ctrl,me,images).ic.gl configure -text [format "gamma %.2f" $xth(me,imgs,$imgx,gamma)]
  } else {
    $xth(ctrl,me,images).ic.gl configure -text "gamma 1.00"
    set xth(ctrl,me,images,gamma) 0
  }
}


proc xth_me_xvi_refresh {} {
  global xth
  if {[catch {
    set todolist $xth(me,imgs,xlist)
  }]} {
    return
  }
  foreach imgx $todolist {
    if {[lsearch -exact $xth(me,imgs,xlist) $imgx] < 0} continue
    if $xth(me,imgs,$imgx,XVI) {
      set fmtime 0
      if {![catch {set fmtime [file mtime $xth(me,imgs,$imgx,ffname)]}]} {
	if {$fmtime > $xth(me,imgs,$imgx,fmtime)} {
	  set cpos [lsearch -exact $xth(me,imgs,xlist) $imgx]
	  if {$cpos > -1} {
	    set vsb $xth(me,imgs,$imgx,vsb)
	    set gamma $xth(me,imgs,$imgx,gamma)
	    if {$vsb < 0} {
	      set vsb [expr $xth(me,imgs,$imgx,vsb) + 2]
	    }
	    set xpos [expr [lindex $xth(me,imgs,$imgx,position) 0]]
	    set ypos [expr [lindex $xth(me,imgs,$imgx,position) 1]]
	    set root [xth_me_imgs_get_root $imgx]
	    switch [llength $root] {
	      1 {
		set ypos [list $ypos [lindex $root 0]]
	      }
	      3 {
		set xpos [lindex $root 1]
		set ypos [list [lindex $root 2] [lindex $root 0]]
	      }
	      0 {}
	    }
	    set undocmd [format [lindex $xth(me,imgs,$imgx,reload) 0] $cpos]
	    set redocmd [format [lindex $xth(me,imgs,$imgx,reload) 1] "{$xpos $vsb $gamma}" "{$ypos}" $cpos]
	    set xth(me,unredook) 0
	    eval $undocmd
	    eval $redocmd
	    set xth(me,unredook) 1
	  }
	}
      }
    }
  }
  xth_me_area_auto_adjust
}






therion-5.4.1/xtherion/me_import.tcl000066400000000000000000000667351307545355600175660ustar00rootroot00000000000000#TODO: + add more objects in DXF export
#      + add SVG import using tcldom library

set utldbg 0

set xth(ptopoxvi_resolution) 200
set xth(ptopoxvi_scale) 200
set xth(ptopoxvi_grid) 1.0
set xth(ptopoxvi_projection) PLAN


proc xth_me_pt2xvitrans {x y} {
  global xth
  upvar l_scale scale
  upvar l_minx minx
  upvar l_maxx maxx
  upvar l_miny miny
  upvar l_maxy maxy
  upvar l_def  ldef
  if {[catch {set x [expr double($x) * $scale]}]} return {}
  if {[catch {set y [expr double($y) * $scale]}]} return {}
  if {!$ldef} {
    set ldef 1
    set minx $x
    set miny $y
    set maxx $x
    set maxy $y
  } else {
    if {$minx > $x} {set minx $x}
    if {$maxx < $x} {set maxx $x}
    if {$miny > $y} {set miny $y}
    if {$maxy < $y} {set maxy $y}
  }
  return [list [format "%.2f" $x] [format "%.2f" $y]]
}


proc xth_me_ptopo2xvi {fname} {
  global xth

  # create bitmap
  set xviname $fname
  set dp $xth(gui,main).ptopoxvidlg
  Dialog $dp -title [mc "XVI properties"] -parent $xth(gui,main) -default 0
  set df [$dp getframe]
  Label $df.l1 -text [mc "Scale 1 : "]
  Entry $df.e1 -textvariable xth(ptopoxvi_scale) -width 8
  Label $df.l2 -text [mc "Resolution (dpi)"]
  Entry $df.e2 -textvariable xth(ptopoxvi_resolution) -width 8
  Label $df.l3 -text [mc "Grid spacing (m)"]
  Entry $df.e3 -textvariable xth(ptopoxvi_grid) -width 8
  radiobutton $df.p -text "Plan" -variable xth(ptopoxvi_projection) -value PLAN
  radiobutton $df.x -text "Extended elevation" -variable xth(ptopoxvi_projection) -value ELEVATION
  grid $df.l1 -column 0 -row 0 -sticky nes -padx 2 -pady 2
  grid $df.e1 -column 1 -row 0 -sticky news -padx 2 -pady 2
  grid $df.l2 -column 0 -row 1 -sticky nes -padx 2 -pady 2
  grid $df.e2 -column 1 -row 1 -sticky news -padx 2 -pady 2
  grid $df.l3 -column 0 -row 2 -sticky nes -padx 2 -pady 2
  grid $df.e3 -column 1 -row 2 -sticky news -padx 2 -pady 2
  grid $df.p -column 0 -columnspan 2 -row 3 -sticky nws -padx 2
  grid $df.x -column 0 -columnspan 2 -row 4 -sticky nws -padx 2
  $dp add -name ok
  $dp draw
  destroy $dp
  if {[catch {set xth(ptopoxvi_resolution) [expr int($xth(ptopoxvi_resolution))]}]} {
    set xth(ptopoxvi_resolution) 200
  }
  if {[catch {set xth(ptopoxvi_scale) [expr int($xth(ptopoxvi_scale))]}]} {
    set xth(ptopoxvi_scale) 200
  }
  if {[catch {set xth(ptopoxvi_grid) [expr double($xth(ptopoxvi_grid))]}]} {
    set xth(ptopoxvi_grid) 1
  }

  # read pocket topo file and write XVI file
  if {[string equal $xth(ptopoxvi_projection) PLAN]} {
    set projid p
  } else {
    set projid e
  }
  set xvifname "[file rootname $fname]_$projid.xvi"
  set xvifnum 0
  while {[file exists $xvifname]} {
    set xvifname "[file rootname $fname]_$projid$xvifnum.xvi"
    incr xvifnum
  }
  set fi [open $fname r]
  set indata 0
  set inpolyline 0
  set inshots 0
  set instations 0
  set XVIstations {}
  set XVIshots {}
  set XVIgrid {}
  set polylines {}
  set l_minx 0
  set l_maxx 0
  set l_miny 0
  set l_maxy 0
  set l_def 0
  set l_scale [expr 1.0 / double($xth(ptopoxvi_scale)) * 100.0 / 2.54 * double($xth(ptopoxvi_resolution))]
  while {![eof $fi]} {
    gets $fi ln
    if {[string equal $ln $xth(ptopoxvi_projection)]} {
      set indata 1
    } elseif {[string equal $ln PLAN] || [string equal $ln ELEVATION]} {
      set indata 0
    }
    if {$indata} {
      switch -- [lindex $ln 0] {
	STATIONS {
	  set inpolyline 0
	  set inshots 0
	  set instations 1
	}
	SHOTS {
	  set inpolyline 0
	  set inshots 1
	  set instations 0
	}
	POLYLINE {
	  set inpolyline 1
	  set inshots 0
	  set instations 0
	  append polylines "\n[string tolower [lindex $ln 1]]"
	}
      }

      if {$instations} {
	if {[llength $ln] == 3} {
	  set stc [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  if {[llength $stc] == 2} {
	    append XVIstations "  {[list [lindex $stc 0] [lindex $stc 1] [lindex $ln 2]]}\n"
	  }
	}
      }

      if {$inshots} {
	if {[llength $ln] == 4} {
	  set stc1 [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  set stc2 [xth_me_pt2xvitrans [lindex $ln 2] [lindex $ln 3]]
	  if {([llength $stc1] == 2) && ([llength $stc2] == 2)} {
	    append XVIshots "  {[list [lindex $stc1 0] [lindex $stc1 1] [lindex $stc2 0] [lindex $stc2 1]]}\n"
	  }
	}
      }

      if {$inpolyline} {
	if {[llength $ln] == 2} {
	  set stc [xth_me_pt2xvitrans [lindex $ln 0] [lindex $ln 1]]
	  if {[llength $stc] == 2} {
	    append polylines "  [list [lindex $stc 0] [lindex $stc 1]]"
	  }
	}
      }

    }
  }
  close $fi

  if {$l_def} {
    set gsize [expr $xth(ptopoxvi_grid) * $l_scale]
    set l_minx [expr $l_minx - 0.5 * $gsize]
    set l_maxx [expr $l_maxx]
    set l_miny [expr $l_miny - 0.5 * $gsize]
    set l_maxy [expr $l_maxy]
    
    set XVIsketchlines {}
    set pll [split $polylines "\n"]
    foreach pl $pll {
      if {[llength $pl] == 3} {
	append XVIsketchlines "  {[list [lindex $pl 0] [lindex $pl 1] [lindex $pl 2]]}\n"
      } elseif {[llength $pl] > 3} {
	append XVIsketchlines "  {$pl}\n"
      }
    }

    set fo [open $xvifname w]
    puts $fo "set XVIgrids {$xth(ptopoxvi_grid) m}"
    puts $fo "set XVIstations {\n$XVIstations}"
    puts $fo "set XVIshots {\n$XVIshots}"
    puts $fo "set XVIsketchlines {\n$XVIsketchlines}"
    puts $fo "set XVIgrid {[list $l_minx $l_miny $gsize 0.0 0.0 $gsize [expr int(($l_maxx - $l_minx) / $gsize) + 1] [expr int(($l_maxy - $l_miny) / $gsize) + 1]]}"
    close $fo
    return $xvifname
  }
  return {}
}



proc xth_me_import_check_outline {coutline pt} {
  set px [expr double([lindex $pt 0])]
  set py [expr double([lindex $pt 1])]
  if {[llength $coutline] == 4} {
    if {[lindex $coutline 0] > $px} {lset coutline 0 $px}
    if {[lindex $coutline 1] > $py} {lset coutline 1 $py}
    if {[lindex $coutline 2] < $px} {lset coutline 2 $px}
    if {[lindex $coutline 3] < $py} {lset coutline 3 $py}
  } else {
    set coutline [list $px $py $px $py]
  }
  return $coutline
}

set xthmeimpcdlp {}

proc xth_me_import_check_distance {cdist p2} {
  global xthmeimpcdlp
  if {[llength $xthmeimpcdlp] == 0} {
    set xthmeimpcdlp $p2
    return $cdist
  }
  set p1 $xthmeimpcdlp
  set ndist [expr hypot(double([lindex $p1 0]) - double([lindex $p2 0]),double([lindex $p1 1]) - double([lindex $p2 1]))]
  if {($ndist > 0.0) && (($ndist < $cdist) || ($cdist < 0.0))} {
    return $ndist
  } else {
    return $cdist
  }
}


proc xth_me_import_dxf {fnm} {
  global xth utldbg
  set rv(olist) {}
  set fid [open $fnm r]
  set cmd 0
  set val 0
  set curcmd {}
  set cursec {}
  set x0 0.0
  set x1 0.0
  set lastcmdn 0
  set lastcmd {}
  set curcmdn 0
  set outcmdn -1
  set outline {}
  set distance -1.0
  set curdat {}
  set curseq {}
  set polylinevx 0
  set nofitpoint 1
  
  set hasx0 0
  set hasx1 0

  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) scrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}

if $utldbg {
  puts -nonewline "reading $fnm ..."
} else {
  xth_status_bar_push me
  xth_status_bar_status me "reading $fnm ..."
}

  set line_number 0
  while {![eof $fid]} {
    set cmd $val
    gets $fid val
    incr line_number
    if {($line_number % 1000) == 0} {
if $utldbg {
      puts -nonewline "."
} else {
      xth_status_bar_status me "reading $fnm ... (line $line_number)"
}
    }
    regsub {^\s+} $val {} val
    regsub {\s+$} $val {} val
    if {([string length $cursec] == 0) && [string equal $cmd 0] && [string equal -nocase $val SECTION]} {
      set cursec UNKNOWN
      set curcmd {}
    } elseif {[string equal $cmd 2] && [string equal $cursec UNKNOWN] && [regexp {^([A-Z]+)$} $val dum newsec]} {
      set cursec [string toupper $newsec]
    } elseif {([string length $cursec] > 0) && [string equal $cmd 0] && [regexp {^((3D)?[A-Z]+)$} $val dum newcmd]} {
      set lastcmd $curcmd
      incr curcmdn
      set curcmd {}
      set curdat {}
      set newcmd [string toupper $newcmd]
      if {[string equal $newcmd ENDSEC]} {
	set curcmd {}
	set cursec {}
      } else {
	switch -- $newcmd {
	  POLYLINE {
	    set curseq $newcmd
	    set polylinevx 0
	  }
	  SEQEND {
	    set curseq {}
	  }
	}
	set curcmd $newcmd
      }
    }
    
    # parse entities
    if {[string equal $cursec ENTITIES]} {
      set postprocess 0
      switch -- $cmd {
	10 {set x0 [expr double($val)]; set hasx0 1}
	11 {set x1 [expr double($val)]; set hasx1 1}
	20 {set y0 [expr double($val)]; if {$hasx0} {set postprocess 1}; set hasx0 0}
	21 {set y1 [expr double($val)]; if {$hasx1} {set postprocess 1}; set hasx1 0}
	40 {set n40 [expr double($val)]}
	50 {set n50 [expr double($val)]}
	51 {set n51 [expr double($val)]; set postprocess 1}
      }
      set cmdinserted 0
      if {$postprocess} {
	switch -- $curcmd {
	  CIRCLE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) point
	      set rv(odata,$outcmdn,opts) "#CIRCLE"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  POINT {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) point
	      set rv(odata,$outcmdn,opts) "#POINT"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  ARC {
	    #TODO: Fit arc with bezier curve, not line
	    if {[string equal $cmd 51]} {
	      if {$n50 > $n51} {set n51 [expr $n51 + 360.0]}
	      set rstep [expr ($n51 - $n50) / (round(($n51 - $n50) / 10.0) + 1)]
	      set curdat {}
	      for {set cr $n50} {$cr < $n51} {set cr [expr $cr + $rstep]} {
		set crr [expr $cr / 180.0 * 3.14159265359]
		set cpoint [list [expr $x0 + $n40 * cos($crr)] [expr $y0 + $n40 * sin($crr)]]
		set distance [xth_me_import_check_distance $distance $cpoint]
		set outline [xth_me_import_check_outline $outline $cpoint]              
		lappend curdat $cpoint
	      }
	      set cr $n51
	      set crr [expr $cr / 180.0 * 3.14159265359]
	      set cpoint [list [expr $x0 + $n40 * cos($crr)] [expr $y0 + $n40 * sin($crr)]]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      lappend curdat $cpoint

	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      set rv(odata,$outcmdn,type) line
	      set rv(odata,$outcmdn,opts) "#ARC"
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  VERTEX {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]              
	      if {[string equal $curseq POLYLINE]} {
		if {$polylinevx == 0} {
		  incr outcmdn
		  lappend rv(olist) $outcmdn
		  lappend curdat $cpoint
		  set rv(odata,$outcmdn,type) line
		  set rv(odata,$outcmdn,opts) "#POLYLINE"
		  set rv(odata,$outcmdn,data) $curdat
		}
		if {![string equal [lindex $rv(odata,$outcmdn,data) end] $cpoint]} {
		  lappend rv(odata,$outcmdn,data) $cpoint
		}
		incr polylinevx
	      } else {
		incr outcmdn
		lappend rv(olist) $outcmdn
		lappend curdat $cpoint
		set rv(odata,$outcmdn,type) point
		set rv(odata,$outcmdn,opts) "#VERTEX"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	  LWPOLYLINE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      lappend curdat $cpoint
	    }
	    if {[llength $curdat] == 2} {
	      incr outcmdn
	      lappend rv(olist) $outcmdn
	      lappend curdat $cpoint
	      set rv(odata,$outcmdn,type) line
	      set rv(odata,$outcmdn,opts) "#LWPOLYLINE"
	      set rv(odata,$outcmdn,data) $curdat
	    } elseif {[llength $curdat] > 2} {
	      set rv(odata,$outcmdn,data) $curdat
	    }
	  }
	  SPLINE {
	    if {[string equal $cmd 20] || [string equal $cmd 21]} {
	      if {[llength $curdat] == 0} {
		set nofitpoint 1
	      }
	      set cpoint {}
	      if {[string equal $cmd 20]} {
		if {$nofitpoint} {
		  set cpoint [list $x0 $y0]
		}
	      } else {
		if {$nofitpoint} {
		  if {[llength $curdat] >= 2} {
		    incr outcmdn -1
		    set rv(olist) [lrange $rv(olist) 0 end-1]
		  }
		  set curdat {}
		  set nofitpoint 0
		}
		set cpoint [list $x1 $y1]
	      }
	      if {([llength $cpoint] > 0) && (![string equal [lindex $curdat end] $cpoint])} {
		set distance [xth_me_import_check_distance $distance $cpoint]
		set outline [xth_me_import_check_outline $outline $cpoint]
		lappend curdat $cpoint
		if {[llength $curdat] == 2} {
		  incr outcmdn
		  lappend rv(olist) $outcmdn
		  set rv(odata,$outcmdn,type) line
		  set rv(odata,$outcmdn,opts) "#SPLINE"
		  set rv(odata,$outcmdn,data) $curdat
		} elseif {[llength $curdat] > 2} {
		  if {$nofitpoint && ([llength $curdat] > 3)} {
		    if {([llength [lindex $curdat end]] == 2) && ([llength [lindex $curdat end-1]] == 2) && ([llength [lindex $curdat end-2]] == 2)} {
		      set curdat [lreplace $curdat end-2 end "[lindex $curdat end-2] [lindex $curdat end-1] [lindex $curdat end]"]
		    }
		  }
		  if {(!$nofitpoint) && ([llength $curdat] > 2)} {
		    set pp0 [lindex $curdat end-2]
		    set pp1 [lindex $curdat end-1]
		    set pp2 [lindex $curdat end]
		    set p0x [lindex $pp0 end-1]
		    set p0y [lindex $pp0 end]
		    set p1x [lindex $pp1 end-1]
		    set p1y [lindex $pp1 end]
		    set p2x [lindex $pp2 end-1]
		    set p2y [lindex $pp2 end]
		    set l1 [expr hypot($p1x - $p0x, $p1y - $p0y)]
		    set l2 [expr hypot($p2x - $p1x, $p2y - $p1y)]
		    if {($l1 > 0.0) && ($l2 > 0.0)} {
		      set n1x [expr ($p1x - $p0x) / $l1]
		      set n1y [expr ($p1y - $p0y) / $l1]
		      set n2x [expr ($p2x - $p1x) / $l2]
		      set n2y [expr ($p2y - $p1y) / $l2]
		      set nx [expr $l2 * $n1x + $l1 * $n2x]
		      set ny [expr $l2 * $n1y + $l1 * $n2y]
		      set nl [expr hypot($nx, $ny)]
		      if {$nl > 0.0} {
		        set nx [expr $nx / $nl]
		        set ny [expr $ny / $nl]
		        set c1x [expr $p1x - 0.33 * $l1 * $nx]
		        set c1y [expr $p1y - 0.33 * $l1 * $ny]
		        set c2x [expr $p1x + 0.33 * $l2 * $nx]
		        set c2y [expr $p1y + 0.33 * $l2 * $ny]
		        set p1path [lindex $curdat end-1]
		        if {[llength $p1path] == 6} {
		          set p1path [list [lindex $p1path 0] [lindex $p1path 1] $c1x $c1y $p1x $p1y]
		        } else {
		          set p1path [list [expr 0.5 * ($c1x + $p0x)] [expr 0.5 * ($c1y + $p0y)] $c1x $c1y $p1x $p1y]
		        }
		        set p2path [list $c2x $c2y [expr 0.5 * ($c2x + $p2x)] [expr 0.5 * ($c2y + $p2y)] $p2x $p2y]
		        set curdat [lreplace $curdat end-1 end $p1path $p2path]
		      }
		    }
		  }
		  set rv(odata,$outcmdn,data) $curdat
		}
	      }
	    }
	  }
	  LINE {
	    if {[string equal $cmd 20]} {
	      set cpoint [list $x0 $y0]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      lappend curdat $cpoint
	    } elseif {[string equal $cmd 21]}  {
	      set cpoint [list $x1 $y1]
	      set distance [xth_me_import_check_distance $distance $cpoint]
	      set outline [xth_me_import_check_outline $outline $cpoint]
	      if {($outcmdn >= 0) && [string equal $lastcmd LINE] && [string equal [lindex $rv(odata,$outcmdn,data) end] [lindex $curdat 0]]} {
		if {![string equal [lindex $rv(odata,$outcmdn,data) end] $cpoint]} {
		  lappend rv(odata,$outcmdn,data) $cpoint
		}
	      } else {
		incr outcmdn
		lappend rv(olist) $outcmdn
		lappend curdat $cpoint
		set rv(odata,$outcmdn,type) line
		set rv(odata,$outcmdn,opts) "#LINE"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	}
      }
    }
  }
  close $fid

if $utldbg {
  puts "done."
} else {
  xth_status_bar_pop me
}


  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) endscrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}
  
  set rv(dist) $distance
  set rv(bbox) $outline
  return [array get rv]
}


proc xth_xml_get_flag {flags flag} {
  if {[regexp "(^|\\s)\\s*$flag\\s*\\=\\s*\\\"(\[^\\\"\]*)\\\"" $flags dum dum1 data]} {
    return $data
  } elseif {[regexp "(^|\\s)\\s*$flag\\s*\\=\\s*\\\'(\[^\\\'\]*)\\\'" $flags dum dum1 data]} {
    return $data
  } else {
    return {}
  }
}

proc xth_xml_clear_flag {flagsVar flag} {
  upvar 1 $flagsVar flags
  regsub "(^|\\s)\\s*$flag\\s*\\=\\s*\\\"(\[^\\\"\]*)\\\"" $flags {} flags
  regsub "(^|\\s)\\s*$flag\\s*\\=\\s*\\\'(\[^\\\'\]*)\\\'" $flags {} flags
}



proc xth_me_impsvg_trans {xVar yVar distVar outVar matrix} {
  upvar 1 $xVar x $yVar y $distVar distance $outVar outline
  set nx [expr double($x) * [lindex $matrix 0] + double($y) * [lindex $matrix 2] + [lindex $matrix 4]]
  set ny [expr double($x) * [lindex $matrix 1] + double($y) * [lindex $matrix 3] + [lindex $matrix 5]]
  set x $nx
  set y [expr -1.0 * $ny]
  set distance [xth_me_import_check_distance $distance [list $x $y]]
  set outline [xth_me_import_check_outline $outline [list $x $y]]
}


proc xth_me_impsvg_mm {A B} {
  set m0 [expr [lindex $A 0] * [lindex $B 0] + [lindex $A 2] * [lindex $B 1]]
  set m1 [expr [lindex $A 1] * [lindex $B 0] + [lindex $A 3] * [lindex $B 1]]
  set m2 [expr [lindex $A 0] * [lindex $B 2] + [lindex $A 2] * [lindex $B 3]]
  set m3 [expr [lindex $A 1] * [lindex $B 2] + [lindex $A 3] * [lindex $B 3]]
  set m4 [expr [lindex $A 0] * [lindex $B 4] + [lindex $A 2] * [lindex $B 5] + [lindex $A 4]]
  set m5 [expr [lindex $A 1] * [lindex $B 4] + [lindex $A 3] * [lindex $B 5] + [lindex $A 5]]
  return [list $m0 $m1 $m2 $m3 $m4 $m5]
}

proc xth_me_impsvg_push_transform {cmatrixVar lmatrixVar transformStr} {
  upvar 1 $cmatrixVar cmatrix $lmatrixVar lmatrix
  set nmatrix $cmatrix
  regsub {\)} $transformStr ")\n" transformStr
  set tl [split $transformStr "\n"]
  foreach t $tl {
    if {[regexp -nocase {(\w+)\(([E\+\-\d\.\,]+)\)} $t dum type param]} {
      set paraml [split $param ","]
      set xmatrix {1.0 0.0 0.0 1.0 0.0 0.0}
      switch -- $type {
	translate {
	  if {[llength $paraml] == 2} {
	    set xmatrix [list 1.0 0.0 0.0 1.0 [expr double([lindex $paraml 0])] [expr double([lindex $paraml 1])]]
	  }
	}
	scale {
	  if {[llength $paraml] == 2} {
	    set xmatrix [list [expr double([lindex $paraml 0])] 0.0 0.0 [expr double([lindex $paraml 1])] 0.0 0.0]
	  }
	}
	rotate {
	}
	skewX {
	}
	skewY {
	}
	matrix {
	  if {[llength $paraml] == 6} {
	    set xmatrix [list [expr double([lindex $paraml 0])] [expr double([lindex $paraml 1])] [expr double([lindex $paraml 2])] [expr double([lindex $paraml 3])] [expr double([lindex $paraml 4])] [expr double([lindex $paraml 5])]]
	  }
	}
      }
      set nmatrix [xth_me_impsvg_mm $nmatrix $xmatrix]
    }
  }
  lappend lmatrix $cmatrix
  set cmatrix $nmatrix
}


proc xth_me_impsvg_pop_transform {cmatrixVar lmatrixVar} {
  upvar 1 $cmatrixVar cmatrix $lmatrixVar lmatrix
  if {[llength $lmatrix] > 0} {
    set cmatrix [lindex $lmatrix end]
    set lmatrix [lrange $lmatrix 0 end-1]
  }
}

proc xth_me_import_svg {fnm} {

  global xth utldbg
  set rv(olist) {}
  set outcmdn -1
  set outline {}
  set distance -1.0
  set cmatrix {1.0 0.0 0.0 1.0 0.0 0.0}
  set lmatrix {}

  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) scrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}

if $utldbg {
  puts -nonewline "reading $fnm ..."
} else {
  xth_status_bar_push me
  xth_status_bar_status me "reading $fnm ..."
}

  set fid [open $fnm r]
  set dat [read $fid]
  close $fid

if $utldbg {
  puts -nonewline " done.\nparsing $fnm ..."
} else {
  xth_status_bar_status me "parsing $fnm ..."
}

  regsub -all {\n} $dat {} dat
  regsub -all {\s*(\<[^\>]*\>)([^\<]*)} $dat "\\1\n\\2\n" dat
  set data [split $dat "\n"]
  
if !$utldbg {
  xth_me_progbar_show [llength $data]
}
  set cdn 0
  
  set insvg 0
  set indef 0
  foreach itm $data {
    incr cdn
    if {$cdn % 10 == 0} {
      if $utldbg {
	puts -nonewline "."
      } else {
	xth_me_progbar_prog $cdn
      }
    }
    
    # set tag type
    set tagtype data
    if {[regexp {^\s*\<\s*(\/?)(\w+)([^\>]*)\>\s*$} $itm dum slash1 tagid flags]} {
      if {[string length $slash1] > 0} {
	set tagtype end
      } elseif {[regexp {\/\>\s*$} $itm]} {
	set tagtype single
      } else {
	set tagtype start
      }
    }
    
    switch $tagtype {
      start {
	# parse start tag
	switch -- $tagid {
	  svg {
	    if {!$insvg} {set insvg 1}
	  }
	  defs {
	    if {!$indef} {set indef 1}
	  }
	  g {
	    xth_me_impsvg_push_transform cmatrix lmatrix [xth_xml_get_flag $flags transform]
	  }
	}
      }
      end {
	# parse end tag
	switch -- $tagid {
	  svg {
	    if {$insvg} {set insvg 0}
	  }
	  defs {
	    if {$indef} {set indef 0}
	  }
	  g {
	    xth_me_impsvg_pop_transform cmatrix lmatrix
	  }
	}
      }
      single {
	# parse single tag
	switch -- $tagid {
	  path {
	    if {$insvg && (!$indef)} {
	      set pdata [xth_xml_get_flag $flags d]
	      xth_xml_clear_flag flags d
	      regsub -nocase -all {([mlcz])} $pdata "\n\\1" pdata
	      set pdatal [split $pdata "\n"]
	      set curdat {}
	      foreach lni $pdatal {
		if {[regexp -nocase {^\s*(M|L)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s*$} $lni dum dum1 x y]} {
		  xth_me_impsvg_trans x y distance outline $cmatrix
		  lappend curdat [list $x $y]
		} elseif {[regexp -nocase {^\s*C\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s+([e\+\-\d\.]+),([e\+\-\d\.]+)\s*$} $lni dum c1x c1y c2x c2y x y]} {
		  xth_me_impsvg_trans c1x c1y distance outline $cmatrix
		  xth_me_impsvg_trans c2x c2y distance outline $cmatrix
		  xth_me_impsvg_trans x y distance outline $cmatrix
		  lappend curdat [list $c1x $c1y $c2x $c2y $x $y]
		}
	      }
	      if {[llength $curdat] > 1} {
		incr outcmdn
		lappend rv(olist) $outcmdn
		set rv(odata,$outcmdn,type) line
		regsub -all {\s+} $flags { } flags
		set rv(odata,$outcmdn,opts) "# $flags #"
		set rv(odata,$outcmdn,data) $curdat
	      }
	    }
	  }
	}
      }
      data {
      }
    }
    
    
  }

if $utldbg {
  puts " done."
} else {
  xth_status_bar_pop me
}


  incr outcmdn
  lappend rv(olist) $outcmdn
  set rv(odata,$outcmdn,type) endscrap
  set rv(odata,$outcmdn,opts) {}
  set rv(odata,$outcmdn,data) {}
  
  set rv(dist) $distance
  set rv(bbox) $outline
  return [array get rv]
}


proc xth_me_import_file_trans {data sc dx dy} {
  set next 0
  set res {}
  foreach pt $data {
    if $next {append res "\n"} 
    switch [llength $pt] {
      2 {
	append res "[expr $sc * ([lindex $pt 0] - $dx)]\t[expr $sc * ([lindex $pt 1] - $dy)]"
      }
      6 {
	append res "[expr $sc * ([lindex $pt 0] - $dx)]\t[expr $sc * ([lindex $pt 1] - $dy)]"
	append res "\t[expr $sc * ([lindex $pt 2] - $dx)]\t[expr $sc * ([lindex $pt 3] - $dy)]"
	append res "\t[expr $sc * ([lindex $pt 4] - $dx)]\t[expr $sc * ([lindex $pt 5] - $dy)]"
      }
    }
    set next 1
  }
  return $res
}


proc xth_me_import_file {fnm fmt} {

  global xth xthmeimpcdlp
  set xthmeimpcdlp {}

  # if file name not specified, load it from dialog  
  if {[string length $fnm] == 0} {
    set fnm [tk_getOpenFile -filetypes {{{SVG files} {*.svg}} {{DXF files} {*.dxf}} {{All files} *}} \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) -defaultextension ".svg"]  
  }
  if {[string length $fnm] == 0} {
    return
  } else {
    set xth(gui,initdir) [file dirname $fnm]
  }

  # detect file format from file name if format not specified
  if {[string length $fmt] == 0} {
    if {[regexp -nocase {\.dxf} $fnm]} {
      set fmt dxf
    }
    if {[regexp -nocase {\.svg} $fnm]} {
      set fmt svg
    }
  }
  
  # import objects
  switch $fmt {
    dxf {set objects [xth_me_import_dxf $fnm]}
    svg {set objects [xth_me_import_svg $fnm]}
    default {
      set objects [xth_me_import_svg $fnm]
    }
  }
  array set objs $objects
  
  # calculate scrap transformation matrix
  set dx [expr [lindex $objs(bbox) 2] - [lindex $objs(bbox) 0]]
  set dy [expr [lindex $objs(bbox) 3] - [lindex $objs(bbox) 1]]
  set dd $dx
  set md $objs(dist)
  if {$dy > $dd} {set dd $dy}

  set sc [expr $xth(import,size) / $dd]
  if {($md * $sc) < $xth(import,mind)} {set sc [expr $xth(import,mind) / $md]}
  
  if {[info exists xth(import,sscl)]} {
    set sc $xth(import,sscl)]
  }

  set dx [lindex $objs(bbox) 0]
  set dy [lindex $objs(bbox) 1]


  # calculate scrap options (-scale and -cs if applicable)
  set sc0 [expr $sc * ([lindex $objs(bbox) 0] - $dx)]
  set sc1 [expr $sc * ([lindex $objs(bbox) 1] - $dy)]
  set sc2 [expr $sc * ([lindex $objs(bbox) 2] - $dx)]
  set sc3 [expr $sc * ([lindex $objs(bbox) 3] - $dy)]
  set scrapopts {}
  switch $fmt {
    dxf {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,dxf,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,dxf,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,dxf,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,dxf,scale)]
      if {[string length $xth(import,dxf,cs)] > 0} {
	append scrapopts "-cs $xth(import,dxf,cs) "
      }
    }
    svg {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,svg,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,svg,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,svg,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,svg,scale)]
      if {[string length $xth(import,svg,cs)] > 0} {
	append scrapopts "-cs $xth(import,svg,cs) "
      }
    }
    default {
      set sc4 [expr [lindex $objs(bbox) 0] * $xth(import,default,scale)]
      set sc5 [expr [lindex $objs(bbox) 1] * $xth(import,default,scale)]
      set sc6 [expr [lindex $objs(bbox) 2] * $xth(import,default,scale)]
      set sc7 [expr [lindex $objs(bbox) 3] * $xth(import,default,scale)]
      if {[string length $xth(import,default,cs)] > 0} {
	append scrapopts "-cs $xth(import,default,cs) "
      }
    }
  }
  append scrapopts "-scale \[$sc0 $sc1 $sc2 $sc3 $sc4 $sc5 $sc6 $sc7\] "
  
  
  # create objects
  global utldbg
if $utldbg {

  foreach obj $objs(olist) {
    switch $objs(odata,$obj,type) {
      scrap {
	puts "\nscrap import $scrapopts $objs(odata,$obj,opts)"
      }
      point {
	puts "\npoint [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy] u:point $objs(odata,$obj,opts)"
      }
      line {
	puts "\nline u:line $objs(odata,$obj,opts)\n[xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]\nendline"
      }
      endscrap {
	puts "\nendscrap"
      }
      default {
	puts ""
      }
    }
  }


} else {

  xth_status_bar_push me
  xth_status_bar_status me [mc "Importing objects ..."]
  xth_me_progbar_show [llength $objs(olist)]

  set scount 0
  set ocount 0
  set xth(me,unredook) 0
  foreach obj $objs(olist) {
    incr ocount
    xth_me_progbar_prog $ocount
    
    set pos [expr [llength $xth(me,cmds,xlist)] - 1]
    switch $objs(odata,$obj,type) {
      scrap {
	xth_me_cmds_create_scrap $pos 0 import$scount "$scrapopts $objs(odata,$obj,opts)"
	incr scount
      }
      point {
	set coords [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]
	xth_me_cmds_create_point $pos 0 [lindex $coords 0] [lindex $coords 1] "u:point" $objs(odata,$obj,opts)
      }
      line {
	set coords [xth_me_import_file_trans $objs(odata,$obj,data) $sc $dx $dy]
	xth_me_cmds_create_line $pos 0 "u:line" $objs(odata,$obj,opts) [split $coords "\n"]
      }
      endscrap {
	xth_me_cmds_create_endscrap $pos 0 {}
      }
    }
  }

  xth_me_cmds_select [lindex $xth(me,cmds,xlist) $pos]
  xth_me_area_auto_adjust
  xth_me_progbar_hide
  xth_status_bar_pop me
  set xth(me,unredook) 1

}  
}


if $utldbg {
  set xth(gui,main) .
  #xth_me_import_svg test.svg
  #xth_me_import_dxf map1.dxf
  xth_me_import_file map1.dxf {}
  exit
}
therion-5.4.1/xtherion/me_ss.tcl000066400000000000000000000207111307545355600166610ustar00rootroot00000000000000##
## me_ss.tcl --
##
##     Map editor search & select tools.
##
## Copyright (C) 2003 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_me_ss_next {} {
  global xth
  xth_me_cmds_update {}
  set cselid $xth(me,cmds,selid)
  set cselpid $xth(me,cmds,selpid)
  set eofvalid [expr $cselid == 0]
  xth_status_bar_push me
  xth_status_bar_status me "Searching ..."
  if {$cselid == 0} {
    set totalcnt [llength $xth(me,cmds,xlist)]
  } else {
    set totalcnt [expr [llength $xth(me,cmds,xlist)] - [lsearch -exact $xth(me,cmds,xlist) $cselid] - 1]
  }
  set cnt 0
  xth_me_progbar_show $totalcnt
  while {($cselid != 0) || $eofvalid} {
    set eofvalid 0    
    # prejde na dalsi objekt
    if {$cselid == 0} {
      set cselid [lindex $xth(me,cmds,xlist) 0]
      if {$xth(me,cmds,$cselid,ct) == 3} {
	set cselpid [lindex $xth(me,cmds,$cselid,xplist) 0]
      } else {
	set cselpid 0
      }
      incr cnt
    } elseif {($xth(me,cmds,$cselid,ct) != 3) || ($cselpid == 0)} {
      set cselid [lindex $xth(me,cmds,xlist) \
	  [expr [lsearch -exact $xth(me,cmds,xlist) $cselid] + 1]]
      if {$xth(me,cmds,$cselid,ct) == 3} {
	set cselpid [lindex $xth(me,cmds,$cselid,xplist) 0]
      } else {
	set cselpid 0
      }
      incr cnt
    } else {
      set cselpid [lindex $xth(me,cmds,$cselid,xplist) \
	  [expr [lsearch -exact $xth(me,cmds,$cselid,xplist) $cselpid] + 1]]
    }
    xth_me_progbar_prog $cnt
    switch $xth(me,cmds,$cselid,ct) {
      0 {
	xth_me_cmds_select 0
	xth_me_progbar_hide
	xth_status_bar_pop me
	return
      }
      3 {
	if {$cselpid == 0} {
	  if {[xth_me_ss_match $xth(me,cmds,$cselid,data_ln)]} {
	    xth_me_cmds_select "$cselid 0"
	    xth_me_progbar_hide
	    xth_status_bar_pop me
	    return
	  }
	} else {
	  if {[xth_me_ss_match [lindex $xth(me,cmds,$cselid,data_pt) \
	      [lsearch -exact $xth(me,cmds,$cselid,xplist) $cselpid]]]} {
	    xth_me_cmds_select "$cselid $cselpid"
	    xth_me_progbar_hide
	    xth_status_bar_pop me
	    return
	  }
	}
      }
      default {
	if {[xth_me_ss_match $xth(me,cmds,$cselid,data)]} {
	  xth_me_cmds_select $cselid
	  xth_me_progbar_hide
	  xth_status_bar_pop me
	  return
	}
      }
    }
  }
  xth_me_progbar_hide
  xth_status_bar_pop me
}

proc xth_me_ss_first {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_select 0
  xth_me_ss_next
}


proc xth_me_ss_match {s} {
  global xth
  if $xth(ctrl,me,ss,regexp) {
    if $xth(ctrl,me,ss,cases) {
      return [regexp $xth(ctrl,me,ss,expr) $s]
    } else {
      return [regexp -nocase $xth(ctrl,me,ss,expr) $s]
    }
  } else {
    if $xth(ctrl,me,ss,cases) {
      if {[string first $xth(ctrl,me,ss,expr) $s] >= 0} {
	return 1
      } else {
	return 0
      }
    } else {
      if {[string first [string tolower $xth(ctrl,me,ss,expr)] [string tolower $s]] >= 0} {
	return 1
      } else {
	return 0
      }
    }
  }
}


proc xth_me_ss_show {} {
  global xth
  xth_me_cmds_update {}
  xth_me_cmds_set_colors
  set selcol red
  xth_status_bar_push me
  xth_status_bar_status me "Searching ..."
  xth_me_progbar_show [llength $xth(me,cmds,xlist)]
  set objcnt 0
  foreach id $xth(me,cmds,xlist) {
    incr objcnt
    xth_me_progbar_prog $objcnt
    switch $xth(me,cmds,$id,ct) {
      2 {
	if {[xth_me_ss_match $xth(me,cmds,$id,data)]} {
	  # oznaci bod
	  $xth(me,can) itemconfigure pt$id -fill $selcol
	}
      }
      3 {
	set pnm 0
	set trywhole 1
	foreach tx $xth(me,cmds,$id,data_pt) {
	  if {[xth_me_ss_match $tx]} {
	    set pid [lindex $xth(me,cmds,$id,xplist) $pnm]
	    # oznaci bod na ciare
	    set trywhole 0
	    $xth(me,can) itemconfigure pt$id.$pid -fill $selcol
	    set ppid [lindex $xth(me,cmds,$id,xplist) [expr $pnm + 1]]
	    if {[string length $ppid] > 0} {
	      $xth(me,can) itemconfigure ln$id.$ppid -fill $selcol
	    }
	  }
	  incr pnm 1
	}
	if {$trywhole && [xth_me_ss_match $xth(me,cmds,$id,data_ln)]} {
	  # oznaci ciaru
	  $xth(me,can) itemconfigure lnln$id -fill $selcol
	}
      }
    }
  }
  xth_status_bar_pop me
  xth_me_progbar_hide
}


proc xth_me_goto_line {ln} {

  global xth
  if {!$xth(me,fopen)} {
    return
  }
  
  # najprv preskoci zaciatocne prikazy
  set cln [expr [llength $xth(me,imgs,xlist)] + 4]
  
  # potom poojde prikaz za prikazom az najde taky,
  # ktory lezi na danej, alebo je mensi ako dana
  # pozicia a nasledujuci prikaz je uz zase vacsi
  set previd [lindex $xth(me,cmds,xlist) 0]
  set prevln $cln
  foreach cid $xth(me,cmds,xlist) {
    if {$xth(me,cmds,$cid,ct) == 4} {
      incr cln 2
    }
    incr cln 1
    
    # skontrolujeme ci to nebol predchadzajuci
    if {$cln > $ln} {
      xth_me_cmds_select $previd
      return
    }    
    # resp. ci to nie je tento
    set prevln $cln
    incr cln [expr 1 + [regexp -all {\n} $xth(me,cmds,$cid,data)]]
    #puts "$prevln - $cln:\n$xth(me,cmds,$cid,data)"

    if {($ln >= $prevln) && ($ln < $cln)} {
      set posttry 0
      switch $xth(me,cmds,$cid,ct) {
	1 {
	  xth_ctrl_scroll_to me text
	  set posttry 1
	}
	2 {xth_ctrl_scroll_to me point}
	3 {xth_ctrl_scroll_to me line}
	4 {xth_ctrl_scroll_to me scrap}
	6 {xth_ctrl_scroll_to me area}
      }
      xth_me_cmds_select $cid
      if {($ln > $prevln) || $posttry} {
	# skusime sa trafit presnejsie
	switch $xth(me,cmds,$cid,ct) {
	  1 {
	    set txln [expr $ln - $prevln + 1]
	    focus $xth(ctrl,me,text).txt
	    $xth(ctrl,me,text).txt mark set insert $txln.0
	    $xth(ctrl,me,text).txt tag remove sel 1.0 end
	    $xth(ctrl,me,text).txt tag add sel $txln.0 "$txln.0 lineend"
	  }
	  3 {
	    # skusime najst bod na ciare
	    set txln [expr $ln - $prevln + 1]
	    if {$txln > 1} {
	      set tmpxpl $xth(me,cmds,$cid,xplist)
	      #puts $tmpxpl
	      set cxpl {}
	      set cpix [lindex $tmpxpl]
	      foreach pix [lrange $tmpxpl 0 [expr [llength $tmpxpl] - 2]] {
		lappend cxpl $pix
		catch {
		  set xth(me,cmds,$cid,xplist) "$cxpl 0"
		  xth_me_cmds_update_line_data $cid
		}
		set clnln [regexp -all {\n} $xth(me,cmds,$cid,data)]
		set xth(me,cmds,$cid,xplist) $tmpxpl
		#puts "$clnln -> $txln:\n$xth(me,cmds,$cid,data)"
		if {$clnln >= $txln} {
		  set cpix $pix
		  #puts $pix
		  break
		}
	      }
	      set xth(me,cmds,$cid,xplist) $tmpxpl
	      xth_me_cmds_update_line_data $cid
	      xth_me_cmds_select "$cid $pix"
	      xth_ctrl_scroll_to me linept
	    }
	  }
	}
      }
      return
    }
    
    set previd $cid
    
  }
  
  xth_me_cmds_select [lindex $xth(me,cmds,xlist) 0]
  
}


proc xth_me_ss_next_cmd {type} {
  global xth
  set cselid $xth(me,cmds,selid)
  set cpos [lsearch -exact $xth(me,cmds,xlist) $cselid]
  if {$cpos < 0} {
    set cpos 0
    set ctyp -1
  } else {
    set ctyp $xth(me,cmds,$cselid,ct)
  }
  set tlen [llength $xth(me,cmds,xlist)]
  set nxlist [lrange $xth(me,cmds,xlist) [expr $cpos + 1] end]
  append nxlist " [lrange $xth(me,cmds,xlist) 0 $cpos]"
  if {($ctyp > 0) && ($ctyp != 4) && ($type == 4)} {
    # search for current scrap first
    set nlst {}
    foreach xx $nxlist {
      set nlst [linsert $nlst 0 $xx]
    }
    set nxlist $nlst
  }
  foreach xx $nxlist {
    if {$xth(me,cmds,$xx,ct) == $type} {
      xth_me_cmds_select $xx
      xth_me_ss_show_control $xx
      break
    }
  }
}


# 1 text
# 2 point
# 3 line
# 4 scrap
# 5 endscrap
# 6 area
proc xth_me_ss_show_control {id} {
  global xth
  if {[lsearch -exact $xth(me,cmds,xlist) $id] > -1} {
    switch $xth(me,cmds,$id,ct) {
      1 {
	xth_ctrl_scroll_to me text
	xth_ctrl_maximize me text
      }
      2 {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me point
      }
      3 {
	xth_ctrl_scroll_to me point
	xth_ctrl_maximize me line
	xth_ctrl_maximize me linept
      }
      4 {
	xth_ctrl_scroll_to me scrap
	xth_ctrl_maximize me scrap
      }
      6 {
	xth_ctrl_scroll_to me ac
	xth_ctrl_maximize me ac
      }
    }
  }
}
therion-5.4.1/xtherion/mkall.tcl000066400000000000000000000036051307545355600166560ustar00rootroot00000000000000proc append_file {fnm} {  
  global oid
  set fid [open $fnm r]
  while {![eof $fid]} {
    gets $fid ln
    if {![regexp {^\s*\#\#} $ln]} {
      puts $oid $ln
    }
  }
  puts $oid "\n\n\n\n"
  close $fid
}

proc append_all_file {fnm} {  
  global oid
  set fid [open $fnm r]
  fcopy $fid $oid
  puts $oid "\n\n\n\n"
  close $fid
}


set what [lindex $argv 0]
switch $what {
  survex {
    set oid [open "svxedit" w]
    puts $oid "#!/usr/bin/wish"
    puts $oid {##
## svxedit --
##
##     Survex svx files editor.
##
## Copyright (C) 2002 Stacho Mudrak
## 
##}
  }
  default {
    case $what {
      WIN32 {
        set oid [open "xtherion.tcl" w]
      }
      default {
        set oid [open "xtherion" w]
        puts $oid "#!/bin/sh"
        puts $oid "# the next line restarts with wish \\"
        puts $oid "exec wish \"\$0\" \"\$@\""
      }
    }
    puts $oid {##
## xtherion --
##
##     Therion user interface.
##
## Copyright (C) 2002 Stacho Mudrak
## 
##}
    set what xtherion
  }
}

append_all_file licence.tcl
puts $oid "\n\n\nset xth(debug) 0"

catch {
    set fid [open ../thversion.h r]
    gets $fid verl
    regexp {".+"} $verl vver
    close $fid
    set fid [open ver.tcl w]
    fconfigure $fid -translation lf
    puts $fid "set xth(about,ver) $vver"
    close $fid
}

set fid [open source.tcl r]

set toappend 0
while {![eof $fid]} {
  gets $fid fl
  if {[regexp {^\s*\#\@(\S+)\s*$} $fl dum current]} {
    if {[string equal -nocase $what $current]} {
      set toappend 1
    } elseif {[string equal -nocase "ALL" $current]} {
      set toappend 1
    } else {
      set toappend 0
    }
  }
  if {![regexp {^\s*\#} $fl]} {
    if {[regexp {^\s*source\s+(\S+)} $fl dum afname] && $toappend} {
    	append_file $afname
    }
  }
}
close $fid
close $oid

case $tcl_platform(platform) {
  unix {
    catch {exec chmod 775 xtherion}
    catch {exec chmod 775 svxedit}
  }
  windows {
  }
}

exit 0
therion-5.4.1/xtherion/msgusr.tcl000066400000000000000000000611071307545355600170770ustar00rootroot00000000000000::msgcat::mcset en "xtherion_help_control" {

MAP EDITOR SHORTCUTS
  
General shortcuts
 * Ctrl+Z = undo
 * Ctrl+Y = redo
 * F9 = compile current project
 * to select object in the listbox using keyboard:
    switch using "Tab" into desired listbox;
    move with underlined cursor to desired object;
    press "Space"

Drawing area and background images
 * RightClick = scroll drawing area
 * Double RightClick on the image = move the image
 
Inserting scrap
 * press "Ctrl-r" or "Edit" > "Insert" > "scrap" to insert new scrap
 * new scrap is inserted just after the current one

Inserting point
 * Ctrl+P = switch to `insert point' mode
 * LeftClick = insert point at given position
 * Ctrl+LeftClick = insert point very close to existing point (normally it
    will be inserted right above the closest point)
 * Esc = escape from the `inset point' mode

Editing point
 * LeftClick + drag = move point
 * Ctrl+LeftClick + drag = move point close to the existing
    point (normally it is moved right above closest existing point)
 * LeftClick + drag on point arrows = change point orientation or
    sizes (according to given switches in Point cotrol panel)

Inserting line
 * Crtl+L = insert new line and enter an `insert line point' mode
 * LeftClick = insert line point (without control points)
 * Ctrl+LeftClick = insert line point very close to existing point 
    (normally it's inserted right above closest existing point)
 * LeftClick + drag = insert line point (with control points)
 * hold Ctrl while dragging = fix the distance of previous control point
 * LeftClick + drag on the control point = move its position
 * RightClick on one of the previous points = selects the previous point while 
    in insert mode (useful if you want to change also the direction of
    previous control point)
 * Esc or LeftClick on the last point = end the line insertion
 * LeftClick on the first line point = close the line and end line insertion

Editing line
 * LeftClick + drag = move line point
 * Ctrl+LeftClick + drag = move line point close to the existing
    point (normally it is moved right above closest existing point)
 * LeftClick on control point + drag = move control point

Adding line point
 * select the point before which you want to insert points;
    insert required points;
    press Esc or left-click on the point you selected at the begining
  
Deleting line point
 * select the point you want to delete;
    press "Edit line" > "Delete point" in the Line control panel
    
Splitting line
 * select the point at which you want to split the line;
    press "Edit line" > "Split line" in the Line control panel
    
Inserting area
 * press "Ctrl-a" or "Edit" > "Insert" > "area" to switch to 
    the "insert area border" mode
 * RightClick on the lines, that suround desired area
 * Esc to finish area border lines insertion

Editing area
 * select area you want to edit
 * pres "Insert" in the area control to insert other border lines
    at current cursor position
 * pres "Insert ID" to insert border with given ID at current cursor position
 * pres "Delete" to remove selected area border line
    
Selecting an existing object
 * LeftClick = select object on the top
 * RightClick = select object right below the top object (useful when several
    points lie above each other)
}

::msgcat::mcset es "xtherion_help_control" {

ATAJOS DE TECLADO PARA EDITAR MAPAS

Atajos generales
 * Ctrl+Z = Deshacer
 * Ctrl+Y = Rehacer
 * F9 = Compilar proyecto actual
 * para seleccionar en los menús usando el teclado:
   Pulsar "Tab" hasta seleccionar el menú deseado;
   Moverse con las flechas hasta el objeto deseado;
   pulsar "Espacio"
   
Area de dibujo e imáges de fondo
 * Click Dcho = desplazar área de dibujo
 * Doble click dcho en la imagen = mover la imagen

Insertar croquis
 * Pulsar "Ctrl-r" o "Editar" > "Insertar" > "Croquis" para insertar un croquis nuevo
 * el nuevo croquis se insertará justo detrás del actual

Insertar punto
 * CTRL+P = cambiar a modo 'insertar punto'
 * Click = insertar punto en esa posición
 * Ctrl+Click = insertar punto muy cerca de otro punto
   (normalmente se insertará justo encima del punto más cercano)
 * Esc = salir del modo 'insertar punto'

Editar punto
 * Click en punto + arrastrar = mover el punto
 * Ctrl + Click en punto + Arrastrar = mover el punto cerca de otro
 * normalmente es movido justo encima del punto más cercano
 * Click en la punta de una flecha + arrastrar = cambiar la orientación o
   el tamaño (segun lo indicado en el panel de control Punto)

Insertar línea
 * Ctrl+L = insertar nueva línea y pasar al modo "insertar puntos de línea"
 * Click = insertar punto de línea (sin puntos de control)
 * Ctrl+Click = Insertar punto de línea muy cerca de otro
   (Normalmente se inserta justo encima del punto más cercano)
 * Click + arrastrar = insertar punto de línea (con puntos de control)
 * Pulsar Ctrl mientras se arrastra = fijar la distancia al punto de control anterior
 * Arrastra punto de control = cambir su posición
 * Click dcho en uno de los puntos anteriores = seleccionar ese punto anterior cuando
   estamos en modo inserción (Util si se quiere cambiar también la dirección
   del punto de control anterior)
 * Esc o Click en último punto de la línea = finaliza la inserción de línea
 * Click en el primer punto de la línea = cierra la línea y finaliza la inserción de línea

Editar línea
 * Click en punto + arrastrar = mover punto de línea
 * Ctrl+Click+arrastrar = mover punto de línea cerca de otro punto)
   (normalmente se mueve justo encima del punto más cercano)
 * Click en punto de control + arrastrar = mover punto de control

Añadir puntos de línea
 * seleccionar el punto antes del cual se quieren insertar puntos
 * insertar los puntos que hagan falta
 * pulsar Esc o hacer click en el punto que se seleccionó al principio

Borrar puntos de línea
 * seleccionar el punto que se quiere borrar
 * pulsar "Editar" > "Borrar punto" en el panel de control Líneas

Partir líneas
 * seleccionar el punto en que se quiere cortar la línea
 * pulsar "Editar" > "Cortar línea" en el panel de control Líneas

Insertar áreas
 * pulsar Ctrl-a o "Editar" > "Insertar" > área en menú principal
 * para cambiar al modo "insertar límite de área"
 * Click dcho en las líneas que limitarán el área
 * pulsar Esc para teminar la inserción de líneas límite

Editar áreas
 * seleccionar el área que se quiere editar
 * pulsar "Insertar" en el control area para insertar otras líneas límite
   en la posición del cursor
 * pulsar "Insertar ID" para insertar un límite con el ID que se indique en l posición del cursor
 * Pulsar "Borrar" para eliminae la línea límite seleccionada

Seleccionar objetos
 * Click = seleccionar el objeto que está sobre los demás
 * Click dcho = seleccionar el objeto que está en segundo plano
   (útil cuando varios puntos están superpuestos)
}

::msgcat::mcset it "xtherion_help_control" {

SHORTCUT - EDITOR DI MAPPA
  
Shortcut generali
 * Ctrl+Z = torna indietro
 * Ctrl+Y = rifai
 * F9 = compila il progetto
 * per selezionare un oggetto in una lista con la tastiera:
   muovi con il tasto "Tab" nella lista desidearta;
   muovi il cursore sull'oggetto desiderato;
   premi il tasto "Spazio"

Area di disegno e immagini di background
 * Tasto destro = scrolla l'area di disegno
 * Doppio click col tasto destro su una immagine = muovi l'immagine
 
Inserimento scrap
 * premi "Ctrl-R" oppure "Edita" > "Inserisci" > "scrap" per inserire un nuovo scrap
 * il nuovo scrap viene inserito immediatamente dopo quello attivo

Inserimento punto
 * "Ctrl-P" = cambia alla modalità di inserimento punti
 * Tasto sinistro = inserisci un punto nella posizione del mouse
 * Ctrl + tasto sinistro = inserisci un punto vicino ad uno esistente
   (di solito esso viene inserito esattamente sopra quello esistente)
 * "Esc" = esci dalla modalità di inserimento punti

Editare punti
 * Trascina con tasto sinistro = muovi il punto
 * Trascina con Ctrl + tasto sinistro = muovi il punto vicino ad uno esistente
   (solitamente viene poszionato proprio sopra quello esistente)
 * Trascina con tasto sinistro per la punta delle freccie = cambia l'orientazione
   o la dimensione (dipendentemente dallo switch nel "Controllo Punti" del pannello)

Inserimento linee
 * "Ctrl-L" = entra in modalità inserimento linee ed inserisci una nuova linea
 * Tasto sinistro = inserisci un nuovo punto della linea (senza punti di controllo)
 * Ctrl + tasto sinistro = inserisci un nuovo punto della linea vicino ad uno
   esistente (normalmente sopra di esso)
 * Trascina con tasto sinistro = inserisci un nuovo punto della linea (con punti di
   controllo)
 * tieni premuto "Ctrl" durante in trascinamento = fissa la distanza del precedente 
   punto di controllo
 * Trascina con tasto sinistro su un punto di controllo = muovi la sua posizione
 * Tasto destro su uno dei punti precedenti = seleziona il punto precedente mentre
   sei in modaliatà di inserimento (utile se vuoi cambiare anche la direzione
   del precedente punto di controllo)
 * "Esc" oppure tasto sinistro sull'ultimo punto = fine inserimento linea
 * Tasto sinistro sul primo punto = chiudi la linea e fine inserimento

Editare linee
 * Tasto sinistro e trascina = sposta il punto della linea
 * Ctrl + tasto sinistro e trascina = sposta il punto dell alinea vicino ad un
   punto esistente (di solito proprio sopra di esso)
 * Tasto sinistro su un punto di controllo e trascina = sposta il punto di controllo

Aggiungere punti di linea
 * seleziona il punto prima del quale vuoi inserire dei punti;
   inserisci i punti desiderati;
   premi "Esc" o tasto sinstro sul punto selezionato all'inizio
  
Rimuovere un punto di linea
 * seleziona il punto che vuoi rimuovere;
   premi "Edita linea" > "Rimuovi punto" nel Controllo Linee del pannello
    
Dividere una linea
 * seleziona il punto dove vuoi dividere la linea;
   premi "Edita linea" > "Dividi linea"  nel Controllo Linee del pannello
    
Inserimento aree
 * premi "Ctrl-A" oppure "Edita" > "Inserisci" > "area" per passare alla
   modalità di inserimento bordo area
 * Tasto destro sulle linee, che contornano l'area desiderata
 * "Esc" per terminare l'inserimento dell'area

Editare aree
 * seleziona l'area che vuoi editare
 * premi "Inserisci" nel Controllo Aree per inserire altre linee di bordo
   nella posizione del cursore
 * premi "Inserisci ID" per inserire una linea con un dato ID nella 
   posizione del cursore
 * premi "Rimuovi" per rimuovere dal bordo dell'area la linea di bordo 
   selezionata
    
Selezionare un oggetto
 * Tasto sinistro = selezione l'oggetto che sta sopra
 * Tasto destro = seleziona l'oggetto appena sotto quello gia` selezionato
   (utile quando parecchi punti giaciono uno sopra l'altro)
}


::msgcat::mcset ru "xtherion_help_control" {
КЛАВИАТУРНЫЕ СОКРАЩЕНИЯ И ОПЕРАЦИИ В РЕДАКТОРЕ КАРТ

LeftClick         - щелчек левой кнопкой мыши
Double LeftClick  - двойной щелчек левой кнопкой мыши
RightClick        - щелчек правой кнопкой мыши
Double RightClick - двойной щелчек правой кнопкой мыши
drag              - перетаскивание: удерживая указанную кнопку мыши
                    (и/или клавиатуры) перемещайте мышь

Общее
 * Ctrl+Z = отмена действия (undo)
 * Ctrl+Y = вернуть отмененное действие (redo)
 * F9 = компиляция текущего проекта
 * Для выбора в списках:
    - переместитесь к нужному элементу управления с помощью "Tab";
    - выбирайте нужный элемент списка (он подчеркнут) стрелками;
    - подтвердите выбор нажатием "Enter"

Область рисования и фоновые изображения
 * RightClick + drag = скроллинг области рисования
 * Double RightClick на изображении + drag = перемещение изображения

Вставка скрапа
 * Нажмите "Ctrl-r" или "Действие" > "Вставить скрап" на панели "Команды в файле"
 * новый скрап вставляется в после текущего

Вставка точки
 * Ctrl+P = переключение в режим `вставка точки'
 * LeftClick = вставка точки в позицию курсора
 * Ctrl+LeftClick = вставка точки близко с другой точкой (без Ctrl
   точка "притягивается" к уже существующей точке)
 * Esc = выйти из режима `вставка точки'

Редактирование точки
 * LeftClick + drag = перемещает точку
 * Ctrl+LeftClick + drag = перемещение точки близко от существующей
   точки (без Ctrl точка "притягивается" к уже существующей точке)
 * LeftClick + drag над стрелкой = изменение ориентации точки
   (ориентация должна быть включена на панели "Точка")

Вставка линии
 * Crtl+L = Вставка новой линии и переход в режим `вставка точек линии'
 * LeftClick = вставка точки линии в позицию курсора (без точек сглаживания)
 * Ctrl+LeftClick = вставка точки линии близко от существующей (без Ctrl точка
   "притягивается" к уже существующей точке)
 * LeftClick + drag = вставка точки линии (с точками сглаживания)
 * удерживая Ctrl во время перемещения точки сглаживания = перемещает только
   данную точку сглаживания
 * LeftClick + drag на точке сглаживания = изменение ее позиции
 * RightClick на одной из предыдущих точек текущей линии в режиме `вставка точек линии'
   = выбрать существующую точку, полезно для редактирования точек сглаживания
 * Esc или LeftClick на последней точке = закончить вставку точек линии
 * LeftClick на первой точке линии = замкнуть начало линии на конец и выйти из режима
   вставки

Редактирование линии
 * LeftClick + drag = перемещение точки линии
 * Ctrl+LeftClick + drag = перемещение точки линии близко от существующей
   (без Ctrl точка "притягивается" к уже существующей точке)
 * LeftClick на точке сглаживания + drag = перемещение точки сглаживания

Добавление точки к существующей линии
 * выбрать точку перед которой вы хотите вставить новую точку;
    - перейдите в режим вставки точки (панель "Линия")
    - вставьте точки (см. Вставка линии);
    - Esc или LeftClick на точке с которой вы начинали = выход из режима вставки

Удаление точки линии
 * выбрать точку линии которую нужно удалить;
    нажмите "Править линию" > "Удалить точку" на панели "Линия"

Зазделение линии
 * выбрать точку в которой вы хотите разделить линию;
    нажмите "Править линию" > "Разделить линию" на панели "Линия"

Вставка области
 * "Ctrl-a" или на панели "Команды в файле" нажмите "Действие" > "Вставить область"
   чтобы переключится в режим "выбор границ области"
 * LeftClick на линии = линия добавляется к списку границ области
 * Esc для того чтобы закончить выбор границ области

Редактировать область
 * Выбрать область для редактирования
 * неажать "Вставка" на панели "Область" для вставки граничных линий в список
   линий после выбраной линии
 * нажать "Вставить по ИД" для вставки линии с указанным идентификатором
 * нажать "Удалить" для удаления выбранной линии из списка гранци области

Выбор существующего объекта
 * LeftClick = выбор верхнего объекта
 * RightClick = перебор объектов закрытых верхним объектом (например полезно, когда
   несколько точек расположены в одной позиции друг над другом)
}

::msgcat::mcset bg "xtherion_help_control" {
Клавишни комбинации и действия в редактора на карти

LeftClick         - натискане на левия бутон на мишката
Double LeftClick  - двойно натискане на левия бутон на мишката
RightClick        - натискане на десния бутон на мишката
Double RightClick - двойно натискане на десния бутон на мишката
drag              - преместване: задръжте натиснат указания бутон на мишката
                    (и/или клавиатурата) и движете мишката

Общи
 * Ctrl+Z = отмяна на действие (undo)
 * Ctrl+Y = възстановяване на отменено действие (redo)
 * F9 = компилация на текущия проект
 * За избор в менюто:
    - преместете към нужният елемент за управлениес помощта на бутона "Tab";
    - Изберете нужният елемент от менюто (той е подчертан) със стрелките;
    - потвърдете избора, натискайки "Enter"

Област за рисуване и фонови изображения
 * RightClick + drag = скролиране на областта за рисуване
 * Double RightClick в/у изображение + drag = преместване на изображението

Вмъкване на скрап
 * Натиснете "Ctrl-r" или "Действие" > "Вмъкни скрап" на панела "Команди във файл"
или "Редактиране" > "Вмъкни" > "Скрап" от горното меню
 * новият скрап се вмъква след текущия

Вмъкване на точка
 * Ctrl+P = превключване в режим "вмъкване на точка"
 * LeftClick = вмъкване на точка в позицията на курсора
 * Ctrl+LeftClick = вмъкване на точка близко до друга точка (обикновено се появява
точно над вече съществуващата точка)
 * Esc = излизане от режима "вмъкване на точка"

Редактиране на точка
 * LeftClick + drag = премества точката
 * Ctrl+LeftClick + drag = премества точката близко до съществуваща точка (обикновено 
се появява точно над вече съществуващата точка)
 * LeftClick + drag на стрелката на точката = изменение на ориентацията на точката
   (ориентацията трябва да бъде включена на панела "Точка")

Вмъкване на линия
 * Crtl+L = Вмъкване на нова линия и преход в режим "вмъкване на точка на линия"
 * LeftClick = вмъкване на точка на линия в позицията на курсора (без контролна точка)
 * Ctrl+LeftClick = вмъкване на точка на линия близко до съществуваща (обикновено 
се появява точно над вече съществуващата точка)
 * LeftClick + drag = вмъкване на точка на линия (с контролна точка)
 * задържайки Ctrl по време на преместването на точката = на определяне на 
разстоянието до предишната контролна точка
 * LeftClick + drag в/у контролна точка = изменение на позицията и
 * RightClick на една от предишните точки на текущата линия в режим "вмъкване на точка на линия"
   = избиране на съществуваща точка, полезно за редактиране на предишна контролна точка
 * Esc или LeftClick на последната точка = завършване на вмъкване на линия
 * LeftClick на първата точка на линия = свързване на началото на линията с края и и изход от режима на вмъкване

Редактиране на линии
 * LeftClick + drag = преместване на точка на линия
 * Ctrl+LeftClick + drag = преместване на точка на линия близко до съществуваща
 * LeftClick на контролна точка + drag = преместване на контролната точка

Добавяне на точки към съществуваща линия
 * изберете точка пред която искате да вмъкнете нова точка;
    - преминете в режим вмъкване на точка (панел "Линия")
    - вмъкнете точка (виж вмъкване на линия);
    - Esc или LeftClick в/у точката с която започнахте = изход от режим вмъкване

Изтриване на точка на линия
 * изберете точката, която е нужно да се изтрие;
    натиснете "Редактирай линия" > "Изтрий точка" на панела "Линия"

Разделяне на линия
 * изберете точка в която искате да разделите линията;
    натиснете "Редактирай линия" > "Раздели линия" на панела "Линия"

Вмъкване на област
 * "Ctrl-a" или на панел "Команди във файл" натиснете "Действие" > "Вмъкване на област"
или "Редактиране" > "Вмъкни" > "Област" от горното меню
   за да превключите в режим "избор на границите на областта"
 * LeftClick на линия = линията се добавя към списъка с граници на областта
 * Esc за да завършите избора на границите на областта

Редактиране на област
 * Изберете област за редактиране
 * натиснете "Вмъкване" на панела "Област" за да вмъкнете гранична линия, която
сте маркирали с курсора
 * натиснете "Вмъкнете по ИД" за вмъкване на линията с указания идентификатор
 * натиснете "Изтрий" за да изтриетеизбраната линия от списъка с граници на областта

Избор на съществуващ обект
 * LeftClick = избор на най-горния обект
 * RightClick = избор на обекти, закрити от горен обект (например е полезно, когато
   няколко точки са разположени в една позиция една над друга)
}

therion-5.4.1/xtherion/sbar.tcl000066400000000000000000000052711307545355600165060ustar00rootroot00000000000000##
## sbar.tcl --
##
##     Status bar module.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_status_bar {aname widg stext} {
  global xth  
  if {$xth(gui,balloons)} {
    DynamicHelp::add $widg -type balloon -text $stext
  }
  set anml $aname
  foreach aname $anml {
    set sbar $xth(gui,$aname).sf.sbar
    set widgx "$aname$widg"
    set xth(gui,sbar,$widgx,exp) 0  
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 0} {catch {set xth(gui,sbar,$widgx,exp) 1; set xth(gui,sbar,$widgx,otext) \[$sbar cget -text\]; $sbar configure -text [list $stext]}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 0} {catch {set xth(gui,sbar,$widgx,exp) 1; set xth(gui,sbar,$widgx,otext) \[$sbar cget -text\]; $sbar configure -text [list $stext]}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 1} {catch {$sbar configure -text \$xth(gui,sbar,$widgx,otext); set xth(gui,sbar,$widgx,exp) 0}}"
    bind $widg  "+ if {\$xth(gui,sbar,$widgx,exp) == 1} {catch {$sbar configure -text \$xth(gui,sbar,$widgx,otext); set xth(gui,sbar,$widgx,exp) 0}}"
  }
}

proc xth_status_bar_push aname {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  if {![info exists xth(gui,sbar,$aname)]} {
    set xth(gui,sbar,$aname) [$sbar cget -text]
  } else {
    set xth(gui,sbar,$aname) [lappend $xth(gui,sbar,$aname) [$sbar cget -text]]
  }
  }
}


proc xth_status_bar_pop aname {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  if {! [info exists xth(gui,sbar,$aname)]} {
    set xth(gui,sbar,$aname) ""
  } else {
    $sbar configure -text [lindex $xth(gui,sbar,$aname) 0]
    set xth(gui,sbar,$aname) [lreplace $xth(gui,sbar,$aname) 0 0]
  }
  }
}


proc xth_status_bar_status {aname txt} {
  global xth
  catch {
  set sbar $xth(gui,$aname).sf.sbar
  $sbar configure -text $txt
  update idletasks
  }
}

therion-5.4.1/xtherion/scroll.tcl000066400000000000000000000031651307545355600170550ustar00rootroot00000000000000##
## scroll.tcl --
##
##     Special scrollbar commands.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


proc xth_scroll_showcmd {sbar cmd} {
  global xth
  set xth(scroll,$sbar,show) $cmd
  set xth(scroll,$sbar,open) 0
}

proc xth_scroll_hidecmd {sbar cmd} {
  global xth
  set xth(scroll,$sbar,hide) $cmd
  set xth(scroll,$sbar,open) 0
}

proc xth_scroll {sbar first last} {
  global xth
  if {[expr $first == 0.0] && [expr $last == 1.0]} {
    if {$xth(scroll,$sbar,open) == 1} {
      set xth(scroll,$sbar,open) 0
      eval $xth(scroll,$sbar,hide)
      update idletasks
    }
  } else {
    if {$xth(scroll,$sbar,open) == 0} {
      set xth(scroll,$sbar,open) 1
      eval $xth(scroll,$sbar,show)
      update idletasks
    }
    $sbar set $first $last
  }
}
therion-5.4.1/xtherion/source.tcl000077500000000000000000000032741307545355600170630ustar00rootroot00000000000000#! /usr/bin/wish
## source.tcl --
##
##     Main script.
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

set xth(debug) 1

#@ALL
source ver.tcl
source global.tcl
source msgxth.tcl
source msgusr.tcl
#@XTHERION
source therion.tcl
#@SURVEX
if 0 {
source svx_global.tcl
}
#@ALL
source about.tcl
source init.tcl
source syntax.tcl
source sbar.tcl
source scroll.tcl
source help.tcl
source ctrl.tcl
source app.tcl
source te.tcl
source te_sdata.tcl
source te_sdata2.tcl
source te_import.tcl
#@XTHERION
source tools_imgs.tcl
source me_imgs.tcl
source me_cmds.tcl
source me_cmds2.tcl
source me_import.tcl
source me_ss.tcl
source me.tcl
source cp_procs.tcl
source bac.tcl
source cp.tcl
source tools.tcl
source mapcal.tcl
#@DEBUG
if {![string equal $xth(gui,platform) windows]} {
  source console.tcl
} else {
  source dbg.tcl
}
#@ALL
source main.tcl


therion-5.4.1/xtherion/svx_global.tcl000066400000000000000000000032551307545355600177170ustar00rootroot00000000000000##
## svx_global.tcl --
##
##     Global variables for svxedit.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


# file extensions
set xth(app,te,filetypes) {    
  {{Survex files}       {.svx}}    
  {{Text files}       {.txt}}    
  {{All files}       {*}}    
}
set xth(app,te,fileext) {.svx}

# command indenting
set xth(icmds) {}
set xth(cmds) {}
set xth(cmd,*begin) 2
set xth(endcmd,*begin) "*end"
set xth(cmd,*end) -2
set xth(endcmd,*end) ""

# application titles
set xth(prj,name) "svxedit"
set xth(prj,title) "survex source editor"
set xth(about,info) "svxedit v1.0 beta\n \u00A9 2002 Stacho Mudrak"

# fonts :-)
case $tcl_platform(platform) {
  unix {
    set xth(gui,lfont) "Helvetica 10"
    set xth(gui,efont) {fixed 10 roman}
  }
  windows {
    set xth(gui,efont) "Courier 12 roman"
  }
  macintosh {
  }
}
therion-5.4.1/xtherion/syntax.tcl000066400000000000000000000056161307545355600171100ustar00rootroot00000000000000##
## syntax.tcl --
##
##     Syntax module.  
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------

# prepare the syntax commands
foreach cmd $xth(icmds) {
  set xth(cmd,$cmd) 2
  set xth(endcmd,$cmd) end$cmd
  set xth(endcmd,end$cmd) ""
  set xth(cmd,end$cmd) -2
}

foreach cmd $xth(cmds) {
  set xth(cmd,$cmd) 1
  set xth(endcmd,$cmd) end$cmd
  set xth(endcmd,end$cmd) ""
  set xth(cmd,end$cmd) -1
}

set xth(datafmts) [list \
  "unknown      $xth(datafmt,unknown)" \
  "station      $xth(datafmt,station)" \
  "from         $xth(datafmt,station)" \
  "to           $xth(datafmt,station)" \
  "compass      $xth(datafmt,bearing)" \
  "backcompass  $xth(datafmt,bearing)" \
  "bearing      $xth(datafmt,bearing)" \
  "backbearing  $xth(datafmt,bearing)" \
  "tape         $xth(datafmt,length)" \
  "length       $xth(datafmt,length)" \
  "count        $xth(datafmt,counter)" \
  "counter      $xth(datafmt,counter)" \
  "fromcount    $xth(datafmt,counter)" \
  "tocount      $xth(datafmt,counter)" \
  "fromcounter  $xth(datafmt,counter)" \
  "tocounter    $xth(datafmt,counter)" \
  "gradient     $xth(datafmt,gradient)" \
  "clino        $xth(datafmt,gradient)" \
  "backgradient $xth(datafmt,gradient)" \
  "backclino    $xth(datafmt,gradient)" \
  "depth        $xth(datafmt,depth)" \
  "fromdepth    $xth(datafmt,depth)" \
  "todepth      $xth(datafmt,depth)" \
  "depthchange  $xth(datafmt,depth)" \
  "dx           $xth(datafmt,length)" \
  "dy           $xth(datafmt,length)" \
  "dz           $xth(datafmt,length)" \
  "northing     $xth(datafmt,length)" \
  "easting      $xth(datafmt,length)" \
  "altitude     $xth(datafmt,length)" \
  "up           $xth(datafmt,dimensions)" \
  "down         $xth(datafmt,dimensions)" \
  "left         $xth(datafmt,dimensions)" \
  "right        $xth(datafmt,dimensions)" \
  "ceiling      $xth(datafmt,dimensions)" \
  "floor        $xth(datafmt,dimensions)" \
]

foreach datafmt $xth(datafmts) {
  set qt [lindex $datafmt 0]
  set xth(datafmt,$qt,format) [lindex $datafmt 1]
  set xth(datafmt,$qt,special) [lindex $datafmt 2]
}
therion-5.4.1/xtherion/te.tcl000066400000000000000000001066631307545355600161760ustar00rootroot00000000000000##
## te.tcl --
##
##     Text editor.   
##
## Copyright (C) 2002 Stacho Mudrak
## 
## $Date: $
## $RCSfile: $
## $Revision: $
##
## -------------------------------------------------------------------- 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
## --------------------------------------------------------------------


xth_about_status [mc "loading text editor ..."]

if {[string equal -nocase $xth(prj,name) svxedit]} {
  xth_app_create te {}
} else {
  xth_app_create te [mc "Text Editor"]
}

xth_ctrl_add te files [mc "Files"]
xth_ctrl_add te sdata [mc "Data table"]
xth_ctrl_add te sr [mc "Search & Replace"]
xth_ctrl_finish te

set xth(te,open_file_encoding) $xth(app,fencoding)

set xth(te,bind,text_tab) {
  if { [string equal [%W cget -state] "normal"] } {
    xth_te_insert_tab %W
    break
  }
}

set xth(te,bind,text_return) {
  regexp {(\d+)\.} [%W index insert] dum cln
  set spcs ""
  regexp {^\s+} [%W get $cln.0 $cln.end] spcs
#  set spcsc [string length $spcs]
#  set indct [string length [xth_te_get_indent %W $cln.0 1]]
#  if {$spcsc == $indct} {
#  } elseif {$spcsc > $indct} {
#    %W delete $cln.0 $cln.[expr $spcsc - $indct]
#  } elseif {$spcsc < $indct} {
#    %W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
#  }
#  xth_te_insert_text %W "\n[xth_te_get_indent %W [expr $cln + 1].0 0]"
  xth_te_insert_text %W "\n$spcs"
}


proc xth_te_insert_text {w s} {
    if {[string equal $s ""] || [string equal [$w cget -state] "disabled"]} {
	return
    }
    set compound 0
    catch {
	if {[$w compare sel.first <= insert] \
		&& [$w compare sel.last >= insert]} {
            set oldSeparator [$w cget -autoseparators]
            if { $oldSeparator } {
                $w configure -autoseparators 0
                $w edit separator
                set compound 1
            }
	    $w delete sel.first sel.last
	}
    }
    $w insert insert $s
    $w see insert
    if { $compound && $oldSeparator } {
        $w edit separator
        $w configure -autoseparators 1
    }
}


proc xth_te_insert_tab W {
  global xth
  regexp {\.(\d+)} [$W index insert] dum col
  set nsp [expr $xth(gui,etabsize) - ($col % $xth(gui,etabsize))]
  xth_te_insert_text $W  [format \x25$nsp\s " "]
  focus $W
}


proc xth_te_sdata_enable {w} {
  global xth
  if {[string length $w] < 1} {
    set w $xth(ctrl,te,sdata)
  }
  set chlist [winfo children $w]
  if {[llength $chlist] > 0} {
    foreach sdw $chlist {
      catch {$sdw configure -state normal}
      catch {xth_te_sdata_enable $sdw}
    }
  }
}

proc xth_te_sdata_disable {w} {
  global xth
  if {[string length $w] < 1} {
    set w $xth(ctrl,te,sdata)
  }
  set chlist [winfo children $w]
  if {[llength $chlist] > 0} {
    foreach sdw $chlist {
      catch {$sdw configure -state disabled}
      catch {xth_te_sdata_disable $sdw}
    }
  }
}


set xth(te,flist) {}
set xth(te,fcurr) -1
set xth(te,fltid) 0

# create position bar
set pbar $xth(gui,te).sf.pbar
label $pbar -text "2.0" -width 8 -relief sunken -font $xth(gui,lfont)
pack $pbar -side left


# file control
frame $xth(ctrl,te,files).fl
set flbox $xth(ctrl,te,files).fl.flbox 
listbox $flbox -height 6 -selectmode single -takefocus 1 \
  -yscrollcommand "xth_scroll $xth(ctrl,te,files).fl.sv" \
  -xscrollcommand "xth_scroll $xth(ctrl,te,files).fl.sh" \
  -font $xth(gui,lfont) -exportselection no \
  -selectborderwidth 1

scrollbar $xth(ctrl,te,files).fl.sv -orient vert  -command "$flbox yview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
scrollbar $xth(ctrl,te,files).fl.sh -orient horiz  -command "$flbox xview" \
  -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
frame $xth(ctrl,te,files).ef

  
bind $flbox <> "xth_te_show_file \[lindex \[%W curselection\] 0\]"

grid columnconf $xth(ctrl,te,files).fl 0 -weight 1
grid rowconf $xth(ctrl,te,files).fl 0 -weight 1
grid $flbox -column 0 -row 0 -sticky news
xth_scroll_showcmd $xth(ctrl,te,files).fl.sv "grid $xth(ctrl,te,files).fl.sv -column 1 -row 0 -sticky news"
xth_scroll_hidecmd $xth(ctrl,te,files).fl.sv "grid forget $xth(ctrl,te,files).fl.sv"
xth_scroll_showcmd $xth(ctrl,te,files).fl.sh "grid $xth(ctrl,te,files).fl.sh -column 0 -row 1 -sticky news"
xth_scroll_hidecmd $xth(ctrl,te,files).fl.sh "grid forget $xth(ctrl,te,files).fl.sh"
xth_status_bar te $flbox [mc "Switch open files."]
grid columnconf $xth(ctrl,te,files) 0 -weight 1
grid $xth(ctrl,te,files).fl -column 0 -row 0 -sticky news
if {![string equal -nocase $xth(prj,name) svxedit]} {
grid $xth(ctrl,te,files).ef -column 0 -row 1 -sticky news
}
Label $xth(ctrl,te,files).ef.ecl -text [mc "Encoding"] -anchor e -font $xth(gui,lfont) -state disabled
ComboBox $xth(ctrl,te,files).ef.ecb -values $xth(encodings) \
  -textvariable xth(te,open_file_encoding) \
  -font $xth(gui,lfont) -height 4 -command xth_te_set_encoding \
  -state disabled
Button $xth(ctrl,te,files).ef.chb -text [mc "Change to"] -anchor e -font $xth(gui,lfont) -padx 1 -state disabled -command xth_te_set_encoding
Label $xth(ctrl,te,files).ef.cel -text "" -anchor w -padx 2 -font $xth(gui,lfont) -state disabled
#grid columnconf $xth(ctrl,te,files).ef 0 -weight 0
grid columnconf $xth(ctrl,te,files).ef 1 -weight 1
grid $xth(ctrl,te,files).ef.ecl -column 0 -row 0 -sticky news
grid $xth(ctrl,te,files).ef.cel -column 1 -row 0 -sticky news
grid $xth(ctrl,te,files).ef.chb -column 0 -row 1 -sticky news
grid $xth(ctrl,te,files).ef.ecb -column 1 -row 1 -sticky ew
xth_status_bar te $xth(ctrl,te,files).ef [mc "To set file encoding, type encoding name and press  button."]

frame $xth(gui,te).af.apps.ff -bg $xth(gui,ecolorbg)
pack $xth(gui,te).af.apps.ff -fill both -expand yes



# table control
Button $xth(ctrl,te,sdata).sfb -text [mc "Scan data format"] \
  -font $xth(gui,lfont) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).sfb \
  [mc "Scan data format and rebuild centerline data insertion tool."]

checkbutton $xth(ctrl,te,sdata).sfs -text [mc "Enter station names"] -anchor w \
  -font $xth(gui,lfont) -variable xth(te,sdata,es) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).sfs \
  [mc "Check if you want to insert station names for each shot."]

frame $xth(ctrl,te,sdata).sdf

button $xth(ctrl,te,sdata).taf -text [mc "Auto format selection"] \
  -font $xth(gui,lfont) -state disabled
xth_status_bar te $xth(ctrl,te,sdata).taf [mc "Format selection to given table."]

grid columnconf $xth(ctrl,te,sdata) 0 -weight 1
grid $xth(ctrl,te,sdata).sfb -column 0 -row 0 -sticky nsew
grid $xth(ctrl,te,sdata).sdf -column 0 -row 1 -sticky nsew
grid $xth(ctrl,te,sdata).sfs -column 0 -row 2 -sticky nsew
grid $xth(ctrl,te,sdata).taf -column 0 -row 3 -sticky nsew




set sfm $xth(ctrl,te,sr)

set xth(ctrl,te,sr,selection_io) 0
set xth(ctrl,te,sr,search) ""
set xth(ctrl,te,sr,replace_io) 0
set xth(ctrl,te,sr,replace) ""
set xth(ctrl,te,sr,case_io) 0
set xth(ctrl,te,sr,regular_io) 0
set xth(ctrl,te,sr,selection_io) 0

set xth(ctrl,te,sr,selection_start) {}
set xth(ctrl,te,sr,selection_end) {}
set xth(ctrl,te,sr,search_end) end

Label $sfm.seal -text [mc "search"] -anchor w -font $xth(gui,lfont) -state disabled \
  -width 4
xth_status_bar te $sfm.seal [mc "Search expression."]
Entry $sfm.seae -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,te,sr,search)
xth_status_bar te $sfm.seae [mc "Search expression."]

checkbutton $sfm.replc -text [mc "replace"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 4 \
  -variable xth(ctrl,te,sr,replace_io) \
  -command {}
xth_status_bar te $sfm.replc [mc "Check whether to replace found expression."]
Entry $sfm.reple -font $xth(gui,lfont) -state disabled -width 4 \
  -textvariable xth(ctrl,te,sr,replace)
xth_status_bar te $sfm.reple [mc "Replace expression."]

checkbutton $sfm.ccase -text [mc "case sensitive search"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,case_io) \
  -command {}
xth_status_bar te $sfm.ccase [mc "Check if search should be case sensitive."]

checkbutton $sfm.creg -text [mc "regular expressions"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,regular_io) \
  -command {}
xth_status_bar te $sfm.creg [mc "Check whether to evaluate search and replace as regular expressions."]

checkbutton $sfm.csel -text [mc "search selection only"] -anchor w -font $xth(gui,lfont) \
  -state disabled -width 0 \
  -variable xth(ctrl,te,sr,selection_io) \
  -command {}
xth_status_bar te $sfm.csel [mc "Check whether to do search only in selected text."]

Button $sfm.bfirst -text [mc "First"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_first
xth_status_bar te $sfm.bfirst [mc "Search or replace first expression in the file."]
Button $sfm.bnext -text [mc "Next"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_next
xth_status_bar te $sfm.bnext [mc "Search or replace next expression after the cursor in the file."]
Button $sfm.ball -text [mc "All"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command te_sr_all
xth_status_bar te $sfm.ball [mc "Search or replace all expressions in the file."]
Button $sfm.bclear -text [mc "Clear"] -anchor center -font $xth(gui,lfont) \
  -state disabled -width 4 -command {
    te_sr_clear
    set xth(ctrl,te,sr,replace_io) 0
    update idletasks
  }
xth_status_bar te $sfm.bclear [mc "Clear all highlights in the file."]


grid columnconf $sfm 0 -weight 1
grid columnconf $sfm 1 -weight 1
grid $sfm.seal -row 0 -column 0 -sticky news
grid $sfm.seae -row 1 -column 0 -sticky news
grid $sfm.replc -row 0 -column 1 -sticky news
grid $sfm.reple -row 1 -column 1 -sticky news
grid $sfm.ccase -row 2 -column 0 -columnspan 2 -sticky news
grid $sfm.creg -row 3 -column 0 -columnspan 2 -sticky news
grid $sfm.csel -row 4 -column 0 -columnspan 2 -sticky news
grid $sfm.bfirst -row 5 -column 0 -sticky news
grid $sfm.bnext -row 5 -column 1 -sticky news
grid $sfm.ball -row 6 -column 0 -sticky news
grid $sfm.bclear -row 6 -column 1 -sticky news





proc xth_te_show_file {fidx} {

  global xth
  
  if {$xth(te,fcurr) >= 0} {
    pack forget $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame)
  }
  
  if {$fidx < 0} {
    set fidx 0
  }
  if {$fidx >= [llength $xth(te,flist)]} {
    set fidx [expr [llength $xth(te,flist)] - 1]
  }
  
  set xth(te,fcurr) $fidx
  if {$xth(te,fcurr) >= 0} {
    set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
    pack $xth(te,$cfid,frame) -expand yes -fill both
    $xth(ctrl,te,files).fl.flbox delete $xth(te,fcurr)
    $xth(ctrl,te,files).fl.flbox insert $xth(te,fcurr) "[expr $xth(te,fcurr) + 1]. $xth(te,$cfid,name) ($xth(te,$cfid,path))"
    $xth(ctrl,te,files).fl.flbox see $fidx
    $xth(ctrl,te,files).fl.flbox selection clear 0 end
    $xth(ctrl,te,files).fl.flbox selection set $fidx $fidx
    focus $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
    set xth(te,open_file) $xth(te,$cfid,name)
    # set xth(te,open_file_encoding) $xth(te,$cfid,encoding)
    $xth(ctrl,te,files).ef.cel configure -text $xth(te,$cfid,encoding)
    $xth(ctrl,te,files).ef.ecl configure -state normal
    $xth(ctrl,te,files).ef.ecb configure -state normal
    $xth(ctrl,te,files).ef.chb configure -state normal
    $xth(ctrl,te,files).ef.cel configure -state normal
    $xth(te,menu) entryconfigure [mc "Edit"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save as"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Import"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Save all"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Auto save"] -state normal
    $xth(te,menu,file) entryconfigure [mc "Close"] -state normal
    $xth(ctrl,te,sr).seal configure -state normal
    $xth(ctrl,te,sr).seae configure -state normal
    $xth(ctrl,te,sr).replc configure -state normal
    $xth(ctrl,te,sr).reple configure -state normal
    $xth(ctrl,te,sr).ccase configure -state normal
    $xth(ctrl,te,sr).creg configure -state normal
    $xth(ctrl,te,sr).csel configure -state normal
    $xth(ctrl,te,sr).bfirst configure -state normal
    $xth(ctrl,te,sr).bnext configure -state normal
    $xth(ctrl,te,sr).ball configure -state normal 
    $xth(ctrl,te,sr).bclear configure -state normal
    if {[llength $xth(te,flist)] > 1} {
      $xth(te,menu,file) entryconfigure [mc "Next"] -state normal
      $xth(te,menu,file) entryconfigure [mc "Previous"] -state normal
    } else {
      $xth(te,menu,file) entryconfigure [mc "Next"] -state disabled
      $xth(te,menu,file) entryconfigure [mc "Previous"] -state disabled
    }
    xth_te_sdata_enable ""
  } else {
    set xth(te,open_file) ""
    set xth(te,open_file_encoding) $xth(app,fencoding)
    $xth(te,menu,file) entryconfigure [mc "Save"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Save as"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Import"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Save all"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Auto save"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Close"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Next"] -state disabled
    $xth(te,menu,file) entryconfigure [mc "Previous"] -state disabled
    $xth(ctrl,te,files).ef.ecl configure -state disabled
    $xth(ctrl,te,files).ef.ecb configure -state disabled
    $xth(ctrl,te,files).ef.chb configure -state disabled
    $xth(ctrl,te,files).ef.cel configure -state disabled -text ""
    xth_te_sdata_disable ""
    $xth(te,menu) entryconfigure [mc "Edit"] -state disabled
    $xth(ctrl,te,sr).seal configure -state disabled
    $xth(ctrl,te,sr).seae configure -state disabled
    $xth(ctrl,te,sr).replc configure -state disabled
    $xth(ctrl,te,sr).reple configure -state disabled
    $xth(ctrl,te,sr).ccase configure -state disabled
    $xth(ctrl,te,sr).creg configure -state disabled
    $xth(ctrl,te,sr).csel configure -state disabled
    $xth(ctrl,te,sr).bfirst configure -state disabled
    $xth(ctrl,te,sr).bnext configure -state disabled
    $xth(ctrl,te,sr).ball configure -state disabled 
    $xth(ctrl,te,sr).bclear configure -state disabled
    xth_ctrl_minimize te sr
  }
  xth_app_title te
  
}


proc xth_te_set_encoding {} {

  global xth
 
  if {$xth(te,fcurr) >= 0} {
    # convert encoding into system's one
    set rxp "\\s+($xth(te,open_file_encoding))\\s+"
    if {[regexp -nocase $rxp $xth(encodings) dum temp]} {
      set xth(te,open_file_encoding) $temp
      set xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],encoding) $temp
      $xth(ctrl,te,files).ef.cel configure -text $temp
    } else {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message "uknown encoding -- $xth(te,open_file_encoding)" \
        -font $xth(gui,lfont)
    }
  }
}

proc xth_te_switch_file {fdr} {
  global xth
  set cf $xth(te,fcurr)
  if {$cf != -1} {
    incr cf $fdr
    if {$cf < 0} {
      set cf [expr [llength $xth(te,flist)] - 1]
    }
    if {$cf >= [llength $xth(te,flist)]} {
      set cf 0
    }
    xth_te_show_file $cf
  }
}


proc xth_te_create_file {} {

  global xth
  xth_status_bar_status te ""
  
  # create file variables
  incr xth(te,fltid)
  set cfid $xth(te,fltid)
  #set xth(te,$cfid,name) [format "noname%d$xth(app,te,fileext)" $cfid]
  set xth(te,$cfid,name) [format "(new file)" $cfid]
  set xth(te,$cfid,path) [file join $xth(gui,initdir) $xth(te,$cfid,name)]
  set xth(te,$cfid,newf) 1
  set xth(te,$cfid,mtime) 0
  set xth(te,$cfid,encoding) $xth(app,fencoding)
  set xth(te,$cfid,frame) $xth(gui,te).af.apps.ff.file$cfid
  set cfr $xth(te,$cfid,frame)

  # create the frame and bind the events
  set iac {if {[string equal $xth(app,active) te]} }
  frame $cfr
  text $cfr.txt  -font $xth(gui,efont) -bg $xth(gui,ecolorbg) \
    -fg $xth(gui,ecolorfg) -insertbackground $xth(gui,ecolorfg) \
    -yscrollcommand "$cfr.sv set" \
    -xscrollcommand "$cfr.sh set" \
    -relief sunken \
    -selectbackground $xth(gui,ecolorselbg) \
    -selectforeground $xth(gui,ecolorselfg) \
    -selectborderwidth 0 \
    -wrap none
  if {$xth(gui,text_undo)} {
    $cfr.txt configure -undo 1 -maxundo -1
  }
  set xth(te,$cfid,otext) [$cfr.txt get 1.0 end]
  scrollbar $cfr.sv -orient vert  -command "$cfr.txt yview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  scrollbar $cfr.sh -orient horiz  -command "$cfr.txt xview" \
    -takefocus 0 -width $xth(gui,sbwidth) -borderwidth $xth(gui,sbwidthb)
  bind $cfr.txt  "$iac {$xth(te,bind,text_tab)}"
  bind $cfr.txt  "$iac {$xth(te,bind,text_return)}"
  bind $cfr.txt <> "xth_te_update_position $cfr.txt"
  bind $cfr.txt  "+ $iac {event generate $cfr.txt <> -when tail}"
  bind $cfr.txt  "+ $iac {event generate $cfr.txt <> -when tail}"
  bind $cfr.txt <$xth(kb_control)-Key-1> "$iac {xth_te_show_file 0}"
  bind $cfr.txt <$xth(kb_control)-Key-2> "$iac {xth_te_show_file 1}"
  bind $cfr.txt <$xth(kb_control)-Key-3> "$iac {xth_te_show_file 2}"
  bind $cfr.txt <$xth(kb_control)-Key-4> "$iac {xth_te_show_file 3}"
  bind $cfr.txt <$xth(kb_control)-Key-5> "$iac {xth_te_show_file 4}"
  bind $cfr.txt <$xth(kb_control)-Key-6> "$iac {xth_te_show_file 5}"
  bind $cfr.txt <$xth(kb_control)-Key-7> "$iac {xth_te_show_file 6}"
  bind $cfr.txt <$xth(kb_control)-Key-8> "$iac {xth_te_show_file 7}"
  bind $cfr.txt <$xth(kb_control)-Key-9> "$iac {xth_te_show_file 8}"
  bind $cfr.txt <$xth(kb_control)-Key-0> "$iac {xth_te_show_file 9}"
  bind $cfr.txt <$xth(kb_control)-Key-n> "$iac {xth_te_switch_file 1}"
  bind $cfr.txt <$xth(kb_control)-Key-p> "$iac {xth_te_switch_file -1}"
  bind $cfr.txt <$xth(kb_control)-Key-w> "$iac {xth_te_close_file}"
  bind $cfr.txt <$xth(kb_control)-Key-a> "$iac {xth_te_select_all}"
  bind $cfr.txt <$xth(kb_control)-Key-i> "$iac {xth_te_auto_indent}"
  bind $cfr.txt <$xth(kb_control)-Key-s> "$iac {xth_te_save_file 0 $cfid}"
  bind $cfr.txt  "xth_te_before_close_file $cfid yesno"  
#  if {$xth(gui,bindclip) == 1} {
    bind $cfr.txt <$xth(kb_control)-Key-x> "$iac {tk_textCut $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-c> "$iac {tk_textCopy $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-v> "$iac {tk_textPaste $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-z> "$iac {catch {$cfr.txt edit undo}}"
    bind $cfr.txt <$xth(kb_control)-Key-y> "$iac {catch {$cfr.txt edit redo}}"
  if {$xth(gui,bindinsdel)} {
    bind $cfr.txt  {
      %W delete insert
      %W see insert
    }
    bind $cfr.txt  "$iac {tk_textCut $cfr.txt}"
    bind $cfr.txt <$xth(kb_control)-Key-Insert> "$iac {tk_textCopy $cfr.txt}"
    bind $cfr.txt  "$iac {tk_textPaste $cfr.txt}"
#    catch {
#      bind $cfr.txt  "$iac {tk_textCut $cfr.txt}"
#      bind $cfr.txt <$xth(kb_control)-Key-KP_Insert> "$iac {tk_textCopy $cfr.txt}"
#      bind $cfr.txt  "$iac {tk_textPaste $cfr.txt}"
#    }
  }
#  }
    
  grid columnconf $cfr 0 -weight 1
  grid rowconf $cfr 0 -weight 1
  grid $cfr.txt -column 0 -row 0 -sticky news
  grid $cfr.sv -column 1 -row 0 -sticky news
  grid $cfr.sh -column 0 -row 1 -sticky news
  
  
  # add file to list and listbox
  set xth(te,flist) [linsert $xth(te,flist) end $cfid]
  $xth(ctrl,te,files).fl.flbox insert end "[llength $xth(te,flist)]. $xth(te,$cfid,name) ($xth(te,$cfid,path))"
  
  xth_te_show_file [expr [llength $xth(te,flist)] - 1]

}


# xth_te_read_file --
#
# return list containing
# {success name encoding text}

proc xth_te_read_file {pth} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set encspc 0
  set flnn 0
  set success 1
  set txt ""
  if {[catch {set fid [open $pth r]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm $curenc $txt]
  }
  fconfigure $fid -encoding $curenc
  while {[eof $fid] != 1} {
    gets $fid fln
    if {$flnn == 0} {
        if {[scan [string index $fln 0] %c] == 65279} {
            set fln [string range $fln 1 end]
        }
    }
    # replace tabs
    regsub -all {\t} $fln "  " fln
    incr flnn
    if {[regexp {^\s*encoding\s+(\S+)\s*$} $fln encln enc]} {
      if {$encspc} {
        set success 0
        set nm "$pth \[$flnn\] -- multiple encoding commands in file"
        break
      }
      set encspc 1
      set rxp "\\s+($enc)\\s+"
      set validenc [regexp -nocase $rxp $xth(encodings) dum curenc]
      if {$validenc == 0} {
        set success 0
        set nm "$pth \[$flnn\] -- unknown encoding -- $enc"
        break
      }
      fconfigure $fid -encoding $curenc
    } else {
#      if {$encspc == 0} {
#        if {[regexp {^\s*[^\#]+} $fln]} {
#          set success 0
#          set nm "$pth \[$flnn\] -- encoding command expected"
#          break
#        }
#      }
      append txt "$fln\n"
    }
  }
  close $fid
  return [list $success $nm $curenc $txt]
  
}  


# xth_te_write_file --
#
# return list containing
# {success name}

proc xth_te_write_file {pth enc txt} {

  global errorInfo xth

  set curenc utf-8
  set nm [file tail $pth]
  set success 1
  if {[catch {set fid [open $pth w]}]} {
    set success 0
    set nm $errorInfo
    return [list $success $nm]
  }
  
  fconfigure $fid -encoding $curenc -translation {auto auto}
  if {![string equal $xth(prj,name) svxedit]} {
    puts $fid "encoding  $enc"
  }
  fconfigure $fid -encoding $enc -translation {auto auto}
  puts -nonewline $fid $txt
  close $fid
  return [list $success $nm]
  
}


proc xth_te_destroy_file {} {

  global xth

  if {$xth(te,fcurr) >= 0} {
  

    # delete file from list and listbox and destroy windows
    set tempcurr $xth(te,fcurr)
    set cfid [lindex $xth(te,flist) $tempcurr]
    pack forget $xth(te,$cfid,frame)
    set xth(te,flist) [lreplace $xth(te,flist) $xth(te,fcurr) $xth(te,fcurr)]
    $xth(ctrl,te,files).fl.flbox delete $tempcurr    
    set xth(te,fcurr) -1

    # set other window to be active
    xth_te_show_file $tempcurr
    
    # destroy variable
    unset xth(te,$cfid,name)
    unset xth(te,$cfid,path)
    unset xth(te,$cfid,newf)
    unset xth(te,$cfid,encoding)
    unset xth(te,$cfid,frame)
    unset xth(te,$cfid,otext)
  }  
  
}


proc xth_te_open_file {dialogid fname fline} {

  global xth
  
  if {$dialogid} {
    set fname [tk_getOpenFile -filetypes $xth(app,te,filetypes) \
      -parent $xth(gui,main) \
      -initialdir $xth(gui,initdir) ]
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # now let's open file fname
  
  # check if not open exists
  for {set fid 0} {$fid < [llength $xth(te,flist)]} {incr fid} {
    if {[string equal $fname $xth(te,[lindex $xth(te,flist) $fid],path)]} {
      xth_te_show_file $fid
      return 1
    }
  }
  
  # read the file
  xth_status_bar_push te
  xth_status_bar_status te [format [mc "Opening %s ..."] $fname]
  
  set fdata [xth_te_read_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  # show the file
  xth_te_create_file
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  set xth(te,$cfid,name) [lindex $fdata 1]
  set xth(te,$cfid,path) $fname
  set xth(te,$cfid,newf) 0
  set xth(te,$cfid,mtime) [file mtime $fname]
  set xth(te,$cfid,encoding) [lindex $fdata 2]
  $xth(ctrl,te,files).ef.cel configure -text [lindex $fdata 2]
  regsub -all {\s*$} [lindex $fdata 3] "" ftext
  xth_te_insert_text $xth(te,$cfid,frame).txt "$ftext\n"
  catch {
    $xth(te,$cfid,frame).txt edit reset
  }
  set xth(te,$cfid,otext) [$xth(te,$cfid,frame).txt get 1.0 end]
  xth_te_show_file $xth(te,fcurr)
  if {$fline > 0} { 
      $xth(te,$cfid,frame).txt mark set insert "$fline.0"
  } else {
      $xth(te,$cfid,frame).txt mark set insert "1.0"
  }
  $xth(te,$cfid,frame).txt see insert
  if {$fline > 0} {
    $xth(te,$cfid,frame).txt tag remove sel 1.0 end
    $xth(te,$cfid,frame).txt tag add sel "$fline.0" "$fline.0 lineend"
  }
  
  xth_status_bar_pop te
  return 1
}


proc xth_te_before_close_file {cfid btns} {
  global xth
  if {
      [catch {winfo exists $xth(te,$cfid,frame).txt}] 
      || (![winfo exists $xth(te,$cfid,frame).txt])} {
    return 1
  }
  set ftext [$xth(te,$cfid,frame).txt get 1.0 end]
  if {[string compare $xth(te,$cfid,otext) $ftext] != 0} {    
    set wtd [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon question -type $btns\
      -message [format [mc "File %s is not saved. Save it now?"] $xth(te,$cfid,path)]\
      -font $xth(gui,lfont)]
    switch $wtd {
      0 {
        if {[xth_te_save_file 0 $cfid] == 0} {
          return 0
        }
      }
      1 {}
      default {return 0}
    }
  }
  return 1
}

proc xth_te_close_file {} {

  global xth
  
  if {$xth(te,fcurr) < 0} {
    return
  }
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  if {[xth_te_before_close_file $cfid yesnocancel]} {
    xth_te_destroy_file
    return 1
  } else {
    return 0
  }
  
}

proc xth_te_save_file {dialogid cfid} {

  global xth
  
  if {[llength $xth(te,flist)] == 0} {
    return 0
  }

  set fid [lsearch -exact $xth(te,flist) $cfid]
  if {$fid == -1} {
    return 0
  }
  
  set cfid [lindex $xth(te,flist) $fid]
  
  # let's check if we need to save
  set ftext [$xth(te,$cfid,frame).txt get 1.0 end]
  if {! $dialogid} {
    if {[string compare $xth(te,$cfid,otext) $ftext] == 0} {
        return 1
    }
  }
  
  xth_status_bar_push te
  
  if {$xth(te,$cfid,newf)} {
    set dialogid 1
  }

  set fname $xth(te,$cfid,path)
  set ofname $fname
  if {$dialogid} {
    set fname [tk_getSaveFile -filetypes $xth(app,te,filetypes) \
      -parent $xth(gui,main) \
      -initialfile [file tail $fname] -initialdir [xth_getdir $fname] \
      -defaultextension $xth(app,te,fileext)]
  }
  
  if {($xth(te,$cfid,mtime) > 0) && [file exists $fname] && \
    ([file mtime $fname] > $xth(te,$cfid,mtime))} {
    set forcesave [MessageDlg $xth(gui,message) -parent $xth(gui,main) \
      -icon warning -type yesno -default 1 \
      -message [format [mc "File %s was modified outside xtherion. Save it anyway?"] $fname]\
      -font $xth(gui,lfont)]
    if {$forcesave != 0} {
      return 0
    }
  }
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # save the file
  xth_status_bar_status te [format [mc "Saving %s ..."] $fname]
  set fdata [xth_te_write_file $fname $xth(te,$cfid,encoding) $ftext]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  set xth(te,$cfid,mtime) [file mtime $fname]
  set xth(te,$cfid,otext) $ftext
  set xth(te,$cfid,newf) 0
  
  # if SaveAs, then redisplay the file
  if {$dialogid} {
    if {[string compare $ofname $fname] != 0} {
      set xth(te,$cfid,name) [lindex $fdata 1]
      set xth(te,$cfid,path) $fname
      xth_te_show_file $fid
    }
  }  

  after 250 {xth_status_bar_pop te}
  return 1
    
}

proc xth_te_save_all {} {

  global xth
  set ocur $xth(te,fcurr)
  foreach cfid $xth(te,flist) {
    xth_te_save_file 0 $cfid
  }
  xth_te_show_file $ocur
  
}


proc xth_te_update_position {W} {
  global xth
  regexp {(\d+)\.(\d+)} [$W index insert] dum lns pos
  $xth(gui,te).sf.pbar configure -text [format "%d.%d" [expr $lns + 1] $pos]
}


proc xth_te_text_select_all {txt} {
    $txt tag add sel 1.0 end
}


proc xth_te_select_all {} {
  global xth
  if {$xth(te,fcurr) > -1} {
    set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
    $xth(te,$cfid,frame).txt tag add sel 1.0 end
  }
}

proc xth_te_new_file {} {
  global xth
  xth_te_create_file 
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  xth_te_insert_text $xth(te,$cfid,frame).txt $xth(te,template)
}

$xth(te,menu,file) add command -label [mc "New"] -command xth_te_new_file \
  -font $xth(gui,lfont) -underline 0
$xth(te,menu,file) add command -label [mc "Open"] -underline 0 \
  -accelerator "$xth(gui,controlk)-o" \
  -font $xth(gui,lfont) -command {xth_te_open_file 1 {} 0}
$xth(te,menu,file) add command -label [mc "Save"] -underline 0 \
  -accelerator "$xth(gui,controlk)-s" -state disabled \
  -font $xth(gui,lfont) -command {
    if {$xth(te,fcurr) >= 0} {
      xth_te_save_file 0 [lindex $xth(te,flist) $xth(te,fcurr)]
    }
  }
$xth(te,menu,file) add command -label [mc "Save as"] -underline 5 \
  -font $xth(gui,lfont) -state disabled -command {
    if {$xth(te,fcurr) >= 0} {
      xth_te_save_file 1 [lindex $xth(te,flist) $xth(te,fcurr)]
    }
  }
$xth(te,menu,file) add command -label [mc "Save all"] -underline 6 \
  -font $xth(gui,lfont) -state disabled -command xth_te_save_all
$xth(te,menu,file) add checkbutton -label [mc "Auto save"] -underline 1 \
  -variable xth(gui,auto_save) -font $xth(gui,lfont) \
  -state disabled -command xth_app_autosave_schedule
$xth(te,menu,file) add command -state disabled -label [mc "Close"] -underline 0 \
  -accelerator "$xth(gui,controlk)-w" \
  -font $xth(gui,lfont) \
  -command "xth_te_close_file"

$xth(te,menu,file) add separator
$xth(te,menu,file) add command -state disabled -label [mc "Import"] -underline 0 \
  -font $xth(gui,lfont) \
  -command "xth_te_import_file"

$xth(te,menu,file) add separator
$xth(te,menu,file) add command -state disabled -label [mc "Next"] \
  -accelerator "$xth(gui,controlk)-n" \
  -font $xth(gui,lfont) -command "xth_te_switch_file 1" -underline 2
$xth(te,menu,file) add command -state disabled -label [mc "Previous"] \
  -accelerator "$xth(gui,controlk)-p" \
  -font $xth(gui,lfont) -command "xth_te_switch_file -1" -underline 0
  
set xth(te,menu,edit) $xth(te,menu).edit
menu $xth(te,menu,edit) -tearoff 0
$xth(te,menu) add cascade -label [mc "Edit"] -state disabled \
  -font $xth(gui,lfont) -menu $xth(te,menu,edit) -underline 0
if {$xth(gui,text_undo)} {
  $xth(te,menu,edit) add command -label [mc "Undo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-z" -command "xth_app_clipboard undo"
  $xth(te,menu,edit) add command -label [mc "Redo"] -font $xth(gui,lfont) \
    -accelerator "$xth(gui,controlk)-y" -command "xth_app_clipboard redo"
  $xth(te,menu,edit) add separator
}
$xth(te,menu,edit) add command -label [mc "Cut"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-x" -command "xth_app_clipboard cut"
$xth(te,menu,edit) add command -label [mc "Copy"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-c" -command "xth_app_clipboard copy"
$xth(te,menu,edit) add command -label [mc "Paste"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-v" -command "xth_app_clipboard paste"
$xth(te,menu,edit) add separator
$xth(te,menu,edit) add command -label [mc "Select all"] -font $xth(gui,lfont) \
  -accelerator "$xth(gui,controlk)-a" -command "xth_te_select_all"
$xth(te,menu,edit) add command -label [mc "Auto indent"] -font $xth(gui,lfont) \
  -command "xth_te_auto_indent" -accelerator "$xth(gui,controlk)-i"

proc xth_te_get_indent {w i cilc} {

  global xth
  set indls ""
  set cmdls ""
  set cmd0s ""
  set cmdl 0
  regexp {(\d+)\.} $i dum cln
  set line0 [$w get $cln.0 $cln.end]
  regexp {\S+} $line0 cmd0s
  if {[info exists xth(cmd,$cmd0s)]} {
    set cmd0 $xth(cmd,$cmd0s)
  } else {
    set cmd0 0
  }
  set sln [expr $cln - 1]
  set line1 [$w get $sln.0 $sln.end]
  set linel $line1
  set hasl 0
  set escan 0
  while {($sln > 1) && (! $hasl)} {
    incr sln -1
    if {[regexp {\S} $linel]} {
      set cline [$w get $sln.0 $sln.end]
      if {[regexp {\\\s*$} $cline]} {
        set linel $cline
      } else {
        set hasl 1
      }
    } else {
      set linel [$w get $sln.0 $sln.end]
    }
  }
  regexp {\S+} $linel cmdls
  if {[info exists xth(cmd,$cmdls)]} {
    set cmdl $xth(cmd,$cmdls)
    set endcmdls $xth(endcmd,$cmdls)
  } else {
    set cmdl 0
  }
  regexp {^\s+} $linel indls
  set indl [string length $indls]
  set bsl1 [regexp {\\\s*$} $line1]
  
  # preskenuje prikazy nad
  #puts "cilc |$cilc|\nindl |$indl|\ncmd0 |$cmd0|\ncmd0s |$cmd0s|\ncmdl |$cmdl|\ncmdls |$cmdls|\n"
  if {$cmdl == 1} {
#    puts "$cln. cilc |$cilc|"
    set cmdcomct 0
    set cmdcomctfi 1
    set enddetect 0
    set set_cmd_counts {
      regexp {\S+} $slns cmdcomx
#      puts "$cmdls ?? $cmdcomx"
      if {[string compare $endcmdls $cmdcomx] == 0} {
        set endscan 1
        set enddetect 1
      } elseif {[string compare $cmdls $cmdcomx] == 0} {
        if {! $cmdcomctfi} {
          if {$cmdcomct} {
            set endscan 1
          }
          incr cmdcomct
        } else {
          set cmdcomctfi 0
        }
      }
    }
    set sln [expr $cln - 1]
    set slns $line1
    set endscan 0
    while {($sln > 1) && (!$endscan)} {
      incr sln -1
      if {[regexp {\S} $slns]} {
        set clns [$w get $sln.0 $sln.end]
        if {[regexp {(.*)\\\s*$} $clns dum vlns]} {
          set slns "$vlns$slns"
        } else {
          eval $set_cmd_counts
          set slns $clns
        }
      } else {
        set slns [$w get $sln.0 $sln.end]
      }
    }
    if {!$enddetect} {
      eval $set_cmd_counts
    }
 #   puts $cmdcomct
    if {$cmdcomct > 0} {
      set cmdl 0
    }
  }
  # koniec scanovania
  
  if {$bsl1} {
    set ind [expr $indl + 2 * $xth(gui,etabsize)]
  } else {
    set ind $indl
    if {$cmdl > 0} {
      incr ind $xth(gui,etabsize)
    } 
    if {$cilc && ($cmd0 < 0)} {
      incr ind -$xth(gui,etabsize)
    } 
  }
  
  if {$ind > 0} {
    return [format %$ind\s " "]
  } else {
    return ""
  }
}

proc xth_te_auto_indent {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  set W $xth(te,$cfid,frame).txt
  set rngs [$W tag ranges sel]
  set fln 1
  set tln -1
  regexp {(\d+)\.} [lindex $rngs 0] dum fln
  regexp {(\d+)\.} [lindex $rngs 1] dum tln
  xth_status_bar_push te
  for {set cln $fln} {$cln < $tln} {incr cln} {
    xth_status_bar_status te [format [mc "Processing line %s ..."] $cln]
    $W see $cln.0
    set spcs ""
    regexp {^\s+} [$W get $cln.0 $cln.end] spcs
    set spcsc [string length $spcs]
    set indct [string length [xth_te_get_indent $W $cln.0 1]]
    if {$spcsc == $indct} {
    } elseif {$spcsc > $indct} {
      $W delete $cln.0 $cln.[expr $spcsc - $indct]
    } elseif {$spcsc < $indct} {
      $W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
    }
  }
  $W see insert
  # $W tag remove sel 1.0 end
  xth_status_bar_pop te
}


proc xth_te_text_auto_indent {W} {

  set rngs [$W tag ranges sel]
  set fln 1
  set tln -1
  regexp {(\d+)\.} [lindex $rngs 0] dum fln
  regexp {(\d+)\.} [lindex $rngs 1] dum tln
  for {set cln $fln} {$cln < $tln} {incr cln} {
    $W see $cln.0
    set spcs ""
    regexp {^\s+} [$W get $cln.0 $cln.end] spcs
    set spcsc [string length $spcs]
    set indct [string length [xth_te_get_indent $W $cln.0 1]]
    if {$spcsc == $indct} {
    } elseif {$spcsc > $indct} {
      $W delete $cln.0 $cln.[expr $spcsc - $indct]
    } elseif {$spcsc < $indct} {
      $W insert $cln.0 [format \x25[expr $indct - $spcsc]s " "]
    }
  }
  $W see insert
  
}







xth_ctrl_minimize te sr
xth_status_bar_status te [mc "Text editor is not active. To activate it, open existing file or create new one."]
therion-5.4.1/xtherion/te_import.tcl000066400000000000000000000062551307545355600175640ustar00rootroot00000000000000proc xth_te_import_file {} {

  global xth
  
  set fname [tk_getOpenFile -filetypes {{{PocketTopo therion export} {.txt}} {{All files} {*}}} \
    -parent $xth(gui,main) \
    -initialdir $xth(gui,initdir) -defaultextension .txt]
  
  if {[string length $fname] == 0} {
    return 0
  } else {
    set xth(gui,initdir) [file dirname $fname]
  }
  
  # read the file
  xth_status_bar_push te
  xth_status_bar_status te [format [mc "Importing %s ..."] $fname]
  
  set fdata [xth_te_read_file $fname]
  if {[lindex $fdata 0] == 0} {
      MessageDlg $xth(gui,message) -parent $xth(gui,main) \
        -icon error -type ok \
        -message [lindex $fdata 1] \
        -font $xth(gui,lfont)
      xth_status_bar_pop te
      return 0
  }
  
  # show the file
  set cfid [lindex $xth(te,flist) $xth(te,fcurr)]
  catch {
    $xth(te,$cfid,frame).txt edit separator
  }
  xth_te_insert_text $xth(te,$cfid,frame).txt "[xth_te_read_ptopo $fname]\n"
  $xth(te,$cfid,frame).txt see insert

  xth_status_bar_pop te
  return 1
}






proc xth_te_read_ptopo {fname} {
  set fid [open $fname r]
  set ccline {}
  set cclines {}
  set csection {NULL}
  set indata 0
  set cdirec 0
  while {![eof $fid]} {
    gets $fid ln
    ##append ccline "### $csection: $ln\n"
    if {[string equal $ln FIX] || [string equal $ln TRIP] || [string equal $ln PLAN] || [string equal $ln ELEVATION]} {
      if {[string length $ccline] > 0} {
        lappend cclines $ccline
        set ccline {}
        set indata 0
        set cdirec 0
      }
      set csection $ln
    }
    if {[llength $ln] > 0} {
      switch $csection {
        FIX {
          if {[llength $ln] == 4} {
            append ccline "  fix [lindex $ln 0] [lindex $ln 1] [lindex $ln 2] [lindex $ln 3]\n"
          }
        }
        TRIP {
          if {$indata} {
            # check direction
            if {[string equal [lindex $ln end] "<"]} {
              if {$cdirec >= 0} {
                append ccline "  extend left\n"
                set cdirec -1
              }
            } elseif {[string equal [lindex $ln end] ">"]} {
              if {$cdirec <= 0} {
                append ccline "  extend right\n"
                set cdirec 1
              }
            }
            if {[llength $ln] == 5} {
              append ccline "  [lindex $ln 0] - [lindex $ln 1] [lindex $ln 2] [lindex $ln 3]\n"
            } elseif {[llength $ln] == 6} {
              append ccline "  [lindex $ln 0] [lindex $ln 1] [lindex $ln 2] [lindex $ln 3] [lindex $ln 4]\n"
            }
          } else {
            append $ccline "# --[lindex $ln 0]--"
            switch [lindex $ln 0] {
              DATE {
                set xd [lindex $ln 1]
                regsub -all {\-} $xd {.} xd
                append ccline "  date $xd\n"
              }
              DECLINATION {
              }
              DATA {
                append ccline "  data normal from to compass clino tape\n"
                set indata 1
              }
            }
          }
        }
      }
    }
  }
  if {[string length $ccline] > 0} {
    lappend cclines $ccline
  }
  close $fid
  set txt {}
  foreach cln $cclines {
    append txt "centreline\n$cln"
    append txt "endcentreline\n\n"
  }
  return $txt
}


therion-5.4.1/xtherion/te_sdata.tcl000066400000000000000000000403121307545355600173360ustar00rootroot00000000000000proc xth_te_sdata_scan {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return [list [expr 2 * $xth(gui,etabsize)] {from to compass clino tape}]
  }
  
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt  

  # let's find the index
  set seli [$w tag ranges sel]
  if {[llength $seli] > 0} {
    set i [lindex $seli 0]
  } else {
    set i [$w index insert]
  }
  
  regexp {(\d+)\.} $i dum cln
  incr cln
  set i [$w index $cln.0]
  regexp {(\d+)\.} $i dum cln
    
  set dind [format \x25[expr 2 * $xth(gui,etabsize)]s " "]
  set dqts {from to compass clino tape}
  set scan_data {
    if {[regexp {(\s*)data\s+\w+\s+(.*)} $slns dum dind dqts]} {
      regexp {^([^\#]+)} $dqts dum dqts
      set endscan 1
    }
  }
  set sln $cln
  set slns ""
  set endscan 0
  while {($sln > 1) && (!$endscan)} {
    incr sln -1
    if {[regexp {\S} $slns]} {
      set clns [$w get $sln.0 $sln.end]
      if {[regexp {(.*)\\\s*$} $clns dum vlns]} {
        set slns "$vlns$slns"
      } else {
        eval $scan_data
        set slns $clns
      }
    } else {
      set slns [$w get $sln.0 $sln.end]
    }
  }
  if {!$endscan} {
    eval $scan_data
  }
  
  return [list [string length $dind] $dqts]     
}


proc xth_te_sdata_buid {qts indc} {

  global xth
  set cf $xth(ctrl,te,sdata).sdf
  catch {destroy $cf}
  frame $cf 
  grid $cf -in $xth(ctrl,te,sdata) -column 0 -row 1 -sticky nsew
  grid columnconf $cf 0 -weight 0
  grid columnconf $cf 1 -weight 1
  grid columnconf $cf 2 -weight 0

  set nent 0
  set invd 0
  set sent 0
  set grow 0
  foreach qtt $qts {
    switch $qtt {
      newline {
        if {(!$invd) && ($nent > 0)} {
          frame $cf.nlf
          grid columnconf $cf.nlf 0 -weight 1
          grid columnconf $cf.nlf 1 -weight 1
          Button $cf.nlf.s$grow -text "Start series" -font $xth(gui,lfont)
          Button $cf.nlf.b$grow -text "Break series" -font $xth(gui,lfont)
          grid $cf.nlf.s$grow -column 0 -row 0 -sticky news
          grid $cf.nlf.b$grow -column 1 -row 0 -sticky news
          grid $cf.nlf -in $cf -column 0 -columnspan 3 -row $grow \
            -sticky news
          set xth(te,sdata,invd,ssb) $cf.nlf.s$grow
          set xth(te,sdata,invd,bsb) $cf.nlf.b$grow
          set xth(te,sdata,invd,ent) $nent
          set invd 1
          incr grow
        }
      }
      default {
        # zistime typ
        if {[info exists xth(datafmt,$qtt,format)]} {
          set tqtt $qtt
        } else {
          set tqtt "unknown"
        }
        set xth(te,sdata,$nent,qtt) $tqtt
        set xth(te,sdata,$nent,format) $xth(datafmt,$tqtt,format)
        set xth(te,sdata,$nent,cvalue) ""
        set xth(te,sdata,$nent,special) $xth(datafmt,$tqtt,special)
        set xth(te,sdata,$nent,de) $cf.de$grow
        set xth(te,sdata,$nent,fe) $cf.fe$grow
        set xth(te,sdata,$nent,nextde) $cf.de$grow
        set xth(te,sdata,$nent,nextvde) $cf.de$grow
        Label $cf.l$grow -text $qtt -anchor e -font $xth(gui,lfont)
        Entry $cf.de$grow -font $xth(gui,lfont) \
          -textvariable xth(te,sdata,$nent,cvalue)
        Entry $cf.fe$grow -font $xth(gui,lfont) -width 6 \
          -textvariable xth(te,sdata,$nent,format)
        bind $cf.de$grow <> "focus $cf.de$grow; $cf.de$grow icursor 0; $cf.de$grow selection range 0 end"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextde) <> -when tail"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextvde) <> -when tail"
        bind $cf.de$grow  "event generate \$xth(te,sdata,$nent,nextvde) <> -when tail"
        grid $cf.l$grow -in $cf -column 0 -row $grow -sticky news
        grid $cf.de$grow -in $cf  -column 1 -row $grow -sticky news
        grid $cf.fe$grow -in $cf  -column 2 -row $grow -sticky news
        incr grow
        incr nent
      }
    }
  }
  
  set xth(te,sdata,nent) $nent
  set xth(te,sdata,indc) $indc
  set xth(te,sdata,invd) $invd
  
  xth_te_sdata_bind
}


proc xth_te_sdata_incr_station {ss} {
  return [xth_incr_station_name $ss 1]
}

proc xth_te_sdata_incr {} {

  global xth
  if {$xth(te,sdata,incr,station) != -1} {
    set xth(te,sdata,$xth(te,sdata,incr,station),cvalue) \
      [xth_te_sdata_incr_station \
      $xth(te,sdata,$xth(te,sdata,incr,station),cvalue)]
  } else {
    if {$xth(te,sdata,incr,from) != -1} {
      if {$xth(te,sdata,incr,to) != -1} {
        set xth(te,sdata,$xth(te,sdata,incr,from),cvalue) \
            $xth(te,sdata,$xth(te,sdata,incr,to),cvalue)
      }
    }
    if {$xth(te,sdata,incr,to) != -1} {
      set xth(te,sdata,$xth(te,sdata,incr,to),cvalue) \
        [xth_te_sdata_incr_station \
        $xth(te,sdata,$xth(te,sdata,incr,to),cvalue)]
    }    
  }
  
}


proc xth_te_sdata_cspc {itm} {
  if {[regexp {^\s*[^\"\[]\S*\s+\S+} $itm]} {
    #"
    set itm "\[$itm\]"
  }
  return $itm
}


proc xth_te_sdata_bind {} {

  global xth

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }

  set xth(te,sdata,incr,station) -1
  set xth(te,sdata,incr,from) -1
  set xth(te,sdata,incr,to) -1
  for {set i 0} {$i < $xth(te,sdata,nent)} {incr i} {
    if {$i != [expr $xth(te,sdata,nent) - 1]} {
      set xth(te,sdata,$i,nextde) $xth(te,sdata,[expr $i + 1],de)
      set xth(te,sdata,$i,nextvde) $xth(te,sdata,[expr $i + 1],de)
    } else {
      set xth(te,sdata,$i,nextde) $xth(te,sdata,0,de)
      set xth(te,sdata,$i,nextvde) $xth(te,sdata,0,de)
    }
    set sx [lsearch {from to station} $xth(te,sdata,$i,qtt)]
    if {$sx != -1} {
      set xth(te,sdata,incr,[lindex {from to station} $sx]) $i
    }
  }
  
  if {! $xth(te,sdata,es)} {
    for {set i 0} {$i < $xth(te,sdata,nent)} {incr i} {
      if {[lsearch {station from to} $xth(te,sdata,$i,qtt)] == -1} {
        for {set j 1} {$j < $xth(te,sdata,nent)} {incr j} {
          set jj [expr ($i + $j) % $xth(te,sdata,nent)]
          if {[lsearch {station from to} $xth(te,sdata,$jj,qtt)] == -1} {
            set xth(te,sdata,$i,nextvde) $xth(te,sdata,$jj,de)
            set j $xth(te,sdata,nent)
          }
        }
      }
    }  
  }
  
  # now let's bind enter keys
  if {$xth(te,sdata,invd)} {
    set wtw1 ""
    set wtw2 ""
    set clw ""
    for {set iet 0} {$iet < $xth(te,sdata,nent)} {incr iet} {
      if {$iet < $xth(te,sdata,invd,ent)} {
        append wtw1 " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      } else {
        append wtw2 " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      }
      if {[lsearch {from to station} $xth(te,sdata,$iet,qtt)] == -1} {
        append clw "set xth(te,sdata,$iet,cvalue) \"\"\n"
      }
    }
    set enter_cmd "xth_te_sdata_insert \"$wtw2\" 2 insert\nxth_te_sdata_insert \"$wtw1\" 1 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd

    set enter_cmd "xth_te_sdata_insert \"$wtw1\" 1 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    $xth(te,sdata,invd,ssb) configure -command $enter_cmd

    set enter_cmd "xth_te_sdata_insert \"break\" 3 insert\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,0,de) <> -when tail"
    $xth(te,sdata,invd,bsb) configure -command $enter_cmd
    
  } else {
    set wtw ""
    set clw ""
    for {set iet 0} {$iet < $xth(te,sdata,nent)} {incr iet} {
      append wtw " \[xth_te_sdata_cspc \$xth(te,sdata,$iet,cvalue)\]"
      if {[lsearch {from to station} $xth(te,sdata,$iet,qtt)] == -1} {
        append clw "set xth(te,sdata,$iet,cvalue) \"\"\n"
      }
    }
    set enter_cmd "xth_te_sdata_insert \"$wtw\" 0 insert\nxth_te_sdata_incr\n$clw"
    append enter_cmd "event generate \$xth(te,sdata,[expr $xth(te,sdata,nent) - 1],nextvde) <> -when tail"
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
    bind $xth(te,sdata,[expr $xth(te,sdata,nent) - 1],de)  $enter_cmd
  }  
}


$xth(ctrl,te,sdata).sfb configure -command {
  set dil [xth_te_sdata_scan]
  xth_te_sdata_buid [lindex $dil 1] [lindex $dil 0] 
}


$xth(ctrl,te,sdata).sfs configure -command xth_te_sdata_bind


proc xth_te_sdata_insert {data invd iidx} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }

  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  set xth(me,sdata,err_notenought) 0

  set err 0
#  if {$xth(gui,etabsize) > 0} {
#    set tabspc [format \x25$xth(gui,etabsize)s " "]
#  } else {
    set tabspc " "
#  }
  set sent 0
  set eent $xth(te,sdata,nent)
  switch $invd {
    1 {
      set eent $xth(te,sdata,invd,ent)
    }
    2 {
      set sent $xth(te,sdata,invd,ent)
    }
  }
  
  set txt ""
  set fst ""
  set iet $sent
  set tmp $data
  set ldata {}
  while {[string length $tmp] > 0} {
    if {[regexp {\S+} $tmp itm]} {
      lappend ldata $itm
    }
    regsub {\s*\S*\s*} $tmp {} tmp
  }
  if {([llength $ldata] < $eent) && (!$xth(te,sdata,invd))} {
    set xth(me,sdata,err_notenought) 1
  }
  foreach itm $ldata {
    set postwrt 0
    set tobreak 0
    if {$iet < $eent} {
      if {[lsearch -exact $xth(te,sdata,$iet,special) $itm] != -1} {
        set postwrt 1
      } else {
        set curfmt $xth(te,sdata,$iet,format)
        set extfmt 0
        if {[regsub {fx(\s*)$} $curfmt {f\1} curfmt]} {
          set extfmt 1
        }
#        puts "$itm -> $fst\x25$curfmt"
        if {[catch {append txt [format "$fst\x25$curfmt" $itm]}]} {
          set postwrt 1
#          puts "error"
          set err 1
        } elseif {$extfmt == 1} {
          if {[regexp {\.?0+\s*$} $txt txtextend]} {
            set teel [string length $txtextend]
            regsub {\.?0+\s*$} $txt [format \x25[expr $teel]s " "] txt
          }
        }
      }
    } else {
      # ak je dlhsie, uz neformatuj
#      puts $data
      set unfdata $data
      for {set ufi 0} {$ufi < $eent} {incr ufi} {
        regsub {^\s*\S+\s*} $unfdata "" unfdata
      }
      append txt $fst $unfdata
      # append txt [format $fst\x25$xth(datafmt,unknown,format) $itm]
      # set err 1
      set tobreak 1
    }
    
      
    if {$postwrt == 1} {
      if {[regexp {(\d+)\.?(\d*)} $xth(te,sdata,$iet,format) dum nfln nzadc]} {
        set nitm $itm
        if {[string length nzadc] > 0} {
          append nitm [format \x25[expr $nzadc + 1]s " "]
        }
        append txt [format $fst\x25[expr $nfln]s $nitm]
      } else {
        append txt [format $fst\x25$xth(datafmt,unknown,format) $itm]
      }
    }
    
    set fst $tabspc  
    incr iet
    if {$tobreak} {
      break
    }
  }
  
  set cind $xth(te,sdata,indc)
  if {($invd == 2) && (!$err)} {
    if {[regexp {\d+} $xth(te,sdata,0,format) plusindc]} {
      incr cind [expr $plusindc + 1]
    } else {
      incr cind [expr 2 * $xth(gui,etabsize)]
    }
  }
  
  if {($invd == 3) || $err} {
    set txt $data
    regsub {^\s+} $txt "" txt
    regsub {\s+$} $txt "" txt
  }
  
  if {$cind > 0} {
    set txt [format \x25[expr $cind + [string length $txt]]s $txt]  
  }
  
  if {[string compare $iidx insert] == 0} {
    xth_te_insert_text $w "\n$txt"
  } else {
    $w insert $iidx $txt
  }
  catch {
    $w edit separator
  }
  return $err
  
}


proc xth_te_sdata_auto_format {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }

  if {! [info exists xth(te,sdata,nent)]} {
    return
  } elseif {$xth(te,sdata,nent) < 1} {
    return
  }
  
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  set s [$w tag ranges sel]
  if {[llength $s] < 2} {
    return
  }
  
  set eline -1
  set sline 0
  regexp {(\d+)\.} [lindex $s 0] dum sline 
  regexp {(\d+)\.} [lindex $s 1] dum eline 
  # $w tag remove sel 1.0 end
  set ict 1
  for {set cline $sline} {$cline <= $eline} {incr cline} {
    set txt [$w get $cline.0 $cline.end]
    if {[regexp {\S+} $txt]} {
      set orig [$w get $cline.0 $cline.end]
      $w delete $cline.0 $cline.end
      if {$xth(te,sdata,invd)} {
        set formatres [xth_te_sdata_insert $txt $ict $cline.0]
        if {$formatres == 0} {
          if {$ict == 1} {
            set ict 2
          } else {
            set ict 1
          }
        } else {
          if {[regexp {^\s*break\s*$} $txt]} {
            set xth(me,sdata,err_notenought) 0
            set ict 1
          }
        }
      } else {
        set formatres [xth_te_sdata_insert $txt 0 $cline.0]
      }
      # an error occured
      if {$formatres || $xth(me,sdata,err_notenought)} {
#        puts "inserting >>$orig<<"
        $w delete $cline.0 $cline.end
        $w insert $cline.0 $orig
      }
    }
  }
  $w see insert
}


proc te_sr_reset {} {

  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt

  set has_sel 0  
  if {$xth(ctrl,te,sr,selection_io)} {
    set seli [$w tag ranges sel]
    if {[llength $seli] > 0} {
      set xth(ctrl,te,sr,selection_start) [lindex $seli 0]
      set xth(ctrl,te,sr,selection_end) [lindex $seli 1]
      set xth(ctrl,te,sr,search_end) [lindex $seli 1]
      $w mark set insert [lindex $seli 0]
      set has_sel 1
    } else {
      set xth(ctrl,te,sr,selection_io) 0
      update idletasks
    }
  }
  
  if {!$has_sel} {
    set xth(ctrl,te,sr,selection_start) {}
    set xth(ctrl,te,sr,selection_end) {}
    set xth(ctrl,te,sr,search_end) end
    $w mark set insert 1.0
  }
  
}


proc te_sr_first {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  te_sr_clear  
  te_sr_reset
  if {![te_sr_next_next]} {
    bell
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_next_next {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt

  # prehlada text od pozicie kurzora po koniec (vyberu)
  # najde text - (zameni ho) - vyznaci ho a kurzor nastavi za neho
  
  set cnt 0
  set fndcmd "set fnd \[$w search -count cnt"
  if {!$xth(ctrl,te,sr,case_io)} {
    append fndcmd " -nocase"
  }
  if {$xth(ctrl,te,sr,regular_io)} {
    append fndcmd " -regexp"
  }
  append fndcmd { $xth(ctrl,te,sr,search) insert $xth(ctrl,te,sr,search_end)]}
  eval $fndcmd
  
  if {[string length $fnd] > 0} {
    $w mark set insert "$fnd + $cnt chars"
    $w mark set xthsrend "$fnd + $cnt chars"
    # do replace if necessary
    if {$xth(ctrl,te,sr,replace_io)} {
      set ostr [$w get $fnd xthsrend]
      $w delete $fnd xthsrend
      #puts "<<$ostr"
      set nstr $xth(ctrl,te,sr,replace)
      if {$xth(ctrl,te,sr,regular_io)} {
        set repcmd {regsub}
        if {!$xth(ctrl,te,sr,case_io)} {
          append repcmd " -nocase"
        }
        append repcmd { $xth(ctrl,te,sr,search) $ostr $xth(ctrl,te,sr,replace) nstr}
        eval $repcmd
      }
      #puts ">>$nstr"
      $w insert $fnd $nstr
    }
    $w tag add xthsr $fnd xthsrend
    $w tag configure xthsr -background $xth(gui,escolorbg) -foreground $xth(gui,escolorfg)
    $w see insert
    return 1
  } else {
    # uz sme nic nenasli
    return 0
  }  

}

proc te_sr_next {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  if {![te_sr_next_next]} {
    bell
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_all {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  if {[string length $xth(ctrl,te,sr,search)] == 0} {
    return
  }
  catch {
    $w edit separator
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  te_sr_clear  
  te_sr_reset
  if {![te_sr_next_next]} {
    bell
  } else {
    while {[te_sr_next_next]} {}
  }
  catch {
    $w edit separator
  }
  focus $w
}

proc te_sr_clear {} {
  global xth
  if {$xth(te,fcurr) < 0} {
    return
  }
  set w $xth(te,[lindex $xth(te,flist) $xth(te,fcurr)],frame).txt
  $w tag remove xthsr 1.0 end
  focus $w
}


therion-5.4.1/xtherion/te_sdata2.tcl000066400000000000000000000002521307545355600174170ustar00rootroot00000000000000$xth(ctrl,te,sdata).taf configure -command xth_te_sdata_auto_format
xth_te_sdata_buid {from to tape compass clino} [expr 2 * $xth(gui,etabsize)] 
xth_te_sdata_disable ""
therion-5.4.1/xtherion/tools.tcl000066400000000000000000000246351307545355600167240ustar00rootroot00000000000000# - dzach add toolbar
set xth(tb,me,action) 0
set xth(gui,tb) $xth(gui,main).tb
set allapps {te me cp}

option add *tb*relief flat
option add *tb*overRelief groove
option add *tb*padx 0
option add *tb*indicatorOn off
option add *tb*offRelief flat
option add *tb*Button.width 20
option add *tb*Button.height 20
option add *tb*Radiobutton.width 18
option add *tb*Radiobutton.height 18

option add *edif*relief flat
option add *edif*overRelief groove
option add *edif*padx 0
option add *edif*indicatorOn off
option add *edif*offRelief flat
option add *edif*Button.width 20
option add *edif*Button.height 20
option add *edif*Radiobutton.width 18
option add *edif*Radiobutton.height 18

option add *movf*relief flat
option add *movf*overRelief groove
option add *movf*padx 0
option add *movf*indicatorOn off
option add *movf*offRelief flat
option add *movf*Button.width 20
option add *movf*Button.height 20

frame $xth(gui,tb) -relief raised -bd 1 -padx 5
pack $xth(gui,tb) -side top -anchor nw -fill x
frame $xth(gui,tb).filf

button $xth(gui,tb).newb -image {new_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					xth_te_new_file
				}
				me {
					xth_me_create_file
				}
				cp {
					xth_cp_new_file
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).newb [mc "New file"]



button $xth(gui,tb).openb -image {open_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					xth_te_open_file 1 {} 0
				}
				me {
					xth_me_open_file 1 {} 1
				}
				cp {
					xth_cp_open_file {}
				}
			}
		}
xth_status_bar $allapps $xth(gui,tb).openb [mc "Open file"]

button $xth(gui,tb).saveb -image {save_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					if {$xth(te,fcurr) >= 0} {
					  xth_te_save_file 0 [lindex $xth(te,flist) $xth(te,fcurr)]
					}
				}
				me {
					xth_me_save_file 0
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).saveb [mc "Save file"]
    
button $xth(gui,tb).savasb -image {saveas_img} \
		-command {
			switch -- $xth(app,active) {
				te {
					if {$xth(te,fcurr) >= 0} {
					  xth_te_save_file 1 [lindex $xth(te,flist) $xth(te,fcurr)]
					}
				}
				me {
					xth_me_save_file 1
				}
				cp {
					xth_cp_save_as
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).savasb [mc "Save file as"]

button $xth(gui,tb).closeb -image {close_img} \
 	-command {
			switch -- $xth(app,active) {
				te {
					xth_te_close_file
				}
				me {
					xth_me_close_file
				}
				cp {
					xth_cp_close_file
				}
			}
		}
xth_status_bar {te me cp} $xth(gui,tb).closeb [mc "Close file"]

label $xth(gui,tb).sp01 -relief groove -width 0 -padx 0 -pady 0 -bd 1




frame $xth(gui,tb).unredof

button $xth(gui,tb).undob -image {undo_img} -state disabled \
    -command {
      switch -- $xth(app,active) {
        me {
          xth_me_unredo_undo
        }
        default {
          xth_app_clipboard redo                    
        }
      }
    }
xth_status_bar $allapps $xth(gui,tb).undob [mc "Undo"]



button $xth(gui,tb).redob -image {redo_img} -state disabled \
    -command {
      switch -- $xth(app,active) {
        me {
          xth_me_unredo_redo
        }
        default {
          xth_app_clipboard redo                    
        }
      }
    }
xth_status_bar $allapps $xth(gui,tb).redob [mc "Redo"]

label $xth(gui,tb).sp01x -relief groove -width 0 -padx 0 -pady 0 -bd 1






frame $xth(gui,tb).winf
button $xth(gui,tb).edb -image {edit_img} \
		-command {
			xth_app_show te
		}
xth_status_bar $allapps $xth(gui,tb).edb [mc "Switch to text editor"]

button $xth(gui,tb).e2db -image {2d_img} \
		-command {
			xth_app_show me
		}
xth_status_bar $allapps $xth(gui,tb).e2db [mc "Switch to map editor"]

button $xth(gui,tb).cpb -image {compile_img} \
		-command {
			xth_app_show cp
		}
xth_status_bar $allapps $xth(gui,tb).cpb [mc "Switch to compiler"]

label $xth(gui,tb).sp02 -relief groove -width 0 -padx 0 -pady 0 -bd 1

frame $xth(gui,tb).makf
button $xth(gui,tb).makeb -text "Make" -image {make_img} \
	-command {
		xth_app_make
	}
xth_status_bar $allapps $xth(gui,tb).makeb [mc "Compile"]

label $xth(gui,tb).sp03 -relief groove -width 0 -padx 0 -pady 0 -bd 1

frame $xth(gui,tb).self
radiobutton $xth(gui,tb).selb -text "Select" -image {select_img} \
		-variable xth(tb,me,action) -value 0 \
		-command {
			xth_me_cmds_set_mode 0
		} -state disabled
xth_status_bar me $xth(gui,tb).selb [mc "Switch to select mode"]

button $xth(gui,tb).selscrb -text "Select scrap" -image {selscr_img} \
		-command {
			xth_me_cmds_set_mode 0
      xth_me_ss_next_cmd 4
		} -state disabled
xth_status_bar me $xth(gui,tb).selscrb [mc "Select next scrap"]

button $xth(gui,tb).selarrb -image {selare_img} \
		-command {
			xth_me_cmds_set_mode 0
      xth_me_ss_next_cmd 6
		} -state disabled
xth_status_bar me $xth(gui,tb).selarrb [mc "Select next area"]
    

label $xth(gui,tb).sp1 -relief groove -width 0 -padx 0 -pady 0 -bd 1
  
frame $xth(gui,tb).edif

button $xth(gui,tb).edif.zoo+b -image {zoom+_img} \
		-command {
			if {$::xth(me,zoom)*2 > 800} return
			xth_me_area_zoom_to [expr {$::xth(me,zoom) * 2}]
		} -state disabled
  xth_status_bar me $xth(gui,tb).edif.zoo+b [mc "Zoom in"]
button $xth(gui,tb).edif.zoo-b -image {zoom-_img} \
		-command {
			if {$::xth(me,zoom)/2 < 12} return
			xth_me_area_zoom_to [expr {$::xth(me,zoom) / 2}]
		} -state disabled
xth_status_bar me $xth(gui,tb).edif.zoo-b [mc "Zoom out"]
label $xth(gui,tb).edif.spZoom -relief groove -width 0 -padx 0 -pady 0 -bd 1

button $xth(gui,tb).edif.scb -image {scrap_img} \
  -command {
    xth_me_cmds_create_scrap {} 1 "" ""
    xth_ctrl_scroll_to me scrap
    xth_ctrl_maximize me scrap
  } -state disabled
xth_status_bar me $xth(gui,tb).edif.scb [mc "Insert new scrap"]

radiobutton $xth(gui,tb).edif.ptrb \
		-image {point_img} -indicatoron off \
		-variable xth(tb,me,action) -value 1 \
		-command {xth_me_cmds_set_mode 1} -state disabled
xth_status_bar me $xth(gui,tb).edif.ptrb [mc "Insert new point"]

radiobutton $xth(gui,tb).edif.lnrb \
		-image {line_img} -indicatoron off \
		-variable xth(tb,me,action) -value 2 \
		-command {
      xth_me_cmds_create_line {} 1 "" "" ""
      xth_ctrl_scroll_to me line
      xth_ctrl_maximize me line
      xth_ctrl_maximize me linept
    } -state disabled

xth_status_bar me $xth(gui,tb).edif.lnrb [mc "Insert new line"]

radiobutton $xth(gui,tb).edif.arrb \
		-image {area_img} -indicatoron off \
		-variable xth(tb,me,action) -value 3 \
		-command {
      xth_me_cmds_create_area {} 1 "" "" ""
      xth_ctrl_scroll_to me ac
      xth_ctrl_maximize me ac
    } -state disabled
xth_status_bar me $xth(gui,tb).edif.arrb [mc "Insert new area"]

button $xth(gui,tb).edif.txrb \
		-image {text_img} \
    -command {
      xth_me_cmds_create_text {} 1 "\n" "1.0"
      xth_ctrl_scroll_to me text
      xth_ctrl_maximize me text
      focus $xth(ctrl,me,text).txt
    } -state disabled

label $xth(gui,tb).sp2 -relief groove -width 0 -padx 0 -pady 0 -bd 1
frame $xth(gui,tb).movf
	button $xth(gui,tb).movf.topb -text "top" -image {top_img} \
		-command {xth_me_cmds_move_up {}}
	button $xth(gui,tb).movf.upb -text "Up" -image {up_img} \
		-command {xth_me_cmds_move_up {}}
	button $xth(gui,tb).movf.dob -text "Down" -image {down_img} \
		-command {xth_me_cmds_move_down {}}
	button $xth(gui,tb).movf.botb -text "Bottom" -image {bottom_img} \
		-command {xth_me_cmds_move_down {}}
	button $xth(gui,tb).movf.tob -text "To" -image {to_img} \
		-command {xth_me_cmds_move_to {} {}}

button $xth(gui,tb).deb -image {delete_img} \
	-command {xth_me_cmds_delete {}} -state disabled
xth_status_bar me $xth(gui,tb).deb [mc "Delete selected object"]

label $xth(gui,tb).sp3 -relief groove -width 0 -padx 0 -pady 0 -bd 1
# - file icons
pack $xth(gui,tb).filf -side left
pack $xth(gui,tb).newb $xth(gui,tb).openb $xth(gui,tb).saveb $xth(gui,tb).savasb \
	 $xth(gui,tb).closeb \
	-side left -anchor center -in $xth(gui,tb).filf
pack $xth(gui,tb).sp01 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).filf

# - undo/redo icons
pack $xth(gui,tb).unredof -side left
pack $xth(gui,tb).undob $xth(gui,tb).redob -side left -anchor center -in $xth(gui,tb).unredof
pack $xth(gui,tb).sp01x -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).unredof


# - window icons
pack $xth(gui,tb).winf -side left

pack $xth(gui,tb).edb $xth(gui,tb).e2db $xth(gui,tb).cpb \
	-side left -anchor center -in $xth(gui,tb).winf
pack $xth(gui,tb).sp02 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).winf

# - make icons
pack $xth(gui,tb).makf -side left
pack $xth(gui,tb).makeb \
	-side left -anchor center -in $xth(gui,tb).makf
pack $xth(gui,tb).sp03 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).makf

# - move icons
# pack $xth(gui,tb).movf -side right -anchor nw
pack $xth(gui,tb).movf.topb $xth(gui,tb).movf.botb $xth(gui,tb).movf.tob \
	$xth(gui,tb).movf.upb $xth(gui,tb).movf.dob \
	-side left -anchor center

# - select icons
pack $xth(gui,tb).self -side right -anchor nw
pack $xth(gui,tb).selb \
	-side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).selscrb $xth(gui,tb).selarrb \
	-side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).sp3 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).self
pack $xth(gui,tb).deb \
	-side left -anchor center -in $xth(gui,tb).self
#pack $xth(gui,tb).sp1 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).self

# - edit icons
pack $xth(gui,tb).edif -side right 
pack $xth(gui,tb).edif.zoo+b $xth(gui,tb).edif.zoo-b -side left -anchor center
pack $xth(gui,tb).edif.spZoom -padx 7 -pady 5 -fill y -side left -anchor center
pack $xth(gui,tb).edif.scb $xth(gui,tb).edif.ptrb $xth(gui,tb).edif.lnrb $xth(gui,tb).edif.arrb \
	-side left -anchor center
pack $xth(gui,tb).sp2 -padx 7 -pady 5 -fill y -side left -anchor center -in $xth(gui,tb).edif


proc xth_tools_me_enable {} {
  global xth
  set tools [list \
    $xth(gui,tb).deb $xth(gui,tb).selb $xth(gui,tb).selscrb $xth(gui,tb).selarrb \
    $xth(gui,tb).edif.zoo+b $xth(gui,tb).edif.zoo-b \
    $xth(gui,tb).edif.scb $xth(gui,tb).edif.ptrb $xth(gui,tb).edif.lnrb $xth(gui,tb).edif.arrb \
  ]
  if {$xth(me,fopen)} {
     foreach tl $tools {
       $tl configure -state normal
     }
  } else {
     foreach tl $tools {
       $tl configure -state disabled
     }
  }
}

proc xth_tools_toggle {} {
  global xth
  set xth(gui,toolbar) [expr !$xth(gui,toolbar)]
  if $xth(gui,toolbar) {
    catch {
      pack $xth(gui,tb) -side top -anchor nw -fill x -before $xth(gui,main).$xth(app,active)
    }
  } else {
    catch {
      pack forget $xth(gui,tb)
    }
  }
}
therion-5.4.1/xtherion/tools_imgs.tcl000066400000000000000000001302701307545355600177340ustar00rootroot00000000000000image create photo compile_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAImwABCBxIsKBABQgTKkiQQMGB
hwQOKlzo8CFEiQkZJnhowMCBiAAUMgRg8UBHkAgTANi4YEFHAB0NHGR4oKVN
lwYKgDywseZNlwUGgKRp06RNADoFPgRgs6PNAQZ2ejTw0+UAoQKnUv15FSvJ
lwYGtAwLYIAAkDE7DihQ1qxZtB2Dhr0qwOxZgUHl1qVLIEAAkAQCCx482KBh
ggEBADs=
}
image create photo save_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//////9sAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///////8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAMAALAAAAAASABIAQAjEAIEJHEiwYEE5
tm7ZsmRJkhw3EJOkCGCwokVgk7aBc6NCI7iP4Ha5KUFQiSRL27bZsiVpliRJ
SQoAILjSEktJjiC6SaKkhC2CklIK1bZN2y6WSUgOdGNpl9BtCi3dclKC4sAk
ThytnPTSoaQiAWZeHCvw1kdLTnaB/LhNjlKBQb8tXPvRVpO3wCTdutXw5UMn
SiSGIOjGllq2T0daFehEkq2Uu/aytOWkwOCrciRduyWrr8MkARYDK0G6tOkS
IQDgJVswIAA7
}
image create photo saveas_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//////9sAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///////8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAMAALAAAAAASABIAQAjXAIEJHEhQYD1r
1gq6uWXrlqVLsfLlq9coSYkCBTNqJGjrGzgnSXaBA5cPH714bUoQVCLH1jaG
sWQ5kuMmSYAAHG1NsiVJkiM3bmCZZCeJoKRtSJNmw1cPpRKVA91Y2oVUmz59
+WJJclMAAMESbhzpsmWp51ZJKQDg3EhQG7589hIO7AhOkhOR4PSZhNcKqsCj
28juG/m2XiuLRnfdumRpkqRqE1klQRzVlraRJCVGs+amxFqBTiTdQmpZn1a7
BT4DSyKVoaxGPYEmAUDga4nbuHN79st2Y0AAOw==
}
image create photo open_img -data {
R0lGODlhEgAPANUxAOLKdvryrtG5bPXnnNW+b+7Wffv2ybGaWquUV+nRe2pS
MHVeN9/HdIZvQtO8bv375/jspM+3a+DIde/Zg+TXmdnCcdjAcI53Rvz52aWO
VL+rbMGpY39oPfLgj9XBe/HeiMWtZe3Wfuvgp8mxaMy0adXChOvZi/Ljlbyl
YOXOeJmCTJR9Sfz2utzEc6CIT+3VfLegXf///wAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADEALAAAAAASAA8AAAas
wBhsSIwZYwALaXMUijCGR+ngUq2uBxXsWKGwNojMQeOhGDCswaqpCaAGrPjD
wIKcJq7mwc16BP4DHy+DeUcIJygsBhAdBSGDCSkqTQgvb3cFBS+RABKTRyMo
MAMnmi8pAC2qa0cOLjB2mwAMFRYEBKxHDTAnJikSLQQOAsQcTTELLpEMwQIR
KA0KCMcXLinMBAIZCwstx0bVqREqCrnfMVUg0Q7nxzAKn+1GQQA7
}
image create photo make_img -data {
R0lGODlhEAAQAMQfAM/PzyQkJIaGhklJST4+PgoKClVVVR0dHQEBAfn5+ezs
7KOjo5ubm1NTU0ZGRpSUlG9vb2lpaZqamn19fRQUFDo6OjAwMMbGxszMzJ6e
nuPj47Ozs8HBwTMzMwAAAP///yH5BAEAAB8ALAAAAAAQABAAAAVw4Pcl4gdR
hyAq5dpcX+B5xAc85Np5yEPMA8CskbvMeEfkLFOSJZ+F1uf5LHkChaToWCgc
dlUrl+ppJbMfzkI7PS42GNGAPEMwShI64nj/GOhJECMfFR4WH2AGHw4eDjkk
Gxofcx4qHxEsUiICMxOaIQA7
}
image create photo new_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAAQABIAQAiVAAEIHEhQ4L+D
/wAkSHCgoYEDBiIaKFCAgEACGDNq1ChQgUcFCxseAADRgEWSEg0MKDBApUoB
Jz9+TKBg5AGLBwGAZCiyZMSKAiH6lNhywICTElmqNCpggACYHWV6XAgAZ06p
CxkCiIhT506eEAsGBVuyJMuTDoeqVIq0bMSVRo0iTQmXqdOTLJU2ZUogQICT
YgMLDAgAOw==
}
image create photo edit_img -data {
R0lGODlhEgASAPcAABASCC4lJzgvJzgvMUIvJ1ZDMVZNUVZNhGBNMWBNPHRq
UYhNJ4hhMZJXPJxDCJxqMaZNCLBhMbCIcLDN97p+PLrX98RhEsR+RsTX985h
CM5+W85+Zc6whM7N99hqCNhqPNiSUdjh99jr9+JqJ+KcUeLr9+ySW+yccOyw
cOzr1+z19/d+CPeICPeSMfewj/e5j/fDrvfNpPfXuPfhw/fhzffh1/frrvf1
4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAjdAA8IHEhQ4L+D
C1DYOKCihMMSIl7IqHFiBQsWGSAA+Hegg8ePIEEeOMhQhcmTDg88IBGjhUUW
B0qEkOlihgsNDRYgAIChw0iOJ4M2jNmBAQkZLWCifCjiAoiWLzPGhBgixAsa
Mk58GGHBAYCfB6qGUCBBQ4IEAjBgqDDBJ0mhQTuOXEDCRouScEscEGEUqUW8
JplSYJn0oge8TF+gaHkRo8apEEWEiHEDhokVKzJ4JSlThOQYNW5GWLAAgFuO
YifD2NAAQYC0FU4fwBCCg4IABAyorcA2NtiCwAkeDAgAOw==
}
image create photo close_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiKAP8JHEiwYMEk
ACQJLAGAxLaBJAA8NDhQG8WCEQG0kWRLUkaFBRm2OQigpK2L2iQlSbIRZUmG
DgkiHDmwDYBIMhtaLGnQVsmSGQEkuUi0qM2fL08aPFpiosCjTv9J0rgtYkyB
2xrmVPoPIQCL/yI69VmCJAA3Qgv6FKp029S0FLe1YVgyCdeiRQMCADs=
}
image create photo 2d_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAImwABCBxIsKBABQgTKkiQQMGB
hwQOKlzo8CFEiQkZJnhowMCBiAAQLlAw0OKBjiBFJgBwgGXHlwYOJljQUuDJ
lwVAHphpMebNAgNAMqR58iRIAjltHqAJE8CAAgAM6DSwAGbMAVdBeqx6M6hA
Al5dVjXwFKtZAVqpdiw7YIAAt2kXyJ1LF61AoEANvG2LNkCAowQCCx4s2KBh
ggEBADs=
}
image create photo 3d_img -data {
R0lGODlhEAASAPcAAFdVhrLM9LnT9Mfa+c7M+dXh+dXo+ePv+ero1urv+fH2
+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///ywAAAAAEAASAAAIngABCBxIsKBABQgTKkiQQMGB
hwQOKjx4YOCBiAAULkwAoKIBAwAwIlywUODDjiBFKljA8CTIjwBAZkyw4CTK
gQUwHqD58MBHnwYKDMDIsKZPoB8L5DR5oOZHAwsMDBBqQCfUp1GlSh0q0EBT
r1GnDhjLFWXUBWK1DhCA8eOCsELHCljbFurbu3jZChRKda5cAgECYCRAuLBh
wwYTEwwIADs=
}
image create photo up_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiWAP9ts0WQ4L+D
CBMebFOCRImGthQiTNfuHwkAGDEmkahQUhIkH0OC3CiRBAEAJ09iPBnJHbmE
SRrKlMUxYSSROJFsswcOnL2DthzFESqp5j95RpNazKhRqdOS3KJKlUqpTTlw
4Z4irIiwBFMAJCXa0wd0oFlbZhHaK3cwicO3MkmQKNoxSQoiKZJoU2orTZM0
bdJsSxoQADs=
}
image create photo bottom_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiqAP8JHCjQVpuD
BwkKLGePIICHEJMQREGLFiZalHDRykWpFiZKEhUqLEGiZAkQbgjaA5eOIAmI
D0MOvKcwSYmbJG0plKdwmy5rumzpEpmuocijBW0pXcpU506FMGMqBGcUKdGq
/17ClCkQ6z9bbtqETWlVoE0SSUgUcSowXTlyVdOSLClJoTuFumRZ0stWIAo4
gAFDgjN4MJsmBK01iuQokhtJbSBLktOIYEAAOw==
}
image create photo down_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAihAP8JHEjwnzZb
CG1pK8hwG4CHJAKQ2MaQoK2HGAHYYpikBJISHZOETDIwHThw2pBw48ZrJcuV
TDZWFLitBAmbJUoItCdvn71/kty0EdpmaFFJO//9nMm0qdOBtkgAAAFx4dOZ
8sppy8j14UZ37WZu26ZtLEV74MSSkEqCwESB6ci5Ayqyrt1IA3na24cECRO/
ff8iIem0bpEUhJu2qVv0X0AAOw==
}
image create photo to_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiNAP8JHEiwoEGB
7eT9s4QkScOHbQ4SdAOgokVJEjNq/GeLBAkCH0ls0yjJ4kWSIACEUEnClj2B
L9OV09cGyUOHDTf+22VLly1bu3QmGZpiqNChQyNq7EgCRNOWG7fpuqVr18hy
9uSl+0cOXDoS3MKK5cbGVsF7OkmuBJASqsY2bdy0ceImapISJPAm+RcQADs=
}
image create photo top_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAilAP/922aroMGD
trYJXBipjcM2bhZKlGgLgMWLbSZq3ChR3sRtJEoAEFnClkRy9igywcWypUtc
cBot3AaCJIgCkhaWCxduYpISJFKQSKKto76J2mxZU3prYrqUC7UlgROHKhw4
bOKwoYrE5EJJD8OKlaiNAAgSJM7mXAjO48dtu7YplNiW4kWMEttx3KvRFom7
INbuBRt2orujEn+WWFxirkCoAgMCADs=
}
image create photo selscr_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAitAP8JHEiw4MBb
J0qceHOrYcN/AJJsO3HLoC1JBgWSSJJxWxISG0+IPOEG48BttyadMDGgIkQA
AEhI0paRoEqKBbe9UVJikkOXDgmWcPPz1seXEf9tI4hS4aSBNNsAqEm1qsBt
tgaYMHGiTRuDkki4seXwzZKHAwcsGeDz57+vkyYtFXhCwIm2DZ/ClGiCo7YS
DtcK4IgUwFeCKbWemAvAFonDBW+R6AjAjVWqAQEAOw==
}
image create photo delete_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAjCAP8JHKitTZKD
2wYq/CfpIImDbSK1aUPiYZKF/7QlseiwhCSMSbTZGkmypDZJkQY2nMhSosSJ
FxW2SWPp3zZJtradNJhyIIlIcSLJsqXNmi5rliI1avJR4EqWTdpETWIwplOq
EyU2arMVJsabaRLaTGIL4z8SJHXZioSzZJum/5JEIirSpEi2KgEkaYQykl+/
bUqQUPi0SZIiJQ5SPUgYycSucVh6HSgLa5zIWllazZiCSBs3Wx21ibwRLsaT
OMUqDAgAOw==
}
image create photo selare_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAjCAP8JHPhv25sl
J04cSXhC4LYT9iJKlLbmFokk/yJW/HdkzZElBEMmIRHyhDSJKFE2PGFN4iuQ
A0kAAEBCkrWQt07ISinx0RuBt47wtLft3z2JFdfsdNlQoEwARf4t2TbpUUR5
TQcWtQRAW0iHCh1Jk4fyyC6COU/yJCvtyMAlrlLeO1pW4JKlKbe1Marx1qQ1
EY/ee3Vi0j+ZGO0tubVEbcSs/0rMBJBk27YjjhcTrFkihVaI9hb9/PqPMsFJ
t0iTDggAOw==
}
image create photo select_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhPAP8JHEiwoMGB
ABIqtHWwocOCCRk+PFgCgKSJ/yRiRKhQ20YASZIAaLNx4LaE20qqBKDxY8SS
Cl9OjJlE0sWHSf6dBKDyXyQAJHre7HkwIAA7
}
image create photo sellin_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiXAP8JHEhw4JsT
J5bcKkiQ3L82JBgeXJKQoUBJALRZZDhrxKNJS5b8C/lmyQhrBNsAWNlG0saC
JybNunXrxMubBfWVsydQJYCIAkHekjXrkciBtgQCcIkzqMJbk2ziXPKolKya
TcnNWnLg0U198pji1MlTJVCCt5ZM+keOZ8+VPweeuDWrlNqUSZIAIDiX5l2G
Kc4GXdg0IAA7
}
image create photo selpt_img -data {
R0lGODlhFAASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAAUABIAQAhsAP8JHEiwoEGD
9tqQ2HawYUFJCx0KJDfr1i1n7SQeTAKgoyRbGgXKsxeSILlbDKVlLDmwSUcC
DFla+7cNgCSWOAfKI6csWTmW9pJZ3DWLHEt55aw10pZTYBsAEXG67Bg1ZBo3
T5sKLEFCq8OAADs=
}
image create photo insend_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiDAP8JHEhQoL10
5MrJK0hwWxuGA5eckPgGoi05EDOWS3XLGTmBE98sMWExSUaG9pLdmtSx3cl/
tiS9HGjy5BKWSm7dJGirTRISbWTO/FdO1q1Z5fTNPLiy5VBrycilsze0qtVJ
S25l1Cb0H9amJwpybVNCkq1/Om+pDcvQVs2B2yZZDQgAOw==
}
image create photo inspt_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAinAP8JHEhw4JsT
J5ZsK/jPXrJbJdzISsfwVsIlJxgKbGNLo8ZZA5TcWvLm38E3Swa40Ziko8eC
JybdmpmRoTxyycoRk/RyIKlirpyBY7jtxC1JbibVHCinDYkkHHsKnLREJkqp
/6pGtPhSnr5/RZRgLKmR3CyIpeRhLbfVWTyN295M+pckjr12agVK0jYw5qQS
JsgOlCSpRJu9/2LOfCOYYMuCMrH+CwgAOw==
}
image create photo join_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAieAP8JPLFkyYk3
Av8RNIgwocNtECAwgADDoUWHA968WTLpYsJtu7aJTHht17VtHlNetCVJ0gA3
tzQmPHFrkpIlLVPWYaDSIwwIdVJq2zZ06IBJk5a8KUp0G0uXMGUOrKnERE6B
A5YcOTjTIFeVVRho65lQl7YqEP6NJftvJwOxbBNWjPtvwIkTBzpalJSkr98B
JUwI9uvXI9I3k25dDAgAOw==
}
image create photo split_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAimAP8JHPjmxJIl
AwYqXPgvXTpw5Ny1Yyhw0pI3BQdaxHiC4sBtAkF6ZGhPn0dJKFMqWeLGzYCU
KW15BFduJMOH4OJR1LbNzZJbtzpWfHNr0gltPFFGkhSpjRIVapy8jLTUjSSZ
Cx8ZXDLC5kJ38rwuBJdOrEB74NKCM2mWHDmbkwacGJCw4oERB+r+S5LEhAlJ
QTUSVTKAbxuBuzC+mTMw8ZtJjwYGBAA7
}
image create photo delpt_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiZAP8JHEhQ4K0T
CCcVFEhulpsSt8rpW3hiyZITChdq3ChwgIlJb04IrBjSBMeTBCctucXyzRuN
5ZIlI0cG5b9WwJI5KyaP4qRbSlTeIigpidEkkmz+w3hr0oltKG8teXjrTcaF
9uz9k1RiTcWhC9s5u+WmSDmb6RSV+EluI8hblkj8i9duo0uyJUQSbcO3TVKh
t2bptdlU6b+AADs=
}
image create photo insbeg_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAikAP8JzKdPoEGD
b06cWLLNIL58B9s0PGjQHjllycpRNNhGG0V6EDfeGjBp0pIl/9yVa5aMnKyN
/5LYovgQ5olJt3KecFiQYhuYAvH1bDMTqL5ytyK5kaUxYhsSSYgapNeToslZ
t96gDFr14JJJl3DuDBpy45sjJ94cJLhxIkyQQIGiixdXkkeB5G7FkuSsHUVJ
kki0sfuvnKycfWHKpCjPXtyDAQEAOw==
}
image create photo point_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhCAP8JHEiwoMGB
J24pXDLpoMOHECMSvPWmocSLDifdwphw4RuMIEOKHEnwzYklJ05IvLVE4a1J
KiOafIOSpM2b/wICADs=
}
image create photo scrap_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiUAP8JHEiwIMEl
bwIMuMWw4a1JS05M2mYwiSSDGAvakpQkgIASAgKQaCPQVsM3J04IyMhy4LY3
tzJKIuHG4cOGLgUsmeSQI4ATJkycSGKL4K03A068acm0acEBEWNitEWihMVb
J5IyHIh1QAmeNh0OfBP0RFisQk+4oegmyck3SUpc3Ba14DasSoQ63caRotN/
flsGBAA7
}
image create photo text_img -data {
R0lGODlhEgASAPcAAAQEBBoaGiQkJC8vLzo6OkRERE9PT1paWmRkZG9vb4SE
hJqamqSkpK+vr7q6usTExM/Pz9ra2uTk5Pr6+gAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiPAP8JHEiwoMEF
ABI6+Bcg4YAHBgxKFEjgwAICDAwm3AhAwT+IBQVwHBkApEQHHAkINFnQQEIB
CjZCYCkwwsYDAhskLBlxYIKNHgdKAMBzosQABhwIWGAQwUgJH3sWZLBRJIAB
USVuTAABKE2KGwU6Jfo15siNRQd23VigbYEBZKX+S3CgrsEHM+Uarcn3X0AA
Ow==
}
image create photo area_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAiiAP8JHEjw1qQ3
a95M2iZw0hp7ECPak/VIorwT/xzae4SRoEeP207Ikkhy48IlEeWtmfRR4K03
IE8skgZRXkRpHf89eliSpLQl/06QlHWCocA1J179DBrRFdCWUAVyPLHm0StZ
rxLGnNUT4pJbA0+46toUZlBrZCViXEIz5asTR96MqGgP57YjNe1NKwpyyYmv
KO3ds5czKluvYKMO9LtG8cCAADs=
}
image create photo line_img -data {
R0lGODlhEgASAPcAAAAAAAAAVQAAqgAA/wAkAAAkVQAkqgAk/wBJAABJVQBJ
qgBJ/wBtAABtVQBtqgBt/wCSAACSVQCSqgCS/wC2AAC2VQC2qgC2/wDbAADb
VQDbqgDb/wD/AAD/VQD/qgD//yQAACQAVSQAqiQA/yQkACQkVSQkqiQk/yRJ
ACRJVSRJqiRJ/yRtACRtVSRtqiRt/ySSACSSVSSSqiSS/yS2ACS2VSS2qiS2
/yTbACTbVSTbqiTb/yT/ACT/VST/qiT//0kAAEkAVUkAqkkA/0kkAEkkVUkk
qkkk/0lJAElJVUlJqklJ/0ltAEltVUltqklt/0mSAEmSVUmSqkmS/0m2AEm2
VUm2qkm2/0nbAEnbVUnbqknb/0n/AEn/VUn/qkn//20AAG0AVW0Aqm0A/20k
AG0kVW0kqm0k/21JAG1JVW1Jqm1J/21tAG1tVW1tqm1t/22SAG2SVW2Sqm2S
/222AG22VW22qm22/23bAG3bVW3bqm3b/23/AG3/VW3/qm3//5IAAJIAVZIA
qpIA/5IkAJIkVZIkqpIk/5JJAJJJVZJJqpJJ/5JtAJJtVZJtqpJt/5KSAJKS
VZKSqpKS/5K2AJK2VZK2qpK2/5LbAJLbVZLbqpLb/5L/AJL/VZL/qpL//7YA
ALYAVbYAqrYA/7YkALYkVbYkqrYk/7ZJALZJVbZJqrZJ/7ZtALZtVbZtqrZt
/7aSALaSVbaSqraS/7a2ALa2Vba2qra2/7bbALbbVbbbqrbb/7b/ALb/Vbb/
qrb//9sAANsAVdsAqtsA/9skANskVdskqtsk/9tJANtJVdtJqttJ/9ttANtt
Vdttqttt/9uSANuSVduSqtuS/9u2ANu2Vdu2qtu2/9vbANvbVdvbqtvb/9v/
ANv/Vdv/qtv///8AAP8AVf8Aqv8A//8kAP8kVf8kqv8k//9JAP9JVf9Jqv9J
//9tAP9tVf9tqv9t//+SAP+SVf+Sqv+S//+2AP+2Vf+2qv+2///bAP/bVf/b
qv/b////AP//Vf//qv///yH5BAEAAP8ALAAAAAASABIAQAhyAP8JHEhw4K0l
kwoW3EbClsJ/205MuvVmycOLGE+UcEMx4ZsBJzRKwkiS4IlbKN+8Iclw5ESM
DTEivLVxya2SOCuqPLGtZMRJSm5NOuGzxIklIVnGxPlvKcae/0o4xHjr5CQT
REsueSO0KlSSB0+sxBkQADs=
}
image create photo zoom+_img -data {
R0lGODlhEgASAPcAAEdISVZXh3Z2d3Z+f31+nn1+po2VnpWVnpWdnpWdvZ2d
pp2drZ2lpqWlpqWltaWlvayltaytxbStvbS1vbS1zLy8xcS8xcTExcTU5MzM
zMzM3MzU69TU3NTc5NTc89vc6+Pr++vr6+vr8+vz+/Pz8/Pz+/v7+wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiTAP8JHEiwoMEA
JhKaOMBghEMQAQxKnFiQQIAIHDQ8CEBgIgQCJRx26ACiZAAJFFMWlIAwYQgR
JkISmHBQYQmGI0pClJiBI4UNGCIEWKCyqMELFjk+SEnggcKEIxZEPEhCIYIG
IUd8mDrQAoGEAgCIBTCgZIELBQN8iDnCgAKdHrgSDADhoc4EHSlW2EjAQQWj
KgMCADs=
}
image create photo zoom-_img -data {
R0lGODlhEgASAPcAAEdISVZXh3Z2d3Z+f31+nn1+ppWdvZ2drZ2dtaWltaWl
vayltaytxbStvbS1vbS1zLy8xcS8xcTExcTU5MzMzMzM3MzU69TU3NTc89vc
6+Pr++vz+/Pz8/Pz+/v7+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAASABIAQAiGAP8JHEiwoMEA
HhIq3MBQQwCDECMWJBCAwYUKCgIQiLiAQAeGDTU4bCCxZMEGCBUm/EjAwUGF
H0M6hEhB4wMLExgEQGCyp0EJFDUqKElAgUoPGw48PMjhaMwMSwdGIJBQAICr
AAaILCChYIAMHmJuEKkBQ1SCARbI1GBgo0QIGQkkgODTZEAAOw==
}

image create photo undo_img -data {
R0lGODlhEAASAMZWAAtL0AtN0QtN0gxN0AtN0wxN0QtN1AtO0wtO1AtP1AtP1Q1P0wtQ1gtQ1wtR
1wpS2ApS2QtS1wpT2ApT2QtT2QtU2QtU2gtV2gtW2wtX2wxX2gtY2wtY3AxY2gtZ3AtZ3Qta3Ata
3Qpb3wtb3wtb4Apd4A1d3Qpe4gpg4gpg4wph4wpi5A5i4Qtj5Atl5Atm5Qxm5Qtn5Qto5gxo5gtp
5g1p5Axq5wtr6Atr6Qts6Qtt6Qtu6gxu6Axu6Qpv6wtv6gtv6wpw7Atw6wxw6gpx7Apx7Qpz7Qtz
7Ap07gp17Qp37wt47wt77wt88At98At+8At+8QuA8QuB8gyD8QuE8guF8v//////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH5
BAEKAH8ALAAAAAAQABIAAAdtgH+Cg4SFhoeIiYqLghcTDgoHAQUDiB4YFRAOCQYCAIcjIRwYFg8N
CQQBjBQSDAiMf44RhzWFHxsWhj03hCwkIyCFR0FAOjYzMC0qJyOETktJRT4/OTQxLiuGUE1LSERC
OzgyiFFPsIJV5+qwgQA7
}

image create photo redo_img -data {
R0lGODlhEAASAMZWAAtL0AtN0QtN0gxN0AtN0wxN0QtN1AtO0wtO1AtP1AtP1Q1P0wtQ1gtQ1wtR
1wpS2ApS2QtS1wpT2ApT2QtT2QtU2QtU2gtV2gtW2wtX2wxX2gtY2wtY3AxY2gtZ3AtZ3Qta3Ata
3Qpb3wtb3wtb4Apd4A1d3Qpe4gpg4gpg4wph4wpi5A5i4Qtj5Atl5Atm5Qxm5Qtn5Qto5gxo5gtp
5g1p5Axq5wtr6Atr6Qts6Qtt6Qtu6gxu6Axu6Qpv6wtv6gtv6wpw7Atw6wxw6gpx7Apx7Qpz7Qtz
7Ap07gp17Qp37wt47wt77wt88At98At+8At+8QuA8QuB8gyD8QuE8guF8v//////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////yH5
BAEKAH8ALAAAAAAQABIAAAdtgH+Cg4SFhoeIhlWJhk9RiDI4O0JESEtNUIYrLjE0OT8+RUlLToQj
JyotMDM2OkBBR4UgIyQshDc9hhYbH4U1hxETF4yDCAwSFMR/AQQJDQ8WGBwhI4cAAgYJDhAVGB6I
AwUBBwoOwsro6erpgQA7
}
therion-5.4.1/xtherion/xtherion.ini000066400000000000000000000141361307545355600174140ustar00rootroot00000000000000## This TCL script is loaded whenever xtherion is started. You can
## modify some settings here. Only some variables are listed here.
## If you have specific needs, don't hesitate to ask authors.

## directory where xtherion starts
# set xth(gui,initdir) ""

## Enable/disable toolbar at startup
# set xth(gui,toolbar) 1

## Set template for text editor
# set xth(te,template) {
#survey ... -title "..."
#  centreline
#    team "..."
#    team "..."
#    date ...
#    units clino compass grad
#    data normal from to compass clino length
#       ... ... ... ... ...
#  endcentreline
#endsurvey
# }

## preferred language for messages
# ::msgcat::mclocale en

## Enable/disable balloon hints
# set xth(gui,balloons) 0

## Enable/disable auto save at startup
# set xth(gui,auto_save) 0

## Enable/disable creation of configuration backup files after successful 
## compilation. Second parameter is backup file extension.
# set xth(gui,auto_backup) 0
# set xth(gui,auto_backup_ext) "~"

## input keyboard encoding
# set xth(app,sencoding) iso8859-2

## default text file encoding
# set xth(app,fencoding) iso8859-2

## starting toolbar width (in pixels) for text editor (te), map editor (me)
## compiler (cp) or all applications (all)
# set xth(app,all,tbwidth) 256
# set xth(app,te,tbwidth) 256
# set xth(app,me,tbwidth) 256
# set xth(app,cp,tbwidth) 256

## supported keyboard encodings
# set xth(kbencodings) {iso8859-1 iso8859-2 cp1250 cp1251 macCentEuro unicode}

## editor font
# set xth(gui,efont) {fixed -20}

## label font
# set xth(gui,lfont) {helvetica -12 bold}

## show compilation progess
# set xth(gui,compshow) 0

## translate types in dropdown menus
# set xth(gui,me,type_dropdown_trans) 1

## reset options string on type change
# set xth(gui,me,type_reset_options) 1

## size of object type combobox
# set xth(gui,me,typelistwidth) 16

## size of scrap scaling square
# set xth(gui,me,scrap,psize) 4

## size of point
# set xth(gui,me,point,psize) 4

## size of line point
# set xth(gui,me,line,psize) 3

## line width
# set xth(gui,me,line,width) 3

## size of line control point
# set xth(gui,me,line,cpsize) 4

## width of line between point and control point
# set xth(gui,me,line,clwidth) 2

## size of start line tick
# set xth(gui,me,line,ticksize) 10

## width of start line tick
# set xth(gui,me,line,tickwidth) 3

## simplification limit for lines. Larger simp_limit = less points; smaller simp_limit = more points and smoother line
# set xth(gui,me,line,simp_limit) 10

## whether inactive scraps should be hidden by default
# set xth(me,hinactives) 0 

## Drawing item colors
## for color names, see http://wiki.tcl.tk/37701
## RGB values can be written as  #F1B2C3
#set xth(gui,me,activefill) red
#set xth(gui,me,pasivefill) green
#set xth(gui,me,controlfill) blue
#set xth(gui,me,highlightfill) cyan
#set xth(gui,me,unselectedfill) lightgray
#set xth(gui,me,wallcolor) brown
#set xth(gui,me,pitcolor) magenta
#set xth(gui,me,slopecolor) gold
#set xth(gui,me,rockcolor) snow4
#set xth(gui,me,bordercolor) turquoise
#set xth(gui,me,stationcolor) darkorange

## DXF/SVG import settings
## size of imported image in pixels
# set xth(import,size) 1024.0
## minimal distance betweend nearest points (in pixels)
# set xth(import,mind) 8.0 
## exact screen scale (number of pixels to 1 unit in imported file),
## (overrides previous two values)
# set xth(import,sscl) 1.0
## scale of DXF file (meters per unit)
# set xth(import,dxf,scale) 1.0
## default coordinate system for DXF file
# set xth(import,dxf,cs) {}
## scale of SVG file (meters per unit)
# set xth(import,svg,scale) 0.1
## default coordinate system for SVG file
# set xth(import,svg,cs) UTM34

## XVI settings
## grid color
# set xth(gui,xvi_grid_clr) #00D0D0
## station outline color
# set xth(gui,xvi_station_oclr) black
## station fill color
# set xth(gui,xvi_station_fclr) black
## station size (radius)
# set xth(gui,xvi_station_size) 3.0
## survey shot color
# set xth(gui,xvi_shot_clr) gray50
## walls outline color
# set xth(gui,xvi_walls_fclr) gray60
## walls fill color
# set xth(gui,xvi_walls_fclr) gray80
## walls fill pattern
# set xth(gui,xvi_walls_fptn) gray12
## sketch line width
# set xth(gui,xvi_sketch_line_width) 1

## Formats of items in centerline data table
## default format
# set xth(datafmt,unknown) {4s}                    
## survey stations
# set xth(datafmt,station) {4s}                    
## lengths (tape, length, dxyz, etc...)
# set xth(datafmt,length) {6.2fx {-}}             
## counter
# set xth(datafmt,counter) {6.2f {-}}            
## bearing (compass)
# set xth(datafmt,bearing) {5.1fx {-}}             
## gradient (clino)
# set xth(datafmt,gradient) {{5.1fx} {up down -}} 
## depth
# set xth(datafmt,depth) {6.2fx {-}}            
## dimensions (up, down, etc...)
# set xth(datafmt,dimensions) {4.1fx {-}}             
## To specify formatting for custom data item us
# set xth(datafmt,XXX,format) 4.1f
## where XXX is compass, gradient or any other data item.
## To specify special values, use
# set xth(datafmt,XXX,special) 4.1f


# dzach layout improvements
if 0 {
  option add *Text.highlightThickness 1
  option add *Text.highlightBackground #008080
  option add *Text.highlightColor #ff8000
  option add *Entry.highlightThickness 1
  option add *Entry.highlightBackground #008080
  option add *Entry.highlightColor #ff8000
  option add *Entry.relief flat
  option add *Listbox.highlightThickness 1
  option add *Listbox.highlightBackground #008080
  option add *Listbox.highlightColor #ff8000
  option add *Listbox.relief flat
  option add *Scrollbar.width 14
  option add *Radiobutton*offRelief flat
  #option add *me.Background #e0f0f0
  set xth(gui,sbwidth) 15;#[.def.scrollbar cget -width]
  
  set xth(gui,ecolorbg) #ffffff
  set xth(gui,ecolorfg) black
  set xth(gui,ecolorselbg) #808080
  set xth(gui,ecolorselfg) #fff000
    
  # - dzach map colors
  set xth(gui,me,emptybg) #b0c2c2
  set xth(gui,me,mapbg) #f0f0f0
  set xth(gui,me,dselclr) #ffc000
  set xth(gui,me,highlightfill) #00b000  

  set xth(gui,efont) {courier -12}
  set xth(gui,me,point,psize) 5
  set xth(gui,me,line,psize) 3
  set xth(gui,me,line,width) 2
  set xth(gui,me,line,cpsize) 4
  set xth(gui,me,line,clwidth) 1  
}